library: wrapperCFromCpp.o wrapperOcamlFromC.o OpenFst.cmo

test: wrappertest.c.out wrappertest.ocaml.out
	if diff wrappertest.c.out wrappertest.ocaml.out; then echo test passed; else echo C and OCaml got different answers; fi

clean:
	-rm *.out *.exe *.o *.cmo *.cmi

OpenFst.cmo OpenFst.cmi: OpenFst.ml
	ocamlc -c OpenFst.ml

wrapperCFromCpp.o: wrapperCFromCpp.cpp
	g++ -c wrapperCFromCpp.cpp -IOpenFst

wrapperOcamlFromC.o: wrapperOcamlFromC.c wrapperOcamlFromC.h wrapperCFromCpp.h
	gcc -c wrapperOcamlFromC.c

wrappertest.c.out: wrappertest.c.exe
	./wrappertest.c.exe

wrappertest.c.exe: wrapperCFromCpp.o wrappertest.o
	g++ wrapperCFromCpp.o wrappertest.o -lfst -lpthread -o wrappertest.c.exe

wrappertest.o: wrappertest.c wrapperCFromCpp.h
	gcc -c wrappertest.c

wrappertest.ocaml.out: wrappertest.ocaml.exe
	./wrappertest.ocaml.exe

wrappertest.ocaml.exe: OpenFst.cmo wrappertest.cmo wrapperOcamlFromC.o wrapperCFromCpp.o
	ocamlc -custom OpenFst.cmo wrappertest.cmo wrapperOcamlFromC.o wrapperCFromCpp.o -cclib -lfst -cclib -lpthread -o wrappertest.ocaml.exe

wrappertest.cmo: wrappertest.ml
	ocamlc -c wrappertest.ml
