diff options
| -rw-r--r-- | gnu.ocaml.obj.mk | 107 | ||||
| -rw-r--r-- | gnu.ocaml.prog.mk | 58 |
2 files changed, 112 insertions, 53 deletions
diff --git a/gnu.ocaml.obj.mk b/gnu.ocaml.obj.mk new file mode 100644 index 0000000..2ec4735 --- /dev/null +++ b/gnu.ocaml.obj.mk @@ -0,0 +1,107 @@ +# Copyright (c) 2014, GrĂ©goire DuchĂȘne <gduchene@awhk.org> +# +# Permission to use, copy, modify, and/or distribute this software for +# any purpose with or without fee is hereby granted, provided that the +# above copyright notice and this permission notice appear in all +# copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +include $(dir $(lastword $(MAKEFILE_LIST)))gnu.ocaml.rules.mk + +_FNDFLAGS= . $(_MAXDEPTH) -type f -regex $(_PAT) $(_EXL) + +ifdef NOSUBDIR +_MAXDEPTH= -maxdepth 1 +endif + +ifdef EXCL +_EXL= $(foreach e, $(EXCL), -not -regex '.*$e.*') +endif + +DEPFILE?= .Makefile.dep +MENHIR?= menhir +OCAMLDEP?= ocamldep +OCAMLLEX?= ocamllex + +.DEFAULT_GOAL:= obj + +_FND= find +_PAT= '.*ml[ily]*.*' +_SRC= $(shell $(_FND) $(_FNDFLAGS)) +_ORD= $(CSRC) $(shell $(OCAMLDEP) $(_INC) -sort $(_SRC)) +_INC= $(foreach e, $(sort $(foreach e, $(_SRC), $(dir $e))), -I '$e') + +ifdef CSRC +ifndef OCAMLNATIVE +OCAMLFLAGS+= -custom +endif +endif + +ifndef OCAMLC +ifdef OCAMLNATIVE +OCAMLC= ocamlfind ocamlopt +else +OCAMLC= ocamlfind ocamlc +endif +endif + +ifdef PKG +OCAMLFLAGS+= -linkpkg -package '$(PKG)' +endif + +OCAMLFLAGS+= $(DEBUG) + +ifndef NOSUBDIR +OCAMLFLAGS+= $(_INC) +endif + +_OBJ= $(patsubst %.c, %.o, $(filter %.c, $(_ORD))) + +ifdef OCAMLNATIVE +_OBJ+= $(patsubst %.ml, %.cmx, $(filter %.ml, $(_ORD))) +_CLN+= $(patsubst %.cmx, %.o, $(_OBJ)) +_CLN+= $(patsubst %.cmx, %.cmi, $(_OBJ)) +else +_OBJ+= $(patsubst %.ml, %.cmo, $(filter %.ml, $(_ORD))) +_CLN+= $(patsubst %.cmo, %.cmi, $(_OBJ)) +endif + +_INT= $(patsubst %.mly, %.ml, $(filter %.mly, $(_SRC))) +_INT+= $(patsubst %.mll, %.ml, $(filter %.mll, $(_SRC))) +_CLN+= $(patsubst %.ml, %.mli, $(_INT)) + +-include $(DEPFILE) + +$(_OBJ): $(DEPFILE) + +$(DEPFILE): $(_SRC) $(_INT) + $(OCAMLDEP) $(_INC) $(_SRC) > $(DEPFILE) + +all: $(_OBJ) + +clean: + $(RM) $(_CLN) $(_INT) $(_OBJ) $(PROG) + +dep: + $(OCAMLDEP) $(_INC) $(_SRC) > $(DEPFILE) + +dist-clean: clean + $(RM) $(DEPFILE) + +obj: $(_OBJ) + +.PHONY: dep + +ifndef OSTUMAKE_DEBUG +.SILENT: $(DEPFILE) dep +endif + +.SUFFIXES: diff --git a/gnu.ocaml.prog.mk b/gnu.ocaml.prog.mk index 26e7797..dde734a 100644 --- a/gnu.ocaml.prog.mk +++ b/gnu.ocaml.prog.mk @@ -14,61 +14,13 @@ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -include $(dir $(lastword $(MAKEFILE_LIST)))gnu.ocaml.rules.mk +include $(dir $(lastword $(MAKEFILE_LIST)))gnu.ocaml.obj.mk -DEPFILE?= .Makefile.dep -MENHIR?= menhir -OCAMLLEX?= ocamllex PROG?= a.out -SRC+= $(CSRC) -ifdef CSRC -ifndef OCAMLNATIVE -OCAMLFLAGS+= -custom -endif -endif - -ifndef OCAMLC -ifdef OCAMLNATIVE -OCAMLC= ocamlfind ocamlopt -else -OCAMLC= ocamlfind ocamlc -endif -endif - -ifdef PKG -OCAMLFLAGS+= -linkpkg -package "$(PKG)" -endif - -OCAMLFLAGS+= $(DEBUG) - --include $(DEPFILE) - -OBJ+= $(patsubst %.c, %.o, $(filter %.c, $(SRC))) - -ifdef OCAMLNATIVE -OBJ+= $(patsubst %.ml, %.cmx, $(filter %.ml, $(SRC))) -CLEAN+= $(patsubst %.cmx, %.o, $(OBJ)) -CLEAN+= $(patsubst %.cmx, %.cmi, $(OBJ)) -else -OBJ+= $(patsubst %.ml, %.cmo, $(filter %.ml, $(SRC))) -CLEAN+= $(patsubst %.cmo, %.cmi, $(OBJ)) -endif - -INTER= $(patsubst %.mly, %.ml, $(wildcard *.mly)) -INTER+= $(patsubst %.mll, %.ml, $(wildcard *.mll)) -CLEAN+= $(patsubst %.ml, %.mli, $(INTER)) +.DEFAULT_GOAL:= $(PROG) -$(DEPFILE): $(wildcard *.ml) $(INTER) - printf "SRC+=\t%s\n" `ocamldep -sort *.ml` > $(DEPFILE) - printf "\n%s\n" "`ocamldep *.mli *.ml`" >> $(DEPFILE) -$(PROG): $(DEPFILE) $(OBJ) - $(OCAMLC) $(OCAMLFLAGS) -o $@ $(filter-out $(DEPFILE), $^) -all: $(PROG) -clean: - $(RM) $(CLEAN) $(OBJ) $(PROG) $(INTER) -dist-clean: clean - $(RM) $(DEPFILE) +$(PROG): $(_OBJ) + $(OCAMLC) $(OCAMLFLAGS) -o $@ $^ -.DEFAULT_GOAL:= $(PROG) -.SUFFIXES: +all: $(PROG) |
