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