#### Generic Makefile for generating a single OCaml library #### Change these things for your project # Required NAME = debian MODULES = prelexer \ debparser \ deblexer \ desktopparser \ desktoplexer \ libmenuparser \ libmenulexer \ logparser \ loglexer \ $(NAME) \ debinfo \ dh EXPORT_INTERFACES = debparser desktopparser desktoplexer libmenuparser libmenulexer logparser $(NAME) debinfo # Optional PACKAGES = pcre PREDICATES = C_LIBS = C_OBJS = debian_c.o CCLIBS = CCOPTS = OCAMLC_OPTS = OCAMLOPT_OPTS = -compact #-verbose CLEAN_EXTRAS = #### Mostly automatic from here on OCAMLC = ocamlfind ocamlc $(OCAMLC_OPTS) -g OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPT_OPTS) $(CCOPTS) OCAMLDEP = ocamldep OCAMLLEX = ocamllex OCAMLYACC = ocamlyacc OCAMLMKTOP = ocamlfind ocamlmktop OCAMLMKLIB = ocamlmklib -verbose OBJECTS = $(C_OBJS) $(addsuffix .cmo, $(MODULES)) XOBJECTS = $(C_OBJS) $(addsuffix .cmx, $(MODULES)) EXPORT_MLI = $(addsuffix .mli, $(EXPORT_INTERFACES)) EXPORT_CMI = $(addsuffix .cmi, $(EXPORT_INTERFACES)) dh.cmi ARCHIVE = $(NAME).cma XARCHIVE = $(NAME).cmxa DLLNAME = dll$(NAME)stub.so OCAMLLIBDIR = $(shell ocamlc -where) PKGLIBDIR = $(OCAMLLIBDIR)/$(NAME) DEBINSTALL = install -p -o root -g root -m 644 .PHONY: all opt clean realclean install all: byte opt byte: $(ARCHIVE) opt: $(XARCHIVE) $(ARCHIVE): $(OBJECTS) $(OCAMLMKLIB) -o debian -oc debianstub $(OBJECTS) $(XARCHIVE): $(XOBJECTS) $(OCAMLMKLIB) -o debian -oc debianstub $(XOBJECTS) %.mli_: %.ml $(OCAMLC) -package "$(PACKAGES)" -c -i $*.ml > $@ .SUFFIXES: .cmo .cmi .cmx .ml .mli .mly .mll .ml.cmo: $(OCAMLC) -package "$(PACKAGES)" -predicates "$(PREDICATES)" \ -c $< .mli.cmi: $(OCAMLC) -package "$(PACKAGES)" -predicates "$(PREDICATES)" \ -c $< .ml.cmx: $(OCAMLOPT) -package "$(PACKAGES)" -predicates "$(PREDICATES)" \ -c $< %.ml: %.mll $(OCAMLLEX) $< %.ml %.mli: %.mly $(OCAMLYACC) $< depend: *.ml $(wildcard *.mli) $(patsubst %.mly, %.ml, $(wildcard *.mly)) \ $(patsubst %.mll, %.ml, $(wildcard *.mll)) Makefile $(OCAMLDEP) *.ml *.mli >depend include depend doc: Makefile $(NAME).ml $(NAME).mli install -d doc/html ocamldoc `ocamlfind query -i-format $(PACKAGES)` -colorize-code -html $(NAME).ml $(NAME).mli -d doc/html META: debian/changelog Makefile META.tmpl (VERSION=`head -n 1 debian/changelog | sed -e 's/.* (\(.*\)).*$$/\1/'`; \ sed -e "s/NAME/$(NAME)/" META.tmpl | \ sed -e "s/VERSION/$$VERSION/" | \ sed -e "s/\"PACKAGES/\"$(PACKAGES)/" | \ sed -e "s/\"ARCHIVE/\"$(ARCHIVE)/" | \ sed -e "s/\"XARCHIVE/\"$(XARCHIVE)/" | \ sed -e "s/CCLIBS/$(CCLIBS)/" \ > META ) install: all META install -d $(DESTDIR)$(PKGLIBDIR) $(DEBINSTALL) META $(NAME).cmxa $(NAME).cma $(EXPORT_MLI) $(EXPORT_CMI) $(DESTDIR)$(PKGLIBDIR) (test -f $(XARCHIVE) && $(DEBINSTALL) $(XARCHIVE) lib$(NAME)stub.a $(NAME).a $(DESTDIR)$(PKGLIBDIR)) (test -f $(DLLNAME) && \ install -d $(DESTDIR)$(OCAMLLIBDIR)/stublibs && \ $(DEBINSTALL) $(DLLNAME) $(DESTDIR)$(OCAMLLIBDIR)/stublibs) clean: rm -f *.cmi *.cmo *.cmx *.cma *.o *.a *.cma *.cmxa *.so META $(NAME).top *.output rm -rf doc rm -rf $(patsubst %.mly, %.ml, $(wildcard *.mly)) $(patsubst %.mly, %.mli, $(wildcard *.mly)) rm -rf $(patsubst %.mll, %.ml, $(wildcard *.mll)) realclean: clean rm -f *~ TAGS *.mli_ #.PHONY: install uninstall #install: all # { test ! -f $(XARCHIVE) || extra="$(XARCHIVE) "`basename $(XARCHIVE) .cmxa`.a }; \ # ocamlfind install $(NAME) *.mli *.cmi $(ARCHIVE) META $$extra -destdir $(DESTDIR) #uninstall: # ocamlfind remove $(NAME) #Last but not least a cleanup rule: # #.PHONY: clean # rm -f *.cmi *.cmo *.cmx *.cma *.cmxa *.a