3 STATIC = http://helm.cs.unibo.it/lambda-delta/static
5 DIRECTORIES = $(shell cat Make)
7 INCLUDES = $(DIRECTORIES:%=-I %)
9 OCAMLDEP = ocamlfind ocamldep -native $(INCLUDES)
10 OCAMLOPT = ocamlfind opt -linkpkg -package "$(REQUIRES)" $(INCLUDES)
11 OCAMLLEX = ocamllex.opt
12 OCAMLYACC = ocamlyacc -v
13 XMLLINT = xmllint --noout
15 TAR = tar -czf $(MAIN:%=%.tgz)
18 MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make))
22 SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)
24 CLEAN += $(1).cmi $(1).cmx $(1).o
25 CLEAN += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
26 CLEAN += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
27 KEEP += $$(if $$(wildcard $(1).mly),$(1).mly,\
28 $$(if $$(wildcard $(1).mll),$(1).mll,\
29 $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\
34 define INCLUDE_TEMPLATE
35 ifeq ($(MAKECMDGOALS), $(1))
40 $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
41 $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
43 OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
47 @$(MAKE) --no-print-directory $(MAIN).opt
49 $(MAIN).opt: $(OBJECTS)
50 @echo " OCAMLOPT -o $(MAIN).opt"
51 $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
53 .depend.opt: $(SOURCES)
54 @echo " OCAMLDEP -native"
55 $(H)$(OCAMLDEP) $^ > .depend.opt
58 @echo " CLEAN . $(DIRECTORIES)"
59 $(H)find -name "*~" | xargs $(RM) $(CLEAN)
63 $(H)$(XMLLINT) --valid $^
66 @echo " TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)"
67 $(H)find -name "Make*" | xargs $(TAR) $(KEEP)
84 $(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))