include Makefile.config

PACKAGES = lwt,ocsigenserver,gikia-common
STATICPACKAGES = eliom,ocsigenserver,ocsigenserver.commandline,ocsigenserver.baselib,ocsigenserver.ext,ocsigenserver.ext.ocsipersist-sqlite,eliom.server,eliom.server.duce
FILES = 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:   META $(CMA)
sharedlib: META $(CMXS)
byte:   $(NAME)-static.sh $(BYTE)
native: $(NAME)-static.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 $@

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

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

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

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

$(NAME)-static.xml: $(NAME)-static.xml.in
	cp $< $@

$(NAME)-static.sh: $(NAME)-static.sh.in $(NAME)-static.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 $@

sharedir:
	mkdir -p $(PREFIX)/share/$(NAME)/
bindir:
	mkdir -p $(PREFIX)/bin
installlauncher: sharedir bindir
	install -m 644 $(NAME)-static.xml $(PREFIX)/share/$(NAME)/$(NAME)-static.xml
	install -m 755 $(NAME)-static.sh $(PREFIX)/bin/gikia
installbyte: byte installlauncher
	install -m 755 $(BYTE) $(PREFIX)/share/$(NAME)/
installnative: native installlauncher
	install -m 755 $(NATIVE) $(PREFIX)/share/$(NAME)/
installlib:
	ocamlfind install $(NAME) META $(CMA) $(CMXA) $(CMXS) $(wildcard *.a)
installbytelib: bytelib installlib
installnativelib: nativelib installib

uninstall:
#	ocamlfind remove $(NAME)
	rm -rf $(PREFIX)/share/$(NAME)
	rm -f $(PREFIX)/bin/gikia

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

.PHONY: all depend byte native shared install uninstall

.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)-static.sh $(NAME)-static.xml

depend: .depend

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

FORCE:

-include .depend


