forked from ocaml/opam
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Makefile
208 lines (162 loc) · 5.62 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
-include ../Makefile.config
SRC_EXTS = extlib re cmdliner graph cudf dose
URL_extlib = http://ocaml-extlib.googlecode.com/files/extlib-1.5.3.tar.gz
MD5_extlib = 3de5f4e0a95fda7b2f3819c4a655b17c
URL_re = https://github.com/ocaml/ocaml-re/archive/ocaml-re-1.2.0.tar.gz
MD5_re = 5cbfc137683ef2b0e91f931577f2e673
URL_cmdliner = http://erratique.ch/software/cmdliner/releases/cmdliner-0.9.4.tbz
MD5_cmdliner = 5089b4b69993ddc5ce4aac0e30d0c641
URL_graph = http://ocamlgraph.lri.fr/download/ocamlgraph-1.8.5.tar.gz
MD5_graph = 75dde65bfc3f9b07e795343d369aa84d
URL_cudf = https://gforge.inria.fr/frs/download.php/file/33593/cudf-0.7.tar.gz
MD5_cudf = 2047222fcf78278c6a24ac619fc39abb
URL_dose = https://gforge.inria.fr/frs/download.php/file/33607/dose3-3.2-rc2.tar.gz
MD5_dose = f2d229129f03ad0971fc9d68f4a90898
ARCHIVES = $(foreach lib,$(SRC_EXTS),$(notdir $(URL_$(lib))))
lib_of = $(foreach lib,$(SRC_EXTS),$(if $(findstring $(1),$(URL_$(lib))),$(lib),,))
# Portable md5check
MD5CHECK = ocaml ../shell/md5check.ml
lib-ext: clone build copy
@
build: clone
$(MAKE) -f $(OCAMLMAKEFILE) subprojs SUBTARGET=ncl
all: ncl
clone: $(SRC_EXTS:=.stamp) graph-workaround
@
archives: $(SRC_EXTS:=.download)
@
%.download:
[ -e $(notdir $(URL_$*)) ] || $(FETCH) $(URL_$*)
$(MD5CHECK) $(notdir $(URL_$*)) $(MD5_$*)
%.stamp: %.download
mkdir -p tmp
cd tmp && tar xf$(if $(patsubst %.tar.gz,,$(URL_$*)),j,z) ../$(notdir $(URL_$*))
rm -rf $*
mv tmp/* $*
rmdir tmp
@if [ -d patches/$* ]; then \
cd $* && \
for p in ../patches/$*/*.patch; do \
patch -p1 < $$p; \
done; \
fi
@touch $@
# OCamlMakefile doesn'nt include stand-alone mlis in the packs...
graph-workaround:
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
clean:
rm -rf lib
$(MAKE) -f $(OCAMLMAKEFILE) subprojs SUBTARGET=cleanup
distclean:
rm -rf cudf extlib re graph dose cmdliner
rm -f depends.ocp
rm -f *.tar.gz *.tbz *.stamp
rm -f *.cm* *.o *.a
rm -rf lib
LIB_EXTS = extlib re cmdliner graph cudf dose_common dose_debian dose_algo
inst_objs = cp $(1)/*.cm* $(1)/*.o lib
copy: build
mkdir -p lib
cp *.cma lib || true
cp *.cmxa lib || true
cp *.a lib || true
$(call inst_objs,extlib)
$(call inst_objs,re/lib)
$(call inst_objs,cmdliner/src)
$(call inst_objs,graph/src)
$(call inst_objs,cudf)
$(call inst_objs,dose/common)
$(call inst_objs,dose/deb)
$(call inst_objs,dose/algo)
$(call inst_objs,.)
# --
addmli = $(foreach ml,$(2),$(wildcard $(addsuffix .mli,$(basename $(1)/$(ml)))) $(1)/$(ml))
SRC_extlib = enum.ml extHashtbl.ml extList.ml extString.ml global.ml install.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_extlib))
RESULT = extlib
# Don't omit !! it leaks between subprojs...
LIB_PACK_NAME =
endef
export PROJ_extlib
SRC_re = cset.ml automata.ml re.ml re_perl.ml re_pcre.ml re_emacs.ml re_glob.ml \
re_str.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 main_cudf_parse_822.ml \
cudf.ml cudf_checker.ml cudf_parser.mly cudf_printer.ml main_cudf_check.ml \
cudf_c.ml
define PROJ_cudf
SOURCES = $(call addmli,cudf,$(SRC_cudf))
RESULT = cudf
LIB_PACK_NAME =
INCDIRS = extlib
endef
export PROJ_cudf
SRC_dose_common = util.ml url.ml input.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 cudf re/lib
endef
export PROJ_dose_common
SRC_dose_debian = architecture.ml format822.ml format822_parser.mly \
packages_parser.mly version.ml packages_lexer.mll format822_lexer.mll \
packages.ml release.ml sources.ml printer.ml evolution.ml debutil.ml debcudf.ml \
apt.ml edsp.ml
define PROJ_dose_debian
SOURCES = $(call addmli,dose/deb,$(SRC_dose_debian))
RESULT = dose_debian
LIB_PACK_NAME = debian
INCDIRS = extlib cudf re/lib
endef
export PROJ_dose_debian
SRC_dose_algo = defaultgraphs.ml diagnostic_int.ml diagnostic.ml \
dominators.ml flatten.ml statistics.ml depsolver_int.ml depsolver.ml \
strongconflicts_int.ml strongconflicts.ml strongdeps_int.ml strongdeps.ml
define PROJ_dose_algo
SOURCES = $(call addmli,dose/algo,$(SRC_dose_algo))
RESULT = dose_algo
LIB_PACK_NAME = algo
INCDIRS = extlib graph/src dose/common dose/deb cudf
endef
export PROJ_dose_algo
# --
ifndef SUBROJS
export SUBPROJS = $(LIB_EXTS)
endif
%:
$(MAKE) -f $(OCAMLMAKEFILE) subprojs SUBTARGET=$@
OCAMLMAKEFILE = ../OCamlMakefile
export OCAMLMAKEFILE