Browse Source

Add the target help-plugins to document external plugins

It's better than extending help:: because this gets printed
at the end instead of before Erlang.mk's own help.
Loïc Hoguin 6 years ago
parent
commit
305080b98a
3 changed files with 38 additions and 0 deletions
  1. 5 0
      core/plugins.mk
  2. 9 0
      doc/src/guide/external_plugins.asciidoc
  3. 24 0
      test/core_plugins.mk

+ 5 - 0
core/plugins.mk

@@ -9,3 +9,8 @@ $(foreach p,$(DEP_PLUGINS),\
 	$(eval $(if $(findstring /,$p),\
 	$(eval $(if $(findstring /,$p),\
 		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
 		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
 		$(call core_dep_plugin,$p/plugins.mk,$p))))
 		$(call core_dep_plugin,$p/plugins.mk,$p))))
+
+help:: help-plugins
+
+help-plugins::
+	$(verbose) :

+ 9 - 0
doc/src/guide/external_plugins.asciidoc

@@ -76,6 +76,15 @@ This allows users to not only be able to select individual
 plugins, but also select all plugins from the dependency
 plugins, but also select all plugins from the dependency
 in one go if they wish to do so.
 in one go if they wish to do so.
 
 
+Plugins can include some help text by extending the target
+`help-plugins`:
+
+[source,make]
+----
+help-plugins::
+	$(verbose) printf "%s\n" "" "Run benchmark: $(MAKE) perfs"
+----
+
 === Early-stage plugins
 === Early-stage plugins
 
 
 Plugins declared in `DEP_PLUGINS` are loaded near the end of Erlang.mk.
 Plugins declared in `DEP_PLUGINS` are loaded near the end of Erlang.mk.

+ 24 - 0
test/core_plugins.mk

@@ -85,6 +85,30 @@ core-plugins-early-local: build clean
 	$i "Run 'make plugin2' and check that it prints plugin2"
 	$i "Run 'make plugin2' and check that it prints plugin2"
 	$t $(MAKE) --no-print-directory -C $(APP) plugin2 | grep -qw plugin2
 	$t $(MAKE) --no-print-directory -C $(APP) plugin2 | grep -qw plugin2
 
 
+core-plugins-early-help: build clean
+
+	$i "Bootstrap a new OTP library named $(APP)"
+	$t mkdir $(APP)/
+	$t cp ../erlang.mk $(APP)/
+	$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
+
+	$i "Write external plugin helpful_plugin"
+	$t mkdir $(APP)/helpful_plugin
+	$t echo "help-plugins:: ; @echo WORKING" >> $(APP)/helpful_plugin/early-plugins.mk
+
+	$i "Inject external plugin dependencies into $(APP)"
+	$t echo 'BUILD_DEPS = helpful_plugin' >> $(APP)/Makefile.tmp
+	$t echo 'DEP_EARLY_PLUGINS = helpful_plugin' >> $(APP)/Makefile.tmp
+	$t echo 'dep_helpful_plugin = cp helpful_plugin' >> $(APP)/Makefile.tmp
+	$t cat $(APP)/Makefile >> $(APP)/Makefile.tmp
+	$t mv $(APP)/Makefile.tmp $(APP)/Makefile
+
+	$i "Build the application"
+	$t $(MAKE) -C $(APP) $v
+
+	$i "Run 'make help' and check that it prints external plugins help"
+	$t test -n "`$(MAKE) -C $(APP) help` | grep WORKING"
+
 core-plugins-local: build clean
 core-plugins-local: build clean
 
 
 	$i "Bootstrap a new OTP library named $(APP)"
 	$i "Bootstrap a new OTP library named $(APP)"