.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=	mwt
MOD_SRC=	mwt.mli mwt.ml mwtlib.ml
MOD_IF=		$(MOD_NAME).cmi
WRAPER_IF=	mwtlib.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 dllmwt_ocaml.so ../../lib
	/bin/cp $(LIB_NAME) ../../lib/ocaml
	/bin/cp $(LIB_A_NAME) ../../lib/ocaml
	/bin/cp libmwt_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 dllmwt_ocaml.so ../../lib
	/bin/cp $(LIB_NAME) ../../lib/ocaml
	/bin/cp $(LIB_A_NAME) ../../lib/ocaml
	/bin/cp libmwt_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 dllmwt_ocaml.so ../../lib
	/bin/cp $(LIB_NAME) ../../lib/ocaml
	/bin/cp $(LIB_A_NAME) ../../lib/ocaml
	/bin/cp libmwt_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) mwt.cmx mwtlib.cmx libmwt_ocaml.so
	$(OCAMLOPT) -a -o $(LIB_NAME) -cc "$(OPT_LD)" -ccopt "$(OPT_LDFLAGS) -L." \
	-cclib "$(OPT_LIBS) -lmwt_ocaml" $(MOD_SWIG) mwt.cmx mwtlib.cmx

$(LIB_NAME_BYTE): dllmwt_ocaml.so $(MOD_SWIG_BYTE) $(MOD_IF) mwt.cmo mwtlib.cmo
	$(OCAMLC) -a -o $(LIB_NAME_BYTE) $(MOD_SWIG_BYTE) mwt.cmo mwtlib.cmo \
	-dllib -lmwt_ocaml -dllpath .

libmwt_ocaml.so: mwt_proc.o mwt_wrap.o
	$(OPT_LD) -shared -o libmwt_ocaml.so $(OPT_LDFLAGS) $(OPT_LIBS) \
	mwt_proc.o mwt_wrap.o

dllmwt_ocaml.so: mwt_proc.o mwt_wrap.o
	$(CC) -o dllmwt_ocaml.so $(SHARED)dllmwt_ocaml.so \
	mwt_proc.o mwt_wrap.o $(LD_FLAGS)

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

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

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

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

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

mwtlib.cmx: mwt.cmx
	$(OCAMLOPT) -c mwtlib.ml

mwtlib.cmo: mwt.cmo
	$(OCAMLC) -c mwtlib.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/dllmwt_ocaml.so ../../lib/libmwt_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 mwt_proc.o mwt_wrap.o dllmwt_ocaml.so \
	#$(LIB_NAME_BYTE) mwt.cmo $(LIB_NAME_IF) $(MOD_SWIG) swig.cmo swig.cmi \
	#../../lib/dllmwt_ocaml.so ../../lib/$(LIB_NAME_BYTE) \
	#../../lib/$(LIB_NAME_IF) ../../lib/$(MOD_SWIG)

