forked from ocaml/opam
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Makefile
346 lines (273 loc) · 9.68 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
-include ../Makefile.config
SRC_EXTS = cppo extlib re cmdliner graph cudf dose uutf jsonm opam_file_format
URL_cppo = https://github.com/mjambon/cppo/archive/v1.3.2.tar.gz
MD5_cppo = 133c9f8afadb6aa1c5ba0f5eb55c5648
URL_extlib = https://github.com/ygrek/ocaml-extlib/archive/1.7.0.tar.gz
MD5_extlib = b50b02d9e40d35cc20c82d9c881a1bf6
URL_re = https://github.com/ocaml/ocaml-re/archive/ocaml-re-1.5.0.tar.gz
MD5_re = 1e9bff3279648881be31e5ff96219f0a
URL_cmdliner = http://erratique.ch/software/cmdliner/releases/cmdliner-0.9.8.tbz
MD5_cmdliner = fc67c937447cc223722f1419fa2189da
URL_graph = http://ocamlgraph.lri.fr/download/ocamlgraph-1.8.6.tar.gz
MD5_graph = afbc24f0e0eb72c2d3eda64b68513e73
URL_cudf = https://gforge.inria.fr/frs/download.php/33593/cudf-0.7.tar.gz
MD5_cudf = 2047222fcf78278c6a24ac619fc39abb
URL_dose = https://gforge.inria.fr/frs/download.php/file/35975/dose3-5.0.tar.gz
MD5_dose = 228c6a73a0759783fd01181047046610
URL_uutf = http://erratique.ch/software/uutf/releases/uutf-0.9.3.tbz
MD5_uutf = 708c0421e158b390c7cc341f37b40add
URL_jsonm = http://erratique.ch/software/jsonm/releases/jsonm-0.9.1.tbz
MD5_jsonm = 631a5dabdada83236c83056f60e42685
URL_opam_file_format = https://github.com/ocaml/opam-file-format/archive/2.0.0-beta3.tar.gz
MD5_opam_file_format = fb461d14a44aac3a43751aa936e79143
ARCHIVES = $(foreach lib,$(SRC_EXTS),$(notdir $(URL_$(lib))))
lib_of = $(foreach lib,$(SRC_EXTS),$(if $(findstring $(1),$(URL_$(lib))),$(lib),,))
ifdef OCAML
# Portable md5check
MD5CHECK = $(OCAML) ../shell/md5check.ml $(1) $(2)
else
MD5CHECK = test "`md5sum $(1) | sed -e 's/^[^a-f0-9]*\([a-f0-9]*\).*/\1/'`" = "$(2)" || (rm $(1) && false)
endif
lib-ext: clone build copy
@
ifeq ($(OCAMLC),no)
SUBTARGET=ncl
else
ifeq ($(OCAMLOPT),no)
SUBTARGET=bcl
else
SUBTARGET="bcl ncl"
endif
endif
build: clone
$(MAKE) $(SUBPROJS:%=proj_%)
all: bcl ncl
clone: $(SRC_EXTS:=.stamp) graph-workaround.stamp extlib-cppo.stamp dose-cppo.stamp
@
archives: $(SRC_EXTS:=.download)
@
define cache_url
https://opam.ocaml.org/2.0~dev/cache/md5/$(shell echo $(MD5_$(1)) | cut -c -2)/$(MD5_$(1))
endef
define get_from_cache
{ $(FETCH) $(call cache_url,$(1)) && \
mv $(MD5_$(1)) $(notdir $(URL_$(1))) && \
$(call MD5CHECK,$(notdir $(URL_$(1))),$(MD5_$(1))); }
endef
%.download:
[ -e $(notdir $(URL_$*)) ] || \
$(FETCH) $(URL_$*) && $(call MD5CHECK,$(notdir $(URL_$*)),$(MD5_$*)) || \
$(call get_from_cache,$*)
@touch $@
%.stamp: %.download
mkdir -p tmp-$*
cd tmp-$* && $(if $(patsubst %.tar.gz,,$(URL_$*)),bunzip2,gunzip) -c ../$(notdir $(URL_$*)) | tar xf -
rm -rf $*
@for ii in tmp-$*/*; do if [ -d $${ii} ]; then mv $${ii} $*; fi; done; \
rm -rf tmp-$*
@if [ -d patches/$* ]; then \
cd $* && \
for p in ../patches/$*/*.patch; do \
patch -p1 < $$p; \
done; \
fi
@touch $@
# OCamlMakefile doesn't include stand-alone mlis in the packs...
graph-workaround.stamp: graph.stamp
cp graph/src/sig.mli graph/src/sig.ml
cp graph/src/sig_pack.mli graph/src/sig_pack.ml
cp graph/src/dot_ast.mli graph/src/dot_ast.ml
@touch $@
SRC_cppo = cppo_version.ml cppo_types.ml cppo_parser.mli cppo_parser.ml cppo_lexer.ml \
cppo_command.ml cppo_eval.ml cppo_main.ml
cppo/cppo$(EXE): cppo.stamp
echo 'let cppo_version = "$(VERSION)"' > cppo/cppo_version.ml
ocamllex cppo/cppo_lexer.mll
ocamlyacc cppo/cppo_parser.mly
ocamlopt -o cppo/cppo$(EXE) -I cppo -dtypes unix.cmxa str.cmxa $(foreach ml,$(SRC_cppo),cppo/$(ml))
ifeq ($(OCAML_4_02),true)
CPPOVARS=-D OCAML4 -D OCAML_4_02
else
CPPOVARS=-D OCAML4
endif
extlib-cppo.stamp: cppo/cppo$(EXE) extlib.stamp
cppo/cppo$(EXE) $(CPPOVARS) extlib/src/extBytes.mlpp -o extlib/src/extBytes.ml
cppo/cppo$(EXE) $(CPPOVARS) extlib/src/extHashtbl.mlpp -o extlib/src/extHashtbl.ml
cppo/cppo$(EXE) $(CPPOVARS) extlib/src/extString.mlpp -o extlib/src/extString.ml
cppo/cppo$(EXE) $(CPPOVARS) extlib/src/extBuffer.mlpp -o extlib/src/extBuffer.ml
@touch $@
dose-cppo.stamp: dose.stamp
for f in `find dose -regex ".*.mli*"`; do\
T=`mktemp`; \
echo "(*pp cppo$(if $(filter 1,$(WIN32)),\,/)cppo$(EXE) -V OCAML:$(OCAMLVERSION) *)" > $$T; \
if fgrep -q OCAMLGRAPHVERSION $$f ; then \
echo "#define OCAMLGRAPHVERSION 186" >> $$T ; \
fi ; \
cat $$f >> $$T && mv $$T $$f;\
done
@touch $@
clean:
rm -rf lib
$(MAKE) -f $(OCAMLMAKEFILE) subprojs SUBTARGET=cleanup
distclean:
rm -rf cudf extlib re graph dose cmdliner uutf jsonm opam_file_format ._ncdi ._bcdi ._d
rm -f depends.ocp
rm -f *.tar.gz *.tbz *.stamp *.download
rm -f *.cm* *.o *.a *.lib *.obj
rm -rf lib
LIB_EXTS = extlib re cmdliner graph cudf dose_common dose_versioning dose_pef dose_opam dose_algo uutf jsonm opam_file_format
proj_uutf: proj_cmdliner
proj_jsonm: proj_uutf
proj_cudf: proj_extlib
proj_dose_common: proj_extlib proj_re proj_cudf
proj_dose_versioning: proj_extlib proj_dose_common proj_re proj_cudf
proj_dose_pef: proj_extlib proj_dose_common proj_re proj_cudf
proj_dose_opam: proj_extlib proj_dose_pef proj_re proj_cudf
proj_dose_algo: proj_extlib proj_dose_common proj_graph proj_cudf
inst_objs = cp $(1)/*.cm*i lib
copy: build
mkdir -p lib
cp *.cma lib || true
cp *.cmxa lib || true
cp *.a lib || true
cp *.lib lib || true
$(call inst_objs,extlib/src)
$(call inst_objs,re/lib)
$(call inst_objs,cmdliner/src)
$(call inst_objs,graph/src)
$(call inst_objs,cudf)
$(call inst_objs,dose/algo)
$(call inst_objs,uutf/src)
$(call inst_objs,jsonm/src)
$(call inst_objs,opam_file_format/src)
$(call inst_objs,.)
# --
addmli = $(foreach ml,$(2),$(wildcard $(addsuffix .mli,$(basename $(1)/$(ml)))) $(1)/$(ml))
SRC_extlib = extBytes.ml extBuffer.ml enum.ml extHashtbl.ml extList.ml extString.ml global.ml \
IO.ml option.ml pMap.ml refList.ml std.ml uChar.ml unzip.ml uTF8.ml optParse.ml \
dynArray.ml dllist.ml bitSet.ml base64.ml extArray.ml extLib.ml
define PROJ_extlib
SOURCES = $(call addmli,extlib/src,$(SRC_extlib))
RESULT = extlib
# Don't omit !! it leaks between subprojs...
LIB_PACK_NAME =
endef
export PROJ_extlib
SRC_re = re_cset.ml re_automata.ml re.ml re_glob.ml re_perl.ml re_pcre.ml
define PROJ_re
SOURCES = $(call addmli,re/lib,$(SRC_re))
RESULT = re
LIB_PACK_NAME =
endef
export PROJ_re
SRC_cmdliner = cmdliner.ml
define PROJ_cmdliner
SOURCES = $(call addmli,cmdliner/src,$(SRC_cmdliner))
RESULT = cmdliner
LIB_PACK_NAME =
endef
export PROJ_cmdliner
SRC_graph_lib = bitv.ml heap.ml unionfind.ml
SRC_graph = sig_pack.ml sig.ml dot_ast.ml builder.ml classic.ml contraction.ml \
delaunay.ml dominator.ml dot_parser.mly fixpoint.ml gmap.ml gml.mll graphml.ml \
graphviz.ml leaderlist.ml oper.ml rand.ml strat.ml traverse.ml util.ml \
version.ml kruskal.ml flow.ml dot_lexer.mll components.ml coloring.ml blocks.ml \
dot.ml imperative.ml merge.ml minsep.ml persistent.ml nonnegative.ml path.ml \
topological.ml pack.ml mcs_m.ml cliquetree.ml md.ml
define PROJ_graph
SOURCES = $(call addmli,graph/lib,$(SRC_graph_lib)) $(call addmli,graph/src,$(SRC_graph))
RESULT = graph
LIB_PACK_NAME = graph
endef
export PROJ_graph
SRC_cudf = cudf_types.ml cudf_type_parser.mly cudf_type_lexer.mll cudf_conf.ml \
cudf_822_parser.mly cudf_822_lexer.mll cudf_types_pp.ml \
cudf.ml cudf_checker.ml cudf_parser.mly cudf_printer.ml \
cudf_c.ml
define PROJ_cudf
SOURCES = $(call addmli,cudf,$(SRC_cudf))
RESULT = cudf
LIB_PACK_NAME =
INCDIRS = extlib/src
endef
export PROJ_cudf
SRC_dose_common = shell_lexer.mll util.ml url.ml input.ml\
format822.ml format822_parser.mly format822_lexer.mll \
criteria_parser.mly criteria_lexer.mll criteria_types.ml criteria.ml\
edosSolver.ml cudfSolver.ml cudfAdd.ml cudfDiff.ml
define PROJ_dose_common
SOURCES = $(call addmli,dose/common,$(SRC_dose_common))
RESULT = dose_common
LIB_PACK_NAME = common
INCDIRS = extlib/src cudf re/lib
endef
export PROJ_dose_common
SRC_dose_versioning = debian.ml semverNode.ml semver.ml utils.ml
define PROJ_dose_versioning
SOURCES = $(call addmli,dose/versioning,$(SRC_dose_versioning))
RESULT = dose_versioning
LIB_PACK_NAME = versioning
INCDIRS = extlib/src cudf re/lib
endef
export PROJ_dose_versioning
SRC_dose_pef = packages_types.ml packages_parser.mly packages_lexer.mll printer.ml packages.ml \
pefcudf.ml
#SOURCES = $(SRC_dose_pef)
define PROJ_dose_pef
SOURCES = $(call addmli,dose/pef,$(SRC_dose_pef))
RESULT = dose_pef
LIB_PACK_NAME = pef
INCDIRS = extlib/src cudf re/lib
endef
export PROJ_dose_pef
SRC_dose_opam = opamcudf.ml packages.ml
define PROJ_dose_opam
SOURCES = $(call addmli,dose/opam,$(SRC_dose_opam))
RESULT = dose_opam
LIB_PACK_NAME = opam
INCDIRS = extlib/src cudf re/lib
endef
export PROJ_dose_opam
SRC_dose_algo = defaultgraphs.ml diagnostic.ml dominators.ml flatten.ml \
statistics.ml depsolver_int.ml depsolver.ml strongconflicts_int.ml\
strongconflicts.ml strongdeps.ml
define PROJ_dose_algo
SOURCES = $(call addmli,dose/algo,$(SRC_dose_algo))
RESULT = dose_algo
LIB_PACK_NAME = algo
INCDIRS = extlib/src graph/src cudf
endef
export PROJ_dose_algo
define PROJ_uutf
SOURCES = $(call addmli,uutf/src,uutf.ml)
RESULT = uutf
LIB_PACK_NAME =
endef
export PROJ_uutf
define PROJ_jsonm
SOURCES = $(call addmli,jsonm/src,jsonm.ml)
RESULT = jsonm
LIB_PACK_NAME =
INCDIRS = uutf/src
endef
export PROJ_jsonm
SRC_opam_file_format = \
opamParserTypes.mli \
opamLexer.mli opamLexer.mll \
opamBaseParser.mly \
opamParser.mli opamParser.ml \
opamPrinter.mli opamPrinter.ml
define PROJ_opam_file_format
SOURCES = $(call addmli,opam_file_format/src,$(SRC_opam_file_format))
RESULT = opam-file-format
LIB_PACK_NAME =
endef
export PROJ_opam_file_format
# --
ifndef SUBROJS
export SUBPROJS = $(LIB_EXTS)
endif
proj_%:
+$(MAKE) -f $(OCAMLMAKEFILE) subproj_$* SUBTARGET=$(SUBTARGET) make_deps=yes
OCAMLMAKEFILE = ../OCamlMakefile
export OCAMLMAKEFILE