INSTALL_DIR = /usr/include

# This include will redefine INSTALL_DIR, if Makefile.config exists
include Makefile.config

all: libclassad.a test_classads sample

LIB_INSTALL = $(INSTALL_DIR)/lib
BIN_INSTALL = $(INSTALL_DIR)/bin
INCLUDE_INSTALL = $(INSTALL_DIR)/include

CPlusPlus = g++
C_PLUS_FLAGS = -Wall -g -DCLASSAD_DISTRIBUTION -O2
INST_C_PLUS_FLAGS = $(C_PLUS_FLAGS) -w
NO_INST_C_PLUS_FLAGS = -fno-implicit-templates $(C_PLUS_FLAGS)
PURIFY = purify -g++=yes -chain-length=35 $(CPlusPlus)

.C.o:
	$(CPlusPlus) $(NO_INST_C_PLUS_FLAGS) -c $<

LIB_OBJ = attrrefs.o classad.o cclassad.o collection.o collectionBase.o debug.o \
exprList.o exprTree.o fnCall.o lexer.o literals.o matchClassad.o \
operators.o query.o sink.o source.o transaction.o value.o \
view.o xmlSink.o instantiations.o 

HEADER_FILES = $(shell \ls *.[h])

libclassad.a:  $(LIB_OBJ)
	rm -f  libclassad.a
	ar vrs libclassad.a  $(LIB_OBJ)

instantiations.o:   instantiations.C
	$(CPlusPlus) $(INST_C_PLUS_FLAGS) -c instantiations.C -o instantiations.o

test_classads: test_classads.o libclassad.a
	$(CPlusPlus) -o test_classads test_classads.o -L. -lclassad

test_classads.pure: test_classads.o libclassad.a
	$(PURIFY) -o test_classads.pure test_classads.o -L. -lclassad

sample: sample.o libclassad.a
	$(CPlusPlus) -o sample sample.o -L. -lclassad

install:: libclassad.a test_classads
	mkdir -p $(LIB_INSTALL)
	mkdir -p $(BIN_INSTALL)
	mkdir -p $(INCLUDE_INSTALL)
	cp libclassad.a $(LIB_INSTALL)
	cp test_classads $(BIN_INSTALL)
	cp $(HEADER_FILES) $(INCLUDE_INSTALL)

clean: tidy
	rm -f test_classads test_classads.pure libclassad.a
tidy:
	rm -f *.o *~ *.bak

