#### Generic Makefile for generating a single OCaml library #### The stuff in this file should not need to be changed. OCAMLC = ocamlfind ocamlc $(OCAMLC_OPTS) -g OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPT_OPTS) $(CCOPTS) -compact OCAMLDEP = ocamldep OCAMLLEX = ocamllex OCAMLYACC = ocamlyacc -v OCAMLMKTOP = ocamlfind ocamlmktop OCAMLMKLIB = ocamlmklib -verbose OBJECTS = $(C_OBJS) $(addsuffix .cmo, $(MODULES)) XOBJECTS = $(C_OBJS) $(addsuffix .cmx, $(MODULES)) EXPORT_MLI = $(addsuffix .mli, $(EXPORT_INTERFACES)) # If we add these we also have to install .cmx files #EXPORT_ML = $(addsuffix .ml, $(EXPORT_INTERFACES)) EXPORT_CMI = $(addsuffix .cmi, $(EXPORT_INTERFACES) $(filter-out $(EXPORT_INTERFACES), $(MODULES))) STUB_OBJ = $(addsuffix .o, $(STUBS)) ARCHIVE = $(NAME).cma XARCHIVE = $(NAME).cmxa DLLNAME = dll$(NAME)stub.so TOPNAME = $(NAME).top OCAMLLIBDIR = $(shell ocamlc -where) PKGLIBDIR = $(OCAMLLIBDIR)/$(NAME) DEBINSTALL = install -p -o root -g root -m 644 .PHONY: all opt clean realclean dump-mli install top all: byte opt byte: $(ARCHIVE) opt: $(XARCHIVE) $(ARCHIVE): $(OBJECTS) $(OCAMLMKLIB) -I +threads -o $(NAME) -oc $(NAME)stub $(OBJECTS) # $(OCAMLC) -a -o $(ARCHIVE) -package "$(PACKAGES)" -linkpkg \ # -predicates "$(PREDICATES)" $(OBJECTS) $(XARCHIVE): $(XOBJECTS) $(OCAMLMKLIB) -I +threads -o $(NAME) -oc $(NAME)stub $(XOBJECTS) # $(OCAMLOPT) -a -o $(XARCHIVE) -package "$(PACKAGES)" \ # -predicates "$(PREDICATES)" $(XOBJECTS) #ifneq "$(STUB_OBJ)" "" # $(CC) $(STUB_OBJ) -shared $(CCLIBS) -o $(DLLNAME) #endif %.mli_: %.ml $(OCAMLC) -package "$(PACKAGES)" -c -i $*.ml > $@ top: $(OBJECTS) $(OCAMLMKTOP) -o $(TOPNAME) -package "$(PACKAGES)" -linkpkg $(OBJECTS) dump-mli: $(OCAMLC) -i -c -package "$(PACKAGES)" $(MOD) .SUFFIXES: .cmo .cmi .cmx .ml .mli .mly .mll %.ml %.mli: %.mll $(OCAMLLEX) $< %.ml %.mli: %.mly $(OCAMLYACC) $< .ml.cmo: $(OCAMLC) -package "$(PACKAGES)" -predicates "$(PREDICATES)" -c $< .mli.cmi: $(OCAMLC) -package "$(PACKAGES)" -predicates "$(PREDICATES)" -c $< .ml.cmx: $(OCAMLOPT) -package "$(PACKAGES)" -predicates "$(PREDICATES)" -c $< depend: *.ml $(wildcard *.mli) $(patsubst %.mly, %.ml, $(wildcard *.mly)) Makefile $(OCAMLDEP) *.ml *.mli >depend include depend doc: Makefile depend $(addsuffix .ml, $(EXPORT_INTERFACES)) $(addsuffix .mli, $(EXPORT_INTERFACES)) $(addsuffix .cmi, $(EXPORT_INTERFACES)) install -d doc/html ocamldoc `ocamlfind query -i-format $(PACKAGES)` -I +threads -colorize-code -html \ $(addsuffix .ml, $(MODULES)) $(addsuffix .mli, $(EXPORT_INTERFACES)) -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_ML) $(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 *.mli_ .PHONY: doc #.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