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),\
 		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$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
 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
 
 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"
 	$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
 
 	$i "Bootstrap a new OTP library named $(APP)"