The definition of 'matching' in reference to a
recipe's LICENSE_FLAGS
setting is simple.
However, some things exist that you should know about in order to
correctly and effectively use it.
Before a flag
defined by a particular recipe is tested against the
contents of the LICENSE_FLAGS_WHITELIST
variable, the
string _${PN}
(with
PN
expanded of course) is
appended to the flag, thus automatically making each
LICENSE_FLAGS
value recipe-specific.
That string is
then matched against the whitelist.
So if you specify LICENSE_FLAGS = "commercial"
in recipe
"foo" for example, the string "commercial_foo"
would normally be what is specified in the whitelist in order for it to
match.
You can broaden the match by
putting any "_"-separated beginning subset of a
LICENSE_FLAGS
flag in the whitelist, which will also
match.
For example, simply specifying "commercial" in
the whitelist would match any expanded LICENSE_FLAGS
definition starting with "commercial" such as
"commercial_foo" and "commercial_bar", which are the
strings that would be automatically generated for
hypothetical "foo" and "bar" recipes assuming those
recipes had simply specified the following:
LICENSE_FLAGS = "commercial"
Broadening the match allows for a range of specificity for the items in the whitelist, from more general to perfectly specific. So you have the choice of exhaustively enumerating each license flag in the whitelist to allow only those specific recipes into the image, or of using a more general string to pick up anything matching just the first component or components of the specified string.
This scheme works even if the flag already
has _${PN}
appended - the extra _${PN}
is
redundant, but does not affect the outcome.
For example, a license flag of "commercial_1.2_foo" would
turn into "commercial_1.2_foo_foo" and would match
both the general "commercial" and the specific
"commercial_1.2_foo", as expected.
The flag would also match
"commercial_1.2_foo_foo" and "commercial_1.2", which
does not make much sense regarding use in the whitelist.
For a versioned string, you could instead specify "commercial_foo_1.2", which would turn into "commercial_foo_1.2_foo". And, as expected, this flag allows you to pick up this package along with anything else "commercial" when you specify "commercial" in the whitelist. Or, the flag allows you to pick up this package along with anything "commercial_foo" regardless of version when you use "commercial_foo" in the whitelist. Finally, you can be completely specific about the package and version and specify "commercial_foo_1.2" package and version.