]> matita.cs.unibo.it Git - helm.git/blob - helm/software/lambda-delta/Makefile.common
Additional contribs.
[helm.git] / helm / software / lambda-delta / Makefile.common
1 H=@
2
3 LDDLURL = http://helm.cs.unibo.it/lambda-delta/static/lddl
4 LDDLDIR = /projects/helm/public_html/lambda-delta/static/lddl
5 DOWNDIR = /projects/helm/public_html/lambda-delta/download
6
7 DIRECTORIES = $(shell cat Make)
8
9 INCLUDES = $(DIRECTORIES:%=-I %) 
10
11 OCAMLDEP  = ocamlfind ocamldep -native $(INCLUDES)
12 OCAMLOPT  = ocamlfind opt -linkpkg -package "$(REQUIRES)" $(INCLUDES)
13 OCAMLLEX  = ocamllex.opt
14 OCAMLYACC = ocamlyacc -v
15 XMLLINT   = xmllint --noout
16 XSLT      = xsltproc
17 TAR       = tar -czf etc/$(MAIN:%=%.tgz)
18
19 define DIR_TEMPLATE
20    MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make))
21 endef
22
23 define MOD_TEMPLATE
24    SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)  
25    CMXS    += $(1).cmx
26    CLEAN   += $(1).cmi $(1).cmx $(1).o 
27    CLEAN   += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
28    CLEAN   += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
29    KEEP    += $$(if $$(wildcard $(1).mly),$(1).mly,\
30                $$(if $$(wildcard $(1).mll),$(1).mll,\
31                 $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\
32                )\
33               )
34 endef
35
36 define INCLUDE_TEMPLATE
37    ifeq ($(MAKECMDGOALS), $(1))
38       include .depend.opt
39    endif
40 endef
41
42 $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
43 $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
44
45 OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
46 CLEAN += $(MAIN).opt
47
48 all opt: .depend.opt
49         @$(MAKE) --no-print-directory $(MAIN).opt
50
51 $(MAIN).opt: $(OBJECTS)
52         @echo "  OCAMLOPT -o $(MAIN).opt"
53         $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
54
55 .depend.opt: $(SOURCES) 
56         @echo "  OCAMLDEP -native"
57         $(H)$(OCAMLDEP) $^ > .depend.opt
58
59 clean:
60         @echo "  CLEAN . $(DIRECTORIES)"
61         $(H)find -name "*~" | xargs $(RM) $(CLEAN)
62
63 lint: $(XMLS)
64         @echo XMLLINT --valid
65         $(H)$(XMLLINT) --valid $^ 
66
67 tgz: clean
68         @echo "  TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" 
69         $(H)find -name "Make*" | xargs $(TAR) $(KEEP)
70
71 %.ml %.mli: %.mly
72         @echo "  OCAMLYACC $<"
73         $(H)$(OCAMLYACC) $<
74 %.ml: %.mll
75         @echo "  OCAMLLEX $<"
76         $(H)$(OCAMLLEX) $<
77 %.cmi: %.mli
78         @echo "  OCAMLOPT $<"
79         $(H)$(OCAMLOPT) -c $<
80 %.cmx: %.ml
81         @echo "  OCAMLOPT $<"
82         $(H)$(OCAMLOPT) -c $<
83
84 TAGS += $(MAIN).opt
85
86 $(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))