Coccinelle release 1.0.0-rc15
[bpt/coccinelle.git] / bundles / menhirLib / menhir-20120123 / demos / OMakefile.shared
CommitLineData
d6ce1786
C
1# This OMakefile is designed for projects that use Objective Caml,
2# ocamllex, menhir, and alphaCaml.
3
4# This OMakefile is meant to be included within a host OMakefile
5# that defines the following variables:
6#
7# GENERATED : a list of the source (.ml and .mli) files
8# that are generated (by invoking ocamllex
9# or menhir)
10#
11# MODULES : a list of the modules (without extension)
12# that should be linked into the executable
13# program. Order is significant.
14#
15# EXECUTABLE : the base name of the executables that should
16# be produced. Suffixes $(BSUFFIX) and $(OSUFFIX)
17# will be added to distinguish the bytecode and
18# native code versions.
19
20# -------------------------------------------------------------------------
21
22# The host OMakefile can override the following default settings.
23
24# Menhir.
25
26if $(not $(defined MENHIR))
27 MENHIR = menhir
28 export
29
30# Parser generation flags.
31
32if $(not $(defined MENHIR_FLAGS))
33 MENHIR_FLAGS = --infer -v
34 export
35
36# Include directives for compilation and for linking.
37
38if $(not $(defined PREFIXED_OCAMLINCLUDES))
39 PREFIXED_OCAMLINCLUDES =
40 export
41
42# Bytecode compilation flags.
43
44if $(not $(defined BFLAGS))
45 BFLAGS = -dtypes -g
46 export
47
48# Native code compilation flags.
49
50if $(not $(defined OFLAGS))
51 OFLAGS = -dtypes
52 export
53
54# Menhir-suggested compilation flags.
55if $(not $(defined SUGG_FLAGS))
56 SUGG_FLAGS = $(shell $(MENHIR) $(MENHIR_FLAGS) --suggest-comp-flags 2>/dev/null)
57 export
58
59# Bytecode link-time flags.
60
61if $(not $(defined BLNKFLAGS))
62 BLNKFLAGS = -g
63 export
64
65# Menhir-suggested bytecode link-time flags.
66if $(not $(defined SUGG_BLNKFLAGS))
67 SUGG_BLNKFLAGS = $(shell $(MENHIR) $(MENHIR_FLAGS) --suggest-link-flags-byte 2>/dev/null)
68 export
69
70# Native code link-time flags.
71
72if $(not $(defined OLNKFLAGS))
73 OLNKFLAGS =
74 export
75
76# Menhir-suggested native code link-time flags.
77if $(not $(defined SUGG_OLNKFLAGS))
78 SUGG_OLNKFLAGS = $(shell $(MENHIR) $(MENHIR_FLAGS) --suggest-link-flags-opt 2>/dev/null)
79 export
80
81# Lexer generation flags.
82
83if $(not $(defined LGFLAGS))
84 LGFLAGS =
85 export
86
87# Suffix appended to the name of the bytecode executable.
88
89if $(not $(defined BSUFFIX))
90 BSUFFIX = .byte
91 export
92
93# Suffix appended to the name of the native code executable.
94
95if $(not $(defined OSUFFIX))
96 OSUFFIX =
97 export
98
99# Access paths for the tools.
100
101if $(not $(defined OCAML))
102 OCAML = ocaml
103 export
104
105if $(not $(defined OCAMLC))
106 if $(which ocamlfind)
107 OCAMLC = ocamlfind ocamlc
108 export
109 elseif $(which ocamlc.opt)
110 OCAMLC = ocamlc.opt
111 export
112 else
113 OCAMLC = ocamlc
114 export
115 export
116
117if $(not $(defined OCAMLOPT))
118 if $(which ocamlfind)
119 OCAMLOPT = ocamlfind ocamlopt
120 export
121 elseif $(which ocamlopt.opt)
122 OCAMLOPT = ocamlopt.opt
123 export
124 else
125 OCAMLOPT = ocamlopt
126 export
127 export
128
129if $(not $(defined OCAMLDEP))
130 if $(which ocamlfind)
131 OCAMLDEP = ocamlfind ocamldep
132 export
133 elseif $(which ocamldep.opt)
134 OCAMLDEP = ocamldep.opt
135 export
136 else
137 OCAMLDEP = ocamldep
138 export
139 export
140
141if $(not $(defined OCAMLDEPWRAPPER))
142 OCAMLDEPWRAPPER = ./ocamldep.wrapper
143 export
144
145if $(not $(defined OCAMLLEX))
146 OCAMLLEX = ocamllex
147 export
148
149if $(not $(defined ALPHACAML))
150 ALPHACAML = alphaCaml
151 export
152
153# ----------------------------------------------------------------
154
155# Define an ocamldep wrapper that creates fake generated files so that
156# ocamldep can see that these files exist (or are supposed to exist).
157# This is required to work around ocamldep's brokenness.
158
159WrapScanner(command) =
160 $(OCAML) $(OCAMLDEPWRAPPER) $(GENERATED) - $(command)
161
162# ----------------------------------------------------------------
163
164# Dependencies.
165
166.SCANNER: %.cmi: %.mli
167 WrapScanner($(OCAMLDEP) $<)
168
169.SCANNER: %.cmx %.cmo %.o: %.ml
170 WrapScanner($(OCAMLDEP) $<)
171
172# ----------------------------------------------------------------
173
174# Compilation.
175
176%.cmi: %.mli
177 $(OCAMLC) $(PREFIXED_OCAMLINCLUDES) $(BFLAGS) $(SUGG_FLAGS) -c $<
178
179%.cmo: %.ml
180 $(OCAMLC) $(PREFIXED_OCAMLINCLUDES) $(BFLAGS) $(SUGG_FLAGS) -c $<
181
182%.cmx %.o: %.ml
183 $(OCAMLOPT) $(PREFIXED_OCAMLINCLUDES) $(OFLAGS) $(SUGG_FLAGS) -c $<
184
185%.ml: %.mll
186 $(OCAMLLEX) $(LGFLAGS) $<
187
188%.ml %.mli: %.mla
189 $(ALPHACAML) $<
190
191# ----------------------------------------------------------------
192
193# Linking.
194
195$(EXECUTABLE)$(OSUFFIX): $(addsuffix .cmx, $(MODULES))
196 $(OCAMLOPT) -o $@ $(PREFIXED_OCAMLINCLUDES) $(OLNKFLAGS) $(SUGG_FLAGS) $(SUGG_OLNKFLAGS) $+
197
198$(EXECUTABLE)$(BSUFFIX): $(addsuffix .cmo, $(MODULES))
199 $(OCAMLC) -o $@ $(PREFIXED_OCAMLINCLUDES) $(BLNKFLAGS) $(SUGG_FLAGS) $(SUGG_BLNKFLAGS) $+
200
201# ----------------------------------------------------------------
202
203# Menhir: multiple file projects.
204
205MenhirMulti(target, sources, options) =
206 TARGETS = $(file $(target).ml $(target).mli)
207 SOURCES = $(file $(sources))
208 $(TARGETS): $(SOURCES)
209 $(MENHIR) --ocamlc "$(OCAMLC) $(PREFIXED_OCAMLINCLUDES) $(BFLAGS)" $(MENHIR_FLAGS) --base $(target) $(options) $(SOURCES)
210 .SCANNER: $(TARGETS): $(SOURCES)
211 WrapScanner($(MENHIR) --ocamldep "$(OCAMLDEP)" --depend --base $(target) $(options) $(SOURCES))
212
213# Menhir: single file projects.
214
215MenhirMono(target, options) =
216 MenhirMulti($(target), $(target).mly, $(options))
217
218# Menhir: automatic single file projects.
219# This causes every .mly file to be viewed as a single file project.
220
221MenhirAuto() =
222 foreach (target, $(glob *.mly))
223 MenhirMono($(removesuffix $(target)), $(EMPTY))
224
225# ----------------------------------------------------------------
226
227.PHONY: clean
228
229clean:
230 /bin/rm -f $(EXECUTABLE)$(BSUFFIX) $(EXECUTABLE)$(OSUFFIX) $(GENERATED)
231 /bin/rm -f *.cmi *.cmx *.cmo *.o *~ .*~ *.automaton *.conflicts *.annot