Seeing how many cases like this exist(ed), this look very useful, but it
would be even better if we can catch the opposite case when e.g.
REQUIRED_DISTRO_FEATURES are set in recipe, but doesn't do anything because
of missing features_check inherit.

But I understand that such check might be more controversial as it would
need to be checked globally (outside this bbclass), maybe something in
insane.bbclass catching both cases as QA issue?

On Tue, Jun 9, 2020 at 4:11 PM Jacob Kroon <jacob.kr...@gmail.com> wrote:

> Signed-off-by: Jacob Kroon <jacob.kr...@gmail.com>
> ---
>  meta/classes/features_check.bbclass | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
>
> diff --git a/meta/classes/features_check.bbclass
> b/meta/classes/features_check.bbclass
> index 4ba827d4ab..31ce600374 100644
> --- a/meta/classes/features_check.bbclass
> +++ b/meta/classes/features_check.bbclass
> @@ -12,11 +12,25 @@
>  # Copyright 2019 (C) Texas Instruments Inc.
>  # Copyright 2013 (C) O.S. Systems Software LTDA.
>
> +FEATURES_CHECK_INCLUDE_STACK := "${BBINCLUDESTACK}"
> +
>  python () {
>      if d.getVar('PARSE_ALL_RECIPES', False):
>          return
>
> +    unused = True
> +
>      for kind in ['DISTRO', 'MACHINE', 'COMBINED']:
> +        if d.getVar('ANY_OF_' + kind + '_FEATURES') is None and \
> +           d.overridedata.get('ANY_OF_' + kind + '_FEATURES') is None and
> \
> +           d.getVar('REQUIRED_' + kind + '_FEATURES') is None and \
> +           d.overridedata.get('REQUIRED_' + kind + '_FEATURES') is None
> and \
> +           d.getVar('CONFLICT_' + kind + '_FEATURES') is None and \
> +           d.overridedata.get('CONFLICT_' + kind + '_FEATURES') is None:
> +            continue
> +
> +        unused = False
> +
>          # Assume at least one var is set.
>          features = set((d.getVar(kind + '_FEATURES') or '').split())
>
> @@ -39,4 +53,10 @@ python () {
>              if conflicts:
>                  raise bb.parse.SkipRecipe("conflicting %s feature%s '%s'
> (in %s_FEATURES)"
>                      % (kind.lower(), 's' if len(conflicts) > 1 else '', '
> '.join(conflicts), kind))
> +
> +    # Only warn if inherited directly in a .bb-file; if the class is
> inherited
> +    # via an .inc/.bbclass it could be a false positive
> +    inherited_from_bb =
> d.getVar('FEATURES_CHECK_INCLUDE_STACK').split()[-1].endswith('.bb')
> +    if unused and inherited_from_bb:
> +        bb.warn("Recipe inherits features_check but doesn't use it")
>  }
> 
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#139369): 
https://lists.openembedded.org/g/openembedded-core/message/139369
Mute This Topic: https://lists.openembedded.org/mt/74774873/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to