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