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