#define AllFiles etc include src lib libexec bin sbin sql man

#if NEEDS_KBDD
#   define KbddProgs kbdd
#else
#   define KbddProgs
#endif

#if !defined(DOES_CHECKPOINTING)
#   define standalone
#endif

#define StdUnvProgs shadow.std starter.std 
#define StdUnvLibs ckpt syscall_lib

#if HAVE_EXT_CLASSADS && HAVE_EXT_GLOBUS
#define CreddProgs credd
#else
#define CreddProgs
#endif

#if HAVE_EXT_CLASSADS && WANT_QUILL
#define JobRouterProgs job_router
#else
#define JobRouterProgs
#endif

#if WANT_NETMAN
#define NetmanLibs netman
#define Eventd eventd
#define EventdTar eventd.tar
#else
#define NetmanLibs
#define Eventd
#define EventdTar
#endif

#if WANT_CLASSAD_ANALYSIS
#define AnalysisLibs ClassAdAnalysis
#else
#define AnalysisLibs
#endif

#if WANT_STORK
#define StorkProgs Stork
#else
#define StorkProgs
#endif

#ifdef WANT_QUILL
#define TTProgs tt dbmsd
#else
#define TTProgs
#endif

#if WANT_LEASE_MANAGER
# define LeaseManagerProgs lease_manager
#else
# define LeaseManagerProgs
#endif

#if HAVE_EXT_OPENSSL && HAVE_EXT_GSOAP && !IS_AIX
#define EC2 amazon
#else
#define EC2
#endif

#if HAVE_EXT_GLOBUS
#define GlobusGahps GT2_GAHP NORDUGRID_GAHP GT4_GAHP GT42_GAHP
#else
#define GlobusGahps
#endif

#define Programs \
		procapi sysapi unit_tests ckpt_server \
		master.V6 negotiator.V6 schedd.V6 prio q.V6 rm.V6 \
		scripts startd.V6 StdUnvProgs submit.V6 status.V6 \
		tools KbddProgs collector.V6 dagman userlog Eventd \
		gridmanager starter.V6.1 shadow.V6.1 dcskel c-gahp had \
		CreddProgs StorkProgs LeaseManagerProgs \
		TTProgs DeploymentTools \
		eventd.V2 transferd procd privsep vm-gahp EC2 \
		JobRouterProgs GlobusGahps startd_factory \
		power

#define Libraries \
		util_lib daemon_core.V6 daemon_client target-classad.old c++_util	\
		condor_procapi/libprocapi.a condor_sysapi/libsysapi.a	\
		io condor_ckpt_server/ckpt_server_api.a			\
		condor_schedd.V6/libqmgmt.a				\
		StdUnvLibs NetmanLibs	\
		condor_procd/procd_client.a \
		condor_privsep/privsep_client.a \
		chirp AnalysisLibs


#if HAS_STATIC
#define StaticDirectories \
	static_dir static_dir/bin static_dir/sbin static_dir/lib \
	static_dir/libexec static_dir/libexec/glite \
	static_dir/etc static_dir/etc/examples static_dir/include \
	static_dir/src static_dir/src/chirp static_dir/src/drmaa \
	static_dir/src/startd_factory \
	static_dir/src/startd_factory/BlueGeneP \
	static_dir/man static_dir/man/man1 \
	static_dir/lib/webservice \
	static_dir/sql \
	static_contrib static_contrib/bin static_contrib/lib \
	static_contrib/sbin static_contrib/etc \
	static_contrib/etc/examples static_contrib/include \
	static_contrib/sql
#else
#define StaticDirectories
#endif

#define Directories \
	html condor_release testbin_dir \
	release_dir release_dir/bin release_dir/lib release_dir/sbin \
	release_dir/libexec release_dir/libexec/glite \
	release_dir/include release_dir/src release_dir/src/chirp \
	release_dir/src/drmaa \
	release_dir/src/startd_factory \
	release_dir/src/startd_factory/BlueGeneP \
	release_dir/man release_dir/man/man1 pure_bin \
	release_dir/lib/webservice \
	release_dir/etc release_dir/etc/examples \
	release_dir/sql \
	strip_dir strip_dir/bin strip_dir/sbin strip_dir/lib \
	strip_dir/libexec strip_dir/libexec/glite \
	strip_dir/etc strip_dir/etc/examples strip_dir/include \
	strip_dir/src strip_dir/src/chirp strip_dir/src/drmaa \
	strip_dir/src/startd_factory \
	strip_dir/src/startd_factory/BlueGeneP \
	strip_dir/man strip_dir/man/man1 \
	strip_dir/lib/webservice \
	strip_dir/sql \
	strip_contrib strip_contrib/bin strip_contrib/lib \
	strip_contrib/sbin strip_contrib/etc \
	strip_contrib/sql \
	strip_contrib/etc/examples strip_contrib/include StaticDirectories

all: h h_all externals condor_includes makefiles Directories Libraries \
	Programs examples
release:: all
stripped:: all
static:: all
testbin:: release
libs:: h h_all externals condor_includes makefiles Directories Libraries
externals::

simple_dir_target(testbin_dir)
simple_dir_target(release_dir)
simple_dir_target(release_dir/bin)
simple_dir_target(release_dir/lib)
simple_dir_target(release_dir/libexec)
simple_dir_target(release_dir/libexec/glite)
simple_dir_target(release_dir/sbin)
simple_dir_target(release_dir/etc)
simple_dir_target(release_dir/etc/examples)
simple_dir_target(release_dir/include)
simple_dir_target(release_dir/src)
simple_dir_target(release_dir/src/chirp)
simple_dir_target(release_dir/src/drmaa)
simple_dir_target(release_dir/src/startd_factory)
simple_dir_target(release_dir/src/startd_factory/BlueGeneP)
simple_dir_target(release_dir/man)
simple_dir_target(release_dir/man/man1)
simple_dir_target(release_dir/lib/webservice)
simple_dir_target(release_dir/sql)

simple_dir_target(pure_bin)

simple_dir_target(strip_dir)
simple_dir_target(strip_dir/bin)
simple_dir_target(strip_dir/lib)
simple_dir_target(strip_dir/libexec)
simple_dir_target(strip_dir/libexec/glite)
simple_dir_target(strip_dir/sbin)
simple_dir_target(strip_dir/etc)
simple_dir_target(strip_dir/etc/examples)
simple_dir_target(strip_dir/include)
simple_dir_target(strip_dir/src)
simple_dir_target(strip_dir/src/chirp)
simple_dir_target(strip_dir/src/drmaa)
simple_dir_target(strip_dir/src/startd_factory)
simple_dir_target(strip_dir/src/startd_factory/BlueGeneP)
simple_dir_target(strip_dir/man)
simple_dir_target(strip_dir/man/man1)
simple_dir_target(strip_dir/lib/webservice)
simple_dir_target(strip_dir/sql)

simple_dir_target(strip_contrib)
simple_dir_target(strip_contrib/bin)
simple_dir_target(strip_contrib/lib)
simple_dir_target(strip_contrib/libexec)
simple_dir_target(strip_contrib/sbin)
simple_dir_target(strip_contrib/etc)
simple_dir_target(strip_contrib/etc/examples)
simple_dir_target(strip_contrib/include)
simple_dir_target(strip_contrib/sql)

#if HAS_STATIC
simple_dir_target(static_dir)
simple_dir_target(static_dir/bin)
simple_dir_target(static_dir/lib)
simple_dir_target(static_dir/libexec)
simple_dir_target(static_dir/libexec/glite)
simple_dir_target(static_dir/sbin)
simple_dir_target(static_dir/etc)
simple_dir_target(static_dir/etc/examples)
simple_dir_target(static_dir/include)
simple_dir_target(static_dir/src)
simple_dir_target(static_dir/src/chirp)
simple_dir_target(static_dir/src/drmaa)
simple_dir_target(static_dir/src/startd_factory)
simple_dir_target(static_dir/src/startd_factory/BlueGeneP)
simple_dir_target(static_dir/man)
simple_dir_target(static_dir/man/man1)
simple_dir_target(static_dir/lib/webservice)
simple_dir_target(static_dir/sql)
simple_dir_target(static_contrib)
simple_dir_target(static_contrib/bin)
simple_dir_target(static_contrib/lib)
simple_dir_target(static_contrib/libexec)
simple_dir_target(static_contrib/sbin)
simple_dir_target(static_contrib/etc)
simple_dir_target(static_contrib/etc/examples)
simple_dir_target(static_contrib/include)
simple_dir_target(static_contrib/src)
simple_dir_target(static_contrib/sql)
#endif /* HAS_STATIC */

condor_object_target(util_lib)
condor_object_target(c++_util)
condor_object_target(procapi)
condor_object_target(sysapi)
condor_object_target(unit_tests)
condor_object_target(tools)
condor_object_target(power)
condor_object_target(examples)
#if WANT_NETMAN
condor_object_target(eventd)
#endif
condor_object_target(ckpt_server)

condor_object_target(shadow.std)
condor_object_target(transferd)
condor_object_target(starter.std)

#ifdef WANT_QUILL
condor_object_target(quill)
condor_object_target(tt)
condor_object_target(dbmsd)
#endif

condor_object_target(startd.V6)
condor_object_target(schedd.V6)
condor_object_target(had)
condor_object_target(status.V6)
condor_object_target(dagman)
condor_object_target(userlog)

#if WANT_LEASE_MANAGER
condor_object_target(lease_manager)
#endif

#if NEEDS_KBDD
   condor_object_target(kbdd)
#endif
condor_object_target(negotiator.V6)
condor_object_target(collector.V6)
condor_object_target(master.V6)
condor_object_target(q.V6)
condor_object_target(rm.V6)
condor_object_target(submit.V6)
condor_object_target(eventd.V2)

condor_object_target(ckpt)
condor_object_target(syscall_lib)

#if WANT_NETMAN
condor_object_target(netman)
#endif
condor_object_target(io)
object_target(target-classad.old,classad.old)
condor_object_target(daemon_core.V6)
condor_object_target(daemon_client)
condor_object_target(prio)
condor_object_target(scripts)
condor_object_target(gridmanager)

#if HAVE_EXT_CLASSADS && HAVE_EXT_GLOBUS
	condor_object_target(credd)
#endif
#if HAVE_EXT_CLASSADS
	condor_object_target(job_router)
#endif
condor_object_target(starter.V6.1)
condor_object_target(shadow.V6.1)
condor_object_target(c-gahp)
condor_object_target(procd)
condor_object_target(privsep)
condor_object_target(dcskel)
condor_object_target(startd_factory)
condor_object_target(vm-gahp)

#if HAVE_EXT_OPENSSL && HAVE_EXT_GSOAP
condor_object_target(amazon)
#endif

#if HAVE_EXT_DRMAA
condor_object_target(drmaa)
#endif

#if WANT_CLASSAD_ANALYSIS
object_target(ClassAdAnalysis,classad_analysis)
#endif

condor_object_target(chirp)

object_dir_target(h)
object_dir_target(condor_includes)
object_dir_target(condor_release)
object_dir_target(html)
object_dir_target(condor_bypass)
object_dir_target(condor_sdk)
#if WANT_STORK
object_target(Stork,stork)
#endif


#if HAVE_EXT_GLOBUS
object_target(GT2_GAHP,gt2_gahp)
object_target(GT4_GAHP,gt4_gahp)
object_target(GT42_GAHP,gt42_gahp)
object_target(NORDUGRID_GAHP,nordugrid_gahp)
#endif

object_target(DeploymentTools,deployment_tools)

single_target(condor_procapi,libprocapi.a)
single_target(condor_procd,procd_client.a)
single_target(condor_privsep,privsep_client.a)
single_target(condor_sysapi,libsysapi.a)
single_target(condor_schedd.V6,libqmgmt.a)
single_target(condor_ckpt_server,ckpt_server_api.a)

condor_object_target(tests)

h_all: h/Makefile h/syscall_numbers.h h/syscall_numbers.o

makefiles:: h/Makefile

h/Makefile: h h/Imakefile
	cd h; ../condor_imake

h/syscall_numbers.h: h/syscall_numbers.tmpl h/Makefile
	cd h; $(MAKE) syscall_numbers.h

h/syscall_numbers.o: h/syscall_numbers.tmpl h/Makefile
	cd h; $(MAKE) syscall_numbers.o

#if HAVE_CC_SHARED_FLAG
LIBCONDORAPI = libcondorapi.a libcondorapi.so
TEST_LIBCONDORAPI = test_libcondorapi test_libcondorapi_shared
#else
LIBCONDORAPI = libcondorapi.a
TEST_LIBCONDORAPI = test_libcondorapi
#endif

libcondorapi: h h_all externals condor_includes makefiles Directories
	cd condor_c++_util && $(MAKE) $(LIBCONDORAPI) $(TEST_LIBCONDORAPI)

libcondorapi-release: libcondorapi
	cd condor_c++_util && $(MAKE) libcondorapi-release

check_platform_target

clean:: 
	cd h; $(MAKE) clean
	$(MAKE) clean-up

really-clean:: clean-up

clean-up:
	rm -rf *.out Makefile */Makefile* release_* \
		strip_dir strip_contrib static_dir static_unstrip_dir \
		static_contrib pure_bin testbin_dir

reallyclean: really-clean

htmldocs: html docs
	cd html; ./build_doc++_index

#if HAS_EXTERNALS

#if HAVE_EXT_ZLIB
ext_target(EXT_ZLIB_VERSION,$(NULL))
#endif

#if HAVE_EXT_GLIBC
#if HAVE_EXT_LINUXLIBCHEADERS
ext_target(EXT_LINUXLIBCHEADERS_VERSION,$(NULL))
ext_target(EXT_GLIBC_VERSION,$(EXT_TRIGGER)/$(EXT_LINUXLIBCHEADERS_VERSION))
#else
ext_target(EXT_GLIBC_VERSION,$(NULL))
#endif
#endif

#if HAVE_EXT_KRB5
ext_target(EXT_KERBEROS_VERSION,$(NULL))
#endif

#if HAVE_EXT_OPENSSL
ext_target(EXT_OPENSSL_VERSION,$(NULL))
#endif

#if HAVE_EXT_GLOBUS
ext_target(EXT_GLOBUS_VERSION,$(EXT_TRIGGER)/$(EXT_OPENSSL_VERSION))
#endif

#if HAVE_EXT_UNICOREGAHP
ext_target(EXT_UNICOREGAHP_VERSION,$(NULL))
#endif

#if HAVE_EXT_BLAHP
ext_target(EXT_BLAHP_VERSION,$(EXT_TRIGGER)/$(EXT_GLOBUS_VERSION) $(EXT_TRIGGER)/$(EXT_CLASSADS_VERSION))
#endif

#if HAVE_EXT_MAN
ext_nodep_target(EXT_MAN_VERSION,$(NULL))
#endif

#if HAVE_EXT_CLASSADS
ext_target(EXT_CLASSADS_VERSION, $(NULL))
#endif

#if HAVE_EXT_GSOAP
ext_target(EXT_GSOAP_VERSION,$(EXT_TRIGGER)/$(EXT_OPENSSL_VERSION))
#endif

#if HAVE_EXT_PCRE
ext_target(EXT_PCRE_VERSION,$(NULL))
#endif

#if HAVE_EXT_GCB
ext_target(EXT_GCB_VERSION,$(NULL))
#endif

#if HAVE_EXT_COREDUMPER
ext_target(EXT_COREDUMPER_VERSION,$(NULL))
#endif

#if HAVE_EXT_DRMAA
ext_target(EXT_DRMAA_VERSION,$(NULL))
#endif

#if HAVE_EXT_POSTGRESQL
ext_target(EXT_POSTGRESQL_VERSION,$(NULL))

testbin_dir/$(EXT_POSTGRESQL_VERSION): $(EXT_TRIGGER)/$(EXT_POSTGRESQL_VERSION)
	/bin/rm -rf testbin_dir/$(EXT_POSTGRESQL_VERSION)
	cp -r $(EXT_INSTALL)/$(EXT_POSTGRESQL_VERSION) testbin_dir
testbin:: testbin_dir/$(EXT_POSTGRESQL_VERSION)
#endif

#endif /* HAS_EXTERNALS */

clean::
	rm -rf $(PURE_DIR)

today:
	/bin/rm -f condor_c++_util/condor_version.o
	cd condor_c++_util; $(MAKE)


#if HAS_STATIC
#define StaticTar static.tar 
static.tar: static manpages
	rm -f static_dir/release.tar
	cd static_dir; $(TAR_CMD) -cvf release.tar AllFiles
#else
#define StaticTar
#endif 

#if HAVE_DEBUGLINK_TARBALL

#define DebugLinkTar debugsyms.tar

strip.tar: stripped manpages
	rm -f strip_dir/release.tar
	cd strip_dir && $(TAR_CMD) -cvf release.tar --exclude="*.dbg" AllFiles

debugsyms.tar: stripped manpages
	rm -f strip_dir/debugsyms.tar
	rm -f strip_dir/debug_files.*
	cd strip_dir && $(FIND) AllFiles -name "*.dbg" -print > debug_files.$$$$ && $(TAR_CMD) -cvf debugsyms.tar --files-from debug_files.$$$$ && rm -f debug_files.$$$$

#else

#define DebugLinkTar 

strip.tar: stripped manpages
	rm -f strip_dir/release.tar
	cd strip_dir; $(TAR_CMD) -cvf release.tar AllFiles

#endif /* HAVE_DEBUGLINK_TARBALL */

unstrip.tar: release manpages
	rm -f release_dir/release.tar
	cd release_dir; $(TAR_CMD) -cvf release.tar AllFiles

all_tarballs: strip.tar unstrip.tar StaticTar DebugLinkTar

public: release all_tarballs
	if test ! -d ../public; then mkdir ../public; fi
	perl condor_scripts/make_final_tarballs --sys=$(SYSNAME) --tarcmd="$(TAR_CMD)" --cpcmd="$(CP_CMD)" --target=../public
	$(MakeRPMs)


#if HAVE_EXT_MAN

/*
 * This is only used if HAS_EXTERNALS is NO, and is currently somewhat
 * ugly in that it creates MAN_DIR and leaves it sitting around outside
 * the build directory. Also, because of how MAN_DIR can be set in
 * configure.ac, man-current.tar.gz needs to create a man/ when it is
 * extracted. -matt 083107
 */
real_man_dir=$(shell dirname $(MAN_DIR))
man-current: $(real_man_dir)/man-current.tar.gz
	(cd $(real_man_dir) ; gzip -cd man-current.tar.gz | tar x)

man_target(condor_advertise.1)
man_target(condor_check_userlogs.1)
man_target(condor_checkpoint.1)
man_target(condor_chirp.1)
man_target(condor_cod.1)
man_target(condor_cold_start.1)
man_target(condor_cold_stop.1)
man_target(condor_compile.1)
man_target(condor_configure.1)
man_target(condor_config_bind.1)
man_target(condor_config_val.1)
#ifdef WANT_QUILL
man_target(condor_convert_history.1)
#endif
man_target(condor_dagman.1)
man_target(condor_fetchlog.1)
man_target(condor_findhost.1)
man_target(condor_glidein.1)
man_target(condor_history.1)
man_target(condor_hold.1)
#ifdef WANT_QUILL
man_target(condor_load_history.1)
#endif
man_target(condor_master.1)
man_target(condor_master_off.1)
man_target(condor_off.1)
man_target(condor_on.1)
man_target(condor_preen.1)
man_target(condor_prio.1)
man_target(condor_q.1)
man_target(condor_qedit.1)
man_target(condor_reconfig.1)
man_target(condor_reconfig_schedd.1)
man_target(condor_release.1)
man_target(condor_reschedule.1)
man_target(condor_restart.1)
man_target(condor_rm.1)
man_target(condor_run.1)
man_target(condor_stats.1)
man_target(condor_status.1)
man_target(condor_store_cred.1)
man_target(condor_submit.1)
man_target(condor_submit_dag.1)
man_target(condor_transfer_data.1)
man_target(condor_updates_stats.1)
man_target(condor_userlog.1)
man_target(condor_userprio.1)
man_target(condor_vacate.1)
man_target(condor_vacate_job.1)
man_target(condor_version.1)
man_target(condor_wait.1)
#else
manpages::
	@echo "You're trying to package Condor but you don't want man pages!"
	@exit 1
#endif

