#### Generic Makefile for generating a single OCaml library #### Change these things for your project # Required NAME = unixutils MODULES = $(NAME) EXPORT_INTERFACES = $(NAME) # Optional PACKAGES = unix pcre PREDICATES = C_LIBS = C_OBJS = unixutils_stubs.o CCLIBS = CCOPTS = OCAML_OPTS = -pp "camlp4o pa_extend.cmo" -I +camlp4 OCAMLC_OPTS = $(OCAML_OPTS) OCAMLOPT_OPTS = $(OCAML_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)) 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 unixutils -oc unixutilsstub $(OBJECTS) $(XARCHIVE): $(XOBJECTS) $(OCAMLMKLIB) -o unixutils -oc unixutilsstub $(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 %.mli: %.mll $(OCAMLLEX) $< %.ml %.mli: %.mly $(OCAMLYACC) $< depend: *.ml $(wildcard *.mli) $(patsubst %.mly, %.ml, $(wildcard *.mly)) Makefile $(OCAMLDEP) $(OCAML_OPTS) $(patsubst %, %.ml, $(MODULES)) $(patsubst %, %.mli, $(EXPORT_INTERFACES)) >depend include depend doc: Makefile $(NAME).ml $(NAME).mli install -d doc/html ocamldoc `ocamlfind query -i-format $(PACKAGES)` $(OCAML_OPTS) -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)) $(patsubst %.mll, %.mli, $(wildcard *.mll)) realclean: clean rm -f *~ TAGS #.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