# Makefile for testing the Hugin libraries

# Path of the Hugin installation:
HUGINHOME	= ..

# C and C++ compilers:
CC	= gcc -m64
CXX	= g++ -m64

# Java compiler:
JAVAC	= javac

# 64-bit Java VM:
JAVA	= java

# Directory containing the library files:
LIBDIR	= $(HUGINHOME)/lib

# The Hugin Java API jar-file:
HAPI_JAR= $(LIBDIR)/hapi98-64.jar

# For single-precision compilation:
FLAGS	= -Wall -I$(HUGINHOME)/include
#CLIBS	= -pthread -L$(LIBDIR) -lhugin -lz -lm	# static
CLIBS	= -L$(LIBDIR) -Wl,-R$(LIBDIR) -lhugin	# shared
CXXLIBS	= -L$(LIBDIR) -Wl,-R$(LIBDIR) -lhugincpp

# For double-precision compilation:
FLAGS2	= -Wall -I$(HUGINHOME)/include -DH_DOUBLE
#CLIBS2	= -pthread -L$(LIBDIR) -lhugin2 -lz -lm	# static
CLIBS2	= -L$(LIBDIR) -Wl,-R$(LIBDIR) -lhugin2	# shared
CXXLIBS2= -L$(LIBDIR) -Wl,-R$(LIBDIR) -lhugincpp2


all: c-test c-test2 cpp-test cpp-test2 java-test

# Test single-precision C library:
# [The "-lm" linker directive is needed because "load_and_propagate.c"
#	uses the "sqrt" function.]
load_and_propagate: load_and_propagate.c
	$(CC) $(FLAGS) -o $@ $< $(CLIBS) -lm

c-test: load_and_propagate
	./$< ChestClinic ChestClinic.hcs
	./$< WasteIncinerator WasteIncinerator.hcs
	./$< OilWildcatter OilWildcatter.hcs

# Test double-precision C library:
# [The "-lm" linker directive is needed because "load_and_propagate.c"
#	uses the "sqrt" function.]
load_and_propagate2: load_and_propagate.c
	$(CC) $(FLAGS2) -o $@ $< $(CLIBS2) -lm

c-test2: load_and_propagate2
	./$< ChestClinic ChestClinic.hcs
	./$< WasteIncinerator WasteIncinerator.hcs
	./$< OilWildcatter OilWildcatter.hcs

# Test single-precision C++ library:
LoadAndPropagate: LoadAndPropagate.cpp
	$(CXX) $(FLAGS) -o $@ $< $(CXXLIBS)

cpp-test: LoadAndPropagate
	./$< ChestClinic ChestClinic.hcs
	./$< WasteIncinerator WasteIncinerator.hcs
	./$< OilWildcatter OilWildcatter.hcs

# Test double-precision C++ library:
LoadAndPropagate2: LoadAndPropagate.cpp
	$(CXX) $(FLAGS2) -o $@ $< $(CXXLIBS2)

cpp-test2: LoadAndPropagate2
	./$< ChestClinic ChestClinic.hcs
	./$< WasteIncinerator WasteIncinerator.hcs
	./$< OilWildcatter OilWildcatter.hcs

# Test Hugin Java API:
LoadAndPropagate.class: LoadAndPropagate.java
	$(JAVAC) -d . -classpath $(HAPI_JAR) $<

java-test: LoadAndPropagate.class
	$(JAVA) -classpath $(HAPI_JAR):. -Djava.library.path=$(LIBDIR) LoadAndPropagate ChestClinic ChestClinic.hcs
	$(JAVA) -classpath $(HAPI_JAR):. -Djava.library.path=$(LIBDIR) LoadAndPropagate WasteIncinerator WasteIncinerator.hcs
	$(JAVA) -classpath $(HAPI_JAR):. -Djava.library.path=$(LIBDIR) LoadAndPropagate OilWildcatter OilWildcatter.hcs

clean:
	rm -f load_and_propagate load_and_propagate2
	rm -f LoadAndPropagate LoadAndPropagate2 *.class *.log
