]> matita.cs.unibo.it Git - helm.git/blob - helm/software/helena/Makefile.common
1db6ea34085d002b29f9bdfcbfb1852ee5cdb71c
[helm.git] / helm / software / helena / Makefile.common
1 H=@
2 OCAMLPATH ?= /home/fguidi/svn/matita_patched/components/METAS
3 OCAMLFIND = OCAMLPATH=$(OCAMLPATH) ocamlfind
4
5 RELISE = $(MAIN:%=%_$(shell cat MakeVersion))
6
7 DOWNDIR = ../../www/lambdadelta/download
8
9 DIRECTORIES = $(addprefix $(SRC)/,$(shell cat $(SRC)/Make))
10
11 INCLUDES = $(DIRECTORIES:%=-I %) 
12
13 CAMLP = -pp "camlp5o pa_macro.cmo $(CAMLPOPTIONS)"
14
15 CAMLPOPTIONS = $(F:%=-D%)
16
17 OCAMLDEP  = $(OCAMLFIND) ocamldep $(CAMLP) $(INCLUDES)
18 OCAMLOPT  = $(OCAMLFIND) ocamlopt $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
19 OCAMLC    = $(OCAMLFIND) ocamlc $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
20 OCAMLLEX  = ocamllex.opt
21 OCAMLYACC = ocamlyacc -v
22 TAR       = tar -czf etc/$(MAIN:%=%.tgz)
23
24 CALLMAKE = $(MAKE) --no-print-directory
25
26 define DIR_TEMPLATE
27    MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make))
28 endef
29
30 define MOD_TEMPLATE
31    SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)  
32    CMXS    += $(1).cmx
33    CMOS    += $(1).cmo
34    CLEAN   += $(1).cmi $(1).cmx $(1).o $(1).cmo
35    CLEAN   += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
36    CLEAN   += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
37    KEEP    += $$(if $$(wildcard $(1).mly),$(1).mly,\
38                $$(if $$(wildcard $(1).mll),$(1).mll,\
39                 $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\
40                )\
41               )
42 endef
43
44 define INCLUDE_O_TEMPLATE
45    ifeq ($(MAKECMDGOALS), $(1))
46 %.cmi: %.mli
47         @echo "  OCAMLOPT $$<"
48         $$(H)$(OCAMLOPT) -c $$<
49
50 include .depend.opt
51    endif
52 endef
53
54 define INCLUDE_B_TEMPLATE
55    ifeq ($(MAKECMDGOALS), $(1))
56 %.cmi: %.mli
57         @echo "  OCAMLC $$<"
58         $$(H)$(OCAMLC) -c $$<
59
60 include .depend.byte
61    endif
62 endef
63
64 $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
65 $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
66 O_OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
67 B_OBJECTS = $(patsubst %.ml,%.cmo,$(SOURCES:%.mli=%.cmi))
68
69 CLEAN += $(MAIN).opt
70
71 $(MAIN).opt: $(O_OBJECTS)
72         @echo "  OCAMLOPT -o $(MAIN).opt"
73         $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
74
75 $(MAIN).byte: $(B_OBJECTS)
76         @echo "  OCAMLC -o $(MAIN).byte"
77         $(H)$(OCAMLC) -o $(MAIN).byte $(CMOS)
78
79 .depend.opt: $(SOURCES) 
80         @echo "  OCAMLDEP -native"
81         $(H)$(OCAMLDEP) -native $^ > .depend.opt
82
83 .depend.byte: $(SOURCES) 
84         @echo "  OCAMLDEP -byte"
85         $(H)$(OCAMLDEP) $^ > .depend.byte
86
87 clean:
88         @echo "  CLEAN . $(SRC)"
89         $(H)find -name "*~" | xargs $(RM) $(CLEAN)
90
91 relise: clean
92         @echo "  RELISE $(RELISE)"
93         $(H)mkdir -p $(RELISE)
94         $(H)$(foreach FILE, $(shell cat Make), cp --parents $(FILE) $(RELISE);)
95         $(H)tar -czf etc/$(RELISE).tar.gz $(RELISE)
96         $(H)scp etc/$(RELISE).tar.gz $(DOWNDIR)
97
98 tgz: clean
99         @echo "  TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" 
100         $(H)find -name "Make*" | xargs $(TAR) $(KEEP)
101
102 etc:
103         @echo "  MKDIR etc"
104         $(H)mkdir etc
105
106 %.ml %.mli: %.mly
107         @echo "  OCAMLYACC $<"
108         $(H)$(OCAMLYACC) $<
109 %.ml: %.mll
110         @echo "  OCAMLLEX $<"
111         $(H)$(OCAMLLEX) $<
112 %.cmx: %.ml
113         @echo "  OCAMLOPT $<"
114         $(H)$(OCAMLOPT) -c $<
115 %.cmo: %.ml
116         @echo "  OCAMLC $<"
117         $(H)$(OCAMLC) -c $<
118
119 O_TAGS += opt $(MAIN).opt
120
121 B_TAGS += byte $(MAIN).byte
122
123 $(foreach TAG, $(O_TAGS), $(eval $(call INCLUDE_O_TEMPLATE, $(TAG))))
124
125 $(foreach TAG, $(B_TAGS), $(eval $(call INCLUDE_B_TEMPLATE, $(TAG))))