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