Makefile 4.81 KB
Newer Older
1 2 3
NATIVE = true
PROFILE = false
PXP_WLEX = false
4

5 6 7 8 9 10
PACKAGES = -package "pxp-engine pxp-lex-iso88591 wlexing camlp4 num cgi"
ifeq ($(PXP_WLEX), true)
  PACKAGES += -package pxp-wlex-utf8
else
  PACKAGES += -package pxp-lex-utf8
endif
11

12
SYNTAX = camlp4o pa_extend.cmo
13

14 15
VERSION = 0.0.9 (alpha)

16 17 18 19 20 21 22 23 24 25
ifeq ($(PROFILE), true)
	CAMLC_P = ocamlcp -p a
	CAMLOPT_P = ocamlopt -p
	SYNTAX_PARSER = 
else
	CAMLC_P = ocamlc
	CAMLOPT_P = ocamlopt
	SYNTAX_PARSER = -pp '$(SYNTAX)'
endif

26 27 28
OPT = -warn-error A
CAMLC = ocamlfind $(CAMLC_P) $(OPT) $(PACKAGES)
CAMLOPT = ocamlfind $(CAMLOPT_P) $(OPT) $(PACKAGES)
29 30 31 32 33 34 35 36 37 38

ifeq ($(NATIVE), true)
	EXTENSION = cmx
	LINK = $(CAMLOPT) -linkpkg gramlib.cmxa
else
	EXTENSION = cmo
	LINK = $(CAMLC) -custom -linkpkg gramlib.cma
endif

all: cduce dtd2cduce local_website
39

40
# Source directories 
41

42 43
DIRS = misc parser typing types runtime driver
CLEAN_DIRS = $(DIRS) tools tests
44

45
# Objects to build
46

47
OBJECTS = \
48
 misc/cduce_config.cmo \
49 50 51 52 53
 misc/state.cmo misc/pool.cmo misc/encodings.cmo misc/bool.cmo \
 misc/pretty.cmo \
 \
 types/sortedList.cmo types/boolean.cmo types/ident.cmo \
 types/intervals.cmo types/chars.cmo types/atoms.cmo types/normal.cmo \
54
 types/types.cmo types/patterns.cmo types/sequence.cmo \
55
 types/sample.cmo \
56 57 58 59 60 61 62 63
 \
 parser/location.cmo parser/wlexer.cmo parser/ast.cmo parser/parser.cmo \
 \
 typing/typed.cmo typing/typer.cmo \
 \
 runtime/value.cmo runtime/load_xml.cmo runtime/run_dispatch.cmo \
 runtime/print_xml.cmo runtime/eval.cmo \
 \
64
 types/builtin.cmo driver/cduce.cmo
65

66
CDUCE = $(OBJECTS) driver/run.cmo
67
WEBIFACE  = $(OBJECTS) driver/examples.cmo driver/webiface.cmo
68
DTD2CDUCE = tools/dtd2cduce.cmo
69

70 71 72 73
DEPEND = $(DIRS:=/*.ml) $(DIRS:=/*.mli)
INCLUDES = $(DIRS:%=-I %)

PREPRO = $(SYNTAX) pr_o.cmo
74

75 76 77 78 79 80 81 82 83
misc/cduce_config.cmo: misc/cduce_config.ml
	$(CAMLC) -c $(SYNTAX_PARSER) $(INCLUDES) $<
	rm -f misc/cduce_config.ml

misc/cduce_config.cmx: misc/cduce_config.ml
	$(CAMLOPT) -c $(SYNTAX_PARSER) $(INCLUDES) $<
	rm -f misc/cduce_config.ml

misc/cduce_config.ml:
84
	sed -e 's|%%VERSION%%|$(VERSION)|' \
85
            -e 's|%%BUILD_DATE%%|$(shell date +%Y-%m-%d)|' \
86 87
            -e 's|%%NATIVE%%|$(NATIVE)|' \
            misc/cduce_config.mlp > misc/cduce_config.ml
88 89 90 91


cduce: $(CDUCE:.cmo=.$(EXTENSION))
	$(LINK) $(INCLUDES) -o $@ $^
92

93 94
webiface: $(WEBIFACE:.cmo=.$(EXTENSION))
	$(LINK) -o $@ $^
95

96 97
dtd2cduce: $(DTD2CDUCE:.cmo=.$(EXTENSION))
	$(LINK) -o $@ $^
98

99
.PHONY: compute_depend
100 101
compute_depend:
	@echo "Computing dependencies ..."
102
	ocamldep $(INCLUDES) $(SYNTAX_PARSER) $(DEPEND) > depend
103

104 105 106
parser/wlexer.ml: parser/wlexer.mll
	wlex parser/wlexer.mll

107
clean:
108
	for i in $(CLEAN_DIRS); do \
109 110
	(cd $$i; rm -f *.cmi *.cmo *.cma *.cmx *.o *~); \
	done
111
	rm -f `find -name "*~"`
112
	rm -f *.cmi *.cmo *.cma *.cmx *.a *.cmxa *.o *~
113
	rm -f cduce ocamlprof.dump
114
	rm -f dtd2cduce pool webiface
115
	rm -Rf prepro package
116
	rm -f web/www/*.php web/www/*.html web/*~
117

118 119 120 121

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

.ml.cmo:
122
	$(CAMLC) -c $(SYNTAX_PARSER) $(INCLUDES) $<
123

124
.ml.cmx:
125
	$(CAMLOPT) -c $(SYNTAX_PARSER) $(INCLUDES) $<
126 127

.mli.cmi:
128
	$(CAMLC) -c $(SYNTAX_PARSER) $(INCLUDES) $<
129

130
include depend
131

132
# CDuce-generated files
133

134
driver/examples.ml: cduce web/examples/build.cd web/examples/examples.xml
135
	(cd web/examples; ../../cduce --quiet build.cd)
136

137
web/files: cduce web/site.cd
138
	(cd web; ../cduce --quiet site.cd --arg -php site.xml)
139

140
# Packaging
141 142 143 144 145 146 147

write_header:
	headache -h header $(DEPEND)

remove_header:
	headache -r $(DEPEND)

148 149
# For development

150 151
pull: tools/pull.$(EXTENSION)
	$(LINK) -o $@ $^
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

profile:
	rm -Rf prepro
	mkdir prepro
	for i in $(DIRS); do \
	mkdir prepro/$$i; \
	for j in $$i/*.ml $$i/*.mli; do \
	if [ -f "$$j" ]; then \
	 echo $$j; \
	 $(PREPRO) $$j -o prepro/$$j; \
	fi; \
	done; \
	done
	cp parser/wlexer.mll prepro/parser/
	cp Makefile depend prepro/
167
	(cd prepro;  make cduce PROFILE=true SYNTAX_PARSER= NATIVE=false)
168

169
# Site-specific installation
170 171

cedre_build:
172
	rsh cedre ". .env; cd IMPLEM/CDUCE; make webiface; make web/files"
173
install_web:
174
	scp web/www/*.php web/cduce.css cduce@iris:public_html/
175
	scp webiface cduce@iris:cgi-bin/cduce
176 177
	ssh cduce@iris "chmod +s cgi-bin/cduce"

178

179 180 181 182 183 184 185 186
#
# Customize the following variables to match the settings
# of your local web server
#
WEB_PREFIX = /var/www
CGI_DIR = $(WEB_PREFIX)/cgi-bin
CDUCE_HTML_DIR = $(WEB_PREFIX)/html

187 188 189 190 191 192 193
install_web_local:web/files webiface
	cp  web/www/*.php web/cduce.css  $(CDUCE_HTML_DIR)/
	cp webiface $(CGI_DIR)/
	if test ! -d "$(CDUCE_HTML_DIR)/img" ; then \
	  mkdir $(CDUCE_HTML_DIR)/img; \
	fi;  
	cp web/img/*.*  $(CDUCE_HTML_DIR)/img
194

195
website: web/files
196
	scp web/www/*.php web/cduce.css cduce@iris.ens.fr:public_html/
197

198
local_website: cduce
199
	(cd web; ../cduce --quiet site.cd --arg site.xml)
200

201 202
# Distribution

203 204
DISTRIB = $(DIRS) tools web depend INSTALL CHANGES LICENSE README Makefile

205 206 207 208 209
.PHONY: package
package:
	rm -Rf package
	mkdir package
	cp -R $(DISTRIB) package/
210
	(cd package; headache -h ../header $(DEPEND); rm -Rf `find -name "CVS"`)
211