~ubuntu-branches/debian/sid/frama-c/sid

« back to all changes in this revision

Viewing changes to Makefile.in

  • Committer: Bazaar Package Importer
  • Author(s): Mehdi Dogguy
  • Date: 2009-06-03 08:19:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090603081925-kihvxvt0wy3zc4ar
Tags: upstream-20081201.dfsg
ImportĀ upstreamĀ versionĀ 20081201.dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
##########################################################################
 
2
#                                                                        #
 
3
#  This file is part of Frama-C.                                         #
 
4
#                                                                        #
 
5
#  Copyright (C) 2007-2008                                               #
 
6
#    CEA   (Commissariat ļæ½ l'ļæ½nergie Atomique)                           #
 
7
#    INRIA (Institut National de Recherche en Informatique et en         #
 
8
#           Automatique)                                                 #
 
9
#                                                                        #
 
10
#  you can redistribute it and/or modify it under the terms of the GNU   #
 
11
#  Lesser General Public License as published by the Free Software       #
 
12
#  Foundation, version 2.1.                                              #
 
13
#                                                                        #
 
14
#  It is distributed in the hope that it will be useful,                 #
 
15
#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
 
16
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
 
17
#  GNU Lesser General Public License for more details.                   #
 
18
#                                                                        #
 
19
#  See the GNU Lesser General Public License version v2.1                #
 
20
#  for more details (enclosed in the file licenses/LGPLv2.1).            #
 
21
#                                                                        #
 
22
##########################################################################
 
23
 
 
24
###################################
 
25
# Global variables from configure #
 
26
###################################
 
27
 
 
28
VERBOSEMAKE?=@VERBOSEMAKE@
 
29
ifeq ($(VERBOSEMAKE),yes)
 
30
 QUIET =
 
31
else
 
32
 QUIET = @echo $(1) &&
 
33
endif
 
34
 
 
35
# Be on the safe side with \r and cygwin
 
36
export CYGWIN=nobinmode
 
37
 
 
38
prefix  = @prefix@
 
39
datarootdir= @datarootdir@
 
40
datadir = @datadir@/frama-c
 
41
plugindir =$(datadir)/plugins
 
42
libdir = $(datadir)/lib
 
43
exec_prefix= @exec_prefix@
 
44
BINDIR  = @bindir@
 
45
DESTDIR =
 
46
 
 
47
# where to install the man page
 
48
MANDIR  =@mandir@
 
49
 
 
50
# other variables set by ./configure
 
51
OCAMLC  = @OCAMLC@
 
52
OCAMLOPT= @OCAMLOPT@
 
53
OCAMLDEP= @OCAMLDEP@ -slash
 
54
OCAMLLEX= @OCAMLLEX@
 
55
OCAMLYACC= @OCAMLYACC@
 
56
OCAMLMKTOP= @OCAMLMKTOP@
 
57
OCAMLLIB= @OCAMLLIB@
 
58
OCAMLBEST= @OCAMLBEST@
 
59
OCAMLDOC= @OCAMLDOC@
 
60
OCAMLVERSION = @OCAMLVERSION@
 
61
LOWER_THAN_311= @LOWER_THAN_311@
 
62
CAMLP4O = @CAMLP4O@
 
63
#CAMLP4OOF= @CAMLP4OOF@
 
64
OCAMLWIN32= @OCAMLWIN32@
 
65
LOCAL_MACHDEP=@LOCAL_MACHDEP@
 
66
EXE     = @EXE@
 
67
OCAMLGRAPH = @OCAMLGRAPH@
 
68
OCAMLGRAPH_LOCAL = @OCAMLGRAPH_LOCAL@
 
69
HAS_LABLGTK= @HAS_LABLGTK@
 
70
HAS_LABLGLADECC= @HAS_LABLGLADECC@
 
71
LABLGLADECC= @LABLGLADECC@ -hide-default
 
72
HAS_GTKSOURCEVIEW=@HAS_GTKSOURCEVIEW@
 
73
HAS_GNOMECANVAS=@HAS_GNOMECANVAS@
 
74
HAS_LEGACY_GTKSOURCEVIEW=@HAS_LEGACY_GTKSOURCEVIEW@
 
75
HAS_LABLGTK_CUSTOM_MODEL=@HAS_LABLGTK_CUSTOM_MODEL@
 
76
OTAGS   = @OTAGS@
 
77
DOT     = @DOT@
 
78
 
 
79
##################
 
80
# Shell commands #
 
81
##################
 
82
 
 
83
ECHO    = echo
 
84
MKDIR   = mkdir -p
 
85
CP      = cp -f
 
86
RM      = rm -f
 
87
CAT     = cat
 
88
SED     = sed
 
89
CHMOD_RO= chmod a-w
 
90
TAR     = tar
 
91
 
 
92
#################
 
93
# Command Names #
 
94
#################
 
95
 
 
96
N_OCAMLC   =Ocamlc      #
 
97
N_OCAMLOPT =Ocamlopt    #
 
98
N_OCAMLLEX =Ocamllex    #
 
99
N_OCAMLYACC=Ocamlyacc   #
 
100
N_CAMLP4   =Camlp4      #
 
101
N_DEP      =Ocamldep    #
 
102
N_DOC      =Ocamldoc    #
 
103
N_PACKING  =Packing     #
 
104
N_LINKING  =Linking     #
 
105
N_MKTOP    =Ocamlmktop  #
 
106
 
 
107
N_GCC      =Gcc         #
 
108
N_MAKING   =Generating  #
 
109
N_CP       =Copying     #
 
110
N_RM       =Cleaning    #
 
111
N_EXEC     =Running     #
 
112
N_UNTAR    =Unarchiving #
 
113
 
 
114
N_DOT      =Dot         #
 
115
N_LATEX    =Latex       #
 
116
N_DVIPS    =Dvips       #
 
117
 
 
118
###########################
 
119
# Global plugin variables #
 
120
###########################
 
121
 
 
122
ENABLE_MIEL= @ENABLE_MIEL@
 
123
ENABLE_CXX=@ENABLE_CXX@
 
124
ENABLE_SLICING=@ENABLE_SLICING@
 
125
 
 
126
# the directory where compiled plugin files are stored
 
127
PLUGIN_LIB_DIR=lib/plugins
 
128
 
 
129
# Shared lists between Makefile.plugin and Makefile.in :
 
130
# initialized them as "simply extended variables" (with :=)
 
131
# for a correct behavior of += (see section 6.6 of GNU Make manual)
 
132
PLUGIN_LIST     :=
 
133
PLUGIN_DYN_EXISTS:="no"
 
134
PLUGIN_DYN_LIST :=
 
135
PLUGIN_CMO_LIST :=
 
136
PLUGIN_CMX_LIST :=
 
137
PLUGIN_DYN_CMO_LIST :=
 
138
PLUGIN_DYN_CMX_LIST :=
 
139
PLUGIN_INTERNAL_CMO_LIST:=
 
140
PLUGIN_INTERNAL_CMX_LIST:=
 
141
PLUGIN_DEP_GUI_CMO_LIST:=
 
142
PLUGIN_DEP_GUI_CMX_LIST:=
 
143
PLUGIN_GUI_CMO_LIST:=
 
144
PLUGIN_GUI_CMX_LIST:=
 
145
PLUGIN_DYN_DEP_GUI_CMO_LIST:=
 
146
PLUGIN_DYN_DEP_GUI_CMX_LIST:=
 
147
PLUGIN_DYN_GUI_CMO_LIST :=
 
148
PLUGIN_DYN_GUI_CMX_LIST :=
 
149
PLUGIN_TYPES_CMO_LIST :=
 
150
PLUGIN_TYPES_CMX_LIST :=
 
151
PLUGIN_GENERATED_LIST :=
 
152
PLUGIN_DEP_LIST:=
 
153
PLUGIN_DOC_LIST :=
 
154
PLUGIN_DISTRIBUTED_LIST:=
 
155
PLUGIN_DIST_TARGET_LIST:=
 
156
PLUGIN_DIST_DOC_LIST:=
 
157
PLUGIN_BIN_DOC_LIST:=
 
158
PLUGIN_DIST_EXTERNAL_LIST:=
 
159
PLUGIN_TESTS_LIST:=
 
160
 
 
161
# put here any config option for the binary distribution outside of
 
162
# plugins
 
163
CONFIG_DISTRIB_BIN:=
 
164
 
 
165
###############################
 
166
# Additional global variables #
 
167
###############################
 
168
 
 
169
# additional compilation targets for 'make all'.
 
170
# cannot be delayed after 'make all'
 
171
EXTRAS  = ptests
 
172
ifeq ("$(ENABLE_CXX)","yes")
 
173
EXTRAS  += bin/cxx_translate
 
174
endif
 
175
 
 
176
# Directories containing some source code
 
177
SRC_DIRS= ptests $(PLUGIN_LIB_DIR)
 
178
 
 
179
# Directory containing source code documentation
 
180
DOC_DIR = doc/code
 
181
 
 
182
# Source files to document
 
183
MODULES_TODOC=
 
184
 
 
185
# Frama-C directories containing files which are not part of any plugin
 
186
UNPACKED_DIRS= misc ai memory_state toplevel slicing_types pdg_types \
 
187
               kernel logic cxx_types gui
 
188
ifneq ($(ENABLE_MIEL),no)
 
189
UNPACKED_DIRS+= miel
 
190
endif
 
191
UNPACKED_DIRS:= $(addprefix src/, $(UNPACKED_DIRS))
 
192
 
 
193
UNPACKED_DIRS+= external
 
194
 
 
195
 
 
196
# Directories containing some source code
 
197
SRC_DIRS+= $(UNPACKED_DIRS)
 
198
 
 
199
# Directories to include when compiling
 
200
INCLUDES=$(addprefix -I , $(UNPACKED_DIRS)) -I $(PLUGIN_LIB_DIR) -I lib
 
201
 
 
202
# Directories to include for ocamldep
 
203
INCLUDES_FOR_OCAMLDEP= $(patsubst +%,.,$(INCLUDES) $(GUI_INCLUDES))
 
204
 
 
205
# Ocamldep flags
 
206
DEP_FLAGS= $(INCLUDES_FOR_OCAMLDEP)
 
207
 
 
208
# Files for which dependencies are computed
 
209
FILES_FOR_OCAMLDEP+=$(PLUGIN_LIB_DIR)/*.mli \
 
210
                $(addsuffix /*.mli, $(UNPACKED_DIRS)) \
 
211
                $(addsuffix /*.ml, $(UNPACKED_DIRS))
 
212
 
 
213
#OPTIM="-unsafe -noassert"
 
214
 
 
215
# Flags to use by ocamlc and ocamlopt
 
216
FLAGS   = -w Ael -warn-error A -dtypes $(OPTIM) $(INCLUDES)
 
217
BFLAGS  = $(FLAGS) -g $(COVERAGE_COMPILER_BYTE)
 
218
OFLAGS  = $(FLAGS) $(COVERAGE_COMPILER_OPT)
 
219
 
 
220
# Libraries generated by Frama-C
 
221
GEN_BYTE_LIBS=
 
222
GEN_OPT_LIBS=
 
223
 
 
224
# Libraries used in Frama-C
 
225
BYTE_LIBS = nums.cma unix.cma bigarray.cma str.cma dynlink.cma \
 
226
        $(GRAPH_BYTE) $(GEN_BYTE_LIBS)
 
227
OPT_LIBS = nums.cmxa unix.cmxa bigarray.cmxa str.cmxa
 
228
 
 
229
ifeq ("$(LOWER_THAN_311)","no")
 
230
OPT_LIBS+= dynlink.cmxa
 
231
endif
 
232
 
 
233
OPT_LIBS+= $(GRAPH_OPT) $(GEN_OPT_LIBS)
 
234
 
 
235
# files to be included in the distribution.
 
236
# plugins may add some files to this list if they include files that are
 
237
# not in $PLUGIN_DIR
 
238
DISTRIB_FILES:=cil/*/*.ml* cil/src/*/*.ml* cil/*/*.in cil/LICENSE       \
 
239
      cil/CHANGES cil/doc/*.html cil/doc/*.tex cil/doc/*.gif            \
 
240
      cil/doc/*.pdf cil/doc/api/*.html cil/doc/examples/*.txt           \
 
241
      doc/manuals/*.pdf doc/README doc/code/*.ml*                       \
 
242
      doc/code/*.css doc/code/*.txt tests/*/*.c                         \
 
243
      tests/*/*.h tests/*/*.ml ptests/*.ml*                             \
 
244
      configure.in Makefile.in Makefile.plugin configure Changelog      \
 
245
      config.h.in VERSION                                               \
 
246
      $(filter-out CVS,licenses/*)                                      \
 
247
      share/*.c share/*.h share/Makefile.template                       \
 
248
      share/jessie/*.c share/jessie/*.h share/why/*.why                 \
 
249
      $(filter-out %kui%,src/kernel/*.ml*)                              \
 
250
      external/ptmap.ml*                                                \
 
251
      src/ai/*.ml* src/buckx/*.ml* src/buckx/*.c                        \
 
252
      src/gui/*.ml* src/lib/*.ml* src/logic/*.ml*                       \
 
253
      src/memory_state/*.ml* src/misc/*.ml* src/project/*.ml*           \
 
254
      src/toplevel/*.ml* bin/sed_get_make_major bin/sed_get_make_minor  \
 
255
      INSTALL .make-clean-stamp .make-ocamlgraph-stamp
 
256
 
 
257
################
 
258
# Main targets #
 
259
################
 
260
 
 
261
ifeq (@JESSIE_LOCAL@,yes)
 
262
all: why byte $(EXTRAS)
 
263
        $(MAKE) $(OCAMLBEST) $(EXTRAS_AFTER_BYTE)
 
264
else
 
265
all: byte $(EXTRAS)
 
266
        $(MAKE) $(OCAMLBEST) $(EXTRAS_AFTER_BYTE)
 
267
endif
 
268
 
 
269
clean::
 
270
        $(call QUIET,'$(N_REMOVING) $(OBJ_PERFCOUNT)') \
 
271
        $(RM) $(OBJ_PERFCOUNT)
 
272
 
 
273
.PHONY: top opt byte dist bdist archclean rebuild cxx
 
274
top: bin/toplevel.top$(EXE)
 
275
byte: bin/toplevel.byte$(EXE)
 
276
opt: bin/toplevel.opt$(EXE)
 
277
 
 
278
dist: clean
 
279
        OPTIM="-unsafe -noassert" $(MAKE) all
 
280
bdist: clean
 
281
        OPTIM="-unsafe -noassert" $(MAKE) byte
 
282
 
 
283
ifneq ("$(OCAMLGRAPH_LOCAL)","")
 
284
archclean: clean
 
285
        $(MAKE) -C $(OCAMLGRAPH_LOCAL) distclean
 
286
        cd $(OCAMLGRAPH_LOCAL) ; ./configure
 
287
 
 
288
rebuild: archclean
 
289
        $(MAKE) -C $(OCAMLGRAPH_LOCAL) && $(MAKE) all
 
290
else
 
291
archclean: clean
 
292
 
 
293
rebuild: archclean
 
294
        $(MAKE) all
 
295
endif
 
296
 
 
297
 
 
298
############
 
299
# Coverage #
 
300
############
 
301
 
 
302
USE_COVERAGE_TOOL=no
 
303
ifeq ($(USE_COVERAGE_TOOL),yes)
 
304
COVERAGE_PATH=.
 
305
COVERAGE_PREPRO=camlp4o -no_quot -filter $(COVERAGE_PATH)/coverage_filter.cmo
 
306
COVERAGE_COMPILER_BYTE=-I $(COVERAGE_PATH) -pp "$(COVERAGE_PREPRO)"
 
307
COVERAGE_COMPILER_OPT=-I $(COVERAGE_PATH) -pp "$(COVERAGE_PREPRO)"
 
308
COVERAGE_LIB_BYTE=coverage.cma
 
309
COVERAGE_LIB_OPT=coverage.cmxa
 
310
endif
 
311
 
 
312
INCLUDES+=$(COVERAGE_COMPILER_BYTE)
 
313
GEN_BYTE_LIBS+=$(COVERAGE_LIB_BYTE)
 
314
GEN_OPT_LIBS+=$(COVERAGE_LIB_OPT)
 
315
SRC_DIRS+=$(COVERAGE_PATH)
 
316
 
 
317
##############
 
318
# Ocamlgraph #
 
319
##############
 
320
 
 
321
ifneq ("$(OCAMLGRAPH_LOCAL)","")
 
322
lib/graph%: $(OCAMLGRAPH_LOCAL)/graph%
 
323
        $(call QUIET,'$(N_CP) $@') \
 
324
        $(CP) $< $@
 
325
 
 
326
$(OCAMLGRAPH_LOCAL)/graph.cmo: $(OCAMLGRAPH_LOCAL)/Makefile \
 
327
                                $(OCAMLGRAPH_LOCAL)/src/*.ml*
 
328
        $(MAKE) -C $(OCAMLGRAPH_LOCAL) $(notdir $@)
 
329
 
 
330
$(OCAMLGRAPH_LOCAL)/%.cmi: $(OCAMLGRAPH_LOCAL)/%.cmo
 
331
        touch $@
 
332
 
 
333
$(OCAMLGRAPH_LOCAL)/graph.cmx: $(OCAMLGRAPH_LOCAL)/graph.cmi \
 
334
                                $(OCAMLGRAPH_LOCAL)/src/*.ml*
 
335
        $(MAKE) -C $(OCAMLGRAPH_LOCAL) $(notdir $@)
 
336
 
 
337
$(OCAMLGRAPH_LOCAL)/%.o: $(OCAMLGRAPH_LOCAL)/%.cmx
 
338
        touch $@
 
339
 
 
340
$(OCAMLGRAPH_LOCAL)/Makefile: $(OCAMLGRAPH_LOCAL)/configure \
 
341
                                $(OCAMLGRAPH_LOCAL)/Makefile.in
 
342
        cd $(OCAMLGRAPH_LOCAL); ./configure
 
343
 
 
344
$(OCAMLGRAPH_LOCAL)/configure: $(OCAMLGRAPH_LOCAL)/configure.in
 
345
        cd $(OCAMLGRAPH_LOCAL); autoconf
 
346
 
 
347
# Correct over-approximation: all frama-c source files depend on ocamlgraph
 
348
# Required because ocamldep doesn't see any dependency to packed module
 
349
src/*/*.cmi: lib/graph.cmi
 
350
src/*/*.cmo src/*/*.cma: lib/graph.cmo
 
351
src/*/*.cmxa src/*/*.cmx: lib/graph.cmx
 
352
 
 
353
GENERATED+= lib/graph.cmo lib/graph.cmx lib/graph.o lib/graph.cmi
 
354
 
 
355
GRAPH_BYTE=
 
356
GRAPH_OPT=
 
357
GRAPH_BYTE_LIBS=lib/graph.cmo
 
358
GRAPH_OPT_LIBS=lib/graph.cmx
 
359
GEN_BYTE_LIBS+=$(GRAPH_BYTE_LIBS)
 
360
GEN_OPT_LIBS+=$(GRAPH_OPT_LIBS)
 
361
 
 
362
# viewgraph (included in ocamlgraph)
 
363
ifeq ($(HAS_GNOMECANVAS),yes)
 
364
ifeq (@ENABLE_SYNTACTIC_CALLGRAPH@,yes)
 
365
 
 
366
$(OCAMLGRAPH_LOCAL)/view_graph/%.cmo: $(OCAMLGRAPH_LOCAL)/graph.cmi \
 
367
                                $(OCAMLGRAPH_LOCAL)/view_graph/%.ml
 
368
        $(MAKE) -C $(OCAMLGRAPH_LOCAL) $(patsubst $(OCAMLGRAPH_LOCAL)/%,%,$@)
 
369
 
 
370
$(OCAMLGRAPH_LOCAL)/view_graph/%.cmx: $(OCAMLGRAPH_LOCAL)/graph.cmx \
 
371
                                        $(OCAMLGRAPH_LOCAL)/view_graph/%.ml
 
372
        $(MAKE) -C $(OCAMLGRAPH_LOCAL) $(patsubst $(OCAMLGRAPH_LOCAL)/%,%,$@)
 
373
 
 
374
lib/viewGraph%: $(OCAMLGRAPH_LOCAL)/view_graph/viewGraph%
 
375
        $(call QUIET,'$(N_CP) $@') \
 
376
        $(CP) $< $@
 
377
 
 
378
GRAPH_GUICMO= lib/viewGraph.cmo lib/viewGraph_select.cmo
 
379
GRAPH_GUICMX= $(GRAPH_GUICMO:.cmo=.cmx)
 
380
 
 
381
GENERATED+= lib/viewGraph.cmo lib/viewGraph.cmx lib/viewGraph.o \
 
382
        lib/viewGraph.cmi lib/viewGraph_select.cmo lib/viewGraph_select.cmx \
 
383
        lib/viewGraph_select.o lib/viewGraph_select.cmi
 
384
 
 
385
INCLUDES_FOR_OCAMLDEP+=-I $(OCAMLGRAPH_LOCAL)/view_graph
 
386
HAS_VIEWGRAPH=yes
 
387
 
 
388
endif
 
389
endif # viewgraph available
 
390
 
 
391
# If 'make untar-ocamlgraph' have to be performed after 'cvs update':
 
392
# change '.make-ocamlgraph-stamp' before 'cvs commit'
 
393
.make-ocamlgraph: .make-ocamlgraph-stamp
 
394
        touch $@
 
395
        $(MAKE) untar-ocamlgraph
 
396
 
 
397
include .make-ocamlgraph
 
398
 
 
399
# force "make untar-ocamlgraph" to be executed for all users of CVS
 
400
force-ocamlgraph:
 
401
        expr `$(CAT) .make-ocamlgraph-stamp` + 1 > .make-ocamlgraph-stamp
 
402
 
 
403
.PHONY: untar-ocamlgraph
 
404
untar-ocamlgraph: ocamlgraph.tar.gz
 
405
        $(call QUIET,'$(N_UNTAR) $@') \
 
406
        ($(RM) -r $(OCAMLGRAPH_LOCAL); \
 
407
        $(TAR) xzf $<)
 
408
 
 
409
else # does not use ocamlgraph local version
 
410
 
 
411
INCLUDES+=$(OCAMLGRAPH)
 
412
GRAPH_BYTE=graph.cmo
 
413
GRAPH_OPT=graph.cmx
 
414
 
 
415
# viewgraph (included in ocamlgraph)
 
416
ifeq ($(HAS_GNOMECANVAS),yes)
 
417
ifeq (@ENABLE_SYNTACTIC_CALLGRAPH@,yes)
 
418
GRAPH_GUICMO= viewGraph.cmo viewGraph_select.cmo
 
419
GRAPH_GUICMX= $(GRAPH_GUICMO:.cmo=.cmx)
 
420
HAS_VIEWGRAPH=yes
 
421
endif
 
422
endif
 
423
 
 
424
endif # whether ocamlgraph is local
 
425
 
 
426
####################################
 
427
# Internal miscellaneous libraries #
 
428
####################################
 
429
 
 
430
LIB_PATH= src/lib
 
431
LIB_CMO = myDynlink extlib pretty_utils hook mergemap rangemap \
 
432
        binary_cache ptset type funTbl journal
 
433
LIB_CMO:= $(patsubst %, $(LIB_PATH)/%.cmo, $(LIB_CMO))
 
434
LIB_CMX = $(LIB_CMO:.cmo=.cmx)
 
435
LIB_CMI = $(LIB_CMO:.cmo=.cmi)
 
436
 
 
437
$(LIB_CMI) $(LIB_CMO) $(LIB_CMX): INCLUDES=-I $(LIB_PATH) -I src/project \
 
438
                                -I external
 
439
 
 
440
MODULES_TODOC+= $(LIB_PATH)/myDynlink.mli $(LIB_PATH)/extlib.mli \
 
441
        $(LIB_PATH)/pretty_utils.mli $(LIB_PATH)/hook.mli \
 
442
        $(LIB_PATH)/mergemap.mli $(LIB_PATH)/rangemap.mli \
 
443
        $(LIB_PATH)/binary_cache.mli $(LIB_PATH)/ptset.mli \
 
444
        $(LIB_PATH)/type.mli $(LIB_PATH)/funTbl.mli $(LIB_PATH)/journal.mli \
 
445
 
 
446
INCLUDES+=-I $(LIB_PATH)
 
447
# binary_cache and ptset depends of project.
 
448
# So delay its addition to GEN_*_LIBS
 
449
GEN_BYTE_LIBS+=$(filter-out $(LIB_PATH)/binary_cache.cmo $(LIB_PATH)/ptset.cmo, $(LIB_CMO))
 
450
GEN_OPT_LIBS+=$(filter-out $(LIB_PATH)/binary_cache.cmx $(LIB_PATH)/ptset.cmx, $(LIB_CMX))
 
451
FILES_FOR_OCAMLDEP+=$(addsuffix /*.mli, $(LIB_PATH)) \
 
452
                $(addsuffix /*.ml, $(LIB_PATH))
 
453
SRC_DIRS+=$(LIB_PATH)
 
454
 
 
455
# Dynlink library
 
456
#################
 
457
 
 
458
GENERATED += src/lib/myDynlink.ml
 
459
src/lib/myDynlink.ml: Makefile
 
460
 
 
461
ifeq ("$(LOWER_THAN_311)","yes")
 
462
 
 
463
# Just for ocamldep
 
464
src/lib/myDynlink.ml: src/lib/dynlink_lower_311_byte.ml
 
465
        $(call QUIET,'$(N_CP) $@') \
 
466
        ($(CP) $< $@; \
 
467
        $(CHMOD_RO) $@)
 
468
 
 
469
src/lib/myDynlink.cmo: src/lib/dynlink_lower_311_byte.ml
 
470
        $(call QUIET,'$(N_CP) src/lib/myDynlink.ml') \
 
471
        ($(CP) $< src/lib/myDynlink.ml; \
 
472
        $(CHMOD_RO) src/lib/myDynlink.ml)
 
473
        $(call QUIET,'$(N_OCAMLC) $@') \
 
474
        $(OCAMLC) -c $(BFLAGS) src/lib/myDynlink.ml
 
475
 
 
476
src/lib/myDynlink.o src/lib/myDynlink.cmx: src/lib/dynlink_lower_311_opt.ml
 
477
        $(call QUIET,'$(N_CP) src/lib/myDynlink.ml') \
 
478
        ($(CP) $< src/lib/myDynlink.ml; \
 
479
        $(CHMOD_RO) src/lib/myDynlink.ml)
 
480
        $(call QUIET,'$(N_OCAMLOPT) $@') \
 
481
        $(OCAMLOPT) -c $(OFLAGS) src/lib/myDynlink.ml
 
482
 
 
483
else # ocaml >= 3.11
 
484
 
 
485
src/lib/myDynlink.ml: src/lib/dynlink_311_or_higher.ml
 
486
        $(call QUIET,'$(N_CP) $@') \
 
487
        ($(CP) $< $@; \
 
488
        $(CHMOD_RO) $@)
 
489
 
 
490
endif
 
491
 
 
492
###########
 
493
# Project #
 
494
###########
 
495
 
 
496
PROJECT_PATH=src/project
 
497
PROJECT_CMO= qstack namespace kind project datatype computation
 
498
PROJECT_CMO:= $(patsubst %, $(PROJECT_PATH)/%.cmo, $(PROJECT_CMO))
 
499
PROJECT_CMX= $(PROJECT_CMO:.cmo=.cmx)
 
500
PROJECT_CMI= signature.cmi $(PROJECT_CMO:.cmo=.cmi)
 
501
 
 
502
PROJECT_CMA=$(PROJECT_PATH)/project.cma
 
503
PROJECT_CMXA=$(PROJECT_CMA:.cma=.cmxa)
 
504
 
 
505
$(PROJECT_CMA): $(PROJECT_CMO)
 
506
        $(call QUIET,'$(N_LINKING) $@') \
 
507
        $(OCAMLC) -a -o $@ $(PROJECT_CMO)
 
508
 
 
509
$(PROJECT_CMXA): $(PROJECT_CMX)
 
510
        $(call QUIET,'$(N_LINKING) $@') \
 
511
        $(OCAMLOPT) -a -o $@ $(PROJECT_CMX)
 
512
 
 
513
MODULES_TODOC+= $(PROJECT_PATH)/kind.mli $(PROJECT_PATH)/project.mli \
 
514
        $(PROJECT_PATH)/signature.mli $(PROJECT_PATH)/namespace.mli \
 
515
        $(PROJECT_PATH)/datatype.mli $(PROJECT_PATH)/computation.mli
 
516
 
 
517
$(PROJECT_CMI) $(PROJECT_CMO) $(PROJECT_CMX): INCLUDES=-I $(PROJECT_PATH) \
 
518
        -I $(LIB_PATH) $(OCAMLGRAPH)
 
519
 
 
520
INCLUDES+=-I $(PROJECT_PATH)
 
521
GEN_BYTE_LIBS+=$(PROJECT_CMA) $(LIB_PATH)/binary_cache.cmo
 
522
GEN_OPT_LIBS+=$(PROJECT_CMXA) $(LIB_PATH)/binary_cache.cmx
 
523
FILES_FOR_OCAMLDEP+=$(addsuffix /*.mli, $(PROJECT_PATH)) \
 
524
                $(addsuffix /*.ml, $(PROJECT_PATH))
 
525
SRC_DIRS+=$(PROJECT_PATH)
 
526
 
 
527
# Testing save/load
 
528
###################
 
529
 
 
530
PLUGIN_TESTS_LIST += saveload
 
531
 
 
532
tests/saveload/%.cmx: tests/saveload/%.ml $(GEN_OPT_LIBS)
 
533
        $(OCAMLOPT) -c $(OFLAGS) -I tests/saveload $(OPT_LIBS) $<
 
534
 
 
535
tests/saveload/%.opt: tests/saveload/%.cmx bin/toplevel.opt$(EXE)
 
536
        $(OCAMLOPT) $(OFLAGS) -o $@ -I tests/saveload \
 
537
                $(OPT_LIBS) $< $(ALL_CMX) $(STARTUPCMX)
 
538
 
 
539
tests/saveload/%.cmo: tests/saveload/%.ml $(GEN_BYTE_LIBS)
 
540
        $(OCAMLC) -c $(BFLAGS) -I tests/saveload $(BYTE_LIBS) $<
 
541
 
 
542
tests/saveload/%.byte: tests/saveload/%.cmo bin/toplevel.byte$(EXE)
 
543
        $(OCAMLC) $(BFLAGS) -o $@ -I tests/saveload  \
 
544
                $(BYTE_LIBS) $< $(ALL_CMO) $(STARTUPCMO)
 
545
 
 
546
# Testing dynamic loading
 
547
##########################
 
548
 
 
549
PLUGIN_TESTS_LIST += dynamic
 
550
 
 
551
DYNAMIC_TESTS_TARGETS:=tests/dynamic/empty.cmo tests/dynamic/empty_gui.cmo \
 
552
        tests/dynamic/.cmo tests/dynamic/empty.cmofoo \
 
553
        tests/dynamic/Register_mod1.cmo tests/dynamic/Register_mod2.cmo \
 
554
        tests/dynamic/Apply.cmo
 
555
 
 
556
tests/dynamic/%.cmo: tests/dynamic/%.ml $(GEN_BYTE_LIBS)
 
557
        $(OCAMLC) -c $(BFLAGS) -I tests/dynamic $<
 
558
 
 
559
tests/dynamic_plugin/%.cmo: tests/dynamic_plugin/%.ml $(GEN_BYTE_LIBS)
 
560
        $(OCAMLC) -c $(BFLAGS) -I tests/dynamic_plugin $<
 
561
 
 
562
tests/dynamic/.cmi tests/dynamic/empty.cmifoo:tests/dynamic/empty.cmi
 
563
        $(CP) $< $@
 
564
 
 
565
tests/dynamic/.cmo tests/dynamic/empty.cmofoo:tests/dynamic/empty.cmo \
 
566
        tests/dynamic/.cmi tests/dynamic/empty.cmifoo
 
567
        $(CP) $< $@
 
568
 
 
569
tests/dynamic/Register_mod1.cmo:tests/dynamic_plugin/register_mod1.cmo
 
570
        $(OCAMLC) -o $@ -pack $^
 
571
 
 
572
tests/dynamic/Register_mod2.cmo:tests/dynamic_plugin/register_mod2.cmo
 
573
        $(OCAMLC) -o $@ -pack $^
 
574
 
 
575
tests/dynamic/Apply.cmo:tests/dynamic_plugin/apply.cmo
 
576
        $(OCAMLC) -o $@ -pack $^
 
577
 
 
578
.PHONY:tests/dynamic/all
 
579
tests/dynamic/all:
 
580
        $(RM) tests/dynamic/.cm* tests/dynamic/*.cm* tests/dynamic_plugin/*.cm*
 
581
        $(MAKE) $(DYNAMIC_TESTS_TARGETS)
 
582
 
 
583
#########
 
584
# Buckx #
 
585
#########
 
586
 
 
587
BUCKX_PATH=src/buckx
 
588
BUCKX_CMO= buckx
 
589
BUCKX_CMO:= $(patsubst %, $(BUCKX_PATH)/%.cmo, $(BUCKX_CMO))
 
590
BUCKX_CMX= $(BUCKX_CMO:.cmo=.cmx)
 
591
BUCKX_CMI= $(BUCKX_CMO:.cmo=.cmi)
 
592
 
 
593
MODULES_TODOC+= $(BUCKX_PATH)/buckx.mli
 
594
 
 
595
$(BUCKX_CMI) $(BUCKX_CMO) $(BUCKX_CMX): INCLUDES=-I $(BUCKX_PATH) \
 
596
                                                -I $(PROJECT_PATH)
 
597
 
 
598
INCLUDES+=-I $(BUCKX_PATH)
 
599
GEN_BUCKX=src/buckx/mybigarray.o src/buckx/buckx_c.o
 
600
GEN_BYTE_LIBS+=$(GEN_BUCKX) $(BUCKX_CMO)
 
601
GEN_OPT_LIBS+=$(GEN_BUCKX) $(BUCKX_CMX)
 
602
FILES_FOR_OCAMLDEP+=$(addsuffix /*.mli, $(BUCKX_PATH)) \
 
603
                $(addsuffix /*.ml, $(BUCKX_PATH))
 
604
SRC_DIRS+=$(BUCKX_PATH)
 
605
 
 
606
src/buckx/buckx_c.o: src/buckx/buckx_c.c
 
607
        $(call QUIET,'$(N_OCAMLC) $@') \
 
608
        $(OCAMLC) $(BFLAGS) -ccopt "-O3 -fno-pic -fomit-frame-pointer -o $@" $<
 
609
 
 
610
 
 
611
#######
 
612
# Cil #
 
613
#######
 
614
 
 
615
CIL_PATH= cil/src
 
616
 
 
617
ifeq ("$(LOCAL_MACHDEP)","yes")
 
618
 
 
619
# Create the machine dependency module
 
620
# If the cl command cannot be run then the MSVC part will be identical to GCC
 
621
.PHONY : machdep $(CIL_PATH)/local_machdep.ml
 
622
machdep: $(CIL_PATH)/local_machdep.ml
 
623
bin/machdep.exe: machdep
 
624
 
 
625
$(CIL_PATH)/local_machdep.ml : cil/src/machdep.c configure.in Makefile.in
 
626
        $(call QUIET,'$(N_MAKING) $@') \
 
627
        ($(RM) $@; \
 
628
        $(ECHO) "(* This module was generated automatically by code in Makefile and machdep.c *)" >$@; \
 
629
# Now generate the type definition
 
630
        $(ECHO) "open Cil_types" >> $@; \
 
631
        if gcc -D_GNUCC $< -o bin/machdep.exe ;then \
 
632
            $(ECHO) "machdep.exe created succesfully." \
 
633
        ;else \
 
634
            $(RM) $@; exit 1 \
 
635
        ;fi; \
 
636
        $(ECHO) "let gcc = {" >>$@; \
 
637
        bin/machdep.exe >>$@; \
 
638
        $(ECHO) "        underscore_name = @UNDERSCORE_NAME@ ;" >> $@;\
 
639
        $(ECHO) "}"          >>$@; \
 
640
        if cl /D_MSVC $< /Febin/machdep.exe /Fobin/machdep.obj ;then \
 
641
           $(ECHO) "let hasMSVC = true" >>$@ \
 
642
        ;else \
 
643
           $(ECHO) "let hasMSVC = false" >>$@ ;fi; \
 
644
        $(ECHO) "let msvc = {" >>$@; \
 
645
        bin/machdep.exe >>$@; \
 
646
        $(ECHO) "        underscore_name = true ;" >> $@; \
 
647
        $(ECHO) "}"          >>$@; \
 
648
        $(ECHO) "let gccHas__builtin_va_list = @HAVE_BUILTIN_VA_LIST@" >>$@; \
 
649
        $(ECHO) "let __thread_is_keyword = @THREAD_IS_KEYWORD@"  >>$@; \
 
650
        $(ECHO) "$@ generated. You may have this file merged into Frama-C by developers."; \
 
651
        $(CHMOD_RO) $@)
 
652
 
 
653
endif
 
654
 
 
655
# Create the cil version information module
 
656
.PHONY: cilversion
 
657
cilversion: $(CIL_PATH)/cilversion.ml
 
658
GENERATED += $(CIL_PATH)/cilversion.ml
 
659
$(CIL_PATH)/cilversion.ml: Makefile.in
 
660
        $(call QUIET,'$(N_MAKING) $@') \
 
661
        ($(RM) $@; \
 
662
        $(ECHO) "(* This module was generated automatically by code in Makefile *)" >$@; \
 
663
        $(ECHO) "let cilVersionMajor = 1" >>$@; \
 
664
        $(ECHO) "let cilVersionMinor = 3" >>$@; \
 
665
        $(ECHO) "let cilVersionRev   = 6"   >>$@; \
 
666
        $(ECHO) "let cilVersion      = \"1.3.6\""  >>$@; \
 
667
        $(CHMOD_RO) $@)
 
668
 
 
669
# Performance counters
 
670
PERFCOUNT=cil/ocamlutil/perfcount
 
671
USE_PERFCOUNT=no
 
672
ifeq ($(USE_PERFCOUNT),yes)
 
673
OBJ_PERFCOUNT=$(PERFCOUNT).o
 
674
STATS=cil/ocamlutil/stats.cmo
 
675
else
 
676
OBJ_PERFCOUNT=
 
677
STATS=
 
678
endif
 
679
 
 
680
# .cmo files of cil
 
681
CIL_CMO = cil/ocamlutil/pretty.cmo \
 
682
        cil/ocamlutil/errormsg.cmo \
 
683
        cil/ocamlutil/alpha.cmo cil/ocamlutil/clist.cmo \
 
684
        cil/ocamlutil/growArray.cmo \
 
685
        cil/ocamlutil/inthash.cmo $(STATS) \
 
686
        cil/ocamlutil/trace.cmo cil/ocamlutil/cilutil.cmo \
 
687
        cil/ocamlutil/setWithNearest.cmo \
 
688
        $(addprefix $(CIL_PATH)/, \
 
689
                cil_datatype.cmo cil_computation.cmo \
 
690
                logic/utf8_logic.cmo \
 
691
                messages_manager.cmo \
 
692
                cilglobopt.cmo \
 
693
                cilversion.cmo \
 
694
                machdep_x86_16.cmo machdep_x86_32.cmo machdep_x86_64.cmo \
 
695
                machdep_ppc_32.cmo machdep_ppc_32_diab.cmo \
 
696
                machdep.cmo logic/logic_env.cmo \
 
697
                escape.cmo cil.cmo frontc/cabs.cmo \
 
698
                frontc/cabshelper.cmo frontc/whitetrack.cmo \
 
699
                logic/logic_const.cmo \
 
700
                logic/logic_parser.cmo logic/logic_lexer.cmo \
 
701
                frontc/lexerhack.cmo \
 
702
                mergecil.cmo rmtmps.cmo testcil.cmo \
 
703
                logic/logic_typing.cmo \
 
704
                frontc/cprint.cmo \
 
705
                frontc/cabsvisit.cmo frontc/cabs2cil.cmo \
 
706
                frontc/clexer.cmo frontc/cparser.cmo \
 
707
                logic/logic_preprocess.cmo \
 
708
                frontc/patch.cmo frontc/frontc.cmo \
 
709
                ext/obfuscate.cmo ext/ciltools.cmo \
 
710
                ext/callgraph.cmo ext/dataflow.cmo ext/dominators.cmo \
 
711
                ext/oneret.cmo ext/cfg.cmo ext/expcompare.cmo \
 
712
                ext/usedef.cmo ext/liveness.cmo ext/reachingdefs.cmo \
 
713
                ext/availexpslv.cmo ext/rmciltmps.cmo ext/deadcodeelim.cmo \
 
714
                zrapp.cmo) # end of addprefix
 
715
CIL_CMX = $(CIL_CMO:.cmo=.cmx)
 
716
CIL_CMI = cil/src/cil_types.cmi cil/src/logic/logic_ptree.cmi \
 
717
        $(CIL_CMO:.cmo=.cmi)
 
718
 
 
719
GENERATED += $(addprefix $(CIL_PATH)/, \
 
720
                frontc/clexer.ml frontc/cparser.ml frontc/cparser.mli \
 
721
                logic/logic_lexer.ml logic/logic_parser.ml \
 
722
                logic/logic_parser.mli logic/logic_preprocess.ml  \
 
723
                )
 
724
 
 
725
MODULES_TODOC += cil/ocamlutil/pretty.mli \
 
726
        cil/ocamlutil/errormsg.mli \
 
727
        cil/ocamlutil/alpha.mli cil/ocamlutil/clist.mli \
 
728
        cil/ocamlutil/growArray.mli \
 
729
        cil/ocamlutil/inthash.mli cil/ocamlutil/stats.mli \
 
730
        cil/ocamlutil/trace.mli cil/ocamlutil/cilutil.mli \
 
731
        cil/ocamlutil/setWithNearest.mli \
 
732
        $(addprefix $(CIL_PATH)/, \
 
733
                messages_manager.mli \
 
734
                cilglobopt.ml \
 
735
                cilversion.ml machdep.mli \
 
736
                cil_types.mli \
 
737
                escape.mli cil.mli frontc/cabs.ml \
 
738
                frontc/cabshelper.mli frontc/whitetrack.mli \
 
739
                logic/logic_parser.mli \
 
740
                frontc/lexerhack.ml \
 
741
                mergecil.mli rmtmps.mli \
 
742
                logic/logic_const.ml logic/logic_typing.mli \
 
743
                frontc/cprint.mli frontc/cabsvisit.mli frontc/cabs2cil.mli \
 
744
                frontc/cparser.mli logic/logic_preprocess.mli \
 
745
                frontc/patch.mli frontc/frontc.mli \
 
746
                logic/logic_ptree.mli \
 
747
                ext/obfuscate.mli \
 
748
                ext/callgraph.mli ext/dataflow.mli ext/dominators.mli \
 
749
                ext/oneret.mli) # end of addprefix
 
750
 
 
751
CIL_CMA =$(CIL_PATH)/cil.cma
 
752
CIL_CMXA=$(CIL_PATH)/cil.cmxa
 
753
 
 
754
$(CIL_CMA): $(CIL_CMO) $(OBJ_PERFCOUNT)
 
755
        $(call QUIET,'$(N_LINKING) $@') \
 
756
        $(OCAMLC) -a -custom -o $@ $(CIL_CMO) $(OBJ_PERFCOUNT)
 
757
$(CIL_CMXA): $(CIL_CMX) $(OBJ_PERFCOUNT)
 
758
        $(call QUIET,'$(N_LINKING) $@') \
 
759
        $(OCAMLOPT) -a -o $@ $(CIL_CMX) $(OBJ_PERFCOUNT)
 
760
 
 
761
CIL_DIRS= $(CIL_PATH) $(CIL_PATH)/ext $(CIL_PATH)/frontc $(CIL_PATH)/logic \
 
762
        cil/ocamlutil
 
763
 
 
764
SRC_DIRS+=$(CIL_DIRS)
 
765
 
 
766
$(CIL_CMI) $(CIL_CMO) $(CIL_CMX):INCLUDES=$(addprefix -I , $(CIL_DIRS) \
 
767
        $(LIB_PATH) $(PROJECT_PATH)) $(OCAMLGRAPH)
 
768
 
 
769
INCLUDES+=$(addprefix -I , $(CIL_DIRS))
 
770
GEN_BYTE_LIBS+=$(CIL_CMA)
 
771
GEN_OPT_LIBS+=$(CIL_CMXA)
 
772
FILES_FOR_OCAMLDEP+=$(addsuffix /*.mli, $(CIL_DIRS)) \
 
773
        $(addsuffix /*.ml, $(CIL_DIRS))
 
774
 
 
775
.PHONY : cil.byte cil.opt
 
776
cil.byte: $(CIL_PATH)/cil.cma
 
777
cil.opt: $(CIL_PATH)/cil.cmxa
 
778
 
 
779
##############
 
780
# Pre-Kernel #
 
781
##############
 
782
 
 
783
# modules to be linked before ptmap
 
784
PRECMO =        src/kernel/version.cmo src/kernel/ast_printer.cmo \
 
785
        src/kernel/ast_info.cmo \
 
786
        src/kernel/kernel_type.cmo src/kernel/alarms.cmo src/kernel/cilE.cmo \
 
787
        src/kernel/cil_state.cmo
 
788
 
 
789
PRECMX = $(PRECMO:.cmo=.cmx)
 
790
 
 
791
PRECMI = $(PRECMO:.cmo=.cmi)
 
792
 
 
793
$(PRECMI) $(PRECMO) $(PRECMX): INCLUDES= $(addprefix -I , $(CIL_DIRS)) \
 
794
        -I $(LIB_PATH) -I $(BUCKX_PATH) -I $(PROJECT_PATH)  -I src/kernel
 
795
 
 
796
GEN_BYTE_LIBS+=$(PRECMO)
 
797
GEN_OPT_LIBS+=$(PRECMX)
 
798
 
 
799
 
 
800
#################################
 
801
# External libraries to compile #
 
802
#################################
 
803
 
 
804
EXTERNAL_PATH= external
 
805
EXTERNAL_CMO = ptmap #size
 
806
EXTERNAL_CMO:= $(patsubst %, $(EXTERNAL_PATH)/%.cmo, $(EXTERNAL_CMO))
 
807
EXTERNAL_CMX:= $(EXTERNAL_CMO:.cmo=.cmx)
 
808
EXTERNAL_CMI:= $(EXTERNAL_CMO:.cmo=.cmi)
 
809
 
 
810
$(EXTERNAL_CMI) $(EXTERNAL_CMO) $(EXTERNAL_CMX): INCLUDES=-I $(EXTERNAL_PATH) \
 
811
                        -I $(LIB_PATH) -I $(BUCKX_PATH) -I $(PROJECT_PATH) -I src/kernel
 
812
 
 
813
INCLUDES+=-I $(EXTERNAL_PATH)
 
814
FILES_FOR_OCAMLDEP+=$(addsuffix /*.mli, $(EXTERNAL_PATH)) \
 
815
                $(addsuffix /*.ml, $(EXTERNAL_PATH))
 
816
SRC_DIRS+=$(EXTERNAL_PATH)
 
817
 
 
818
# Ptset depends on Ptmap
 
819
GEN_BYTE_LIBS+= $(EXTERNAL_CMO) $(LIB_PATH)/ptset.cmo
 
820
GEN_OPT_LIBS+= $(EXTERNAL_CMX) $(LIB_PATH)/ptset.cmx
 
821
 
 
822
#
 
823
# Kernel
 
824
#
 
825
 
 
826
ACMO =  src/ai/my_bigint.cmo \
 
827
        src/ai/abstract_interp.cmo \
 
828
        src/memory_state/mweak.cmo \
 
829
        src/ai/int_Base.cmo \
 
830
        src/kernel/cmdline.cmo \
 
831
        src/kernel/unicode.cmo \
 
832
        src/misc/bit_utils.cmo \
 
833
        src/misc/subst.cmo \
 
834
        src/kernel/annotations.cmo src/kernel/globals.cmo \
 
835
        src/kernel/kernel_function.cmo \
 
836
        src/misc/service_graph.cmo \
 
837
        src/ai/base.cmo \
 
838
        src/ai/base_Set_Lattice.cmo \
 
839
        src/ai/origin.cmo \
 
840
        src/ai/map_Lattice.cmo \
 
841
        src/ai/ival.cmo \
 
842
        src/memory_state/abstract_value.cmo \
 
843
        src/memory_state/baseUtils.cmo \
 
844
        src/memory_state/locations.cmo \
 
845
        src/memory_state/inout_type.cmo \
 
846
        src/memory_state/shifted_Location.cmo \
 
847
        src/memory_state/path_lattice.cmo \
 
848
        src/memory_state/int_Interv.cmo \
 
849
        src/memory_state/int_Interv_Map.cmo \
 
850
        src/memory_state/offsetmap.cmo \
 
851
        src/memory_state/offsetmap_bitwise.cmo \
 
852
        src/memory_state/lmap.cmo \
 
853
        src/memory_state/lmap_bitwise.cmo \
 
854
        src/memory_state/lmap_whole.cmo \
 
855
        src/memory_state/function_Froms.cmo \
 
856
        src/memory_state/cvalue_type.cmo \
 
857
        src/memory_state/memzone_type.cmo \
 
858
        src/memory_state/widen_type.cmo \
 
859
        src/memory_state/relations_type.cmo \
 
860
        src/logic/why_output.cmo
 
861
 
 
862
ACMX = $(ACMO:.cmo=.cmx)
 
863
 
 
864
MODULES_TODOC += src/kernel/version.mli \
 
865
        src/kernel/alarms.mli src/kernel/cilE.mli \
 
866
        src/kernel/ast_info.mli \
 
867
        src/kernel/kernel_type.mli \
 
868
        src/kernel/cil_state.mli \
 
869
        src/ai/my_bigint.ml \
 
870
        src/ai/abstract_interp.mli \
 
871
        src/memory_state/mweak.mli \
 
872
        src/ai/int_Base.ml \
 
873
        src/kernel/cmdline.mli \
 
874
        src/misc/bit_utils.mli \
 
875
        src/misc/subst.mli \
 
876
        src/ai/base.mli \
 
877
        src/ai/base_Set_Lattice.ml \
 
878
        src/ai/origin.ml \
 
879
        src/ai/map_Lattice.ml \
 
880
        src/ai/ival.ml \
 
881
        src/memory_state/abstract_value.ml \
 
882
        src/toplevel/options.mli \
 
883
        src/memory_state/baseUtils.ml \
 
884
        src/memory_state/locations.mli \
 
885
        src/memory_state/inout_type.ml \
 
886
        src/memory_state/shifted_Location.mli \
 
887
        src/memory_state/path_lattice.mli \
 
888
        src/memory_state/int_Interv.ml \
 
889
        src/memory_state/int_Interv_Map.ml \
 
890
        src/memory_state/offsetmap.mli \
 
891
        src/memory_state/offsetmap_bitwise.mli \
 
892
        src/memory_state/lmap.mli \
 
893
        src/memory_state/lmap_bitwise.mli \
 
894
        src/memory_state/lmap_whole.mli \
 
895
        src/memory_state/function_Froms.ml \
 
896
        src/memory_state/cvalue_type.ml \
 
897
        src/memory_state/memzone_type.ml \
 
898
        src/memory_state/widen_type.mli \
 
899
        src/memory_state/relations_type.mli \
 
900
        src/logic/why_output.mli
 
901
 
 
902
KERNEL_CMO = src/kernel/stmts_graph.cmo \
 
903
        src/kernel/visitor.cmo \
 
904
        src/kernel/printer.cmo src/kernel/unroll_loops.cmo \
 
905
        src/kernel/loop.cmo \
 
906
        src/kernel/db.cmo  \
 
907
        src/kernel/dynamic.cmo \
 
908
        src/toplevel/options.cmo \
 
909
        src/kernel/file.cmo \
 
910
        src/misc/debug.cmo \
 
911
        src/misc/filter.cmo
 
912
 
 
913
KERNEL_CMX =$(KERNEL_CMO:.cmo=.cmx)
 
914
 
 
915
MODULES_TODOC += src/kernel/db_types.mli \
 
916
        src/kernel/stmts_graph.mli \
 
917
        src/kernel/annotations.mli src/kernel/globals.mli \
 
918
        src/kernel/visitor.mli src/kernel/printer.mli \
 
919
        src/kernel/unroll_loops.ml \
 
920
        src/kernel/file.mli src/kernel/kernel_function.mli src/kernel/loop.mli \
 
921
        src/kernel/db.mli src/kernel/dynamic.mli \
 
922
        src/misc/filter.mli
 
923
 
 
924
########################################################
 
925
# Alias, dependency analysis, locations interpretation #
 
926
########################################################
 
927
 
 
928
LOCCMO = src/memory_state/widen.cmo \
 
929
        src/memory_state/memzone.cmo \
 
930
        src/memory_state/bit_model_access.cmo
 
931
LOCCMX = $(LOCCMO:.cmo=.cmx)
 
932
 
 
933
MODULES_TODOC += src/memory_state/widen.ml \
 
934
        src/memory_state/memzone.ml \
 
935
        src/memory_state/bit_model_access.mli
 
936
 
 
937
###################
 
938
# Journal loader #
 
939
###################
 
940
 
 
941
PLUGIN_ENABLE:=@ENABLE_JOURNAL_LOADER@
 
942
PLUGIN_NAME:=Journal_loader
 
943
PLUGIN_DISTRIBUTED:=yes
 
944
PLUGIN_HAS_MLI:=yes
 
945
PLUGIN_GUI_HAS_MLI:=yes
 
946
PLUGIN_DIR:=src/journal_loader
 
947
PLUGIN_CMO:=register
 
948
PLUGIN_GUI_CMO:=register_gui
 
949
PLUGIN_DYNAMIC:=yes
 
950
PLUGIN_TESTS_DIRS:=journal
 
951
include Makefile.plugin
 
952
 
 
953
# Disabling warnings for journal
 
954
tests/journal/result/%.cmo: FLAGS+=-w x
 
955
 
 
956
##################
 
957
# Occurrence     #
 
958
##################
 
959
 
 
960
PLUGIN_ENABLE:=@ENABLE_OCCURRENCE@
 
961
PLUGIN_NAME:=Occurrence
 
962
PLUGIN_DISTRIBUTED:=yes
 
963
PLUGIN_HAS_MLI:=yes
 
964
PLUGIN_GUI_HAS_MLI:=yes
 
965
PLUGIN_DIR:=src/occurrence
 
966
PLUGIN_CMO:= register
 
967
PLUGIN_GUI_CMO:=register_gui
 
968
include Makefile.plugin
 
969
 
 
970
######################
 
971
# Occurrence dynamic #
 
972
######################
 
973
# PLUGIN_ENABLE:=@ENABLE_OCCURRENCE_DYN@
 
974
# PLUGIN_DYNAMIC:=yes
 
975
# PLUGIN_NAME:=Occurrence_dyn
 
976
# PLUGIN_HAS_MLI:=yes
 
977
# PLUGIN_NO_TEST:=yes
 
978
# PLUGIN_DIR:=src/occurrence_dyn
 
979
# PLUGIN_CMO:= register
 
980
# PLUGIN_GUI_CMO:=register_gui
 
981
# include Makefile.plugin
 
982
 
 
983
###########
 
984
# Metrics #
 
985
###########
 
986
 
 
987
PLUGIN_ENABLE:=@ENABLE_METRICS@
 
988
PLUGIN_NAME:=Metrics
 
989
PLUGIN_DISTRIBUTED:=yes
 
990
PLUGIN_HAS_MLI:=yes
 
991
#PLUGIN_GUI_HAS_MLI:=yes
 
992
PLUGIN_NO_TEST:=yes
 
993
PLUGIN_DIR:=src/metrics
 
994
PLUGIN_CMO:= register
 
995
PLUGIN_NO_TEST:= yes
 
996
PLUGIN_GUI_CMO:=register_gui
 
997
include Makefile.plugin
 
998
 
 
999
#######################
 
1000
# Syntactic callgraph #
 
1001
#######################
 
1002
 
 
1003
# Extension of the GUI for syntactic callgraph is compilable
 
1004
# only if viewgraph is available
 
1005
ifeq ($(HAS_VIEWGRAPH),yes)
 
1006
PLUGIN_GUI_CMO:=cg_viewer
 
1007
endif
 
1008
 
 
1009
PLUGIN_ENABLE:=@ENABLE_SYNTACTIC_CALLGRAPH@
 
1010
PLUGIN_NAME:=Syntactic_callgraph
 
1011
PLUGIN_DISTRIBUTED:=yes
 
1012
PLUGIN_HAS_MLI:=yes
 
1013
PLUGIN_GUI_HAS_MLI:=yes
 
1014
PLUGIN_DIR:=src/syntactic_callgraph
 
1015
PLUGIN_CMO:= register
 
1016
PLUGIN_NO_TEST:=yes
 
1017
include Makefile.plugin
 
1018
 
 
1019
##################
 
1020
# Value analysis #
 
1021
##################
 
1022
 
 
1023
PLUGIN_ENABLE:=@ENABLE_VALUE@
 
1024
PLUGIN_NAME:=Value
 
1025
PLUGIN_DIR:=src/value
 
1026
PLUGIN_CMO:= state_set kf_state eval kinstr register
 
1027
PLUGIN_GUI_CMO:=register_gui
 
1028
PLUGIN_HAS_MLI:=yes
 
1029
PLUGIN_GUI_HAS_MLI:=yes
 
1030
PLUGIN_NO_TEST:=yes
 
1031
PLUGIN_DISTRIBUTED:=yes
 
1032
include Makefile.plugin
 
1033
 
 
1034
#################
 
1035
# From analysis #
 
1036
#################
 
1037
 
 
1038
PLUGIN_ENABLE:=@ENABLE_FROM@
 
1039
PLUGIN_NAME:=From
 
1040
PLUGIN_DIR:=src/from
 
1041
PLUGIN_CMO:= register
 
1042
PLUGIN_GUI_CMO:=register_gui
 
1043
PLUGIN_HAS_MLI:=yes
 
1044
PLUGIN_GUI_HAS_MLI:=yes
 
1045
PLUGIN_TESTS_DIRS:=idct test misc float
 
1046
PLUGIN_DISTRIBUTED:=yes
 
1047
include Makefile.plugin
 
1048
 
 
1049
##################
 
1050
# Users analysis #
 
1051
##################
 
1052
 
 
1053
PLUGIN_ENABLE:=@ENABLE_USERS@
 
1054
PLUGIN_NAME:=Users
 
1055
PLUGIN_DIR:=src/users
 
1056
PLUGIN_CMO:= users_register
 
1057
PLUGIN_HAS_MLI:=yes
 
1058
PLUGIN_NO_TEST:=yes
 
1059
PLUGIN_DISTRIBUTED:=yes
 
1060
include Makefile.plugin
 
1061
 
 
1062
########################
 
1063
# Constant propagation #
 
1064
########################
 
1065
 
 
1066
PLUGIN_ENABLE:=@ENABLE_CONSTANT_PROPAGATION@
 
1067
PLUGIN_NAME:=Constant_Propagation
 
1068
PLUGIN_DIR:=src/constant_propagation
 
1069
PLUGIN_CMO:= register
 
1070
PLUGIN_HAS_MLI:=yes
 
1071
PLUGIN_DISTRIBUTED:=yes
 
1072
include Makefile.plugin
 
1073
 
 
1074
###################
 
1075
# Post-dominators #
 
1076
###################
 
1077
 
 
1078
PLUGIN_ENABLE:=@ENABLE_POSTDOMINATORS@
 
1079
PLUGIN_NAME:=Postdominators
 
1080
PLUGIN_DIR:=src/postdominators
 
1081
PLUGIN_CMO:= print compute
 
1082
PLUGIN_HAS_MLI:=yes
 
1083
PLUGIN_NO_TEST:=yes
 
1084
PLUGIN_DISTRIBUTED:=yes
 
1085
include Makefile.plugin
 
1086
 
 
1087
#########
 
1088
# inout #
 
1089
#########
 
1090
 
 
1091
PLUGIN_ENABLE:=@ENABLE_INOUT@
 
1092
PLUGIN_NAME:=Inout
 
1093
PLUGIN_DIR:=src/inout
 
1094
PLUGIN_CMO:= kf_state context inputs outputs derefs access_path register
 
1095
PLUGIN_HAS_MLI:=yes
 
1096
PLUGIN_NO_TEST:=yes
 
1097
PLUGIN_DISTRIBUTED:=yes
 
1098
include Makefile.plugin
 
1099
 
 
1100
######################
 
1101
# Semantic callgraph #
 
1102
######################
 
1103
 
 
1104
PLUGIN_ENABLE:=@ENABLE_SEMANTIC_CALLGRAPH@
 
1105
PLUGIN_NAME:=Semantic_callgraph
 
1106
PLUGIN_DIR:=src/semantic_callgraph
 
1107
PLUGIN_CMO:= register
 
1108
PLUGIN_HAS_MLI:=yes
 
1109
PLUGIN_NO_TEST:=yes
 
1110
PLUGIN_DISTRIBUTED:=yes
 
1111
include Makefile.plugin
 
1112
 
 
1113
######
 
1114
# wp #
 
1115
######
 
1116
 
 
1117
PLUGIN_ENABLE:=@ENABLE_WP@
 
1118
PLUGIN_NAME:=Wp
 
1119
PLUGIN_DIR:=src/wp
 
1120
PLUGIN_CMO:= macros wpBase wpFol translate \
 
1121
             cil2cfg calculus lowlevel_model hoare_model \
 
1122
             model0 \
 
1123
             register
 
1124
PLUGIN_HAS_MLI:=yes
 
1125
PLUGIN_GUI_CMO:=wp_gui
 
1126
PLUGIN_DISTRIBUTED:=no
 
1127
PLUGIN_DISTRIB_BIN:=no
 
1128
PLUGIN_NO_DEFAULT_TEST:=yes
 
1129
include Makefile.plugin
 
1130
 
 
1131
#####################
 
1132
# Security analysis #
 
1133
#####################
 
1134
 
 
1135
PLUGIN_ENABLE:=@ENABLE_SECURITY@
 
1136
PLUGIN_NAME:=Security
 
1137
PLUGIN_DIR:=src/security
 
1138
PLUGIN_CMO:= lattice model components analysis register
 
1139
PLUGIN_GUI_CMO:=register_gui
 
1140
PLUGIN_HAS_MLI:=yes
 
1141
PLUGIN_GUI_HAS_MLI:=yes
 
1142
PLUGIN_UNDOC:=analysis.ml
 
1143
 # ocamldoc doesn't like recursive modules!
 
1144
PLUGIN_DISTRIBUTED:=yes
 
1145
include Makefile.plugin
 
1146
 
 
1147
###################
 
1148
# Impact analysis #
 
1149
###################
 
1150
 
 
1151
PLUGIN_ENABLE:=@ENABLE_IMPACT@
 
1152
PLUGIN_NAME:=Impact
 
1153
PLUGIN_DIR:=src/impact
 
1154
PLUGIN_CMO:= register
 
1155
PLUGIN_GUI_CMO:= register_gui
 
1156
PLUGIN_HAS_MLI:=yes
 
1157
PLUGIN_GUI_HAS_MLI:=yes
 
1158
PLUGIN_DISTRIBUTED:=yes
 
1159
# PLUGIN_UNDOC:=impact_gui.ml
 
1160
include Makefile.plugin
 
1161
 
 
1162
#################
 
1163
# Jessie output #
 
1164
#################
 
1165
 
 
1166
JESSIE_INCLUDES=@JESSIE_INCLUDES@
 
1167
 
 
1168
PLUGIN_ENABLE:=@ENABLE_JESSIE@
 
1169
PLUGIN_NAME:=Jessie
 
1170
PLUGIN_DIR:=src/jessie
 
1171
PLUGIN_CMO:= integer common rewrite norm retype interp register
 
1172
PLUGIN_HAS_MLI:=yes
 
1173
PLUGIN_BFLAGS:=$(JESSIE_INCLUDES)
 
1174
PLUGIN_OFLAGS:=$(JESSIE_INCLUDES)
 
1175
PLUGIN_DEPFLAGS:=$(JESSIE_INCLUDES)
 
1176
PLUGIN_DOCFLAGS:=$(JESSIE_INCLUDES)
 
1177
PLUGIN_DISTRIBUTED:=yes
 
1178
PLUGIN_DISTRIB_BIN:=no
 
1179
PLUGIN_DISTRIB_EXTERNAL:=src-distrib-jessie
 
1180
include Makefile.plugin
 
1181
 
 
1182
ifeq (@JESSIE_LOCAL@,yes)
 
1183
# Same variable JCCML_EXPORT as in Why Makefile
 
1184
JCCML_EXPORT = src/lib.ml src/rc.ml src/loc.ml src/pp.ml src/option_misc.ml \
 
1185
       jc/jc_type_var.ml jc/output.ml \
 
1186
       jc/jc_common_options.ml jc/jc_stdlib.ml \
 
1187
       jc/jc_envset.ml jc/jc_region.ml jc/jc_fenv.ml jc/jc_constructors.ml \
 
1188
       jc/jc_pervasives.ml jc/jc_iterators.ml \
 
1189
       jc/jc_output_misc.ml jc/jc_poutput.ml jc/jc_output.ml jc/jc_noutput.ml
 
1190
JCCML_EXPORT := $(addprefix @WHYDISTRIB@/, $(JCCML_EXPORT))
 
1191
 
 
1192
# Use the makefile of Why in order to compile Why's source files
 
1193
@JCCMO@ @JCCMX@: $(JCCML_EXPORT)
 
1194
        $(MAKE) -j 1 FRAMAC=yes -C @WHYDISTRIB@ \
 
1195
                $(patsubst @WHYDISTRIB@/%, %, $@)
 
1196
 
 
1197
$(Jessie_CMI) $(Jessie_CMO): @JCCMO@
 
1198
$(Jessie_CMX): @JCCMX@
 
1199
 
 
1200
# Call Why makefile from all, only if installed locally
 
1201
.PHONY: why
 
1202
why:
 
1203
        $(MAKE) -j 1 FRAMAC=yes -C @WHYDISTRIB@
 
1204
 
 
1205
GEN_BYTE_LIBS+=@JCCMO@
 
1206
GEN_OPT_LIBS+=@JCCMX@
 
1207
else ifeq (@ENABLE_JESSIE@,yes)
 
1208
BYTE_LIBS+=@JCCMO@
 
1209
OPT_LIBS+=@JCCMX@
 
1210
endif
 
1211
 
 
1212
##################################
 
1213
# PDG : program dependence graph #
 
1214
##################################
 
1215
 
 
1216
PLUGIN_ENABLE:=@ENABLE_PDG@
 
1217
PLUGIN_NAME:=Pdg
 
1218
PLUGIN_DIR:=src/pdg
 
1219
PLUGIN_HAS_MLI:=yes
 
1220
PLUGIN_CMO:= print \
 
1221
            macros \
 
1222
            lexical_successors \
 
1223
            ctrlDpds \
 
1224
            state \
 
1225
            build \
 
1226
            sets \
 
1227
            annot \
 
1228
            marks \
 
1229
            register
 
1230
 
 
1231
PDG_TYPES:=pdgIndex pdgTypes pdgMarks
 
1232
PDG_TYPES:=$(addprefix src/pdg_types/, $(PDG_TYPES))
 
1233
PLUGIN_TYPES_CMO:=$(PDG_TYPES)
 
1234
 
 
1235
PLUGIN_INTRO:=doc/code/intro_pdg.txt
 
1236
PLUGIN_TYPES_TODOC:=$(addsuffix .mli, $(PDG_TYPES))
 
1237
 
 
1238
PLUGIN_DISTRIBUTED:=yes
 
1239
include Makefile.plugin
 
1240
 
 
1241
#####################################
 
1242
# Scope : (very experimental !)     #
 
1243
#####################################
 
1244
 
 
1245
PLUGIN_ENABLE:=@ENABLE_SCOPE@
 
1246
PLUGIN_NAME:=Scope
 
1247
PLUGIN_DIR:=src/scope
 
1248
PLUGIN_CMO:= datascope zones
 
1249
PLUGIN_HAS_MLI:=yes
 
1250
PLUGIN_GUI_CMO:=dpds_gui
 
1251
PLUGIN_INTRO:=doc/code/intro_scope.txt
 
1252
PLUGIN_DISTRIBUTED:=yes
 
1253
include Makefile.plugin
 
1254
 
 
1255
#####################################
 
1256
# Sparecode : unused code detection #
 
1257
#####################################
 
1258
 
 
1259
PLUGIN_ENABLE:=@ENABLE_SPARECODE@
 
1260
PLUGIN_NAME:=Sparecode
 
1261
PLUGIN_DIR:=src/sparecode
 
1262
PLUGIN_CMO:= globs marks transform register
 
1263
PLUGIN_HAS_MLI:=yes
 
1264
PLUGIN_DEPENDS:=Pdg
 
1265
PLUGIN_INTRO:=doc/code/intro_sparecode.txt
 
1266
PLUGIN_DISTRIBUTED:=yes
 
1267
include Makefile.plugin
 
1268
 
 
1269
###########
 
1270
# Slicing #
 
1271
###########
 
1272
 
 
1273
PLUGIN_ENABLE:=$(ENABLE_SLICING)
 
1274
PLUGIN_NAME:=Slicing
 
1275
PLUGIN_DIR:=src/slicing
 
1276
PLUGIN_CMO:= slicingMacros \
 
1277
            slicingMarks \
 
1278
            slicingActions \
 
1279
            fct_slice \
 
1280
            printSlice \
 
1281
            slicingProject \
 
1282
            slicingTransform \
 
1283
            slicingCmds \
 
1284
            register
 
1285
SLICING_TYPES:=slicingTypes
 
1286
SLICING_TYPES:=$(addprefix src/slicing_types/, $(SLICING_TYPES))
 
1287
PLUGIN_TYPES_CMO:=$(SLICING_TYPES)
 
1288
 
 
1289
PLUGIN_GUI_CMO:=register_gui
 
1290
 
 
1291
PLUGIN_INTRO:=doc/code/intro_slicing.txt
 
1292
PLUGIN_TYPES_TODOC:= $(addsuffix .ml, $(SLICING_TYPES))
 
1293
PLUGIN_UNDOC:=register.ml # slicing_gui.ml
 
1294
 
 
1295
PLUGIN_TESTS_DIRS:= slicing slicing2
 
1296
PLUGIN_TESTS_LIB:= tests/slicing/libSelect tests/slicing/libAnim
 
1297
PLUGIN_DEPENDS:=Pdg
 
1298
PLUGIN_DISTRIBUTED:=yes
 
1299
include Makefile.plugin
 
1300
 
 
1301
FILES_FOR_OCAMLDEP+=$(TEST_SLICING_ML)
 
1302
 
 
1303
##########################
 
1304
# C++ analysis extension #
 
1305
##########################
 
1306
 
 
1307
PPCHOME=@abs_top_srcdir@
 
1308
 
 
1309
CXX_ELSADISTRIB=cxx_elsa/elsa-2006.06.11
 
1310
 
 
1311
CXX_ELSAHOME=$(CXX_ELSADISTRIB)/elsa
 
1312
 
 
1313
.PHONY: elsa
 
1314
elsa:
 
1315
        $(MAKE) -C $(CXX_ELSADISTRIB)
 
1316
 
 
1317
### the ast generator.
 
1318
#   Can not be part of the generic plugin mechanism, as we need it to
 
1319
#   generate some of the sources of the plugin itself (i.e. it must be
 
1320
#   built before the dependencies computation for the plugin takes place.
 
1321
 
 
1322
#The files
 
1323
CXX_ASTGENINT=std_utils loc astgen_type astgen_parse astgen_main
 
1324
CXX_ASTGENMOD=std_utils loc astgen_type astgen_parse astgen_lex astgen_main
 
1325
$(CXX_ASTGENMOD:%=cxx_elsa/%.cmo) $(CXX_OBJ:%=cxx_elsa/%.cmi): BFLAGS:=-I cxx_elsa $(BFLAGS)
 
1326
$(CXX_ASTGENMOD:%=cxx_elsa/%.cmx): OFLAGS:=-I cxx_elsa $(OFLAGS)
 
1327
 
 
1328
# generator dependencies
 
1329
.PHONY: cxx_depend
 
1330
cxx_depend: cxx_elsa/.cxx_depend
 
1331
 
 
1332
ifeq ($(ENABLE_CXX),yes)
 
1333
include cxx_elsa/.cxx_depend
 
1334
 
 
1335
cxx_elsa/.cxx_depend: $(CXX_ASTGENMOD:%=cxx_elsa/%.ml) \
 
1336
                      $(CXX_ASTGENINT:%=cxx_elsa/%.mli)
 
1337
        $(call QUIET,'$(N_DEP) $@') \
 
1338
        $(OCAMLDEP) -pp $(CAMLP4O) -I cxx_elsa $^ > cxx_elsa/.cxx_depend
 
1339
endif
 
1340
 
 
1341
bin/astgen$(EXE): $(CXX_ASTGENMOD:%=cxx_elsa/%.cmo)
 
1342
        $(call QUIET,'$(N_LINKING) $@') \
 
1343
        $(OCAMLC) -I cxx_elsa -o $@ -g str.cma $^
 
1344
 
 
1345
### main modules of the elsa-to-cil translator
 
1346
CXX_TRANSLATE=std_utils install elsa_loc loc config astgen_lex          \
 
1347
parse_tree predef_cxx cc_ast_parse cc_ast_visitor elsa_utils            \
 
1348
cc_analyse_types mangling expr nameSpace types logic normalize cxx_print class  \
 
1349
statements translate
 
1350
 
 
1351
### c++ ast description from elsa
 
1352
CXX_ELSAAST=cc.ast cc_tcheck.ast cc_elaborate.ast gnu.ast annot_ast.ast
 
1353
 
 
1354
# local c++ ast descriptions (needed because some AST nodes are in the
 
1355
# verbatim sections of elsa's *.ast)
 
1356
CXX_EXTRAAST=cxx_elsa/extra.ast
 
1357
 
 
1358
# unused for now
 
1359
#            cxx_elsa/annot_ast.ml cxx_elsa/annot_ast_parse.ml
 
1360
 
 
1361
### local configuration
 
1362
cxx_elsa/install.ml: Makefile
 
1363
        @$(ECHO) "(* local installation related variables. " > $@
 
1364
        @$(ECHO) "Automatically generated by Makefile. DO NOT EDIT! *)" >> $@
 
1365
        @$(ECHO) "let framac_home = \"$(PPCHOME)\";;" >> $@
 
1366
        @$(ECHO) \
 
1367
         "let elsa_home = Filename.concat framac_home \"$(CXX_ELSAHOME)\";;" >> $@
 
1368
 
 
1369
### stand-alone translator
 
1370
 
 
1371
cxx_elsa/test.cmo: $(CXX_TRANSLATE:%=cxx_elsa/%.cmo)
 
1372
cxx_elsa/test.cmo: BFLAGS:=-I cxx_elsa $(BFLAGS)
 
1373
bin/cxx_translate$(EXE):$(GEN_BYTE_LIBS) \
 
1374
    $(CXX_TRANSLATE:%=cxx_elsa/%.cmo) cxx_elsa/test.cmo
 
1375
        $(call QUIET,'$(N_LINKING) $@') \
 
1376
        $(OCAMLC) $(BFLAGS) -I cxx_elsa  $(BYTE_LIBS) \
 
1377
        $(CXX_TRANSLATE:%=cxx_elsa/%.cmo) cxx_elsa/test.cmo -o $@
 
1378
 
 
1379
CXX_TESTS_DIR=basic class val_analysis template specs
 
1380
 
 
1381
#NB: PTESTS_OPTS is intended to be set outside of the Makefile
 
1382
#In particular make cxx_tests PTESTS_OPTS=-update will update the oracles.
 
1383
.PHONY: cxx_tests
 
1384
cxx_tests: bin/cxx_translate ptests
 
1385
        cd cxx_elsa && \
 
1386
        ../bin/ptests.byte$(EXE) $(PTESTS_OPTS) $(CXX_TESTS_DIR)
 
1387
 
 
1388
ifeq ($(ENABLE_CXX),yes)
 
1389
tests: cxx_tests
 
1390
endif
 
1391
 
 
1392
 
 
1393
GENERATED += src/cxx_types/cc_ast.mli
 
1394
 
 
1395
DISTRIB_FILES += src/cxx_types/cc_ast.mli.in
 
1396
 
 
1397
ifeq ($(ENABLE_CXX),yes)
 
1398
src/cxx_types/cc_ast.mli: Makefile \
 
1399
        bin/astgen$(EXE) $(CXX_ELSAAST:%=$(CXX_ELSAHOME)/%) $(CXX_EXTRAAST)
 
1400
        bin/astgen$(EXE) -prefix "cxx_elsa/cc_ast" \
 
1401
           $(CXX_ELSAAST:%=$(CXX_ELSAHOME)/%) $(CXX_EXTRAAST)
 
1402
        mv cxx_elsa/cc_ast.mli $@
 
1403
 
 
1404
else
 
1405
 
 
1406
CC_AST_STUB=src/cxx_types/cc_ast.mli.in
 
1407
 
 
1408
src/cxx_types/cc_ast.mli: Makefile $(CC_AST_STUB)
 
1409
        $(call QUIET,'$(N_CP) $@') \
 
1410
        $(CP) $(CC_AST_STUB) $@
 
1411
endif
 
1412
 
 
1413
cxx_elsa/cc_ast_parse.ml: src/cxx_types/cc_ast.mli
 
1414
        :
 
1415
 
 
1416
cxx_elsa/cc_ast_visitor.ml: src/cxx_types/cc_ast.mli
 
1417
        :
 
1418
 
 
1419
cxx_elsa/annot_ast.ml cxx_elsa/annot_ast_parse.ml: \
 
1420
     bin/astgen $(CXX_ELSAHOME)/annot.ast
 
1421
        bin/astgen -prefix "cxx_elsa/annot_ast" \
 
1422
           $(CXX_ELSAHOME)/annot.ast
 
1423
 
 
1424
cxx_elsa/.depend: cxx_elsa/.cxx_depend bin/astgen$(EXE)
 
1425
 
 
1426
PLUGIN_ENABLE:=$(ENABLE_CXX)
 
1427
PLUGIN_NAME:=Cxx
 
1428
PLUGIN_DIR:=cxx_elsa
 
1429
PLUGIN_NO_TEST:=yes
 
1430
PLUGIN_NO_DEFAULT_TEST:=yes
 
1431
PLUGIN_BFLAGS:=-pp $(CAMLP4O)
 
1432
PLUGIN_OFLAGS:=-pp $(CAMLP4O)
 
1433
PLUGIN_DEPFLAGS:=-pp $(CAMLP4O)
 
1434
PLUGIN_DOCFLAGS:=-pp $(CAMLP4O)
 
1435
PLUGIN_CMO:= $(CXX_TRANSLATE) cxx_state register
 
1436
PLUGIN_GENERATED:= cxx_elsa/.cxx_depend bin/astgen \
 
1437
                   cxx_elsa/astgen_parse.ml cxx_elsa/astgen_parse.mli \
 
1438
                   cxx_elsa/astgen_lex.ml cxx_elsa/install.ml \
 
1439
                   cxx_elsa/cc_ast_visitor.ml cxx_elsa/cc_ast_parse.ml \
 
1440
                   src/cxx_types/cc_ast.mli
 
1441
 
 
1442
PLUGIN_HAS_MLI:=yes
 
1443
PLUGIN_UNDOC:=astgen_lex.ml astgen_parse.ml cc_ast_parse.ml
 
1444
PLUGIN_TESTS_DIRS:=cxx_elsa/tests
 
1445
PLUGIN_INTRO:=cxx_elsa/doc_intro.txt
 
1446
PLUGIN_DISTRIBUTED:=no
 
1447
include Makefile.plugin
 
1448
 
 
1449
ifeq ($(ENABLE_SLICING),yes)
 
1450
PLUGIN_ENABLE:=$(ENABLE_CXX)
 
1451
else
 
1452
PLUGIN_ENABLE:=no
 
1453
endif
 
1454
PLUGIN_NAME:=CxxSlicing
 
1455
PLUGIN_DIR:=cxx_elsa/cxx_slicing
 
1456
PLUGIN_CMO:= cxx_slice register_slicing
 
1457
PLUGIN_HAS_MLI:=yes
 
1458
PLUGIN_BFLAGS:= -I cxx_elsa
 
1459
PLUGIN_OFLAGS:= -I cxx_elsa
 
1460
PLUGIN_DEPFLAGS:= -I cxx_elsa
 
1461
PLUGIN_NO_TEST:=yes
 
1462
PLUGIN_INTRO:=cxx_elsa/cxx_slicing/doc_intro.txt
 
1463
PLUGIN_DEPENDS:=Cxx
 
1464
PLUGIN_DISTRIBUTED:=no
 
1465
include Makefile.plugin
 
1466
 
 
1467
#########
 
1468
# Logic #
 
1469
#########
 
1470
 
 
1471
LCMO = src/logic/fol.cmo src/logic/logic_interp.cmo \
 
1472
        src/logic/infer_annotations.cmo
 
1473
LCMX = $(LCMO:.cmo=.cmx)
 
1474
 
 
1475
MODULES_TODOC += src/logic/fol.mli src/logic/logic_interp.mli \
 
1476
        src/logic/infer_annotations.mli
 
1477
 
 
1478
PLUGIN_TESTS_LIST += spec
 
1479
 
 
1480
#######################
 
1481
# Aorai : ltl_to_acsl #
 
1482
#######################
 
1483
 
 
1484
PLUGIN_ENABLE:=@ENABLE_LTL_TO_ACSL@
 
1485
PLUGIN_NAME:=Ltl_to_acsl
 
1486
PLUGIN_DIR:=src/ltl_to_acsl
 
1487
PLUGIN_GENERATED:= $(addprefix ${PLUGIN_DIR}/, \
 
1488
                promelalexer.ml promelaparser.ml promelaparser.mli \
 
1489
                ltllexer.ml ltlparser.ml ltlparser.mli \
 
1490
                )
 
1491
PLUGIN_CMO:= bool3 \
 
1492
        data_for_ltl \
 
1493
        ltl_utils \
 
1494
        promelaoutput \
 
1495
        ltl_output \
 
1496
        ltlparser \
 
1497
        ltllexer \
 
1498
        promelaparser \
 
1499
        promelalexer \
 
1500
        abstract_ai \
 
1501
        bycase_ai \
 
1502
        ltl_to_acsl_visitors \
 
1503
        ltl_to_acsl_register
 
1504
PLUGIN_CMI:= ltlast.mli \
 
1505
        promelaast.mli
 
1506
PLUGIN_NO_TEST:=yes
 
1507
PLUGIN_HAS_MLI:=yes
 
1508
PLUGIN_DISTRIBUTED:=yes
 
1509
PLUGIN_DISTRIB_BIN:=no
 
1510
include Makefile.plugin
 
1511
 
 
1512
##########################################################################
 
1513
# Common startup module                                                  #
 
1514
# All link command should add it as last linked module and depend on it. #
 
1515
##########################################################################
 
1516
 
 
1517
STARTUPCMO=src/kernel/boot.cmo
 
1518
STARTUPCMX=$(STARTUPCMO:.cmo=.cmx)
 
1519
 
 
1520
############
 
1521
# toplevel #
 
1522
############
 
1523
 
 
1524
TOPCMO = src/toplevel/main.cmo
 
1525
TOPCMX = $(TOPCMO:.cmo=.cmx)
 
1526
 
 
1527
ALL_CMO=$(ACMO) $(PLUGIN_TYPES_CMO_LIST) \
 
1528
        $(KERNEL_CMO) $(LCMO) $(LOCCMO) \
 
1529
        $(PLUGIN_CMO_LIST) $(TOPCMO)
 
1530
 
 
1531
bin/toplevel.byte$(EXE): $(ALL_CMO) $(STARTUPCMO) $(GEN_BYTE_LIBS) \
 
1532
                        $(PLUGIN_DYN_CMO_LIST)
 
1533
        $(call QUIET,'$(N_LINKING) $@') \
 
1534
        $(OCAMLC) $(BFLAGS) -o $@ $(BYTE_LIBS) $(ALL_CMO) $(STARTUPCMO)
 
1535
 
 
1536
bin/toplevel.prof$(EXE): $(GEN_BYTE_LIBS) $(ALL_CMO) $(STARTUPCMO) \
 
1537
                        $(PLUGIN_DYN_CMO_LIST)
 
1538
        ocamlcp $(BFLAGS) -o $@ $(BYTE_LIBS) $(ALL_CMO) $(STARTUPCMO)
 
1539
 
 
1540
ALL_CMX= $(ALL_CMO:.cmo=.cmx)
 
1541
 
 
1542
bin/toplevel.opt$(EXE): $(ALL_CMX) $(STARTUPCMX) $(GEN_OPT_LIBS) \
 
1543
                        $(PLUGIN_DYN_CMX_LIST)
 
1544
        $(call QUIET,'$(N_LINKING) $@') \
 
1545
        $(OCAMLOPT) $(OFLAGS) -o $@ $(OPT_LIBS) $(ALL_CMX) $(STARTUPCMX)
 
1546
 
 
1547
bin/toplevel.top$(EXE): $(ALL_CMO) src/toplevel/toplevel_topdirs.cmo \
 
1548
                $(STARTUPCMO) $(GEN_BYTE_LIBS) $(PLUGIN_DYN_CMO_LIST)
 
1549
        $(call QUIET,'$(N_MKTOP) $@') \
 
1550
        $(OCAMLMKTOP) $(BFLAGS) -o $@ $(BYTE_LIBS) $(ALL_CMO) \
 
1551
          src/toplevel/toplevel_topdirs.cmo $(STARTUPCMO)
 
1552
 
 
1553
#######
 
1554
# GUI #
 
1555
#######
 
1556
 
 
1557
ifneq (@ENABLE_GUI@,no)
 
1558
GUI_INCLUDES = -I src/gui -I +lablgtk2
 
1559
BYTE_GUI_LIBS+= lablgtk.cma
 
1560
OPT_GUI_LIBS += lablgtk.cmxa
 
1561
 
 
1562
ifeq ($(HAS_VIEWGRAPH),yes)
 
1563
BYTE_GUI_LIBS += lablgnomecanvas.cma
 
1564
OPT_GUI_LIBS += lablgnomecanvas.cmxa
 
1565
endif
 
1566
 
 
1567
ifeq ($(HAS_LABLGTK),yes)
 
1568
EXTRAS_AFTER_BYTE+= gui
 
1569
endif
 
1570
 
 
1571
ifeq ($(HAS_GTKSOURCEVIEW),yes)
 
1572
ifeq ($(HAS_LEGACY_GTKSOURCEVIEW),yes)
 
1573
GUI_INCLUDES  += -I +lablgtksourceview
 
1574
endif
 
1575
BYTE_GUI_LIBS += lablgtksourceview.cma
 
1576
OPT_GUI_LIBS  += lablgtksourceview.cmxa
 
1577
endif
 
1578
 
 
1579
src/gui/filetree.ml: Makefile
 
1580
 
 
1581
ifeq ($(HAS_LABLGTK_CUSTOM_MODEL),yes)
 
1582
src/gui/filetree.ml: src/gui/filetree_custom.ml
 
1583
        $(call QUIET,'$(N_CP) $@') \
 
1584
        ($(CP) $< $@; \
 
1585
        $(CHMOD_RO) $@)
 
1586
else
 
1587
src/gui/filetree.ml: src/gui/filetree_default.ml
 
1588
        $(call QUIET,'$(N_CP) $@') \
 
1589
        ($(CP) $< $@; \
 
1590
        $(CHMOD_RO) $@)
 
1591
endif
 
1592
GENERATED += src/gui/filetree.ml
 
1593
 
 
1594
GUICMO += gtk_helper source_viewer source_manager warning_manager \
 
1595
         pretty_source filetree design project_manager journal_manager \
 
1596
         about_dialog gui_boot
 
1597
GUICMO:= $(patsubst %, src/gui/%.cmo, $(GUICMO)) $(PLUGIN_GUI_CMO_LIST)
 
1598
 
 
1599
MODULES_TODOC+= $(addprefix src/gui/,$(addsuffix .mli,\
 
1600
                gtk_helper source_viewer source_manager warning_manager \
 
1601
                pretty_source filetree design project_manager journal_manager))
 
1602
 
 
1603
GUICMI = $(GUICMO:.cmo=.cmi)
 
1604
GUICMX = $(GUICMO:.cmo=.cmx)
 
1605
 
 
1606
$(GUICMI) $(GUICMO)  bin/viewer.byte$(EXE): BFLAGS+= $(GUI_INCLUDES)
 
1607
$(GUICMX) bin/viewer.opt$(EXE): OFLAGS+= $(GUI_INCLUDES)
 
1608
 
 
1609
$(PLUGIN_DEP_GUI_CMO_LIST) $(PLUGIN_DYN_DEP_GUI_CMO_LIST): BFLAGS+= $(GUI_INCLUDES)
 
1610
$(PLUGIN_DEP_GUI_CMX_LIST) $(PLUGIN_DYN_DEP_GUI_CMX_LIST): OFLAGS+= $(GUI_INCLUDES)
 
1611
 
 
1612
.PHONY:gui
 
1613
 
 
1614
gui: bin/viewer.byte$(EXE) bin/viewer.$(OCAMLBEST)$(EXE)
 
1615
 
 
1616
bin/viewer.byte$(EXE): BYTE_LIBS+=$(BYTE_GUI_LIBS)
 
1617
bin/viewer.byte$(EXE): $(ALL_CMO) $(GRAPH_GUICMO) $(GUICMO) $(STARTUPCMO) \
 
1618
                        $(GEN_BYTE_LIBS) $(PLUGIN_DYN_GUI_CMO_LIST)
 
1619
        $(call QUIET,'$(N_LINKING) $@') \
 
1620
        $(OCAMLC) $(BFLAGS) -o $@ $(BYTE_LIBS) $(ALL_CMO) $(GRAPH_GUICMO) \
 
1621
                $(GUICMO) $(STARTUPCMO)
 
1622
 
 
1623
bin/viewer.opt$(EXE): OPT_LIBS+= $(OPT_GUI_LIBS)
 
1624
bin/viewer.opt$(EXE): $(ALL_CMX) $(GRAPH_GUICMX) $(GUICMX) $(STARTUPCMX) \
 
1625
                        $(GEN_OPT_LIBS) $(PLUGIN_DYN_GUI_CMX_LIST)
 
1626
        $(call QUIET,'$(N_LINKING) $@') \
 
1627
        $(OCAMLOPT) $(OFLAGS) -o $@ $(OPT_LIBS) $(ALL_CMX) $(GRAPH_GUICMX) \
 
1628
                $(GUICMX) $(STARTUPCMX)
 
1629
endif
 
1630
 
 
1631
##################
 
1632
# Journalization #
 
1633
##################
 
1634
 
 
1635
JOURNALS = $(patsubst %.ml, %, $(wildcard frama_c_journal*.ml))
 
1636
JOURNALS_CMO = $(addsuffix .cmo, $(JOURNALS))
 
1637
 
 
1638
ifeq ($(LOWER_THAN_311), no)
 
1639
JOURNALS_CMXS = $(JOURNALS_CMO:.cmo=.cmxs)
 
1640
journal: $(JOURNALS_CMO) $(JOURNALS_CMXS)
 
1641
else
 
1642
journal: $(JOURNALS_CMO)
 
1643
endif
 
1644
 
 
1645
$(JOURNALS_CMO) $(JOURNALS_CMXS): FLAGS+=-w x
 
1646
 
 
1647
#########################
 
1648
# Standalone Obfuscator #
 
1649
#########################
 
1650
 
 
1651
obfuscator: bin/obfuscator.$(OCAMLBEST)
 
1652
 
 
1653
bin/obfuscator.byte$(EXE): $(ACMO) $(KERNEL_CMO) $(STARTUPCMO) $(GEN_BYTE_LIBS)
 
1654
        $(call QUIET,'$(N_LINKING) $@') \
 
1655
        $(OCAMLC) $(BFLAGS) -o $@ $(BYTE_LIBS) $^
 
1656
 
 
1657
bin/obfuscator.opt$(EXE): $(ACMX) $(KERNEL_CMX) $(STARTUPCMX) $(GEN_OPT_LIBS)
 
1658
        $(call QUIET,'$(N_LINKING) $@') \
 
1659
        $(OCAMLOPT) $(OFLAGS) -o $@ $(OPT_LIBS) $^
 
1660
 
 
1661
########
 
1662
# Miel #
 
1663
########
 
1664
 
 
1665
# the following line should be removed when/if miel becomes a plugin
 
1666
CONFIG_DISTRIB_BIN+="--disable-miel"
 
1667
 
 
1668
ifneq ($(ENABLE_MIEL), no)
 
1669
MIELCMO = src/miel/miel_spec_parsing_internals.cmo \
 
1670
        src/miel/miel_user.cmo \
 
1671
        src/miel/miel_spec.cmo \
 
1672
        src/miel/miel_spec_compilation_lexer.cmo \
 
1673
        src/miel/miel_spec_compilation_parser.cmo \
 
1674
        src/miel/miel_spec_pointers_lexer.cmo \
 
1675
        src/miel/miel_spec_pointers_parser.cmo \
 
1676
        src/miel/miel_spec_lexer.cmo src/miel/miel_spec_parser.cmo \
 
1677
        src/miel/parallelism.cmo  src/miel/proc_names.cmo \
 
1678
        src/miel/build_parallel_model.cmo \
 
1679
        src/miel/alcool.cmo src/miel/miel_ext_pointers.cmo \
 
1680
        src/miel/miel_ext_raw.cmo src/miel/promela.cmo \
 
1681
        src/miel/miel_init.cmo \
 
1682
        src/miel/passerelle.cmo \
 
1683
        src/miel/miel_cg.cmo \
 
1684
        src/miel/miel.cmo
 
1685
 
 
1686
MIELCMX = $(MIELCMO:.cmo=.cmx)
 
1687
 
 
1688
ALL_MIEL_CMO= $(ACMO) $(PLUGIN_TYPES_CMO_LIST) $(KERNEL_CMO) $(KCMO) $(LCMO) $(LOCCMO)  $(PLUGIN_CMO_LIST) $(TOPCMO) $(MIELCMO)
 
1689
 
 
1690
ALL_MIEL_CMX = $(ACMX) $(PLUGIN_TYPES_CMX_LIST) $(KERNEL_CMX) $(KCMX) $(LCMX) $(LOCCMX)  $(PLUGIN_CMX_LIST) $(TOPCMX) $(MIELCMX)
 
1691
 
 
1692
# The references to MIELO have been removed so far. They will be restored as
 
1693
# soon as they are needed.
 
1694
MIELO = src/miel/ocaml_tcl.o
 
1695
 
 
1696
GENERATED += src/miel/miel_spec_lexer.ml src/miel/miel_spec_parser.ml \
 
1697
        src/miel/miel_spec_compilation_lexer.ml \
 
1698
        src/miel/miel_spec_compilation_parser.ml \
 
1699
        src/miel/miel_spec_pointers_lexer.ml \
 
1700
        src/miel/miel_spec_pointers_parser.ml \
 
1701
        src/miel/miel_spec_parser.mli \
 
1702
        src/miel/miel_spec_pointers_parser.mli \
 
1703
        src/miel/miel_spec_compilation_parser.mli
 
1704
 
 
1705
miel: bin/miel.opt$(EXE)
 
1706
 
 
1707
bin/miel.top$(EXE): $(ALL_MIEL_CMO) src/toplevel/toplevel_topdirs.cmo \
 
1708
              src/miel/mieltop_dirs.cmo $(TOPCMO) $(STARTUPCMO) \
 
1709
              $(GEN_BYTE_LIBS)
 
1710
        $(call QUIET,'$(N_MKTOP) $@') \
 
1711
        $(OCAMLMKTOP) $(BFLAGS) -o $@ $(BYTE_LIBS) \
 
1712
                $(ALL_MIEL_CMO) $(TOPCMO) \
 
1713
                src/toplevel/toplevel_topdirs.cmo src/miel/mieltop_dirs.cmo \
 
1714
                $(STARTUPCMO)
 
1715
 
 
1716
bin/miel.byte$(EXE): $(ALL_MIEL_CMO) $(STARTUPCMO) $(GEN_BYTE_LIBS)
 
1717
        $(call QUIET,'$(N_LINKING) $@') \
 
1718
        $(OCAMLC) $(BFLAGS) -o $@ $(BYTE_LIBS) $(ALL_MIEL_CMO) $(STARTUPCMO)
 
1719
 
 
1720
bin/miel.opt$(EXE): $(ALL_MIEL_CMX) $(STARTUPCMX) $(GEN_OPT_LIBS)
 
1721
        $(call QUIET,'$(N_LINKING) $@') \
 
1722
        $(OCAMLOPT) $(OFLAGS) -o $@ $(OPT_LIBS) $(ALL_MIEL_CMX) $(STARTUPCMX)
 
1723
 
 
1724
miel_tests: bin/miel.byte$(EXE)
 
1725
        $(MAKE) -C src/miel/tests
 
1726
 
 
1727
ifeq ($(HAS_LABLGTK),yes)
 
1728
 
 
1729
GENERATED += src/miel/miel_gui.ml
 
1730
src/miel/miel_gui.ml : src/miel/gui/miel_gui.glade
 
1731
        $(call QUIET,'$(N_MAKING) $@') \
 
1732
        ($(CP) src/miel/gui/miel_gui.glade bin/; \
 
1733
        $(LABLGLADECC) $^ > $@)
 
1734
 
 
1735
bin/miel_gui.glade : src/miel/gui/miel_gui.glade
 
1736
        $(call QUIET,'$(N_CP) $@') \
 
1737
        $(CP) $^ $@
 
1738
 
 
1739
MIEL_GUI_CMO = src/miel/miel_gui.cmo src/miel/miel_gui_actions.cmo
 
1740
MIEL_GUI_CMX = $(MIEL_GUI_CMO:.cmo=.cmx)
 
1741
$(MIEL_GUI_CMO) $(MIEL_GUI_CMX) : INCLUDES+=$(GUI_INCLUDES)
 
1742
 
 
1743
#bin/miel_gui.opt : $(OPT_LIBS)+=lablglade.cmxa lablgtk.cmxa
 
1744
bin/miel_gui.opt$(EXE) : $(ALL_MIEL_CMX) $(MIEL_GUI_CMX) $(STARTUPCMX) \
 
1745
                   $(GEN_OPT_LIBS)
 
1746
        $(call QUIET,'$(N_LINKING) $@') \
 
1747
        $(OCAMLOPT) $(OFLAGS) -o $@ $(OPT_LIBS) \
 
1748
          -I +lablgtk2 lablgtk.cmxa lablglade.cmxa \
 
1749
          $(ALL_MIEL_CMX) $(MIEL_GUI_CMX) $(STARTUPCMX)
 
1750
 
 
1751
miel_gui: bin/miel_gui.glade bin/miel_gui.opt$(EXE)
 
1752
 
 
1753
endif
 
1754
 
 
1755
else
 
1756
miel:
 
1757
        -$(ECHO) "Unsupported extension. Rerun ./configure --enable-miel"
 
1758
endif
 
1759
 
 
1760
VERSION=$(shell $(SED) -e 's/\\(.*\\)/\\1/' VERSION)
 
1761
 
 
1762
VERSIONDIR=src/kernel
 
1763
VERSIONFILE=$(VERSIONDIR)/version.ml
 
1764
VERSIONCMO=$(VERSIONDIR)/version.cmo
 
1765
GENERATED +=$(VERSIONFILE)
 
1766
 
 
1767
empty:=
 
1768
space:=$(empty) $(empty)
 
1769
$(VERSIONFILE): VERSION Makefile
 
1770
        $(call QUIET,'$(N_MAKING) $@') \
 
1771
        ($(RM) $@; \
 
1772
        $(ECHO) "(* This file is generated in Makefile.in. Do not modify. *)" \
 
1773
                > $@; \
 
1774
        $(ECHO) "let version = \""$(VERSION)"\"" >> $@; \
 
1775
        $(ECHO) "let date = \""`LC_ALL=C date`"\"" >> $@; \
 
1776
        $(ECHO) "let dataroot = try Sys.getenv \"FRAMAC_SHARE\" with Not_found -> \"$(DESTDIR)$(datadir)\"" >> $@;\
 
1777
        $(ECHO) "let static_plugins = [" \
 
1778
                $(subst $(space),"; ",$(foreach p,$(PLUGIN_LIST),\"$(notdir $p)\")) \
 
1779
                "]" >> $@; \
 
1780
        $(ECHO) "let static_gui_plugins = [" \
 
1781
                $(subst $(space),"; ",$(foreach p,$(PLUGIN_GUI_CMO_LIST),\"$(notdir $(patsubst %.cmo,%,$p))\")) \
 
1782
                "]" >> $@; \
 
1783
        $(CHMOD_RO) $@)
 
1784
 
 
1785
#################
 
1786
# Generic rules #
 
1787
#################
 
1788
 
 
1789
ifdef DOT
 
1790
%.png: %.dot
 
1791
        $(call QUIET,'$(N_DOT) $@') \
 
1792
        $(DOT) -Tpng -o $@ $<
 
1793
 
 
1794
%.svg: %.dot
 
1795
        $(call QUIET,'$(N_DOT) $@') \
 
1796
        ($(SED) "s/\(digraph .*\)/\1 node [href=\"\\\\N.html\"];/" $< \
 
1797
                > $<.tmp; \
 
1798
        $(DOT) -Tsvg -o $@ $<.tmp; \
 
1799
        $(RM) $<.tmp)
 
1800
 
 
1801
%.ps: %.dot
 
1802
        $(call QUIET,'$(N_DOT) $@') \
 
1803
        $(DOT) -Tps -o $@ $<
 
1804
else
 
1805
%.png: %.dot
 
1806
        @$(ECHO) "dot missing: generation of $@ skipped."
 
1807
%.svg: %.dot
 
1808
        @$(ECHO) "dot missing: generation of $@ skipped."
 
1809
%.ps: %.dot
 
1810
        @$(ECHO) "dot missing: generation of $@ skipped."
 
1811
endif
 
1812
 
 
1813
.SUFFIXES: .mli .ml .cmi .cmo .cmx .mll .mly .tex .dvi .ps .html .cmxs
 
1814
 
 
1815
.mli.cmi:
 
1816
        $(call QUIET,'$(N_OCAMLC) $@') \
 
1817
        $(OCAMLC) -c $(BFLAGS) $<
 
1818
 
 
1819
.ml.cmi:
 
1820
        $(call QUIET,'$(N_OCAMLC) $@') \
 
1821
        if `test -e $<i`; then $(OCAMLC) -c $(BFLAGS) $<i; \
 
1822
        else $(OCAMLC) -c $(BFLAGS) $<; fi
 
1823
 
 
1824
.ml.cmo:
 
1825
        $(call QUIET,'$(N_OCAMLC) $@') \
 
1826
        $(OCAMLC) -c $(BFLAGS) $<
 
1827
 
 
1828
.ml.o:
 
1829
        $(call QUIET,'$(N_OCAMLOPT) $@') \
 
1830
        $(OCAMLOPT) -c $(OFLAGS) $<
 
1831
 
 
1832
.ml.cmx:
 
1833
        $(call QUIET,'$(N_OCAMLOPT) $@') \
 
1834
        $(OCAMLOPT) -c $(OFLAGS) $<
 
1835
 
 
1836
.ml.cmxs:
 
1837
        $(call QUIET,'$(N_OCAMLOPT) $@') \
 
1838
        $(OCAMLOPT) -shared -o $@ $(OFLAGS) $<
 
1839
 
 
1840
.mll.ml:
 
1841
        $(call QUIET,'$(N_OCAMLLEX) $@') \
 
1842
        $(OCAMLLEX) $<
 
1843
 
 
1844
.mly.ml:
 
1845
        $(call QUIET,'$(N_OCAMLYACC) $@') \
 
1846
        $(OCAMLYACC) -v $<
 
1847
 
 
1848
.mly.mli:
 
1849
        $(call QUIET,'$(N_OCAMLYACC) $@') \
 
1850
        $(OCAMLYACC) -v $<
 
1851
 
 
1852
.tex.dvi:
 
1853
        $(call QUIET,'$(N_LATEX) $@') \
 
1854
        latex $< && latex $<
 
1855
 
 
1856
.dvi.ps:
 
1857
        $(call QUIET,'$(N_DVIPS) $@') \
 
1858
        dvips $< -o $@
 
1859
 
 
1860
.tex.html:
 
1861
        hevea $<
 
1862
 
 
1863
.c.o:
 
1864
        $(call QUIET,'$(N_OCAMLC) $@') \
 
1865
        $(OCAMLC) $(BFLAGS) -ccopt "-o $@" $<
 
1866
 
 
1867
#########
 
1868
# Tests #
 
1869
#########
 
1870
 
 
1871
.PHONY: tests oracles btests tests_dist
 
1872
tests: byte opt top ptests
 
1873
        $(call QUIET,'$(N_EXEC) ptests') \
 
1874
        time -p ./bin/ptests.byte$(EXE) $(PLUGIN_TESTS_LIST)
 
1875
 
 
1876
oracles: opt top ptests
 
1877
        $(call QUIET, '$(N_MAKING) oracles') \
 
1878
        (./bin/ptests.byte$(EXE) $(PLUGIN_TESTS_LIST) > /dev/null 2>&1 ; \
 
1879
         ./bin/ptests.byte$(EXE) -update $(PLUGIN_TESTS_LIST))
 
1880
 
 
1881
btests: byte top ptests
 
1882
        $(call QUIET,'$(N_EXEC) ptest') \
 
1883
        time -p ./bin/ptests.byte$(EXE) -byte $(PLUGIN_TESTS_LIST)
 
1884
 
 
1885
tests_dist: dist top ptests
 
1886
        $(call QUIET,'$(N_EXEC) ptests') \
 
1887
        time -p ./bin/ptests.byte$(EXE) $(PLUGIN_TESTS_LIST)
 
1888
 
 
1889
# test only one test suite : make suite_tests
 
1890
%_tests: opt top ptests
 
1891
        $(call QUIET,'$(N_EXEC) ptests') \
 
1892
        ./bin/ptests.byte$(EXE) $($*_TESTS_OPTS) $*
 
1893
 
 
1894
# full test suite
 
1895
wp_TESTS_OPTS=-j 1
 
1896
fulltests: tests wp_tests
 
1897
 
 
1898
acsl_tests: byte
 
1899
        find doc/speclang -name \*.c -exec bin/toplevel.byte$(EXE) {} \; > /dev/null
 
1900
 
 
1901
 
 
1902
 
 
1903
 
 
1904
##############
 
1905
# Emacs tags #
 
1906
##############
 
1907
 
 
1908
.PHONY: tags
 
1909
# otags gives a better tagging of ocaml files than etags
 
1910
ifdef OTAGS
 
1911
tags:
 
1912
        $(OTAGS) -r external src lib cil
 
1913
vtags:
 
1914
        $(OTAGS) -vi -r external src lib cil
 
1915
else
 
1916
tags:
 
1917
        find . -name "*.ml[ily]" -o -name "*.ml" | sort -r | xargs \
 
1918
        etags "--regex=/[ \t]*let[ \t]+\([^ \t]+\)/\1/" \
 
1919
              "--regex=/[ \t]*let[ \t]+rec[ \t]+\([^ \t]+\)/\1/" \
 
1920
              "--regex=/[ \t]*and[ \t]+\([^ \t]+\)/\1/" \
 
1921
              "--regex=/[ \t]*type[ \t]+\([^ \t]+\)/\1/" \
 
1922
              "--regex=/[ \t]*exception[ \t]+\([^ \t]+\)/\1/" \
 
1923
              "--regex=/[ \t]*val[ \t]+\([^ \t]+\)/\1/" \
 
1924
              "--regex=/[ \t]*module[ \t]+\([^ \t]+\)/\1/"
 
1925
endif
 
1926
 
 
1927
#################
 
1928
# Documentation #
 
1929
#################
 
1930
 
 
1931
wc:
 
1932
        ocamlwc -p src/*/*.ml src/*/*.ml[iyl] cil/ocamlutil/*.ml cil/ocamlutil/*.ml[ily] cil/src/*.ml cil/src/*.ml[ily] cil/src/*.ml cil/src/*.ml[ily] cil/src/logic/*.ml cil/src/logic/*.ml[ily] cil/src/ext/*.ml cil/src/ext/*.ml[ily] cil/src/frontc/*.ml cil/src/frontc/*.ml[ily]
 
1933
 
 
1934
$(DOC_DIR)/plugin.css: $(DOC_DIR)/style.css
 
1935
        $(call QUIET,'$(N_MAKING) $@') \
 
1936
        ($(RM) $@; \
 
1937
        ($(CAT) $<; $(ECHO) "body { background-color : #FFFFEE }") > $@; \
 
1938
        $(CHMOD_RO) $@)
 
1939
 
 
1940
$(DOC_DIR)/docgen.cmo: $(DOC_DIR)/docgen.ml
 
1941
        $(call QUIET,'$(N_OCAMLC) $@') \
 
1942
        $(OCAMLC) -c -I +ocamldoc -I $(VERSIONDIR) $(DOC_DIR)/docgen.ml
 
1943
clean::
 
1944
        $(RM) $(DOC_DIR)/docgen.cm[io]
 
1945
 
 
1946
.PHONY: doc html plugins-doc
 
1947
 
 
1948
plugins-doc: $(PLUGIN_DOC_LIST)
 
1949
 
 
1950
# to make the documentation for one pluggin only,
 
1951
# the name of the pluggin should begin with a capital letter :
 
1952
# Example for the pdg doc : make Pdg_DOC
 
1953
# While working on the documentation of a pluggin, it can also be usefull
 
1954
# to use : make -o doc/code/kernel-doc.ocamldoc Plugin_DOC
 
1955
# to avoid redoing the global documentation each time.
 
1956
 
 
1957
DOC_FLAGS:= -colorize-code -stars -inv-merge-ml-mli -m A -hide-warnings \
 
1958
        $(INCLUDES) $(GUI_INCLUDES)
 
1959
 
 
1960
STDLIB_FILES=map set pervasives big_int list array string char marshal \
 
1961
        printf format scanf hashtbl buffer sys
 
1962
STDLIB_FILES:=$(patsubst %, $(OCAMLLIB)/%.mli, $(STDLIB_FILES))
 
1963
 
 
1964
html $(DOC_DIR)/kernel-doc.ocamldoc: $(MODULES_TODOC) \
 
1965
                                   byte bin/viewer.byte \
 
1966
                                   $(DOC_DIR)/docgen.cmo
 
1967
        $(call QUIET,'$(N_DOC) kernel') \
 
1968
        ($(MKDIR) $(DOC_DIR)/html; \
 
1969
        $(RM) $(DOC_DIR)/html/*.html; \
 
1970
        $(OCAMLDOC) $(DOC_FLAGS) -I $(OCAMLLIB) \
 
1971
          $(addprefix -stdlib , $(STDLIB_FILES)) \
 
1972
          -sort -css-style ../style.css \
 
1973
          -g $(DOC_DIR)/docgen.cmo \
 
1974
          -d $(DOC_DIR)/html -dump $(DOC_DIR)/kernel-doc.ocamldoc \
 
1975
          $(MODULES_TODOC))
 
1976
 
 
1977
doc: html plugins-doc
 
1978
 
 
1979
doc/db/db.tex: src/kernel/db.mli
 
1980
        $(call QUIET,'$(N_DOC) $@') \
 
1981
        ($(MKDIR) $(dir $@); \
 
1982
        $(OCAMLDOC) $(INCLUDES) -I $(OCAMLLIB) \
 
1983
          -latex -noindex -latextitle 3,paragraph -notoc -noheader -notrailer \
 
1984
          -o $@ $<)
 
1985
 
 
1986
# Could be optimized
 
1987
.PHONY: db_doc
 
1988
db_doc doc/db/db.pdf: doc/db/main.tex doc/db/main.bib doc/db/db.tex
 
1989
        $(call QUIET,'$(N_MAKING) doc/db/db.pdf') \
 
1990
        cd $(dir $@); \
 
1991
          pdflatex $(notdir $<); bibtex main; \
 
1992
          pdflatex $(notdir $<); pdflatex $(notdir $<); \
 
1993
          mv main.pdf $(notdir $@)
 
1994
 
 
1995
#find src -name "*.ml[i]" -o -name "*.ml" -maxdepth 3 | sort -r | xargs
 
1996
dots: $(ALL_CMO)
 
1997
        $(call QUIET,'$(N_DOC) callgraph') \
 
1998
        $(OCAMLDOC) $(INCLUDES) -o doc/call_graph.dot -dot -dot-include-all -dot-reduce $(MODULES_TODOC)
 
1999
        $(MAKE) doc/call_graph.svg
 
2000
        $(MAKE) doc/call_graph.ps
 
2001
 
 
2002
datatype_dependencies.dot computation_dependencies.dot: ./bin/toplevel.byte$(EXE)
 
2003
        $(call QUIET,'$(N_EXEC) toplevel.byte') \
 
2004
        ./bin/toplevel.byte$(EXE) -project-debug -dump > /dev/null 2> /dev/null
 
2005
 
 
2006
.PHONY:display_dependencies
 
2007
display_dependencies: datatype_dependencies.svg computation_dependencies.svg
 
2008
        inkscape datatype_dependencies.svg computation_dependencies.svg &
 
2009
 
 
2010
################
 
2011
# Installation #
 
2012
################
 
2013
 
 
2014
FILTER_INTERFACE_DIRS=lib/plugins src/gui
 
2015
 
 
2016
.PHONY: install
 
2017
install:
 
2018
#       $(MAKE) -C ocamlgraph install
 
2019
        $(MKDIR) $(DESTDIR)$(BINDIR)
 
2020
        $(MKDIR) $(DESTDIR)$(datadir)
 
2021
        $(MKDIR) $(DESTDIR)$(plugindir)
 
2022
        $(MKDIR) $(DESTDIR)$(libdir)
 
2023
        $(CP) -R share/*.c share/*.h share/Makefile.template share/why share/jessie \
 
2024
                $(DESTDIR)$(datadir)
 
2025
        $(CP) bin/toplevel.$(OCAMLBEST) $(DESTDIR)$(BINDIR)/frama-c$(EXE)
 
2026
        $(CP) bin/toplevel.byte$(EXE) $(DESTDIR)$(BINDIR)/frama-c.byte$(EXE)
 
2027
        if [ -x bin/toplevel.top ] ; then \
 
2028
          $(CP) bin/toplevel.top $(DESTDIR)$(BINDIR)/frama-c.toplevel$(EXE) ; fi
 
2029
        if [ -x bin/viewer.$(OCAMLBEST) ] ; then \
 
2030
          $(CP) bin/viewer.$(OCAMLBEST) $(DESTDIR)$(BINDIR)/frama-c-gui$(EXE) ; fi
 
2031
        if [ -x bin/viewer.byte$(EXE) ] ; then \
 
2032
          $(CP) bin/viewer.byte$(EXE) $(DESTDIR)$(BINDIR)/frama-c-gui.byte$(EXE) ; fi
 
2033
        if [ -d doc/manuals ]; then \
 
2034
          $(CP) -R doc/manuals $(DESTDIR)$(datadir); \
 
2035
        fi
 
2036
        if [ -d lib/plugins -a $(PLUGIN_DYN_EXISTS) = "yes" ]; then \
 
2037
          $(CP)  $(PLUGIN_DYN_CMO_LIST) $(PLUGIN_DYN_CMX_LIST) \
 
2038
                 $(PLUGIN_DYN_GUI_CMO_LIST) $(PLUGIN_DYN_GUI_CMX_LIST) \
 
2039
                 $(DESTDIR)$(plugindir); \
 
2040
        fi
 
2041
#       line below does not work if INCLUDES contains twice the same directory
 
2042
#       Do not attempt to copy gui interfaces if gui is disabled
 
2043
        $(CP) $(foreach d,$(filter-out $(FILTER_INTERFACE_DIRS),$(INCLUDES:-I%=%)), $(d)/*.cmi) $(DESTDIR)$(libdir)
 
2044
        if [ "$(ENABLE_GUI)" = "yes" ]; then \
 
2045
          $(CP) src/gui/*.cmi $(DESTDIR)$(libdir); \
 
2046
        fi
 
2047
#       remove CVS directories
 
2048
        find $(DESTDIR)$(datadir) -name CVS | xargs $(RM) -r
 
2049
ifeq (@JESSIE_LOCAL@,yes)
 
2050
        $(MAKE) -C @WHYDISTRIB@ DESTDIR=$(DESTDIR) install
 
2051
endif
 
2052
 
 
2053
toto:
 
2054
        @echo $(DESTDIR)
 
2055
 
 
2056
################################
 
2057
# File headers: license policy #
 
2058
################################
 
2059
 
 
2060
HEADACHE= headache -c headers/headache_config.txt
 
2061
 
 
2062
MODIFIED_MENHIR=external/ptmap.ml*
 
2063
 
 
2064
CIL     = cil/ocamlutil/*.ml* \
 
2065
        cil/src/*.ml* \
 
2066
        cil/src/ext/*.ml* cil/src/ext/pta/*.ml* \
 
2067
        cil/src/frontc/*.ml*
 
2068
 
 
2069
CEA_INRIA_LGPL  = Makefile.in configure.in config.h.in \
 
2070
        src/logic/*.ml* \
 
2071
        cil/src/logic/*.ml* \
 
2072
        src/pdg_types/*.ml* src/pdg/*.ml* \
 
2073
        src/slicing_types/*.ml* src/slicing/*.ml* \
 
2074
        src/scope/*.ml* \
 
2075
        src/sparecode/*.ml* \
 
2076
        src/wp/*.ml*
 
2077
 
 
2078
INRIA_LGPL= src/jessie/*.ml* \
 
2079
        src/ltl_to_acsl/*.ml* \
 
2080
        share/jessie/*.h
 
2081
 
 
2082
CEA_LGPL= Makefile.plugin \
 
2083
        src/ai/*.ml* \
 
2084
        src/buckx/*.ml* src/buckx/*.[cS] \
 
2085
        src/constant_propagation/*.ml* \
 
2086
        src/cxx_types/cc_ast.mli.in \
 
2087
        src/from/*.ml* \
 
2088
        src/gui/*.ml* \
 
2089
        src/inout/*.ml* \
 
2090
        src/journal_loader/*.ml* \
 
2091
        src/kernel/*.ml* \
 
2092
        src/lib/*.ml* \
 
2093
        src/memory_state/*.ml* \
 
2094
        src/metrics/*.ml* \
 
2095
        src/misc/*.ml* \
 
2096
        src/occurrence/*.ml* \
 
2097
        src/postdominators/*.ml* \
 
2098
        src/project/*.ml* \
 
2099
        src/semantic_callgraph/*.ml* \
 
2100
        src/syntactic_callgraph/*.ml* \
 
2101
        src/toplevel/*.ml* \
 
2102
        src/users/*.ml* \
 
2103
        src/value/*.ml* \
 
2104
        share/*.c share/*.h \
 
2105
        share/Makefile.template \
 
2106
        ptests/*.ml*
 
2107
 
 
2108
CEA_PROPRIETARY:= src/modular_dependencies/*.ml* \
 
2109
        src/impact/*.ml* \
 
2110
        src/security/*.ml* \
 
2111
        share/*.cc \
 
2112
        share/miel-mode.el \
 
2113
        src/cxx_types/predef_cxx_types.mli
 
2114
 
 
2115
ifneq ($(ENABLE_CXX),no)
 
2116
CEA_PROPRIETARY+= \
 
2117
        cxx_elsa/*.ml* \
 
2118
        cxx_elsa/*.ast \
 
2119
        cxx_elsa/cxx_slicing/*.ml*
 
2120
endif
 
2121
ifeq ($(ENABLE_MIEL),yes)
 
2122
CEA_PROPRIETARY+=src/miel/*.ml*
 
2123
endif
 
2124
 
 
2125
LICENSES= MODIFIED_MENHIR CEA_LGPL CEA_PROPRIETARY CEA_INRIA_LGPL INRIA_LGPL \
 
2126
        CIL MODIFIED_CAMLLIB
 
2127
 
 
2128
.PHONY: headers
 
2129
headers: clean
 
2130
        @echo "Applying Headers..."
 
2131
        $(foreach l,$(LICENSES),\
 
2132
        $(foreach f,$($l),$(shell $(HEADACHE) -h headers/$l $f)))
 
2133
 
 
2134
########################################################################
 
2135
# Makefile is rebuilt whenever Makefile.in or configure.in is modified #
 
2136
########################################################################
 
2137
 
 
2138
Makefile: Makefile.plugin Makefile.in config.status
 
2139
        ./config.status
 
2140
 
 
2141
config.status: configure
 
2142
        ./config.status --recheck
 
2143
 
 
2144
configure: configure.in
 
2145
        autoconf
 
2146
 
 
2147
$(PERFCOUNT).c: $(PERFCOUNT).c.in
 
2148
$(PERFCOUNT).c.in:
 
2149
        ./configure
 
2150
 
 
2151
# If 'make clean' have to be performed after 'cvs update':
 
2152
# change '.make-clean-stamp' before 'cvs commit'
 
2153
.make-clean: .make-clean-stamp
 
2154
        touch $@
 
2155
        $(MAKE) clean
 
2156
 
 
2157
include .make-clean
 
2158
 
 
2159
# force "make clean" to be executed for all users of CVS
 
2160
force-clean:
 
2161
        expr `$(CAT) .make-clean-stamp` + 1 > .make-clean-stamp
 
2162
 
 
2163
############
 
2164
# cleaning #
 
2165
############
 
2166
 
 
2167
clean-journal:
 
2168
        $(call QUIET,'$(N_RM) journal') \
 
2169
        $(RM) frama_c_journal*
 
2170
 
 
2171
clean-tests:
 
2172
        $(call QUIET,'$(N_RM) tests') \
 
2173
        ($(RM) tests/*/*.byte$(EXE) tests/*/*.opt$(EXE) tests/*/*.cm* \
 
2174
                tests/dynamic/.cm* tests/*/*~ tests/*/#* ; \
 
2175
        $(RM) tests/*/result/*.*)
 
2176
 
 
2177
clean-doc: $(PLUGIN_LIST:=_CLEAN_DOC)
 
2178
        $(call QUIET,'$(N_RM) documentation') \
 
2179
        ($(RM) -r $(DOC_DIR)/html; \
 
2180
        $(RM) $(DOC_DIR)/docgen.cm* $(DOC_DIR)/*~; \
 
2181
        $(RM) doc/db/*~ doc/db/ocamldoc.sty doc/db/db.tex; \
 
2182
        if [ -f doc/developer/Makefile ]; then \
 
2183
          $(MAKE) --silent -C doc/developer clean; \
 
2184
        fi; \
 
2185
        if [ -f doc/architecture/Makefile ]; then \
 
2186
          $(MAKE) --silent -C doc/architecture clean; \
 
2187
        fi; \
 
2188
        if [ -f doc/speclang/Makefile ]; then \
 
2189
          $(MAKE) --silent -C doc/speclang clean; \
 
2190
        fi; \
 
2191
        if [ -f doc/www/src/Makefile ]; then \
 
2192
          $(MAKE) --silent -C doc/www/src clean; \
 
2193
        fi)
 
2194
 
 
2195
clean-gui::
 
2196
        $(call QUIET,'$(N_RM) gui') \
 
2197
        $(RM) src/*/*_gui.cm* src/*/*_gui.o src/gui/*.cm* src/gui/*.o
 
2198
 
 
2199
clean-why:
 
2200
        $(call QUIET,'$(N_RM) why') \
 
2201
        if [ -f why/Makefile ]; then \
 
2202
          $(MAKE) --silent -C why clean; \
 
2203
        fi
 
2204
 
 
2205
clean:: $(PLUGIN_LIST:=_CLEAN) $(PLUGIN_DYN_LIST:=_CLEAN) \
 
2206
                clean-tests clean-journal
 
2207
        $(call QUIET,'$(N_RM) plugins') \
 
2208
        ($(RM) $(PLUGIN_GENERATED_LIST); \
 
2209
        $(RM) $(PLUGIN_LIB_DIR)/*.mli $(PLUGIN_LIB_DIR)/*.cm* \
 
2210
                $(PLUGIN_LIB_DIR)/*.p)
 
2211
        $(call QUIET,'$(N_RM) sources') \
 
2212
        for d in . $(SRC_DIRS); do \
 
2213
          $(RM) $$d/*.cm* $$d/*.o $$d/*.a $$d/*.annot $$d/*~ $$d/*.output \
 
2214
                $$d/*.annot $$d/\#*; \
 
2215
        done
 
2216
        $(call QUIET,'$(N_RM) generated files') \
 
2217
        $(RM) $(GENERATED)
 
2218
        $(call QUIET,'$(N_RM) binaries') \
 
2219
        $(RM) bin/*.byte$(EXE) bin/*.opt$(EXE) bin/*.top$(EXE)
 
2220
 
 
2221
distclean-ocamlgraph:
 
2222
        $(call QUIET,'$(N_RM) ocamlgraph') \
 
2223
        if [ -f ocamlgraph/Makefile ]; then \
 
2224
          $(MAKE) --silent -C ocamlgraph distclean; \
 
2225
        fi
 
2226
 
 
2227
distclean-why:
 
2228
        $(call QUIET,'$(N_RM) why') \
 
2229
        if [ -f why/Makefile ]; then \
 
2230
          $(MAKE) --silent -C why dist-clean; \
 
2231
        fi
 
2232
 
 
2233
dist-clean distclean:: clean clean-doc \
 
2234
                        distclean-why distclean-ocamlgraph
 
2235
        $(call QUIET,'$(N_RM) distribution') \
 
2236
        $(RM) Makefile config.cache config.log config.status config.h
 
2237
 
 
2238
##########
 
2239
# depend #
 
2240
##########
 
2241
 
 
2242
PLUGIN_DEP_LIST:=$(PLUGIN_LIST) $(PLUGIN_DYN_LIST)
 
2243
 
 
2244
.PHONY: depend
 
2245
.depend: $(PLUGIN_DEP_LIST:%=%_DEP)
 
2246
depend:  $(PLUGIN_DEP_LIST:%=%_DEP_REDO)
 
2247
 
 
2248
.depend depend: $(GENERATED) $(PLUGIN_GENERATED_LIST)
 
2249
        $(call QUIET,'$(N_DEP) why/.depend') \
 
2250
        (if [ -f why/Makefile ]; then \
 
2251
          $(MAKE) --silent -C why .depend; \
 
2252
        fi)
 
2253
        $(call QUIET,'$(N_DEP) depend') \
 
2254
        ($(RM) .depend; \
 
2255
        if test "$(PLUGIN_DEP_LIST)" != ""; then \
 
2256
          $(CAT) $(foreach d, $(PLUGIN_DEP_LIST), $(dir $d).depend) > .depend; \
 
2257
        fi; \
 
2258
        $(OCAMLDEP) $(DEP_FLAGS) $(FILES_FOR_OCAMLDEP) >> .depend; \
 
2259
        $(SED) -i -e "s&why/[/A-Za-z_0-9]\+.cm[oxi]&&g" .depend; \
 
2260
        $(SED) -i -e "s&$(OCAMLGRAPH_LOCAL)/view_graph/\([/A-Za-z_0-9]\+.cm[oxi]\)&lib/\1&g" .depend; \
 
2261
        $(CHMOD_RO) .depend)
 
2262
 
 
2263
include .depend
 
2264
 
 
2265
#####################
 
2266
# ptest development #
 
2267
#####################
 
2268
 
 
2269
.PHONY: ptests
 
2270
 
 
2271
# Because Ocaml on MacOS X has issues with native threads
 
2272
ptests: bin/ptests.byte$(EXE)
 
2273
 
 
2274
PTESTS_SRC=ptests/config.ml ptests/ptests.ml
 
2275
 
 
2276
ifeq ($(OCAMLWIN32),yes)
 
2277
# OCaml on Win32 does not support vmthreads, use native ones.
 
2278
bin/ptests.byte$(EXE): $(PTESTS_SRC)
 
2279
        $(call QUIET,'$(N_LINKING) $@') \
 
2280
        $(OCAMLC) -I ptests -dtypes -thread -g -o $@ \
 
2281
            unix.cma threads.cma str.cma $^
 
2282
else
 
2283
bin/ptests.byte$(EXE): $(PTESTS_SRC)
 
2284
        $(call QUIET,'$(N_LINKING) $@') \
 
2285
        $(OCAMLC) -I ptests -dtypes -vmthread -g -o $@ \
 
2286
            unix.cma threads.cma str.cma $^
 
2287
endif
 
2288
 
 
2289
bin/ptests.opt$(EXE): $(PTESTS_SRC)
 
2290
        $(call QUIET,'$(N_LINKING) $@') \
 
2291
        $(OCAMLOPT) -I ptests -dtypes -thread -o $@ \
 
2292
            unix.cmxa threads.cmxa str.cmxa $^
 
2293
 
 
2294
ptests/config.ml: Makefile
 
2295
        $(call QUIET, '$(N_MAKING) $@') \
 
2296
        ($(RM) $@; \
 
2297
         $(ECHO) \
 
2298
         "let default_suites = [" $(PLUGIN_TESTS_LIST:%='"%";') "]" > $@)
 
2299
 
 
2300
#######################
 
2301
# source distribution #
 
2302
#######################
 
2303
 
 
2304
STANDALONE_PLUGINS_FILES = \
 
2305
        $(addprefix src/dummy/hello_world/, hello_world.ml Makefile) \
 
2306
        $(addprefix src/dummy/untyped_metrics/, count_for.ml Makefile)
 
2307
 
 
2308
DISTRIB_FILES+= $(PLUGIN_DISTRIBUTED_LIST) $(PLUGINS_DIST_DOC_LIST) $(STANDALONE_PLUGINS_FILES)
 
2309
 
 
2310
EXPORT=frama-c-$(VERSION)
 
2311
 
 
2312
MANUALS= doc/architecture/archi.pdf doc/developer/developer.pdf \
 
2313
        doc/speclang/acsl-implementation.pdf \
 
2314
        doc/valviewer/doc_valviewer_en.pdf
 
2315
.PHONY: $(MANUALS)
 
2316
 
 
2317
doc/architecture/archi.pdf:
 
2318
        $(MAKE) -C doc/architecture
 
2319
 
 
2320
doc/developer/developer.pdf:
 
2321
        $(MAKE) -C doc/developer
 
2322
 
 
2323
doc/speclang/acsl-implementation.pdf:
 
2324
        $(MAKE) -C doc/speclang acsl-implementation.pdf
 
2325
 
 
2326
doc/valviewer/%:
 
2327
        $(MAKE) -C doc/valviewer $(basename $@)
 
2328
 
 
2329
doc-distrib: $(PLUGIN_DIST_DOC_LIST) $(MANUALS)
 
2330
        $(MKDIR) doc/manuals
 
2331
        cp doc/developer/developer.pdf doc/manuals/plug-in_development_guide.pdf
 
2332
        cp doc/speclang/acsl-implementation.pdf doc/manuals/acsl-implementation.pdf
 
2333
        cp doc/valviewer/doc_valviewer_en.pdf doc/manuals/frama-c-manual-en.pdf
 
2334
 
 
2335
clean-distrib: dist-clean
 
2336
        rm -fr $(EXPORT) $(EXPORT).tar.gz
 
2337
 
 
2338
src-distrib: doc-distrib src-distrib-ocamlgraph \
 
2339
             $(PLUGIN_DIST_EXTERNAL_LIST)
 
2340
        $(TAR) cf tmp.tar $(DISTRIB_FILES)
 
2341
        $(MKDIR) $(EXPORT)/bin
 
2342
        $(MKDIR) $(EXPORT)/lib/plugins
 
2343
        $(MKDIR) $(EXPORT)/external
 
2344
        cd $(EXPORT); $(TAR) xf ../tmp.tar;
 
2345
        rm tmp.tar
 
2346
        for dir in $(EXPORT)/tests/*; do \
 
2347
          $(MKDIR) $$dir/result; \
 
2348
          $(MKDIR) $$dir/oracle; \
 
2349
        done
 
2350
        $(TAR) czf $(EXPORT).tar.gz $(EXPORT)
 
2351
        $(CP) $(EXPORT).tar.gz doc/www/src/download
 
2352
 
 
2353
bin-distrib: clean configure
 
2354
        $(RM) -fr $(VERSION)
 
2355
        ./configure --prefix `pwd`/$(VERSION) $(CONFIG_DISTRIB_BIN)
 
2356
        $(MAKE)
 
2357
        $(MAKE) install
 
2358
        if [ -d why ]; then \
 
2359
          $(MAKE) -C why install; \
 
2360
        fi
 
2361
        $(CP) README $(VERSION)
 
2362
 
 
2363
distrib: src-distrib bin-distrib
 
2364
 
 
2365
ifeq (@OCAMLGRAPH_LOCAL@,"")
 
2366
src-distrib-ocamlgraph:
 
2367
        @ $(ECHO) "Can not make distrib tar ball without local ocamlgraph installation"
 
2368
        @ exit 2
 
2369
else
 
2370
src-distrib-ocamlgraph:
 
2371
        $(MKDIR) $(EXPORT)
 
2372
        $(CP) ocamlgraph.tar.gz $(EXPORT)
 
2373
endif
 
2374
 
 
2375
ifeq (@JESSIE_LOCAL@,yes)
 
2376
src-distrib-jessie:
 
2377
        $(MAKE) -C @WHYDISTRIB@ tarball-for-framac
 
2378
# Resulting tarball in @WHYDISTRIB@/export/why-for-framac.tar.gz
 
2379
        $(MKDIR) $(EXPORT)
 
2380
        cd $(EXPORT); $(TAR) zxf ../@WHYDISTRIB@/export/why-for-framac.tar.gz
 
2381
        mv $(EXPORT)/why-* $(EXPORT)/why
 
2382
else
 
2383
src-distrib-jessie:
 
2384
        @ $(ECHO) "Can not make distrib tar ball without local why installation"
 
2385
        @ exit 2
 
2386
endif
 
2387
 
 
2388
 
 
2389
###############################################################################
 
2390
# Local Variables:
 
2391
# compile-command: "LC_ALL=C make"
 
2392
# End: