Makefile.in 21.2 KB
Newer Older
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
1
2
##########################################################################
#                                                                        #
Jean-Christophe Filliâtre's avatar
headers    
Jean-Christophe Filliâtre committed
3
4
5
6
7
#  Copyright (C) 2010-                                                   #
#    Francois Bobot                                                      #
#    Jean-Christophe Filliatre                                           #
#    Johannes Kanig                                                      #
#    Andrei Paskevich                                                    #
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
8
9
10
#                                                                        #
#  This software is free software; you can redistribute it and/or        #
#  modify it under the terms of the GNU Library General Public           #
Jean-Christophe Filliâtre's avatar
headers    
Jean-Christophe Filliâtre committed
11
#  License version 2.1, with the special exception on linking            #
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
12
13
14
15
16
17
18
19
#  described in file LICENSE.                                            #
#                                                                        #
#  This software is distributed in the hope that it will be useful,      #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                  #
#                                                                        #
##########################################################################

Andrei Paskevich's avatar
Andrei Paskevich committed
20
include Version
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
21

22
23
24
25
26
27
VERBOSEMAKE ?= @enable_verbose_make@

ifeq ($(VERBOSEMAKE),yes)
  QUIET =
else
  QUIET = yes
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
28
29
endif

30
# install the binaries
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
31
DESTDIR =
32
33
34
35
36
37
38
39
40

prefix 	    = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@

BINDIR  = $(DESTDIR)@bindir@
LIBDIR  = $(DESTDIR)@libdir@
DATADIR = $(DESTDIR)@datadir@
MANDIR  = $(DESTDIR)@mandir@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
41

Andrei Paskevich's avatar
Andrei Paskevich committed
42
# OS specific stuff
43
44
EXE   = @EXE@
STRIP = @STRIP@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
45
46

# other variables
47
48
49
50
51
52
53
54
OCAMLC    = @OCAMLC@
OCAMLOPT  = @OCAMLOPT@
OCAMLDEP  = @OCAMLDEP@
OCAMLLEX  = @OCAMLLEX@
OCAMLYACC = @OCAMLYACC@
OCAMLDOC  = @OCAMLDOC@
OCAMLLIB  = @OCAMLLIB@
OCAMLBEST = @OCAMLBEST@
Andrei Paskevich's avatar
Andrei Paskevich committed
55
#CAMLP4   = @CAMLP4O@
56
57
58
59

OCAMLVERSION = @OCAMLVERSION@

#PSVIEWER  = @PSVIEWER@
Andrei Paskevich's avatar
Andrei Paskevich committed
60
#PDFVIEWER = @PDFVIEWER@
61

62
63
64
65
BFLAGS = -w Ae -dtypes -g -I lib $(INCLUDES)
OFLAGS = -w Ae -dtypes    -I lib $(INCLUDES)
DEPFLAGS = -I lib

66
67
68

# external libraries common to all binaries

Andrei Paskevich's avatar
Andrei Paskevich committed
69
ifeq (@enable_plugins@,yes)
70
  DYNLINK = dynlink
71
else
72
  DYNLINK =
73
74
endif

75
76
77
EXTLIBS = str unix nums $(DYNLINK)
EXTCMA	= $(addsuffix .cma,$(EXTLIBS))
EXTCMXA = $(addsuffix .cmxa,$(EXTLIBS))
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
78

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
79
80
81
###############
# main target
###############
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
82

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
83
all: @OCAMLBEST@
Francois Bobot's avatar
Francois Bobot committed
84

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
85
.PHONY: byte opt clean depend all
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
86

87
88
89
90
depend:
	rm -f $^
	make $^

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
91
#############
92
# Why library
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
93
#############
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
94

95
LIBGENERATED = src/util/rc.ml \
96
97
98
99
	       src/parser/parser.mli src/parser/parser.ml \
	       src/parser/parser.output src/parser/lexer.ml \
	       src/driver/driver_parser.mli src/driver/driver_parser.ml \
	       src/driver/driver_parser.output src/driver/driver_lexer.ml
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
100

101
LIB_UTIL = pp loc prtree util hashcons sysutil hashweak rc
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
102

103
LIB_CORE = ident ty term pattern decl theory task pretty trans env
104

105
LIB_PARSER = ptree parser lexer denv typing
106

107
108
LIB_DRIVER = call_provers driver_ast driver_parser driver_lexer driver \
	     register prover whyconf
109

110
111
112
113
114
LIB_TRANSFORM = simplify_recursive_definition inlining \
		split_conjunction encoding_decorate \
		remove_logic_definition eliminate_inductive \
		compile_match eliminate_algebraic \
		eliminate_let eliminate_definition
115

116
LIB_PRINTER = print_real alt_ergo why3 smt coq
117

118
119
120
121
122
123
LIBMODULES = src/config \
	      $(addprefix src/util/, $(LIB_UTIL)) \
	      $(addprefix src/core/, $(LIB_CORE)) \
	      $(addprefix src/parser/, $(LIB_PARSER)) \
	      $(addprefix src/driver/, $(LIB_DRIVER)) \
	      $(addprefix src/transform/, $(LIB_TRANSFORM)) \
124
	      $(addprefix src/printer/, $(LIB_PRINTER))
125

126
LIBDIRS = util core parser driver transform printer
127
LIBINCLUDES = -I src/ $(addprefix -I src/, $(LIBDIRS))
MARCHE Claude's avatar
MARCHE Claude committed
128

129
130
131
132
LIBML  = $(addsuffix .ml,  $(LIBMODULES))
LIBMLI = $(addsuffix .mli, $(LIBMODULES))
LIBCMO = $(addsuffix .cmo, $(LIBMODULES))
LIBCMX = $(addsuffix .cmx, $(LIBMODULES))
133

134
135
$(LIBCMO) $(LIBCMX): INCLUDES = $(LIBINCLUDES)
$(LIBCMX): OFLAGS += -for-pack Why
136

137
# build targets
138

139
140
byte: lib/why.cma
opt:  lib/why.cmxa
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
141

142
src/why.cma: src/why.cmo
143
144
	$(OCAMLC) -a $(BFLAGS) -o $@ $^

145
src/why.cmxa: src/why.cmx
146
147
	$(OCAMLOPT) -a $(OFLAGS) -o $@ $^

148
149
src/why.cmo: $(LIBCMO)
	$(OCAMLC) $(BFLAGS) -pack -o $@ $^
150

151
152
153
src/why.cmx: $(LIBCMX)
	$(OCAMLOPT) $(OFLAGS) -pack -o $@ $^

154
155
156
157
158
159
160
161
162
163
lib/why.cma: src/why.cma
	cp -f src/why.o lib/why.o
	cp -f $^ $@

lib/why.cmxa: src/why.cmxa
	cp -f src/why.a lib/why.a
	cp -f $^ $@

lib/why.cmi: src/why.cmo src/why.cmx
	cp -f src/why.cmi lib/why.cmi
Francois Bobot's avatar
Francois Bobot committed
164

165
# depend target
166

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
167
168
include .depend.lib

Andrei Paskevich's avatar
Andrei Paskevich committed
169
.depend.lib: src/config.ml $(LIBGENERATED)
170
	$(OCAMLDEP) $(DEPFLAGS) -slash $(LIBINCLUDES) $(LIBML) $(LIBMLI) > $@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
171
172
173

depend: .depend.lib

174
175
# clean target

Andrei Paskevich's avatar
Andrei Paskevich committed
176
LIBSDIRS = src $(addprefix src/, $(LIBDIRS))
177
178
179
180
181
182
183
184
LIBCLEAN = $(addsuffix /*.cm[iox], $(LIBSDIRS)) \
	   $(addsuffix /*.annot, $(LIBSDIRS)) \
	   $(addsuffix /*.o, $(LIBSDIRS)) \
	   $(addsuffix /*~, $(LIBSDIRS))

clean::
	rm -f $(LIBCLEAN) $(LIBGENERATED)
	rm -f src/why.cm[iox] src/why.[ao] src/why.cma src/why.cmxa
185
	rm -f .depend.lib
186

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
187
##################
188
# Why binary
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
189
190
191
192
193
##################

byte: bin/why.byte
opt:  bin/why.opt

194
bin/why.opt: lib/why.cmxa src/main.cmx
Andrei Paskevich's avatar
Andrei Paskevich committed
195
196
	$(if $(QUIET),@echo 'Linking  $@' &&) \
	    $(OCAMLOPT) $(OFLAGS) -o $@ $(EXTCMXA) $^
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
197
198
	$(STRIP) $@

199
bin/why.byte: lib/why.cma src/main.cmo
Andrei Paskevich's avatar
Andrei Paskevich committed
200
201
	$(if $(QUIET),@echo 'Linking  $@' &&) \
	    $(OCAMLC) $(BFLAGS) -o $@ $(EXTCMA) $^
202

203
src/main.cmo src/main.cmx: lib/why.cmi
204

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
205
clean::
Andrei Paskevich's avatar
Andrei Paskevich committed
206
	rm -f src/main.cm[iox] src/main.annot src/main.o
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
207
	rm -f bin/why.byte bin/why.opt
208

209
210
211
########
# Whyml
########
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
212

213
214
PGMGENERATED = src/programs/pgm_parser.mli src/programs/pgm_parser.ml \
	       src/programs/pgm_parser.output src/programs/pgm_lexer.ml
Francois Bobot's avatar
Francois Bobot committed
215

216
PGM_FILES = pgm_ttree pgm_ptree pgm_parser pgm_lexer pgm_typing pgm_main
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
217

218
PGMMODULES = $(addprefix src/programs/, $(PGM_FILES))
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
219

220
221
222
223
224
225
226
227
PGMML  = $(addsuffix .ml,  $(PGMMODULES))
PGMMLI = $(addsuffix .mli, $(PGMMODULES))
PGMCMO = $(addsuffix .cmo, $(PGMMODULES))
PGMCMX = $(addsuffix .cmx, $(PGMMODULES))

$(PGMCMO) $(PGMCMX): INCLUDES = -I src/programs

# build targets
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
228

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
229
byte: bin/whyml.byte
230
opt:  bin/whyml.opt
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
231

232
bin/whyml.opt: lib/why.cmxa $(PGMCMX)
233
234
	$(if $(QUIET), @echo 'Linking  $@' &&) \
	    $(OCAMLOPT) $(OFLAGS) -o $@ $(EXTCMXA) $^
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
235
236
	$(STRIP) $@

237
bin/whyml.byte: lib/why.cma $(PGMCMO)
238
239
240
241
	$(if $(QUIET),@echo 'Linking  $@' &&) \
	    $(OCAMLC) $(BFLAGS) -o $@ $(EXTCMA) $^

# depend and clean targets
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
242
243

include .depend.programs
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
244

245
.depend.programs: $(PGMGENERATED)
246
	$(OCAMLDEP) $(DEPFLAGS) -slash -I src/programs $(PGMML) $(PGMMLI) > $@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
247

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
248
249
250
depend: .depend.programs

clean::
251
252
253
	rm -f $(PGMGENERATED)
	rm -f src/programs/*.cm[iox] src/programs/*.o
	rm -f src/programs/*.annot src/programs/*~
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
254
	rm -f bin/whyml.byte bin/whyml.opt
255
	rm -f .depend.programs
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
256
257

###############
258
# proof manager
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
259
260
###############

261
262
263
264
265
266
267
268
269
270
271
MNG_FILES = db test

MNGMODULES = $(addprefix src/manager/, $(MNG_FILES))

MNGML  = $(addsuffix .ml,  $(MNGMODULES))
MNGMLI = $(addsuffix .mli, $(MNGMODULES))
MNGCMO = $(addsuffix .cmo, $(MNGMODULES))
MNGCMX = $(addsuffix .cmx, $(MNGMODULES))

$(MNGCMO) $(MNGCMX): INCLUDES = -I src/manager -I +sqlite3

MARCHE Claude's avatar
MARCHE Claude committed
272
273
byte: bin/manager.byte
opt:  bin/manager.opt
274

MARCHE Claude's avatar
MARCHE Claude committed
275
276
bin/manager.opt bin/manager.byte: INCLUDES = -I +sqlite3

277
bin/manager.opt: lib/why.cmxa $(MNGCMX)
278
	$(if $(QUIET), @echo 'Linking  $@' &&) \
MARCHE Claude's avatar
MARCHE Claude committed
279
	    $(OCAMLOPT) $(OFLAGS) -o $@ $(EXTCMXA) sqlite3.cmxa $^
280
	$(STRIP) $@
MARCHE Claude's avatar
MARCHE Claude committed
281

282
bin/manager.byte: lib/why.cma $(MNGCMO)
283
284
	$(if $(QUIET),@echo 'Linking  $@' &&) \
	    $(OCAMLC) $(BFLAGS) -o $@ $(EXTCMA) sqlite3.cma $^
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
285

286
# depend and clean targets
MARCHE Claude's avatar
MARCHE Claude committed
287
288
289

include .depend.manager

290
.depend.manager:
291
	$(OCAMLDEP) $(DEPFLAGS) -slash -I src/manager/ $(MNGML) $(MNGMLI) > $@
MARCHE Claude's avatar
MARCHE Claude committed
292

293
depend: .depend.manager
MARCHE Claude's avatar
MARCHE Claude committed
294
295

clean::
296
297
	rm -f src/manager/*.cm[iox] src/manager/*.o
	rm -f src/manager/*.annot src/manager/*~
MARCHE Claude's avatar
MARCHE Claude committed
298
	rm -f bin/manager.byte bin/manager.opt
299
	rm -f .depend.manager
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
300

301
#####################
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
302
303
304
# graphical interface
#####################

305
IDE_FILES = ide_main
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
306

307
308
309
310
311
312
313
314
315
316
IDEMODULES = $(addprefix src/ide/, $(IDE_FILES))

IDEML  = $(addsuffix .ml,  $(IDEMODULES))
IDEMLI = $(addsuffix .mli, $(IDEMODULES))
IDECMO = $(addsuffix .cmo, $(IDEMODULES))
IDECMX = $(addsuffix .cmx, $(IDEMODULES))

$(IDECMO) $(IDECMX): INCLUDES = -I src/ide -I +lablgtk2 -I +threads

# build targets
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
317

Andrei Paskevich's avatar
Andrei Paskevich committed
318
319
320
321
ifeq (@enable_ide@,yes)
byte: bin/whyide.byte
opt:  bin/whyide.opt
endif
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
322

MARCHE Claude's avatar
MARCHE Claude committed
323
324
bin/whyide.opt bin/whyide.byte: INCLUDES = -I +lablgtk2 -I +threads

325
bin/whyide.opt: lib/why.cmxa $(IDE_CMX)
Andrei Paskevich's avatar
Andrei Paskevich committed
326
327
328
329
	$(if $(QUIET),@echo 'Linking  $@' &&) \
	    $(OCAMLOPT) $(OFLAGS) -o $@ $(EXTCMXA) threads.cmxa \
	    lablgtk.cmxa lablgtksourceview2.cmxa gtkThread.cmx $^
	$(STRIP) $@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
330

MARCHE Claude's avatar
MARCHE Claude committed
331

332
bin/whyide.byte: lib/why.cma $(IDE_CMO)
Andrei Paskevich's avatar
Andrei Paskevich committed
333
334
335
	$(if $(QUIET),@echo 'Linking  $@' &&) \
	    $(OCAMLC) $(BFLAGS) -o $@ $(EXTCMA) threads.cma \
	    lablgtk.cma lablgtksourceview2.cma gtkThread.cmo $^
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
336

337
338
# depend and clean targets

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
339
340
341
include .depend.ide

.depend.ide:
342
	$(OCAMLDEP) $(DEPFLAGS) -slash -I src/ide $(IDEML) $(IDEMLI) > $@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
343
344
345
346

depend: .depend.ide

clean::
347
348
	rm -f src/ide/*.cm[iox] src/ide/*.o
	rm -f src/ide/*.annot src/ide/*~
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
349
	rm -f bin/whyide.byte bin/whyide.opt
350
	rm -f .depend.ide
MARCHE Claude's avatar
MARCHE Claude committed
351

352
353
354
355
##############
# Coq plugin
##############

Andrei Paskevich's avatar
Andrei Paskevich committed
356
ifeq (@enable_coq_support@,yes)
357
#byte: src/coq-plugin/whytac.cmo
MARCHE Claude's avatar
MARCHE Claude committed
358
#opt:  src/coq-plugin/whytac.cmxs
Andrei Paskevich's avatar
Andrei Paskevich committed
359
endif
360

361
COQTREES = kernel lib interp parsing proofs pretyping tactics library
Andrei Paskevich's avatar
Andrei Paskevich committed
362

363
364
365
366
#src/coq-plugin/whytac.cmo:  INCLUDES = $(addprefix -I @COQLIB@/, $(COQTREES))
src/coq-plugin/whytac.cmxs: INCLUDES = $(addprefix -I @COQLIB@/, $(COQTREES))

#src/coq-plugin/whytac.cmo:  BFLAGS+=-rectypes
367
368
src/coq-plugin/whytac.cmxs: OFLAGS+=-rectypes

369
src/coq-plugin/whytac.cmxs: lib/why.cmxa src/coq-plugin/whytac.ml
370
371
	$(OCAMLOPT) $(OFLAGS) -o $@ -shared $^

372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
#######
# tools
#######

TOOLS = bin/why-cpulimit

byte opt: $(TOOLS)

bin/why-cpulimit: src/tools/@CPULIMIT@.c
	$(CC) -o $@ $^

clean::
	rm -f bin/why-cpulimit src/tools/*~

########
# bench
########

.PHONY: bench test

bench:: bin/why.@OCAMLBEST@ bin/whyml.@OCAMLBEST@
	sh bench/bench \
394
	    "bin/why.@OCAMLBEST@" \
395
396
397
398
399
400
401
	    "bin/whyml.@OCAMLBEST@ -I theories"

BENCH_PLUGINS_CMO := helloworld.cmo simplify_array.cmo
BENCH_PLUGINS_CMO := $(addprefix bench/plugins/,$(BENCH_PLUGINS_CMO))
BENCH_PLUGINS_CMXS := $(BENCH_PLUGINS_CMO:.cmo=.cmxs)

bench_plugins:: $(BENCH_PLUGINS_CMO) $(BENCH_PLUGINS_CMXS) byte $(TOOLS)
402
403
404
405
406
407
	bin/why.byte -D bench/plugins/helloworld.drv \
	tests/test-jcf.why -t Test -g G
	bin/why.$(OCAMLBEST) -D bench/plugins/helloworld.drv  \
	tests/test-jcf.why -t Test -g G
	bin/why.$(OCAMLBEST) -D bench/plugins/simplify_array.drv \
	tests/test-jcf.why -t Test_simplify_array -g G
408
409

###############
410
# test targets
411
###############
412

413
test: bin/why.byte $(TOOLS)
414
	mkdir -p output_why3
415
416
417
418
419
	bin/why.byte -D drivers/why3.drv -o output_why3 tests/test-jcf.why
	bin/why.byte -D drivers/alt_ergo.drv tests/test-jcf.why -t Test -g G
	bin/why.byte -P alt-ergo --timelimit 3 tests/test-jcf.why -t Test -g G
	bin/why.byte -D drivers/coq.drv tests/test-jcf.why -t Test -g G
	echo bin/why.byte -P alt-ergo --timelimit 1 --prove theories/real.why
MARCHE Claude's avatar
MARCHE Claude committed
420
	@printf "*** Checking Coq file generation ***\\n"
421
	@mkdir -p output_coq
MARCHE Claude's avatar
MARCHE Claude committed
422
	@for i in int.Abs int.EuclideanDivision int.ComputerDivision  \
MARCHE Claude's avatar
MARCHE Claude committed
423
424
		real.Abs real.FromIntTest real.SquareTest \
		real.ExpLogTest real.PowerTest real.TrigonometryTest \
MARCHE Claude's avatar
MARCHE Claude committed
425
		floating_point.Test array.TestBv32 \
MARCHE Claude's avatar
MARCHE Claude committed
426
		; do \
427
428
	  printf "Generating Coq file for $$i\\n" && \
	  	bin/why.byte -P coq -o output_coq -t $$i ; done
MARCHE Claude's avatar
MARCHE Claude committed
429
	@printf "*** Checking Coq compilation ***\\n"
430
	@for i in output_coq/*.v; do printf "coq $$i\\n" && coqc $$i ; done
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
431

432
testl: bin/whyml.byte
433
	ocamlrun -bt bin/whyml.byte -I theories/ tests/test-pgm-jcf.mlw
434

435
436
examples/programs/%: bin/whyml.byte
	bin/whyml.byte -I theories examples/programs/$*.mlw
437

438
###############
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
439
# installation
440
###############
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
441

442
443
444
445
## install: install-binary install-lib install-man
##
## BINARYFILES = $(BINARY) bin/why-ide.$(OCAMLBEST)
##
Andrei Paskevich's avatar
Andrei Paskevich committed
446
447
## # install-binary should not depend on $(BINARYFILES); otherwise it
## # enforces the compilation of why-ide, even when lablgtk2 is not installed
448
## install-binary:
Andrei Paskevich's avatar
Andrei Paskevich committed
449
450
451
452
453
## 	mkdir -p $(BINDIR)
## 	cp -f $(BINARY) $(BINDIR)/why$(EXE)
## 	if test -f bin/why-ide.$(OCAMLBEST); then \
## 		cp -f bin/why-ide.$(OCAMLBEST) $(BINDIR)/why-ide-bin$(EXE); \
## 	fi
454
455
##
## install-lib:
Andrei Paskevich's avatar
Andrei Paskevich committed
456
## 	mkdir -p $(LIBDIR)/why/why
457
##
Andrei Paskevich's avatar
Andrei Paskevich committed
458
459
460
## install-man:
## 	mkdir -p $(MANDIR)/man1
## 	cp -f doc/*.1 $(MANDIR)/man1
461
##
Andrei Paskevich's avatar
Andrei Paskevich committed
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
## install-coq-no:
## install-coq-yes: install-coq-@COQVER@
## install-coq-v7:
## 	mkdir -p $(LIBDIR)/why/coq7
## 	cp -f $(V7FILES) $(LIBDIR)/why/coq7
## 	cp -f $(VO7) $(LIBDIR)/why/coq7
## install-coq-v8 install-coq-v8.1:
## 	if test -w $(COQLIB) ; then \
## 	 mkdir -p $(COQLIB)/user-contrib ; \
## 	 cp -f $(V8FILES) $(COQLIB)/user-contrib ; \
## 	 cp -f $(VO8) $(COQLIB)/user-contrib ; \
## 	else \
## 	echo "Cannot copy to Coq standard library. Add $(LIBDIR)/why/coq to Coq include path." ;\
## 	mkdir -p $(LIBDIR)/why/coq ;\
## 	cp -f $(VO8) $(V8FILES) $(LIBDIR)/why/coq ;\
## 	fi
478
##
Andrei Paskevich's avatar
Andrei Paskevich committed
479
480
481
482
483
484
485
486
## install-pvs-no:
## install-pvs-yes: $(PVSFILES)
## 	mkdir -p $(PVSLIB)/why
## 	cp $(PVSFILES) $(PVSFILES:.pvs=.prf) $(PVSLIB)/why
## 	cp lib/pvs/top.pvs lib/pvs/pvscontext.el $(PVSLIB)/why
## 	@echo "======  Compiling PVS theories, this may take some time ======"
## 	(cd $(PVSLIB)/why ; @PVSC@ -batch -l pvscontext.el -q -v 2 > top.out)
## 	@echo "======  Done compiling PVS theories ======"
487
##
Andrei Paskevich's avatar
Andrei Paskevich committed
488
489
490
491
492
## install-mizar-no:
## install-mizar-yes:
## 	mkdir -p @MIZARLIB@/mml/dict
## 	cp lib/mizar/why.miz @MIZARLIB@/mml
## 	cp lib/mizar/dict/why.voc @MIZARLIB@/mml/dict
493
494
##
## local-install: $(BINARY) $(WHYCONFIG) $(JESSIE) bin/why-ide.$(OCAMLBEST) byte bin/why-ide.byte
Andrei Paskevich's avatar
Andrei Paskevich committed
495
496
497
498
499
500
## 	cp $(BINARY) $$HOME/bin/why
## 	cp $(WHYCONFIG) $$HOME/bin/why
## 	cp $(JESSIE) $$HOME/bin/jessie
## 	if test -f bin/why-ide.$(OCAMLBEST); then \
## 	  cp -f bin/why-ide.$(OCAMLBEST) $$HOME/bin/why-ide; \
## 	fi
501
##
Andrei Paskevich's avatar
Andrei Paskevich committed
502
## local: install
503
##
Andrei Paskevich's avatar
Andrei Paskevich committed
504
505
## win: why.nsi
## 	"/cygdrive/c/Program Files (x86)/NSIS/makensis" /DVERSION=$(VERSION) why.nsi
506
##
Andrei Paskevich's avatar
Andrei Paskevich committed
507
508
## zip:
## 	zip -A -r why-$(VERSION).zip c:/why/bin c:/why/lib c:/coq/lib/contrib/why c:/coq/lib/contrib7/why
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
509

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
510
511
512
################
# documentation
################
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
513

514
DOC = doc/manual.pdf doc/manual.html
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
515

516
doc: $(DOC)
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
517

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
518
519
doc/manual.pdf: doc/manual.tex doc/version.tex
	make -C doc manual.pdf
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
520
521
522
523

doc/manual.html: doc/manual.tex doc/version.tex
	make -C doc manual.html

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
524
525
clean::
	make -C doc clean
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
526

527
##########
MARCHE Claude's avatar
API doc    
MARCHE Claude committed
528
# API DOC
529
##########
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
530

MARCHE Claude's avatar
API doc    
MARCHE Claude committed
531
532
.PHONY: apidoc

533
apidoc:
MARCHE Claude's avatar
API doc    
MARCHE Claude committed
534
	mkdir -p apidoc
535
536
	$(OCAMLDOC) -d apidoc -html -I src $(LIBINCLUDES) -I +sqlite3 \
	    $(LIBML) $(LIBMLI) $(MNGML) $(MNGMLI)
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
537

538
539
clean::
	rm -f apidoc/*
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
540

541
################
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
542
# generic rules
543
################
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
544

Andrei Paskevich's avatar
Andrei Paskevich committed
545
%.cmi: %.mli
546
	$(if $(QUIET),@echo 'Ocamlc   $<' &&) $(OCAMLC) -c $(BFLAGS) $<
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
547

548
%.cmo %cmi: %.ml
549
	$(if $(QUIET),@echo 'Ocamlc   $<' &&) $(OCAMLC) -c $(BFLAGS) $<
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
550

551
%.cmx: %.ml
552
	$(if $(QUIET),@echo 'Ocamlopt $<' &&) $(OCAMLOPT) -c $(OFLAGS) $<
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
553

554
%.cmxs: %.ml
555
	$(if $(QUIET),@echo 'Ocamlopt $<' &&) $(OCAMLOPT) -shared $(OFLAGS) -o $@ $<
556

Andrei Paskevich's avatar
Andrei Paskevich committed
557
%.ml: %.mll
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
558
559
	$(OCAMLLEX) $<

Andrei Paskevich's avatar
Andrei Paskevich committed
560
%.ml %.mli %.output: %.mly
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
561
562
	$(OCAMLYACC) -v $<

Andrei Paskevich's avatar
Andrei Paskevich committed
563
564
# .ml4.ml:
# 	$(CAMLP4) pr_o.cmo -impl $< > $@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
565

Andrei Paskevich's avatar
Andrei Paskevich committed
566
567
# lib/coq/%.vo: lib/coq/%.v
# 	$(COQC8) -I lib/coq $<
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
568

Andrei Paskevich's avatar
Andrei Paskevich committed
569
570
# lib/coq-v7/%.vo: lib/coq-v7/%.v
# 	$(COQC7) -I lib/coq-v7 $<
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
571

Andrei Paskevich's avatar
Andrei Paskevich committed
572
573
574
575
576
577
578
579
# jc/jc_ai.ml: jc/jc_annot_inference.ml jc/jc_annot_fail.ml Makefile
# 	if test "@enable_apron@" = "yes" ; then \
# 	  echo "# 1 \"jc/jc_annot_inference.ml\"" > jc/jc_ai.ml; \
# 	  cat jc/jc_annot_inference.ml >> jc/jc_ai.ml; \
# 	else \
# 	  echo "# 1 \"jc/jc_annot_fail.ml\"" > jc/jc_ai.ml; \
# 	  cat jc/jc_annot_fail.ml >> jc/jc_ai.ml; \
# 	fi
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
580
581
582
583
584
585
586
587
588
589
590

# %_why.v: %.mlw $(BINARY)
# 	$(BINARY) -coq $*.mlw

# %_why.pvs: %.mlw $(BINARY)
# 	$(BINARY) -pvs $*.mlw

# Emacs tags
############

tags:
Francois Bobot's avatar
   
Francois Bobot committed
591
	find src -regex ".*\.ml[^#]*" | grep -v ".svn" | sort -r | xargs \
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
592
593
594
595
	etags "--regex=/let[ \t]+\([^ \t]+\)/\1/" \
	      "--regex=/let[ \t]+rec[ \t]+\([^ \t]+\)/\1/" \
	      "--regex=/and[ \t]+\([^ \t]+\)/\1/" \
	      "--regex=/type[ \t]+\([^ \t]+\)/\1/" \
596
	      "--regex=/exception[ \t]+\([^ \t]+\)/\1/" \
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
597
598
599
600
601
602
603
	      "--regex=/val[ \t]+\([^ \t]+\)/\1/" \
	      "--regex=/module[ \t]+\([^ \t]+\)/\1/"

otags:
	otags src/*.mli src/*.ml c/*.mli c/*.ml intf/*.mli intf/*.ml

wc:
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
604
	ocamlwc -p src/*.ml* src/*/*.ml*
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
605

606
dep:
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
607
	$(MAKE) depend
608
	cat .depend* | ocamldot | dot -Tpdf > dep.pdf
Andrei Paskevich's avatar
Andrei Paskevich committed
609
#	$(PDFVIEWER) dep.pdf
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
610

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
611
612
613
# distrib
#########

Andrei Paskevich's avatar
Andrei Paskevich committed
614
615
# NAME=why-$(VERSION)
# EXPORT=export/$(NAME)
616
#
Andrei Paskevich's avatar
Andrei Paskevich committed
617
618
619
# WWW = /users/www-perso/projets/why
# FTP = $(WWW)/download
# WWWKRAKATOA = /users/www-perso/projets/krakatoa
620
#
Andrei Paskevich's avatar
Andrei Paskevich committed
621
# FILES =src/*.ml* c/*.ml* jc/*.ml* java/*.ml* ml/*.ml* ml/*/*.ml* intf/*.ml* tools/*.ml* tools/*.c bin/why-ide.sh \
622
623
624
625
626
#       mix/*.ml* \
#       version.sh Version Makefile.in configure.in configure .depend .depend.coq \
#       config/check_ocamlgraph.ml \
#       README INSTALL COPYING LICENSE CHANGES \
#       doc/Makefile doc/manual.ps doc/why.1 \
Andrei Paskevich's avatar
Andrei Paskevich committed
627
628
629
630
631
632
633
# 	examples-c/*/*.h examples-c/*/*.c \
# 	examples-c/Makefile examples-c/*/Makefile \
# 	examples-c/*/coq/*.v \
# 	examples/Makefile* \
# 	examples/*/*.mlw examples/*/*.why examples/*/*.v examples/*/*.sx \
# 	examples/*/.depend examples/*/Makefile \
# 	bench/bench.in bench/good*/*.mlw bench/good*/*.v \
634
#	bench/c/bench bench/c/bench-files bench/c/*/*.c bench/c/*/*/*.c \
Andrei Paskevich's avatar
Andrei Paskevich committed
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
# 	bench/jc/bench bench/jc/good/*.jc \
# 	bench/java/bench bench/java/*/*.java bench/provers/*.mlw \
# 	tests/regtest.sh tests/java/*.java \
# 	tests/java/coq/*.v \
# 	tests/java/result/README tests/java/oracle/*.oracle \
# 	lib/coq*/*.v \
# 	lib/pvs/pvscontext.el lib/pvs/*.pvs lib/pvs/*.prf \
# 	lib/mizar/why.miz lib/mizar/dict/why.voc \
# 	lib/why/*.why lib/isabelle/*.thy lib/hol4/*.ml lib/harvey/*.rv \
# 	lib/java_api/java/*/*.java \
# 	lib/javacard_api/java/lang/*.java \
# 	lib/javacard_api/javacard/*/*.java \
# 	lib/javacard_api/javacardx/crypto/*.java \
# 	lib/javacard_api/com/sun/javacard/impl/*.java \
# 	lib/images/*.png \
# 	atp/*.ml atp/LICENSE.txt atp/Makefile atp/Mk_ml_file \
# 	ocamlgraph/configure.in ocamlgraph/configure ocamlgraph/.depend \
# 	ocamlgraph/Makefile.in ocamlgraph/META.in ocamlgraph/*/*.ml* \
653
654
655
#	frama-c-plugin/Makefile frama-c-plugin/configure \
# 	frama-c-plugin/*.ml* frama-c-plugin/share/jessie/*.h
#
Andrei Paskevich's avatar
Andrei Paskevich committed
656
# # ne pas distribuer ces tests-la	frama-c-plugin/tests/jessie/*.c
657
#
Andrei Paskevich's avatar
Andrei Paskevich committed
658
# distrib export: source export-doc export-www export-examples export-examples-c linux
659
#
Andrei Paskevich's avatar
Andrei Paskevich committed
660
661
662
663
# export-www:
# 	echo "<#def version>$(VERSION)</#def>" > /users/demons/filliatr/www/why/version.prehtml
# 	echo "<#def cversion>$(CVERSION)</#def>" >> /users/demons/filliatr/www/why/version.prehtml
# 	make -C /users/demons/filliatr/www/why install
664
#
Andrei Paskevich's avatar
Andrei Paskevich committed
665
666
# source: export/$(NAME).tar.gz
# 	cp CHANGES CHANGES.caduceus export/$(NAME).tar.gz $(FTP)
667
#
Andrei Paskevich's avatar
Andrei Paskevich committed
668
669
670
671
672
673
# export/$(NAME).tar.gz: $(FILES)
# 	rm -rf $(EXPORT)
# 	mkdir -p $(EXPORT)/bin
# 	cp --parents $(FILES) $(EXPORT)
# 	cd $(EXPORT); rm -f $(GENERATED)
# 	cd export; tar cf $(NAME).tar $(NAME); gzip -f --best $(NAME).tar
674
675
#
# tarball-for-framac:
Andrei Paskevich's avatar
Andrei Paskevich committed
676
677
# 	make tarball
# 	cp export/$(NAME).tar.gz export/why-for-framac.tar.gz
678
679
#
# tarball:
Andrei Paskevich's avatar
Andrei Paskevich committed
680
681
682
# 	mkdir -p export
# 	cd export; rm -rf $(NAME) $(NAME).tar.gz
# 	make export/$(NAME).tar.gz
683
#
Andrei Paskevich's avatar
Andrei Paskevich committed
684
# EXFILES = lib/coq*/*.v examples/*/*.v examples/*/*.mlw
685
#
Andrei Paskevich's avatar
Andrei Paskevich committed
686
687
688
689
# export-examples:
# 	cp --parents $(EXFILES) $(WWW)
# 	make -C $(WWW)/examples clean depend
# 	echo "*** faire make all dans $(WWW)/examples ***"
690
#
Andrei Paskevich's avatar
Andrei Paskevich committed
691
692
693
694
695
696
# export-examples-c:
# 	mkdir -p $(WWW)/caduceus/examples
# 	cd examples-c; cp --parents */*.c */*.h $(WWW)/caduceus/examples
# 	mkdir -p $(WWW)/caduceus/examples/bench
# 	cp bench/c/good/*.c $(WWW)/caduceus/examples/bench
# 	rm -f $(WWW)/caduceus/examples/bench/test.c
697
#
Andrei Paskevich's avatar
Andrei Paskevich committed
698
699
700
701
702
703
704
705
# export-doc: $(DOC)
# 	cp doc/manual.ps doc/manual.html $(WWW)/manual
# 	cp doc/logic_syntax.bnf $(WWW)/manual
# 	(cd $(WWW)/manual; hacha manual.html)
# 	cp doc/caduceus.ps doc/caduceus.html $(WWW)/caduceus/manual
# 	(cd $(WWW)/caduceus/manual; hacha caduceus.html)
# 	cp doc/krakatoa.pdf doc/krakatoa.html $(WWWKRAKATOA)/manual
# 	(cd $(WWWKRAKATOA)/manual; hacha krakatoa.html)
706
#
Andrei Paskevich's avatar
Andrei Paskevich committed
707
# OSTYPE  ?= linux
708
#
Andrei Paskevich's avatar
Andrei Paskevich committed
709
# BINARYNAME = $(NAME)-$(OSTYPE)
710
#
Andrei Paskevich's avatar
Andrei Paskevich committed
711
# linux: binary
712
713
714
#
# ALLBINARYFILES = $(FILES) $(BINARYFILES)
#
Andrei Paskevich's avatar
Andrei Paskevich committed
715
716
717
718
719
# binary: $(ALLBINARYFILES)
# 	mkdir -p export/$(BINARYNAME)
# 	cp --parents $(ALLBINARYFILES) export/$(BINARYNAME)
# 	(cd export; tar czf $(BINARYNAME).tar.gz $(BINARYNAME))
# 	cp export/$(BINARYNAME).tar.gz $(FTP)
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
720

721
###############
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
722
# file headers
723
724
###############

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
725
headers:
Jean-Christophe Filliâtre's avatar
headers    
Jean-Christophe Filliâtre committed
726
	headache -c misc/headache_config.txt -h misc/header.txt \
Andrei Paskevich's avatar
Andrei Paskevich committed
727
	    Makefile.in configure.in */*.ml */*/*.ml */*/*.ml[ily4]
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
728

729
#########
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
730
# myself
731
#########
Andrei Paskevich's avatar
Andrei Paskevich committed
732

Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
733
Makefile: Makefile.in config.status
Andrei Paskevich's avatar
Andrei Paskevich committed
734
735
736
737
	./config.status --file $@

src/config.ml: src/config.ml.in config.status
	./config.status --file $@
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
738

Andrei Paskevich's avatar
Andrei Paskevich committed
739
740
741
742
doc/version.tex: doc/version.tex.in config.status
	./config.status --file $@

config.status: configure Version
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
743
744
745
	./config.status --recheck

configure: configure.in
746
	autoconf
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
747

748
###################
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
749
# clean and depend
750
###################
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
751

752
.PHONY: distclean
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
753

754
distclean: clean
Andrei Paskevich's avatar
Andrei Paskevich committed
755
756
	rm -f config.status config.cache config.log \
	    Makefile src/config.ml doc/version.tex
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
757
758
759
760
761
762
763
764

#################################################################
# Building the Why platform with ocamlbuild (OCaml 3.10 needed) #
#################################################################

# There used to be targets here but they are no longer useful.

# To build using Ocamlbuild:
765
# 1) Run "make Makefile" to ensure that the generated files (config.ml, ...)
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
766
767
768
769
770
771
772
773
# are generated.
# 2) Run Ocamlbuild with any target to generate the sanitization script.
# 3) Run ./sanitize to delete the generated files that shouldn't be generated
# (i.e. all lexers and parsers).
# 4) Run Ocamlbuild with the target you need, for example:
# ocamlbuild jc/jc_main.native

# You can also use the Makefile ./build.makefile which has some handy targets.