Browse Source

Add tweaks and tests for the WITHOUT feature

Loïc Hoguin 8 years ago
parent
commit
0305622f25
6 changed files with 124 additions and 83 deletions
  1. 7 6
      Makefile
  2. 3 7
      core/core.mk
  3. 0 11
      doc/src/guide/getting_started.asciidoc
  4. 22 11
      doc/src/guide/updating.asciidoc
  5. 0 48
      test/Makefile
  6. 92 0
      test/core_misc.mk

+ 7 - 6
Makefile

@@ -15,15 +15,16 @@
 WITHOUT ?=
 WITHOUT ?=
 
 
 BUILD_CONFIG_FILE ?= $(CURDIR)/build.config
 BUILD_CONFIG_FILE ?= $(CURDIR)/build.config
-ifeq ($(WITHOUT),)
+
+ifeq ($(strip $(WITHOUT)),)
 BUILD_CONFIG = $(shell sed "s/\#.*//" $(BUILD_CONFIG_FILE))
 BUILD_CONFIG = $(shell sed "s/\#.*//" $(BUILD_CONFIG_FILE))
 else
 else
 empty := $(subst ,, )
 empty := $(subst ,, )
-BUILD_EXCLUDE = "^$(subst $(empty),\|^,$(WITHOUT))"
-BUILD_CONFIG = $(shell sed "s/\#.*//" $(BUILD_CONFIG_FILE)|grep -v $(BUILD_EXCLUDE))
+BUILD_CONFIG = $(shell sed "s/\#.*//" $(BUILD_CONFIG_FILE) \
+	| grep -v "^$(subst $(empty),\|^,$(WITHOUT))")
 endif
 endif
 
 
-ERLANG_MK = erlang.mk
+ERLANG_MK ?= erlang.mk
 ERLANG_MK_VERSION = $(shell git describe --tags --dirty)
 ERLANG_MK_VERSION = $(shell git describe --tags --dirty)
 
 
 .PHONY: all check
 .PHONY: all check
@@ -31,8 +32,8 @@ ERLANG_MK_VERSION = $(shell git describe --tags --dirty)
 all:
 all:
 	export LC_COLLATE=C; \
 	export LC_COLLATE=C; \
 	awk 'FNR==1 && NR!=1{print ""}1' $(patsubst %,%.mk,$(BUILD_CONFIG)) \
 	awk 'FNR==1 && NR!=1{print ""}1' $(patsubst %,%.mk,$(BUILD_CONFIG)) \
-		| sed 's/^ERLANG_MK_VERSION = .*/ERLANG_MK_VERSION = $(ERLANG_MK_VERSION)/' \
-		| sed 's:^ERLANG_MK_WITHOUT = .*:ERLANG_MK_WITHOUT = $(WITHOUT):' > $(ERLANG_MK)
+		| sed 's/^ERLANG_MK_VERSION =.*/ERLANG_MK_VERSION = $(ERLANG_MK_VERSION)/' \
+		| sed 's:^ERLANG_MK_WITHOUT =.*:ERLANG_MK_WITHOUT = $(WITHOUT):' > $(ERLANG_MK)
 
 
 ifdef p
 ifdef p
 # Remove p from the list of variables since that conflicts with bootstrapping.
 # Remove p from the list of variables since that conflicts with bootstrapping.

+ 3 - 7
core/core.mk

@@ -18,6 +18,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
 export ERLANG_MK_FILENAME
 export ERLANG_MK_FILENAME
 
 
 ERLANG_MK_VERSION = rolling
 ERLANG_MK_VERSION = rolling
+ERLANG_MK_WITHOUT =
 
 
 # Make 3.81 and 3.82 are deprecated.
 # Make 3.81 and 3.82 are deprecated.
 
 
@@ -29,9 +30,6 @@ ifeq ($(MAKE_VERSION),3.82)
 $(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html)
 $(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html)
 endif
 endif
 
 
-# Ignored plugins
-ERLANG_MK_WITHOUT = ""
-
 # Core configuration.
 # Core configuration.
 
 
 PROJECT ?= $(notdir $(CURDIR))
 PROJECT ?= $(notdir $(CURDIR))
@@ -187,16 +185,14 @@ ERLANG_MK_COMMIT ?=
 ERLANG_MK_BUILD_CONFIG ?= build.config
 ERLANG_MK_BUILD_CONFIG ?= build.config
 ERLANG_MK_BUILD_DIR ?= .erlang.mk.build
 ERLANG_MK_BUILD_DIR ?= .erlang.mk.build
 
 
-WITHOUT ?= $(ERLANG_MK_WITHOUT)
-WITHOUT := $(strip $(WITHOUT))
-
+erlang-mk: WITHOUT ?= $(ERLANG_MK_WITHOUT)
 erlang-mk:
 erlang-mk:
 	git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR)
 	git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR)
 ifdef ERLANG_MK_COMMIT
 ifdef ERLANG_MK_COMMIT
 	cd $(ERLANG_MK_BUILD_DIR) && git checkout $(ERLANG_MK_COMMIT)
 	cd $(ERLANG_MK_BUILD_DIR) && git checkout $(ERLANG_MK_COMMIT)
 endif
 endif
 	if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR)/build.config; fi
 	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) WITHOUT='$(WITHOUT)'
+	$(MAKE) -C $(ERLANG_MK_BUILD_DIR) WITHOUT='$(strip $(WITHOUT))'
 	cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk
 	cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk
 	rm -rf $(ERLANG_MK_BUILD_DIR)
 	rm -rf $(ERLANG_MK_BUILD_DIR)
 
 

+ 0 - 11
doc/src/guide/getting_started.asciidoc

@@ -78,17 +78,6 @@ to bootstrap. This operation is done only once. Consult the
 xref:updating[Updating Erlang.mk] chapter for more
 xref:updating[Updating Erlang.mk] chapter for more
 information.
 information.
 
 
-[NOTE]
-----
-By default the file contains a package index. To filter it, run the command
-above with the `WITHOUT=index` argument.
-
-[source,bash]
-$ make -f erlang.mk bootstrap WITHOUT=index
-
-This command will generate the file without the index.
-----
-
 Of course, the generated project can now be compiled:
 Of course, the generated project can now be compiled:
 
 
 [source,bash]
 [source,bash]

+ 22 - 11
doc/src/guide/updating.asciidoc

@@ -47,10 +47,28 @@ Yep, it's that easy.
 
 
 === Customizing the build
 === Customizing the build
 
 
-Erlang.mk allows you to customize which plugins are to be included
-in the 'erlang.mk' file. You can do so by maintaining your own
-'build.config' file in your repository. Erlang.mk will automatically
-use it the next time you run `make erlang-mk`.
+Erlang.mk allows you to customize which components are to be included
+in the 'erlang.mk' file. The `WITHOUT` variable allows you to
+remove components from the default Erlang.mk build. The 'build.config'
+file lets you define exactly what goes in (including your own code!),
+and in what order.
+
+The `WITHOUT` file contains the list of components to exclude from
+the build. For example, to exclude the package index and the EDoc
+plugin when bootstrapping your application:
+
+[source,bash]
+$ make -f erlang.mk bootstrap WITHOUT="index plugins/edoc"
+
+The generated Erlang.mk will never include those components when
+you update it, until you change your mind and use the `WITHOUT`
+variable again when you upgrade:
+
+[source,bash]
+$ make erlang-mk WITHOUT=index
+
+The 'build.config' file is automatically used when you bootstrap
+Erlang.mk or when you update it with `make erlang-mk`.
 
 
 The 'build.config' file contains the list of all files that will
 The 'build.config' file contains the list of all files that will
 be built into the resulting 'erlang.mk' file. You can start from
 be built into the resulting 'erlang.mk' file. You can start from
@@ -61,10 +79,3 @@ You can also name the file differently or put it in a separate folder
 by modifying the value for `ERLANG_MK_BUILD_CONFIG`. You can also
 by modifying the value for `ERLANG_MK_BUILD_CONFIG`. You can also
 tell Erlang.mk to use a different temporary directory by changing
 tell Erlang.mk to use a different temporary directory by changing
 the `ERLANG_MK_BUILD_DIR` variable.
 the `ERLANG_MK_BUILD_DIR` variable.
-
-Alternatively you can filter out a plugin in the build config by using the
-`WITHOUT` variable the first time you generate the file. For example this
-commande will filter the index plugin:
-
-[source,bash]
-$ make -f erlang.mk WITHOUT=index

+ 0 - 48
test/Makefile

@@ -123,54 +123,6 @@ endef
 
 
 $(eval $(foreach t,$(patsubst %.mk,%,$(patsubst plugin_%,%,$(wildcard plugin_*.mk))),$(call include_plugin,$t)))
 $(eval $(foreach t,$(patsubst %.mk,%,$(patsubst plugin_%,%,$(wildcard plugin_*.mk))),$(call include_plugin,$t)))
 
 
-# Tests that don't easily fit into other categories.
-
-core:: core-clean-crash-dump core-distclean-tmp core-help
-
-.PHONY: core-clean-crash-dump core-distclean-tmp core-help
-
-core-clean-crash-dump: 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 "Create a fake erl_crash.dump file"
-	$t touch $(APP)/erl_crash.dump
-
-	$i "Clean the application"
-	$t $(MAKE) -C $(APP) clean $v
-
-	$i "Check that the crash dump is removed"
-	$t test ! -e $(APP)/erl_crash.dump
-
-core-distclean-tmp: build clean
-
-	$i "Bootstrap a new OTP application named $(APP)"
-	$t mkdir $(APP)/
-	$t cp ../erlang.mk $(APP)/
-	$t $(MAKE) -C $(APP) -f erlang.mk bootstrap all $v
-
-	$i "Check that a .erlang.mk directory exists"
-	$t test -d $(APP)/.erlang.mk
-
-	$i "Distclean the application"
-	$t $(MAKE) -C $(APP) distclean $v
-
-	$i "Check that .erlang.mk directory got removed"
-	$t test ! -e $(APP)/.erlang.mk
-
-core-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 "Run 'make help' and check that it prints help"
-	$t test -n "`$(MAKE) -C $(APP) help` | grep Usage"
-
 # Packages.
 # Packages.
 
 
 PACKAGES = $(foreach pkg,$(sort $(wildcard ../index/*.mk)),$(notdir $(basename $(pkg))))
 PACKAGES = $(foreach pkg,$(sort $(wildcard ../index/*.mk)),$(notdir $(basename $(pkg))))

+ 92 - 0
test/core_misc.mk

@@ -0,0 +1,92 @@
+# Core: Miscellaneous.
+#
+# The miscellaneous tests use the prefix "core-", not "core-misc-".
+
+CORE_MISC_CASES = clean-crash-dump distclean-tmp help without-edoc without-index without-many
+CORE_MISC_TARGETS = $(addprefix core-,$(CORE_MISC_CASES))
+
+.PHONY: $(CORE_MISC_TARGETS)
+
+core:: $(CORE_MISC_TARGETS)
+
+core-clean-crash-dump: 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 "Create a fake erl_crash.dump file"
+	$t touch $(APP)/erl_crash.dump
+
+	$i "Clean the application"
+	$t $(MAKE) -C $(APP) clean $v
+
+	$i "Check that the crash dump is removed"
+	$t test ! -e $(APP)/erl_crash.dump
+
+core-distclean-tmp: build clean
+
+	$i "Bootstrap a new OTP application named $(APP)"
+	$t mkdir $(APP)/
+	$t cp ../erlang.mk $(APP)/
+	$t $(MAKE) -C $(APP) -f erlang.mk bootstrap all $v
+
+	$i "Check that a .erlang.mk directory exists"
+	$t test -d $(APP)/.erlang.mk
+
+	$i "Distclean the application"
+	$t $(MAKE) -C $(APP) distclean $v
+
+	$i "Check that .erlang.mk directory got removed"
+	$t test ! -e $(APP)/.erlang.mk
+
+core-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 "Run 'make help' and check that it prints help"
+	$t test -n "`$(MAKE) -C $(APP) help` | grep Usage"
+
+core-without-edoc: clean
+
+	$i "Create a working directory for this test"
+	$t mkdir -p $(APP)/
+
+	$i "Generate a bleeding edge Erlang.mk without the EDoc plugin"
+	$t cd .. && $(MAKE) WITHOUT=plugins/edoc ERLANG_MK=$(CURDIR)/$(APP)/erlang.mk $v
+
+	$i "Confirm that the EDoc plugin was not included."
+	$t ! grep -q distclean-edoc $(APP)/erlang.mk
+
+# @todo Update Erlang.mk and confirm this sticks.
+
+core-without-index: clean
+
+	$i "Create a working directory for this test"
+	$t mkdir -p $(APP)/
+
+	$i "Generate a bleeding edge Erlang.mk without the package index"
+	$t cd .. && $(MAKE) WITHOUT=index ERLANG_MK=$(CURDIR)/$(APP)/erlang.mk $v
+
+	$i "Confirm that the index was not included."
+	$t ! grep -q pkg_cowboy $(APP)/erlang.mk
+
+# @todo Update Erlang.mk and confirm this sticks.
+
+core-without-many: clean
+
+	$i "Create a working directory for this test"
+	$t mkdir -p $(APP)/
+
+	$i "Generate a bleeding edge Erlang.mk without the index and the EDoc plugin"
+	$t cd .. && $(MAKE) WITHOUT="index plugins/edoc" ERLANG_MK=$(CURDIR)/$(APP)/erlang.mk $v
+
+	$i "Confirm that the EDoc plugin was not included."
+	$t ! grep -q distclean-edoc $(APP)/erlang.mk
+
+	$i "Confirm that the index was not included."
+	$t ! grep -q pkg_cowboy $(APP)/erlang.mk