.SUFFIXES: .o .C .c  .cpp .cmo .cmi .ml .mli

##################################################################

include ../../sys/config/mkflags

##################################################################

OCAMLC=		ocamlc
OCAMLOPT=	ocamlopt
CAMLP4=		camlp4o
OCAMLLIB:=	$(shell $(OCAMLC) -where)
CAMLP4LIB:=	$(shell $(CAMLP4) -where)
#OCAMLLIB!=	$(OCAMLC) -where
#CAMLP4LIB!=	$(CAMLP4) -where
MOD_NAME=	mpfc
MOD_SRC=	mpfc.mli mpfc.ml mpfclib.ml
MOD_IF=		$(MOD_NAME).cmi
WRAPER_IF=	mpfclib.cmi
LIB_NAME=	$(MOD_NAME).cmxa
LIB_NAME_BYTE=	$(MOD_NAME).cma
LIB_A_NAME=	$(MOD_NAME).a
MOD_SWIG_NAME=	swig
MOD_SWIG=	$(MOD_SWIG_NAME).cmx
MOD_SWIG_BYTE=	$(MOD_SWIG_NAME).cmo
MOD_SWIG_IF=	$(MOD_SWIG_NAME).cmi
MOD_SWIG_SRC=	swig.mli swig.ml
LIB_SWIGP4=	swigp4.cma
LIB_SWIGP4_SRC=	swigp4.ml
LD_FLAGS=	-L../../lib -lwssheet -lwsr -lwsc -lwsx11 -lwsb -lwsj3w -lws \
		-lwse -lwsad -L/usr/X11R6/lib -lX11 -lXpm 
OPT_LD=		$(CC)
OPT_LDFLAGS=	-L../../lib -L/usr/local/lib/ocaml -L$$WSDIR/lib/ocaml
OPT_LIBS=	-lwssheet -lwsr -lwsc -lwsx11_nomain -lwsb -lwsj3w -lws -lwse -lwsad \
		-pthread

all: $(LIB_NAME) $(LIB_NAME_BYTE) $(LIB_SWIGP4)
	/bin/mkdir -p ../../lib/ocaml
	/bin/cp dllmpfc_ocaml.so ../../lib
	/bin/cp $(LIB_NAME) ../../lib/ocaml
	/bin/cp $(LIB_A_NAME) ../../lib/ocaml
	/bin/cp libmpfc_ocaml.so ../../lib
	/bin/cp $(LIB_NAME_BYTE) ../../lib/ocaml
	/bin/cp $(MOD_IF) ../../lib/ocaml
	/bin/cp $(WRAPER_IF) ../../lib/ocaml
	#/bin/cp $(MOD_SWIG) ../../lib/ocaml
	/bin/cp $(MOD_SWIG_IF) ../../lib/ocaml
	/bin/cp $(LIB_SWIGP4) ../../lib/ocaml

runtime: $(LIB_NAME) $(LIB_NAME_BYTE) $(LIB_SWIGP4)
	/bin/mkdir -p ../../lib/ocaml
	/bin/cp dllmpfc_ocaml.so ../../lib
	/bin/cp $(LIB_NAME) ../../lib/ocaml
	/bin/cp $(LIB_A_NAME) ../../lib/ocaml
	/bin/cp libmpfc_ocaml.so ../../lib
	/bin/cp $(LIB_NAME_BYTE) ../../lib/ocaml
	/bin/cp $(MOD_IF) ../../lib/ocaml
	/bin/cp $(WRAPER_IF) ../../lib/ocaml
	#/bin/cp $(MOD_SWIG) ../../lib/ocaml
	/bin/cp $(MOD_SWIG_IF) ../../lib/ocaml
	/bin/cp $(LIB_SWIGP4) ../../lib/ocaml

debug: $(LIB_NAME) $(LIB_NAME_BYTE) $(LIB_SWIGP4)
	/bin/mkdir -p ../../lib/ocaml
	/bin/cp dllmpfc_ocaml.so ../../lib
	/bin/cp $(LIB_NAME) ../../lib/ocaml
	/bin/cp $(LIB_A_NAME) ../../lib/ocaml
	/bin/cp libmpfc_ocaml.so ../../lib
	/bin/cp $(LIB_NAME_BYTE) ../../lib/ocaml
	/bin/cp $(MOD_IF) ../../lib/ocaml
	/bin/cp $(WRAPER_IF) ../../lib/ocaml
	#/bin/cp $(MOD_SWIG) ../../lib/ocaml
	/bin/cp $(MOD_SWIG_IF) ../../lib/ocaml
	/bin/cp $(LIB_SWIGP4) ../../lib/ocaml

$(LIB_NAME): $(MOD_SWIG) $(MOD_IF) mpfc.cmx mpfclib.cmx libmpfc_ocaml.so
	$(OCAMLOPT) -a -o $(LIB_NAME) -cc "$(OPT_LD)" -ccopt "$(OPT_LDFLAGS) -L." \
	-cclib "$(OPT_LIBS) -lmpfc_ocaml" $(MOD_SWIG) mpfc.cmx mpfclib.cmx

$(LIB_NAME_BYTE): dllmpfc_ocaml.so $(MOD_SWIG_BYTE) $(MOD_IF) mpfc.cmo mpfclib.cmo
	$(OCAMLC) -a -o $(LIB_NAME_BYTE) $(MOD_SWIG_BYTE) mpfc.cmo mpfclib.cmo \
	-dllib -lmpfc_ocaml -dllpath .

libmpfc_ocaml.so: mpfc_proc.o mpfc_wrap.o
	$(OPT_LD) -shared -o libmpfc_ocaml.so $(OPT_LDFLAGS) $(OPT_LIBS) \
	mpfc_proc.o mpfc_wrap.o

dllmpfc_ocaml.so: mpfc_proc.o mpfc_wrap.o
	$(CC) -o dllmpfc_ocaml.so $(SHARED)dllmpfc_ocaml.so \
	mpfc_proc.o mpfc_wrap.o $(LD_FLAGS)

mpfc_proc.o:
	$(CC) $(C++FLAGS2_DLL) -c mpfc_proc.cpp \
	-I../../include -I/usr/X11R6/include -I$(OCAMLLIB)

mpfc_wrap.o:
	$(CC) $(C++FLAGS2_DLL) -DNDEBUG -Wno-unused -c mpfc_wrap.cpp \
	-I../../include -I/usr/X11R6/include -I$(OCAMLLIB)

$(MOD_IF): $(MOD_SWIG)
	$(OCAMLC) -c mpfc.mli

mpfc.cmx: $(MOD_SWIG)
	$(OCAMLOPT) -c mpfc.ml

mpfc.cmo: $(MOD_SWIG)
	$(OCAMLC) -c mpfc.ml

mpfclib.cmx: mpfc.cmx
	$(OCAMLOPT) -c mpfclib.ml

mpfclib.cmo: mpfc.cmo
	$(OCAMLC) -c mpfclib.ml

$(MOD_SWIG): $(LIB_SWIGP4)
	$(OCAMLOPT) -c $(MOD_SWIG_SRC)

$(MOD_SWIG_BYTE): $(LIB_SWIGP4)
	$(OCAMLC) -c $(MOD_SWIG_SRC)

$(LIB_SWIGP4):
	$(OCAMLC) -a -o $(LIB_SWIGP4) -I $(CAMLP4LIB) \
	-pp "camlp4o pa_extend.cmo q_MLast.cmo" $(LIB_SWIGP4_SRC)


clean:
	rm -f *.o *.cmi *.cmo *.cma *.cmx *.cmxa *.a *.so
	rm -f ../../lib/dllmpfc_ocaml.so ../../lib/libmpfc_ocaml.so
	(cd ../../lib/ocaml; \
	rm -f *.o *.cmi *.cmo *.cma *.cmx *.cmxa *.a *.so)
	#rm -f ../../lib/ocaml/*.o ../../lib/ocaml/*.cmi ../../lib/ocaml/*.cmo \
	#../../lib/ocaml/*.cma ../../lib/ocaml/*.cmx ../../lib/ocaml/*.cmxa \
	#../../lib/ocaml/*.a ../../lib/ocaml/*.so
	#rm -f mpfc_proc.o mpfc_wrap.o dllmpfc_ocaml.so \
	#$(LIB_NAME_BYTE) mpfc.cmo $(LIB_NAME_IF) $(MOD_SWIG) swig.cmo swig.cmi \
	#../../lib/dllmpfc_ocaml.so ../../lib/$(LIB_NAME_BYTE) \
	#../../lib/$(LIB_NAME_IF) ../../lib/$(MOD_SWIG)

