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
|