SRC_DIR = $(SRC_TREE)/condor_classad.V6

/* select required features */


C_PLUS_FLAGS 		= -Wall $(STD_C_PLUS_FLAGS)
CFLAGS 			= -Wall $(STD_C_FLAGS)


/* The basic classad source and object files */
CLASSAD_SRC_0 		= debug.cpp lexer.cpp lexerSource.cpp source.cpp operators.cpp attrrefs.cpp fnCall.cpp   \
                      literals.cpp exprTree.cpp classad.cpp exprList.cpp value.cpp \
                      instantiations.cpp sink.cpp matchClassad.cpp condorUtil.cpp      \
                      util.cpp xmlLexer.cpp xmlSink.cpp xmlSource.cpp cclassad.cpp
CLASSAD_OBJ_0 		= debug.o lexer.o lexerSource.o source.o operators.o attrrefs.o fnCall.o   \
                      literals.o exprTree.o classad.o exprList.o value.o \
                      instantiations.o sink.o  matchClassad.o condorUtil.o     \
                      util.o xmlLexer.o xmlSink.o xmlSource.o cclassad.o


/* Are collections required? */
#if defined(COLLECTIONS)
CLASSAD_SRC_1		= $(CLASSAD_SRC_0) view.cpp collection.cpp collectionBase.cpp   \
                      collectionServer.cpp collectionClient.cpp transaction.cpp     \
                      query.cpp remoteQuery.cpp coll-comm-inst.cpp coll-serv-inst.cpp \
                      coll-client-inst.cpp indexfile.cpp 
CLASSAD_OBJ_1		= $(CLASSAD_OBJ_0) view.o collection.o collectionBase.o   \
                      collectionServer.o collectionClient.o transaction.o     \
                      query.o remoteQuery.o	coll-comm-inst.o coll-serv-inst.o \
                      coll-client-inst.o indexfile.o
#else
CLASSAD_SRC_1		= $(CLASSAD_SRC_0)
CLASSAD_OBJ_1		= $(CLASSAD_OBJ_0)
#endif


/* Are experimental features required? */
#if defined(EXPERIMENTAL)
CLASSAD_SRC_2		= $(CLASSAD_SRC_1) rectangle.cpp intervalTree.cpp compress.cpp\
						queryProcessor.cpp exp-inst.cpp
CLASSAD_OBJ_2		= $(CLASSAD_OBJ_1) rectangle.o intervalTree.o compress.o\
						queryProcessor.o exp-inst.o
#else
CLASSAD_SRC_2		= $(CLASSAD_SRC_1)
CLASSAD_OBJ_2		= $(CLASSAD_OBJ_1)
#endif

#if defined(CLASSAD_DEPRECATED)
CLASSAD_SRC_3		= $(CLASSAD_SRC_2) classad_deprecated.cpp
CLASSAD_OBJ_3		= $(CLASSAD_OBJ_2) classad_deprecated.o

#else
CLASSAD_SRC_3		= $(CLASSAD_SRC_2)
CLASSAD_OBJ_3		= $(CLASSAD_OBJ_2)
#endif


SRC = $(CLASSAD_SRC_3) ../condor_c++_util/condor_attributes.cpp
OBJ = $(CLASSAD_OBJ_3) ../condor_c++_util/condor_attributes.o


LIB_BASE =  ./libclassad.a ../condor_c++_util/cplus_lib.a \
      ../condor_util_lib/util_lib.a \
      ../condor_c++_util/cplus_lib.a ../condor_util_lib/util_lib.a \
      ../condor_util_lib/util_lib.a ../condor_sysapi/libsysapi.a \
      $(STLPORT_LIB)

#if defined(CLASSAD_DEPRECATED)
LIB = $(LIB_BASE) $(IO_LIB) $(SECURITY_LIB) $(CPLUS_LIB) $(SECURITY_LIB) 
#else
LIB = $(LIB_BASE)
#endif

/* the main condor library target */
all_target(libclassad.a classad_functional_tester classad_unit_tester classad_version test_xml extra_tests)
library_target(libclassad.a,$(OBJ))

release:: all

/* template instantiations go in here */

/* Standalone distribution of classads/collections */
DIST_VERSION = 1.0
DISTRIBUTION_DIR = classads-$(DIST_VERSION)

DIST_FILES = 								\
	attrrefs.cpp classad.cpp classad_functional_tester.cpp		\
	classad_unit_tester.cpp classad_version.cpp collection.cpp		\
	collectionBase.cpp cxi.cpp debug.cpp exprList.cpp exprTree.cpp		\
	extra_tests.cpp fnCall.cpp indexfile.cpp instantiations.cpp lexer.cpp	\
	lexerSource.cpp literals.cpp matchClassad.cpp operators.cpp query.cpp	\
	sample.cpp shared.cpp sink.cpp source.cpp test_instantiations.cpp		\
	test_xml.cpp tests.txt transaction.cpp util.cpp value.cpp view.cpp	\
	xmlLexer.cpp xmlSink.cpp xmlSource.cpp cclassad.cpp README		\
	CHANGELOG configure.ac Makefile.am.m4 functional_tests.txt	\
	ClassAd.swg classads.spec classad_functional_tester.h		\
	NOTICE.txt LICENSE-2.0.txt

H_FILES = 								\
	classad/attrrefs.h classad/cclassad.h				\
	classad/classad_distribution.h classad/classadErrno.h		\
	classad/classad.h classad/classadItor.h classad/classad_stl.h	\
	classad/collectionBase.h classad/collection.h classad/common.h	\
	classad/debug.h classad/exprList.h classad/exprTree.h		\
	classad/fnCall.h classad/indexfile.h classad/lexer.h		\
	classad/lexerSource.h classad/literals.h			\
	classad/matchClassad.h classad/operators.h classad/query.h	\
	classad/sink.h classad/source.h classad/transaction.h		\
	classad/util.h classad/value.h classad/view.h			\
	classad/xmlLexer.h classad/xmlSink.h classad/xmlSource.h

WIN32_FILES = win32/classad_dist.dsw				\
win32/classad_functional_tester.dep				\
win32/classad_functional_tester.dsp				\
win32/classad_functional_tester.mak win32/classad_lib.dep	\
win32/classad_lib.dsp win32/classad_lib.mak			\
win32/classad_unit_tester.dep win32/classad_unit_tester.dsp	\
win32/classad_unit_tester.mak win32/make.bat

dist: $(DIST_FILES)
	chmod 664 $(DIST_FILES)
	chmod 664 $(WIN32_FILES)
	chmod 775 win32/make.bat
	rm -rf $(DISTRIBUTION_DIR) *.gz
	mkdir $(DISTRIBUTION_DIR)
	mkdir $(DISTRIBUTION_DIR)/win32
	mkdir -p $(DISTRIBUTION_DIR)/perl/lib/ClassAd
	mkdir $(DISTRIBUTION_DIR)/perl/t
	mkdir $(DISTRIBUTION_DIR)/classad
	cp build_external $(DISTRIBUTION_DIR)/build_classads-$(DIST_VERSION)
	chmod 755 $(DISTRIBUTION_DIR)/build_classads-$(DIST_VERSION)
	cp $(DIST_FILES) $(DISTRIBUTION_DIR)
	cp $(H_FILES) $(DISTRIBUTION_DIR)/classad
	cp $(WIN32_FILES) $(DISTRIBUTION_DIR)/win32
# Originally this line was simpler, but it ended in an asterisk,
# and that caused condor_imake problems.
	find $(DISTRIBUTION_DIR)/win32/ -type f | xargs unix2dos
	cp perl/Simple.pm $(DISTRIBUTION_DIR)/perl/lib/ClassAd
	cp perl/basic.t $(DISTRIBUTION_DIR)/perl/t
	(cd $(DISTRIBUTION_DIR) ; m4 Makefile.am.m4 > Makefile.am)
	(cd $(DISTRIBUTION_DIR) ; chmod a-w Makefile.am)
	(cd $(DISTRIBUTION_DIR) ; autoreconf --install)
	(cd $(DISTRIBUTION_DIR) ; rm -rf autom4te.cache)
	tar cf $(DISTRIBUTION_DIR).tar $(DISTRIBUTION_DIR)
	gzip $(DISTRIBUTION_DIR).tar
	chmod 664 $(DISTRIBUTION_DIR).tar.gz

/* Rule to make documentation */
doc: html

#ifdef ENABLE_SHARED_LIBRARY_FUNCTIONS
shared:
	g++ -fPIC -shared -o libshared.so shared.cpp
#endif

/* Also depends on several header files, but I am ignoring that for now */
html_target( documentation )

clean::
	rm -f -r *.o *.gz html

/* The Classad eXpression Interpreter */
#ifdef ENABLE_SHARED_LIBRARY_FUNCTIONS
LDFLAGS =  -Xlinker --export-dynamic -ldl
#endif

c_plus_target (cxi, cxi.o, $(LIB))
c_plus_target (test_classads, test_classads.o test_instantiations.o, $(LIB))
c_plus_target (classad_functional_tester, classad_functional_tester.o test_instantiations.o, $(LIB))
c_plus_target (classad_unit_tester, classad_unit_tester.o, $(LIB))
c_plus_target (classad_version, classad_version.o, $(LIB))
c_plus_target (test_xml, test_xml.o, $(LIB))
c_plus_target (extra_tests, extra_tests.o, $(LIB))
c_plus_target (sample, sample.o, $(LIB))
c_plus_target (man_cache_test, man_cache_test.o, $(LIB))

