[Buildroot] [PATCH] toolchain package: set version as 'virtual' instead of 'undefined'

Thomas De Schampheleire patrickdepinguin at gmail.com
Thu May 8 09:28:42 UTC 2014


Hi Arnout,

On Thu, May 8, 2014 at 10:31 AM, Arnout Vandecappelle <arnout at mind.be> wrote:
> 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.
>

But in the case of host variables being set based on target variables
if there is no explicit host variable, as for the _VERSION, there
would be a recursive assignment as $(2) == $(3).
So statement   $(2)_VERSION = $$(subst /,_,$($(3)_VERSION))
should become   $(2)_VERSION := $$(subst /,_,$($(3)_VERSION))
then, right?
I haven't tested whether this works though...

Best regards,
Thomas



More information about the buildroot mailing list