summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu.ocaml.obj.mk107
-rw-r--r--gnu.ocaml.prog.mk58
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)