# precompiled headers
PCH = 1

CFLAGS = -g -Wall -fno-rtti
LDFLAGS = 
EXTRAINCLUDES = 

LIBS = $(LDFLAGS)
INCLUDES = $(EXTRAINCLUDES)

VERSION = 0.1.0

OBJ = \
      Interaction.o \
      Mapping.o \
      Package.o \
      PackageTree.o \
      Transaction.o \
      TreeDir.o

all: libpi.so

ifeq ($(PCH),1)
all.h: ${shell ls *.h|grep -v all.h}
	rm -f all.h
	grep -h -e "^#include" *.cc *.h > all.h

all.h.gch: all.h
	$(CXX) $(INCLUDES) $(CFLAGS) all.h

PCHINC=-include all.h
PCHDEP=all.h.gch
else
PCHINC=
PCHDEP=
endif

clean:
	rm -f *.o *.d libpi.so* all.h all.h.gch test

.cc.o:
	$(CXX) -c $(INCLUDES) $(CFLAGS) $(PCHINC) $<

libpi.so: libpi.so.$(VERSION)
	ln -sf libpi.so.$(VERSION) libpi.so

libpi.so.$(VERSION): $(PCHDEP) $(OBJ)
	$(CXX) -shared -Wl,-soname,libpi.so.0 $(OBJ) -o libpi.so.$(VERSION) $(LIBS)

test:	libpi.so main.o
	$(CXX) main.cc -o test -L. -lpi $(CFLAGS)

%.d: %.cc
	@$(CC) -MM $(CPPFLAGS) $(INCLUDES) $< > $@.$$$$; \
		sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
		rm -f $@.$$$$

-include $(OBJ:.o=.d)

.PHONY: clean
