]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/helena/Makefile.common
refactoring ...
[helm.git] / helm / software / helena / Makefile.common
diff --git a/helm/software/helena/Makefile.common b/helm/software/helena/Makefile.common
new file mode 100644 (file)
index 0000000..80019a8
--- /dev/null
@@ -0,0 +1,102 @@
+H=@
+ifeq ($(origin OCAMLPATH), undefined)
+   OCAMLFIND = OCAMLPATH=$(HOME)/svn/software/components/METAS ocamlfind
+else
+   OCAMLFIND = ocamlfind
+endif
+
+RELISE = $(MAIN:%=%_$(shell cat MakeVersion))
+
+LDDLURL = http://lambda-delta.info/static/lddl
+LDDLDIR = mowgli:/projects/helm/public_html/lambda-delta/static/lddl
+DOWNDIR = mowgli:/projects/helm/public_html/lambda-delta/download
+XMLDIR  = mowgli:/projects/helm/public_html/lambda-delta/xml
+LOCALLDDLDIR = $(HOME)/public_html/lddl
+
+DIRECTORIES = $(addprefix $(SRC)/,$(shell cat $(SRC)/Make))
+
+INCLUDES = $(DIRECTORIES:%=-I %) 
+
+OCAMLDEP  = $(OCAMLFIND) ocamldep -native $(INCLUDES)
+OCAMLOPT  = $(OCAMLFIND) opt $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
+OCAMLLEX  = ocamllex.opt
+OCAMLYACC = ocamlyacc -v
+XMLLINT   = xmllint --noout
+XSLT      = xsltproc
+TAR       = tar -czf etc/$(MAIN:%=%.tgz)
+
+define DIR_TEMPLATE
+   MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make))
+endef
+
+define MOD_TEMPLATE
+   SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)  
+   CMXS    += $(1).cmx
+   CLEAN   += $(1).cmi $(1).cmx $(1).o 
+   CLEAN   += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
+   CLEAN   += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
+   KEEP    += $$(if $$(wildcard $(1).mly),$(1).mly,\
+               $$(if $$(wildcard $(1).mll),$(1).mll,\
+               $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\
+               )\
+             )
+endef
+
+define INCLUDE_TEMPLATE
+   ifeq ($(MAKECMDGOALS), $(1))
+      include .depend.opt
+   endif
+endef
+
+$(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
+$(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
+
+OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
+CLEAN += $(MAIN).opt
+
+all opt: .depend.opt
+       @$(MAKE) --no-print-directory $(MAIN).opt
+
+$(MAIN).opt: $(OBJECTS)
+       @echo "  OCAMLOPT -o $(MAIN).opt"
+       $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
+
+.depend.opt: $(SOURCES) 
+       @echo "  OCAMLDEP -native"
+       $(H)$(OCAMLDEP) $^ > .depend.opt
+
+clean:
+       @echo "  CLEAN . $(SRC)"
+       $(H)find -name "*~" | xargs $(RM) $(CLEAN)
+
+lint-xml: $(XMLS)
+       @echo XMLLINT --valid
+       $(H)$(XMLLINT) --valid $^ 
+
+relise: clean
+       @echo "  RELISE $(RELISE)"
+       $(H)mkdir -p $(RELISE)
+       $(H)$(foreach FILE, $(shell cat Make), cp --parents $(FILE) $(RELISE);)
+       $(H)tar -czf etc/$(RELISE).tar.gz $(RELISE)
+       $(H)scp etc/$(RELISE).tar.gz $(DOWNDIR)
+
+tgz: clean
+       @echo "  TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" 
+       $(H)find -name "Make*" | xargs $(TAR) $(KEEP)
+
+%.ml %.mli: %.mly
+       @echo "  OCAMLYACC $<"
+       $(H)$(OCAMLYACC) $<
+%.ml: %.mll
+       @echo "  OCAMLLEX $<"
+       $(H)$(OCAMLLEX) $<
+%.cmi: %.mli
+       @echo "  OCAMLOPT $<"
+       $(H)$(OCAMLOPT) -c $<
+%.cmx: %.ml
+       @echo "  OCAMLOPT $<"
+       $(H)$(OCAMLOPT) -c $<
+
+TAGS += $(MAIN).opt
+
+$(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))