#	Makefile for Java Conductor package.
#
#	PIRL CVS ID: Makefile,v 1.26 2012/01/25 23:12:08 castalia Exp

#	gmake syntax


#	Installation location for the executable scripts.
SCRIPTS_DIR		?=	/opt/local/sh

#	Installation location for the JNI library.
JNI_LIB_DIR		?=	/opt/local/lib


#	Location of the Java Classes for Mathematics.
JCM				?= /opt/java/jcm

#	Location of SwingX Classes.
SwingX			?=	/opt/java/SwingX/swingx.jar

#	Location of the JavaMail Classes (used by Notify).
JavaMail		?=	/opt/java/javamail/mail.jar

JPATH			?= ../..:$(JCM):$(SwingX):$(JavaMail)
JC				?= javac


CLASSES			:=	Reference_Resolver.class \
					Unresolved_Reference.class \
					String_Vector_Comparator.class \
					Stream_Logger.class \
					Management.class \
					Processing_Changes.class \
					Processing_Event.class \
					Processing_Listener.class \
					Colors.class \
					Conductor.class \
					Table_Mouse_Listener.class \
					Sources_Table_Model.class \
					Sources_Table.class \
					Procedures_Table_Model.class \
					Procedures_Table.class \
					Manager.class \
					Notify.class \
					Evaluate.class \
					Pipeline_Source_Manager.class

SCRIPTS			:=	Conductor \
					Conductor1 \
					Create_Pipeline \
					Notify \
					Pipeline_Source \
					Pipeline_Source_Reset \
					
#===============================================================================
#	Native methods library
LIBRARY		:=	Native_Methods

CLASSES		+=	$(LIBRARY).class

#	Host machine architecture identification.
empty :=
space := $(empty) $(empty)
OS			:=	$(subst $(space),_,$(shell uname -s))
ARCH		:=	$(subst $(space),_,$(shell uname -m))

#	Java installation location.
JNI_ROOT 	?= /usr/java

#	Compiler.
CC			= gcc

#	Preprocessor flags.
CPPFLAGS	+=	-I$(JNI_ROOT)/include

#	Platform specifics
ifeq ($(OS),Darwin)
EXT			:= jnilib
CFLAGS		+= -bundle
else
EXT			:=	so
CFLAGS		+=	-fPIC -shared
endif

JNI_DIR		:=	$(OS).$(ARCH)
JNI_LIBRARY	:=	$(JNI_DIR)/lib$(LIBRARY).$(EXT)


#	Targets:

all:			classes jni Maestro Pipeline_Configuration

classes:		$(CLASSES)

jni:			$(JNI_LIBRARY)

$(JNI_LIBRARY):	$(JNI_DIR) $(LIBRARY).c
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LIBRARY).c -o $@
			
$(JNI_DIR):
	mkdir $(JNI_DIR)

Maestro:
	@echo
	@echo "--> Conductor/$@"
	@$(MAKE) --no-print-directory -C $@
	
Pipeline_Configuration:
	@echo
	@echo "--> Conductor/$@"
	@$(MAKE) --no-print-directory -C $@

install:		all
	cp -p $(SCRIPTS) $(SCRIPTS_DIR)
	cp -p $(JNI_LIBRARY) $(JNI_LIB_DIR)
	$(MAKE) -C Maestro install
	$(MAKE) -C Pipeline_Configuration install
			
patch:
	gtar -c -z -f Process.patch.tar.gz \
		--exclude=CVS \
		--exclude=Install \
		--exclude=README-Process.patch \
		Process.patch

clean:
	rm -f *.class $(JNI_LIBRARY)
	$(MAKE) -C Maestro clean
	$(MAKE) -C Pipeline_Configuration clean


.PHONY:	all classes Maestro Pipeline_Configuration jni install patch clean

.SUFFIXES: .java .class
.java.class:
	$(JC) -classpath $(JPATH) $(JFLAGS) $<
