[Buildroot] [PATCH 1 of 7 v2] infra: consistently use double dollar signs inside inner-xxx-targets
Arnout Vandecappelle
arnout at mind.be
Tue May 13 09:25:32 UTC 2014
Hi Thomas,
Thanks for taking upon you this gruelling task :-)
On 12/05/14 16:44, Thomas De Schampheleire wrote:
> The inner-xxx-targets in the buildroot package infrastructures are
> evaluated using $(eval) which causes variable references to be a bit
> different than in regular make code. As we want most references to be
> expanded only at the time of the $(eval) we should not use standard
> references $(VAR) but rather use double dollar signs $$(VAR). This includes
> function references like $(call), $(subst), etc. The only exception is the
> reference to pkgdir/pkgname and numbered variables, which are parameters to
I don't see why references to pkgdir/pkgname should be an exception. See my
comments below. So the original was perfect. (sorry, Yann :-)
> the inner block: $(1), $(2), etc.
>
> This patch introduces consistent usage of double-dollar signs throughout the
> different inner-xxx-targets blocks.
>
> In some cases, this would potentially cause circular references, in
> particular when the value of HOST_FOO_VAR would be obtained from the
> corresponding FOO_VAR if HOST_FOO_VAR is not defined. In these cases, an
> immediate assignment using := is necessary instead of a deferred assignment.
> using =.
> When such a circular assignment occurs in a variable defined with '?=',
> a special construction is necessary, as make does not have a corresponding
> '?:=' assignment. As 'FOO ?= bar' is equivalent to
> ifeq ($(origin FOO),undefined)
> FOO = bar
> endif
> we can replace such constructions with
> ifeq ($$(origin FOO),undefined)
> FOO := bar
> endif
>
>
> Benefits of these changes are:
> - behavior of variables is now again as expected. For example, setting
> $(2)_VERSION = virtual in pkg-virtual.mk will effectively work, while
> originally it would cause very odd results.
>
> - The output of 'make printvars' is now much more useful. This target shows
> the value of all variables, and the expression that led to that value.
> However, if the expression was coming from an inner-xxx-targets block, and
> was using single dollar signs, it would show in printvars as
> VAR = value (value)
> while if double dollar signs are used, it would effectively look like
> VAR = value (actual expression)
> as is intended.
> This improvement is for example effective for FOO_DL_VERSION, FOO_RAWNAME,
> FOO_SITE_METHOD and FOO_MAKE.
>
> The correctness of this patch can be verified by comparing 'make printvars'
> before and after applying this patch.
>
> Insight-provided-by: Arnout Vandecappelle <arnout at mind.be>
> Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire at gmail.com>
In case it wasn't obvious: this series is _not_ for 2014.05.
>
> ---
> v2:
> - extend change to manual, fs/common and caseconvert-helper (Yann)
> - increase consistency by also changing $(Q) in $$(Q) and the UPPERCASE
> calls in the xxx-targets (outer) block. (Yann)
>
> docs/manual/manual.mk | 14 +++---
> fs/common.mk | 14 +++---
> package/pkg-autotools.mk | 34 +++++++++-------
> package/pkg-cmake.mk | 32 ++++++++-------
> package/pkg-generic.mk | 90 +++++++++++++++++++++---------------------
> package/pkg-luarocks.mk | 12 ++--
> package/pkg-perl.mk | 48 +++++++++++-----------
> package/pkg-python.mk | 34 ++++++++-------
> package/pkg-utils.mk | 8 +-
> package/pkg-virtual.mk | 16 ++++---
> 10 files changed, 157 insertions(+), 145 deletions(-)
>
> Note: in addition to using 'make printvars' to verify this patch, a 'make
> randpackageconfig' was performed successfully.
Perhaps you should do a 'make manual' as well.
>
> diff --git a/docs/manual/manual.mk b/docs/manual/manual.mk
> --- a/docs/manual/manual.mk
> +++ b/docs/manual/manual.mk
> @@ -54,16 +54,16 @@ define GENDOC_INNER
I would add a brief comment in the beginning of GENDOC_INNER:
# Since this function will be called from within an $(eval ...)
# all variable references except the arguments must be $$-quoted.
> manual-check-dependencies-$(3):
>
> $$(O)/docs/$(1)/$(1).$(4): docs/$(1)/$(1).txt \
> - $$($(call UPPERCASE,$(1))_SOURCES) \
> + $$($$(call UPPERCASE,$(1))_SOURCES) \
> manual-check-dependencies \
> manual-check-dependencies-$(3) \
> manual-update-lists
> - $(Q)$(call MESSAGE,"Generating $(5) $(1)...")
> - $(Q)mkdir -p $$(@D)/.build
> - $(Q)rsync -au docs/$(1)/*.txt $$(@D)/.build
> - $(Q)a2x $(6) -f $(2) -d book -L -r $(TOPDIR)/docs/images \
> + $$(Q)$$(call MESSAGE,"Generating $(5) $(1)...")
> + $$(Q)mkdir -p $$(@D)/.build
> + $$(Q)rsync -au docs/$(1)/*.txt $$(@D)/.build
> + $$(Q)a2x $(6) -f $(2) -d book -L -r $$(TOPDIR)/docs/images \
> -D $$(@D) $$(@D)/.build/$(1).txt
> - -$(Q)rm -rf $$(@D)/.build
> + -$$(Q)rm -rf $$(@D)/.build
> endef
>
> ################################################################################
> @@ -82,7 +82,7 @@ define GENDOC
> $(call GENDOC_INNER,$(1),epub,epub,epub,ePUB)
> clean: $(1)-clean
> $(1)-clean:
> - $(Q)$(RM) -rf $(O)/docs/$(1)
> + $$(Q)$$(RM) -rf $$(O)/docs/$(1)
> .PHONY: $(1) $(1)-clean manual-update-lists
> endef
>
> diff --git a/fs/common.mk b/fs/common.mk
> --- a/fs/common.mk
> +++ b/fs/common.mk
> @@ -39,7 +39,7 @@ define ROOTFS_TARGET_INTERNAL
Same here: add comment.
>
> # extra deps
> ROOTFS_$(2)_DEPENDENCIES += host-fakeroot host-makedevs \
> - $(if $(PACKAGES_USERS),host-mkpasswd)
> + $$(if $$(PACKAGES_USERS),host-mkpasswd)
>
> ifeq ($$(BR2_TARGET_ROOTFS_$(2)_GZIP),y)
> ROOTFS_$(2)_COMPRESS_EXT = .gz
> @@ -69,7 +69,7 @@ endif
> $$(foreach hook,$$(ROOTFS_$(2)_PRE_GEN_HOOKS),$$(call $$(hook))$$(sep))
> rm -f $$(FAKEROOT_SCRIPT)
> rm -f $$(TARGET_DIR_WARNING_FILE)
> - rm -f $(USERS_TABLE)
> + rm -f $$(USERS_TABLE)
> echo "chown -R 0:0 $$(TARGET_DIR)" >> $$(FAKEROOT_SCRIPT)
> ifneq ($$(ROOTFS_DEVICE_TABLES),)
> cat $$(ROOTFS_DEVICE_TABLES) > $$(FULL_DEVICE_TABLE)
> @@ -80,14 +80,14 @@ endif
> echo "$$(HOST_DIR)/usr/bin/makedevs -d $$(FULL_DEVICE_TABLE) $$(TARGET_DIR)" >> $$(FAKEROOT_SCRIPT)
> endif
> ifneq ($$(ROOTFS_USERS_TABLES),)
> - cat $$(ROOTFS_USERS_TABLES) >> $(USERS_TABLE)
> + cat $$(ROOTFS_USERS_TABLES) >> $$(USERS_TABLE)
> endif
> - printf '$(subst $(sep),\n,$(PACKAGES_USERS))' >> $(USERS_TABLE)
> - PATH=$(BR_PATH) $(TOPDIR)/support/scripts/mkusers $(USERS_TABLE) $(TARGET_DIR) >> $(FAKEROOT_SCRIPT)
> + printf '$$(subst $$(sep),\n,$$(PACKAGES_USERS))' >> $$(USERS_TABLE)
> + PATH=$$(BR_PATH) $$(TOPDIR)/support/scripts/mkusers $$(USERS_TABLE) $$(TARGET_DIR) >> $$(FAKEROOT_SCRIPT)
> echo "$$(ROOTFS_$(2)_CMD)" >> $$(FAKEROOT_SCRIPT)
> chmod a+x $$(FAKEROOT_SCRIPT)
> - PATH=$(BR_PATH) $$(HOST_DIR)/usr/bin/fakeroot -- $$(FAKEROOT_SCRIPT)
> - $(INSTALL) -m 0644 support/misc/target-dir-warning.txt $$(TARGET_DIR_WARNING_FILE)
> + PATH=$$(BR_PATH) $$(HOST_DIR)/usr/bin/fakeroot -- $$(FAKEROOT_SCRIPT)
> + $$(INSTALL) -m 0644 support/misc/target-dir-warning.txt $$(TARGET_DIR_WARNING_FILE)
> - at rm -f $$(FAKEROOT_SCRIPT) $$(FULL_DEVICE_TABLE)
> ifneq ($$(ROOTFS_$(2)_COMPRESS_CMD),)
> $$(ROOTFS_$(2)_COMPRESS_CMD) $$@ > $$@$$(ROOTFS_$(2)_COMPRESS_EXT)
> diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
> --- a/package/pkg-autotools.mk
> +++ b/package/pkg-autotools.mk
> @@ -65,7 +65,7 @@ define inner-autotools-package
>
> ifndef $(2)_LIBTOOL_PATCH
> ifdef $(3)_LIBTOOL_PATCH
> - $(2)_LIBTOOL_PATCH = $($(3)_LIBTOOL_PATCH)
> + $(2)_LIBTOOL_PATCH = $$($(3)_LIBTOOL_PATCH)
> else
> $(2)_LIBTOOL_PATCH ?= YES
> endif
> @@ -73,25 +73,28 @@ endif
>
> ifndef $(2)_MAKE
> ifdef $(3)_MAKE
> - $(2)_MAKE = $($(3)_MAKE)
> + $(2)_MAKE = $$($(3)_MAKE)
> else
> - $(2)_MAKE ?= $(MAKE)
> + $(2)_MAKE ?= $$(MAKE)
> endif
> endif
>
> ifndef $(2)_AUTORECONF
> ifdef $(3)_AUTORECONF
> - $(2)_AUTORECONF = $($(3)_AUTORECONF)
> + $(2)_AUTORECONF = $$($(3)_AUTORECONF)
> else
> $(2)_AUTORECONF ?= NO
> endif
> endif
>
> +ifeq ($$(origin $(2)_AUTORECONF_OPT),undefined)
> + $(2)_AUTORECONF_OPT := $$($(3)_AUTORECONF_OPT)
> +endif
> +
> $(2)_CONF_ENV ?=
> $(2)_CONF_OPT ?=
> $(2)_MAKE_ENV ?=
> $(2)_MAKE_OPT ?=
> -$(2)_AUTORECONF_OPT ?= $($(3)_AUTORECONF_OPT)
Wouldn't it be clearer to keep this as a ?= but put it inside an
ifeq ($(4),host) ? I haven't tested whether that works, however.
> $(2)_INSTALL_OPT ?= install
> $(2)_INSTALL_STAGING_OPT ?= DESTDIR=$$(STAGING_DIR) install
> $(2)_INSTALL_TARGET_OPT ?= DESTDIR=$$(TARGET_DIR) install
> @@ -175,7 +178,7 @@ endef
> #
> define LIBTOOL_PATCH_HOOK
> @$$(call MESSAGE,"Patching libtool")
> - $(Q)if test "$$($$(PKG)_LIBTOOL_PATCH)" = "YES" \
> + $$(Q)if test "$$($$(PKG)_LIBTOOL_PATCH)" = "YES" \
> -a "$$($$(PKG)_AUTORECONF)" != "YES"; then \
> for i in `find $$($$(PKG)_SRCDIR) -name ltmain.sh`; do \
> ltmain_version=`sed -n '/^[ ]*VERSION=/{s/^[ ]*VERSION=//;p;q;}' $$$$i | \
> @@ -201,8 +204,8 @@ endif
> #
> define AUTORECONF_HOOK
> @$$(call MESSAGE,"Autoreconfiguring")
> - $(Q)cd $$($$(PKG)_SRCDIR) && $(AUTORECONF) $$($$(PKG)_AUTORECONF_OPT)
> - $(Q)if test "$$($$(PKG)_LIBTOOL_PATCH)" = "YES"; then \
> + $$(Q)cd $$($$(PKG)_SRCDIR) && $$(AUTORECONF) $$($$(PKG)_AUTORECONF_OPT)
> + $$(Q)if test "$$($$(PKG)_LIBTOOL_PATCH)" = "YES"; then \
> for i in `find $$($$(PKG)_SRCDIR) -name ltmain.sh`; do \
> ltmain_version=`sed -n '/^[ ]*VERSION=/{s/^[ ]*VERSION=//;p;q;}' $$$$i | \
> sed -e 's/\([0-9].[0-9]*\).*/\1/' -e 's/\"//'`; \
> @@ -220,10 +223,11 @@ endef
> # This must be repeated from inner-generic-package, otherwise we get an empty
> # _DEPENDENCIES if _AUTORECONF is YES. Also filter the result of _AUTORECONF
> # away from the non-host rule
> -$(2)_DEPENDENCIES ?= $(filter-out host-automake host-autoconf host-libtool \
> +ifeq ($$(origin $(2)_DEPENDENCIES),undefined)
ifeq ($(4),host)
$(2)_DEPENDENCIES ?= ....
This one I tested with printvars, and it seems to work.
> +$(2)_DEPENDENCIES := $$(filter-out host-automake host-autoconf host-libtool \
> host-toolchain $(1),\
> - $(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
> -
> + $$(patsubst host-host-%,host-%,$$(addprefix host-,$$($(3)_DEPENDENCIES))))
> +endif
>
> ifeq ($$($(2)_AUTORECONF),YES)
> $(2)_PRE_CONFIGURE_HOOKS += AUTORECONF_HOOK
> @@ -263,9 +267,9 @@ endif
> ifndef $(2)_INSTALL_STAGING_CMDS
> define $(2)_INSTALL_STAGING_CMDS
> $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_INSTALL_STAGING_OPT) -C $$($$(PKG)_SRCDIR)
> - for i in $$$$(find $(STAGING_DIR)/usr/lib* -name "*.la"); do \
> + for i in $$$$(find $$(STAGING_DIR)/usr/lib* -name "*.la"); do \
> cp -f $$$$i $$$$i~; \
> - $$(SED) "s:\(['= ]\)/usr:\\1$(STAGING_DIR)/usr:g" $$$$i; \
> + $$(SED) "s:\(['= ]\)/usr:\\1$$(STAGING_DIR)/usr:g" $$$$i; \
> done
> endef
> endif
> @@ -290,5 +294,5 @@ endef
> # autotools-package -- the target generator macro for autotools packages
> ################################################################################
>
> -autotools-package = $(call inner-autotools-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> -host-autotools-package = $(call inner-autotools-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
> +autotools-package = $(call inner-autotools-package,$(pkgname),$$(call UPPERCASE,$(pkgname)),$$(call UPPERCASE,$(pkgname)),target)
> +host-autotools-package = $(call inner-autotools-package,host-$(pkgname),$$(call UPPERCASE,host-$(pkgname)),$$(call UPPERCASE,$(pkgname)),host)
The reason not to double-$ $(pkgname) is not that it doesn't work (at least it
works for me with printvars), but that it increases the make parsing time with a
factor four (because $(pkgname) gets evaluated very often).
IMHO, mixing $ and $$ doesn't make things clearer. Therefore, I would leave
everything single-$ here and add a comment
# Using $$ for $(pkgname) is bad for performance because it is evaluated so
# often. Therefore, we use single $ for the arguments here.
(and same for all other outer functions).
> diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
> --- a/package/pkg-cmake.mk
> +++ b/package/pkg-cmake.mk
> @@ -38,14 +38,14 @@ define inner-cmake-package
>
> $(2)_CONF_ENV ?=
> $(2)_CONF_OPT ?=
> -$(2)_MAKE ?= $(MAKE)
> +$(2)_MAKE ?= $$(MAKE)
> $(2)_MAKE_ENV ?=
> $(2)_MAKE_OPT ?=
> $(2)_INSTALL_HOST_OPT ?= install
> $(2)_INSTALL_STAGING_OPT ?= DESTDIR=$$(STAGING_DIR) install
> $(2)_INSTALL_TARGET_OPT ?= DESTDIR=$$(TARGET_DIR) install
>
> -$(2)_SRCDIR = $$($(2)_DIR)/$($(2)_SUBDIR)
> +$(2)_SRCDIR = $$($(2)_DIR)/$$($(2)_SUBDIR)
> $(2)_BUILDDIR = $$($(2)_SRCDIR)
>
> #
> @@ -60,12 +60,12 @@ ifeq ($(4),target)
> define $(2)_CONFIGURE_CMDS
> (cd $$($$(PKG)_BUILDDIR) && \
> rm -f CMakeCache.txt && \
> - PATH=$(BR_PATH) \
> - $$($$(PKG)_CONF_ENV) $(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \
> + PATH=$$(BR_PATH) \
> + $$($$(PKG)_CONF_ENV) $$(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \
> -DCMAKE_TOOLCHAIN_FILE="$$(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake" \
> -DCMAKE_INSTALL_PREFIX="/usr" \
> -DCMAKE_COLOR_MAKEFILE=OFF \
> - -DBUILD_SHARED_LIBS=$(if $(BR2_PREFER_STATIC_LIB),OFF,ON) \
> + -DBUILD_SHARED_LIBS=$$(if $$(BR2_PREFER_STATIC_LIB),OFF,ON) \
> $$($$(PKG)_CONF_OPT) \
> )
> endef
> @@ -75,8 +75,8 @@ else
> define $(2)_CONFIGURE_CMDS
> (cd $$($$(PKG)_BUILDDIR) && \
> rm -f CMakeCache.txt && \
> - PATH=$(BR_PATH) \
> - $(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \
> + PATH=$$(BR_PATH) \
> + $$(HOST_DIR)/usr/bin/cmake $$($$(PKG)_SRCDIR) \
> -DCMAKE_INSTALL_SO_NO_EXE=0 \
> -DCMAKE_FIND_ROOT_PATH="$$(HOST_DIR)" \
> -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM="BOTH" \
> @@ -91,7 +91,9 @@ endif
>
> # This must be repeated from inner-generic-package, otherwise we only get
> # host-cmake in _DEPENDENCIES because of the following line
> -$(2)_DEPENDENCIES ?= $(filter-out host-toolchain $(1),$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
> +ifeq ($$(origin $(2)_DEPENDENCIES),undefined)
ifeq ($(4),host)
> +$(2)_DEPENDENCIES := $$(filter-out host-toolchain $(1),$$(patsubst host-host-%,host-%,$$(addprefix host-,$$($(3)_DEPENDENCIES))))
> +endif
>
> $(2)_DEPENDENCIES += host-cmake
>
> @@ -102,11 +104,11 @@ endif
> ifndef $(2)_BUILD_CMDS
> ifeq ($(4),target)
> define $(2)_BUILD_CMDS
> - $(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) -C $$($$(PKG)_BUILDDIR)
> + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) -C $$($$(PKG)_BUILDDIR)
Unrelated to this patch, does anyone know why we use $(PKG) here instead of $(2) ?
> endef
> else
> define $(2)_BUILD_CMDS
> - $(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) -C $$($$(PKG)_BUILDDIR)
> + $$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) -C $$($$(PKG)_BUILDDIR)
> endef
> endif
> endif
> @@ -117,7 +119,7 @@ endif
> #
> ifndef $(2)_INSTALL_CMDS
> define $(2)_INSTALL_CMDS
> - $(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) $$($$(PKG)_INSTALL_HOST_OPT) -C $$($$(PKG)_BUILDDIR)
> + $$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) $$($$(PKG)_INSTALL_HOST_OPT) -C $$($$(PKG)_BUILDDIR)
> endef
> endif
>
> @@ -127,7 +129,7 @@ endif
> #
> ifndef $(2)_INSTALL_STAGING_CMDS
> define $(2)_INSTALL_STAGING_CMDS
> - $(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) $$($$(PKG)_INSTALL_STAGING_OPT) -C $$($$(PKG)_BUILDDIR)
> + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) $$($$(PKG)_INSTALL_STAGING_OPT) -C $$($$(PKG)_BUILDDIR)
> endef
> endif
>
> @@ -137,7 +139,7 @@ endif
> #
> ifndef $(2)_INSTALL_TARGET_CMDS
> define $(2)_INSTALL_TARGET_CMDS
> - $(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) $$($$(PKG)_INSTALL_TARGET_OPT) -C $$($$(PKG)_BUILDDIR)
> + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPT) $$($$(PKG)_INSTALL_TARGET_OPT) -C $$($$(PKG)_BUILDDIR)
> endef
> endif
>
> @@ -151,8 +153,8 @@ endef
> # cmake-package -- the target generator macro for CMake packages
> ################################################################################
>
> -cmake-package = $(call inner-cmake-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> -host-cmake-package = $(call inner-cmake-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
> +cmake-package = $(call inner-cmake-package,$(pkgname),$$(call UPPERCASE,$(pkgname)),$$(call UPPERCASE,$(pkgname)),target)
> +host-cmake-package = $(call inner-cmake-package,host-$(pkgname),$$(call UPPERCASE,host-$(pkgname)),$$(call UPPERCASE,$(pkgname)),host)
Same here: keep single $, add comment.
>
> ################################################################################
> # Generation of the CMake toolchain file
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -263,7 +263,7 @@ define inner-generic-package
>
> $(2)_TYPE = $(4)
> $(2)_NAME = $(1)
> -$(2)_RAWNAME = $(patsubst host-%,%,$(1))
> +$(2)_RAWNAME = $$(patsubst host-%,%,$(1))
>
> # Keep the package version that may contain forward slashes in the _DL_VERSION
> # variable, then replace all forward slashes ('/') by underscores ('_') to
> @@ -272,15 +272,15 @@ define inner-generic-package
> # version control system branch or tag, for example remotes/origin/1_10_stable.
> ifndef $(2)_VERSION
> ifdef $(3)_VERSION
> - $(2)_DL_VERSION = $($(3)_VERSION)
> - $(2)_VERSION = $(subst /,_,$($(3)_VERSION))
> + $(2)_DL_VERSION = $$($(3)_VERSION)
> + $(2)_VERSION := $$(subst /,_,$$($(3)_VERSION))
> else
> $(2)_VERSION = undefined
> $(2)_DL_VERSION = undefined
> endif
> else
> - $(2)_DL_VERSION = $($(2)_VERSION)
> - $(2)_VERSION = $(subst /,_,$($(2)_VERSION))
> + $(2)_DL_VERSION = $$($(2)_VERSION)
> + $(2)_VERSION := $$(subst /,_,$$($(2)_VERSION))
> endif
>
> $(2)_BASE_NAME = $(1)-$$($(2)_VERSION)
> @@ -304,7 +304,7 @@ endif
>
> ifndef $(2)_SOURCE
> ifdef $(3)_SOURCE
> - $(2)_SOURCE = $($(3)_SOURCE)
> + $(2)_SOURCE = $$($(3)_SOURCE)
> else
> $(2)_SOURCE ?= $$($(2)_RAWNAME)-$$($(2)_VERSION).tar.gz
> endif
> @@ -312,22 +312,22 @@ endif
>
> ifndef $(2)_PATCH
> ifdef $(3)_PATCH
> - $(2)_PATCH = $($(3)_PATCH)
> + $(2)_PATCH = $$($(3)_PATCH)
> endif
> endif
>
> ifndef $(2)_SITE
> ifdef $(3)_SITE
> - $(2)_SITE = $($(3)_SITE)
> + $(2)_SITE = $$($(3)_SITE)
> endif
> endif
>
> ifndef $(2)_SITE_METHOD
> ifdef $(3)_SITE_METHOD
> - $(2)_SITE_METHOD = $($(3)_SITE_METHOD)
> + $(2)_SITE_METHOD = $$($(3)_SITE_METHOD)
> else
> # Try automatic detection using the scheme part of the URI
> - $(2)_SITE_METHOD = $(call geturischeme,$($(2)_SITE))
> + $(2)_SITE_METHOD = $$(call geturischeme,$$($(2)_SITE))
> endif
> endif
>
> @@ -339,7 +339,7 @@ endif
>
> ifndef $(2)_LICENSE
> ifdef $(3)_LICENSE
> - $(2)_LICENSE = $($(3)_LICENSE)
> + $(2)_LICENSE = $$($(3)_LICENSE)
> endif
> endif
>
> @@ -347,13 +347,13 @@ endif
>
> ifndef $(2)_LICENSE_FILES
> ifdef $(3)_LICENSE_FILES
> - $(2)_LICENSE_FILES = $($(3)_LICENSE_FILES)
> + $(2)_LICENSE_FILES = $$($(3)_LICENSE_FILES)
> endif
> endif
>
> ifndef $(2)_REDISTRIBUTE
> ifdef $(3)_REDISTRIBUTE
> - $(2)_REDISTRIBUTE = $($(3)_REDISTRIBUTE)
> + $(2)_REDISTRIBUTE = $$($(3)_REDISTRIBUTE)
> endif
> endif
>
> @@ -364,8 +364,10 @@ endif
> # dependency
> $(2)_ADD_TOOLCHAIN_DEPENDENCY ?= YES
>
> -$(2)_DEPENDENCIES ?= $(filter-out host-toolchain $(1),\
> - $(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
> +ifeq ($$(origin $(2)_DEPENDENCIES),undefined)
ifeq ($(4),host)
> +$(2)_DEPENDENCIES := $$(filter-out host-toolchain $(1),\
> + $$(patsubst host-host-%,host-%,$$(addprefix host-,$$($(3)_DEPENDENCIES))))
> +endif
> ifeq ($(4),target)
> ifeq ($$($(2)_ADD_TOOLCHAIN_DEPENDENCY),YES)
> $(2)_DEPENDENCIES += toolchain
> @@ -392,8 +394,8 @@ endif
>
> # default extract command
> $(2)_EXTRACT_CMDS ?= \
> - $$(if $$($(2)_SOURCE),$$(INFLATE$$(suffix $$($(2)_SOURCE))) $(DL_DIR)/$$($(2)_SOURCE) | \
> - $(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $$($(2)_DIR) $(TAR_OPTIONS) -)
> + $$(if $$($(2)_SOURCE),$$(INFLATE$$(suffix $$($(2)_SOURCE))) $$(DL_DIR)/$$($(2)_SOURCE) | \
> + $$(TAR) $$(TAR_STRIP_COMPONENTS)=1 -C $$($(2)_DIR) $$(TAR_OPTIONS) -)
>
> # pre/post-steps hooks
> $(2)_PRE_DOWNLOAD_HOOKS ?=
> @@ -467,7 +469,7 @@ endif
> $$($(2)_TARGET_CONFIGURE): | $$($(2)_DEPENDENCIES)
>
> $$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | dirs prepare
> -ifeq ($(filter $(1),$(DEPENDENCIES_HOST_PREREQ)),)
> +ifeq ($$(filter $(1),$$(DEPENDENCIES_HOST_PREREQ)),)
> $$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | dependencies
> endif
>
> @@ -510,11 +512,11 @@ endif
> @echo $$($(2)_DEPENDENCIES)
>
> $(1)-graph-depends:
> - @$(INSTALL) -d $(O)/graphs
> - @cd "$(CONFIG_DIR)"; \
> - $(TOPDIR)/support/scripts/graph-depends -p $(1) -d $(BR_GRAPH_DEPTH) \
> - |tee $(O)/graphs/$$(@).dot \
> - |dot -T$(BR_GRAPH_OUT) -o $(O)/graphs/$$(@).$(BR_GRAPH_OUT)
> + @$$(INSTALL) -d $$(O)/graphs
> + @cd "$$(CONFIG_DIR)"; \
> + $$(TOPDIR)/support/scripts/graph-depends -p $(1) -d $$(BR_GRAPH_DEPTH) \
> + |tee $$(O)/graphs/$$(@).dot \
> + |dot -T$$(BR_GRAPH_OUT) -o $$(O)/graphs/$$(@).$$(BR_GRAPH_OUT)
>
> $(1)-dirclean: $$($(2)_TARGET_DIRCLEAN)
>
> @@ -548,7 +550,7 @@ endif
> $$($(2)_TARGET_RSYNC_SOURCE): SRCDIR=$$($(2)_OVERRIDE_SRCDIR)
> $$($(2)_TARGET_RSYNC_SOURCE): PKG=$(2)
> $$($(2)_TARGET_PATCH): PKG=$(2)
> -$$($(2)_TARGET_PATCH): RAWNAME=$(patsubst host-%,%,$(1))
> +$$($(2)_TARGET_PATCH): RAWNAME=$$(patsubst host-%,%,$(1))
> $$($(2)_TARGET_PATCH): PKGDIR=$(pkgdir)
> $$($(2)_TARGET_EXTRACT): PKG=$(2)
> $$($(2)_TARGET_SOURCE): PKG=$(2)
> @@ -559,9 +561,9 @@ endif
> # kernel case, the bootloaders case, and the normal packages case.
> ifeq ($(1),linux)
> $(2)_KCONFIG_VAR = BR2_LINUX_KERNEL
> -else ifneq ($(filter boot/%,$(pkgdir)),)
> +else ifneq ($$(filter boot/%,$(pkgdir)),)
$$(pkgdir) works fine here. Also, it gets evaluated only once anyway, so
there's no speedup from using a single $.
> $(2)_KCONFIG_VAR = BR2_TARGET_$(2)
> -else ifneq ($(filter toolchain/%,$(pkgdir)),)
> +else ifneq ($$(filter toolchain/%,$(pkgdir)),)
> $(2)_KCONFIG_VAR = BR2_$(2)
> else
> $(2)_KCONFIG_VAR = BR2_PACKAGE_$(2)
> @@ -577,7 +579,7 @@ ifeq ($$($(2)_REDISTRIBUTE),YES)
> ifneq ($$($(2)_SITE_METHOD),local)
> ifneq ($$($(2)_SITE_METHOD),override)
> # Packages that have a tarball need it downloaded and extracted beforehand
> -$(1)-legal-info: $(1)-extract $(REDIST_SOURCES_DIR_$(call UPPERCASE,$(4)))
> +$(1)-legal-info: $(1)-extract $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))
> $(2)_MANIFEST_TARBALL = $$($(2)_SOURCE)
> endif
> endif
> @@ -587,40 +589,40 @@ endif
> # legal-info: produce legally relevant info.
> $(1)-legal-info:
Have you also tested a 'make legal-info'? This whole thing is rather fragile so
we may easily miss something by just reviewing. Also, printvars doesn't show the
contents of this rule (because it's not a variable). 'make -qp' does, however,
so that would also be a good check (it may reorder things, though, so it may not
be easy to diff).
> # Packages without a source are assumed to be part of Buildroot, skip them.
> - $(foreach hook,$($(2)_PRE_LEGAL_INFO_HOOKS),$(call $(hook))$(sep))
> -ifneq ($(call qstrip,$$($(2)_SOURCE)),)
> + $$(foreach hook,$$($(2)_PRE_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep))
> +ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
>
> ifeq ($$($(2)_SITE_METHOD),local)
> # Packages without a tarball: don't save and warn
> - @$(call legal-warning-pkg-savednothing,$$($(2)_RAWNAME),local)
> + @$$(call legal-warning-pkg-savednothing,$$($(2)_RAWNAME),local)
>
> else ifneq ($$($(2)_OVERRIDE_SRCDIR),)
> - @$(call legal-warning-pkg-savednothing,$$($(2)_RAWNAME),override)
> + @$$(call legal-warning-pkg-savednothing,$$($(2)_RAWNAME),override)
>
> else
> # Other packages
>
> # Save license files if defined
> -ifeq ($(call qstrip,$$($(2)_LICENSE_FILES)),)
Huh, this original wouldn't even have worked (because it would strip the quotes
from the variable name, not from its contents).
> - @$(call legal-license-nofiles,$$($(2)_RAWNAME),$(call UPPERCASE,$(4)))
> - @$(call legal-warning-pkg,$$($(2)_RAWNAME),cannot save license ($(2)_LICENSE_FILES not defined))
> +ifeq ($$(call qstrip,$$($(2)_LICENSE_FILES)),)
> + @$$(call legal-license-nofiles,$$($(2)_RAWNAME),$$(call UPPERCASE,$(4)))
> + @$$(call legal-warning-pkg,$$($(2)_RAWNAME),cannot save license ($(2)_LICENSE_FILES not defined))
> else
> # Double dollar signs are really needed here, to catch host packages
> # without explicit HOST_FOO_LICENSE_FILES assignment, also in case they
> # have multiple license files.
I think you can remove this comment now :-)
> - @$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME),$$(F),$$($(2)_DIR)/$$(F),$(call UPPERCASE,$(4)))$$(sep))
> + @$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep))
> endif # license files
>
> ifeq ($$($(2)_REDISTRIBUTE),YES)
> # Copy the source tarball (just hardlink if possible)
> - @cp -l $(DL_DIR)/$$($(2)_SOURCE) $(REDIST_SOURCES_DIR_$(call UPPERCASE,$(4))) 2>/dev/null || \
> - cp $(DL_DIR)/$$($(2)_SOURCE) $(REDIST_SOURCES_DIR_$(call UPPERCASE,$(4)))
> + @cp -l $$(DL_DIR)/$$($(2)_SOURCE) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))) 2>/dev/null || \
> + cp $$(DL_DIR)/$$($(2)_SOURCE) $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))
> endif # redistribute
>
> endif # other packages
> - @$(call legal-manifest,$$($(2)_RAWNAME),$$($(2)_VERSION),$$($(2)_LICENSE),$$($(2)_MANIFEST_LICENSE_FILES),$$($(2)_MANIFEST_TARBALL),$(call UPPERCASE,$(4)))
> -endif # ifneq ($(call qstrip,$$($(2)_SOURCE)),)
> - $(foreach hook,$($(2)_POST_LEGAL_INFO_HOOKS),$(call $(hook))$(sep))
> + @$$(call legal-manifest,$$($(2)_RAWNAME),$$($(2)_VERSION),$$($(2)_LICENSE),$$($(2)_MANIFEST_LICENSE_FILES),$$($(2)_MANIFEST_TARBALL),$$(call UPPERCASE,$(4)))
> +endif # ifneq ($$(call qstrip,$$($(2)_SOURCE)),)
> + $$(foreach hook,$$($(2)_POST_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep))
>
> # add package to the general list of targets if requested by the buildroot
> # configuration
> @@ -649,8 +651,8 @@ endif # SITE_METHOD
> # ZCAT="gzip -d -c", and to check for the dependency we only want 'gzip'.
> # Do not add xzcat to the list of required dependencies, as it gets built
> # automatically if it isn't found.
> -ifneq ($(call suitable-extractor,$($(2)_SOURCE)),$(XZCAT))
> -DL_TOOLS_DEPENDENCIES += $(firstword $(call suitable-extractor,$($(2)_SOURCE)))
> +ifneq ($$(call suitable-extractor,$$($(2)_SOURCE)),$$(XZCAT))
> +DL_TOOLS_DEPENDENCIES += $$(firstword $$(call suitable-extractor,$$($(2)_SOURCE)))
> endif
>
> endif # $(2)_KCONFIG_VAR
> @@ -661,8 +663,8 @@ endef # inner-generic-package
> ################################################################################
>
> # In the case of target packages, keep the package name "pkg"
> -generic-package = $(call inner-generic-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> +generic-package = $(call inner-generic-package,$(pkgname),$$(call UPPERCASE,$(pkgname)),$$(call UPPERCASE,$(pkgname)),target)
> # In the case of host packages, turn the package name "pkg" into "host-pkg"
> -host-generic-package = $(call inner-generic-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
> +host-generic-package = $(call inner-generic-package,host-$(pkgname),$$(call UPPERCASE,host-$(pkgname)),$$(call UPPERCASE,$(pkgname)),host)
Keep original, add comment.
>
> # :mode=makefile:
> diff --git a/package/pkg-luarocks.mk b/package/pkg-luarocks.mk
> --- a/package/pkg-luarocks.mk
> +++ b/package/pkg-luarocks.mk
> @@ -34,10 +34,10 @@
> define inner-luarocks-package
>
> $(2)_BUILD_OPT ?=
> -$(2)_SUBDIR ?= $(1)-$(shell echo "$($(3)_VERSION)" | sed -e "s/-[0-9]$$//")
> -$(2)_ROCKSPEC ?= $(1)-$($(3)_VERSION).rockspec
> -$(2)_SOURCE ?= $(1)-$($(3)_VERSION).src.rock
> -$(2)_SITE ?= $(call qstrip,$(BR2_LUAROCKS_MIRROR))
> +$(2)_SUBDIR ?= $(1)-$$(shell echo "$$($(3)_VERSION)" | sed -e "s/-[0-9]$$$$//")
> +$(2)_ROCKSPEC ?= $(1)-$$($(3)_VERSION).rockspec
> +$(2)_SOURCE ?= $(1)-$$($(3)_VERSION).src.rock
> +$(2)_SITE ?= $$(call qstrip,$$(BR2_LUAROCKS_MIRROR))
>
> # Since we do not support host-luarocks-package, we know this is
> # a target package, and can just add the required dependencies
> @@ -49,7 +49,7 @@ define inner-luarocks-package
> ifndef $(2)_EXTRACT_CMDS
> define $(2)_EXTRACT_CMDS
> cd $$($(2)_DIR)/.. && \
> - $$(LUAROCKS_RUN) unpack --force $(DL_DIR)/$$($(2)_SOURCE)
> + $$(LUAROCKS_RUN) unpack --force $$(DL_DIR)/$$($(2)_SOURCE)
> endef
> endif
>
> @@ -77,5 +77,5 @@ endef
> # luarocks-package -- the target generator macro for LuaRocks packages
> ################################################################################
>
> -luarocks-package = $(call inner-luarocks-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> +luarocks-package = $(call inner-luarocks-package,$(pkgname),$$(call UPPERCASE,$(pkgname)),$$(call UPPERCASE,$(pkgname)),target)
Keep original, add comment.
> # host-luarocks-package not supported
> diff --git a/package/pkg-perl.mk b/package/pkg-perl.mk
> --- a/package/pkg-perl.mk
> +++ b/package/pkg-perl.mk
> @@ -51,18 +51,18 @@ define $(2)_CONFIGURE_CMDS
> cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \
> PERL_MM_USE_DEFAULT=1 \
> perl Build.PL \
> - --config ar="$(TARGET_AR)" \
> - --config full_ar="$(TARGET_AR)" \
> - --config cc="$(TARGET_CC)" \
> - --config ccflags="$(TARGET_CFLAGS)" \
> - --config ld="$(TARGET_CC)" \
> - --config lddlflags="-shared $(TARGET_LDFLAGS)" \
> - --config ldflags="$(TARGET_LDFLAGS)" \
> - --include_dirs $$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$(PERL_ARCHNAME)/CORE \
> + --config ar="$$(TARGET_AR)" \
> + --config full_ar="$$(TARGET_AR)" \
> + --config cc="$$(TARGET_CC)" \
> + --config ccflags="$$(TARGET_CFLAGS)" \
> + --config ld="$$(TARGET_CC)" \
> + --config lddlflags="-shared $$(TARGET_LDFLAGS)" \
> + --config ldflags="$$(TARGET_LDFLAGS)" \
> + --include_dirs $$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$$(PERL_ARCHNAME)/CORE \
> --destdir $$(TARGET_DIR) \
> --installdirs vendor \
> --install_path lib=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \
> - --install_path arch=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$(PERL_ARCHNAME) \
> + --install_path arch=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \
> --install_path bin=/usr/bin \
> --install_path script=/usr/bin \
> --install_path bindoc=/usr/share/man/man1 \
> @@ -72,17 +72,17 @@ define $(2)_CONFIGURE_CMDS
> PERL_MM_USE_DEFAULT=1 \
> PERL_AUTOINSTALL=--skipdeps \
> perl Makefile.PL \
> - AR="$(TARGET_AR)" \
> - FULL_AR="$(TARGET_AR)" \
> - CC="$(TARGET_CC)" \
> - CCFLAGS="$(TARGET_CFLAGS)" \
> - LD="$(TARGET_CC)" \
> - LDDLFLAGS="-shared $(TARGET_LDFLAGS)" \
> - LDFLAGS="$(TARGET_LDFLAGS)" \
> + AR="$$(TARGET_AR)" \
> + FULL_AR="$$(TARGET_AR)" \
> + CC="$$(TARGET_CC)" \
> + CCFLAGS="$$(TARGET_CFLAGS)" \
> + LD="$$(TARGET_CC)" \
> + LDDLFLAGS="-shared $$(TARGET_LDFLAGS)" \
> + LDFLAGS="$$(TARGET_LDFLAGS)" \
> DESTDIR=$$(TARGET_DIR) \
> INSTALLDIRS=vendor \
> INSTALLVENDORLIB=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \
> - INSTALLVENDORARCH=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$(PERL_ARCHNAME) \
> + INSTALLVENDORARCH=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \
> INSTALLVENDORBIN=/usr/bin \
> INSTALLVENDORSCRIPT=/usr/bin \
> INSTALLVENDORMAN1DIR=/usr/share/man/man1 \
> @@ -125,8 +125,8 @@ define $(2)_BUILD_CMDS
> cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \
> perl Build $$($(2)_BUILD_OPT) build; \
> else \
> - $(MAKE1) \
> - PERL_INC=$$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$(PERL_ARCHNAME)/CORE \
> + $$(MAKE1) \
> + PERL_INC=$$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$$(PERL_ARCHNAME)/CORE \
> $$($(2)_BUILD_OPT) pure_all; \
> fi
> endef
> @@ -137,7 +137,7 @@ define $(2)_BUILD_CMDS
> cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \
> perl Build $$($(2)_BUILD_OPT) build; \
> else \
> - $(MAKE1) $$($(2)_BUILD_OPT) pure_all; \
> + $$(MAKE1) $$($(2)_BUILD_OPT) pure_all; \
> fi
> endef
> endif
> @@ -152,7 +152,7 @@ define $(2)_INSTALL_CMDS
> cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \
> perl Build $$($(2)_INSTALL_TARGET_OPT) install; \
> else \
> - $(MAKE1) $$($(2)_INSTALL_TARGET_OPT) pure_install; \
> + $$(MAKE1) $$($(2)_INSTALL_TARGET_OPT) pure_install; \
> fi
> endef
> endif
> @@ -166,7 +166,7 @@ define $(2)_INSTALL_TARGET_CMDS
> cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \
> perl Build $$($(2)_INSTALL_TARGET_OPT) install; \
> else \
> - $(MAKE1) $$($(2)_INSTALL_TARGET_OPT) pure_install; \
> + $$(MAKE1) $$($(2)_INSTALL_TARGET_OPT) pure_install; \
> fi
> endef
> endif
> @@ -181,5 +181,5 @@ endef
> # perl-package -- the target generator macro for Perl packages
> ################################################################################
>
> -perl-package = $(call inner-perl-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> -host-perl-package = $(call inner-perl-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
> +perl-package = $(call inner-perl-package,$(pkgname),$$(call UPPERCASE,$(pkgname)),$$(call UPPERCASE,$(pkgname)),target)
> +host-perl-package = $(call inner-perl-package,host-$(pkgname),$$(call UPPERCASE,host-$(pkgname)),$$(call UPPERCASE,$(pkgname)),host)
Keep original, add comment.
> diff --git a/package/pkg-python.mk b/package/pkg-python.mk
> --- a/package/pkg-python.mk
> +++ b/package/pkg-python.mk
> @@ -82,7 +82,7 @@ HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPT =
>
> define inner-python-package
>
> -$(2)_SRCDIR = $$($(2)_DIR)/$($(2)_SUBDIR)
> +$(2)_SRCDIR = $$($(2)_DIR)/$$($(2)_SUBDIR)
> $(2)_BUILDDIR = $$($(2)_SRCDIR)
>
> $(2)_ENV ?=
> @@ -91,7 +91,7 @@ define inner-python-package
>
> ifndef $(2)_SETUP_TYPE
> ifdef $(3)_SETUP_TYPE
> - $(2)_SETUP_TYPE = $($(3)_SETUP_TYPE)
> + $(2)_SETUP_TYPE = $$($(3)_SETUP_TYPE)
> else
> $$(error "$(2)_SETUP_TYPE must be set")
> endif
> @@ -138,7 +138,9 @@ endif
> # depending on the package characteristics, and shouldn't be derived
> # automatically from the dependencies of the corresponding target
> # package.
> -$(2)_DEPENDENCIES ?= $(filter-out host-python host-python3 host-python-setuptools host-toolchain $(1),$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
> +ifeq ($$(origin $(2)_DEPENDENCIES),undefined)
ifeq($(4),host)
But maybe that doesn't work here. Or maybe you do need the := here. Although I
doubt it.
> +$(2)_DEPENDENCIES := $$(filter-out host-python host-python3 host-python-setuptools host-toolchain $(1),$$(patsubst host-host-%,host-%,$$(addprefix host-,$$($(3)_DEPENDENCIES))))
> +endif
>
> # Target packages need both the python interpreter on the target (for
> # runtime) and the python interpreter on the host (for
> @@ -155,19 +157,19 @@ endif
> # - otherwise, we depend on the one requested by *_NEEDS_HOST_PYTHON.
> #
> ifeq ($(4),target)
> -$(2)_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON3),host-python3 python3,host-python python)
> +$(2)_DEPENDENCIES += $$(if $$(BR2_PACKAGE_PYTHON3),host-python3 python3,host-python python)
> else
> -ifeq ($($(2)_NEEDS_HOST_PYTHON),)
> -$(2)_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON3),host-python3,host-python)
> +ifeq ($$($(2)_NEEDS_HOST_PYTHON),)
> +$(2)_DEPENDENCIES += $$(if $$(BR2_PACKAGE_PYTHON3),host-python3,host-python)
> else
> -ifeq ($($(2)_NEEDS_HOST_PYTHON),python2)
> +ifeq ($$($(2)_NEEDS_HOST_PYTHON),python2)
> $(2)_DEPENDENCIES += host-python
> -else ifeq ($($(2)_NEEDS_HOST_PYTHON),python3)
> +else ifeq ($$($(2)_NEEDS_HOST_PYTHON),python3)
> $(2)_DEPENDENCIES += host-python3
> else
> -$$(error Incorrect value '$($(2)_NEEDS_HOST_PYTHON)' for $(2)_NEEDS_HOST_PYTHON)
> +$$(error Incorrect value '$$($(2)_NEEDS_HOST_PYTHON)' for $(2)_NEEDS_HOST_PYTHON)
> endif
> -endif # ($($(2)_NEEDS_HOST_PYTHON),)
> +endif # ($$($(2)_NEEDS_HOST_PYTHON),)
> endif # ($(4),target)
>
> # Setuptools based packages will need host-python-setuptools (both
> @@ -196,12 +198,12 @@ endif
> # - otherwise, we use the one requested by *_NEEDS_HOST_PYTHON.
> #
> ifeq ($(4),target)
> -$(2)_PYTHON_INTERPRETER = $(HOST_DIR)/usr/bin/python
> +$(2)_PYTHON_INTERPRETER = $$(HOST_DIR)/usr/bin/python
> else
> -ifeq ($($(2)_NEEDS_HOST_PYTHON),)
> -$(2)_PYTHON_INTERPRETER = $(HOST_DIR)/usr/bin/python
> +ifeq ($$($(2)_NEEDS_HOST_PYTHON),)
> +$(2)_PYTHON_INTERPRETER = $$(HOST_DIR)/usr/bin/python
> else
> -$(2)_PYTHON_INTERPRETER = $(HOST_DIR)/usr/bin/$($(2)_NEEDS_HOST_PYTHON)
> +$(2)_PYTHON_INTERPRETER = $$(HOST_DIR)/usr/bin/$$($(2)_NEEDS_HOST_PYTHON)
> endif
> endif
>
> @@ -255,5 +257,5 @@ endef
> # python-package -- the target generator macro for Python packages
> ################################################################################
>
> -python-package = $(call inner-python-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> -host-python-package = $(call inner-python-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
> +python-package = $(call inner-python-package,$(pkgname),$$(call UPPERCASE,$(pkgname)),$$(call UPPERCASE,$(pkgname)),target)
> +host-python-package = $(call inner-python-package,host-$(pkgname),$$(call UPPERCASE,host-$(pkgname)),$$(call UPPERCASE,$(pkgname)),host)
> diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
> --- a/package/pkg-utils.mk
> +++ b/package/pkg-utils.mk
> @@ -19,13 +19,13 @@
> define caseconvert-helper
> $(1) = $$(strip \
> $$(eval __tmp := $$(1))\
> - $(foreach c, $(2),\
> - $$(eval __tmp := $$(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),$$(__tmp))))\
> + $$(foreach c, $(2),\
> + $$(eval __tmp := $$(subst $$(word 1,$$(subst :, ,$$(c))),$$(word 2,$$(subst :, ,$$(c))),$$(__tmp))))\
> $$(__tmp))
> endef
>
> -$(eval $(call caseconvert-helper,UPPERCASE,$(join $(addsuffix :,$([FROM])),$([TO]))))
> -$(eval $(call caseconvert-helper,LOWERCASE,$(join $(addsuffix :,$([TO])),$([FROM]))))
> +$(eval $(call caseconvert-helper,UPPERCASE,$$(join $$(addsuffix :,$$([FROM])),$$([TO]))))
> +$(eval $(call caseconvert-helper,LOWERCASE,$$(join $$(addsuffix :,$$([TO])),$$([FROM]))))
Actually, here the single $-es are intentional. It is chosen in order to
maximize the speed-up, that's why you see this counter-intuitive mix of $ and
$$. Maybe you can extend the comment above a little to explain that a little
better. Or I can do that as well if you prefer.
>
> #
> # Manipulation of .config files based on the Kconfig
> diff --git a/package/pkg-virtual.mk b/package/pkg-virtual.mk
> --- a/package/pkg-virtual.mk
> +++ b/package/pkg-virtual.mk
> @@ -35,8 +35,8 @@
> define inner-virtual-package
>
> # Ensure the virtual package has an implementation defined.
> -ifeq ($(BR2_PACKAGE_HAS_$(2)),y)
> -ifeq ($(call qstrip,$(BR2_PACKAGE_PROVIDES_$(2))),)
> +ifeq ($$(BR2_PACKAGE_HAS_$(2)),y)
> +ifeq ($$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))),)
> $$(error No implementation selected for virtual package $(1). Configuration error)
> endif
> endif
> @@ -50,11 +50,13 @@ HOST_$(3)_VERSION = virtual
>
> # This must be repeated from inner-generic-package, otherwise we get an empty
> # _DEPENDENCIES
> -$(2)_DEPENDENCIES ?= $(filter-out host-toolchain $(1),\
> - $(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
> +ifeq ($$(origin $(2)_DEPENDENCIES),undefined)
ifeq ($(4),host)
> +$(2)_DEPENDENCIES := $$(filter-out host-toolchain $(1),\
> + $$(patsubst host-host-%,host-%,$$(addprefix host-,$$($(3)_DEPENDENCIES))))
> +endif
>
> # Add dependency against the provider
> -$(2)_DEPENDENCIES += $(call qstrip,$(BR2_PACKAGE_PROVIDES_$(2)))
> +$(2)_DEPENDENCIES += $$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2)))
>
> # Call the generic package infrastructure to generate the necessary
> # make targets
> @@ -66,5 +68,5 @@ endef
> # virtual-package -- the target generator macro for virtual packages
> ################################################################################
>
> -virtual-package = $(call inner-virtual-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> -host-virtual-package = $(call inner-virtual-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
> +virtual-package = $(call inner-virtual-package,$(pkgname),$$(call UPPERCASE,$(pkgname)),$$(call UPPERCASE,$(pkgname)),target)
> +host-virtual-package = $(call inner-virtual-package,host-$(pkgname),$$(call UPPERCASE,host-$(pkgname)),$$(call UPPERCASE,$(pkgname)),host)
>
Keep original + comment.
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
More information about the buildroot
mailing list