Coccinelle release 1.0.0-rc12
[bpt/coccinelle.git] / bundles / menhirLib / Makefile
diff --git a/bundles/menhirLib/Makefile b/bundles/menhirLib/Makefile
new file mode 100644 (file)
index 0000000..cec0a36
--- /dev/null
@@ -0,0 +1,88 @@
+# Bundles the original menhirLib package without modifications.
+# This Makefile integrates its build process with coccinelle.
+
+# the build process is conventional build of the ml files, with
+# the exception that all modules are packed as a submodule of
+# a master module "MenhirLib" instead of an archive file.
+
+ifneq ($(MAKECMDGOALS),distclean)
+include ../../Makefile.config
+endif
+
+VERSION=20120123
+MENHIRDIR=menhir-$(VERSION)
+MENHIRLIB=$(MENHIRDIR)/src
+MENHIRMARKER=$(MENHIRLIB)/.marker
+
+OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -I $(MENHIRLIB) -thread -custom
+OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -I $(MENHIRLIB) -thread
+OCAMLDEP_CMD=$(OCAMLDEP) -I $(MENHIRLIB)
+
+all: menhirLib.cma META
+all.opt: menhirLib.cmxa META
+
+clean:
+       rm -f menhirLib.cma menhirLib.cmxa META \
+               $(MENHIRLIB)/*.cm[ioxa] \
+               $(MENHIRLIB)/*.o \
+               $(MENHIRLIB)/engineTypes.mli $(MENHIRLIB)/tableFormat.mli \
+               menhirLib.cm[ioxa] menhirLib.[oa] \
+               .depend
+
+distclean: clean
+       rm -rf $(MENHIRDIR)
+
+$(MENHIRMARKER): $(MENHIRDIR).tar.gz
+       $(TAR) xfvz $<
+       touch $@
+
+$(MENHIRDIR).tar.gz:
+       @echo "$@ not found. Please download it and drop it in this directory ($(pwd))."
+       @false
+
+.PHONEY: all all.opt clean distclean depend
+
+# Sources needed for coccinelle
+MODULES=infiniteArray packedIntArray rowDisplacement engineTypes \
+               engine tableFormat tableInterpreter convert
+
+MLI=$(MODULES:%=$(MENHIRLIB)/%.mli)
+SRC=$(MODULES:%=$(MENHIRLIB)/%.ml)
+
+# Link
+menhirLib.cma: .depend $(MLI:.mli=.cmi) $(SRC:.ml=.cmo)
+       $(OCAMLC_CMD) -pack -o menhirLib.cmo $(SRC:.ml=.cmo)
+       $(OCAMLC_CMD) -a -o menhirLib.cma menhirLib.cmo
+
+menhirLib.cmxa: .depend $(MLI:.mli=.cmi) $(SRC:.ml=.cmx)
+       $(OCAMLOPT) -pack -o menhirLib.cmx $(SRC:.ml=.cmx)
+       $(OCAMLOPT) -a -o menhirLib.cmxa menhirLib.cmx
+
+# Generic rules
+.SUFFIXES: .ml .mli .cmo .cmi .cmx
+.PRECIOUS: $(MLI)
+
+.ml.mli:
+       $(OCAMLC_CMD) -i $< > $@
+
+.mli.cmi:
+       $(OCAMLC_CMD) -for-pack MenhirLib -c $<
+
+.ml.cmo:
+       $(OCAMLC_CMD) -for-pack MenhirLib -c $<
+
+.ml.cmx:
+       $(OCAMLOPT_CMD) -for-pack MenhirLib -c $<
+
+META: $(MENHIRLIB)/META
+       cp $< $@
+
+# the 'depend' target
+.depend depend: $(MENHIRMARKER)
+       $(OCAMLDEP_CMD) $(MENHIRLIB)/*.mli $(MENHIRLIB)/*.ml > .depend
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(MAKECMDGOALS),distclean)
+-include .depend
+endif
+endif