include Makefile.config

PACKAGES = extlib,lwt,lwt.extra,ocsigenserver,eliom.server.duce,tyxml.duce,calendar,magic,textile,textile.html,polebrush,polebrush.html$(OPTPACKAGES)
STANDALONEPACKAGES = eliom,ocsigenserver,ocsigenserver.commandline,ocsigenserver.baselib,ocsigenserver.ext,ocsigenserver.ext.ocsipersist-sqlite,eliom.server,eliom.server.duce
FILES = duce_printer.ml utils.ml highlight.ml sitemap_schema.ml atom_schema.ml io.ml markup.ml parsercomb.ml vcs.ml sitemap.ml atom.ml cache.ml html.ml common.ml tiny.ml

DESCRIPTION = a simple wiki engine
VERSION := $(shell head -n 1 VERSION)

OCAMLFIND = ocamlducefind
CAMLC   = $(OCAMLFIND) ocamlc -thread $(DEBUG) $(LIB)
CAMLOPT = $(OCAMLFIND) ocamlopt -thread $(DEBUG) $(LIB)
CAMLDOC = $(OCAMLFIND) ocamldoc $(LIB)
CAMLDEP = $(OCAMLFIND) ocamldep
LIB = -package $(PACKAGES)

OBJS    = $(FILES:.ml=.cmo)
OPTOBJS = $(FILES:.ml=.cmx)

CMA    = $(NAME).cma
CMXS   = $(NAME).cmxs
BYTE   = $(NAME).byte
NATIVE = $(NAME).native

bytelib:   depend META $(CMA)
sharedlib: depend META $(CMXS)
byte:   depend $(NAME)-standalone.sh $(BYTE)
native: depend $(NAME)-standalone.sh $(NATIVE)

META: META.in VERSION
	cp $< $@
	sed "s/_NAME_/$(NAME)/" -i $@
	sed "s/_VERSION_/$(VERSION)/" -i $@
	sed "s/_DESCRIPTION_/$(DESCRIPTION)/" -i $@
	sed "s/_REQUIRES_/$(PACKAGES)/" -i $@
	sed "s/_BYTE_/$(CMA)/" -i $@
	sed "s/_SHARED_/$(CMXS)/" -i $@
	sed "s/_NATIVE_/$(CMXA)/" -i $@

highlight.ml: highlight.in.ml highlight.stub.ml
ifeq "$(CAMLHIGHLIGHT)" "YES"
	ln -f highlight.in.ml $@
else
	ln -f highlight.stub.ml $@
endif

cache.ml: cache.in.ml cache.stub.ml
ifeq "$(MEMCACHE)" "YES"
	ln -f cache.in.ml $@
else
	ln -f cache.stub.ml $@
endif

$(CMA): $(OBJS)
	$(CAMLC) -a -o $@ $(OBJS)

$(CMXS): $(OPTOBJS)
	$(CAMLOPT) -shared -o $@ $(OPTOBJS)

$(BYTE): $(OBJS) start.cmo
	$(OCAMLFIND) ocamlc -thread -g -package $(STANDALONEPACKAGES) $(LIB) $^ -o $@ -linkpkg $(BYTEOPTS)

$(NATIVE): $(OPTOBJS) start.cmx
	$(OCAMLFIND) ocamlopt -thread -g -package $(STANDALONEPACKAGES) $(LIB) $^ -o $@ -linkpkg $(NATIVEOPTS)

$(NAME)-standalone.xml: $(NAME)-standalone.xml.in
	cp $< $@
	sed 's|NAME|$(NAME)|' -i $@

$(NAME)-standalone.sh: $(NAME)-standalone.sh.in $(NAME)-standalone.xml
	cp $< $@
	sed 's|_NAME_|$(NAME)|'               -i $@
	sed 's|_LOGDIR_|$(LOGDIR)|'           -i $@
	sed 's|_COMMANDPIPE_|$(COMMANDPIPE)|' -i $@
	sed 's|_DATADIR_|$(DATADIR)|'         -i $@
	sed 's/_DESCRIPTION_/$(DESCRIPTION)/' -i $@
	sed 's/_VERSION_/$(VERSION)/'         -i $@
	chmod +x $@

$(NAME).xml: $(NAME).xml.in
	cp $< $@
	sed 's|NAME|$(NAME)|'     -i $@
	sed 's|PREFIX|$(PREFIX)|' -i $@

sharedir: share
	mkdir -p $(PREFIX)/share/$(NAME)/
	install -m 644 share/* $(PREFIX)/share/$(NAME)/
bindir:
	mkdir -p $(PREFIX)/bin
libdir:
	mkdir -p $(PREFIX)/lib/$(NAME)
installlauncher: sharedir bindir
	install -m 644 $(NAME)-standalone.xml $(PREFIX)/share/$(NAME)/$(NAME)-standalone.xml
	install -m 755 $(NAME)-standalone.sh $(PREFIX)/bin/$(NAME)
installbyte: byte bindir installlauncher
	install -m 755 $(BYTE) $(PREFIX)/bin/
installnative: native bindir installlauncher
	install -m 755 $(NATIVE) $(PREFIX)/bin/
installlib: libdir sharedir $(NAME).xml
	install -m 644 META $(PREFIX)/lib/$(NAME)
	install -m 644 $(NAME).xml $(PREFIX)/share/$(NAME)/
installbytelib: bytelib installlib
	install -m 644 $(CMA) $(PREFIX)/lib/$(NAME)
installsharedlib: sharedlib installlib
	install -m 755 $(CMXS) $(PREFIX)/lib/$(NAME)

uninstall:
	rm -rf $(PREFIX)/share/$(NAME)
	rm -f  $(PREFIX)/bin/$(NAME)
	rm -f  $(PREFIX)/bin/$(BYTE)
	rm -f  $(PREFIX)/bin/$(NATIVE)
	rm -rf $(PREFIX)/lib/$(NAME)

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

.PHONY: doc

.ml.cmo:
	$(CAMLC) -c $<
.mli.cmi:
	$(CAMLC) -c $<
.ml.cmx:
	$(CAMLOPT) -c $<

clean:
	-rm -f *.cm[ioxa] *.a *.o *.cmx[as] *~ .depend META
	-rm -f $(BYTE) $(NATIVE) $(NAME)-standalone.sh $(NAME)-standalone.xml $(NAME).xml
	-rm -rf doc
	-rm -f highlight.ml cache.ml

depend: .depend

.depend: $(FILES)
	$(CAMLDEP) $(LIB) $(FILES:.ml=.mli) $(FILES) > .depend

FORCE:

-include .depend

