erlang.mk and erlang.install.mk update. master
authorStanislaw Klekot <dozzie@jarowit.net>
Sun, 29 Oct 2017 17:36:29 +0000 (18:36 +0100)
committerStanislaw Klekot <dozzie@jarowit.net>
Sun, 29 Oct 2017 17:36:29 +0000 (18:36 +0100)
erlang.install.mk
erlang.mk

index b6345f8..6dca5fc 100644 (file)
@@ -29,9 +29,13 @@ endef
 #-----------------------------------------------------------------------------
 # build rule helpers
 
+inst_silent_0 = true
+inst_silent = $(inst_silent_$(V))
+
 # $(call install-wildcard,$(MODE),$(WILDCARD),$(DESTDIR))
 define install-wildcard
-$(foreach F,$(wildcard $2),$(call install,$1,$F,$3))
+$(if $(inst_silent),@)mkdir -p $3
+$(foreach F,$(wildcard $2),$(call install,$1,$F,$3,skip_mkdir))
 endef
 
 # $(call install,$(MODE),$(FILE),$(DESTDIR))
@@ -40,7 +44,8 @@ endef
 # file under a different name (e.g. "*.example"), use /usr/bin/install
 # directly.
 define install
-install -D -m $1 $2 $3/$(notdir $2)
+$(if $4,,$(if $(inst_silent),@)mkdir -p $3)
+$(if $(inst_silent),@echo " INSTALL " $3/$(notdir $2); )install -m $1 $2 $3/$(notdir $2)
 
 endef
 
@@ -49,10 +54,12 @@ endef
 # Remember to set in $(BEAM_OPTS) at least "-args_file ...", so the VM args
 # can be overriden.
 define install-escript
-mkdir -p $(dir $2)
-printf '#!%s\n%%%%! %s\n' '$(ESCRIPT_PATH)' '$3' > $2
-sed -e '1,3{/^#!/d; /^%*!/d}' $1 >> $2
-chmod 755 $2
+$(if $(inst_silent),@echo " ESCRIPT " $2)
+$(if $(inst_silent),@)mkdir -p $(dir $2)
+$(if $(inst_silent),@)printf '#!%s\n%%%%! %s\n' '$(ESCRIPT_PATH)' '$3' > $2
+$(if $(inst_silent),@)head -n 3 $1 | sed -e '/^#!/d' -e '/^%*!/d' >> $2
+$(if $(inst_silent),@)tail -n +4 $1 >> $2
+$(if $(inst_silent),@)chmod 755 $2
 endef
 
 #-----------------------------------------------------------------------------
index d2d0111..6620574 100644 (file)
--- a/erlang.mk
+++ b/erlang.mk
 .PHONY: all app apps deps search rel relup docs install-docs check tests clean distclean help erlang-mk
 
 ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
+export ERLANG_MK_FILENAME
 
-ERLANG_MK_VERSION = 2016.01.12-1-ge0ebd0a
+ERLANG_MK_VERSION = 2017.08.28-8-g1e2ab25
+ERLANG_MK_WITHOUT = 
+
+# Make 3.81 and 3.82 are deprecated.
+
+#ifeq ($(MAKE_VERSION),3.81)
+#$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html)
+#endif
+
+#ifeq ($(MAKE_VERSION),3.82)
+#$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html)
+#endif
 
 # Core configuration.
 
@@ -173,13 +185,14 @@ ERLANG_MK_COMMIT ?=
 ERLANG_MK_BUILD_CONFIG ?= build.config
 ERLANG_MK_BUILD_DIR ?= .erlang.mk.build
 
+erlang-mk: WITHOUT ?= $(ERLANG_MK_WITHOUT)
 erlang-mk:
        git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR)
 ifdef ERLANG_MK_COMMIT
        cd $(ERLANG_MK_BUILD_DIR) && git checkout $(ERLANG_MK_COMMIT)
 endif
        if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR)/build.config; fi
-       $(MAKE) -C $(ERLANG_MK_BUILD_DIR)
+       $(MAKE) -C $(ERLANG_MK_BUILD_DIR) WITHOUT='$(strip $(WITHOUT))'
        cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk
        rm -rf $(ERLANG_MK_BUILD_DIR)
 
@@ -376,7 +389,12 @@ define makedep.erl
                (F, Mod, include_lib, "$1/include/" ++ Hrl) -> AddHd(F, Mod, "include/" ++ Hrl);
                (F, Mod, include_lib, Hrl) -> AddHd(F, Mod, "include/" ++ Hrl);
                (F, Mod, import, {Imp, _}) ->
-                       case filelib:is_file("src/" ++ atom_to_list(Imp) ++ ".erl") of
+                       IsFile =
+                               case lists:keyfind(Imp, 1, Modules) of
+                                       false -> false;
+                                       {_, FilePath} -> filelib:is_file(FilePath)
+                               end,
+                       case IsFile of
                                false -> ok;
                                true -> Add(Mod, Imp)
                        end;
@@ -400,9 +418,17 @@ define makedep.erl
        end || F <- ErlFiles],
        Depend = sofs:to_external(sofs:relation_to_family(sofs:relation(ets:tab2list(E)))),
        CompileFirst = [X || X <- lists:reverse(digraph_utils:topsort(G)), [] =/= digraph:in_neighbours(G, X)],
+       TargetPath = fun(Target) ->
+               case lists:keyfind(Target, 1, Modules) of
+                       false -> "";
+                       {_, DepFile} ->
+                               DirSubname = tl(string:tokens(filename:dirname(DepFile), "/")),
+                               string:join(DirSubname ++ [atom_to_list(Target)], "/")
+               end
+       end,
        ok = file:write_file("$(1)", [
                [[F, "::", [[" ", D] || D <- Deps], "; @touch \$$@\n"] || {F, Deps} <- Depend],
-               "\nCOMPILE_FIRST +=", [[" ", atom_to_list(CF)] || CF <- CompileFirst], "\n"
+               "\nCOMPILE_FIRST +=", [[" ", TargetPath(CF)] || CF <- CompileFirst], "\n"
        ]),
        halt()
 endef
@@ -426,7 +452,7 @@ $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES):
 ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change
 endif
 
--include $(PROJECT).d
+include $(wildcard $(PROJECT).d)
 
 ebin/$(PROJECT).app:: ebin/
 
@@ -487,7 +513,7 @@ ifneq ($(SKIP_DEPS),)
 doc-deps:
 else
 doc-deps: $(ALL_DOC_DEPS_DIRS)
-       $(verbose) for dep in $(ALL_DOC_DEPS_DIRS) ; do $(MAKE) -C $$dep; done
+       $(verbose) set -e; for dep in $(ALL_DOC_DEPS_DIRS) ; do $(MAKE) -C $$dep; done
 endif
 
 # Copyright (c) 2015-2016, Loïc Hoguin <essen@ninenines.eu>
@@ -534,10 +560,20 @@ rebar.config:
 # Configuration.
 
 EDOC_OPTS ?=
+EDOC_SRC_DIRS ?=
+
+define edoc.erl
+       SrcPaths = lists:foldl(fun(P, Acc) ->
+               filelib:wildcard(atom_to_list(P) ++ "/{src,c_src}") ++ Acc
+       end, [], [$(call comma_list,$(patsubst %,'%',$(EDOC_SRC_DIRS)))]),
+       DefaultOpts = [{source_path, SrcPaths}, {subpackages, false}],
+       edoc:application($(1), ".", [$(2)] ++ DefaultOpts),
+       halt(0).
+endef
 
 # Core targets.
 
-ifneq ($(wildcard doc/overview.edoc),)
+ifneq ($(strip $(EDOC_SRC_DIRS)$(wildcard doc/overview.edoc)),)
 docs:: edoc
 endif
 
@@ -546,7 +582,7 @@ distclean:: distclean-edoc
 # Plugin-specific targets.
 
 edoc: distclean-edoc doc-deps
-       $(gen_verbose) $(ERL) -eval 'edoc:application($(PROJECT), ".", [$(EDOC_OPTS)]), halt().'
+       $(gen_verbose) $(call erlang,$(call edoc.erl,$(PROJECT),$(EDOC_OPTS)))
 
 distclean-edoc:
        $(gen_verbose) rm -f doc/*.css doc/*.html doc/*.png doc/edoc-info