[Buildroot] [PATCH 1 of 6 v2] legal info: fix saving of host package licenses
Thomas De Schampheleire
patrickdepinguin at gmail.com
Tue Nov 12 08:25:52 UTC 2013
Hi Arnout, all,
On Tue, Nov 12, 2013 at 8:12 AM, Arnout Vandecappelle <arnout at mind.be> wrote:
> On 07/10/13 15:15, Thomas De Schampheleire wrote:
>> Due to some tricky make behavior, the license texts of host packages that
>> did not provide an explicit HOST_FOO_LICENSE_FILES definition was not saved.
>> The problem is that you cannot correctly use a variable defined/updated
>> inside a call'ed block as input to a foreach statement. If you try to use
>> $(FOO) then only the original value of FOO is used for foreach, any update
>> inside the call'ed block is ignored. However, if you use $$(FOO), the entire
>> contents of FOO (typically a list of items) is passed as one item to
>> foreach, thus causing just one iteration instead of several.
> The description of the problem is wrong... It has nothing to do with call,
> it is due to the eval behaviour.
> Any variable referenced with a single $ inside the inner-generic-package macro
> is expanded before the resulting contents are eval'ed. Therefore, it is not
> possible to refer to variables defined by the inner-generic-package macro
> from within a single-$ function call.
> Fortunately there is a simple solution: use $$. See below...
I object to the use of the word 'simple' here!
> @$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME),$$(F),$$($(2)_DIR)/$$(F))$$(sep))
> Only the $(2) is expanded immediately, the rest will be expanded when
> the legal-info target is executed.
And indeed, it works.
I did try adding double dollar signs in some places, but more randomly
than with insight.
Thanks a lot, I'll send an updated patch!
More information about the buildroot