H=@ LDDLURL = http://helm.cs.unibo.it/lambda-delta/static/lddl LDDLDIR = /projects/helm/public_html/lambda-delta/static/lddl DOWNDIR = /projects/helm/public_html/lambda-delta/download DIRECTORIES = $(shell cat Make) INCLUDES = $(DIRECTORIES:%=-I %) OCAMLDEP = ocamlfind ocamldep -native $(INCLUDES) OCAMLOPT = ocamlfind opt -linkpkg -package "$(REQUIRES)" $(INCLUDES) OCAMLLEX = ocamllex.opt OCAMLYACC = ocamlyacc -v XMLLINT = xmllint --noout XSLT = xsltproc TAR = tar -czf etc/$(MAIN:%=%.tgz) define DIR_TEMPLATE MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make)) endef define MOD_TEMPLATE SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml) CMXS += $(1).cmx CLEAN += $(1).cmi $(1).cmx $(1).o CLEAN += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,) CLEAN += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,) KEEP += $$(if $$(wildcard $(1).mly),$(1).mly,\ $$(if $$(wildcard $(1).mll),$(1).mll,\ $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\ )\ ) endef define INCLUDE_TEMPLATE ifeq ($(MAKECMDGOALS), $(1)) include .depend.opt endif endef $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR)))) $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD)))) OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi)) CLEAN += $(MAIN).opt all opt: .depend.opt @$(MAKE) --no-print-directory $(MAIN).opt $(MAIN).opt: $(OBJECTS) @echo " OCAMLOPT -o $(MAIN).opt" $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS) .depend.opt: $(SOURCES) @echo " OCAMLDEP -native" $(H)$(OCAMLDEP) $^ > .depend.opt clean: @echo " CLEAN . $(DIRECTORIES)" $(H)find -name "*~" | xargs $(RM) $(CLEAN) lint: $(XMLS) @echo XMLLINT --valid $(H)$(XMLLINT) --valid $^ tgz: clean @echo " TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" $(H)find -name "Make*" | xargs $(TAR) $(KEEP) %.ml %.mli: %.mly @echo " OCAMLYACC $<" $(H)$(OCAMLYACC) $< %.ml: %.mll @echo " OCAMLLEX $<" $(H)$(OCAMLLEX) $< %.cmi: %.mli @echo " OCAMLOPT $<" $(H)$(OCAMLOPT) -c $< %.cmx: %.ml @echo " OCAMLOPT $<" $(H)$(OCAMLOPT) -c $< TAGS += $(MAIN).opt $(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))