#	Makefile for the PIRL Java packages.
#
#	gmake syntax.
#
# PIRL CVS ID: Makefile,v 2.13 2012/04/18 22:30:17 castalia Exp

TITLE				:=	PIRL Java Packages
R := R
CVS_ID				:=	[Makefile 2.13]


#	Installation location for the application wrappers.
INSTALL_DIR			?=	/opt/local/sh

#	The order of packages matters: put packages after their dependencies.
PACKAGES			:=	Utilities \
						Strings \
						TreeTable \
						PVL \
						Configuration \
						Messenger \
						Viewers \
						Database \
						Conductor \
						Image_Tools

#	Subpackages to be included in the javadoc.
SUBPACKAGES			:=	PIRL.Conductor.Maestro \
						PIRL.Conductor.Pipeline_Configuration

#	Distribution version.
VERSION				:=	$(shell grep '^[0-9]' VERSION)
ifeq ($(strip $(VERSION)),)
VERSION				:=  0.0
endif


#	Third party jars:

#	The location of the MySQL JDBC driver.
MySQL_JDBC_DIR		?=	/opt/java/mysql-connector
MySQL_JDBC_JAR		?=	mysql-connector.jar
MySQL				:=	$(MySQL_JDBC_DIR)/$(MySQL_JDBC_JAR)

#	The location of the PostgreSQL JDBC driver.
PostgreSQL_JDBC_DIR	?=	/opt/java/PostgreSQL
PostgreSQL_JDBC_JAR	?=	postgresql.jar
PostgreSQL			:=	$(PostgreSQL_JDBC_DIR)/$(PostgreSQL_JDBC_JAR)

#	The location of the Java Components for Mathematics.
JCM_DIR				?=	/opt/java/jcm
JCM_DATA_JAR		?=	jcm_data.jar
JCM					:=	$(JCM_DIR)/$(JCM_DATA_JAR)

#	The location of the SwingLabs Swing Component Extensions.
SwingX_DIR			?= 	/opt/java/SwingX
SwingX_JAR			?=	swingx.jar
SwingX				:=	$(SwingX_DIR)/$(SwingX_JAR)

#	The location of the Apache Commons Comand Line Interface package.
Commons_CLI_DIR		?=	/opt/java/commons-cli
Commons_CLI_JAR		?=	commons-cli.jar
Commons_CLI			:=	$(Commons_CLI_DIR)/$(Commons_CLI_JAR)

#	The location of the JavaX JavaMail package.
JavaMail_DIR		?=	/opt/java/javamail
JavaMail_JAR		?=	mail.jar
JavaMail			:=	$(JavaMail_DIR)/$(JavaMail_JAR)

#	Java CLASSPATH for the packages and their dependencies.
JPATH				?=	../../:$(MySQL):$(PostgreSQL):$(JCM):$(SwingX):$(Commons_CLI):$(JavaMail)


#	The location where the generated PIRL javadocs will be installed.
PIRL_DOCS_DIR		?=	../docs

#	The location of the Sun JFC documentation (package-list file).
#		Change this URL to your local installation if preferred.
JAVA_DOCS_DIR		?=	http://PIRL.LPL.Arizona.edu/resources/guide/software/Java/api
#JAVA_DOCS_DIR		?=	/opt/java/docs/api


#	Distributions:

#	The location for distribution files.
DIST_DIR			?=	/data/ftp/pub/Java

#	Versioned directory to contain released files.
PIRL_VERSION		:=	PIRL-$(VERSION)

#	PIRL tarball.
PIRL_TARBALL		:=	$(PIRL_VERSION).tar.gz

#	PIRL jar.
PIRL_JAR			:=	$(PIRL_VERSION).jar

#	PIRL javadocs.
PIRL_JAVADOC		:=	PIRL-javadoc-$(VERSION).tar.gz

#	Application wrappers and their config files.
APPLICATIONS		:=	Configuration/Configuration \
						Conductor/Conductor \
						Conductor/Create_Pipeline \
						Conductor/Notify \
						Conductor/Pipeline_Source \
						Conductor/Pipeline_Source_Manager \
						Conductor/Evaluate \
						Conductor/Maestro/Kapellmeister \
						Conductor/Maestro/Stage_Manager \
						Conductor/Maestro/Manage_Stage_Manager \
						Conductor/Pipeline_Configuration/Pipeline_Configuration \
						Database/Data_View \
						Database/Query_DB \
						Database/Update_DB \
						PVL/PVL_to_DB \
						Image_Tools/JP2_Info \
						Image_Tools/JPEG2000_Codestream_Info

CONFIGURATIONS		:=	Conductor/Conductor.conf \
						Conductor/Maestro/Kapellmeister.conf \
						Conductor/Maestro/Stage_Manager.conf \
						Database/Database.conf


#	Fully qualified package names.
PACKAGE_PATHS		:=	$(PACKAGES:%=PIRL.%)

#	Distribution boilerplate files.
BOILERPLATE			:=	README \
						Copyright_Notice.GPL \
						LICENSE_GPL_3 \
						LICENSE_LGPL_3


#	Targets:

all:			.BEGIN packages .END

packages:		$(PACKAGES)
$(PACKAGES):
	@echo
	@echo "--> $@"
	$(MAKE) -C ../$@ $(TARGET)


#	Documentation
docs:
	@echo
	@echo "--- Building the documentation"
	javadoc \
		-d $(PIRL_DOCS_DIR) \
		-author \
		-version \
		-link $(JAVA_DOCS_DIR) \
		-windowtitle "PIRL Java Packages" \
		-header '<A HREF="http://PIRL.LPL.Arizona.edu" \
			TARGET="_top"><IMG SRC="{@docRoot}/PIRL_icon.gif" ALT="PIRL"></A>' \
		-bottom '<A HREF="{@docRoot}/Copyright.html">Copyright (C)</A> \
			2003-2009  Bradford Castalia, University of Arizona' \
		-sourcepath ../.. \
		-classpath $(JPATH) \
		$(PACKAGE_PATHS) $(SUBPACKAGES)
	cp PIRL_icon.gif Copyright.html $(PIRL_DOCS_DIR)


#	Application wrappers installation:

install:
	@echo
	@echo "=== Installing application wrappers in $(INSTALL_DIR)"
	cp -f $(addprefix ../,$(APPLICATIONS)) $(INSTALL_DIR)


#	Distribution files:

#	Source code tarball
tarball:			$(PIRL_TARBALL)
$(PIRL_TARBALL):
	@echo
	@echo "=== $@ ==="
	@echo
	-rm -f $@
	@if [ ! -d staging_area/PIRL ]; then \
		echo ; \
		echo "--- Assembling the package files" ; \
		mkdir -p staging_area/PIRL ; \
		Release -dir staging_area/PIRL -no_make Build $(PACKAGES) ; \
	fi
	@echo
	mv staging_area/PIRL staging_area/$(PIRL_VERSION)
	cd staging_area; gtar czf ../$@ $(PIRL_VERSION)
	mv staging_area/$(PIRL_VERSION) staging_area/PIRL 

#	Javadoc tarball
javadoc.tarball:	$(PIRL_JAVADOC)
$(PIRL_JAVADOC):
	@echo
	@echo "=== $@ ==="
	@echo
	-rm -f $@
	@if [ ! -d staging_area/PIRL/docs ]; then \
		echo ; \
		echo "--- Assembling the package files" ; \
		mkdir -p staging_area/PIRL ; \
		Release -dir staging_area/PIRL -no_make Build $(PACKAGES) ; \
	fi
	@echo
	$(MAKE) -C staging_area/PIRL/Build docs
	mv staging_area/PIRL staging_area/$(PIRL_VERSION)
	cd staging_area; gtar czf ../$@ $(PIRL_VERSION)/docs
	mv staging_area/$(PIRL_VERSION) staging_area/PIRL 

#	Jar
jar:				$(PIRL_JAR)
$(PIRL_JAR):
	@echo
	@echo "=== $@ ==="
	@echo
	-rm -f $@
	@echo "--- Preparing the jar files"
	@if [ ! -d staging_area/PIRL/Build ]; then \
		echo ; \
		echo "--- Assembling the package files" ; \
		mkdir -p staging_area/PIRL ; \
		Release -dir staging_area/PIRL -no_make Build $(PACKAGES) ; \
	fi
	@echo
	$(MAKE) -C staging_area/PIRL/Build
	@echo
	cd staging_area/PIRL/Build; cp -f $(BOILERPLATE) VERSION ..
	@echo
	@echo "--- Removing extraneous files"
	mv staging_area/PIRL/Build staging_area
	rm -rf staging_area/PIRL/docs
	find staging_area/PIRL/Conductor \
		-type d -name '*.*' \
		-exec rm -rf {} \; -prune
	find staging_area/PIRL \
		-type d -name tests \
		-exec rm -rf {} \; -prune
	find staging_area/PIRL \
		\( -name '*.java' -o -name Makefile -o -name '*.html' \) \
		-exec rm {} \;
	@echo
	@echo "--- Preparing the MANIFEST"
	sed -e s/VERSION/$(VERSION)/ \
		-e '/MAIN/ d' \
		PIRL-MANIFEST.template > MANIFEST
	@echo
	@echo "--- Filling the jar"
	cd staging_area; jar cmf ../MANIFEST ../$(PIRL_JAR) PIRL
	-rm -f MANIFEST


dist:				.BEGIN tarball javadoc.tarball jar .END

distribute:			dist
	@echo
	@echo "=== Distribution ==="
	@echo
	@echo "--- Archiving the tarballs and jar files to the archive directory."
	mkdir -p ../archive
	cp -f $(PIRL_TARBALL) $(PIRL_JAVADOC) $(PIRL_JAR) ../archive
	@echo
	@echo "--- Moving the distribution files to the $(DIST_DIR) directory."
	mkdir -p $(DIST_DIR)
	mv -f \
		$(PIRL_TARBALL) \
		$(PIRL_JAVADOC) \
		$(PIRL_JAR) \
		$(DIST_DIR)
	rm -f \
		$(DIST_DIR)/$(PIRL_TARBALL:-$(VERSION).tar.gz=.tar.gz) \
		$(DIST_DIR)/$(PIRL_JAVADOC:-$(VERSION).tar.gz=.tar.gz) \
		$(DIST_DIR)/$(PIRL_JAR:-$(VERSION).jar=.jar)
	ln -s $(PIRL_TARBALL) $(DIST_DIR)/$(PIRL_TARBALL:-$(VERSION).tar.gz=.tar.gz)
	ln -s $(PIRL_JAVADOC) $(DIST_DIR)/$(PIRL_JAVADOC:-$(VERSION).tar.gz=.tar.gz)
	ln -s $(PIRL_JAR) $(DIST_DIR)/$(PIRL_JAR:-$(VERSION).jar=.jar)
	cd staging_area/Build; cp -f $(BOILERPLATE) $(DIST_DIR)
	@echo
	@echo "--- Copying the application files to the $(DIST_DIR)/Apps directory."
	rm -rf $(DIST_DIR)/Apps
	mkdir -p $(DIST_DIR)/Apps
	cp -f $(addprefix staging_area/PIRL/,$(APPLICATIONS)) $(DIST_DIR)/Apps
	@echo
	@echo "--- Copying the configuration files to the $(DIST_DIR)/Configs directory."
	rm -rf $(DIST_DIR)/Configs
	mkdir -p $(DIST_DIR)/Configs
	cp -f $(addprefix staging_area/PIRL/,$(CONFIGURATIONS)) $(DIST_DIR)/Configs
	@echo
	@echo "--- Cleanup"
	rm -rf staging_area
	rm -rf staging_area
	rm -rf staging_area


#	Cleaning:

clean:				TARGET = clean
clean:				packages

distclean:			dist_clean
dist_clean:
	rm -f $(PIRL_TARBALL) $(PIRL_TARBALL:-$(VERSION).tar.gz=.tar.gz)
	rm -f $(PIRL_JAVADOC) $(PIRL_JAVADOC:-$(VERSION).tar.gz=.tar.gz)
	rm -f $(PIRL_JAR) $(PIRL_JAR:-$(VERSION).jar=.jar)
	rm -rf MANIFEST staging_area


#	Release:

release:
	@echo
	@echo "*** $(TITLE) release $(VERSION)"
	@echo
	Release -d .. -no_make -no_strip $(PACKAGES)
	@echo
	$(MAKE) packages docs
	@echo
	@echo "*** $(TITLE) release $(VERSION) completed."


#	Reporting:

.BEGIN:
	@echo
	@echo "*** $(TITLE) $(CVS_ID) ***"
	@date
	@echo

.END:
	@echo
	@echo "*** $(TITLE) Completed ***"
	@date
	@echo


.PHONY:			.BEGIN \
				all packages $(PACKAGES) clean docs \
				tarball javadoc.tarball jar \
				dist distribute distclean dist_clean wipe release \
				.END
