--- Makefile 2007/07/10 17:20:13 260 +++ Makefile 2007/07/10 19:00:04 1530 @@ -1,126 +1,13 @@ -# Source directories +include Makefile.distrib -DIRS = misc parser typing types runtime driver toplevel -CLEAN_DIRS = $(DIRS) tools tests +# For development -# Objects to build +pull: tools/pull.$(EXTENSION) + $(LINK) -o $@ $^ -MISC = misc/state.cmo misc/pool.cmo misc/encodings.cmo +PREPRO = camlp4o -I `ocamlfind query ulex` pa_ulex.cma pr_o.cmo $(SYNTAX) -sep "\n" -PARSER = parser/lexer.cmo parser/location.cmo \ - parser/wlexer.cmo \ - parser/ast.cmo parser/parser.cmo - -TYPING = typing/typed.cmo typing/typer.cmo - -TYPES = \ - types/sortedList.cmo types/sortedMap.cmo types/boolean.cmo \ - types/ident.cmo \ - types/intervals.cmo types/chars.cmo types/atoms.cmo \ - types/normal.cmo \ - types/types.cmo \ - types/patterns.cmo \ - types/sequence.cmo \ - types/builtin.cmo - -RUNTIME = runtime/value.cmo \ - runtime/load_xml.cmo runtime/run_dispatch.cmo \ - runtime/print_xml.cmo \ - runtime/eval.cmo - -DRIVER = driver/cduce.cmo - -OBJECTS = $(MISC) $(TYPES) $(PARSER) $(TYPING) $(RUNTIME) - -CDUCE = $(OBJECTS) $(DRIVER) driver/run.cmo -WEBIFACE = $(OBJECTS) $(DRIVER) driver/examples.cmo driver/webiface.cmo -TOPLEVEL = $(OBJECTS) toplevel/toploop.cmo - -XOBJECTS = $(OBJECTS:.cmo=.cmx) -XCDUCE = $(CDUCE:.cmo=.cmx) - - - -DEBUG = -g -PACKAGES = pxp-engine,pxp-lex-iso88591,wlexing,camlp4,num,cgi -OCAMLCP = ocamlc -OCAMLC = ocamlfind $(OCAMLCP) -package $(PACKAGES) -OCAMLOPT = ocamlfind ocamlopt -package $(PACKAGES) -# extra options: -# -inline 25 -# -p (profiling) -# -noassert - -DEPEND = $(DIRS:=/*.ml) $(DIRS:=/*.mli) -INCLUDES = $(DIRS:%=-I %) - -SYNTAX = camlp4o pa_extend.cmo -SYNTAX_PARSER = -pp '$(SYNTAX)' -PREPRO = $(SYNTAX) pr_o.cmo - -all.cma: $(OBJECTS) - $(OCAMLC) $(DEBUG) -o $@ -linkpkg gramlib.cma -a $(OBJECTS) - -all.cmxa: $(XOBJECTS) - $(OCAMLOPT) -a -o $@ $(XOBJECTS) - - -OCAMLDEFUN = /home/frisch/defun/bin/ocamldefun -DEFUN_FILES = $(OBJECTS:%.cmo=%) - -build_defun: - for i in $(DEFUN_FILES); do \ - $(OCAMLDEFUN) $(DIRS:%=-I defun/%) -p -d defun $$i.mli $$i.ml; \ - $(OCAMLDEFUN) $(DIRS:%=-I defun/%) -p -d defun $$i.ml; \ - done - -memento.html: cduce tests/memento.cd tests/memento.xml - ./cduce -quiet tests/memento.cd - -cduce: $(CDUCE) - $(OCAMLC) $(DEBUG) -linkpkg -o $@ gramlib.cma $(CDUCE) - -toplevel.out: $(TOPLEVEL) - $(OCAMLC) $(DEBUG) -linkpkg -o $@ gramlib.cma $(TOPLEVEL) - -webiface: $(WEBIFACE) - $(OCAMLC) $(DEBUG) -linkpkg -o $@ gramlib.cma $(WEBIFACE) - - -dtd2cduce: tools/dtd2cduce.cmo - $(OCAMLC) $(DEBUG) -linkpkg -o $@ $< - -pull: tools/pull.cmo - $(OCAMLC) $(DEBUG) -linkpkg -o $@ $< - -cduce.opt: $(XCDUCE) - $(OCAMLOPT) -linkpkg -o $@ gramlib.cmxa $(XCDUCE) - -compute_depend: - @echo "Computing dependencies ..." - ocamldep $(INCLUDES) $(SYNTAX_PARSER) $(DEPEND) > depend - -parser/wlexer.ml: parser/wlexer.mll - wlex parser/wlexer.mll - -run_top: all.cma - ledit ocaml $(INCLUDES) `ocamlfind use pxp` all.cma - -clean: - for i in $(CLEAN_DIRS); do \ - (cd $$i; rm -f *.cmi *.cmo *.cma *.cmx *.o *~); \ - done - rm -f parser/wlexer.ml - rm -f *.cmi *.cmo *.cma *.cmx *.a *.cmxa *.o *~ - rm -f cduce cduce.opt ocamlprof.dump - rm -f dtd2cduce pool webiface - rm -Rf prepro - rm -f web/index.html - - -.SUFFIXES: .ml .mli .cmo .cmi .cmx - -profile: +profile: misc/q_symbol.cmo rm -Rf prepro mkdir prepro for i in $(DIRS); do \ @@ -132,45 +19,140 @@ fi; \ done; \ done - cp parser/wlexer.mll prepro/parser/ - cp Makefile depend prepro/ - (cd prepro; make cduce OCAMLCP="ocamlcp -p a" SYNTAX_PARSER=) - -.ml.cmo: - $(OCAMLC) $(DEBUG) -c $(SYNTAX_PARSER) $(INCLUDES) $< - -.ml.cmx: - $(OCAMLOPT) -c $(SYNTAX_PARSER) $(INCLUDES) $< - -.mli.cmi: - $(OCAMLC) $(DEBUG) -c $(SYNTAX_PARSER) $(INCLUDES) $< + cp Makefile.distrib Makefile Makefile.conf prepro/ + (cd prepro; \ + touch depend; \ + $(MAKE) compute_depend PROFILE=true SYNTAX_PARSER= ; \ + $(MAKE) cduce PROFILE=true SYNTAX_PARSER= NATIVE=false) -# FORTPATH = /users/formel8/frisch/solaris/fort/fort -#FORTPATH = /home/frisch/fort -#FORTBIN = $(FORTPATH)/fort -#FORTLIB = $(FORTPATH) -test: all.cma - fort all.cma $(INCLUDES) tests/test_fort.ml - -include depend - - -driver/examples.ml: cduce tests/web.cd tests/examples.xml - ./cduce -quiet tests/web.cd +# Site-specific installation +charme_build: + rsh charme ". .env; cd IMPLEM/CDUCE; $(MAKE) webiface webpages" + scp CHANGES INSTALL INSTALL.WIN32 web/www/*.html web/cduce.css cduce@iris:public_html/ + scp webiface cduce@iris:cgi-bin/cduce + +install_web_distant: + $(MAKE) webpages + scp CHANGES INSTALL INSTALL.WIN32 web/www/*.html web/demo.js web/cduce.css cduce@iris.ens.fr:public_html/ + +SCRIPT = +INCLUDES_DEB = $(INCLUDES) $(shell ocamlfind query -i-format -recursive $(PACKAGES)) +DEBUGGER = ocamldebug +debug: + ledit $(DEBUGGER) $(INCLUDES_DEB) ./cduce $(SCRIPT) + +# Packaging + +DISTRIB = $(DIRS) cduce.spec tools depend INSTALL INSTALL.WIN32 CHANGES \ + LICENSE README AUTHORS Makefile.conf.template configure configure.ml doc + +DISTRIB_DOC = doc.xml memento.xml tutorial.xml manual.xml tutorial manual \ + xhtml.cd xhtml-categ.cd xhtml-strict.cd site.cd + +PACKAGE = cduce-$(VERSION) +.PHONY: package +package: clean + rm -Rf $(PACKAGE) + mkdir $(PACKAGE) + cp -R $(DISTRIB) $(PACKAGE)/ + cp Makefile.distrib $(PACKAGE)/Makefile + mkdir -p $(PACKAGE)/web/img + (cd web; cp -R $(DISTRIB_DOC) ../$(PACKAGE)/web; \ + cd img; cp left.gif right.gif ../../$(PACKAGE)/web/img) + (cd $(PACKAGE); \ + rm -f types/IDEAS; \ + for F in $(DEPEND); do headache -h ../header $$F; done) + tar czf $(PACKAGE).tar.gz --exclude CVS --exclude ".#*" $(PACKAGE) + rm -Rf $(PACKAGE) + +#cvs_snapshot: +# $(MAKE) package VERSION=cvs`date +%Y%m%d` + +MSTONE=2 +cvs_snapshot: + (cd /tmp; \ + rm -Rf cduce; \ + cvs -z3 -d ":pserver:anonymous@cvs.cduce.org:/cvsroot" co cduce; \ + tar czf cduce-cvs$(MSTONE).tar.gz cduce; \ + rm -Rf cduce; \ + scp cduce-cvs$(MSTONE).tar.gz cduce@iris.ens.fr:public_html/download; \ + rm -f cduce-cvs$(MSTONE).tar.gz) + +OCAML_STDLIBDIR := $(shell ocamlc -where) +.PHONY: .ocamlinit +.ocamlinit: + echo '(* AUTOMATICALLY GENERATED by Makefile: DO NOT EDIT! *)' > $@ + echo '#load "$(OCAML_STDLIBDIR)/pcre/pcre.cma";;' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/unix.cma";;' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/netstring/netstring.cma";;' >> $@ +# echo '#load "$(OCAML_STDLIBDIR)/netstring/netstring_top.cmo";;' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/pxp-engine/pxp_engine.cma";;' >> $@ +# echo '#load "$(OCAML_STDLIBDIR)/pxp-engine/pxp_top.cmo";;' *)' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/pxp-lex-iso88591/pxp_lex_iso88591.cma";;' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/pxp-lex-iso88591/pxp_lex_link_iso88591.cmo";;' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/ulex/ulexing.cma";;' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/nums.cma";;' >> $@ +# echo '#load "$(OCAML_STDLIBDIR)/num_top.cma";;' >> $@ + echo '#load "$(OCAML_STDLIBDIR)/cgi/cgi.cma";;' >> $@ + for o in $(VALIDATE_OBJECTS); do echo "prerr_endline \"Loading $$o ...\";;" >> $@; echo "#load \"$$o\";;" >> $@; done + for d in $(DIRS); do echo "#directory \"$$d\";;" >> $@; done + for p in pcre netstring pxp-engine ulex cgi; do echo "#directory \"`$(OCAMLFIND) query $$p`\";;" >> $@; done + echo "prerr_endline \"All done!\"" >> $@ + echo '(* vim: set ft=ocaml: *)' >> $@ + +CVS_DISTRIB = web CHANGES LICENSE README AUTHORS doc cduce dtd2cduce +cvs_snapshot_bin: clean + if [[ `uname` != Linux ]]; then echo "Not a Linux box!"; exit 2; fi + $(MAKE) cduce dtd2cduce NATIVE=true EXTRA_LINK_OPTS="-ccopt -static" VERSION=cvs`date +%Y%m%d` + rm -Rf cduce-cvs + mkdir cduce-cvs + cp -R $(CVS_DISTRIB) cduce-cvs + cp Makefile.binary cduce-cvs/Makefile + tar czf cduce-cvs-linux-static.tar.gz --exclude CVS cduce-cvs + rm -Rf cduce-cvs + scp cduce-cvs-linux-static.tar.gz cduce@di.ens.fr:public_html/download + +.PHONY: test +test: + $(MAKE) -C tests test + + +# Web site + +driver/examples.ml: cduce web/xhtml.cdo web/examples/build.cd web/examples/examples.xml + (cd web/examples; ../../cduce build.cd -I .. --arg examples.xml) + +webpages: cduce web/site.cdo + (cd web; ../cduce --run site.cdo --arg site.xml) + +website: webpages webiface evaluator + +install_web: website + cp web/www/*.html web/demo.js web/cduce.css $(HTML_DIR)/ + cp CHANGES INSTALL INSTALL.WIN32 $(HTML_DIR)/ + cp webiface $(CGI_DIR)/cduce + cp evaluator $(CGI_DIR)/demo_evaluator + if test ! -d "$(HTML_DIR)/img" ; then \ + mkdir $(HTML_DIR)/img; \ + fi; + cp web/img/*.* $(HTML_DIR)/img + +WEBIFACE = $(OBJECTS) driver/examples.cmo driver/webiface.cmo +EVALUATOR = $(OBJECTS) driver/evaluator.cmo + +webiface: $(WEBIFACE:.cmo=.$(EXTENSION)) + @echo "Build $@" + $(HIDE)$(LINK) -verbose $(INCLUDES) -o $@ $^ $(EXTRA_OPTS_WEBIFACE) + +evaluator: $(EVALUATOR:.cmo=.$(EXTENSION)) + @echo "Build $@" + $(HIDE)$(LINK) -verbose $(INCLUDES) -o $@ $^ $(EXTRA_OPTS_WEBIFACE) + +# webiface can be made static to be able to move it more easily +# (to compile it on a machine which is not the web server) +# Seems to be some problems with statically linking curl +# EXTRA_OPTS_WEBIFACE = -ccopt -static -web/files: cduce.opt web/site.cd - (cd web; ../cduce.opt -quiet site.cd) -# Site-specific installation -build_web: - rsh cedre ". .env; cd IMPLEM/CDUCE; make webiface memento.html" -install_web: - ssh cduce@iris "cp ~frisch/IMPLEM/CDUCE/webiface cgi-bin/cduce2; cp ~frisch/IMPLEM/CDUCE/memento.html public_html/; chmod +s cgi-bin/cduce2" -install_web_local: - ssh root@localhost "cp ~beppe/IMPLEM/CDUCE/webiface /var/www/cgi-bin/cduce; cp ~beppe/IMPLEM/CDUCE/memento.html /var/www/html/; chmod +s /var/www/cgi-bin/cduce; cp ~beppe/IMPLEM/CDUCE/web/index.html /var/www/html" - -build_website: - rsh cedre ". .env; cd IMPLEM/CDUCE; make web/files" - scp web/*.html web/cduce.css cduce@iris:public_html/