OSNAME:=$(shell uname -s | sed 's/_.*//')

ifeq ($(OSNAME),Darwin)
	CPPFLAGS =
	CXXFLAGS += -std=c++11
	# Change path to JDK
	# JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers
	JAVA_INCLUDE = -I/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home/include \
					-I/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home/include/darwin
	# LINK = $(CXX) $(CXXFLAGS) -dynamiclib -framework JavaVM -o adaptagrams.dylib
	LINK = $(CXX) $(CXXFLAGS) -dynamiclib -o adaptagrams.dylib
else 
	# Some make versions say only one else per if statment.
	ifeq ($(OSNAME),Linux)
		CPPFLAGS = -fPIC
		# Change path to JDK
		JAVA_INCLUDE = -I/usr/lib/jvm/java-8-openjdk-amd64/include \
						-I/usr/lib/jvm/java-8-openjdk-amd64/include/linux
		LINK = $(CXX) $(CXXFLAGS) -shared -o adaptagrams.so
	else 
		ifeq ($(OSNAME),MINGW32)
			CPPFLAGS =
			# Change path to JDK
			JAVA_INCLUDE = -I"/c/Program Files/Java/jdk-1.8/include" \
							-I"/c/Program File/Java/jdk-1.8/include/win32"
			# Building with MinGW
			LINK = $(CXX) $(CXXFLAGS) -Wl,--add-stdcall-alias -shared -o adaptagrams.dll
		else
			ifeq ($(OSNAME),MINGW64)
				CPPFLAGS =
				# Change path to JDK
				JAVA_INCLUDE = -I"/c/Program Files/Java/jdk-1.8/include" \
								-I"/c/Program Files/Java/jdk-1.8/include/win32"
				# Building with MSYS2
				LINK = $(CXX) $(CXXFLAGS) -Wl,--add-stdcall-alias -static-libgcc -static-libstdc++ -static -lpthread -shared -o adaptagrams.dll
			endif
		endif
	endif
endif

all: adaptagrams jar

swig-worked: clean adaptagrams.i
	mkdir -p java/src/org/adaptagrams
	mkdir -p java/build/org/adaptagrams
	# Use Swig version 3
	swig -DUSE_ASSERT_EXCEPTIONS -c++ -java -package org.adaptagrams -outdir java/src/org/adaptagrams adaptagrams.i
	touch swig-worked

adaptagrams_wrap.o: swig-worked
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -I. $(JAVA_INCLUDE) -c adaptagrams_wrap.cxx

adaptagrams: adaptagrams_wrap.o
	$(LINK) adaptagrams_wrap.o libcola/.libs/libcola.a libtopology/.libs/libtopology.a libavoid/.libs/libavoid.a libvpsc/.libs/libvpsc.a libdialect/.libs/libdialect.a

jar: swig-worked
	javac -d java/build/ java/src/org/adaptagrams/*.java
	jar cf adaptagrams.jar -C java/build/ .
	jar uf adaptagrams.jar -C java/src/ .

realclean: clean

clean: mostlyclean
	rm -f adaptagrams.so adaptagrams.dylib adaptagrams.so

mostlyclean:
	rm -f swig-worked
	rm -f adaptagrams_wrap.o adaptagrams_wrap.cxx adaptagrams.jar
	rm -rf java/*

.PHONY: all clean mostlyclean realclean

