[Buildroot] [PATCH] toolchain package: set version as 'virtual' instead of 'undefined'
Arnout Vandecappelle
arnout at mind.be
Thu May 8 08:31:43 UTC 2014
On 08/05/14 09:04, Thomas De Schampheleire wrote:
> Hi,
>
> On Wed, May 7, 2014 at 9:37 PM, Thomas De Schampheleire
> <patrickdepinguin at gmail.com> wrote:
> [..]
>
>>>> I tried using virtual-package in toolchain/toolchain/toolchain.mk, but TOOLCHAIN_VERSION becomes empty, while HOST_TOOLCHAIN_VERSION is virtual.
>
> [..]
>
> Some more feedback: I stepped away from toolchain and added a simple
> test package 'mytest' as below.
> I added a debug target 'bar' and some variable assignment in pkg-generic.mk.
>
>
> diff --git a/package/mytest/mytest.mk b/package/mytest/mytest.mk
> new file mode 100644
> --- /dev/null
> +++ b/package/mytest/mytest.mk
> @@ -0,0 +1,10 @@
> +
> +$(eval $(virtual-package))
> +
> +bar:
> + @echo MYTEST_VERSION = $(MYTEST_VERSION)
> + @echo HOST_MYTEST_VERSION = $(HOST_MYTEST_VERSION)
> + @echo MYTEST_X = $(MYTEST_X)
> + @echo MYTEST_Y = $(MYTEST_Y)
> + @echo HOST_MYTEST_X = $(HOST_MYTEST_X)
> + @echo HOST_MYTEST_Y = $(HOST_MYTEST_Y)
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -262,6 +262,12 @@ define inner-generic-package
> # sanitize the package version that is used in paths, directory and file names.
> # Forward slashes may appear in the package's version when pointing to a
> # version control system branch or tag, for example remotes/origin/1_10_stable.
> +
> +ifdef $(2)_VERSION
> + $(2)_X := $(subst /,_,$($(2)_VERSION))
> + $(2)_Y := $(subst /,_,$$($(2)_VERSION))
> +endif
> +
> ifndef $(2)_VERSION
> ifdef $(3)_VERSION
> $(2)_DL_VERSION = $($(3)_VERSION)
>
>
> In pkg-generic.mk, the _VERSION variables are defined, and there is a
> subst() statement to replace / with _.
> My conclusion is that the line with the subst statement does not work
> when _VERSION is set like in virtual-package.
>
> The output of 'make bar' is:
> MYTEST_VERSION =
> HOST_MYTEST_VERSION = virtual
> MYTEST_X =
> MYTEST_Y = virtual
> HOST_MYTEST_X =
> HOST_MYTEST_Y =
>
> X is using the standard subst line as pkg-generic is using, while Y
> adds an extra dollar sign.
> When the version is set directly, as in MYTEST_VERSION = bla, then X
> seems to be correct. This is the way buildroot works today. However,
> when the version is set indirectly from an inner-xxx-package, like
> $(3)_VERSION, then X no longer works but Y does. However, adding an
> extra dollar by default doesn't work for the normal packages.
>
> So how to proceed? Any experts in the inner-xxx-package and make internals?
> Arnout, ThomasP, Yann?
Let me see if I can analyse it.
$(eval $(virtual-package))
recursively expands to:
$(eval
...
MYTEST_VERSION = virtual
HOST_MYTEST_VERSION = virtual
...
# expansion of inner-generic-package
# ** At this point MYTEST_VERSION is not set yet! **
ifdef MYTEST_VERSION
MYTEST_X :=
MYTEST_Y := $$(MYTEST_VERSION)
endif
ifndef MYTEST_VERSION
ifdef MYTEST_VERSION
MYTEST_DL_VERSION =
MYTEST_VERSION =
else
MYTEST_VERSION = undefined
MYTEST_DL_VERSION = undefined
endif
else
MYTEST_DL_VERSION =
MYTEST_VERSION =
endif
...
) #eval
I repeat my earlier statement: within a function that is supposed to be
eval'ed, *everything* should be $$'ed except the function arguments and except
some very specific cases.
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