# Makefile for testing the Hugin libraries with GNU C/C++

CC	= gcc -m32
CXX	= g++ -m32

# This should preferably be the absolute path of the Hugin installation:
HUGINHOME	= ..

# This must be a 32-bit (v1.4.2 or newer) Sun JVM:
JAVA	= java

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

# For single-precision compilation:
FLAGS	= -Wall -I$(HUGINHOME)/include
#CLIBS	= -pthread -L$(LIBDIR) -lhugin -lz -lcrypt -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 -lcrypt -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:
load_and_propagate: load_and_propagate.c
	$(CC) $(FLAGS) -o load_and_propagate load_and_propagate.c $(CLIBS)

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

# Test double-precision C library:
load_and_propagate2: load_and_propagate.c
	$(CC) $(FLAGS2) -o load_and_propagate2 load_and_propagate.c $(CLIBS2)

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

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

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

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

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

# Test Hugin Java API:
LoadAndPropagate.class: LoadAndPropagate.java
	javac -classpath $(LIBDIR)/hapi73.jar:. LoadAndPropagate.java

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

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