H=@ ifeq ($(origin OCAMLPATH), undefined) OCAMLFIND = OCAMLPATH=$(HOME)/svn/claudio/components/METAS ocamlfind else OCAMLFIND = ocamlfind endif RELISE = $(MAIN:%=%_$(shell cat MakeVersion)) DOWNDIR = $(HOME)/svn/helm_stable/www/lambdadelta/download DIRECTORIES = $(addprefix $(SRC)/,$(shell cat $(SRC)/Make)) INCLUDES = $(DIRECTORIES:%=-I %) OCAMLDEP = $(OCAMLFIND) ocamldep -native $(INCLUDES) OCAMLOPT = $(OCAMLFIND) opt $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES) OCAMLLEX = ocamllex.opt OCAMLYACC = ocamlyacc -v 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 . $(SRC)" $(H)find -name "*~" | xargs $(RM) $(CLEAN) relise: clean @echo " RELISE $(RELISE)" $(H)mkdir -p $(RELISE) $(H)$(foreach FILE, $(shell cat Make), cp --parents $(FILE) $(RELISE);) $(H)tar -czf etc/$(RELISE).tar.gz $(RELISE) $(H)scp etc/$(RELISE).tar.gz $(DOWNDIR) tgz: clean @echo " TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" $(H)find -name "Make*" | xargs $(TAR) $(KEEP) etc: @echo " MKDIR etc" $(H)mkdir etc %.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 += all opt $(MAIN).opt $(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))