diff options
author | jdamanalo <[email protected]> | 2023-05-08 23:45:43 +0800 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2023-05-12 13:25:33 +0200 |
commit | 7f7db5d1e6a442aee5dba4aa98dd0594f5f3513d (patch) | |
tree | 57c7d3d0397eafa40167497dd1413739f4906a09 | |
parent | 0f3874feae7ec510c1d2704a37c16d5e47fe9c7d (diff) | |
download | erlang.mk-7f7db5d1e6a442aee5dba4aa98dd0594f5f3513d.tar.gz erlang.mk-7f7db5d1e6a442aee5dba4aa98dd0594f5f3513d.tar.bz2 erlang.mk-7f7db5d1e6a442aee5dba4aa98dd0594f5f3513d.zip |
Support optional applications
Loïc: Added more info to guide.
-rw-r--r-- | core/erlc.mk | 6 | ||||
-rw-r--r-- | doc/src/guide/deps.asciidoc | 12 | ||||
-rw-r--r-- | test/core_deps.mk | 24 |
3 files changed, 40 insertions, 2 deletions
diff --git a/core/erlc.mk b/core/erlc.mk index 71ba5b9..7c94907 100644 --- a/core/erlc.mk +++ b/core/erlc.mk @@ -65,7 +65,8 @@ define app_file {id$(comma)$(space)"$(1)"}$(comma)) {modules, [$(call comma_list,$(2))]}, {registered, []}, - {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(OPTIONAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {optional_applications, [$(call comma_list,$(OPTIONAL_DEPS))]}, {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) ]}. endef @@ -77,7 +78,8 @@ define app_file {id$(comma)$(space)"$(1)"}$(comma)) {modules, [$(call comma_list,$(2))]}, {registered, [$(call comma_list,$(PROJECT)_sup $(PROJECT_REGISTERED))]}, - {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(OPTIONAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {optional_applications, [$(call comma_list,$(OPTIONAL_DEPS))]}, {mod, {$(PROJECT_MOD), []}}, {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) ]}. diff --git a/doc/src/guide/deps.asciidoc b/doc/src/guide/deps.asciidoc index e5dda80..c46dce6 100644 --- a/doc/src/guide/deps.asciidoc +++ b/doc/src/guide/deps.asciidoc @@ -132,6 +132,18 @@ target `deps::` before including 'erlang.mk', for example: [source,make] deps:: $(CURDIR)/deps/triq +Sometimes dependencies are allowed to be missing. However, your application +may depend on an optional application being started. To ensure that an +optional dependency is started before your application, the variable +`OPTIONAL_DEPS` may be used: + +[source,make] +OPTIONAL_DEPS = quicer + +The top-level project can then decide whether to include this +application by adding it to its `BUILD_DEPS` and including +it in the release dependencies. + ==== Modifying the dependency source or version By default, Erlang.mk will look into its package index to diff --git a/test/core_deps.mk b/test/core_deps.mk index 27c3b1f..1dbf7b8 100644 --- a/test/core_deps.mk +++ b/test/core_deps.mk @@ -1124,6 +1124,30 @@ core-deps-mv-rebar: init $i "Build the application" $t $(MAKE) -C $(APP)-moved $v +core-deps-optional: init + + $i "Bootstrap a new OTP application named $(APP)" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v + + $i "Add quicer to the list of optional dependencies" + $t perl -ni.bak -e 'print;if ($$.==1) {print "OPTIONAL_DEPS = quicer\n"}' $(APP)/Makefile + + $i "Build the application" + $t $(MAKE) -C $(APP) $v + + $i "Check that no dependencies were fetched" + $t test ! -e $(APP)/deps + + $i "Check that the application was compiled correctly" + $t $(ERL) -pa $(APP)/ebin/ -eval " \ + ok = application:start($(APP)), \ + {ok, Deps} = application:get_key($(APP), applications), \ + true = lists:member(quicer, Deps), \ + {ok, [quicer]} = application:get_key($(APP), optional_applications), \ + halt()" + # A lower-level dependency of the first dependency always # wins over a lower-level dependency of the second dependency. core-deps-order-first: init |