HDR = dict.h hashtable.h hb_tree.h pr_tree.h rb_tree.h sp_tree.h tr_tree.h\
	wb_tree.h
SRC = dict.c hashtable.c hb_tree.c pr_tree.c rb_tree.c sp_tree.c tr_tree.c\
	wb_tree.c
AOBJ = $(SRC:%.c=%.o)
POBJ = $(SRC:%.c=%.po)
SOBJ = $(SRC:%.c=%.So)

DEPDIR = .depend
DEP = $(SRC:%.c=$(DEPDIR)/%.dep)

LIB = dict
A_LIB = lib$(LIB).a
P_LIB = lib$(LIB)_p.a
S_LIB = lib$(LIB).so

CC ?= gcc
CFLAGS ?= -Wall -W -ansi -pedantic -DNDEBUG -g -O3

AR = ar
ARFLAGS = cru

PREFIX ?= /usr/local
BINDIR = $(PREFIX)/bin
LIBDIR = $(PREFIX)/lib
INCDIR = $(PREFIX)/include/dict
MANDIR = $(PREFIX)/man
INSTALL ?= install
LIBVER = 2
SHLIB = $(S_LIB).$(LIBVER)
USER ?= 0
GROUP ?= 0

all : $(A_LIB) $(P_LIB) $(S_LIB)

$(A_LIB) : $(AOBJ)
	$(AR) $(ARFLAGS) $(A_LIB) $(AOBJ)

$(P_LIB) : $(POBJ)
	$(AR) $(ARFLAGS) $(P_LIB) $(POBJ)

$(S_LIB) : $(SOBJ)
	$(CC) -shared -o $(S_LIB) $(SOBJ)

%.o: %.c
	$(CC) $(CFLAGS) -c $(<) -o $(@)

%.po: %.c
	$(CC) $(CFLAGS) -pg -c $(<) -o $(@)

%.So : %.c
	$(CC) $(CFLAGS) -fPIC -DPIC -c $(<) -o $(@)

.PHONY : clean
clean :
	rm -f $(AOBJ) $(POBJ) $(SOBJ) $(A_LIB) $(P_LIB) $(S_LIB)
	-rm -rf $(DEPDIR)

install : $(A_LIB) $(P_LIB) $(S_LIB)
	[ -d $(INCDIR) ] || mkdir -m 755 $(INCDIR)
	$(INSTALL) -m 644 $(HDR) $(INCDIR)
	$(INSTALL) -s -m 644 $(A_LIB) $(LIBDIR)
	$(INSTALL) -s -m 644 $(P_LIB) $(LIBDIR)
	$(INSTALL) -s -m 755 $(S_LIB) $(LIBDIR)/$(SHLIB)
	$(SHELL) -ec 'cd $(LIBDIR) && ln -sf $(SHLIB) $(S_LIB)'

uninstall :
	-rm -rf $(INCDIR)
	-rm -f $(LIBDIR)/$(A_LIB)
	-rm -f $(LIBDIR)/$(S_LIB)

test : test.c $(A_LIB)
	$(CC) $(CFLAGS) -o $(@) $(<) $(A_LIB)
demo : demo.c $(A_LIB)
	$(CC) $(CFLAGS) -o $(@) $(<) $(A_LIB)

$(DEPDIR)/%.dep : %.c
	@$(SHELL) -c '[ -d $(DEPDIR) ] || mkdir $(DEPDIR)'
	@$(SHELL) -ec 'echo -n "Rebuilding dependencies for $< - "; \
		$(CC) -M $(CFLAGS) $< > $@; \
		sed "s/^$(<:%.c=%.o)/& $(<:%.c=%.po) $(<:%.c=%.So)/" $@ > $(DEPDIR)/$(<:%.c=%.dep2); \
		mv -f $(DEPDIR)/$(<:%.c=%.dep2) $@; \
		echo ok.'

-include $(DEP)


syntax highlighted by Code2HTML, v. 0.9.1