Coccinelle release 0.2.5-rc3
[bpt/coccinelle.git] / commons / Makefile
1 ##############################################################################
2 # Variables
3 ##############################################################################
4
5 # The main library
6 -include ../Makefile.config
7
8 TARGET=commons
9
10 # note: if you add a file (a .mli or .ml), dont forget to redo a 'make depend'
11 MYSRC= common.ml common_extra.ml \
12 interfaces.ml objet.ml \
13 ocollection.ml \
14 seti.ml \
15 oset.ml oassoc.ml osequence.ml ograph.ml \
16 ocollection/oseti.ml \
17 ocollection/oseth.ml \
18 ocollection/osetb.ml \
19 ocollection/osetpt.ml \
20 ocollection/oassocb.ml \
21 ocollection/oassoch.ml \
22 ocollection/oassoc_buffer.ml \
23 ocollection/oassoc_cache.ml \
24 ocollection/oassocid.ml \
25 oarray.ml \
26 ocollection/ograph2way.ml \
27 ograph_simple.ml ograph_extended.ml \
28 ofullcommon.ml \
29 glimpse.ml parser_combinators.ml
30
31 # src from other authors, got from the web or caml hump
32 SRC=ocamlextra/dumper.ml
33 SRC+=ocamlextra/ANSITerminal.ml
34 SRC+=ocamlextra/setb.ml ocamlextra/mapb.ml # defunctorized version of standard set/map
35 SRC+=ocamlextra/setPt.ml
36 SRC+=$(MYSRC)
37 SRC+=ocamlextra/enum.ml ocamlextra/dynArray.ml
38 SRC+=ocamlextra/suffix_tree.ml ocamlextra/suffix_tree_ext.ml
39
40 SYSLIBS=str.cma bigarray.cma unix.cma
41
42 INCLUDEDIRS=ocamlextra ocollection
43 SUBDIRS=ocamlextra ocollection
44
45 #-----------------------------------------------------------------------------
46 # Other common (thin wrapper) libraries
47 #-----------------------------------------------------------------------------
48
49 #format: XXXSRC, XXXINCLUDE, XXXSYSLIBS
50
51 #gdbm
52 MYGDBMSRC=ocollection/oassocdbm.ml
53 GDBMSYSLIBS=dbm.cma
54
55 #berkeley db (ocamlbdb)
56 MYBDBSRC=ocollection/oassocbdb.ml ocollection/oassocbdb_string.ml
57 BDBINCLUDES=-I ../ocamlbdb
58 BDBSYSLIBS=bdb.cma
59
60
61 #lablgtk (ocamlgtk)
62 MYGUISRC=gui.ml
63 GUIINCLUDES=-I +lablgtk2 -I +lablgtksourceview -I ../ocamlgtk/src
64 GUISYSLIBS=lablgtk.cma lablgtksourceview.cma
65
66 #pycaml (ocamlpython)
67 MYPYSRC=python.ml
68 PYINCLUDES=-I ../ocamlpython -I ../../ocamlpython
69 PYSYSLIBS=python.cma
70
71 #ocamlmpi
72 MYMPISRC=distribution.ml
73 MPIINCLUDES=-I ../ocamlmpi -I ../../ocamlmpi -I +ocamlmpi
74 MPISYSLIBS=mpi.cma
75
76 #pcre
77 #REGEXPINCLUDES=-I +pcre
78 MYREGEXPSRC=regexp.ml
79 REGEXPINCLUDES=-I ../ocamlpcre/lib -I ../../ocamlpcre/lib
80
81 #sexplib
82 MYSEXPSRC=sexp_common.ml
83 ifeq ("$(SEXPDIR)","ocamlsexp")
84 SEXPDIRUSED=../$(SEXPDIR)
85 else
86 SEXPDIRUSED=$(SEXPDIR)
87 endif # Use local ocamlsexp
88 SEXPINCLUDES=-I $(SEXPDIRUSED) \
89 -I ../ocamltarzan/lib-sexp \
90 -I ../../ocamltarzan/lib-sexp
91
92 #binprot
93 MYBINSRC=bin_common.ml
94 BININCLUDES=-I ../ocamltarzan/lib-binprot -I ../../ocamltarzan/lib-binprot
95
96 #-----------------------------------------------------------------------------
97 # Other stuff
98 #-----------------------------------------------------------------------------
99
100 #backtrace
101 MYBACKTRACESRC=backtrace.ml
102 BACKTRACEINCLUDES=-I $(shell ocamlc -where)
103
104
105 ##############################################################################
106 # Generic variables
107 ##############################################################################
108
109 INCLUDES=$(INCLUDEDIRS:%=-I %) $(INCLUDESEXTRA)
110
111 ##############################################################################
112 # Generic ocaml variables
113 ##############################################################################
114
115 # This flag can also be used in subdirectories so don't change its name here.
116 # For profiling use: -p -inline 0
117 OPTFLAGS=
118 #-thread
119
120 # The OPTBIN variable is here to allow to use ocamlc.opt instead of
121 # ocaml, when it is available, which speeds up compilation. So
122 # if you want the fast version of the ocaml chain tools, set this var
123 # or setenv it to ".opt" in your startup script.
124 OPTBIN ?= #.opt
125
126 OCAMLCFLAGS ?= -g -dtypes
127
128 # The OCaml tools.
129 OCAMLC =ocamlc$(OPTBIN) $(OCAMLCFLAGS) $(INCLUDES)
130 OCAMLOPT=ocamlopt$(OPTBIN) $(OPTFLAGS) $(INCLUDES)
131 OCAMLLEX = ocamllex$(OPTBIN)
132 OCAMLYACC= ocamlyacc -v
133 OCAMLDEP = ocamldep$(OPTBIN) $(INCLUDES)
134 OCAMLMKTOP=ocamlmktop -g -custom $(INCLUDES)
135
136 # if need C code
137 OCAMLMKLIB=ocamlmklib
138 CC=gcc
139
140 ##############################################################################
141 # Top rules
142 ##############################################################################
143 LIB=$(TARGET).cma
144 OPTLIB=$(LIB:.cma=.cmxa)
145
146 OBJS = $(SRC:.ml=.cmo)
147 OPTOBJS = $(SRC:.ml=.cmx)
148
149
150 all: $(LIB)
151 all.opt: $(OPTLIB)
152 opt: all.opt
153 top: $(TARGET).top
154
155 $(LIB): $(OBJS)
156 $(OCAMLC) -a -o $@ $^
157
158 $(OPTLIB): $(OPTOBJS)
159 $(OCAMLOPT) -a -o $@ $^
160
161 $(TARGET).top: $(OBJS)
162 $(OCAMLMKTOP) -o $@ $(SYSLIBS) $^
163
164 clean::
165 rm -f $(TARGET).top
166
167 ##############################################################################
168 # Other commons libs target
169 ##############################################################################
170
171 all_libs: gdbm bdb gui mpi regexp backtrace
172
173 #-----------------------------------------------------------------------------
174 gdbm: commons_gdbm.cma
175 gdbm.opt: commons_gdbm.cmxa
176
177 commons_gdbm.cma: $(MYGDBMSRC:.ml=.cmo)
178 $(OCAMLC) -a -o $@ $^
179
180 commons_gdbm.cmxa: $(MYGDBMSRC:.ml=.cmx)
181 $(OCAMLOPT) -a -o $@ $^
182
183
184 #-----------------------------------------------------------------------------
185 bdb:
186 $(MAKE) INCLUDESEXTRA="$(BDBINCLUDES)" commons_bdb.cma
187 bdb.opt:
188 $(MAKE) INCLUDESEXTRA="$(BDBINCLUDES)" commons_bdb.cmxa
189
190 commons_bdb.cma: $(MYBDBSRC:.ml=.cmo)
191 $(OCAMLC) -a -o $@ $^
192
193 commons_bdb.cmxa: $(MYBDBSRC:.ml=.cmx)
194 $(OCAMLOPT) -a -o $@ $^
195
196
197
198 #-----------------------------------------------------------------------------
199 gui:
200 $(MAKE) INCLUDESEXTRA="$(GUIINCLUDES)" commons_gui.cma
201 gui.opt:
202 $(MAKE) INCLUDESEXTRA="$(GUIINCLUDES)" commons_gui.cmxa
203
204 commons_gui.cma: $(MYGUISRC:.ml=.cmo)
205 $(OCAMLC) -a -o $@ $^
206
207 commons_gui.cmxa: $(MYGUISRC:.ml=.cmx)
208 $(OCAMLOPT) -a -o $@ $^
209
210
211
212 #-----------------------------------------------------------------------------
213 mpi:
214 $(MAKE) INCLUDESEXTRA="$(MPIINCLUDES)" commons_mpi.cma
215 mpi.opt:
216 $(MAKE) INCLUDESEXTRA="$(MPIINCLUDES)" commons_mpi.cmxa
217
218 commons_mpi.cma: $(MYMPISRC:.ml=.cmo)
219 $(OCAMLC) -a -o $@ $^
220
221 commons_mpi.cmxa: $(MYMPISRC:.ml=.cmx)
222 $(OCAMLOPT) -a -o $@ $^
223
224 #alias
225 distribution: mpi
226 distribution.opt: mpi.opt
227
228
229
230 #-----------------------------------------------------------------------------
231 python:
232 $(MAKE) INCLUDESEXTRA="$(PYINCLUDES)" commons_python.cma
233 python.opt:
234 $(MAKE) INCLUDESEXTRA="$(PYINCLUDES)" commons_python.cmxa
235
236
237 commons_python.cma: $(MYPYSRC:.ml=.cmo)
238 $(OCAMLC) -a -o $@ $^
239
240 commons_python.cmxa: $(MYPYSRC:.ml=.cmx)
241 $(OCAMLOPT) -a -o $@ $^
242
243
244 #-----------------------------------------------------------------------------
245 regexp:
246 $(MAKE) INCLUDESEXTRA="$(REGEXPINCLUDES)" commons_regexp.cma
247 regexp.opt:
248 $(MAKE) INCLUDESEXTRA="$(REGEXPINCLUDES)" commons_regexp.cmxa
249
250 commons_regexp.cma: $(MYREGEXPSRC:.ml=.cmo)
251 $(OCAMLC) -a -o $@ $^
252
253 commons_regexp.cmxa: $(MYREGEXPSRC:.ml=.cmx)
254 $(OCAMLOPT) -a -o $@ $^
255
256
257 #-----------------------------------------------------------------------------
258 backtrace: commons_backtrace.cma
259 backtrace.opt: commons_backtrace.cmxa
260
261 backtrace_c.o: backtrace_c.c
262 $(CC) $(BACKTRACEINCLUDES) -c $^
263
264 commons_backtrace.cma: $(MYBACKTRACESRC:.ml=.cmo) backtrace_c.o
265 $(OCAMLMKLIB) -o commons_backtrace $^
266
267 commons_backtrace.cmxa: $(MYBACKTRACESRC:.ml=.cmx) backtrace_c.o
268 $(OCAMLMKLIB) -o commons_backtrace $^
269
270 clean::
271 rm -f dllcommons_backtrace.so
272
273
274
275 #-----------------------------------------------------------------------------
276 sexp:
277 $(MAKE) INCLUDESEXTRA="$(SEXPINCLUDES)" commons_sexp.cma
278 sexp.opt:
279 $(MAKE) INCLUDESEXTRA="$(SEXPINCLUDES)" commons_sexp.cmxa
280
281 commons_sexp.cma: $(MYSEXPSRC:.ml=.cmo)
282 $(OCAMLC) -a -o $@ $^
283
284 commons_sexp.cmxa: $(MYSEXPSRC:.ml=.cmx)
285 $(OCAMLOPT) -a -o $@ $^
286
287 binprot:
288 $(MAKE) INCLUDESEXTRA="$(BININCLUDES)" commons_bin.cma
289 binprot.opt:
290 $(MAKE) INCLUDESEXTRA="$(BININCLUDES)" commons_bin.cmxa
291
292 commons_bin.cma: $(MYBINSRC:.ml=.cmo)
293 $(OCAMLC) -a -o $@ $^
294
295 commons_bin.cmxa: $(MYBINSRC:.ml=.cmx)
296 $(OCAMLOPT) -a -o $@ $^
297
298 ##############################################################################
299 # The global "features" lib wrapper
300 ##############################################################################
301
302 features: commons_features.cma
303 features.opt: commons_features.cmxa
304
305 commons_features.cma: features.cmo
306 $(OCAMLC) -a -o $@ $^
307
308 commons_features.cmxa: features.cmx
309 $(OCAMLOPT) -a -o $@ $^
310
311
312 ##############################################################################
313 # Developer rules
314 ##############################################################################
315
316 tags:
317 otags -no-mli-tags -r .
318
319 clean::
320 rm -f gmon.out
321
322 forprofiling:
323 $(MAKE) OPTFLAGS="-p -inline 0 " opt
324
325 dependencygraph:
326 ocamldep *.mli *.ml > /tmp/dependfull.depend
327 ocamldot -fullgraph /tmp/dependfull.depend > /tmp/dependfull.dot
328 dot -Tps /tmp/dependfull.dot > /tmp/dependfull.ps
329
330 dependencygraph2:
331 find -name "*.ml" |grep -v "scripts" | xargs ocamldep -I commons -I globals -I ctl -I parsing_cocci -I parsing_c -I engine -I popl -I extra > /tmp/dependfull.depend
332 ocamldot -fullgraph /tmp/dependfull.depend > /tmp/dependfull.dot
333 dot -Tps /tmp/dependfull.dot > /tmp/dependfull.ps
334
335
336 ##############################################################################
337 # Generic rules
338 ##############################################################################
339 .SUFFIXES:
340 .SUFFIXES: .ml .mli .cmo .cmi .cmx
341
342 .ml.cmo:
343 $(OCAMLC) -c $<
344 .mli.cmi:
345 $(OCAMLC) -c $<
346 .ml.cmx:
347 $(OCAMLOPT) -c $<
348
349 clean::
350 rm -f *.cm[iox] *.o *.a *.cma *.cmxa *.annot
351 rm -f *~ .*~ #*#
352
353 clean::
354 for i in $(SUBDIRS); do (cd $$i; \
355 rm -f *.cm[iox] *.o *.a *.cma *.cmxa *.annot *~ .*~ ; \
356 cd ..; ) \
357 done
358
359 depend:
360 $(OCAMLDEP) *.mli *.ml > .depend
361 for i in $(SUBDIRS); do $(OCAMLDEP) $$i/*.ml $$i/*.mli >> .depend; done
362
363 distclean::
364 rm -f .depend
365
366 -include .depend