Update erlang.mk
This commit is contained in:
		
							parent
							
								
									df33a8822c
								
							
						
					
					
						commit
						7ba3c82c3c
					
				| 
						 | 
					@ -17,7 +17,7 @@
 | 
				
			||||||
ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
 | 
					ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
 | 
				
			||||||
export ERLANG_MK_FILENAME
 | 
					export ERLANG_MK_FILENAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ERLANG_MK_VERSION = 2.0.0-pre.2-278-gd9a9158
 | 
					ERLANG_MK_VERSION = 2.0.0-pre.2-304-g5a961bd
 | 
				
			||||||
ERLANG_MK_WITHOUT = 
 | 
					ERLANG_MK_WITHOUT = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Make 3.81 and 3.82 are deprecated.
 | 
					# Make 3.81 and 3.82 are deprecated.
 | 
				
			||||||
| 
						 | 
					@ -199,6 +199,87 @@ endif
 | 
				
			||||||
# The erlang.mk package index is bundled in the default erlang.mk build.
 | 
					# The erlang.mk package index is bundled in the default erlang.mk build.
 | 
				
			||||||
# Search for the string "copyright" to skip to the rest of the code.
 | 
					# Search for the string "copyright" to skip to the rest of the code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2015-2017, Loïc Hoguin <essen@ninenines.eu>
 | 
				
			||||||
 | 
					# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: distclean-kerl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					KERL_INSTALL_DIR ?= $(HOME)/erlang
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(strip $(KERL)),)
 | 
				
			||||||
 | 
					KERL := $(ERLANG_MK_TMP)/kerl/kerl
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export KERL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					KERL_GIT ?= https://github.com/kerl/kerl
 | 
				
			||||||
 | 
					KERL_COMMIT ?= master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					KERL_MAKEFLAGS ?=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OTP_GIT ?= https://github.com/erlang/otp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define kerl_otp_target
 | 
				
			||||||
 | 
					ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(1)),)
 | 
				
			||||||
 | 
					$(KERL_INSTALL_DIR)/$(1): $(KERL)
 | 
				
			||||||
 | 
						MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $(1) $(1)
 | 
				
			||||||
 | 
						$(KERL) install $(1) $(KERL_INSTALL_DIR)/$(1)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define kerl_hipe_target
 | 
				
			||||||
 | 
					ifeq ($(wildcard $(KERL_INSTALL_DIR)/$1-native),)
 | 
				
			||||||
 | 
					$(KERL_INSTALL_DIR)/$1-native: $(KERL)
 | 
				
			||||||
 | 
						KERL_CONFIGURE_OPTIONS=--enable-native-libs \
 | 
				
			||||||
 | 
							MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $1 $1-native
 | 
				
			||||||
 | 
						$(KERL) install $1-native $(KERL_INSTALL_DIR)/$1-native
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(KERL):
 | 
				
			||||||
 | 
						$(verbose) mkdir -p $(ERLANG_MK_TMP)
 | 
				
			||||||
 | 
						$(gen_verbose) git clone --depth 1 $(KERL_GIT) $(ERLANG_MK_TMP)/kerl
 | 
				
			||||||
 | 
						$(verbose) cd $(ERLANG_MK_TMP)/kerl && git checkout $(KERL_COMMIT)
 | 
				
			||||||
 | 
						$(verbose) chmod +x $(KERL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean:: distclean-kerl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean-kerl:
 | 
				
			||||||
 | 
						$(gen_verbose) rm -rf $(KERL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Allow users to select which version of Erlang/OTP to use for a project.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ERLANG_OTP ?=
 | 
				
			||||||
 | 
					ERLANG_HIPE ?=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use kerl to enforce a specific Erlang/OTP version for a project.
 | 
				
			||||||
 | 
					ifneq ($(strip $(ERLANG_OTP)),)
 | 
				
			||||||
 | 
					export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_OTP)/bin:$(PATH)
 | 
				
			||||||
 | 
					SHELL := env PATH=$(PATH) $(SHELL)
 | 
				
			||||||
 | 
					$(eval $(call kerl_otp_target,$(ERLANG_OTP)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Erlang/OTP only if it doesn't already exist.
 | 
				
			||||||
 | 
					ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_OTP))$(BUILD_ERLANG_OTP),)
 | 
				
			||||||
 | 
					$(info Building Erlang/OTP $(ERLANG_OTP)... Please wait...)
 | 
				
			||||||
 | 
					$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_OTP) ERLANG_OTP=$(ERLANG_OTP) BUILD_ERLANG_OTP=1 >&2)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					# Same for a HiPE enabled VM.
 | 
				
			||||||
 | 
					ifneq ($(strip $(ERLANG_HIPE)),)
 | 
				
			||||||
 | 
					export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native/bin:$(PATH)
 | 
				
			||||||
 | 
					SHELL := env PATH=$(PATH) $(SHELL)
 | 
				
			||||||
 | 
					$(eval $(call kerl_hipe_target,$(ERLANG_HIPE)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Erlang/OTP only if it doesn't already exist.
 | 
				
			||||||
 | 
					ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_HIPE))$(BUILD_ERLANG_OTP),)
 | 
				
			||||||
 | 
					$(info Building HiPE-enabled Erlang/OTP $(ERLANG_OTP)... Please wait...)
 | 
				
			||||||
 | 
					$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_HIPE) ERLANG_HIPE=$(ERLANG_HIPE) BUILD_ERLANG_OTP=1 >&2)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PACKAGES += aberth
 | 
					PACKAGES += aberth
 | 
				
			||||||
pkg_aberth_name = aberth
 | 
					pkg_aberth_name = aberth
 | 
				
			||||||
pkg_aberth_description = Generic BERT-RPC server in Erlang
 | 
					pkg_aberth_description = Generic BERT-RPC server in Erlang
 | 
				
			||||||
| 
						 | 
					@ -535,14 +616,6 @@ pkg_cl_fetch = git
 | 
				
			||||||
pkg_cl_repo = https://github.com/tonyrog/cl
 | 
					pkg_cl_repo = https://github.com/tonyrog/cl
 | 
				
			||||||
pkg_cl_commit = master
 | 
					pkg_cl_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PACKAGES += classifier
 | 
					 | 
				
			||||||
pkg_classifier_name = classifier
 | 
					 | 
				
			||||||
pkg_classifier_description = An Erlang Bayesian Filter and Text Classifier
 | 
					 | 
				
			||||||
pkg_classifier_homepage = https://github.com/inaka/classifier
 | 
					 | 
				
			||||||
pkg_classifier_fetch = git
 | 
					 | 
				
			||||||
pkg_classifier_repo = https://github.com/inaka/classifier
 | 
					 | 
				
			||||||
pkg_classifier_commit = master
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PACKAGES += clique
 | 
					PACKAGES += clique
 | 
				
			||||||
pkg_clique_name = clique
 | 
					pkg_clique_name = clique
 | 
				
			||||||
pkg_clique_description = CLI Framework for Erlang
 | 
					pkg_clique_description = CLI Framework for Erlang
 | 
				
			||||||
| 
						 | 
					@ -943,14 +1016,6 @@ pkg_dnssd_fetch = git
 | 
				
			||||||
pkg_dnssd_repo = https://github.com/benoitc/dnssd_erlang
 | 
					pkg_dnssd_repo = https://github.com/benoitc/dnssd_erlang
 | 
				
			||||||
pkg_dnssd_commit = master
 | 
					pkg_dnssd_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PACKAGES += dtl
 | 
					 | 
				
			||||||
pkg_dtl_name = dtl
 | 
					 | 
				
			||||||
pkg_dtl_description = Django Template Language: A full-featured port of the Django template engine to Erlang.
 | 
					 | 
				
			||||||
pkg_dtl_homepage = https://github.com/oinksoft/dtl
 | 
					 | 
				
			||||||
pkg_dtl_fetch = git
 | 
					 | 
				
			||||||
pkg_dtl_repo = https://github.com/oinksoft/dtl
 | 
					 | 
				
			||||||
pkg_dtl_commit = master
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PACKAGES += dynamic_compile
 | 
					PACKAGES += dynamic_compile
 | 
				
			||||||
pkg_dynamic_compile_name = dynamic_compile
 | 
					pkg_dynamic_compile_name = dynamic_compile
 | 
				
			||||||
pkg_dynamic_compile_description = compile and load erlang modules from string input
 | 
					pkg_dynamic_compile_description = compile and load erlang modules from string input
 | 
				
			||||||
| 
						 | 
					@ -1519,6 +1584,14 @@ pkg_erwa_fetch = git
 | 
				
			||||||
pkg_erwa_repo = https://github.com/bwegh/erwa
 | 
					pkg_erwa_repo = https://github.com/bwegh/erwa
 | 
				
			||||||
pkg_erwa_commit = master
 | 
					pkg_erwa_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PACKAGES += escalus
 | 
				
			||||||
 | 
					pkg_escalus_name = escalus
 | 
				
			||||||
 | 
					pkg_escalus_description = An XMPP client library in Erlang for conveniently testing XMPP servers
 | 
				
			||||||
 | 
					pkg_escalus_homepage = https://github.com/esl/escalus
 | 
				
			||||||
 | 
					pkg_escalus_fetch = git
 | 
				
			||||||
 | 
					pkg_escalus_repo = https://github.com/esl/escalus
 | 
				
			||||||
 | 
					pkg_escalus_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PACKAGES += espec
 | 
					PACKAGES += espec
 | 
				
			||||||
pkg_espec_name = espec
 | 
					pkg_espec_name = espec
 | 
				
			||||||
pkg_espec_description = ESpec: Behaviour driven development framework for Erlang
 | 
					pkg_espec_description = ESpec: Behaviour driven development framework for Erlang
 | 
				
			||||||
| 
						 | 
					@ -1911,14 +1984,6 @@ pkg_gold_fever_fetch = git
 | 
				
			||||||
pkg_gold_fever_repo = https://github.com/inaka/gold_fever
 | 
					pkg_gold_fever_repo = https://github.com/inaka/gold_fever
 | 
				
			||||||
pkg_gold_fever_commit = master
 | 
					pkg_gold_fever_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PACKAGES += gossiperl
 | 
					 | 
				
			||||||
pkg_gossiperl_name = gossiperl
 | 
					 | 
				
			||||||
pkg_gossiperl_description = Gossip middleware in Erlang
 | 
					 | 
				
			||||||
pkg_gossiperl_homepage = http://gossiperl.com/
 | 
					 | 
				
			||||||
pkg_gossiperl_fetch = git
 | 
					 | 
				
			||||||
pkg_gossiperl_repo = https://github.com/gossiperl/gossiperl
 | 
					 | 
				
			||||||
pkg_gossiperl_commit = master
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PACKAGES += gpb
 | 
					PACKAGES += gpb
 | 
				
			||||||
pkg_gpb_name = gpb
 | 
					pkg_gpb_name = gpb
 | 
				
			||||||
pkg_gpb_description = A Google Protobuf implementation for Erlang
 | 
					pkg_gpb_description = A Google Protobuf implementation for Erlang
 | 
				
			||||||
| 
						 | 
					@ -1943,6 +2008,22 @@ pkg_grapherl_fetch = git
 | 
				
			||||||
pkg_grapherl_repo = https://github.com/eproxus/grapherl
 | 
					pkg_grapherl_repo = https://github.com/eproxus/grapherl
 | 
				
			||||||
pkg_grapherl_commit = master
 | 
					pkg_grapherl_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PACKAGES += grpc
 | 
				
			||||||
 | 
					pkg_grpc_name = grpc
 | 
				
			||||||
 | 
					pkg_grpc_description = gRPC server in Erlang
 | 
				
			||||||
 | 
					pkg_grpc_homepage = https://github.com/Bluehouse-Technology/grpc
 | 
				
			||||||
 | 
					pkg_grpc_fetch = git
 | 
				
			||||||
 | 
					pkg_grpc_repo = https://github.com/Bluehouse-Technology/grpc
 | 
				
			||||||
 | 
					pkg_grpc_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PACKAGES += grpc_client
 | 
				
			||||||
 | 
					pkg_grpc_client_name = grpc_client
 | 
				
			||||||
 | 
					pkg_grpc_client_description = gRPC client in Erlang
 | 
				
			||||||
 | 
					pkg_grpc_client_homepage = https://github.com/Bluehouse-Technology/grpc_client
 | 
				
			||||||
 | 
					pkg_grpc_client_fetch = git
 | 
				
			||||||
 | 
					pkg_grpc_client_repo = https://github.com/Bluehouse-Technology/grpc_client
 | 
				
			||||||
 | 
					pkg_grpc_client_commit = master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PACKAGES += gun
 | 
					PACKAGES += gun
 | 
				
			||||||
pkg_gun_name = gun
 | 
					pkg_gun_name = gun
 | 
				
			||||||
pkg_gun_description = Asynchronous SPDY, HTTP and Websocket client written in Erlang.
 | 
					pkg_gun_description = Asynchronous SPDY, HTTP and Websocket client written in Erlang.
 | 
				
			||||||
| 
						 | 
					@ -3615,6 +3696,14 @@ pkg_stripe_fetch = git
 | 
				
			||||||
pkg_stripe_repo = https://github.com/mattsta/stripe-erlang
 | 
					pkg_stripe_repo = https://github.com/mattsta/stripe-erlang
 | 
				
			||||||
pkg_stripe_commit = v1
 | 
					pkg_stripe_commit = v1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PACKAGES += subproc
 | 
				
			||||||
 | 
					pkg_subproc_name = subproc
 | 
				
			||||||
 | 
					pkg_subproc_description = unix subprocess manager with {active,once|false} modes
 | 
				
			||||||
 | 
					pkg_subproc_homepage = http://dozzie.jarowit.net/trac/wiki/subproc
 | 
				
			||||||
 | 
					pkg_subproc_fetch = git
 | 
				
			||||||
 | 
					pkg_subproc_repo = https://github.com/dozzie/subproc
 | 
				
			||||||
 | 
					pkg_subproc_commit = v0.1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PACKAGES += supervisor3
 | 
					PACKAGES += supervisor3
 | 
				
			||||||
pkg_supervisor3_name = supervisor3
 | 
					pkg_supervisor3_name = supervisor3
 | 
				
			||||||
pkg_supervisor3_description = OTP supervisor with additional strategies
 | 
					pkg_supervisor3_description = OTP supervisor with additional strategies
 | 
				
			||||||
| 
						 | 
					@ -4357,6 +4446,10 @@ define dep_autopatch_rebar.erl
 | 
				
			||||||
	Write("C_SRC_TYPE = rebar\n"),
 | 
						Write("C_SRC_TYPE = rebar\n"),
 | 
				
			||||||
	Write("DRV_CFLAGS = -fPIC\nexport DRV_CFLAGS\n"),
 | 
						Write("DRV_CFLAGS = -fPIC\nexport DRV_CFLAGS\n"),
 | 
				
			||||||
	Write(["ERLANG_ARCH = ", rebar_utils:wordsize(), "\nexport ERLANG_ARCH\n"]),
 | 
						Write(["ERLANG_ARCH = ", rebar_utils:wordsize(), "\nexport ERLANG_ARCH\n"]),
 | 
				
			||||||
 | 
						ToList = fun
 | 
				
			||||||
 | 
							(V) when is_atom(V) -> atom_to_list(V);
 | 
				
			||||||
 | 
							(V) when is_list(V) -> "'\\"" ++ V ++ "\\"'"
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
	fun() ->
 | 
						fun() ->
 | 
				
			||||||
		Write("ERLC_OPTS = +debug_info\nexport ERLC_OPTS\n"),
 | 
							Write("ERLC_OPTS = +debug_info\nexport ERLC_OPTS\n"),
 | 
				
			||||||
		case lists:keyfind(erl_opts, 1, Conf) of
 | 
							case lists:keyfind(erl_opts, 1, Conf) of
 | 
				
			||||||
| 
						 | 
					@ -4364,18 +4457,18 @@ define dep_autopatch_rebar.erl
 | 
				
			||||||
			{_, ErlOpts} ->
 | 
								{_, ErlOpts} ->
 | 
				
			||||||
				lists:foreach(fun
 | 
									lists:foreach(fun
 | 
				
			||||||
					({d, D}) ->
 | 
										({d, D}) ->
 | 
				
			||||||
						Write("ERLC_OPTS += -D" ++ atom_to_list(D) ++ "=1\n");
 | 
											Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n");
 | 
				
			||||||
					({d, DKey, DVal}) ->
 | 
										({d, DKey, DVal}) ->
 | 
				
			||||||
						Write("ERLC_OPTS += -D" ++ atom_to_list(DKey) ++ "=" ++ atom_to_list(DVal) ++ "\n");
 | 
											Write("ERLC_OPTS += -D" ++ ToList(DKey) ++ "=" ++ ToList(DVal) ++ "\n");
 | 
				
			||||||
					({i, I}) ->
 | 
										({i, I}) ->
 | 
				
			||||||
						Write(["ERLC_OPTS += -I ", I, "\n"]);
 | 
											Write(["ERLC_OPTS += -I ", I, "\n"]);
 | 
				
			||||||
					({platform_define, Regex, D}) ->
 | 
										({platform_define, Regex, D}) ->
 | 
				
			||||||
						case rebar_utils:is_arch(Regex) of
 | 
											case rebar_utils:is_arch(Regex) of
 | 
				
			||||||
							true -> Write("ERLC_OPTS += -D" ++ atom_to_list(D) ++ "=1\n");
 | 
												true -> Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n");
 | 
				
			||||||
							false -> ok
 | 
												false -> ok
 | 
				
			||||||
						end;
 | 
											end;
 | 
				
			||||||
					({parse_transform, PT}) ->
 | 
										({parse_transform, PT}) ->
 | 
				
			||||||
						Write("ERLC_OPTS += +'{parse_transform, " ++ atom_to_list(PT) ++ "}'\n");
 | 
											Write("ERLC_OPTS += +'{parse_transform, " ++ ToList(PT) ++ "}'\n");
 | 
				
			||||||
					(_) -> ok
 | 
										(_) -> ok
 | 
				
			||||||
				end, ErlOpts)
 | 
									end, ErlOpts)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
| 
						 | 
					@ -4588,8 +4681,14 @@ endef
 | 
				
			||||||
define dep_autopatch_appsrc_script.erl
 | 
					define dep_autopatch_appsrc_script.erl
 | 
				
			||||||
	AppSrc = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)",
 | 
						AppSrc = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)",
 | 
				
			||||||
	AppSrcScript = AppSrc ++ ".script",
 | 
						AppSrcScript = AppSrc ++ ".script",
 | 
				
			||||||
	Bindings = erl_eval:new_bindings(),
 | 
						{ok, Conf0} = file:consult(AppSrc),
 | 
				
			||||||
	{ok, [Conf]} = file:script(AppSrcScript, Bindings),
 | 
						Bindings0 = erl_eval:new_bindings(),
 | 
				
			||||||
 | 
						Bindings1 = erl_eval:add_binding('CONFIG', Conf0, Bindings0),
 | 
				
			||||||
 | 
						Bindings = erl_eval:add_binding('SCRIPT', AppSrcScript, Bindings1),
 | 
				
			||||||
 | 
						Conf = case file:script(AppSrcScript, Bindings) of
 | 
				
			||||||
 | 
							{ok, [C]} -> C;
 | 
				
			||||||
 | 
							{ok, C} -> C
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
	ok = file:write_file(AppSrc, io_lib:format("~p.~n", [Conf])),
 | 
						ok = file:write_file(AppSrc, io_lib:format("~p.~n", [Conf])),
 | 
				
			||||||
	halt()
 | 
						halt()
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
| 
						 | 
					@ -4602,7 +4701,11 @@ define dep_autopatch_appsrc.erl
 | 
				
			||||||
		true ->
 | 
							true ->
 | 
				
			||||||
			{ok, [{application, $(1), L0}]} = file:consult(AppSrcIn),
 | 
								{ok, [{application, $(1), L0}]} = file:consult(AppSrcIn),
 | 
				
			||||||
			L1 = lists:keystore(modules, 1, L0, {modules, []}),
 | 
								L1 = lists:keystore(modules, 1, L0, {modules, []}),
 | 
				
			||||||
			L2 = case lists:keyfind(vsn, 1, L1) of {_, git} -> lists:keyreplace(vsn, 1, L1, {vsn, "git"}); _ -> L1 end,
 | 
								L2 = case lists:keyfind(vsn, 1, L1) of
 | 
				
			||||||
 | 
									{_, git} -> lists:keyreplace(vsn, 1, L1, {vsn, "git"});
 | 
				
			||||||
 | 
									{_, {cmd, _}} -> lists:keyreplace(vsn, 1, L1, {vsn, "cmd"});
 | 
				
			||||||
 | 
									_ -> L1
 | 
				
			||||||
 | 
								end,
 | 
				
			||||||
			L3 = case lists:keyfind(registered, 1, L2) of false -> [{registered, []}|L2]; _ -> L2 end,
 | 
								L3 = case lists:keyfind(registered, 1, L2) of false -> [{registered, []}|L2]; _ -> L2 end,
 | 
				
			||||||
			ok = file:write_file(AppSrcOut, io_lib:format("~p.~n", [{application, $(1), L3}])),
 | 
								ok = file:write_file(AppSrcOut, io_lib:format("~p.~n", [{application, $(1), L3}])),
 | 
				
			||||||
			case AppSrcOut of AppSrcIn -> ok; _ -> ok = file:delete(AppSrcIn) end
 | 
								case AppSrcOut of AppSrcIn -> ok; _ -> ok = file:delete(AppSrcIn) end
 | 
				
			||||||
| 
						 | 
					@ -4640,7 +4743,7 @@ endef
 | 
				
			||||||
define dep_fetch_hex
 | 
					define dep_fetch_hex
 | 
				
			||||||
	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
 | 
						mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
 | 
				
			||||||
	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
 | 
						$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
 | 
				
			||||||
		https://s3.amazonaws.com/s3.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
 | 
							https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
 | 
				
			||||||
	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
 | 
						tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4741,87 +4844,6 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
 | 
				
			||||||
ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
 | 
					ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
 | 
				
			||||||
ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
 | 
					ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copyright (c) 2015-2017, Loïc Hoguin <essen@ninenines.eu>
 | 
					 | 
				
			||||||
# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.PHONY: distclean-kerl
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
KERL_INSTALL_DIR ?= $(HOME)/erlang
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ifeq ($(strip $(KERL)),)
 | 
					 | 
				
			||||||
KERL := $(ERLANG_MK_TMP)/kerl/kerl
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export KERL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
KERL_GIT ?= https://github.com/kerl/kerl
 | 
					 | 
				
			||||||
KERL_COMMIT ?= master
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
KERL_MAKEFLAGS ?=
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
OTP_GIT ?= https://github.com/erlang/otp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define kerl_otp_target
 | 
					 | 
				
			||||||
ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(1)),)
 | 
					 | 
				
			||||||
$(KERL_INSTALL_DIR)/$(1): $(KERL)
 | 
					 | 
				
			||||||
	MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $(1) $(1)
 | 
					 | 
				
			||||||
	$(KERL) install $(1) $(KERL_INSTALL_DIR)/$(1)
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define kerl_hipe_target
 | 
					 | 
				
			||||||
ifeq ($(wildcard $(KERL_INSTALL_DIR)/$1-native),)
 | 
					 | 
				
			||||||
$(KERL_INSTALL_DIR)/$1-native: $(KERL)
 | 
					 | 
				
			||||||
	KERL_CONFIGURE_OPTIONS=--enable-native-libs \
 | 
					 | 
				
			||||||
		MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $1 $1-native
 | 
					 | 
				
			||||||
	$(KERL) install $1-native $(KERL_INSTALL_DIR)/$1-native
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$(KERL):
 | 
					 | 
				
			||||||
	$(verbose) mkdir -p $(ERLANG_MK_TMP)
 | 
					 | 
				
			||||||
	$(gen_verbose) git clone --depth 1 $(KERL_GIT) $(ERLANG_MK_TMP)/kerl
 | 
					 | 
				
			||||||
	$(verbose) cd $(ERLANG_MK_TMP)/kerl && git checkout $(KERL_COMMIT)
 | 
					 | 
				
			||||||
	$(verbose) chmod +x $(KERL)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
distclean:: distclean-kerl
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
distclean-kerl:
 | 
					 | 
				
			||||||
	$(gen_verbose) rm -rf $(KERL)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Allow users to select which version of Erlang/OTP to use for a project.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ERLANG_OTP ?=
 | 
					 | 
				
			||||||
ERLANG_HIPE ?=
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Use kerl to enforce a specific Erlang/OTP version for a project.
 | 
					 | 
				
			||||||
ifneq ($(strip $(ERLANG_OTP)),)
 | 
					 | 
				
			||||||
export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_OTP)/bin:$(PATH)
 | 
					 | 
				
			||||||
SHELL := env PATH=$(PATH) $(SHELL)
 | 
					 | 
				
			||||||
$(eval $(call kerl_otp_target,$(ERLANG_OTP)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Build Erlang/OTP only if it doesn't already exist.
 | 
					 | 
				
			||||||
ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_OTP))$(BUILD_ERLANG_OTP),)
 | 
					 | 
				
			||||||
$(info Building Erlang/OTP $(ERLANG_OTP)... Please wait...)
 | 
					 | 
				
			||||||
$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_OTP) ERLANG_OTP=$(ERLANG_OTP) BUILD_ERLANG_OTP=1 >&2)
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
# Same for a HiPE enabled VM.
 | 
					 | 
				
			||||||
ifneq ($(strip $(ERLANG_HIPE)),)
 | 
					 | 
				
			||||||
export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native/bin:$(PATH)
 | 
					 | 
				
			||||||
SHELL := env PATH=$(PATH) $(SHELL)
 | 
					 | 
				
			||||||
$(eval $(call kerl_hipe_target,$(ERLANG_HIPE)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Build Erlang/OTP only if it doesn't already exist.
 | 
					 | 
				
			||||||
ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_HIPE))$(BUILD_ERLANG_OTP),)
 | 
					 | 
				
			||||||
$(info Building HiPE-enabled Erlang/OTP $(ERLANG_OTP)... Please wait...)
 | 
					 | 
				
			||||||
$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_HIPE) ERLANG_HIPE=$(ERLANG_HIPE) BUILD_ERLANG_OTP=1 >&2)
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Copyright (c) 2015-2016, Loïc Hoguin <essen@ninenines.eu>
 | 
					# Copyright (c) 2015-2016, Loïc Hoguin <essen@ninenines.eu>
 | 
				
			||||||
# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
					# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4924,7 +4946,7 @@ define app_file
 | 
				
			||||||
	{id$(comma)$(space)"$(1)"}$(comma))
 | 
						{id$(comma)$(space)"$(1)"}$(comma))
 | 
				
			||||||
	{modules, [$(call comma_list,$(2))]},
 | 
						{modules, [$(call comma_list,$(2))]},
 | 
				
			||||||
	{registered, []},
 | 
						{registered, []},
 | 
				
			||||||
	{applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(DEPS))]},
 | 
						{applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]},
 | 
				
			||||||
	{env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),)
 | 
						{env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),)
 | 
				
			||||||
]}.
 | 
					]}.
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
| 
						 | 
					@ -4936,7 +4958,7 @@ define app_file
 | 
				
			||||||
	{id$(comma)$(space)"$(1)"}$(comma))
 | 
						{id$(comma)$(space)"$(1)"}$(comma))
 | 
				
			||||||
	{modules, [$(call comma_list,$(2))]},
 | 
						{modules, [$(call comma_list,$(2))]},
 | 
				
			||||||
	{registered, [$(call comma_list,$(PROJECT)_sup $(PROJECT_REGISTERED))]},
 | 
						{registered, [$(call comma_list,$(PROJECT)_sup $(PROJECT_REGISTERED))]},
 | 
				
			||||||
	{applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(DEPS))]},
 | 
						{applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]},
 | 
				
			||||||
	{mod, {$(PROJECT_MOD), []}},
 | 
						{mod, {$(PROJECT_MOD), []}},
 | 
				
			||||||
	{env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),)
 | 
						{env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),)
 | 
				
			||||||
]}.
 | 
					]}.
 | 
				
			||||||
| 
						 | 
					@ -5357,7 +5379,7 @@ install-docs:: install-asciidoc
 | 
				
			||||||
install-asciidoc: asciidoc-manual
 | 
					install-asciidoc: asciidoc-manual
 | 
				
			||||||
	$(foreach s,$(MAN_SECTIONS),\
 | 
						$(foreach s,$(MAN_SECTIONS),\
 | 
				
			||||||
		mkdir -p $(MAN_INSTALL_PATH)/man$s/ && \
 | 
							mkdir -p $(MAN_INSTALL_PATH)/man$s/ && \
 | 
				
			||||||
		install -g `id -u` -o `id -g` -m 0644 doc/man$s/*.gz $(MAN_INSTALL_PATH)/man$s/;)
 | 
							install -g `id -g` -o `id -u` -m 0644 doc/man$s/*.gz $(MAN_INSTALL_PATH)/man$s/;)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
distclean-asciidoc-manual:
 | 
					distclean-asciidoc-manual:
 | 
				
			||||||
	$(gen_verbose) rm -rf $(addprefix doc/man,$(MAN_SECTIONS))
 | 
						$(gen_verbose) rm -rf $(addprefix doc/man,$(MAN_SECTIONS))
 | 
				
			||||||
| 
						 | 
					@ -6272,12 +6294,13 @@ endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EDOC_OPTS ?=
 | 
					EDOC_OPTS ?=
 | 
				
			||||||
EDOC_SRC_DIRS ?=
 | 
					EDOC_SRC_DIRS ?=
 | 
				
			||||||
 | 
					EDOC_OUTPUT ?= doc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define edoc.erl
 | 
					define edoc.erl
 | 
				
			||||||
	SrcPaths = lists:foldl(fun(P, Acc) ->
 | 
						SrcPaths = lists:foldl(fun(P, Acc) ->
 | 
				
			||||||
		filelib:wildcard(atom_to_list(P) ++ "/{src,c_src}") ++ Acc
 | 
							filelib:wildcard(atom_to_list(P) ++ "/{src,c_src}") ++ Acc
 | 
				
			||||||
	end, [], [$(call comma_list,$(patsubst %,'%',$(EDOC_SRC_DIRS)))]),
 | 
						end, [], [$(call comma_list,$(patsubst %,'%',$(EDOC_SRC_DIRS)))]),
 | 
				
			||||||
	DefaultOpts = [{source_path, SrcPaths}, {subpackages, false}],
 | 
						DefaultOpts = [{dir, "$(EDOC_OUTPUT)"}, {source_path, SrcPaths}, {subpackages, false}],
 | 
				
			||||||
	edoc:application($(1), ".", [$(2)] ++ DefaultOpts),
 | 
						edoc:application($(1), ".", [$(2)] ++ DefaultOpts),
 | 
				
			||||||
	halt(0).
 | 
						halt(0).
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
| 
						 | 
					@ -6296,7 +6319,7 @@ edoc: distclean-edoc doc-deps
 | 
				
			||||||
	$(gen_verbose) $(call erlang,$(call edoc.erl,$(PROJECT),$(EDOC_OPTS)))
 | 
						$(gen_verbose) $(call erlang,$(call edoc.erl,$(PROJECT),$(EDOC_OPTS)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
distclean-edoc:
 | 
					distclean-edoc:
 | 
				
			||||||
	$(gen_verbose) rm -f doc/*.css doc/*.html doc/*.png doc/edoc-info
 | 
						$(gen_verbose) rm -f $(EDOC_OUTPUT)/*.css $(EDOC_OUTPUT)/*.html $(EDOC_OUTPUT)/*.png $(EDOC_OUTPUT)/edoc-info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copyright (c) 2013-2016, Loïc Hoguin <essen@ninenines.eu>
 | 
					# Copyright (c) 2013-2016, Loïc Hoguin <essen@ninenines.eu>
 | 
				
			||||||
# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
					# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
				
			||||||
| 
						 | 
					@ -6448,7 +6471,7 @@ define eunit.erl
 | 
				
			||||||
	case "$(COVER)" of
 | 
						case "$(COVER)" of
 | 
				
			||||||
		"" -> ok;
 | 
							"" -> ok;
 | 
				
			||||||
		_ ->
 | 
							_ ->
 | 
				
			||||||
			cover:export("eunit.coverdata")
 | 
								cover:export("$(COVER_DATA_DIR)/eunit.coverdata")
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	halt()
 | 
						halt()
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
| 
						 | 
					@ -6457,10 +6480,10 @@ EUNIT_ERL_OPTS += -pa $(TEST_DIR) $(DEPS_DIR)/*/ebin $(APPS_DIR)/*/ebin $(CURDIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifdef t
 | 
					ifdef t
 | 
				
			||||||
ifeq (,$(findstring :,$(t)))
 | 
					ifeq (,$(findstring :,$(t)))
 | 
				
			||||||
eunit: test-build
 | 
					eunit: test-build cover-data-dir
 | 
				
			||||||
	$(gen_verbose) $(call erlang,$(call eunit.erl,['$(t)']),$(EUNIT_ERL_OPTS))
 | 
						$(gen_verbose) $(call erlang,$(call eunit.erl,['$(t)']),$(EUNIT_ERL_OPTS))
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
eunit: test-build
 | 
					eunit: test-build cover-data-dir
 | 
				
			||||||
	$(gen_verbose) $(call erlang,$(call eunit.erl,fun $(t)/0),$(EUNIT_ERL_OPTS))
 | 
						$(gen_verbose) $(call erlang,$(call eunit.erl,fun $(t)/0),$(EUNIT_ERL_OPTS))
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
| 
						 | 
					@ -6470,7 +6493,7 @@ EUNIT_TEST_MODS = $(notdir $(basename $(call core_find,$(TEST_DIR)/,*.erl)))
 | 
				
			||||||
EUNIT_MODS = $(foreach mod,$(EUNIT_EBIN_MODS) $(filter-out \
 | 
					EUNIT_MODS = $(foreach mod,$(EUNIT_EBIN_MODS) $(filter-out \
 | 
				
			||||||
	$(patsubst %,%_tests,$(EUNIT_EBIN_MODS)),$(EUNIT_TEST_MODS)),'$(mod)')
 | 
						$(patsubst %,%_tests,$(EUNIT_EBIN_MODS)),$(EUNIT_TEST_MODS)),'$(mod)')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eunit: test-build $(if $(IS_APP),,apps-eunit)
 | 
					eunit: test-build $(if $(IS_APP),,apps-eunit) cover-data-dir
 | 
				
			||||||
	$(gen_verbose) $(call erlang,$(call eunit.erl,[$(call comma_list,$(EUNIT_MODS))]),$(EUNIT_ERL_OPTS))
 | 
						$(gen_verbose) $(call erlang,$(call eunit.erl,[$(call comma_list,$(EUNIT_MODS))]),$(EUNIT_ERL_OPTS))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifneq ($(ALL_APPS_DIRS),)
 | 
					ifneq ($(ALL_APPS_DIRS),)
 | 
				
			||||||
| 
						 | 
					@ -6498,7 +6521,7 @@ define proper_check.erl
 | 
				
			||||||
			case atom_to_list(F) of
 | 
								case atom_to_list(F) of
 | 
				
			||||||
				"prop_" ++ _ ->
 | 
									"prop_" ++ _ ->
 | 
				
			||||||
					io:format("Testing ~p:~p/0~n", [M, F]),
 | 
										io:format("Testing ~p:~p/0~n", [M, F]),
 | 
				
			||||||
					proper:quickcheck(M:F());
 | 
										proper:quickcheck(M:F(), nocolors);
 | 
				
			||||||
				_ ->
 | 
									_ ->
 | 
				
			||||||
					true
 | 
										true
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
| 
						 | 
					@ -6508,7 +6531,7 @@ define proper_check.erl
 | 
				
			||||||
		case $(1) of
 | 
							case $(1) of
 | 
				
			||||||
			all -> [true] =:= lists:usort([Module(M) || M <- [$(call comma_list,$(3))]]);
 | 
								all -> [true] =:= lists:usort([Module(M) || M <- [$(call comma_list,$(3))]]);
 | 
				
			||||||
			module -> Module($(2));
 | 
								module -> Module($(2));
 | 
				
			||||||
			function -> proper:quickcheck($(2))
 | 
								function -> proper:quickcheck($(2), nocolors)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	of
 | 
						of
 | 
				
			||||||
		true -> halt(0);
 | 
							true -> halt(0);
 | 
				
			||||||
| 
						 | 
					@ -6656,6 +6679,69 @@ build-shell-deps: $(ALL_SHELL_DEPS_DIRS)
 | 
				
			||||||
shell: build-shell-deps
 | 
					shell: build-shell-deps
 | 
				
			||||||
	$(gen_verbose) $(SHELL_ERL) -pa $(SHELL_PATHS) $(SHELL_OPTS)
 | 
						$(gen_verbose) $(SHELL_ERL) -pa $(SHELL_PATHS) $(SHELL_OPTS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright 2017, Stanislaw Klekot <dozzie@jarowit.net>
 | 
				
			||||||
 | 
					# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: distclean-sphinx sphinx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SPHINX_BUILD ?= sphinx-build
 | 
				
			||||||
 | 
					SPHINX_SOURCE ?= doc
 | 
				
			||||||
 | 
					SPHINX_CONFDIR ?=
 | 
				
			||||||
 | 
					SPHINX_FORMATS ?= html
 | 
				
			||||||
 | 
					SPHINX_DOCTREES ?= $(ERLANG_MK_TMP)/sphinx.doctrees
 | 
				
			||||||
 | 
					SPHINX_OPTS ?=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#sphinx_html_opts =
 | 
				
			||||||
 | 
					#sphinx_html_output = html
 | 
				
			||||||
 | 
					#sphinx_man_opts =
 | 
				
			||||||
 | 
					#sphinx_man_output = man
 | 
				
			||||||
 | 
					#sphinx_latex_opts =
 | 
				
			||||||
 | 
					#sphinx_latex_output = latex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Helpers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sphinx_build_0 = @echo " SPHINX" $1; $(SPHINX_BUILD) -N -q
 | 
				
			||||||
 | 
					sphinx_build_1 = $(SPHINX_BUILD) -N
 | 
				
			||||||
 | 
					sphinx_build_2 = set -x; $(SPHINX_BUILD)
 | 
				
			||||||
 | 
					sphinx_build = $(sphinx_build_$(V))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define sphinx.build
 | 
				
			||||||
 | 
					$(call sphinx_build,$1) -b $1 -d $(SPHINX_DOCTREES) $(if $(SPHINX_CONFDIR),-c $(SPHINX_CONFDIR)) $(SPHINX_OPTS) $(sphinx_$1_opts) -- $(SPHINX_SOURCE) $(call sphinx.output,$1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define sphinx.output
 | 
				
			||||||
 | 
					$(if $(sphinx_$1_output),$(sphinx_$1_output),$1)
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Targets.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifneq ($(wildcard $(if $(SPHINX_CONFDIR),$(SPHINX_CONFDIR),$(SPHINX_SOURCE))/conf.py),)
 | 
				
			||||||
 | 
					docs:: sphinx
 | 
				
			||||||
 | 
					distclean:: distclean-sphinx
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					help::
 | 
				
			||||||
 | 
						$(verbose) printf "%s\n" "" \
 | 
				
			||||||
 | 
							"Sphinx targets:" \
 | 
				
			||||||
 | 
							"  sphinx      Generate Sphinx documentation." \
 | 
				
			||||||
 | 
							"" \
 | 
				
			||||||
 | 
							"ReST sources and 'conf.py' file are expected in directory pointed by" \
 | 
				
			||||||
 | 
							"SPHINX_SOURCE ('doc' by default). SPHINX_FORMATS lists formats to build (only" \
 | 
				
			||||||
 | 
							"'html' format is generated by default); target directory can be specified by" \
 | 
				
			||||||
 | 
							'setting sphinx_$${format}_output, for example: sphinx_html_output = output/html' \
 | 
				
			||||||
 | 
							"Additional Sphinx options can be set in SPHINX_OPTS."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Plugin-specific targets.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sphinx:
 | 
				
			||||||
 | 
						$(foreach F,$(SPHINX_FORMATS),$(call sphinx.build,$F))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean-sphinx:
 | 
				
			||||||
 | 
						$(gen_verbose) rm -rf $(filter-out $(SPHINX_SOURCE),$(foreach F,$(SPHINX_FORMATS),$(call sphinx.output,$F)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copyright (c) 2017, Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com>
 | 
					# Copyright (c) 2017, Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com>
 | 
				
			||||||
# This file is contributed to erlang.mk and subject to the terms of the ISC License.
 | 
					# This file is contributed to erlang.mk and subject to the terms of the ISC License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6761,23 +6847,20 @@ distclean-xref:
 | 
				
			||||||
# Copyright (c) 2015, Viktor Söderqvist <viktor@zuiderkwast.se>
 | 
					# Copyright (c) 2015, Viktor Söderqvist <viktor@zuiderkwast.se>
 | 
				
			||||||
# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
					# This file is part of erlang.mk and subject to the terms of the ISC License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COVER_REPORT_DIR = cover
 | 
					COVER_REPORT_DIR ?= cover
 | 
				
			||||||
 | 
					COVER_DATA_DIR ?= $(CURDIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Hook in coverage to ct
 | 
					# Hook in coverage to ct
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifdef COVER
 | 
					ifdef COVER
 | 
				
			||||||
ifdef CT_RUN
 | 
					ifdef CT_RUN
 | 
				
			||||||
ifneq ($(wildcard $(TEST_DIR)),)
 | 
					ifneq ($(wildcard $(TEST_DIR)),)
 | 
				
			||||||
# All modules in 'ebin'
 | 
					 | 
				
			||||||
COVER_MODS = $(notdir $(basename $(call core_ls,ebin/*.beam)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
test-build:: $(TEST_DIR)/ct.cover.spec
 | 
					test-build:: $(TEST_DIR)/ct.cover.spec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(TEST_DIR)/ct.cover.spec:
 | 
					$(TEST_DIR)/ct.cover.spec: cover-data-dir
 | 
				
			||||||
	$(verbose) echo Cover mods: $(COVER_MODS)
 | 
					 | 
				
			||||||
	$(gen_verbose) printf "%s\n" \
 | 
						$(gen_verbose) printf "%s\n" \
 | 
				
			||||||
		'{incl_mods,[$(subst $(space),$(comma),$(COVER_MODS))]}.' \
 | 
							"{incl_app, '$(PROJECT)', details}." \
 | 
				
			||||||
		'{export,"$(CURDIR)/ct.coverdata"}.' > $@
 | 
							'{export,"$(abspath $(COVER_DATA_DIR))/ct.coverdata"}.' > $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CT_RUN += -cover $(TEST_DIR)/ct.cover.spec
 | 
					CT_RUN += -cover $(TEST_DIR)/ct.cover.spec
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					@ -6791,6 +6874,13 @@ ifneq ($(COVER_REPORT_DIR),)
 | 
				
			||||||
tests::
 | 
					tests::
 | 
				
			||||||
	$(verbose) $(MAKE) --no-print-directory cover-report
 | 
						$(verbose) $(MAKE) --no-print-directory cover-report
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cover-data-dir: | $(COVER_DATA_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(COVER_DATA_DIR):
 | 
				
			||||||
 | 
						$(verbose) mkdir -p $(COVER_DATA_DIR)
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					cover-data-dir:
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean:: coverdata-clean
 | 
					clean:: coverdata-clean
 | 
				
			||||||
| 
						 | 
					@ -6813,19 +6903,19 @@ help::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Plugin specific targets
 | 
					# Plugin specific targets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COVERDATA = $(filter-out all.coverdata,$(wildcard *.coverdata))
 | 
					COVERDATA = $(filter-out $(COVER_DATA_DIR)/all.coverdata,$(wildcard $(COVER_DATA_DIR)/*.coverdata))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.PHONY: coverdata-clean
 | 
					.PHONY: coverdata-clean
 | 
				
			||||||
coverdata-clean:
 | 
					coverdata-clean:
 | 
				
			||||||
	$(gen_verbose) rm -f *.coverdata $(TEST_DIR)/ct.cover.spec
 | 
						$(gen_verbose) rm -f $(COVER_DATA_DIR)/*.coverdata $(TEST_DIR)/ct.cover.spec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Merge all coverdata files into one.
 | 
					# Merge all coverdata files into one.
 | 
				
			||||||
define cover_export.erl
 | 
					define cover_export.erl
 | 
				
			||||||
	$(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),)
 | 
						$(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),)
 | 
				
			||||||
	cover:export("$@"), halt(0).
 | 
						cover:export("$(COVER_DATA_DIR)/$@"), halt(0).
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all.coverdata: $(COVERDATA)
 | 
					all.coverdata: $(COVERDATA) cover-data-dir
 | 
				
			||||||
	$(gen_verbose) $(call erlang,$(cover_export.erl))
 | 
						$(gen_verbose) $(call erlang,$(cover_export.erl))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to
 | 
					# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to
 | 
				
			||||||
| 
						 | 
					@ -6836,6 +6926,7 @@ ifneq ($(COVER_REPORT_DIR),)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cover-report-clean:
 | 
					cover-report-clean:
 | 
				
			||||||
	$(gen_verbose) rm -rf $(COVER_REPORT_DIR)
 | 
						$(gen_verbose) rm -rf $(COVER_REPORT_DIR)
 | 
				
			||||||
 | 
						$(if $(shell ls -A $(COVER_DATA_DIR)/),,$(verbose) rmdir $(COVER_DATA_DIR))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(COVERDATA),)
 | 
					ifeq ($(COVERDATA),)
 | 
				
			||||||
cover-report:
 | 
					cover-report:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue