File: Makefile

package info (click to toggle)
cduce 0.4.1-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,836 kB
  • ctags: 3,143
  • sloc: ml: 20,402; xml: 5,376; makefile: 411; sh: 45
file content (331 lines) | stat: -rw-r--r-- 8,191 bytes parent folder | download
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
include Makefile.conf
include VERSION


ALL_TARGET=cduce cduce_lib.cma
INSTALL_BINARIES=cduce$(EXE)

ifneq ($(ML_INTERFACE), false)
  INSTALL_BINARIES += cduce_mktop
endif


ifeq ($(NATIVE),true)
all: cduce_lib.cmxa
endif

PACKAGES = ulex camlp4 pcre num netstring cgi

# Call make with VERBOSE=true to get a trace of commands

VERBOSE=false

ifneq ($(VERBOSE), true)
   HIDE=@
else
   HIDE=
endif


SYNTAX = -I misc/ q_symbol.cmo \
  -symbol cduce_version=\"$(VERSION)\" \
  -symbol build_date=\"$(shell date +%Y-%m-%d)\" \
  -symbol session_dir=\"$(SESSION_DIR)\" \
  -loc "_loc"

SYNTAX_PARSER = -syntax camlp4o $(SYNTAX:%=-ppopt %)

CAMLC_P = ocamlc -g
DEPEND_OCAMLDEP = misc/q_symbol.cmo
ifeq ($(PROFILE), true)
  CAMLOPT_P = ocamlopt -p -inline 10000
  ifeq ($(NATIVE), false) 
    CAMLC_P = ocamlcp -p a
    SYNTAX_PARSER = 
    DEPEND_OCAMLDEP =
  endif
else
  CAMLOPT_P = ocamlopt -inline 10000
endif

OPT = -warn-error FPSXY
ANNOT =
INTERFACE =
ifeq ($(ANNOT), true)
	OPT += -passopt -dtypes
endif
ifeq ($(INTERFACE), true)
	OPT += -passopt -i
endif
OCAMLFIND = ocamlfind
CAMLC = $(OCAMLFIND) $(CAMLC_P) $(OPT) -package "$(PACKAGES)"
CAMLOPT = $(OCAMLFIND) $(CAMLOPT_P) $(OPT) -package "$(PACKAGES)"

ifeq ($(NATIVE), true)
  EXTENSION = cmx
  EXTENSION_LIB = cmxa
  CAML=ocamlopt
  COMPILE = $(CAMLOPT)
  LINK = $(CAMLOPT) -linkpkg gramlib.cmxa camlp4.cmxa pr_o.cmx
  SYNTAX += -symbol ocaml_compiler=\"native\"
else
  EXTENSION = cmo
  EXTENSION_LIB = cma
  COMPILE = $(CAMLC)
  CAML=ocamlc
  LINK = $(CAMLC) -custom -linkpkg gramlib.cma camlp4.cma pr_o.cmo
  SYNTAX += -symbol ocaml_compiler=\"bytecode\"
endif

ifeq ($(FORPACK),true)
  FORPACKOPT=-passopt -for-pack -passopt Cduce_lib
else
  FORPACKOPT=
endif

INSTALL := install -c

ifeq ($(NATIVE),true)
.PHONY: cduce_lib.cma
cduce_lib.cma:
	$(HIDE)$(MAKE) NATIVE=false $@
endif

install: all install_bin install_lib install_doc

install_bin:
	@echo "Install binaries"
	$(HIDE)mkdir -p $(BINDIR)
	$(HIDE)$(INSTALL) -m755 $(INSTALL_BINARIES) $(BINDIR)/


install_lib:
	@echo "Build META"
	$(HIDE)(sed "s/%REQ%/$(PACKAGES)/" < META.in | sed "s/%VER%/$(VERSION)/" > META)
	$(HIDE)-$(OCAMLFIND) remove cduce
	$(HIDE)-$(OCAMLFIND) install cduce META \
         cduce_lib.cmi $(wildcard *.cma) $(wildcard *.cmxa) $(wildcard *.a) \


uninstall:
	rm -f $(BINDIR)/cduce$(EXE) $(BINDIR)/cduce_mktop
	rm -f $(MANDIR)/man1/cduce.1
	rm -Rf $(DOCDIR)
	ocamlfind remove cduce

help:
	@echo "GOALS"
	@echo "  cduce : compiles the CDuce command line interpreter"
	@echo "  dtd2cduce: compiles the dtd2cduce tools"
	@echo "  doc : build the documentation"
	@echo "  all : build binaries and libraries"
	@echo "  install : install binaries, man pages, documentation"
	@echo "  clean :  back to the starting point"
	@echo "  uninstall : remove installed files"

# Source directories 

DIRS = misc parser schema typing types compile runtime driver query ocamliface
CLEAN_DIRS = $(DIRS) tools tests

# Objects to build

OBJECTS = \
 driver/config.cmo misc/stats.cmo misc/custom.cmo misc/encodings.cmo \
 misc/upool.cmo misc/pretty.cmo misc/ns.cmo misc/imap.cmo misc/html.cmo \
 \
 types/compunit.cmo types/sortedList.cmo misc/bool.cmo types/ident.cmo \
 types/intervals.cmo types/chars.cmo types/atoms.cmo types/normal.cmo \
 types/types.cmo compile/auto_pat.cmo \
 types/sequence.cmo types/builtin_defs.cmo \
 \
 runtime/value.cmo \
 \
 schema/schema_pcre.cmo schema/schema_types.cmo \
 schema/schema_xml.cmo schema/schema_common.cmo \
 schema/schema_builtin.cmo schema/schema_validator.cmo \
 \
 types/patterns.cmo \
 compile/print_auto.cmo \
 \
 compile/lambda.cmo \
 runtime/run_dispatch.cmo runtime/explain.cmo runtime/eval.cmo \
 \
 parser/location.cmo  parser/url.cmo \
 parser/ulexer.cmo parser/ast.cmo parser/parser.cmo \
 \
 typing/typed.cmo typing/typepat.cmo types/externals.cmo typing/typer.cmo \
 compile/compile.cmo \
 \
 schema/schema_parser.cmo schema/schema_converter.cmo \
 runtime/load_xml.cmo runtime/print_xml.cmo compile/operators.cmo types/builtin.cmo \
 driver/librarian.cmo types/sample.cmo \
 driver/cduce.cmo \
 \
 runtime/system.cmo query/query_aggregates.cmo

schema/schema_types.ml: schema/schema_types.mli
	cp $^ $@
compile/auto_pat.ml: compile/auto_pat.mli
	cp $^ $@
compile/lambda.ml: compile/lambda.mli
	cp $^ $@

ML_INTERFACE_OBJS = \
  ocamliface/caml_cduce.cmo \
  ocamliface/mltypes.cmo ocamliface/mlstub.cmo

ifneq ($(ML_INTERFACE), false)
  OBJECTS += $(ML_INTERFACE_OBJS)
endif

ifneq ($(CURL), false)
  OBJECTS += parser/cduce_curl.cmo
  PACKAGES += curl
endif
ifneq ($(NETCLIENT), false)
  OBJECTS += parser/cduce_netclient.cmo
  PACKAGES += netclient
endif

PXP_PACK=pxp-engine pxp-lex-iso88591
ifeq ($(PXP_WLEX), true)
  PXP_PACK += pxp-wlex-utf8
else
  PXP_PACK += pxp-lex-utf8
endif

ifeq ($(PXP),true)
  OBJECTS += runtime/cduce_pxp.cmo
  PACKAGES += $(PXP_PACK)
  ALL_TARGET += dtd2cduce
  INSTALL_BINARIES += dtd2cduce
endif
ifeq ($(EXPAT), true)
  OBJECTS += runtime/cduce_expat.cmo
  PACKAGES += expat
endif


all: $(ALL_TARGET)

OBJECTS += driver/run.cmo
CDUCE = $(OBJECTS) driver/start.cmo 

ALL_OBJECTS = $(OBJECTS) \
 driver/start.cmo driver/examples.cmo \
 driver/webiface.cmo driver/evaluator.cmo \
 tools/validate.cmo \
 $(ML_INTERFACE_OBJS) parser/cduce_curl.cmo \
 parser/cduce_netclient.cmo \
 runtime/cduce_expat.cmo runtime/cduce_pxp.cmo

ALL_INTERFACES = schema/schema_types.mli 

DEPEND = $(ALL_OBJECTS:.cmo=.ml) $(ALL_OBJECTS:.cmo=.mli) $(ALL_INTERFACES)

INCLUDES = $(DIRS:%=-I %) -I +camlp4

cduce: $(CDUCE:.cmo=.$(EXTENSION))
	@echo "Build $@"
	$(HIDE)$(LINK) $(INCLUDES) -o $@ $^ $(EXTRA_LINK_OPTS)

cduce_packed.ml: $(CDUCE:.cmo=.ml)
	rm -f cduce_packed.ml
	ocaml tools/pack.ml $^ > cduce_packed.ml

cduce_packed: cduce_packed.$(EXTENSION)
	$(LINK) $(INCLUDES) -o $@ $^ $(EXTRA_LINK_OPTS)


cduce_lib.$(EXTENSION_LIB): $(OBJECTS:.cmo=.$(EXTENSION))
	@echo "Pack cduce_lib.$(EXTENSION)"
	$(HIDE)$(COMPILE) -o cduce_lib.$(EXTENSION) $(INCLUDES) -pack $^
	@echo "Build $@"
	$(HIDE)$(COMPILE) -a -o $@ cduce_lib.$(EXTENSION)

dtd2cduce: tools/dtd2cduce.ml
	@echo "Build $@"
	$(HIDE)$(OCAMLFIND) $(CAML) -o $@ -package "$(PXP_PACK) cgi" -linkpkg $^

.PHONY: compute_depend
compute_depend: $(DEPEND_OCAMLDEP)
	@echo "Computing dependencies ..."
	ocamlfind ocamldep -package "$(PACKAGES)" \
		$(INCLUDES) $(SYNTAX_PARSER) $(DEPEND) > depend
clean:
	for i in $(CLEAN_DIRS); do \
	(cd $$i; rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa *~); \
	done
	(cd ocamliface; $(MAKE) clean)
	rm -f `find . -name "*~"`
	rm -f *.cmi *.cmo *.cma *.cmx *.a *.cmxa *.o *~ META
	rm -f cduce$(EXE) ocamlprof.dump
	rm -f dtd2cduce$(EXE) webiface$(EXE) evaluator$(EXE)
	rm -Rf prepro package
	rm -f web/www/*.html web/*~
	rm -f web/*.cdo
	rm -f configure.log
	rm -rf web/doc
	rm -f META

distclean: clean
	rm -f Makefile.conf

ocamliface/mltypes.$(EXTENSION): ocamliface/caml_cduce.$(EXTENSION)

$(ALL_OBJECTS:.cmo=.$(EXTENSION)): misc/q_symbol.cmo
$(ALL_INTERFACES): misc/q_symbol.cmo

.SUFFIXES: .ml .mli .cmo .cmi .cmx

misc/q_symbol.cmo: misc/q_symbol.ml
	@echo "Build $@"		  
	$(HIDE)$(CAMLC) -c -pp 'camlp4o pa_extend.cmo q_MLast.cmo' $<

.ml.cmo:
	@echo "Build $@"
	$(HIDE)$(CAMLC) -c $(INCLUDES) $(SYNTAX_PARSER) $<

.ml.cmx:
	@echo "Build $@"
	$(HIDE)$(CAMLOPT) $(FORPACKOPT) -c $(SYNTAX_PARSER) $(INCLUDES) $<

.mli.cmi:
	@echo "Build $@"
	$(HIDE)$(CAMLC) -c $(SYNTAX_PARSER) $(INCLUDES) $<

include depend

# Documentation

doc: cduce web/site.cdo
	mkdir -p web/doc
	(cd web; ../cduce --run site.cdo --arg doc.xml -o doc)

web/site.cdo: cduce web/xhtml.cdo web/site.cd
	./cduce -I web/ --compile web/site.cd

web/xhtml.cdo: cduce web/xhtml.cd
	./cduce -I web/ --compile web/xhtml.cd

install_doc: doc
	$(HIDE)mkdir -p $(MANDIR)/man1
	$(HIDE)(cd doc; $(MAKE) install INSTALL="$(INSTALL)" MANDIR=$(MANDIR) HIDE=$(HIDE))
	mkdir -p $(DOCDIR)/img
	cp web/doc/*.html $(DOCDIR)/
	cp CHANGES INSTALL INSTALL.WIN32 README AUTHORS LICENSE $(DOCDIR)/
	cp web/img/left.gif web/img/right.gif $(DOCDIR)/img


### Pack OCaml modules for the CDuce/OCaml interface


ocamliface/caml_cduce.cmo:
	@cd ocamliface; \
	$(MAKE) caml_cduce.cmo

ocamliface/caml_cduce.cmx:
	@cd ocamliface; \
	$(MAKE) caml_cduce.cmx