Fix makefile include order by using sort/wildcard.

The 'include' directive in GNU make supports wildcards, but their
expansion has no defined sort order (GLOB_NOSORT is passed to glob()).
Usually this doesn't matter. However, there is at least one case where
it does make a difference: toolchain/*/*.mk includes both the
definitions of the external toolchain packages and
pkg-toolchain-external.mk, but pkg-toolchain-external.mk must be
included first.

For predictability, use ordered 'include $(sort $(wildcard ...))'
instead of unordered direct 'include */*.mk' everywhere.

Fixes [1] reported by Petr Vorel:

  make: *** No rule to make target 'toolchain-external-custom', needed by '.../build/toolchain-external/.stamp_configured'.  Stop.

[1] http://lists.busybox.net/pipermail/buildroot/2017-November/206969.html

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
Tested-by: Petr Vorel <petr.vorel@gmail.com>
[Arnout: also sort the one remaining include, of the external docs]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
This commit is contained in:
Peter Seiderer 2017-11-21 20:13:30 +01:00 committed by Arnout Vandecappelle (Essensium/Mind)
parent ca4009fc24
commit b9d2d4cb4e
4 changed files with 7 additions and 7 deletions

View File

@ -483,13 +483,13 @@ include system/system.mk
include package/Makefile.in
# arch/arch.mk.* must be after package/Makefile.in because it may need to
# complement variables defined therein, like BR_NO_CHECK_HASH_FOR.
-include $(wildcard arch/arch.mk.*)
-include $(sort $(wildcard arch/arch.mk.*))
include support/dependencies/dependencies.mk
PACKAGES += $(DEPENDENCIES_HOST_PREREQ)
include toolchain/*.mk
include toolchain/*/*.mk
include $(sort $(wildcard toolchain/*.mk))
include $(sort $(wildcard toolchain/*/*.mk))
# Include the package override file if one has been provided in the
# configuration.
@ -1109,7 +1109,7 @@ print-version:
./support/testing/run-tests -l 2>&1 | sed -r -e '/^test_run \((.*)\).*/!d; s//\1: *runtime_test/' | LC_ALL=C sort >> $@
include docs/manual/manual.mk
-include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(dir)/docs/*/*.mk)
-include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(sort $(wildcard $(dir)/docs/*/*.mk)))
.PHONY: $(noconfig_targets)

View File

@ -1 +1 @@
include package/gstreamer/*/*.mk
include $(sort $(wildcard package/gstreamer/*/*.mk))

View File

@ -1 +1 @@
include package/gstreamer1/*/*.mk
include $(sort $(wildcard package/gstreamer1/*/*.mk))

View File

@ -25,4 +25,4 @@ $(error No prefix selected for external toolchain package $(BR2_PACKAGE_PROVIDES
endif
endif
include toolchain/toolchain-external/*/*.mk
include $(sort $(wildcard toolchain/toolchain-external/*/*.mk))