H=@
-ifeq ($(origin OCAMLPATH), undefined)
- OCAMLFIND = OCAMLPATH=$(HOME)/svn/claudio/components/METAS ocamlfind
-else
- OCAMLFIND = ocamlfind
-endif
+OCAMLPATH ?= /home/fguidi/svn/matita_patched/components/METAS
+OCAMLFIND = OCAMLPATH=$(OCAMLPATH) ocamlfind
RELISE = $(MAIN:%=%_$(shell cat MakeVersion))
-DOWNDIR = $(HOME)/svn/helm-stable/www/lambdadelta/download
+DOWNDIR = ../../www/lambdadelta/download
DIRECTORIES = $(addprefix $(SRC)/,$(shell cat $(SRC)/Make))
INCLUDES = $(DIRECTORIES:%=-I %)
-OCAMLDEP = $(OCAMLFIND) ocamldep -native $(INCLUDES)
-OCAMLOPT = $(OCAMLFIND) opt $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
+CAMLP = -pp "camlp5o pa_macro.cmo $(CAMLPOPTIONS)"
+
+CAMLPOPTIONS = $(F:%=-D%)
+
+OCAMLDEP = $(OCAMLFIND) ocamldep $(CAMLP) $(INCLUDES)
+OCAMLOPT = $(OCAMLFIND) ocamlopt $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
+OCAMLC = $(OCAMLFIND) ocamlc $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
OCAMLLEX = ocamllex.opt
OCAMLYACC = ocamlyacc -v
TAR = tar -czf etc/$(MAIN:%=%.tgz)
+CALLMAKE = $(MAKE) --no-print-directory
+
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
+ CMOS += $(1).cmo
+ CLEAN += $(1).cmi $(1).cmx $(1).o $(1).cmo
CLEAN += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
CLEAN += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
KEEP += $$(if $$(wildcard $(1).mly),$(1).mly,\
)
endef
-define INCLUDE_TEMPLATE
+define INCLUDE_O_TEMPLATE
ifeq ($(MAKECMDGOALS), $(1))
- include .depend.opt
+%.cmi: %.mli
+ @echo " OCAMLOPT $$<"
+ $$(H)$(OCAMLOPT) -c $$<
+
+include .depend.opt
+ endif
+endef
+
+define INCLUDE_B_TEMPLATE
+ ifeq ($(MAKECMDGOALS), $(1))
+%.cmi: %.mli
+ @echo " OCAMLC $$<"
+ $$(H)$(OCAMLC) -c $$<
+
+include .depend.byte
endif
endef
$(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
$(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
+O_OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
+B_OBJECTS = $(patsubst %.ml,%.cmo,$(SOURCES:%.mli=%.cmi))
-OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
CLEAN += $(MAIN).opt
-all opt: .depend.opt
- @$(MAKE) --no-print-directory $(MAIN).opt
-
-$(MAIN).opt: $(OBJECTS)
+$(MAIN).opt: $(O_OBJECTS)
@echo " OCAMLOPT -o $(MAIN).opt"
$(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
+$(MAIN).byte: $(B_OBJECTS)
+ @echo " OCAMLC -o $(MAIN).byte"
+ $(H)$(OCAMLC) -o $(MAIN).byte $(CMOS)
+
.depend.opt: $(SOURCES)
@echo " OCAMLDEP -native"
- $(H)$(OCAMLDEP) $^ > .depend.opt
+ $(H)$(OCAMLDEP) -native $^ > .depend.opt
+
+.depend.byte: $(SOURCES)
+ @echo " OCAMLDEP -byte"
+ $(H)$(OCAMLDEP) $^ > .depend.byte
clean:
@echo " CLEAN . $(SRC)"
%.ml: %.mll
@echo " OCAMLLEX $<"
$(H)$(OCAMLLEX) $<
-%.cmi: %.mli
- @echo " OCAMLOPT $<"
- $(H)$(OCAMLOPT) -c $<
%.cmx: %.ml
@echo " OCAMLOPT $<"
$(H)$(OCAMLOPT) -c $<
+%.cmo: %.ml
+ @echo " OCAMLC $<"
+ $(H)$(OCAMLC) -c $<
+
+O_TAGS += opt $(MAIN).opt
+
+B_TAGS += byte $(MAIN).byte
-TAGS += $(MAIN).opt
+$(foreach TAG, $(O_TAGS), $(eval $(call INCLUDE_O_TEMPLATE, $(TAG))))
-$(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))
+$(foreach TAG, $(B_TAGS), $(eval $(call INCLUDE_B_TEMPLATE, $(TAG))))