MLI_SOURCES=xmlRPCTypes.mli xmlRPCDtd.mli xmlRPCNet.mli xmlRPCClient.mli
ML_SOURCES=xmlRPCTypes.ml xmlRPCDtd.ml xmlRPCNet.ml xmlRPCClient.ml
C_SOURCES=

BIN_DIR=/usr/local/bin/

NAME=xmlrpc

LIB=xmlrpc.cma
OPTLIB=xmlrpc.cmxa

DLL=
XLIB=

AR=ar
CC=gcc
RANLIB=ranlib

CFLAGS=-I`ocamlc -where` -fPIC
OCAMLC=ocamlfind ocamlc 
OCAMLOPT=ocamlfind ocamlopt
OCAMLDEP=ocamldep

OBJECTS=$(ML_SOURCES:.ml=.cmo) $(DLL)
XOBJECTS=$(ML_SOURCES:.ml=.cmx) 

REQUIRES=netclient netstring equeue pxp pcre

IDL_REQUIRES=pcre stew

PREDICATES=

.PHONY: all opt everything
all: .depend $(LIB) oxridl
opt: .depend $(OPTLIB) oxridl.opt
everything: all opt

oxridl: oxridl.ml
	$(OCAMLC) -o oxridl -package "$(IDL_REQUIRES)" -linkpkg oxridl.ml

oxridl.opt: oxridl.ml
	$(OCAMLOPT) -o oxridl.opt -package "$(IDL_REQUIRES)" -linkpkg oxridl.ml


doc: xmlrpc.html xmlrpc.dvi # xmlrpc.pdf

xmlrpc.html: xmlrpc.tex interface.tex
	hevea -entities ocamlweb.sty xmlrpc.tex 

# My copy of pdflatex doesn't play well with ocamlweb. Bah.
xmlrpc.pdf: xmlrpc.ps
	ps2pdf xmlrpc.ps

xmlrpc.ps: xmlrpc.dvi
	dvips -o xmlrpc.ps xmlrpc.dvi

xmlrpc.dvi: xmlrpc.tex interface.tex
	latex xmlrpc.tex

interface.tex: $(MLI_SOURCES)
	ocamlweb --noweb --no-index --no-preamble $(MLI_SOURCES) > interface.tex

install: all
	{ test ! -f $(OPTLIB) || extra="$(OPTLIB) "`basename $(OPTLIB) .cmxa`.a; }; \
	ocamlfind install $(NAME) $(MLI_SOURCES) $(MLI_SOURCES:.mli=.cmi) \
	$(LIB) META $(DLL) $$extra ;\
	if [ -f oxridl.opt ]; then idlc="oxridl.opt"; else idlc="oxridl"; fi ;\
	cp -f $$idlc $(BIN_DIR)/oxridl

uninstall:
	ocamlfind remove $(NAME)

$(LIB): $(OBJECTS)
	$(OCAMLC) -a -o $(LIB) \
		-predicates "$(PREDICATES)" $(OBJECTS)

$(OPTLIB): $(XOBJECTS) 
	$(OCAMLOPT) -a -o $(OPTLIB) \
		-predicates "$(PREDICATES)" $(XOBJECTS) 

.SUFFIXES: .cmo .cmi .cmx .ml .mli

$(DLL): $(C_SOURCES:.c=.o)
	$(CC) $(CFLAGS) -shared -o dllstew.so  $^ 

$(XLIB): $(C_SOURCES:.c=.o)
	$(AR) rc $(XLIB) $^
	$(RANLIB) $(XLIB)

.ml.cmo:
	$(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" \
	 	-c $<

.mli.cmi:
	$(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" \
	 	-c $<

.ml.cmx:
	$(OCAMLOPT) -package "$(REQUIRES)" -predicates "$(PREDICATES)" \
	 	-c $<

.depend: *.ml #*.mli
	$(OCAMLDEP) *.ml *.mli > .depend

include .depend

.PHONY: clean
clean:
	rm -f *.cmi *.cmo *.cmx *.cma *.cmxa *.a *.o *.opt *.so \
		*.out *.log oxridl
