################################################################
# @configure_input@
#
# Build JPL.  Building JPL for Unix currently relies on the following
# assumptions:
#
#	* $JAVA_HOME points to the JDK top directory
#	* $PATH includes $JAVA_HOME/bin
#	* ELF Dynamic Linker semantics
#
# Author: Jan Wielemaker, based on shell-scripts from Paul Singleton.
################################################################

PACKAGE=jpl
PKGCFLAGS=@JPLCFLAGS@
PKGLDFLAGS=@JPLLDFLAGS@

include ../Makefile.defs

LIBS=@LIBS@

JAVA_HOME=@JAVA_HOME@
JAVAC=@JAVAC@
JAVACFLAGS=@JAVACFLAGS@
JAVA=@JAVA@
JUNIT=@JUNIT@
JAVALIBS=@JAVALIBS@

LIBPL=		$(srcdir)/jpl.pl
LIBJPL=		@LIBJPL@.@SO@
TARGETS=	$(LIBJPL)
OBJ=		src/c/jpl.o

# YAP has some extra hacks that need to be compiled in.
ifeq (@PROLOG_SYSTEM@,yap)
src/c/jpl.o: $(srcdir)/src/c/jpl.c $(srcdir)/src/c/hacks.c
		$(CC) -c $(CFLAGS) $(srcdir)/src/c/jpl.c -o src/c/jpl.o
endif

all:		$(TARGETS) jpl.jar exjava-compile jpl_doc

# linking order counts here: otherwise libjpl.so will not remember
# it needs libYap.so
@LIBJPL@.@SO@:	$(OBJ)
		$(LD) $(LDSOFLAGS) -o $@ $(OBJ) $(LIBS) $(JAVALIBS) $(LIBPLEMBED)
		if [ -r @LIBJPL@.@SO@ ]; then \
		  rm -f @LIBJPL@.jnilib && ln -s @LIBJPL@.@SO@ @LIBJPL@.jnilib ; \
		fi

jpl.jar::
		(cd src/java && $(MAKE) jpl_jar)
jpl_doc::
		(cd src/java && $(MAKE) jpl_doc)

################################################################
# Verify the package
################################################################

check:		check_pl check_java

check_pl:	jpltest.jar
		$(PL) -q -f test_jpl.pl -g run_tests,halt -t 'halt(1)'
check_java:	jpltest.jar
		JUNIT=$(JUNIT) JAVA=$(JAVA) JAVA_PRELOAD=$(JAVA_PRELOAD) $(srcdir)/test-java.sh

jpltest.jar:
		(cd src/java && $(MAKE) test_jar)

################################################################
# Installation
################################################################

DOCDIRS=	$(srcdir) $(srcdir)/java_api \
		$(srcdir)/java_api/javadoc $(srcdir)/java_api/javadoc/jpl \
		$(srcdir)/java_api/javadoc/jpl/class-use \
		$(srcdir)/java_api/javadoc/jpl/fli \
		$(srcdir)/java_api/javadoc/jpl/fli/class-use \
		$(srcdir)/java_api/javadoc/resources \
		$(srcdir)/prolog_api \
		$(srcdir)/prolog_api/overview
DOCFILES=	$(shell cd $(srcdir)/docs && find . -name '*.html' -o -name '*.gif' -o -name '*.jpg')

EXPL=		$(PKGEXDIR)/jpl/prolog
EXPLS=		jpl_colour_choose_demo.pl \
		jpl_jlist_demo.pl \
		jpl_midi_demo.pl \
		jpl_table_demo.pl \
		jpl_text_entry_demo.pl \
		jpl_versions_demo.pl
EXJAVA=		$(PKGEXDIR)/jpl/java
EXJAVAS=	Exceptions Exceptions2 Family FamilyMT Test Test2 Time \
		Versions Zahed SemWeb


install:	all $(LIBPL) 
		mkdir -p $(DESTDIR)$(SOLIBDIR)
		for f in $(TARGETS); do \
		  $(INSTALL_PROGRAM) "$$f" "$(DESTDIR)$(SOLIBDIR)"; \
		done
ifeq (@SO@,dylib)
		(cd $(DESTDIR)$(SOLIBDIR) && ln -sf @LIBJPL@.@SO@ @LIBJPL@.jnilib)
endif
		mkdir -p $(DESTDIR)$(PLLIBDIR)
		mkdir -p $(DESTDIR)$(PLLIBDIR)/jpl
		for f in $(LIBPL); do \
		  $(INSTALL_DATA) $$f $(DESTDIR)$(PLLIBDIR); \
		done
		$(INSTALL_DATA) jpl.jar $(DESTDIR)$(PLLIBDIR)/jpl
		$(PL) -f none -g make -t halt
		mkdir -p "$(DESTDIR)$(PLLIBDIR)"
		for f in $(LIBPL); do \
		  $(INSTALL_DATA) $$f $(DESTDIR)$(PLLIBDIR); \
		done
		$(MKINDEX)

install-examples::
		expl-install exjava-install 

ln-install::
		@$(MAKE) INSTALL_DATA='../ln-install' install

rpm-install:	install html-install

html-install::	expl-install exjava-install
		mkdir -p $(DESTDIR)$(PKGDOCDIR)/jpl
		@printf "Creating directories "
		@for d in $(DOCDIRS); do \
		    mkdir -p $(DESTDIR)$(PKGDOCDIR)/jpl/$$d; printf "."; \
		done
		@echo "ok"
		@printf "Copying documentation files "
		@for f in $(DOCFILES); do \
		    $(INSTALL_DATA) docs/$$f $(DESTDIR)$(PKGDOCDIR)/jpl/$$f; printf "."; \
		done
		@echo "ok"

expl-install::
		echo "Installing Prolog examples"
		mkdir -p $(DESTDIR)$(EXPL)
		@for f in $(EXPLS) README; do \
		    $(INSTALL_DATA) $(srcdir)/examples/prolog/$$f $(DESTDIR)$(EXPL)/$$f; \
		done

exjava-compile:	jpl.jar
		echo "Compiling Java examples"
		for d in $(EXJAVAS); do \
		    if [ ! -f examples/java/$$d/$$d.class ]; then \
		        echo $$d; \
			mkdir -p examples/java/$$d; \
		        (cd examples/java/$$d && "$(JAVAC)"  $(JAVACFLAGS) -d . -classpath "../../../jpl.jar" $(srcdir)/examples/java/$$d/$$d.java); \
		    fi; \
		done

exjava-install:	exjava-compile
		echo "Installing Java examples"
		mkdir -p "$(DESTDIR)$(EXJAVA)"
		$(INSTALL_DATA) $(srcdir)/examples/java/README "$(DESTDIR)$(EXJAVA)"
		$(INSTALL_DATA) $(srcdir)/examples/java/env.@CMDEXT@ "$(DESTDIR)$(EXJAVA)"
		for d in $(EXJAVAS); do \
		    mkdir -p $(DESTDIR)$(EXJAVA)/$$d; \
		    $(INSTALL_SCRIPT) $(srcdir)/examples/java/$$d/run.@CMDEXT@ "$(DESTDIR)$(EXJAVA)/$$d" ;\
		    $(INSTALL_DATA) $(srcdir)/examples/java/$$d/README "$(DESTDIR)$(EXJAVA)/$$d" ;\
		    $(INSTALL_DATA) $(srcdir)/examples/java/$$d/$$d.java "$(DESTDIR)$(EXJAVA)/$$d" ;\
		    for f in $(srcdir)/examples/java/$$d/*.pl; do \
		      $(INSTALL_DATA) "$$f" "$(DESTDIR)$(EXJAVA)/$$d"; \
		    done ;\
		    $(INSTALL_DATA) examples/java/$$d/$$d*.class $(DESTDIR)$(EXJAVA)/$$d ;\
		done
		$(INSTALL_DATA) $(srcdir)/examples/java/SemWeb/test.rdf "$(DESTDIR)$(EXJAVA)/SemWeb"

pdf-install::
		mkdir -p $(DESTDIR)$(PKGDOCDIR)
		$(INSTALL) -m 644 $(DOC).pdf "$(DESTDIR)$(PKGDOCDIR)"

uninstall::
		(cd $(PLBASE)/lib/$(PLARCH) && rm -f $(TARGETS))
		(cd $(PLBASE)/library && rm -f $(LIBPL))
		$(PL) -f none -g make -t halt

################################################################
# Clean
################################################################

clean:
		rm -f $(OBJ) *~ *.o *% a.out core config.log
		rm -f TestJPL.class
		find examples/java -name '*.class' -delete
		(cd src/java && $(MAKE) clean)

distclean:	clean
		rm -rf autom4te.cache
		rm -f $(TARGETS) config.cache config.h config.status Makefile
		rm -f $(DOC).aux $(DOC).log $(DOC).out $(DOC).toc
		rm -rf html
		(cd src/java && $(MAKE) distclean)