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