+H=@
+
# This Makefile must be included by another one defining:
# $PACKAGE
-# $REQUIRES
# $PREDICATES
# $INTERFACE_FILES
# $IMPLEMENTATION_FILES
OCAMLDEBUGOPTIONS = -g
OCAMLARCHIVEOPTIONS =
OCAMLFIND = OCAMLPATH=$(OCAMLPATH):$$OCAMLPATH @OCAMLFIND@
+REQUIRES := $(shell $(OCAMLFIND) -query -format '%(requires)' helm-$(PACKAGE))
OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLDEBUGOPTIONS) $(OCAMLOPTIONS) $(PREPROCOPTIONS)
OCAMLOPT = $(OCAMLFIND) opt $(OCAMLOPTIONS) $(PREPROCOPTIONS)
OCAMLDEP = $(OCAMLFIND) ocamldep -package "camlp4,$(REQUIRES)" $(SYNTAXOPTIONS)
LIBRARIES = $(shell $(OCAMLFIND) query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
LIBRARIES_OPT = $(shell $(OCAMLFIND) query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
+LIBRARIES_DEPS = \
+ $(foreach X,$(filter-out /usr/lib/ocaml%,$(LIBRARIES)),\
+ $(wildcard \
+ $(shell dirname $(X))/*.mli \
+ $(shell dirname $(X))/*.ml \
+ $(shell dirname $(X))/paramodulation/*.ml \
+ $(shell dirname $(X))/paramodultation/*.mli))
ARCHIVE = $(PACKAGE).cma
DEPEND_FILES = $(INTERFACE_FILES) $(IMPLEMENTATION_FILES)
$(ARCHIVE): $(IMPLEMENTATION_FILES:%.ml=%.cmo) $(LIBRARIES)
+ $(H)if [ $(PACKAGE) != dummy ]; then \
+ echo " OCAMLC -a $@";\
$(OCAMLC) $(OCAMLARCHIVEOPTIONS) -a -o $@ \
- $(IMPLEMENTATION_FILES:%.ml=%.cmo)
+ $(IMPLEMENTATION_FILES:%.ml=%.cmo); fi
$(ARCHIVE_OPT): $(IMPLEMENTATION_FILES:%.ml=%.cmx) $(LIBRARIES_OPT)
+ $(H)if [ $(PACKAGE) != dummy ]; then \
+ echo " OCAMLOPT -a $@";\
$(OCAMLOPT) $(OCAMLARCHIVEOPTIONS) -a -o $@ \
- $(IMPLEMENTATION_FILES:%.ml=%.cmx)
+ $(IMPLEMENTATION_FILES:%.ml=%.cmx); fi
prereq: $(PREREQ)
all: prereq $(IMPLEMENTATION_FILES:%.ml=%.cmo) $(ARCHIVE)
+ @echo -n
opt: prereq $(IMPLEMENTATION_FILES:%.ml=%.cmx) $(ARCHIVE_OPT)
+ @echo -n
world: all opt
test: test.ml $(ARCHIVE)
$(OCAMLC) $(ARCHIVE) -linkpkg -o $@ $<
ocamldot < .depend > $@
%.cmi: %.mli
- $(OCAMLC) -c $<
+ @echo " OCAMLC $<"
+ $(H)$(OCAMLC) -c $<
%.cmo %.cmi: %.ml
- $(OCAMLC) -c $<
+ @echo " OCAMLC $<"
+ $(H)$(OCAMLC) -c $<
%.cmx: %.ml
- $(OCAMLOPT) -c $<
+ @echo " OCAMLOPT $<"
+ $(H)$(OCAMLOPT) -c $<
%.annot: %.ml
$(OCAMLC) -dtypes $(PKGS) -c $<
%.ml %.mli: %.mly
$(OCAMLLEX) $<
$(IMPLEMENTATION_FILES:%.ml=%.cmo): $(LIBRARIES)
+$(IMPLEMENTATION_FILES:%.ml=%.cmi): $(LIBRARIES_DEPS)
$(IMPLEMENTATION_FILES:%.ml=%.cmx): $(LIBRARIES_OPT)
clean:
for p in $(REQUIRES); do echo "#require \"$$p\";;" >> .ocamlinit; done
echo "#load \"$(PACKAGE).cma\";;" >> .ocamlinit
+# $(STATS_EXCLUDE) may be defined in libraries' Makefile to exclude some file
+# from statistics collection
+STATS_FILES = \
+ $(shell find . -maxdepth 1 -type f -name \*.ml $(foreach f,$(STATS_EXCLUDE),-not -name $(f))) \
+ $(shell find . -maxdepth 1 -type f -name \*.mli $(foreach f,$(STATS_EXCLUDE),-not -name $(f)))
+.stats: $(STATS_FILES)
+ rm -f .stats
+ echo -n "LOC:" >> .stats
+ wc -l $(STATS_FILES) | tail -1 | awk '{ print $$1 }' >> .stats
+
.PHONY: all opt world backup depend install uninstall clean ocamlinit
ifneq ($(MAKECMDGOALS), depend)
include .depend
endif
-ifeq ($(MAKECMDGOALS), all)
- $(IMPLEMENTATION_FILES:%.ml=%.cmi): $(LIBRARIES)
-endif
-
-ifeq ($(MAKECMDGOALS), opt)
- $(IMPLEMENTATION_FILES:%.ml=%.cmi): $(LIBRARIES_OPT)
-endif
-
-ifeq ($(MAKECMDGOALS),)
- $(IMPLEMENTATION_FILES:%.ml=%.cmi): $(LIBRARIES)
-endif
-
NULL =