[OE-core] [PATCH 1/1] list-packageconfig-flag.py: add a script to list all PACKAGECONFIG's flags

Otavio Salvador otavio at ossystems.com.br
Thu Aug 1 16:46:17 UTC 2013


On Thu, Aug 1, 2013 at 8:04 AM, Hongxu Jia <hongxu.jia at windriver.com> wrote:
> list-packageconfig-flag.py will walk the METADIR and collect recipes which
> have PACKAGECONFIG's flags.
>
> The default display is to list recipes which have PACKAGECONFIG's flags in
> METADIR. If option '-f' is used, it will list PACKAGECONFIG's flags and all
> affected recipes in METADIR
>
> EXAMPLE:
> list-packageconfig-flag.py poky/meta poky/meta-yocto
> RECIPE NAME          PACKAGECONFIG's flag
> =========================================
> libarchive_2.8.5.bb  acl xattr largefile zlib bz2 xz openssl libxml2 expat
> strace_4.8.bb        libaio acl
> connman.inc          wifi bluetooth 3g tist openvpn vpnc l2tp pptp wispr
>
> list-packageconfig-flag.py -f poky/meta poky/meta-yocto
> PACKAGECONFIG's flag     RECIPE NAME
> ====================================
> speex                    gstreamer1.0-plugins-good.inc
> keyutils                 rpm_5.4.9.bb
> gallium-egl              mesa.inc
>
> [YOCTO #4368]
>
> Signed-off-by: Hongxu Jia <hongxu.jia at windriver.com>

Cool! :-)

>  scripts/contrib/list-packageconfig-flag.py | 180 +++++++++++++++++++++++++++++

I'd drop .py extension and use +x permission.

>  1 file changed, 180 insertions(+)
>  create mode 100755 scripts/contrib/list-packageconfig-flag.py
>
> diff --git a/scripts/contrib/list-packageconfig-flag.py b/scripts/contrib/list-packageconfig-flag.py
> new file mode 100755
> index 0000000..7a5568f
> --- /dev/null
> +++ b/scripts/contrib/list-packageconfig-flag.py
> @@ -0,0 +1,180 @@
> +#!/usr/bin/env python
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software Foundation.
> +#
> +# Copyright (C) 2013 Wind River Systems, Inc.
> +#
> +# list recipes which have PACKAGECONFIG's flags in METADIR
> +# list PACKAGECONFIG's flags and all affected recipes in METADIR
> +#
> +
> +import sys
> +import getopt
> +import os
> +import re
> +
> +usage_body = '''  list recipes which have PACKAGECONFIG's flags in METADIR
> +
> +OPTION:
> +  -h, --help  display this help and exit
> +  -f, --flag  list PACKAGECONFIG's flags and all affected recipes in METADIR
> +
> +EXAMPLE:
> +list-packageconfig-flag.py poky/meta poky/meta-yocto
> +list-packageconfig-flag.py -f poky/meta poky/meta-yocto
> +'''
> +
> +def usage():
> +    print 'Usage: %s [OPTION] [METADIR]...' % os.path.basename(sys.argv[0])
> +    print usage_body
> +
> +def parse_recipe(recipe):
> +    ''' Parse a recipe to collect PACKAGECONFIG's flags '''
> +    prog = re.compile(r' *PACKAGECONFIG\[(?P<flag>.*)\] *=.*')
> +    try:
> +        r = open(recipe)
> +    except IOError as (errno, strerror):
> +        print >> sys.stderr, 'WARNING: Failed to open recipe', recipe
> +
> +    flaglist = []
> +    for line in r:
> +        # Strip any comments from the line
> +        line = line.rsplit('#')[0]
> +        m = prog.match(line)
> +        if m:
> +            flaglist.append(m.group('flag'))
> +    r.close()
> +
> +    return flaglist
> +
> +def process_recipes(metadir):
> +    ''' Collect recipes which have PACKAGECONFIG's flags in METADIR '''
> +    # recipesdict = {'recipe': ['flag1', 'flag2',...]}
> +    recipesdict = {}
> +    for root,dirs,files in os.walk(metadir):
> +        for name in files:
> +            if name.find(".bb") >= 0 or name.find(".inc") >= 0:
> +                flaglist = parse_recipe(os.path.join(root,name))
> +                if flaglist:
> +                    recipesdict[name] = flaglist
> +
> +    return recipesdict

In case a PACKAGECONFIG is add by a class. I think this case is missing here.

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750



More information about the Openembedded-core mailing list