# Copyright (c) 2014, GrĂ©goire DuchĂȘne # # 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: