Coccinelle release 1.0.0-rc13
[bpt/coccinelle.git] / bundles / menhirLib / Makefile
CommitLineData
feec80c3
C
1# Bundles the original menhirLib package without modifications.
2# This Makefile integrates its build process with coccinelle.
3
4# the build process is conventional build of the ml files, with
5# the exception that all modules are packed as a submodule of
6# a master module "MenhirLib" instead of an archive file.
7
8ifneq ($(MAKECMDGOALS),distclean)
9include ../../Makefile.config
10endif
11
d6ce1786
C
12OCAMLCFLAGS ?= -g -dtypes
13OPTFLAGS ?= -g -dtypes
14
feec80c3
C
15VERSION=20120123
16MENHIRDIR=menhir-$(VERSION)
17MENHIRLIB=$(MENHIRDIR)/src
18MENHIRMARKER=$(MENHIRLIB)/.marker
19
d6ce1786 20OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -I $(MENHIRLIB) -thread
feec80c3
C
21OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -I $(MENHIRLIB) -thread
22OCAMLDEP_CMD=$(OCAMLDEP) -I $(MENHIRLIB)
23
d6ce1786
C
24all: .depend
25 @$(MAKE) all-build
26all-build: .depend menhirLib.cma META
27
28all.opt: .depend
29 @$(MAKE) all-opt-build
30all-opt-build: .depend menhirLib.cmxa META
feec80c3
C
31
32clean:
33 rm -f menhirLib.cma menhirLib.cmxa META \
34 $(MENHIRLIB)/*.cm[ioxa] \
35 $(MENHIRLIB)/*.o \
36 $(MENHIRLIB)/engineTypes.mli $(MENHIRLIB)/tableFormat.mli \
37 menhirLib.cm[ioxa] menhirLib.[oa] \
38 .depend
39
40distclean: clean
41 rm -rf $(MENHIRDIR)
42
43$(MENHIRMARKER): $(MENHIRDIR).tar.gz
44 $(TAR) xfvz $<
45 touch $@
46
47$(MENHIRDIR).tar.gz:
48 @echo "$@ not found. Please download it and drop it in this directory ($(pwd))."
49 @false
50
d6ce1786 51.PHONEY: all all.opt all-build all-opt-build clean distclean depend depend-build
feec80c3
C
52
53# Sources needed for coccinelle
54MODULES=infiniteArray packedIntArray rowDisplacement engineTypes \
55 engine tableFormat tableInterpreter convert
56
57MLI=$(MODULES:%=$(MENHIRLIB)/%.mli)
58SRC=$(MODULES:%=$(MENHIRLIB)/%.ml)
59
60# Link
61menhirLib.cma: .depend $(MLI:.mli=.cmi) $(SRC:.ml=.cmo)
62 $(OCAMLC_CMD) -pack -o menhirLib.cmo $(SRC:.ml=.cmo)
63 $(OCAMLC_CMD) -a -o menhirLib.cma menhirLib.cmo
64
65menhirLib.cmxa: .depend $(MLI:.mli=.cmi) $(SRC:.ml=.cmx)
66 $(OCAMLOPT) -pack -o menhirLib.cmx $(SRC:.ml=.cmx)
67 $(OCAMLOPT) -a -o menhirLib.cmxa menhirLib.cmx
68
69# Generic rules
70.SUFFIXES: .ml .mli .cmo .cmi .cmx
71.PRECIOUS: $(MLI)
72
73.ml.mli:
d6ce1786 74 $(OCAMLC_CMD) -for-pack MenhirLib -i $< > $@
feec80c3
C
75
76.mli.cmi:
77 $(OCAMLC_CMD) -for-pack MenhirLib -c $<
78
79.ml.cmo:
80 $(OCAMLC_CMD) -for-pack MenhirLib -c $<
81
82.ml.cmx:
83 $(OCAMLOPT_CMD) -for-pack MenhirLib -c $<
84
85META: $(MENHIRLIB)/META
86 cp $< $@
87
88# the 'depend' target
89.depend depend: $(MENHIRMARKER)
d6ce1786
C
90 @$(MAKE) depend-build
91
92depend-build: $(MENHIRMARKER) $(SRC) $(MLI)
feec80c3
C
93 $(OCAMLDEP_CMD) $(MENHIRLIB)/*.mli $(MENHIRLIB)/*.ml > .depend
94
d6ce1786
C
95# extra dependencies that are needed to generate mli files
96# that are needed for ocamldep
97$(MENHIRLIB)/tableFormat.mli: $(MENHIRLIB)/packedIntArray.cmi $(MENHIRLIB)/engineTypes.cmi
98
feec80c3
C
99ifneq ($(MAKECMDGOALS),clean)
100ifneq ($(MAKECMDGOALS),distclean)
d6ce1786
C
101ifneq ($(MAKECMDGOALS),depend-build)
102include .depend
103endif
feec80c3
C
104endif
105endif
d6ce1786
C
106
107include ../../Makefile.common