[OE-core] [oe-commits] [openembedded-core] 01/06: python: Restructure python packaging and replace it with autopackaging

Alejandro Enedino Hernandez Samaniego alejandro.enedino.hernandez-samaniego at xilinx.com
Mon Jan 22 19:02:07 UTC 2018


Hello Martin,


On 01/21/2018 07:13 AM, Martin Jansa wrote:
> And few more detected in test-signatures.sh:
>
> ERROR: Nothing RPROVIDES 'python3-enum' (but 
> meta-oe/meta-python/recipes-devtools/python/python3-automat_0.6.0.bb 
> <http://python3-automat_0.6.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb 
> <http://python3-asn1crypto_0.24.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-pymongo_3.6.0.bb 
> <http://python3-pymongo_3.6.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb 
> <http://python3-netaddr_0.7.19.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb 
> <http://python3-pyserial_3.4.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb 
> <http://python3-langtable_0.0.38.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-hyperlink_17.3.1.bb 
> <http://python3-hyperlink_17.3.1.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-click_6.7.bb 
> <http://python3-click_6.7.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-prompt-toolkit_1.0.15.bb 
> <http://python3-prompt-toolkit_1.0.15.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-decorator_4.1.2.bb 
> <http://python3-decorator_4.1.2.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-serpent_1.23.bb 
> <http://python3-serpent_1.23.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb 
> <http://python3-dnspython_1.15.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-jsonpatch_1.21.bb 
> <http://python3-jsonpatch_1.21.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.15.bb 
> <http://python3-sqlalchemy_1.1.15.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb 
> <http://python3-ntplib_0.3.3.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb 
> <http://python3-whoosh_2.7.4.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-ply_3.10.bb 
> <http://python3-ply_3.10.bb> RDEPENDS on or otherwise requires it)
> NOTE: Runtime target 'python3-enum' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['python3-enum']
> ERROR: Required build target 'meta-world-pkgdata' has no buildable 
> providers.
> Missing or unbuildable dependency chain was: ['meta-world-pkgdata', 
> 'python3-automat', 'python3-enum']
>
> ERROR: Nothing RPROVIDES 'python3-importlib' (but 
> meta-oe/meta-python/recipes-devtools/python/python3-django_1.11.9.bb 
> <http://python3-django_1.11.9.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-pyroute2_0.4.21.bb 
> <http://python3-pyroute2_0.4.21.bb>
> meta-oe/meta-python/recipes-devtools/python/python3-can_2.0.0.bb 
> <http://python3-can_2.0.0.bb> RDEPENDS on or otherwise requires it)
> NOTE: Runtime target 'python3-importlib' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['python3-importlib']
> ERROR: Required build target 'meta-world-pkgdata' has no buildable 
> providers.
> Missing or unbuildable dependency chain was: ['meta-world-pkgdata', 
> 'python3-django', 'python3-importlib']
>
> ERROR: Nothing RPROVIDES 'python-importlib' (but 
> meta-oe/meta-python/recipes-devtools/python/python-django_1.11.9.bb 
> <http://python-django_1.11.9.bb>
> meta-oe/meta-python/recipes-devtools/python/python-pyroute2_0.4.21.bb 
> <http://python-pyroute2_0.4.21.bb>
> meta-oe/meta-python/recipes-devtools/python/python-pandas_0.22.0.bb 
> <http://python-pandas_0.22.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python-astroid_1.6.0.bb 
> <http://python-astroid_1.6.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb 
> <http://python-dbusmock_0.16.7.bb>
> meta-oe/meta-python/recipes-devtools/python/python-can_2.0.0.bb 
> <http://python-can_2.0.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python-pyserial_3.4.bb 
> <http://python-pyserial_3.4.bb>
> meta-oe/meta-oe/recipes-devtools/python/python-pygobject_3.22.0.bb 
> <http://python-pygobject_3.22.0.bb>
> meta-oe/meta-python/recipes-devtools/python/python-behave_1.2.5.bb 
> <http://python-behave_1.2.5.bb> RDEPENDS on or otherwise requires it)
> NOTE: Runtime target 'python-importlib' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['python-importlib']
> ERROR: Required build target 'meta-world-pkgdata' has no buildable 
> providers.
> Missing or unbuildable dependency chain was: ['meta-world-pkgdata', 
> 'python-django', 'python-importlib']
>
>
> On Sun, Jan 21, 2018 at 10:00 AM, Martin Jansa <martin.jansa at gmail.com 
> <mailto:martin.jansa at gmail.com>> wrote:
>
>     Hello,
>
>     The last paragraph in commit message looks like it should be
>     backwards compatible right?
>
>     Then there might be some bug somewhere, because in my builds
>     (which use only very few python packages) there are few runtime
>     dependencies which cannot be satisfied anymore:
>     python-man
>     python-readline
>     python3-textutils
>

Its backwards compatible, in the way that the usage should be the same, 
in this case, this sort of failures are expected, since the mentioned 
packages: enum, readline, textutils no longer exist, and they should 
never have existed in the first place, they were always required to get 
a minimal python working, so they are now part of python(3)-core, which 
means the dependencies are actually met but recipes which RDEPEND on 
them should be modified , please see 
https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=7aaffbede46ce352b91c7a5c5f825a6f3b5b1c2e 
regarding some of the RDEPEND fixes on oe-core, I expect there should be 
several like this for meta-python.

>
>     Also probably related to this I've seen python(3)-smbus recipes
>     failing to build now with:
>     smbusmodule.c:192:48: error: 'I2C_SMBUS_WRITE' undeclared (first
>     use in this function); did you mean 'I2C_SMBUS'?
>

I dont know if the same applies for smbus but I will check.

Cheers,

Alejandro

>
>     Regards,
>
>     On Sat, Jan 20, 2018 at 11:32 PM, <git at git.openembedded.org
>     <mailto:git at git.openembedded.org>> wrote:
>
>         This is an automated email from the git hooks/post-receive script.
>
>         rpurdie pushed a commit to branch master
>         in repository openembedded-core.
>
>         commit 6959e2e4dba5bbfa6ffd49c44e738cc1c38bc280
>         Author: Alejandro Hernandez
>         <alejandro.hernandez at linux.intel.com
>         <mailto:alejandro.hernandez at linux.intel.com>>
>         AuthorDate: Tue Jun 20 14:11:44 2017 -0700
>
>             python: Restructure python packaging and replace it with
>         autopackaging
>
>             The reason we have a manifest file for python is that our
>         goal is to
>             keep python-core as small as posible and add other python
>         packages only
>             when the user needs them, hence why we split upstream
>         python into several
>             packages.
>
>             Although our manifest file has several issues:
>              - Its unorganized and hard to read and understand it for
>         an average
>                human being.
>              - When a new package needs to be added, the user actually
>         has to modify
>                the script that creates the manifest, then call the
>         script to create
>                a new manifest, and then submit a patch for both the
>         script and the
>                manifest, so its a little convoluted.
>              - Git complains every single time a patch is submitted to
>         the manifest,
>                since it violates some of its guidelines.
>              - It changes or may change with every release of python,
>         its impossible
>                to know if the required files for a certain package
>         have changed
>                (it could have more or less dependencies), the only way
>         of doing so
>                would be to install and test them all one by one on
>         separate individual
>                images, and even then we wouldnt know if they require
>         less dependencies,
>                we would just know if an extra dependency is required
>         since it would
>                complain, lets face it, this isnt feasible.
>              - The same thing happens for new packages, if someone
>         wants to add a
>                new package, its dependencies need to be checked
>         manually one by one.
>
>             This patch fixes those issues, while adding some
>         additional features.
>
>             Features/Fixes:
>
>              - A new manifest format is used (JSON), easy to read and
>         understand.
>                This file is parsed by the python recipe and python
>         packages read
>                from here are passed directly to bitbake during parsing
>         time.
>              - It provides an automatic manifest creation task
>         (explained below),
>                which automagically checks for every package
>         dependencies and adds
>                them to the new manifest, hence we will have on each
>         package exactly
>                what that package needs to be run, providing finer
>         granularity.
>              - Dependencies are also checked automagically for new
>         packages (explained below).
>              - Fixes the manifest in the following ways:
>                * python-core should be base and all packages should
>         depend on it,
>                  fixes lang, string, codecs, etc.
>                * Fixes packages with repeated files (e.g. bssdb and db, or
>                  netclient and mime, and many others).
>              - Sitecustomize was fixed since encoding was deprecated.
>              - The JSON manifest file invalidates bitbake's cache, so
>         if it changes
>                the python package will be rebuilt.
>              - It creates a solution for users that want precompiled
>         bytecode files
>                (*.pyc) INCLUDE_PYCS = "1" can be set by the user on
>         their local.conf to
>                include such files, some argument they get faster boot
>         time, even when the
>                files would be created on their first run?, but they
>         also sometimes give a
>                magic number error and take up space, so we leave it to
>         the user to
>                decide if they want them or not.
>              - Fixes python-core dependencies, e.g.
>                When python is run on an image, it TRIES to import
>         everything it needs,
>                but it doesnt necessarily fails when it doesnt find
>         something, so even if
>                we didnt know, we had errors like (trimmed on purpose):
>                # trying /usr/lib/python2.7/_locale.so
>                # trying /usr/lib/python2.7/lib-dynload/_locale.so
>                # trying /usr/lib/python2.7/_sysconfigdata.so
>
>                while it didnt complain about _locale it should have
>         imported it,
>                after creating a new manifest with the automated script
>         we get:
>
>                # trying /usr/lib/python2.7/lib-dynload/_locale.so
>                dlopen("/usr/lib/python2.7/lib-dynload/_locale.so", 2);
>                import _locale # dynamically loaded from
>         /usr/lib/python2.7/lib-dynload/_locale.so
>
>             How to use (after a new release of python, or maybe before
>         every OE
>             release):
>              - A new task called create_manifest was added to the
>         python package,
>                which may be invoked via:
>
>              $ bitbake python -c create_manifest
>
>              This task runs a script on native python on our HOST
>         system, and since
>              the python and python-native packages come from the same
>         source, we can
>              use it to know the dependencies of each module as if we
>         were doing it
>              on an image, this script is called create_manifest.py and
>         in a very
>              simplistic way it does the following:
>
>              1. Reads the JSON manifest file and creates a dictionary
>         data structure
>                 with all of our python packages, their FILES, RDEPENDS
>         and SUMMARY.
>              2. Loops through all of them and runs every module listed
>         on them
>                 asynchronously, determining every dependency that they
>         have.
>              3. These module dependencies are then handled, to be able
>         to know which
>                 packages contain those files and which should RDEPEND
>         on one another.
>              4. The data structure that comes out of this, is then
>         used to create a
>                 new manifest file which is automatically copied onto
>         the user's python
>                 directory replacing the old one.
>
>              Create_manifest script features:
>              - Handles modules which dont exist anymore (new release
>         for example).
>              - Handles modules that are builtin.
>              - Deals with modules which were not compiled (e.g. bsddb
>         or ossaudiodev)
>              - Deals with packages which include folders.
>              - Deals with packages which include FILES with a wildcard.
>              - The manifest can be constructed on a multilib
>         environment as well.
>              - This method works for both python modules and shared
>         libraries used
>                by python.
>
>             How to add a new package:
>              - If a user wants to add a new package all that has to be
>         done is
>                modify the python2-manifest.json file, and add the
>         required file(s)
>                to the FILES list, the script should handle all the rest.
>                Real example:
>                We want to add a web browser package, including the
>         file webbrowser.py
>                which at the moment is on python-misc.
>                "webbrowser": {
>                    "files":
>         ["${libdir}/python2.7/lib-dynload/webbrowser.py"],
>                    "rdepends": [],
>                    "summary": "Python Web Browser support"}
>
>              Run bitbake python -c create_manifest and the resulting
>         manifest
>              should  be completed after a few seconds, showing
>         something like:
>                "webbrowser": {
>                   "files": ["${libdir}/python2.7/webbrowser.py"],
>                   "rdepends":
>         ["core","fcntl","io","pickle","shell","subprocess"],
>                   "summary": "Python Web Browser support"}
>
>             Known errors/issues:
>              - Some special packages are handled differently: core, misc,
>                modules,dev, staticdev.
>                All these should be handled manually, because they
>         either include
>                binaries, static libraries, include files, etc.
>         (something that we
>                cant import).
>                Specifically static libraries are not not supported by
>         this method
>                and have to be handled by the user.
>              - The change should be transparent to the user, other
>         than the fact
>                that now we CANT build python-foo (it was pretty dumb
>         anyway, since
>                what building python-foo actually did was building the
>         whole python
>                package anyway), but doing IMAGE_INSTALL_append = "
>         python-foo"
>                would create an image with the requested package with
>         no issues.
>
>             [YOCTO #11510] [YOCTO #11694] [YOCTO #11695]
>
>             Signed-off-by: Alejandro Hernandez
>         <alejandro.hernandez at linux.intel.com
>         <mailto:alejandro.hernandez at linux.intel.com>>
>             Signed-off-by: Ross Burton <ross.burton at intel.com
>         <mailto:ross.burton at intel.com>>
>         ---
>          .../python/python-2.7-manifest.inc    |  840 ----------------
>          .../python/python-native-2.7-manifest.inc   |    9 -
>          .../python/python-native_2.7.13.bb
>         <http://python-native_2.7.13.bb>                |   24 +-
>          .../python/python/create_manifest2.py   |  277 ++++++
>          .../python/python/get_module_deps2.py   |  112 +++
>          .../python/python/python2-manifest.json   | 1032
>         ++++++++++++++++++++
>          .../python/python/sitecustomize.py    |    8 -
>          meta/recipes-devtools/python/python_2.7.13.bb
>         <http://python_2.7.13.bb>     |   88 +-
>          scripts/contrib/python/generate-manifest-2.7.py
>         <http://generate-manifest-2.7.py>   |  426 --------
>          9 files changed, 1528 insertions(+), 1288 deletions(-)
>
>         diff --git
>         a/meta/recipes-devtools/python/python-2.7-manifest.inc
>         b/meta/recipes-devtools/python/python-2.7-manifest.inc
>         deleted file mode 100644
>         index 7c3fc1b..0000000
>         --- a/meta/recipes-devtools/python/python-2.7-manifest.inc
>         +++ /dev/null
>         @@ -1,840 +0,0 @@
>         -
>         -# WARNING: This file is AUTO GENERATED: Manual edits will be
>         lost next time I regenerate the file.
>         -# Generator:
>         './scripts/contrib/python/generate-manifest-2.7.py
>         <http://generate-manifest-2.7.py>' Version 20110222.2 (C)
>         2002-2010 Michael 'Mickey' Lauer <mlauer at vanille-media.de
>         <mailto:mlauer at vanille-media.de>>
>         -
>         -
>         -
>         -PROVIDES+=" \
>         -  ${PN}-2to3 \
>         -  ${PN}-argparse \
>         -  ${PN}-audio \
>         -  ${PN}-bsddb \
>         -  ${PN}-codecs \
>         -  ${PN}-compile \
>         -  ${PN}-compiler \
>         -  ${PN}-compression \
>         -  ${PN}-contextlib \
>         -  ${PN}-core \
>         -  ${PN}-crypt \
>         -  ${PN}-ctypes \
>         -  ${PN}-curses \
>         -  ${PN}-datetime \
>         -  ${PN}-db \
>         -  ${PN}-debugger \
>         -  ${PN}-dev \
>         -  ${PN}-difflib \
>         -  ${PN}-distutils \
>         -  ${PN}-distutils-staticdev \
>         -  ${PN}-doctest \
>         -  ${PN}-email \
>         -  ${PN}-fcntl \
>         -  ${PN}-gdbm \
>         -  ${PN}-hotshot \
>         -  ${PN}-html \
>         -  ${PN}-idle \
>         -  ${PN}-image \
>         -  ${PN}-importlib \
>         -  ${PN}-io \
>         -  ${PN}-json \
>         -  ${PN}-lang \
>         -  ${PN}-logging \
>         -  ${PN}-mailbox \
>         -  ${PN}-math \
>         -  ${PN}-mime \
>         -  ${PN}-mmap \
>         -  ${PN}-multiprocessing \
>         -  ${PN}-netclient \
>         -  ${PN}-netserver \
>         -  ${PN}-numbers \
>         -  ${PN}-pickle \
>         -  ${PN}-pkgutil \
>         -  ${PN}-plistlib \
>         -  ${PN}-pprint \
>         -  ${PN}-profile \
>         -  ${PN}-pydoc \
>         -  ${PN}-re \
>         -  ${PN}-readline \
>         -  ${PN}-resource \
>         -  ${PN}-robotparser \
>         -  ${PN}-runpy \
>         -  ${PN}-shell \
>         -  ${PN}-smtpd \
>         -  ${PN}-sqlite3 \
>         -  ${PN}-sqlite3-tests \
>         -  ${PN}-stringold \
>         -  ${PN}-subprocess \
>         -  ${PN}-syslog \
>         -  ${PN}-terminal \
>         -  ${PN}-tests \
>         -  ${PN}-textutils \
>         -  ${PN}-threading \
>         -  ${PN}-tkinter \
>         -  ${PN}-unittest \
>         -  ${PN}-unixadmin \
>         -  ${PN}-xml \
>         -  ${PN}-xmlrpc \
>         -  ${PN}-zlib \
>         -"
>         -
>         -PACKAGES=" \
>         -  ${PN}-dbg \
>         -  ${PN}-2to3 \
>         -  ${PN}-argparse \
>         -  ${PN}-audio \
>         -  ${PN}-bsddb \
>         -  ${PN}-codecs \
>         -  ${PN}-compile \
>         -  ${PN}-compiler \
>         -  ${PN}-compression \
>         -  ${PN}-contextlib \
>         -  ${PN}-core \
>         -  ${PN}-crypt \
>         -  ${PN}-ctypes \
>         -  ${PN}-curses \
>         -  ${PN}-datetime \
>         -  ${PN}-db \
>         -  ${PN}-debugger \
>         -  ${PN}-dev \
>         -  ${PN}-difflib \
>         -  ${PN}-distutils-staticdev ${PN}-distutils \
>         -  ${PN}-doctest \
>         -  ${PN}-email \
>         -  ${PN}-fcntl \
>         -  ${PN}-gdbm \
>         -  ${PN}-hotshot \
>         -  ${PN}-html \
>         -  ${PN}-idle \
>         -  ${PN}-image \
>         -  ${PN}-importlib \
>         -  ${PN}-io \
>         -  ${PN}-json \
>         -  ${PN}-lang \
>         -  ${PN}-logging \
>         -  ${PN}-mailbox \
>         -  ${PN}-math \
>         -  ${PN}-mime \
>         -  ${PN}-mmap \
>         -  ${PN}-multiprocessing \
>         -  ${PN}-netclient \
>         -  ${PN}-netserver \
>         -  ${PN}-numbers \
>         -  ${PN}-pickle \
>         -  ${PN}-pkgutil \
>         -  ${PN}-plistlib \
>         -  ${PN}-pprint \
>         -  ${PN}-profile \
>         -  ${PN}-pydoc \
>         -  ${PN}-re \
>         -  ${PN}-readline \
>         -  ${PN}-resource \
>         -  ${PN}-robotparser \
>         -  ${PN}-runpy \
>         -  ${PN}-shell \
>         -  ${PN}-smtpd \
>         -  ${PN}-sqlite3 \
>         -  ${PN}-sqlite3-tests \
>         -  ${PN}-stringold \
>         -  ${PN}-subprocess \
>         -  ${PN}-syslog \
>         -  ${PN}-terminal \
>         -  ${PN}-tests \
>         -  ${PN}-textutils \
>         -  ${PN}-threading \
>         -  ${PN}-tkinter \
>         -  ${PN}-unittest \
>         -  ${PN}-unixadmin \
>         -  ${PN}-xml \
>         -  ${PN}-xmlrpc \
>         -  ${PN}-zlib \
>         -  ${PN}-modules\
>         -"
>         -
>         -SUMMARY_${PN}-2to3="Python automated Python 2 to 3 code
>         translator"
>         -RDEPENDS_${PN}-2to3="${PN}-core"
>         -FILES_${PN}-2to3=" \
>         -    ${bindir}/2to3 \
>         -    ${libdir}/python2.7/lib2to3 \
>         -"
>         -
>         -SUMMARY_${PN}-argparse="Python command line argument parser"
>         -RDEPENDS_${PN}-argparse="${PN}-core ${PN}-codecs ${PN}-textutils"
>         -FILES_${PN}-argparse=" \
>         -    ${libdir}/python2.7/argparse.* \
>         -"
>         -
>         -SUMMARY_${PN}-audio="Python Audio Handling"
>         -RDEPENDS_${PN}-audio="${PN}-core"
>         -FILES_${PN}-audio=" \
>         -    ${libdir}/python2.7/wave.* \
>         -    ${libdir}/python2.7/chunk.* \
>         -    ${libdir}/python2.7/sndhdr.* \
>         -    ${libdir}/python2.7/lib-dynload/ossaudiodev.so \
>         -    ${libdir}/python2.7/lib-dynload/audioop.so \
>         -    ${libdir}/python2.7/audiodev.* \
>         -    ${libdir}/python2.7/sunaudio.* \
>         -    ${libdir}/python2.7/sunau.* \
>         -    ${libdir}/python2.7/toaiff.* \
>         -"
>         -
>         -SUMMARY_${PN}-bsddb="Python bindings for the Berkeley Database"
>         -RDEPENDS_${PN}-bsddb="${PN}-core"
>         -FILES_${PN}-bsddb=" \
>         -    ${libdir}/python2.7/bsddb \
>         -    ${libdir}/python2.7/lib-dynload/_bsddb.so \
>         -"
>         -
>         -SUMMARY_${PN}-codecs="Python codecs, encodings & i18n support"
>         -RDEPENDS_${PN}-codecs="${PN}-core ${PN}-lang"
>         -FILES_${PN}-codecs=" \
>         -    ${libdir}/python2.7/codecs.* \
>         -    ${libdir}/python2.7/encodings \
>         -    ${libdir}/python2.7/gettext.* \
>         -    ${libdir}/python2.7/locale.* \
>         -    ${libdir}/python2.7/lib-dynload/_locale.so \
>         -    ${libdir}/python2.7/lib-dynload/_codecs* \
>         -    ${libdir}/python2.7/lib-dynload/_multibytecodec.so \
>         -    ${libdir}/python2.7/lib-dynload/unicodedata.so \
>         -    ${libdir}/python2.7/stringprep.* \
>         -    ${libdir}/python2.7/xdrlib.* \
>         -"
>         -
>         -SUMMARY_${PN}-compile="Python bytecode compilation support"
>         -RDEPENDS_${PN}-compile="${PN}-core"
>         -FILES_${PN}-compile=" \
>         -    ${libdir}/python2.7/py_compile.* \
>         -    ${libdir}/python2.7/compileall.* \
>         -"
>         -
>         -SUMMARY_${PN}-compiler="Python compiler support"
>         -RDEPENDS_${PN}-compiler="${PN}-core"
>         -FILES_${PN}-compiler=" \
>         -    ${libdir}/python2.7/compiler \
>         -"
>         -
>         -SUMMARY_${PN}-compression="Python high-level compression support"
>         -RDEPENDS_${PN}-compression="${PN}-core ${PN}-zlib"
>         -FILES_${PN}-compression=" \
>         -    ${libdir}/python2.7/gzip.* \
>         -    ${libdir}/python2.7/zipfile.* \
>         -    ${libdir}/python2.7/tarfile.* \
>         -    ${libdir}/python2.7/lib-dynload/bz2.so \
>         -"
>         -
>         -SUMMARY_${PN}-contextlib="Python utilities for
>         with-statementcontexts."
>         -RDEPENDS_${PN}-contextlib="${PN}-core"
>         -FILES_${PN}-contextlib=" \
>         -    ${libdir}/python${PYTHON_MAJMIN}/contextlib.* \
>         -"
>         -
>         -SUMMARY_${PN}-core="Python interpreter and core modules"
>         -RDEPENDS_${PN}-core="${PN}-lang ${PN}-re"
>         -FILES_${PN}-core=" \
>         -    ${libdir}/python2.7/__future__.* \
>         -    ${libdir}/python2.7/_abcoll.* \
>         -    ${libdir}/python2.7/abc.* \
>         -    ${libdir}/python2.7/ast.* \
>         -    ${libdir}/python2.7/copy.* \
>         -    ${libdir}/python2.7/copy_reg.* \
>         -    ${libdir}/python2.7/ConfigParser.* \
>         -    ${libdir}/python2.7/genericpath.* \
>         -    ${libdir}/python2.7/getopt.* \
>         -    ${libdir}/python2.7/linecache.* \
>         -    ${libdir}/python2.7/new.* \
>         -    ${libdir}/python2.7/os.* \
>         -    ${libdir}/python2.7/posixpath.* \
>         -    ${libdir}/python2.7/struct.* \
>         -    ${libdir}/python2.7/warnings.* \
>         -    ${libdir}/python2.7/site.* \
>         -    ${libdir}/python2.7/stat.* \
>         -    ${libdir}/python2.7/UserDict.* \
>         -    ${libdir}/python2.7/UserList.* \
>         -    ${libdir}/python2.7/UserString.* \
>         -    ${libdir}/python2.7/lib-dynload/binascii.so \
>         -    ${libdir}/python2.7/lib-dynload/_struct.so \
>         -    ${libdir}/python2.7/lib-dynload/time.so \
>         -    ${libdir}/python2.7/lib-dynload/xreadlines.so \
>         -    ${libdir}/python2.7/types.* \
>         -    ${libdir}/python2.7/platform.* \
>         -    ${bindir}/python* \
>         -    ${libdir}/python2.7/_weakrefset.* \
>         -    ${libdir}/python2.7/sysconfig.* \
>         -    ${libdir}/python2.7/_sysconfigdata.* \
>         -    ${includedir}/python${PYTHON_MAJMIN}/pyconfig*.h \
>         -    ${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py \
>         -"
>         -
>         -SUMMARY_${PN}-crypt="Python basic cryptographic and hashing
>         support"
>         -RDEPENDS_${PN}-crypt="${PN}-core"
>         -FILES_${PN}-crypt=" \
>         -    ${libdir}/python2.7/hashlib.* \
>         -    ${libdir}/python2.7/md5.* \
>         -    ${libdir}/python2.7/sha.* \
>         -    ${libdir}/python2.7/lib-dynload/crypt.so \
>         -    ${libdir}/python2.7/lib-dynload/_hashlib.so \
>         -    ${libdir}/python2.7/lib-dynload/_sha256.so \
>         -    ${libdir}/python2.7/lib-dynload/_sha512.so \
>         -"
>         -
>         -SUMMARY_${PN}-ctypes="Python C types support"
>         -RDEPENDS_${PN}-ctypes="${PN}-core"
>         -FILES_${PN}-ctypes=" \
>         -    ${libdir}/python2.7/ctypes \
>         -    ${libdir}/python2.7/lib-dynload/_ctypes.so \
>         -    ${libdir}/python2.7/lib-dynload/_ctypes_test.so \
>         -"
>         -
>         -SUMMARY_${PN}-curses="Python curses support"
>         -RDEPENDS_${PN}-curses="${PN}-core"
>         -FILES_${PN}-curses=" \
>         -    ${libdir}/python2.7/curses \
>         -    ${libdir}/python2.7/lib-dynload/_curses.so \
>         -    ${libdir}/python2.7/lib-dynload/_curses_panel.so \
>         -"
>         -
>         -SUMMARY_${PN}-datetime="Python calendar and time support"
>         -RDEPENDS_${PN}-datetime="${PN}-core ${PN}-codecs"
>         -FILES_${PN}-datetime=" \
>         -    ${libdir}/python2.7/_strptime.* \
>         -    ${libdir}/python2.7/calendar.* \
>         -    ${libdir}/python2.7/lib-dynload/datetime.so \
>         -"
>         -
>         -SUMMARY_${PN}-db="Python file-based database support"
>         -RDEPENDS_${PN}-db="${PN}-core"
>         -FILES_${PN}-db=" \
>         -    ${libdir}/python2.7/anydbm.* \
>         -    ${libdir}/python2.7/dumbdbm.* \
>         -    ${libdir}/python2.7/whichdb.* \
>         -"
>         -
>         -SUMMARY_${PN}-debugger="Python debugger"
>         -RDEPENDS_${PN}-debugger="${PN}-core ${PN}-io ${PN}-lang
>         ${PN}-re ${PN}-stringold ${PN}-shell ${PN}-pprint"
>         -FILES_${PN}-debugger=" \
>         -    ${libdir}/python2.7/bdb.* \
>         -    ${libdir}/python2.7/pdb.* \
>         -"
>         -
>         -SUMMARY_${PN}-dev="Python development package"
>         -RDEPENDS_${PN}-dev="${PN}-core"
>         -FILES_${PN}-dev=" \
>         -    ${includedir} \
>         -    ${libdir}/lib*${SOLIBSDEV} \
>         -    ${libdir}/*.la \
>         -    ${libdir}/*.a \
>         -    ${libdir}/*.o \
>         -    ${libdir}/pkgconfig \
>         -    ${base_libdir}/*.a \
>         -    ${base_libdir}/*.o \
>         -    ${datadir}/aclocal \
>         -    ${datadir}/pkgconfig \
>         -    ${libdir}/python2.7/config/Makefile \
>         -"
>         -
>         -SUMMARY_${PN}-difflib="Python helpers for computing deltas
>         between objects"
>         -RDEPENDS_${PN}-difflib="${PN}-lang ${PN}-re"
>         -FILES_${PN}-difflib=" \
>         -    ${libdir}/python2.7/difflib.* \
>         -"
>         -
>         -SUMMARY_${PN}-distutils="Python Distribution Utilities"
>         -RDEPENDS_${PN}-distutils="${PN}-core ${PN}-email"
>         -FILES_${PN}-distutils=" \
>         -    ${libdir}/python2.7/config \
>         -    ${libdir}/python2.7/distutils \
>         -"
>         -
>         -SUMMARY_${PN}-distutils-staticdev="Python distribution
>         utilities (static libraries)"
>         -RDEPENDS_${PN}-distutils-staticdev="${PN}-distutils"
>         -FILES_${PN}-distutils-staticdev=" \
>         -    ${libdir}/python2.7/config/lib*.a \
>         -"
>         -
>         -SUMMARY_${PN}-doctest="Python framework for running examples
>         in docstrings"
>         -RDEPENDS_${PN}-doctest="${PN}-core ${PN}-lang ${PN}-io
>         ${PN}-re ${PN}-unittest ${PN}-debugger ${PN}-difflib"
>         -FILES_${PN}-doctest=" \
>         -    ${libdir}/python2.7/doctest.* \
>         -"
>         -
>         -SUMMARY_${PN}-email="Python email support"
>         -RDEPENDS_${PN}-email="${PN}-core ${PN}-io ${PN}-re ${PN}-mime
>         ${PN}-audio ${PN}-image ${PN}-netclient"
>         -FILES_${PN}-email=" \
>         -    ${libdir}/python2.7/imaplib.* \
>         -    ${libdir}/python2.7/email \
>         -"
>         -
>         -SUMMARY_${PN}-fcntl="Python's fcntl interface"
>         -RDEPENDS_${PN}-fcntl="${PN}-core"
>         -FILES_${PN}-fcntl=" \
>         -    ${libdir}/python2.7/lib-dynload/fcntl.so \
>         -"
>         -
>         -SUMMARY_${PN}-gdbm="Python GNU database support"
>         -RDEPENDS_${PN}-gdbm="${PN}-core"
>         -FILES_${PN}-gdbm=" \
>         -    ${libdir}/python2.7/lib-dynload/gdbm.so \
>         -"
>         -
>         -SUMMARY_${PN}-hotshot="Python hotshot performance profiler"
>         -RDEPENDS_${PN}-hotshot="${PN}-core"
>         -FILES_${PN}-hotshot=" \
>         -    ${libdir}/python2.7/hotshot \
>         -    ${libdir}/python2.7/lib-dynload/_hotshot.so \
>         -"
>         -
>         -SUMMARY_${PN}-html="Python HTML processing support"
>         -RDEPENDS_${PN}-html="${PN}-core"
>         -FILES_${PN}-html=" \
>         -    ${libdir}/python2.7/formatter.* \
>         -    ${libdir}/python2.7/htmlentitydefs.* \
>         -    ${libdir}/python2.7/htmllib.* \
>         -    ${libdir}/python2.7/markupbase.* \
>         -    ${libdir}/python2.7/sgmllib.* \
>         -    ${libdir}/python2.7/HTMLParser.* \
>         -"
>         -
>         -SUMMARY_${PN}-idle="Python Integrated Development Environment"
>         -RDEPENDS_${PN}-idle="${PN}-core ${PN}-tkinter"
>         -FILES_${PN}-idle=" \
>         -    ${bindir}/idle \
>         -    ${libdir}/python2.7/idlelib \
>         -"
>         -
>         -SUMMARY_${PN}-image="Python graphical image handling"
>         -RDEPENDS_${PN}-image="${PN}-core"
>         -FILES_${PN}-image=" \
>         -    ${libdir}/python2.7/colorsys.* \
>         -    ${libdir}/python2.7/imghdr.* \
>         -    ${libdir}/python2.7/lib-dynload/imageop.so \
>         -    ${libdir}/python2.7/lib-dynload/rgbimg.so \
>         -"
>         -
>         -SUMMARY_${PN}-importlib="Python import implementation library"
>         -RDEPENDS_${PN}-importlib="${PN}-core"
>         -FILES_${PN}-importlib=" \
>         -    ${libdir}/python2.7/importlib \
>         -"
>         -
>         -SUMMARY_${PN}-io="Python low-level I/O"
>         -RDEPENDS_${PN}-io="${PN}-core ${PN}-math ${PN}-textutils
>         ${PN}-netclient ${PN}-contextlib"
>         -FILES_${PN}-io=" \
>         -    ${libdir}/python2.7/lib-dynload/_socket.so \
>         -    ${libdir}/python2.7/lib-dynload/_io.so \
>         -    ${libdir}/python2.7/lib-dynload/_ssl.so \
>         -    ${libdir}/python2.7/lib-dynload/select.so \
>         -    ${libdir}/python2.7/lib-dynload/termios.so \
>         -    ${libdir}/python2.7/lib-dynload/cStringIO.so \
>         -    ${libdir}/python2.7/pipes.* \
>         -    ${libdir}/python2.7/socket.* \
>         -    ${libdir}/python2.7/ssl.* \
>         -    ${libdir}/python2.7/tempfile.* \
>         -    ${libdir}/python2.7/StringIO.* \
>         -    ${libdir}/python2.7/io.* \
>         -    ${libdir}/python2.7/_pyio.* \
>         -"
>         -
>         -SUMMARY_${PN}-json="Python JSON support"
>         -RDEPENDS_${PN}-json="${PN}-core ${PN}-math ${PN}-re ${PN}-codecs"
>         -FILES_${PN}-json=" \
>         -    ${libdir}/python2.7/json \
>         -    ${libdir}/python2.7/lib-dynload/_json.so \
>         -"
>         -
>         -SUMMARY_${PN}-lang="Python low-level language support"
>         -RDEPENDS_${PN}-lang="${PN}-core"
>         -FILES_${PN}-lang=" \
>         -    ${libdir}/python2.7/lib-dynload/_bisect.so \
>         -    ${libdir}/python2.7/lib-dynload/_collections.so \
>         -    ${libdir}/python2.7/lib-dynload/_heapq.so \
>         -    ${libdir}/python2.7/lib-dynload/_weakref.so \
>         -    ${libdir}/python2.7/lib-dynload/_functools.so \
>         -    ${libdir}/python2.7/lib-dynload/array.so \
>         -    ${libdir}/python2.7/lib-dynload/itertools.so \
>         -    ${libdir}/python2.7/lib-dynload/operator.so \
>         -    ${libdir}/python2.7/lib-dynload/parser.so \
>         -    ${libdir}/python2.7/atexit.* \
>         -    ${libdir}/python2.7/bisect.* \
>         -    ${libdir}/python2.7/code.* \
>         -    ${libdir}/python2.7/codeop.* \
>         -    ${libdir}/python2.7/collections.* \
>         -    ${libdir}/python2.7/dis.* \
>         -    ${libdir}/python2.7/functools.* \
>         -    ${libdir}/python2.7/heapq.* \
>         -    ${libdir}/python2.7/inspect.* \
>         -    ${libdir}/python2.7/keyword.* \
>         -    ${libdir}/python2.7/opcode.* \
>         -    ${libdir}/python2.7/symbol.* \
>         -    ${libdir}/python2.7/repr.* \
>         -    ${libdir}/python2.7/token.* \
>         -    ${libdir}/python2.7/tokenize.* \
>         -    ${libdir}/python2.7/traceback.* \
>         -    ${libdir}/python2.7/weakref.* \
>         -"
>         -
>         -SUMMARY_${PN}-logging="Python logging support"
>         -RDEPENDS_${PN}-logging="${PN}-core ${PN}-io ${PN}-lang
>         ${PN}-pickle ${PN}-stringold"
>         -FILES_${PN}-logging=" \
>         -    ${libdir}/python2.7/logging \
>         -"
>         -
>         -SUMMARY_${PN}-mailbox="Python mailbox format support"
>         -RDEPENDS_${PN}-mailbox="${PN}-core ${PN}-mime"
>         -FILES_${PN}-mailbox=" \
>         -    ${libdir}/python2.7/mailbox.* \
>         -"
>         -
>         -SUMMARY_${PN}-math="Python math support"
>         -RDEPENDS_${PN}-math="${PN}-core ${PN}-crypt"
>         -FILES_${PN}-math=" \
>         -    ${libdir}/python2.7/lib-dynload/cmath.so \
>         -    ${libdir}/python2.7/lib-dynload/math.so \
>         -    ${libdir}/python2.7/lib-dynload/_random.so \
>         -    ${libdir}/python2.7/random.* \
>         -    ${libdir}/python2.7/sets.* \
>         -"
>         -
>         -SUMMARY_${PN}-mime="Python MIME handling APIs"
>         -RDEPENDS_${PN}-mime="${PN}-core ${PN}-io"
>         -FILES_${PN}-mime=" \
>         -    ${libdir}/python2.7/mimetools.* \
>         -    ${libdir}/python2.7/uu.* \
>         -    ${libdir}/python2.7/quopri.* \
>         -    ${libdir}/python2.7/rfc822.* \
>         -    ${libdir}/python2.7/MimeWriter.* \
>         -"
>         -
>         -SUMMARY_${PN}-mmap="Python memory-mapped file support"
>         -RDEPENDS_${PN}-mmap="${PN}-core ${PN}-io"
>         -FILES_${PN}-mmap=" \
>         -    ${libdir}/python2.7/lib-dynload/mmap.so \
>         -"
>         -
>         -SUMMARY_${PN}-multiprocessing="Python multiprocessing support"
>         -RDEPENDS_${PN}-multiprocessing="${PN}-core ${PN}-io
>         ${PN}-lang ${PN}-pickle ${PN}-threading ${PN}-ctypes ${PN}-mmap"
>         -FILES_${PN}-multiprocessing=" \
>         -    ${libdir}/python2.7/lib-dynload/_multiprocessing.so \
>         -    ${libdir}/python2.7/multiprocessing \
>         -"
>         -
>         -SUMMARY_${PN}-netclient="Python Internet Protocol clients"
>         -RDEPENDS_${PN}-netclient="${PN}-core ${PN}-crypt
>         ${PN}-datetime ${PN}-io ${PN}-lang ${PN}-logging ${PN}-mime"
>         -FILES_${PN}-netclient=" \
>         -    ${libdir}/python2.7/*Cookie*.* \
>         -    ${libdir}/python2.7/base64.* \
>         -    ${libdir}/python2.7/cookielib.* \
>         -    ${libdir}/python2.7/ftplib.* \
>         -    ${libdir}/python2.7/gopherlib.* \
>         -    ${libdir}/python2.7/hmac.* \
>         -    ${libdir}/python2.7/httplib.* \
>         -    ${libdir}/python2.7/mimetypes.* \
>         -    ${libdir}/python2.7/nntplib.* \
>         -    ${libdir}/python2.7/poplib.* \
>         -    ${libdir}/python2.7/smtplib.* \
>         -    ${libdir}/python2.7/telnetlib.* \
>         -    ${libdir}/python2.7/urllib.* \
>         -    ${libdir}/python2.7/urllib2.* \
>         -    ${libdir}/python2.7/urlparse.* \
>         -    ${libdir}/python2.7/uuid.* \
>         -    ${libdir}/python2.7/rfc822.* \
>         -    ${libdir}/python2.7/mimetools.* \
>         -"
>         -
>         -SUMMARY_${PN}-netserver="Python Internet Protocol servers"
>         -RDEPENDS_${PN}-netserver="${PN}-core ${PN}-netclient
>         ${PN}-shell ${PN}-threading"
>         -FILES_${PN}-netserver=" \
>         -    ${libdir}/python2.7/cgi.* \
>         -    ${libdir}/python2.7/*HTTPServer.* \
>         -    ${libdir}/python2.7/SocketServer.* \
>         -"
>         -
>         -SUMMARY_${PN}-numbers="Python number APIs"
>         -RDEPENDS_${PN}-numbers="${PN}-core ${PN}-lang ${PN}-re"
>         -FILES_${PN}-numbers=" \
>         -    ${libdir}/python2.7/decimal.* \
>         -    ${libdir}/python2.7/fractions.* \
>         -    ${libdir}/python2.7/numbers.* \
>         -"
>         -
>         -SUMMARY_${PN}-pickle="Python serialisation/persistence support"
>         -RDEPENDS_${PN}-pickle="${PN}-core ${PN}-codecs ${PN}-io ${PN}-re"
>         -FILES_${PN}-pickle=" \
>         -    ${libdir}/python2.7/pickle.* \
>         -    ${libdir}/python2.7/shelve.* \
>         -    ${libdir}/python2.7/lib-dynload/cPickle.so \
>         -    ${libdir}/python2.7/pickletools.* \
>         -"
>         -
>         -SUMMARY_${PN}-pkgutil="Python package extension utility support"
>         -RDEPENDS_${PN}-pkgutil="${PN}-core"
>         -FILES_${PN}-pkgutil=" \
>         -    ${libdir}/python2.7/pkgutil.* \
>         -"
>         -
>         -SUMMARY_${PN}-plistlib="Generate and parse Mac OS X .plist files"
>         -RDEPENDS_${PN}-plistlib="${PN}-core ${PN}-datetime ${PN}-io"
>         -FILES_${PN}-plistlib=" \
>         -    ${libdir}/python2.7/plistlib.* \
>         -"
>         -
>         -SUMMARY_${PN}-pprint="Python pretty-print support"
>         -RDEPENDS_${PN}-pprint="${PN}-core ${PN}-io"
>         -FILES_${PN}-pprint=" \
>         -    ${libdir}/python2.7/pprint.* \
>         -"
>         -
>         -SUMMARY_${PN}-profile="Python basic performance profiling
>         support"
>         -RDEPENDS_${PN}-profile="${PN}-core ${PN}-textutils"
>         -FILES_${PN}-profile=" \
>         -    ${libdir}/python2.7/profile.* \
>         -    ${libdir}/python2.7/pstats.* \
>         -    ${libdir}/python2.7/cProfile.* \
>         -    ${libdir}/python2.7/lib-dynload/_lsprof.so \
>         -"
>         -
>         -SUMMARY_${PN}-pydoc="Python interactive help support"
>         -RDEPENDS_${PN}-pydoc="${PN}-core ${PN}-lang ${PN}-stringold
>         ${PN}-re"
>         -FILES_${PN}-pydoc=" \
>         -    ${bindir}/pydoc \
>         -    ${libdir}/python2.7/pydoc.* \
>         -    ${libdir}/python2.7/pydoc_data \
>         -"
>         -
>         -SUMMARY_${PN}-re="Python Regular Expression APIs"
>         -RDEPENDS_${PN}-re="${PN}-core"
>         -FILES_${PN}-re=" \
>         -    ${libdir}/python2.7/re.* \
>         -    ${libdir}/python2.7/sre.* \
>         -    ${libdir}/python2.7/sre_compile.* \
>         -    ${libdir}/python2.7/sre_constants* \
>         -    ${libdir}/python2.7/sre_parse.* \
>         -"
>         -
>         -SUMMARY_${PN}-readline="Python readline support"
>         -RDEPENDS_${PN}-readline="${PN}-core"
>         -FILES_${PN}-readline=" \
>         -    ${libdir}/python2.7/lib-dynload/readline.so \
>         -    ${libdir}/python2.7/rlcompleter.* \
>         -"
>         -
>         -SUMMARY_${PN}-resource="Python resource control interface"
>         -RDEPENDS_${PN}-resource="${PN}-core"
>         -FILES_${PN}-resource=" \
>         -    ${libdir}/python2.7/lib-dynload/resource.so \
>         -"
>         -
>         -SUMMARY_${PN}-robotparser="Python robots.txt parser"
>         -RDEPENDS_${PN}-robotparser="${PN}-core ${PN}-netclient"
>         -FILES_${PN}-robotparser=" \
>         -    ${libdir}/python2.7/robotparser.* \
>         -"
>         -
>         -SUMMARY_${PN}-runpy="Python script for locating/executing
>         scripts in module namespace"
>         -RDEPENDS_${PN}-runpy="${PN}-core ${PN}-pkgutil"
>         -FILES_${PN}-runpy=" \
>         -    ${libdir}/python2.7/runpy.* \
>         -"
>         -
>         -SUMMARY_${PN}-shell="Python shell-like functionality"
>         -RDEPENDS_${PN}-shell="${PN}-core ${PN}-re"
>         -FILES_${PN}-shell=" \
>         -    ${libdir}/python2.7/cmd.* \
>         -    ${libdir}/python2.7/commands.* \
>         -    ${libdir}/python2.7/dircache.* \
>         -    ${libdir}/python2.7/fnmatch.* \
>         -    ${libdir}/python2.7/glob.* \
>         -    ${libdir}/python2.7/popen2.* \
>         -    ${libdir}/python2.7/shlex.* \
>         -    ${libdir}/python2.7/shutil.* \
>         -"
>         -
>         -SUMMARY_${PN}-smtpd="Python Simple Mail Transport Daemon"
>         -RDEPENDS_${PN}-smtpd="${PN}-core ${PN}-netserver ${PN}-email
>         ${PN}-mime"
>         -FILES_${PN}-smtpd=" \
>         -    ${bindir}/smtpd.* \
>         -    ${libdir}/python2.7/smtpd.* \
>         -"
>         -
>         -SUMMARY_${PN}-sqlite3="Python Sqlite3 database support"
>         -RDEPENDS_${PN}-sqlite3="${PN}-core ${PN}-datetime ${PN}-lang
>         ${PN}-crypt ${PN}-io ${PN}-threading ${PN}-zlib"
>         -FILES_${PN}-sqlite3=" \
>         -    ${libdir}/python2.7/lib-dynload/_sqlite3.so \
>         -    ${libdir}/python2.7/sqlite3/dbapi2.* \
>         -    ${libdir}/python2.7/sqlite3/__init__.* \
>         -    ${libdir}/python2.7/sqlite3/dump.* \
>         -"
>         -
>         -SUMMARY_${PN}-sqlite3-tests="Python Sqlite3 database support
>         tests"
>         -RDEPENDS_${PN}-sqlite3-tests="${PN}-core ${PN}-sqlite3"
>         -FILES_${PN}-sqlite3-tests=" \
>         -    ${libdir}/python2.7/sqlite3/test \
>         -"
>         -
>         -SUMMARY_${PN}-stringold="Python string APIs [deprecated]"
>         -RDEPENDS_${PN}-stringold="${PN}-core ${PN}-re"
>         -FILES_${PN}-stringold=" \
>         -    ${libdir}/python2.7/lib-dynload/strop.so \
>         -    ${libdir}/python2.7/string.* \
>         -    ${libdir}/python2.7/stringold.* \
>         -"
>         -
>         -SUMMARY_${PN}-subprocess="Python subprocess support"
>         -RDEPENDS_${PN}-subprocess="${PN}-core ${PN}-io ${PN}-re
>         ${PN}-fcntl ${PN}-pickle"
>         -FILES_${PN}-subprocess=" \
>         -    ${libdir}/python2.7/subprocess.* \
>         -"
>         -
>         -SUMMARY_${PN}-syslog="Python syslog interface"
>         -RDEPENDS_${PN}-syslog="${PN}-core"
>         -FILES_${PN}-syslog=" \
>         -    ${libdir}/python2.7/lib-dynload/syslog.so \
>         -"
>         -
>         -SUMMARY_${PN}-terminal="Python terminal controlling support"
>         -RDEPENDS_${PN}-terminal="${PN}-core ${PN}-io"
>         -FILES_${PN}-terminal=" \
>         -    ${libdir}/python2.7/pty.* \
>         -    ${libdir}/python2.7/tty.* \
>         -"
>         -
>         -SUMMARY_${PN}-tests="Python tests"
>         -RDEPENDS_${PN}-tests="${PN}-core ${PN}-modules"
>         -FILES_${PN}-tests=" \
>         -    ${libdir}/python2.7/test \
>         -"
>         -
>         -SUMMARY_${PN}-textutils="Python option parsing, text wrapping
>         and CSV support"
>         -RDEPENDS_${PN}-textutils="${PN}-core ${PN}-io ${PN}-re
>         ${PN}-stringold"
>         -FILES_${PN}-textutils=" \
>         -    ${libdir}/python2.7/lib-dynload/_csv.so \
>         -    ${libdir}/python2.7/csv.* \
>         -    ${libdir}/python2.7/optparse.* \
>         -    ${libdir}/python2.7/textwrap.* \
>         -"
>         -
>         -SUMMARY_${PN}-threading="Python threading & synchronization
>         support"
>         -RDEPENDS_${PN}-threading="${PN}-core ${PN}-lang"
>         -FILES_${PN}-threading=" \
>         -    ${libdir}/python2.7/_threading_local.* \
>         -    ${libdir}/python2.7/dummy_thread.* \
>         -    ${libdir}/python2.7/dummy_threading.* \
>         -    ${libdir}/python2.7/mutex.* \
>         -    ${libdir}/python2.7/threading.* \
>         -    ${libdir}/python2.7/Queue.* \
>         -"
>         -
>         -SUMMARY_${PN}-tkinter="Python Tcl/Tk bindings"
>         -RDEPENDS_${PN}-tkinter="${PN}-core"
>         -FILES_${PN}-tkinter=" \
>         -    ${libdir}/python2.7/lib-dynload/_tkinter.so \
>         -    ${libdir}/python2.7/lib-tk \
>         -"
>         -
>         -SUMMARY_${PN}-unittest="Python unit testing framework"
>         -RDEPENDS_${PN}-unittest="${PN}-core ${PN}-stringold
>         ${PN}-lang ${PN}-io ${PN}-difflib ${PN}-pprint ${PN}-shell"
>         -FILES_${PN}-unittest=" \
>         -    ${libdir}/python2.7/unittest/ \
>         -"
>         -
>         -SUMMARY_${PN}-unixadmin="Python Unix administration support"
>         -RDEPENDS_${PN}-unixadmin="${PN}-core"
>         -FILES_${PN}-unixadmin=" \
>         -    ${libdir}/python2.7/lib-dynload/nis.so \
>         -    ${libdir}/python2.7/lib-dynload/grp.so \
>         -    ${libdir}/python2.7/lib-dynload/pwd.so \
>         -    ${libdir}/python2.7/getpass.* \
>         -"
>         -
>         -SUMMARY_${PN}-xml="Python basic XML support"
>         -RDEPENDS_${PN}-xml="${PN}-core ${PN}-re"
>         -FILES_${PN}-xml=" \
>         -    ${libdir}/python2.7/lib-dynload/_elementtree.so \
>         -    ${libdir}/python2.7/lib-dynload/pyexpat.so \
>         -    ${libdir}/python2.7/xml \
>         -    ${libdir}/python2.7/xmllib.* \
>         -"
>         -
>         -SUMMARY_${PN}-xmlrpc="Python XML-RPC support"
>         -RDEPENDS_${PN}-xmlrpc="${PN}-core ${PN}-xml ${PN}-netserver
>         ${PN}-lang"
>         -FILES_${PN}-xmlrpc=" \
>         -    ${libdir}/python2.7/xmlrpclib.* \
>         -    ${libdir}/python2.7/SimpleXMLRPCServer.* \
>         -    ${libdir}/python2.7/DocXMLRPCServer.* \
>         -"
>         -
>         -SUMMARY_${PN}-zlib="Python zlib compression support"
>         -RDEPENDS_${PN}-zlib="${PN}-core"
>         -FILES_${PN}-zlib=" \
>         -    ${libdir}/python2.7/lib-dynload/zlib.so \
>         -"
>         -
>         -SUMMARY_${PN}-modules="All Python modules"
>         -RDEPENDS_${PN}-modules=" \
>         -  ${PN}-2to3 \
>         -  ${PN}-argparse \
>         -  ${PN}-audio \
>         -  ${PN}-bsddb \
>         -  ${PN}-codecs \
>         -  ${PN}-compile \
>         -  ${PN}-compiler \
>         -  ${PN}-compression \
>         -  ${PN}-contextlib \
>         -  ${PN}-core \
>         -  ${PN}-crypt \
>         -  ${PN}-ctypes \
>         -  ${PN}-curses \
>         -  ${PN}-datetime \
>         -  ${PN}-db \
>         -  ${PN}-debugger \
>         -  ${PN}-difflib \
>         -  ${PN}-distutils \
>         -  ${PN}-doctest \
>         -  ${PN}-email \
>         -  ${PN}-fcntl \
>         -  ${PN}-gdbm \
>         -  ${PN}-hotshot \
>         -  ${PN}-html \
>         -  ${PN}-idle \
>         -  ${PN}-image \
>         -  ${PN}-importlib \
>         -  ${PN}-io \
>         -  ${PN}-json \
>         -  ${PN}-lang \
>         -  ${PN}-logging \
>         -  ${PN}-mailbox \
>         -  ${PN}-math \
>         -  ${PN}-mime \
>         -  ${PN}-mmap \
>         -  ${PN}-multiprocessing \
>         -  ${PN}-netclient \
>         -  ${PN}-netserver \
>         -  ${PN}-numbers \
>         -  ${PN}-pickle \
>         -  ${PN}-pkgutil \
>         -  ${PN}-plistlib \
>         -  ${PN}-pprint \
>         -  ${PN}-profile \
>         -  ${PN}-pydoc \
>         -  ${PN}-re \
>         -  ${PN}-readline \
>         -  ${PN}-resource \
>         -  ${PN}-robotparser \
>         -  ${PN}-runpy \
>         -  ${PN}-shell \
>         -  ${PN}-smtpd \
>         -  ${PN}-sqlite3 \
>         -  ${PN}-sqlite3-tests \
>         -  ${PN}-stringold \
>         -  ${PN}-subprocess \
>         -  ${PN}-syslog \
>         -  ${PN}-terminal \
>         -  ${PN}-textutils \
>         -  ${PN}-threading \
>         -  ${PN}-tkinter \
>         -  ${PN}-unittest \
>         -  ${PN}-unixadmin \
>         -  ${PN}-xml \
>         -  ${PN}-xmlrpc \
>         -  ${PN}-zlib \
>         -"
>         -ALLOW_EMPTY_${PN}-modules = "1"
>         -
>         -
>         diff --git
>         a/meta/recipes-devtools/python/python-native-2.7-manifest.inc
>         b/meta/recipes-devtools/python/python-native-2.7-manifest.inc
>         deleted file mode 100644
>         index b05aae0..0000000
>         --- a/meta/recipes-devtools/python/python-native-2.7-manifest.inc
>         +++ /dev/null
>         @@ -1,9 +0,0 @@
>         -
>         -# WARNING: This file is AUTO GENERATED: Manual edits will be
>         lost next time I regenerate the file.
>         -# Generator:
>         '../scripts/contrib/python/generate-manifest-2.7.py
>         <http://generate-manifest-2.7.py> --native' Version 20110222.2
>         (C) 2002-2010 Michael 'Mickey' Lauer <mlauer at vanille-media.de
>         <mailto:mlauer at vanille-media.de>>
>         -
>         -
>         -
>         -RPROVIDES += "python-modules-native python-2to3-native
>         python-argparse-native python-audio-native python-bsddb-native
>         python-codecs-native python-compile-native
>         python-compiler-native python-compression-native
>         python-contextlib-native python-core-native
>         python-crypt-native python-ctypes-native python-curses-native
>         python-datetime-native python-db-native python-debugger-native
>         python-dev-native python-difflib-native
>         python-distutils-native python-distutils-staticdev-native
>         python-doctest- [...]
>         -
>         -
>         diff --git
>         a/meta/recipes-devtools/python/python-native_2.7.13.bb
>         <http://python-native_2.7.13.bb>
>         b/meta/recipes-devtools/python/python-native_2.7.13.bb
>         <http://python-native_2.7.13.bb>
>         index 7edf153..2b74003 100644
>         --- a/meta/recipes-devtools/python/python-native_2.7.13.bb
>         <http://python-native_2.7.13.bb>
>         +++ b/meta/recipes-devtools/python/python-native_2.7.13.bb
>         <http://python-native_2.7.13.bb>
>         @@ -1,5 +1,4 @@
>          require python.inc
>         -
>          EXTRANATIVEPATH += "bzip2-native"
>          DEPENDS = "openssl-native bzip2-replacement-native
>         zlib-native readline-native sqlite3-native expat-native"
>          PR = "${INC_PR}.1"
>         @@ -25,8 +24,6 @@ FILESEXTRAPATHS =. "${FILE_DIRNAME}/${PN}:"
>
>          inherit native
>
>         -require python-native-${PYTHON_MAJMIN}-manifest.inc
>         -
>          EXTRA_OECONF_append = " --bindir=${bindir}/${PN}
>         --with-system-expat=${STAGING_DIR_HOST}"
>
>          EXTRA_OEMAKE = '\
>         @@ -59,3 +56,24 @@ do_install() {
>                 # installed in the native sysroot, so disable user
>         site support.
>                 sed -i -e 's,^\(ENABLE_USER_SITE = \).*,\1False,'
>         ${D}${libdir}/python${PYTHON_MAJMIN}/site.py
>          }
>         +
>         +python(){
>         +
>         +    # Read JSON manifest
>         +    import json
>         +    pythondir = d.getVar('THISDIR',True)
>         +    with open(pythondir+'/python/python2-manifest.json') as
>         manifest_file:
>         +        python_manifest=json.load(manifest_file)
>         +
>         +    rprovides = d.getVar('RPROVIDES').split()
>         +
>         +    # Hardcoded since it cant be python-native-foo, should be
>         python-foo-native
>         +    pn = 'python'
>         +
>         +    for key in python_manifest:
>         +        pypackage = pn + '-' + key + '-native'
>         +        if pypackage not in rprovides:
>         +              rprovides.append(pypackage)
>         +
>         +    d.setVar('RPROVIDES', ' '.join(rprovides))
>         +}
>         diff --git
>         a/meta/recipes-devtools/python/python/create_manifest2.py
>         b/meta/recipes-devtools/python/python/create_manifest2.py
>         new file mode 100644
>         index 0000000..bd64ec3
>         --- /dev/null
>         +++ b/meta/recipes-devtools/python/python/create_manifest2.py
>         @@ -0,0 +1,277 @@
>         +# This script is used as a bitbake task to create a new
>         python manifest
>         +# $ bitbake python -c create_manifest
>         +#
>         +# Our goal is to keep python-core as small as posible and add
>         other python
>         +# packages only when the user needs them, hence why we split
>         upstream python
>         +# into several packages.
>         +#
>         +# In a very simplistic way what this does is:
>         +# Launch python and see specifically what is required for it
>         to run at a minimum
>         +#
>         +# Go through the python-manifest file and launch a separate
>         task for every single
>         +# one of the files on each package, this task will check what
>         was required for that
>         +# specific module to run, these modules will be called
>         dependencies.
>         +# The output of such task will be a list of the modules or
>         dependencies that were
>         +# found for that file.
>         +#
>         +# Such output will be parsed by this script, we will look for
>         each dependency on the
>         +# manifest and if we find that another package already
>         includes it, then we will add
>         +# that package as an RDEPENDS to the package we are currently
>         checking; in case we dont
>         +# find the current dependency on any other package we will
>         add it to the current package
>         +# as part of FILES.
>         +#
>         +#
>         +# This way we will create a new manifest from the data
>         structure that was built during
>         +# this process, ont this new manifest each package will
>         contain specifically only
>         +# what it needs to run.
>         +#
>         +# There are some caveats which we try to deal with, such as
>         repeated files on different
>         +# packages, packages that include folders, wildcards, and
>         special packages.
>         +# Its also important to note that this method only works for
>         python files, and shared
>         +# libraries. Static libraries, header files and binaries need
>         to be dealt with manually.
>         +#
>         +# Author: Alejandro Enedino Hernandez Samaniego "aehs29"
>         <aehs29 at gmail.com <mailto:aehs29 at gmail.com>>
>         +
>         +
>         +import sys
>         +import subprocess
>         +import json
>         +import os
>         +
>         +# Hack to get native python search path (for folders), not
>         fond of it but it works for now
>         +pivot='recipe-sysroot-native'
>         +for p in sys.path:
>         +  if pivot in p:
>         +    nativelibfolder=p[:p.find(pivot)+len(pivot)]
>         +
>         +# Empty dict to hold the whole manifest
>         +new_manifest = {}
>         +
>         +# Check for repeated files, folders and wildcards
>         +allfiles=[]
>         +repeated=[]
>         +wildcards=[]
>         +
>         +hasfolders=[]
>         +allfolders=[]
>         +
>         +def isFolder(value):
>         +  if
>         os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib'))
>         or
>         os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib64'))
>         or
>         os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib32')):
>         +    return True
>         +  else:
>         +    return False
>         +
>         +# Read existing JSON manifest
>         +with open('python2-manifest.json') as manifest:
>         +  old_manifest=json.load(manifest)
>         +
>         +
>         +# First pass to get core-package functionality, because we
>         base everything on the fact that core is actually working
>         +# Not exactly the same so it should not be a function
>         +print ("Getting dependencies for core package:")
>         +
>         +# Special call to check for core package
>         +output = subprocess.check_output([sys.executable,
>         'get_module_deps2.py', 'python-core-package'])
>         +for item in output.split():
>         +    # We append it so it doesnt hurt what we currently have:
>         +    if item not in old_manifest['core']['files']:
>         +        # We use the same data structure since its the one
>         which will be used to check
>         +        # dependencies for other packages
>         +        old_manifest['core']['files'].append(item)
>         +
>         +for value in old_manifest['core']['files']:
>         +  # Ignore folders, since we don't import those, difficult to
>         handle multilib
>         +  if isFolder(value):
>         +    # Pass it directly
>         +    if value not in old_manifest['core']['files']:
>         +      old_manifest['core']['files'].append(value)
>         +  # Ignore binaries, since we don't import those, assume it
>         was added correctly (manually)
>         +  if '${bindir}' in value:
>         +    # Pass it directly
>         +    if value not in old_manifest['core']['files']:
>         +      old_manifest['core']['files'].append(value)
>         +    continue
>         +  # Ignore empty values
>         +  if value == '':
>         +    continue
>         +  if '${includedir}' in value:
>         +    if value not in old_manifest['core']['files']:
>         +      old_manifest['core']['files'].append(value)
>         +    continue
>         +  # Get module name , shouldnt be affected by libdir/bindir
>         +  value =
>         os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
>         +
>         +
>         +  # Launch separate task for each module for deterministic
>         behavior
>         +  # Each module will only import what is necessary for it to
>         work in specific
>         +  print ('Getting dependencies for module: %s' % value)
>         +  output = subprocess.check_output([sys.executable,
>         'get_module_deps2.py', '%s' % value])
>         +  for item in output.split():
>         +    # We append it so it doesnt hurt what we currently have:
>         +    if item not in old_manifest['core']['files']:
>         +      old_manifest['core']['files'].append(item)
>         +
>         +# We check which packages include folders
>         +for key in old_manifest:
>         +    for value in old_manifest[key]['files']:
>         +        # Ignore folders, since we don't import those,
>         difficult to handle multilib
>         +        if isFolder(value):
>         +            print ('%s is a folder' % value)
>         +            if key not in hasfolders:
>         +                hasfolders.append(key)
>         +            if value not in allfolders:
>         +                allfolders.append(value)
>         +
>         +for key in old_manifest:
>         +    # Use an empty dict as data structure to hold data for
>         each package and fill it up
>         +    new_manifest[key]={}
>         +    new_manifest[key]['files']=[]
>         +    new_manifest[key]['rdepends']=[]
>         +    # All packages should depend on core
>         +    if key != 'core':
>         +         new_manifest[key]['rdepends'].append('core')
>         +    new_manifest[key]['summary']=old_manifest[key]['summary']
>         +
>         +    # Handle special cases, we assume that when they were
>         manually added
>         +    # to the manifest we knew what we were doing.
>         +    print ('Handling package %s' % key)
>         +    special_packages=['misc', 'modules', 'dev']
>         +    if key in special_packages or 'staticdev' in key:
>         +        print('Passing %s package directly' % key)
>         +        new_manifest[key]=old_manifest[key]
>         +        continue
>         +
>         +    for value in old_manifest[key]['files']:
>         +        # We already handled core on the first pass
>         +        if key == 'core':
>         +            new_manifest[key]['files'].append(value)
>         +            continue
>         +        # Ignore folders, since we don't import those,
>         difficult to handle multilib
>         +        if isFolder(value):
>         +            # Pass folders directly
>         +            new_manifest[key]['files'].append(value)
>         +        # Ignore binaries, since we don't import those
>         +        if '${bindir}' in value:
>         +            # Pass it directly to the new manifest data structure
>         +            if value not in new_manifest[key]['files']:
>         +                new_manifest[key]['files'].append(value)
>         +            continue
>         +        # Ignore empty values
>         +        if value == '':
>         +            continue
>         +        if '${includedir}' in value:
>         +            if value not in new_manifest[key]['files']:
>         +                new_manifest[key]['files'].append(value)
>         +            continue
>         +        # Get module name , shouldnt be affected by libdir/bindir
>         +        value =
>         os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
>         +
>         +        # Launch separate task for each module for
>         deterministic behavior
>         +        # Each module will only import what is necessary for
>         it to work in specific
>         +        print ('Getting dependencies for module: %s' % value)
>         +        output = subprocess.check_output([sys.executable,
>         'get_module_deps2.py', '%s' % value])
>         +
>         +        # We can print dependencies for debugging purposes
>         +        #print (output)
>         +        # Output will have all dependencies
>         +        for item in output.split():
>         +
>         +            # Warning: This first part is ugly
>         +            # One of the dependencies that was found, could
>         be inside of one of the folders included by another package
>         +            # We need to check if this happens so we can add
>         the package containing the folder as an RDEPENDS
>         +            # e.g. Folder encodings contained in codecs
>         +            # This would be solved if no packages included
>         any folders
>         +
>         +            # This can be done in two ways:
>         +            # 1 - We assume that if we take out the filename
>         from the path we would get
>         +            #   the folder string, then we would check if
>         folder string is in the list of folders
>         +            #   This would not work if a package contains a
>         folder which contains another folder
>         +            #   e.g. path/folder1/folder2/filename
>         folder_string= path/folder1/folder2
>         +            #   folder_string would not match any value
>         contained in the list of folders
>         +            #
>         +            # 2 - We do it the other way around, checking if
>         the folder is contained in the path
>         +            #   e.g. path/folder1/folder2/filename
>         folder_string= path/folder1/folder2
>         +            #   is folder_string inside
>         path/folder1/folder2/filename?,
>         +            #   Yes, it works, but we waste a couple of
>         milliseconds.
>         +
>         +            inFolders=False
>         +            for folder in allfolders:
>         +                if folder in item:
>         +                    inFolders = True # Did we find a folder?
>         +                    folderFound = False # Second flag to
>         break inner for
>         +                    # Loop only through packages which
>         contain folders
>         +                    for keyfolder in hasfolders:
>         +                        if (folderFound == False):
>         +                            #print("Checking folder %s on
>         package %s" % (item,keyfolder))
>         +                            for file_folder in
>         old_manifest[keyfolder]['files']:
>         +                                if file_folder==folder:
>         +                                    print ('%s found in %s' %
>         (folder, keyfolder))
>         +                                    folderFound = True
>         +                                    if keyfolder not in
>         new_manifest[key]['rdepends'] and keyfolder != key:
>         + new_manifest[key]['rdepends'].append(keyfolder)
>         +                        else:
>         +                            break
>         +
>         +            # A folder was found so we're done with this
>         item, we can go on
>         +            if inFolders:
>         +                continue
>         +
>         +            # We might already have it on the dictionary
>         since it could depend on a (previously checked) module
>         +            if item not in new_manifest[key]['files']:
>         +                # Handle core as a special package, we
>         already did it so we pass it to NEW data structure directly
>         +                if key=='core':
>         +                  print('Adding %s to %s FILES' % (item, key))
>         +                  if item.endswith('*'):
>         +                      wildcards.append(item)
>         +                  new_manifest[key]['files'].append(item)
>         +
>         +                  # Check for repeated files
>         +                  if item not in allfiles:
>         +                      allfiles.append(item)
>         +                  else:
>         +                      repeated.append(item)
>         +
>         +                else:
>         +
>         +                    # Check if this dependency is already
>         contained on another package, so we add it
>         +                    # as an RDEPENDS, or if its not, it means
>         it should be contained on the current
>         +                    # package, so we should add it to FILES
>         +                    for newkey in old_manifest:
>         +                        # Debug
>         +                        #print("Checking %s " % item + " in
>         %s" % newkey)
>         +                        if item in old_manifest[newkey]['files']:
>         +                                # Since were nesting, we need
>         to check its not the same key
>         +                                if(newkey!=key):
>         +                                    if newkey not in
>         new_manifest[key]['rdepends']:
>         +                                       # Add it to the new
>         manifest data struct
>         +                                       # Debug
>         +                                       print('Adding %s to %s
>         RDEPENDS, because it contains %s' % (newkey, key, item))
>         +  new_manifest[key]['rdepends'].append(newkey)
>         +                                    break
>         +                    else:
>         +                      # Debug
>         +                      print('Adding %s to %s FILES' % (item,
>         key))
>         +                      # Since it wasnt found on another
>         package, its not an RDEP, so add it to FILES for this package
>         +                      new_manifest[key]['files'].append(item)
>         +                      if item.endswith('*'):
>         +                          wildcards.append(item)
>         +                      if item not in allfiles:
>         +                          allfiles.append(item)
>         +                      else:
>         +                          repeated.append(item)
>         +
>         +print ('The following files are repeated (contained in more
>         than one package), please check which package should get it:')
>         +print (repeated)
>         +print('The following files contain wildcards, please check
>         they are necessary')
>         +print(wildcards)
>         +print('The following files contain folders, please check they
>         are necessary')
>         +print(hasfolders)
>         +
>         +# Sort it just so it looks nice
>         +for key in new_manifest:
>         +    new_manifest[key]['files'].sort()
>         +    new_manifest[key]['rdepends'].sort()
>         +
>         +# Create the manifest from the data structure that was built
>         +with open('python2-manifest.json.ne
>         <http://python2-manifest.json.ne>w','w') as outfile:
>         +    json.dump(new_manifest,outfile,sort_keys=True, indent=4)
>         diff --git
>         a/meta/recipes-devtools/python/python/get_module_deps2.py
>         b/meta/recipes-devtools/python/python/get_module_deps2.py
>         new file mode 100644
>         index 0000000..73e7c6f
>         --- /dev/null
>         +++ b/meta/recipes-devtools/python/python/get_module_deps2.py
>         @@ -0,0 +1,112 @@
>         +# This script is launched on separate task for each python module
>         +# It checks for dependencies for that specific module and prints
>         +# them out, the output of this execution will have all
>         dependencies
>         +# for a specific module, which will be parsed an dealt on
>         create_manifest.py
>         +#
>         +# Author: Alejandro Enedino Hernandez Samaniego "aehs29"
>         <aehs29 at gmail.com <mailto:aehs29 at gmail.com>>
>         +
>         +
>         +# We can get a log per module, for all the dependencies that
>         were found, but its messy.
>         +debug=False
>         +
>         +import sys
>         +
>         +# We can get a list of the modules which are currently
>         required to run python
>         +# so we run python-core and get its modules, we then import
>         what we need
>         +# and check what modules are currently running, if we
>         substract them from the
>         +# modules we had initially, we get the dependencies for the
>         module we imported.
>         +
>         +# We use importlib to achieve this, so we also need to know
>         what modules importlib needs
>         +import importlib
>         +
>         +core_deps=set(sys.modules)
>         +
>         +def fix_path(dep_path):
>         +    import os
>         +    # We DONT want the path on our HOST system
>         +    pivot='recipe-sysroot-native'
>         +    dep_path=dep_path[dep_path.find(pivot)+len(pivot):]
>         +
>         +    if '/usr/bin' in dep_path:
>         +        dep_path = dep_path.replace('/usr/bin''${bindir}')
>         +
>         +    # Handle multilib, is there a better way?
>         +    if '/usr/lib32' in dep_path:
>         +        dep_path = dep_path.replace('/usr/lib32','${libdir}')
>         +    if '/usr/lib64' in dep_path:
>         +        dep_path = dep_path.replace('/usr/lib64','${libdir}')
>         +    if '/usr/lib' in dep_path:
>         +        dep_path = dep_path.replace('/usr/lib','${libdir}')
>         +    if '/usr/include' in dep_path:
>         +        dep_path =
>         dep_path.replace('/usr/include','${includedir}')
>         +    if '__init__.' in dep_path:
>         +        dep_path =  os.path.split(dep_path)[0]
>         +
>         +    # If a *.pyc file was imported, we replace it with *.py
>         (since we deal with PYCs on create_manifest)
>         +    if '.pyc' in dep_path:
>         +        dep_path = dep_path.replace('.pyc','.py')
>         +
>         +    return dep_path
>         +
>         +# Module to import was passed as an argument
>         +current_module =  str(sys.argv[1]).rstrip()
>         +if(debug==True):
>         +       log = open('log_%s' % current_module,'w')
>         +        log.write('Module %s generated the following
>         dependencies:\n' % current_module)
>         +try:
>         +    importlib.import_module('%s' % current_module)
>         +except ImportError as e:
>         +    if (debug==True):
>         +        log.write('Module was not found')
>         +    pass
>         +
>         +
>         +# Get current module dependencies, dif will contain a list of
>         specific deps for this module
>         +module_deps=set(sys.modules)
>         +
>         +# We handle the core package (1st pass on create_manifest.py)
>         as a special case
>         +if current_module == 'python-core-package':
>         +    dif = core_deps
>         +else:
>         +    dif = module_deps-core_deps
>         +
>         +
>         +# Check where each dependency came from
>         +for item in dif:
>         +    dep_path=''
>         +    try:
>         +        if (debug==True):
>         +            log.write('Calling: sys.modules[' + '%s' % item +
>         '].__file__\n')
>         +        dep_path = sys.modules['%s' % item].__file__
>         +    except AttributeError as e:
>         +        # Deals with thread (builtin module) not having
>         __file__ attribute
>         +       if debug==True:
>         +            log.write(item + ' ')
>         +            log.write(str(e))
>         +           log.write('\n')
>         +            pass
>         +    except NameError as e:
>         +        # Deals with NameError: name 'dep_path' is not defined
>         +        # because module is not found (wasn't compiled?),
>         e.g. bddsm
>         +        if (debug==True):
>         +            log.write(item+' ')
>         +            log.write(str(e))
>         +        pass
>         +
>         +    # Site-customize is a special case since we
>         (OpenEmbedded) put it there manually
>         +    if 'sitecustomize' in dep_path:
>         +        dep_path = '${libdir}/python2.7/sitecustomize.py'
>         +        # Prints out result, which is what will be used by
>         create_manifest
>         +        print (dep_path)
>         +        continue
>         +
>         +    dep_path = fix_path(dep_path)
>         +
>         +    if (debug==True):
>         +        log.write(dep_path+'\n')
>         +
>         +    # Prints out result, which is what will be used by
>         create_manifest
>         +    print (dep_path)
>         +
>         +if debug==True:
>         +    log.close()
>         diff --git
>         a/meta/recipes-devtools/python/python/python2-manifest.json
>         b/meta/recipes-devtools/python/python/python2-manifest.json
>         new file mode 100644
>         index 0000000..8ebc715
>         --- /dev/null
>         +++ b/meta/recipes-devtools/python/python/python2-manifest.json
>         @@ -0,0 +1,1032 @@
>         +{
>         +    "2to3": {
>         +        "files": [
>         +            "${bindir}/2to3",
>         +            "${libdir}/python2.7/lib2to3"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python automated Python 2 to 3 code
>         translator"
>         +    },
>         +    "argparse": {
>         +        "files": [
>         +            "${libdir}/python2.7/argparse.py"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "core",
>         +            "lang",
>         +            "textutils"
>         +        ],
>         +        "summary": "Python command line argument parser"
>         +    },
>         +    "audio": {
>         +        "files": [
>         +            "${libdir}/python2.7/audiodev.py",
>         +            "${libdir}/python2.7/chunk.py",
>         +            "${libdir}/python2.7/lib-dynload/audioop.so",
>         +            "${libdir}/python2.7/lib-dynload/ossaudiodev.so",
>         +            "${libdir}/python2.7/sndhdr.py",
>         +            "${libdir}/python2.7/sunau.py",
>         +            "${libdir}/python2.7/sunaudio.py",
>         +            "${libdir}/python2.7/toaiff.py",
>         +            "${libdir}/python2.7/wave.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "crypt",
>         +            "fcntl",
>         +            "io",
>         +            "math"
>         +        ],
>         +        "summary": "Python Audio Handling"
>         +    },
>         +    "bsddb": {
>         +        "files": [
>         +            "${libdir}/python2.7/bsddb",
>         +            "${libdir}/python2.7/lib-dynload/_bsddb.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python bindings for the Berkeley Database"
>         +    },
>         +    "codecs": {
>         +        "files": [
>         +            "${libdir}/python2.7/gettext.py",
>         +            "${libdir}/python2.7/lib-dynload/_codecs_cn.so",
>         +            "${libdir}/python2.7/lib-dynload/_codecs_hk.so",
>         +            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so",
>         +            "${libdir}/python2.7/lib-dynload/_codecs_jp.so",
>         +            "${libdir}/python2.7/lib-dynload/_codecs_kr.so",
>         +            "${libdir}/python2.7/lib-dynload/_codecs_tw.so",
>         +            "${libdir}/python2.7/lib-dynload/_multibytecodec.so",
>         +            "${libdir}/python2.7/lib-dynload/unicodedata.so",
>         +            "${libdir}/python2.7/locale.py",
>         +            "${libdir}/python2.7/stringprep.py",
>         +            "${libdir}/python2.7/xdrlib.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io",
>         +            "lang"
>         +        ],
>         +        "summary": "Python codec"
>         +    },
>         +    "compile": {
>         +        "files": [
>         +            "${libdir}/python2.7/compileall.py",
>         +            "${libdir}/python2.7/py_compile.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python bytecode compilation support"
>         +    },
>         +    "compiler": {
>         +        "files": [
>         +            "${libdir}/python2.7/compiler"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io",
>         +            "lang"
>         +        ],
>         +        "summary": "Python compiler support"
>         +    },
>         +    "compression": {
>         +        "files": [
>         +            "${libdir}/python2.7/gzip.py",
>         +            "${libdir}/python2.7/lib-dynload/bz2.so",
>         +            "${libdir}/python2.7/tarfile.py",
>         +            "${libdir}/python2.7/zipfile.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io",
>         +            "shell",
>         +            "unixadmin",
>         +            "zlib"
>         +        ],
>         +        "summary": "Python high-level compression support"
>         +    },
>         +    "contextlib": {
>         +        "files": [
>         +            "${libdir}/python2.7/contextlib.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "lang"
>         +        ],
>         +        "summary": "Python utilities for with-statementcontexts."
>         +    },
>         +    "core": {
>         +        "files": [
>         +            "${bindir}/python*",
>         +            "${includedir}/python2.7/pyconfig*.h",
>         +            "${libdir}/python2.7/ConfigParser.py",
>         +            "${libdir}/python2.7/UserDict.py",
>         +            "${libdir}/python2.7/UserList.py",
>         +            "${libdir}/python2.7/UserString.py",
>         +            "${libdir}/python2.7/__future__.py",
>         +            "${libdir}/python2.7/_abcoll.py",
>         +            "${libdir}/python2.7/_sysconfigdata.py",
>         +            "${libdir}/python2.7/_weakrefset.py",
>         +            "${libdir}/python2.7/abc.py",
>         +            "${libdir}/python2.7/ast.py",
>         +            "${libdir}/python2.7/atexit.py",
>         +            "${libdir}/python2.7/codecs.py",
>         +            "${libdir}/python2.7/collections.py",
>         +            "${libdir}/python2.7/copy.py",
>         +            "${libdir}/python2.7/copy_reg.py",
>         +            "${libdir}/python2.7/encodings",
>         +            "${libdir}/python2.7/encodings/aliases.py",
>         +            "${libdir}/python2.7/encodings/utf_8.py",
>         +            "${libdir}/python2.7/genericpath.py",
>         +            "${libdir}/python2.7/getopt.py",
>         +            "${libdir}/python2.7/heapq.py",
>         +            "${libdir}/python2.7/importlib",
>         +            "${libdir}/python2.7/keyword.py",
>         +            "${libdir}/python2.7/lib-dynload/_collections.so",
>         +            "${libdir}/python2.7/lib-dynload/_heapq.so",
>         +            "${libdir}/python2.7/lib-dynload/_locale.so",
>         +            "${libdir}/python2.7/lib-dynload/_struct.so",
>         +            "${libdir}/python2.7/lib-dynload/binascii.so",
>         +            "${libdir}/python2.7/lib-dynload/itertools.so",
>         +            "${libdir}/python2.7/lib-dynload/operator.so",
>         +            "${libdir}/python2.7/lib-dynload/readline.so",
>         +            "${libdir}/python2.7/lib-dynload/strop.so",
>         +            "${libdir}/python2.7/lib-dynload/time.so",
>         +            "${libdir}/python2.7/lib-dynload/xreadlines.so",
>         +            "${libdir}/python2.7/linecache.py",
>         +            "${libdir}/python2.7/new.py",
>         +            "${libdir}/python2.7/os.py",
>         +            "${libdir}/python2.7/platform.py",
>         +            "${libdir}/python2.7/posixpath.py",
>         +            "${libdir}/python2.7/re.py",
>         +            "${libdir}/python2.7/rlcompleter.py",
>         +            "${libdir}/python2.7/site.py",
>         +            "${libdir}/python2.7/sitecustomize.py",
>         +            "${libdir}/python2.7/sre_compile.py",
>         +            "${libdir}/python2.7/sre_constants.py",
>         +            "${libdir}/python2.7/sre_parse.py",
>         +            "${libdir}/python2.7/stat.py",
>         +            "${libdir}/python2.7/string.py",
>         +            "${libdir}/python2.7/struct.py",
>         +            "${libdir}/python2.7/sysconfig.py",
>         +            "${libdir}/python2.7/traceback.py",
>         +            "${libdir}/python2.7/types.py",
>         +            "${libdir}/python2.7/warnings.py",
>         +            "${libdir}/python2.7/weakref.py"
>         +        ],
>         +        "rdepends": [],
>         +        "summary": "Python interpreter and core modules"
>         +    },
>         +    "crypt": {
>         +        "files": [
>         +            "${libdir}/python2.7/hashlib.py",
>         +            "${libdir}/python2.7/lib-dynload/_hashlib.so",
>         +            "${libdir}/python2.7/lib-dynload/crypt.so",
>         +            "${libdir}/python2.7/md5.py",
>         +            "${libdir}/python2.7/sha.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python basic cryptographic and hashing
>         support"
>         +    },
>         +    "ctypes": {
>         +        "files": [
>         +            "${libdir}/python2.7/ctypes",
>         +            "${libdir}/python2.7/lib-dynload/_ctypes.so",
>         +            "${libdir}/python2.7/lib-dynload/_ctypes_test.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python C types support"
>         +    },
>         +    "curses": {
>         +        "files": [
>         +            "${libdir}/python2.7/curses",
>         +            "${libdir}/python2.7/lib-dynload/_curses.so",
>         +            "${libdir}/python2.7/lib-dynload/_curses_panel.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python curses support"
>         +    },
>         +    "datetime": {
>         +        "files": [
>         +            "${libdir}/python2.7/_strptime.py",
>         +            "${libdir}/python2.7/calendar.py",
>         +            "${libdir}/python2.7/lib-dynload/datetime.so"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "core",
>         +            "lang"
>         +        ],
>         +        "summary": "Python calendar and time support"
>         +    },
>         +    "db": {
>         +        "files": [
>         +            "${libdir}/python2.7/anydbm.py",
>         +            "${libdir}/python2.7/dbhash.py",
>         +            "${libdir}/python2.7/dumbdbm.py",
>         +            "${libdir}/python2.7/lib-dynload/dbm.so",
>         +            "${libdir}/python2.7/whichdb.py"
>         +        ],
>         +        "rdepends": [
>         +            "bsddb",
>         +            "core",
>         +            "gdbm"
>         +        ],
>         +        "summary": "Python file-based database support"
>         +    },
>         +    "debugger": {
>         +        "files": [
>         +            "${libdir}/python2.7/bdb.py",
>         +            "${libdir}/python2.7/pdb.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io",
>         +            "lang",
>         +            "pprint",
>         +            "shell"
>         +        ],
>         +        "summary": "Python debugger"
>         +    },
>         +    "dev": {
>         +        "files": [
>         +            "${base_libdir}/*.a",
>         +            "${base_libdir}/*.o",
>         +            "${datadir}/aclocal",
>         +            "${datadir}/pkgconfig",
>         +            "${includedir}",
>         +            "${libdir}/*.a",
>         +            "${libdir}/*.la",
>         +            "${libdir}/*.o",
>         +            "${libdir}/lib*${SOLIBSDEV}",
>         +            "${libdir}/pkgconfig",
>         +            "${libdir}/python2.7/config/Makefile"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python development package"
>         +    },
>         +    "difflib": {
>         +        "files": [
>         +            "${libdir}/python2.7/difflib.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "lang"
>         +        ],
>         +        "summary": "Python helpers for computing deltas
>         between objects"
>         +    },
>         +    "distutils": {
>         +        "files": [
>         +            "${libdir}/python2.7/config",
>         +            "${libdir}/python2.7/distutils"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python Distribution Utilities"
>         +    },
>         +    "distutils-staticdev": {
>         +        "files": [
>         +            "${libdir}/python2.7/config/lib*.a"
>         +        ],
>         +        "rdepends": [
>         +            "distutils"
>         +        ],
>         +        "summary": "Python distribution utilities (static
>         libraries)"
>         +    },
>         +    "doctest": {
>         +        "files": [
>         +            "${libdir}/python2.7/doctest.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "crypt",
>         +            "debugger",
>         +            "difflib",
>         +            "fcntl",
>         +            "io",
>         +            "lang",
>         +            "math",
>         +            "pprint",
>         +            "shell",
>         +            "unittest"
>         +        ],
>         +        "summary": "Python framework for running examples in
>         docstrings"
>         +    },
>         +    "email": {
>         +        "files": [
>         +            "${libdir}/python2.7/email",
>         +            "${libdir}/python2.7/imaplib.py"
>         +        ],
>         +        "rdepends": [
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "fcntl",
>         +            "io",
>         +            "lang",
>         +            "math",
>         +            "netclient",
>         +            "pickle",
>         +            "subprocess",
>         +            "textutils"
>         +        ],
>         +        "summary": "Python email support"
>         +    },
>         +    "fcntl": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/fcntl.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python's fcntl interface"
>         +    },
>         +    "gdbm": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/gdbm.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python GNU database support"
>         +    },
>         +    "hotshot": {
>         +        "files": [
>         +            "${libdir}/python2.7/hotshot",
>         +            "${libdir}/python2.7/lib-dynload/_hotshot.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python hotshot performance profiler"
>         +    },
>         +    "html": {
>         +        "files": [
>         +            "${libdir}/python2.7/HTMLParser.py",
>         +            "${libdir}/python2.7/formatter.py",
>         +            "${libdir}/python2.7/htmlentitydefs.py",
>         +            "${libdir}/python2.7/htmllib.py",
>         +            "${libdir}/python2.7/markupbase.py",
>         +            "${libdir}/python2.7/sgmllib.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python HTML processing support"
>         +    },
>         +    "idle": {
>         +        "files": [
>         +            "${bindir}/idle",
>         +            "${libdir}/python2.7/idlelib"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python Integrated Development Environment"
>         +    },
>         +    "image": {
>         +        "files": [
>         +            "${libdir}/python2.7/colorsys.py",
>         +            "${libdir}/python2.7/imghdr.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python graphical image handling"
>         +    },
>         +    "io": {
>         +        "files": [
>         +            "${libdir}/python2.7/StringIO.py",
>         +            "${libdir}/python2.7/_pyio.py",
>         +            "${libdir}/python2.7/io.py",
>         +            "${libdir}/python2.7/lib-dynload/_io.so",
>         +            "${libdir}/python2.7/lib-dynload/_socket.so",
>         +            "${libdir}/python2.7/lib-dynload/_ssl.so",
>         +            "${libdir}/python2.7/lib-dynload/cStringIO.so",
>         +            "${libdir}/python2.7/lib-dynload/select.so",
>         +            "${libdir}/python2.7/lib-dynload/termios.so",
>         +            "${libdir}/python2.7/pipes.py",
>         +            "${libdir}/python2.7/socket.py",
>         +            "${libdir}/python2.7/ssl.py",
>         +            "${libdir}/python2.7/tempfile.py"
>         +        ],
>         +        "rdepends": [
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "fcntl",
>         +            "lang",
>         +            "math",
>         +            "netclient",
>         +            "textutils"
>         +        ],
>         +        "summary": "Python low-level I/O"
>         +    },
>         +    "json": {
>         +        "files": [
>         +            "${libdir}/python2.7/json",
>         +            "${libdir}/python2.7/lib-dynload/_json.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python JSON support"
>         +    },
>         +    "lang": {
>         +        "files": [
>         +            "${libdir}/python2.7/bisect.py",
>         +            "${libdir}/python2.7/code.py",
>         +            "${libdir}/python2.7/codeop.py",
>         +            "${libdir}/python2.7/dis.py",
>         +            "${libdir}/python2.7/functools.py",
>         +            "${libdir}/python2.7/inspect.py",
>         +            "${libdir}/python2.7/lib-dynload/_bisect.so",
>         +            "${libdir}/python2.7/lib-dynload/_functools.so",
>         +            "${libdir}/python2.7/lib-dynload/array.so",
>         +            "${libdir}/python2.7/lib-dynload/parser.so",
>         +            "${libdir}/python2.7/opcode.py",
>         +            "${libdir}/python2.7/repr.py",
>         +            "${libdir}/python2.7/symbol.py",
>         +            "${libdir}/python2.7/token.py",
>         +            "${libdir}/python2.7/tokenize.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python low-level language support"
>         +    },
>         +    "logging": {
>         +        "files": [
>         +            "${libdir}/python2.7/logging"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io",
>         +            "threading"
>         +        ],
>         +        "summary": "Python logging support"
>         +    },
>         +    "mailbox": {
>         +        "files": [
>         +            "${libdir}/python2.7/mailbox.py"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "datetime",
>         +            "email",
>         +            "fcntl",
>         +            "io",
>         +            "lang",
>         +            "math",
>         +            "mime",
>         +            "netclient",
>         +            "textutils"
>         +        ],
>         +        "summary": "Python mailbox format support"
>         +    },
>         +    "math": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/_random.so",
>         +            "${libdir}/python2.7/lib-dynload/cmath.so",
>         +            "${libdir}/python2.7/lib-dynload/math.so",
>         +            "${libdir}/python2.7/random.py",
>         +            "${libdir}/python2.7/sets.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "crypt"
>         +        ],
>         +        "summary": "Python math support"
>         +    },
>         +    "mime": {
>         +        "files": [
>         +            "${libdir}/python2.7/MimeWriter.py",
>         +            "${libdir}/python2.7/mimetools.py",
>         +            "${libdir}/python2.7/mimetypes.py",
>         +            "${libdir}/python2.7/quopri.py",
>         +            "${libdir}/python2.7/rfc822.py",
>         +            "${libdir}/python2.7/uu.py"
>         +        ],
>         +        "rdepends": [
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "fcntl",
>         +            "io",
>         +            "lang",
>         +            "math",
>         +            "netclient",
>         +            "textutils"
>         +        ],
>         +        "summary": "Python MIME handling APIs"
>         +    },
>         +    "mmap": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/mmap.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python memory-mapped file support"
>         +    },
>         +    "modules": {
>         +        "files": [],
>         +        "rdepends": [
>         +            "2to3",
>         +            "argparse",
>         +            "audio",
>         +            "bsddb",
>         +            "codecs",
>         +            "compile",
>         +            "compiler",
>         +            "compression",
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "ctypes",
>         +            "curses",
>         +            "datetime",
>         +            "db",
>         +            "debugger",
>         +            "difflib",
>         +            "distutils",
>         +            "doctest",
>         +            "email",
>         +            "fcntl",
>         +            "gdbm",
>         +            "hotshot",
>         +            "html",
>         +            "idle",
>         +            "image",
>         +            "io",
>         +            "json",
>         +            "lang",
>         +            "logging",
>         +            "mailbox",
>         +            "math",
>         +            "mime",
>         +            "mmap",
>         +            "multiprocessing",
>         +            "netclient",
>         +            "netserver",
>         +            "numbers",
>         +            "pickle",
>         +            "pkgutil",
>         +            "plistlib",
>         +            "pprint",
>         +            "profile",
>         +            "pydoc",
>         +            "re",
>         +            "resource",
>         +            "robotparser",
>         +            "shell",
>         +            "smtpd",
>         +            "sqlite3",
>         +            "sqlite3",
>         +            "stringold",
>         +            "subprocess",
>         +            "syslog",
>         +            "terminal",
>         +            "textutils",
>         +            "threading",
>         +            "tkinter",
>         +            "unittest",
>         +            "unixadmin",
>         +            "xml",
>         +            "xmlrpc",
>         +            "zlib"
>         +        ],
>         +        "summary": "All Python modules"
>         +    },
>         +    "multiprocessing": {
>         +        "files": [
>         +           
>         "${libdir}/python2.7/lib-dynload/_multiprocessing.so",
>         +            "${libdir}/python2.7/multiprocessing"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "fcntl",
>         +            "io",
>         +            "pickle",
>         +            "subprocess",
>         +            "threading"
>         +        ],
>         +        "summary": "Python multiprocessing support"
>         +    },
>         +    "netclient": {
>         +        "files": [
>         +            "${libdir}/python2.7/Cookie.py",
>         +            "${libdir}/python2.7/_LWPCookieJar.py",
>         +            "${libdir}/python2.7/_MozillaCookieJar.py",
>         +            "${libdir}/python2.7/base64.py",
>         +            "${libdir}/python2.7/cookielib.py",
>         +            "${libdir}/python2.7/ftplib.py",
>         +            "${libdir}/python2.7/hmac.py",
>         +            "${libdir}/python2.7/httplib.py",
>         +            "${libdir}/python2.7/nntplib.py",
>         +            "${libdir}/python2.7/poplib.py",
>         +            "${libdir}/python2.7/smtplib.py",
>         +            "${libdir}/python2.7/telnetlib.py",
>         +            "${libdir}/python2.7/urllib.py",
>         +            "${libdir}/python2.7/urllib2.py",
>         +            "${libdir}/python2.7/urlparse.py",
>         +            "${libdir}/python2.7/uuid.py"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "ctypes",
>         +            "datetime",
>         +            "email",
>         +            "fcntl",
>         +            "io",
>         +            "lang",
>         +            "math",
>         +            "mime",
>         +            "pickle",
>         +            "subprocess",
>         +            "textutils",
>         +            "threading"
>         +        ],
>         +        "summary": "Python Internet Protocol clients"
>         +    },
>         +    "netserver": {
>         +        "files": [
>         +            "${libdir}/python2.7/BaseHTTPServer.py",
>         +            "${libdir}/python2.7/CGIHTTPServer.py",
>         +            "${libdir}/python2.7/SimpleHTTPServer.py",
>         +            "${libdir}/python2.7/SocketServer.py",
>         +            "${libdir}/python2.7/cgi.py"
>         +        ],
>         +        "rdepends": [
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "fcntl",
>         +            "io",
>         +            "lang",
>         +            "math",
>         +            "mime",
>         +            "netclient",
>         +            "shell",
>         +            "textutils",
>         +            "threading",
>         +            "unixadmin"
>         +        ],
>         +        "summary": "Python Internet Protocol servers"
>         +    },
>         +    "numbers": {
>         +        "files": [
>         +            "${libdir}/python2.7/decimal.py",
>         +            "${libdir}/python2.7/fractions.py",
>         +            "${libdir}/python2.7/numbers.py"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "core",
>         +            "lang",
>         +            "math",
>         +            "threading"
>         +        ],
>         +        "summary": "Python number APIs"
>         +    },
>         +    "pickle": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/cPickle.so",
>         +            "${libdir}/python2.7/pickle.py",
>         +            "${libdir}/python2.7/pickletools.py",
>         +            "${libdir}/python2.7/shelve.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io"
>         +        ],
>         +        "summary": "Python serialisation/persistence support"
>         +    },
>         +    "pkgutil": {
>         +        "files": [
>         +            "${libdir}/python2.7/pkgutil.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python package extension utility support"
>         +    },
>         +    "plistlib": {
>         +        "files": [
>         +            "${libdir}/python2.7/plistlib.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "datetime",
>         +            "io"
>         +        ],
>         +        "summary": "Generate and parse Mac OS X .plist files"
>         +    },
>         +    "pprint": {
>         +        "files": [
>         +            "${libdir}/python2.7/pprint.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io"
>         +        ],
>         +        "summary": "Python pretty-print support"
>         +    },
>         +    "profile": {
>         +        "files": [
>         +            "${libdir}/python2.7/cProfile.py",
>         +            "${libdir}/python2.7/lib-dynload/_lsprof.so",
>         +            "${libdir}/python2.7/profile.py",
>         +            "${libdir}/python2.7/pstats.py"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "core",
>         +            "lang",
>         +            "resource",
>         +            "textutils"
>         +        ],
>         +        "summary": "Python basic performance profiling support"
>         +    },
>         +    "pydoc": {
>         +        "files": [
>         +            "${bindir}/pydoc",
>         +            "${libdir}/python2.7/pydoc.py",
>         +            "${libdir}/python2.7/pydoc_data"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "core",
>         +            "lang",
>         +            "pkgutil"
>         +        ],
>         +        "summary": "Python interactive help support"
>         +    },
>         +    "re": {
>         +        "files": [
>         +            "${libdir}/python2.7/sre.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python Regular Expression APIs"
>         +    },
>         +    "resource": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/resource.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python resource control interface"
>         +    },
>         +    "robotparser": {
>         +        "files": [
>         +            "${libdir}/python2.7/robotparser.py"
>         +        ],
>         +        "rdepends": [
>         +            "contextlib",
>         +            "core",
>         +            "io",
>         +            "lang",
>         +            "netclient",
>         +            "textutils"
>         +        ],
>         +        "summary": "Python robots.txt parser"
>         +    },
>         +    "shell": {
>         +        "files": [
>         +            "${libdir}/python2.7/cmd.py",
>         +            "${libdir}/python2.7/commands.py",
>         +            "${libdir}/python2.7/dircache.py",
>         +            "${libdir}/python2.7/fnmatch.py",
>         +            "${libdir}/python2.7/glob.py",
>         +            "${libdir}/python2.7/popen2.py",
>         +            "${libdir}/python2.7/shlex.py",
>         +            "${libdir}/python2.7/shutil.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io",
>         +            "unixadmin"
>         +        ],
>         +        "summary": "Python shell-like functionality"
>         +    },
>         +    "smtpd": {
>         +        "files": [
>         +            "${bindir}/smtpd.py",
>         +            "${libdir}/python2.7/asynchat.py",
>         +            "${libdir}/python2.7/asyncore.py",
>         +            "${libdir}/python2.7/smtpd.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "fcntl",
>         +            "io",
>         +            "lang"
>         +        ],
>         +        "summary": "Python Simple Mail Transport Daemon"
>         +    },
>         +    "sqlite3": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/_sqlite3.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python Sqlite3 database support"
>         +    },
>         +    "sqlite3-tests": {
>         +        "files": [
>         +            "${libdir}/python2.7/sqlite3/test"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "tests"
>         +        ],
>         +        "summary": "Python Sqlite3 database support tests"
>         +    },
>         +    "stringold": {
>         +        "files": [
>         +            "${libdir}/python2.7/stringold.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python string APIs [deprecated]"
>         +    },
>         +    "subprocess": {
>         +        "files": [
>         +            "${libdir}/python2.7/subprocess.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "fcntl",
>         +            "io",
>         +            "pickle"
>         +        ],
>         +        "summary": "Python subprocess support"
>         +    },
>         +    "syslog": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/syslog.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python syslog interface"
>         +    },
>         +    "terminal": {
>         +        "files": [
>         +            "${libdir}/python2.7/pty.py",
>         +            "${libdir}/python2.7/tty.py"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io"
>         +        ],
>         +        "summary": "Python terminal controlling support"
>         +    },
>         +    "tests": {
>         +        "files": [
>         +            "${libdir}/python2.7/test"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python tests"
>         +    },
>         +    "textutils": {
>         +        "files": [
>         +            "${libdir}/python2.7/csv.py",
>         +            "${libdir}/python2.7/lib-dynload/_csv.so",
>         +            "${libdir}/python2.7/optparse.py",
>         +            "${libdir}/python2.7/textwrap.py"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "core",
>         +            "io",
>         +            "lang"
>         +        ],
>         +        "summary": "Python option parsin"
>         +    },
>         +    "threading": {
>         +        "files": [
>         +            "${libdir}/python2.7/Queue.py",
>         +            "${libdir}/python2.7/_threading_local.py",
>         +            "${libdir}/python2.7/dummy_thread.py",
>         +            "${libdir}/python2.7/dummy_threading.py",
>         +            "${libdir}/python2.7/mutex.py",
>         +            "${libdir}/python2.7/threading.py"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python threading & synchronization support"
>         +    },
>         +    "tkinter": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-tk"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python Tcl/Tk bindings"
>         +    },
>         +    "unittest": {
>         +        "files": [
>         +            "${libdir}/python2.7/unittest"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "difflib",
>         +            "io",
>         +            "lang",
>         +            "pprint",
>         +            "shell"
>         +        ],
>         +        "summary": "Python unit testing framework"
>         +    },
>         +    "unixadmin": {
>         +        "files": [
>         +            "${libdir}/python2.7/getpass.py",
>         +            "${libdir}/python2.7/lib-dynload/grp.so",
>         +            "${libdir}/python2.7/lib-dynload/nis.so"
>         +        ],
>         +        "rdepends": [
>         +            "core",
>         +            "io"
>         +        ],
>         +        "summary": "Python Unix administration support"
>         +    },
>         +    "xml": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/_elementtree.so",
>         +            "${libdir}/python2.7/lib-dynload/pyexpat.so",
>         +            "${libdir}/python2.7/xml"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python basic XML support"
>         +    },
>         +    "xmlrpc": {
>         +        "files": [
>         +            "${libdir}/python2.7/DocXMLRPCServer.py",
>         +            "${libdir}/python2.7/SimpleXMLRPCServer.py"
>         +        ],
>         +        "rdepends": [
>         +            "codecs",
>         +            "compression",
>         +            "contextlib",
>         +            "core",
>         +            "crypt",
>         +            "datetime",
>         +            "fcntl",
>         +            "io",
>         +            "lang",
>         +            "math",
>         +            "mime",
>         +            "netclient",
>         +            "netserver",
>         +            "pkgutil",
>         +            "pydoc",
>         +            "textutils",
>         +            "threading",
>         +            "xml",
>         +            "zlib"
>         +        ],
>         +        "summary": "Python XML-RPC support"
>         +    },
>         +    "zlib": {
>         +        "files": [
>         +            "${libdir}/python2.7/lib-dynload/zlib.so"
>         +        ],
>         +        "rdepends": [
>         +            "core"
>         +        ],
>         +        "summary": "Python zlib compression support"
>         +    }
>         +}
>         \ No newline at end of file
>         diff --git
>         a/meta/recipes-devtools/python/python/sitecustomize.py
>         b/meta/recipes-devtools/python/python/sitecustomize.py
>         index 2739018..4c8b5e2 100644
>         --- a/meta/recipes-devtools/python/python/sitecustomize.py
>         +++ b/meta/recipes-devtools/python/python/sitecustomize.py
>         @@ -27,19 +27,11 @@ def __enableReadlineSupport():
>              except IOError:
>                  pass
>
>         -def __enableDefaultEncoding():
>         -    import sys
>         -    try:
>         -        sys.setdefaultencoding( "utf8" )
>         -    except LookupError:
>         -        pass
>         -
>          import sys
>          try:
>              import rlcompleter, readline
>          except ImportError:
>              pass
>          else:
>         -    __enableDefaultEncoding()
>              __registerExitHandler()
>              __enableReadlineSupport()
>         diff --git a/meta/recipes-devtools/python/python_2.7.13.bb
>         <http://python_2.7.13.bb>
>         b/meta/recipes-devtools/python/python_2.7.13.bb
>         <http://python_2.7.13.bb>
>         index 754c029..dbafb95 100644
>         --- a/meta/recipes-devtools/python/python_2.7.13.bb
>         <http://python_2.7.13.bb>
>         +++ b/meta/recipes-devtools/python/python_2.7.13.bb
>         <http://python_2.7.13.bb>
>         @@ -1,5 +1,7 @@
>          require python.inc
>         +
>          DEPENDS = "python-native libffi bzip2 gdbm openssl readline
>         sqlite3 zlib"
>         +
>          PR = "${INC_PR}"
>
>          DISTRO_SRC_URI ?= "file://sitecustomize.py"
>         @@ -145,11 +147,9 @@ py_package_preprocess () {
>              python -m py_compile
>         ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py
>          }
>
>         -require python-${PYTHON_MAJMIN}-manifest.inc
>
>          # manual dependency additions
>          RPROVIDES_${PN}-core = "${PN}"
>         -RRECOMMENDS_${PN}-core = "${PN}-readline"
>          RRECOMMENDS_${PN}-core_append_class-nativesdk = "
>         nativesdk-python-modules"
>          RRECOMMENDS_${PN}-crypt = "openssl"
>
>         @@ -193,3 +193,87 @@ FILES_${PN}-man = "${datadir}/man"
>          RDEPENDS_${PN}-modules_remove =
>         "${@bb.utils.contains('PACKAGECONFIG', 'bdb', '',
>         '${PN}-bsddb', d)}"
>
>          BBCLASSEXTEND = "nativesdk"
>         +
>         +RPROVIDES_${PN} += "${PN}-modules"
>         +
>         +# We want bytecode precompiled .py files (.pyc's) by default
>         +# but the user may set it on their own conf
>         +
>         +INCLUDE_PYCS ?= "1"
>         +
>         +python(){
>         +
>         +    pythondir = d.getVar('THISDIR',True)
>         +
>         +    # Read JSON manifest
>         +    import json
>         +    with open(pythondir+'/python/python2-manifest.json') as
>         manifest_file:
>         +        python_manifest=json.load(manifest_file)
>         +
>         +    include_pycs = d.getVar('INCLUDE_PYCS')
>         +
>         +    packages = d.getVar('PACKAGES').split()
>         +    pn = d.getVar('PN')
>         +
>         +
>         +    newpackages=[]
>         +
>         +    for key in python_manifest:
>         +        pypackage= pn + '-' + key
>         +
>         +        if pypackage not in packages:
>         +            # We need to prepend, otherwise python-misc gets
>         everything
>         +            # so we use a new variable
>         +            newpackages.append(pypackage)
>         +
>         +        # "Build" python's manifest FILES, RDEPENDS and SUMMARY
>         +        d.setVar('FILES_' + pypackage, '')
>         +        for value in python_manifest[key]['files']:
>         +            d.appendVar('FILES_' + pypackage, ' ' + value)
>         +            if include_pycs == '1':
>         +                if value.endswith('.py'):
>         +                    d.appendVar('FILES_' + pypackage, ' ' +
>         value + 'c')
>         +
>         +        d.setVar('RDEPENDS_' + pypackage, '')
>         +        for value in python_manifest[key]['rdepends']:
>         +            # Make it work with or without $PN
>         +            if '${PN}' in value:
>         +                value=value.split('-')[1]
>         +            d.appendVar('RDEPENDS_' + pypackage, ' ' + pn +
>         '-' + value)
>         +        d.setVar('SUMMARY_' + pypackage,
>         python_manifest[key]['summary'])
>         +
>         +    # We need to ensure staticdev packages match for files
>         first so we sort in reverse
>         +    newpackages.sort(reverse=True)
>         +    # Prepending so to avoid python-misc getting everything
>         +    packages = newpackages + packages
>         +    d.setVar('PACKAGES', ' '.join(packages))
>         +    d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
>         +}
>         +
>         +do_split_packages[file-checksums] +=
>         "${THISDIR}/python/python2-manifest.json:True"
>         +
>         +# Files needed to create a new manifest
>         +SRC_URI += "file://create_manifest2.py
>         file://get_module_deps2.py file://python2-manifest.json"
>         +
>         +do_create_manifest() {
>         +
>         +# This task should be run with every new release of Python.
>         +# We must ensure that PACKAGECONFIG enables everything when
>         creating
>         +# a new manifest, this is to base our new manifest on a complete
>         +# native python build, containing all dependencies, otherwise
>         the task
>         +# wont be able to find the required files.
>         +# e.g. BerkeleyDB is an optional build dependency so it may
>         or may not
>         +# be present, we must ensure it is.
>         +
>         +cd ${WORKDIR}
>         +# This needs to be executed by python-native and NOT by
>         HOST's python
>         +nativepython create_manifest2.py
>         +cp python2-manifest.json.new
>         ${THISDIR}/python/python2-manifest.json
>         +}
>         +
>         +# bitbake python -c create_manifest
>         +addtask do_create_manifest
>         +
>         +# Make sure we have native python ready when we create a new
>         manifest
>         +do_create_manifest[depends] += "python:do_prepare_recipe_sysroot"
>         +do_create_manifest[depends] += "python:do_patch"
>         diff --git a/scripts/contrib/python/generate-manifest-2.7.py
>         <http://generate-manifest-2.7.py>
>         b/scripts/contrib/python/generate-manifest-2.7.py
>         <http://generate-manifest-2.7.py>
>         deleted file mode 100755
>         index ee75403..0000000
>         --- a/scripts/contrib/python/generate-manifest-2.7.py
>         <http://generate-manifest-2.7.py>
>         +++ /dev/null
>         @@ -1,426 +0,0 @@
>         -#!/usr/bin/env python
>         -
>         -# generate Python Manifest for the OpenEmbedded build system
>         -# (C) 2002-2010 Michael 'Mickey' Lauer
>         <mlauer at vanille-media.de <mailto:mlauer at vanille-media.de>>
>         -# (C) 2007 Jeremy Laine
>         -# licensed under MIT, see COPYING.MIT
>         -#
>         -# June 22, 2011 -- Mark Hatle <mark.hatle at windriver.com
>         <mailto:mark.hatle at windriver.com>>
>         -#  * Updated to no longer generate special -dbg package,
>         instead use the
>         -#    single system -dbg
>         -#  * Update version with ".1" to indicate this change
>         -#
>         -# February 26, 2017 -- Ming Liu
>         <peter.x.liu at external.atlascopco.com
>         <mailto:peter.x.liu at external.atlascopco.com>>
>         -#  * Updated to support generating manifest for native python
>         -
>         -import os
>         -import sys
>         -import time
>         -import argparse
>         -
>         -VERSION = "2.7.2"
>         -
>         -__author__ = "Michael 'Mickey' Lauer <mlauer at vanille-media.de
>         <mailto:mlauer at vanille-media.de>>"
>         -__version__ = "20110222.2"
>         -
>         -class MakefileMaker:
>         -
>         -    def __init__( self, outfile, isNative ):
>         -        """initialize"""
>         -        self.packages = {}
>         -        self.excluded_pkgs = []
>         -        self.targetPrefix = "${libdir}/python%s/" % VERSION[:3]
>         -        self.isNative = isNative
>         -        self.output = outfile
>         -        self.out( """
>         -# WARNING: This file is AUTO GENERATED: Manual edits will be
>         lost next time I regenerate the file.
>         -# Generator: '%s%s' Version %s (C) 2002-2010 Michael 'Mickey'
>         Lauer <mlauer at vanille-media.de <mailto:mlauer at vanille-media.de>>
>         -""" % ( sys.argv[0], ' --native' if isNative else '',
>         __version__ ) )
>         -
>         -    #
>         -    # helper functions
>         -    #
>         -
>         -    def out( self, data ):
>         -        """print a line to the output file"""
>         -        self.output.write( "%s\n" % data )
>         -
>         -    def setPrefix( self, targetPrefix ):
>         -        """set a file prefix for addPackage files"""
>         -        self.targetPrefix = targetPrefix
>         -
>         -    def doProlog( self ):
>         -        self.out( """ """ )
>         -        self.out( "" )
>         -
>         -    def addPackage( self, name, description, dependencies,
>         filenames, mod_exclude = False ):
>         -        """add a package to the Makefile"""
>         -        if type( filenames ) == type( "" ):
>         -            filenames = filenames.split()
>         -        fullFilenames = []
>         -        for filename in filenames:
>         -            if filename[0] != "$":
>         -                fullFilenames.append( "%s%s" % (
>         self.targetPrefix, filename ) )
>         -            else:
>         -                fullFilenames.append( filename )
>         -        if mod_exclude:
>         -            self.excluded_pkgs.append( name )
>         -        self.packages[name] = description, dependencies,
>         fullFilenames
>         -
>         -    def doBody( self ):
>         -        """generate body of Makefile"""
>         -
>         -        global VERSION
>         -
>         -        #
>         -        # generate rprovides line for native
>         -        #
>         -
>         -        if self.isNative:
>         -            pkglist = []
>         -            for name in ['${PN}-modules'] +
>         sorted(self.packages):
>         -                pkglist.append('%s-native' %
>         name.replace('${PN}', 'python'))
>         -
>         -            self.out('RPROVIDES += "%s"' % " ".join(pkglist))
>         -            return
>         -
>         -        #
>         -        # generate provides line
>         -        #
>         -
>         -        provideLine = 'PROVIDES+=" \\\n'
>         -        for name in sorted(self.packages):
>         -            provideLine += "  %s \\\n" % name
>         -        provideLine += '"'
>         -
>         -        self.out( provideLine )
>         -        self.out( "" )
>         -
>         -        #
>         -        # generate package line
>         -        #
>         -
>         -        packageLine = 'PACKAGES=" \\\n'
>         -        packageLine += '  ${PN}-dbg \\\n'
>         -        for name in sorted(self.packages):
>         -            if name.startswith("${PN}-distutils"):
>         -                if name == "${PN}-distutils":
>         -                    packageLine += "  %s-staticdev %s \\\n" %
>         (name, name)
>         -            elif name != '${PN}-dbg':
>         -                packageLine += "  %s \\\n" % name
>         -        packageLine += '  ${PN}-modules\\\n"'
>         -
>         -        self.out( packageLine )
>         -        self.out( "" )
>         -
>         -        #
>         -        # generate package variables
>         -        #
>         -
>         -        for name, data in sorted(self.packages.items()):
>         -            desc, deps, files = data
>         -
>         -            #
>         -            # write out the description, revision and
>         dependencies
>         -            #
>         -            self.out( 'SUMMARY_%s="%s"' % ( name, desc ) )
>         -            self.out( 'RDEPENDS_%s="%s"' % ( name, deps ) )
>         -
>         -            line = 'FILES_%s=" \\\n' % name
>         -
>         -            #
>         -            # check which directories to make in the
>         temporary directory
>         -            #
>         -
>         -            dirset = {} # if python had a set-datatype this
>         would be sufficient. for now, we're using a dict instead.
>         -            for target in files:
>         -                dirset[os.path.dirname( target )] = True
>         -
>         -            #
>         -            # generate which files to copy for the target
>         (-dfR because whole directories are also allowed)
>         -            #
>         -
>         -            for target in files:
>         -                line += "    %s \\\n" % target
>         -
>         -            line += '"'
>         -            self.out( line )
>         -            self.out( "" )
>         -
>         -        self.out( 'SUMMARY_${PN}-modules="All Python modules"' )
>         -        line = 'RDEPENDS_${PN}-modules=" \\\n'
>         -
>         -        for name, data in sorted(self.packages.items()):
>         -            if name not in ['${PN}-dev',
>         '${PN}-distutils-staticdev'] and name not in self.excluded_pkgs:
>         -                line += "  %s \\\n" % name
>         -
>         -        line += '"'
>         -        self.out( line )
>         -        self.out( 'ALLOW_EMPTY_${PN}-modules = "1"' )
>         -
>         -    def doEpilog( self ):
>         -        self.out( """""" )
>         -        self.out( "" )
>         -
>         -    def make( self ):
>         -        self.doProlog()
>         -        self.doBody()
>         -        self.doEpilog()
>         -
>         -if __name__ == "__main__":
>         -    parser = argparse.ArgumentParser( description='generate
>         python manifest' )
>         -    parser.add_argument( '-n', '--native', help='generate
>         manifest for native python', action='store_true' )
>         -    parser.add_argument( 'outfile', metavar='OUTPUT_FILE',
>         nargs='?', default='', help='Output file (defaults to stdout)' )
>         -    args = parser.parse_args()
>         -
>         -    if args.outfile:
>         -        try:
>         -            os.unlink( args.outfile )
>         -        except Exception:
>         -            sys.exc_clear()
>         -        outfile = open( args.outfile, "w" )
>         -    else:
>         -        outfile = sys.stdout
>         -
>         -    m = MakefileMaker( outfile, args.native )
>         -
>         -    # Add packages here. Only specify dlopen-style library
>         dependencies here, no ldd-style dependencies!
>         -    # Parameters: revision, name, description, dependencies,
>         filenames
>         -    #
>         -
>         -    m.addPackage( "${PN}-core", "Python interpreter and core
>         modules", "${PN}-lang ${PN}-re",
>         -    "__future__.* _abcoll.* abc.* ast.* copy.* copy_reg.*
>         ConfigParser.* " +
>         -    "genericpath.* getopt.* linecache.* new.* " +
>         -    "os.* posixpath.* struct.* " +
>         -    "warnings.* site.* stat.* " +
>         -    "UserDict.* UserList.* UserString.* " +
>         -    "lib-dynload/binascii.so lib-dynload/_struct.so
>         lib-dynload/time.so " +
>         -    "lib-dynload/xreadlines.so types.* platform.*
>         ${bindir}/python* "  +
>         -    "_weakrefset.* sysconfig.* _sysconfigdata.* " +
>         -    "${includedir}/python${PYTHON_MAJMIN}/pyconfig*.h " +
>         -    "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py ")
>         -
>         -    m.addPackage( "${PN}-dev", "Python development package",
>         "${PN}-core",
>         -    "${includedir} " +
>         -    "${libdir}/lib*${SOLIBSDEV} " +
>         -    "${libdir}/*.la " +
>         -    "${libdir}/*.a " +
>         -    "${libdir}/*.o " +
>         -    "${libdir}/pkgconfig " +
>         -    "${base_libdir}/*.a " +
>         -    "${base_libdir}/*.o " +
>         -    "${datadir}/aclocal " +
>         -    "${datadir}/pkgconfig " +
>         -    "config/Makefile ")
>         -
>         -    m.addPackage( "${PN}-2to3", "Python automated Python 2 to
>         3 code translator", "${PN}-core",
>         -    "${bindir}/2to3 lib2to3" ) # package
>         -
>         -    m.addPackage( "${PN}-idle", "Python Integrated
>         Development Environment", "${PN}-core ${PN}-tkinter",
>         -    "${bindir}/idle idlelib" ) # package
>         -
>         -    m.addPackage( "${PN}-pydoc", "Python interactive help
>         support", "${PN}-core ${PN}-lang ${PN}-stringold ${PN}-re",
>         -    "${bindir}/pydoc pydoc.* pydoc_data" )
>         -
>         -    m.addPackage( "${PN}-smtpd", "Python Simple Mail
>         Transport Daemon", "${PN}-core ${PN}-netserver ${PN}-email
>         ${PN}-mime",
>         -    "${bindir}/smtpd.* smtpd.*" )
>         -
>         -    m.addPackage( "${PN}-audio", "Python Audio Handling",
>         "${PN}-core",
>         -    "wave.* chunk.* sndhdr.* lib-dynload/ossaudiodev.so
>         lib-dynload/audioop.so audiodev.* sunaudio.* sunau.* toaiff.*" )
>         -
>         -    m.addPackage( "${PN}-bsddb", "Python bindings for the
>         Berkeley Database", "${PN}-core",
>         -    "bsddb lib-dynload/_bsddb.so" ) # package
>         -
>         -    m.addPackage( "${PN}-codecs", "Python codecs, encodings &
>         i18n support", "${PN}-core ${PN}-lang",
>         -    "codecs.* encodings gettext.* locale.*
>         lib-dynload/_locale.so lib-dynload/_codecs*
>         lib-dynload/_multibytecodec.so lib-dynload/unicodedata.so
>         stringprep.* xdrlib.*" )
>         -
>         -    m.addPackage( "${PN}-compile", "Python bytecode
>         compilation support", "${PN}-core",
>         -    "py_compile.* compileall.*" )
>         -
>         -    m.addPackage( "${PN}-compiler", "Python compiler
>         support", "${PN}-core",
>         -    "compiler" ) # package
>         -
>         -    m.addPackage( "${PN}-compression", "Python high-level
>         compression support", "${PN}-core ${PN}-zlib",
>         -    "gzip.* zipfile.* tarfile.* lib-dynload/bz2.so" )
>         -
>         -    m.addPackage( "${PN}-crypt", "Python basic cryptographic
>         and hashing support", "${PN}-core",
>         -    "hashlib.* md5.* sha.* lib-dynload/crypt.so
>         lib-dynload/_hashlib.so lib-dynload/_sha256.so
>         lib-dynload/_sha512.so" )
>         -
>         -    m.addPackage( "${PN}-textutils", "Python option parsing,
>         text wrapping and CSV support", "${PN}-core ${PN}-io ${PN}-re
>         ${PN}-stringold",
>         -    "lib-dynload/_csv.so csv.* optparse.* textwrap.*" )
>         -
>         -    m.addPackage( "${PN}-curses", "Python curses support",
>         "${PN}-core",
>         -    "curses lib-dynload/_curses.so
>         lib-dynload/_curses_panel.so" ) # directory + low level module
>         -
>         -    m.addPackage( "${PN}-ctypes", "Python C types support",
>         "${PN}-core",
>         -    "ctypes lib-dynload/_ctypes.so
>         lib-dynload/_ctypes_test.so" ) # directory + low level module
>         -
>         -    m.addPackage( "${PN}-datetime", "Python calendar and time
>         support", "${PN}-core ${PN}-codecs",
>         -    "_strptime.* calendar.* lib-dynload/datetime.so" )
>         -
>         -    m.addPackage( "${PN}-db", "Python file-based database
>         support", "${PN}-core",
>         -    "anydbm.* dumbdbm.* whichdb.* " )
>         -
>         -    m.addPackage( "${PN}-debugger", "Python debugger",
>         "${PN}-core ${PN}-io ${PN}-lang ${PN}-re ${PN}-stringold
>         ${PN}-shell ${PN}-pprint",
>         -    "bdb.* pdb.*" )
>         -
>         -    m.addPackage( "${PN}-difflib", "Python helpers for
>         computing deltas between objects", "${PN}-lang ${PN}-re",
>         -    "difflib.*" )
>         -
>         -    m.addPackage( "${PN}-distutils-staticdev", "Python
>         distribution utilities (static libraries)", "${PN}-distutils",
>         -    "config/lib*.a" ) # package
>         -
>         -    m.addPackage( "${PN}-distutils", "Python Distribution
>         Utilities", "${PN}-core ${PN}-email",
>         -    "config distutils" ) # package
>         -
>         -    m.addPackage( "${PN}-doctest", "Python framework for
>         running examples in docstrings", "${PN}-core ${PN}-lang
>         ${PN}-io ${PN}-re ${PN}-unittest ${PN}-debugger ${PN}-difflib",
>         -    "doctest.*" )
>         -
>         -    m.addPackage( "${PN}-email", "Python email support",
>         "${PN}-core ${PN}-io ${PN}-re ${PN}-mime ${PN}-audio
>         ${PN}-image ${PN}-netclient",
>         -    "imaplib.* email" ) # package
>         -
>         -    m.addPackage( "${PN}-fcntl", "Python's fcntl interface",
>         "${PN}-core",
>         -    "lib-dynload/fcntl.so" )
>         -
>         -    m.addPackage( "${PN}-hotshot", "Python hotshot
>         performance profiler", "${PN}-core",
>         -    "hotshot lib-dynload/_hotshot.so" )
>         -
>         -    m.addPackage( "${PN}-html", "Python HTML processing
>         support", "${PN}-core",
>         -    "formatter.* htmlentitydefs.* htmllib.* markupbase.*
>         sgmllib.* HTMLParser.* " )
>         -
>         -    m.addPackage( "${PN}-importlib", "Python import
>         implementation library", "${PN}-core",
>         -    "importlib" )
>         -
>         -    m.addPackage( "${PN}-gdbm", "Python GNU database
>         support", "${PN}-core",
>         -    "lib-dynload/gdbm.so" )
>         -
>         -    m.addPackage( "${PN}-image", "Python graphical image
>         handling", "${PN}-core",
>         -    "colorsys.* imghdr.* lib-dynload/imageop.so
>         lib-dynload/rgbimg.so" )
>         -
>         -    m.addPackage( "${PN}-io", "Python low-level I/O",
>         "${PN}-core ${PN}-math ${PN}-textutils ${PN}-netclient
>         ${PN}-contextlib",
>         -    "lib-dynload/_socket.so lib-dynload/_io.so
>         lib-dynload/_ssl.so lib-dynload/select.so
>         lib-dynload/termios.so lib-dynload/cStringIO.so " +
>         -    "pipes.* socket.* ssl.* tempfile.* StringIO.* io.* _pyio.*" )
>         -
>         -    m.addPackage( "${PN}-json", "Python JSON support",
>         "${PN}-core ${PN}-math ${PN}-re ${PN}-codecs",
>         -    "json lib-dynload/_json.so" ) # package
>         -
>         -    m.addPackage( "${PN}-lang", "Python low-level language
>         support", "${PN}-core",
>         -    "lib-dynload/_bisect.so lib-dynload/_collections.so
>         lib-dynload/_heapq.so lib-dynload/_weakref.so
>         lib-dynload/_functools.so " +
>         -    "lib-dynload/array.so lib-dynload/itertools.so
>         lib-dynload/operator.so lib-dynload/parser.so " +
>         -    "atexit.* bisect.* code.* codeop.* collections.* dis.*
>         functools.* heapq.* inspect.* keyword.* opcode.* symbol.*
>         repr.* token.* " +
>         -    "tokenize.* traceback.* weakref.*" )
>         -
>         -    m.addPackage( "${PN}-logging", "Python logging support",
>         "${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-stringold",
>         -    "logging" ) # package
>         -
>         -    m.addPackage( "${PN}-mailbox", "Python mailbox format
>         support", "${PN}-core ${PN}-mime",
>         -    "mailbox.*" )
>         -
>         -    m.addPackage( "${PN}-math", "Python math support",
>         "${PN}-core ${PN}-crypt",
>         -    "lib-dynload/cmath.so lib-dynload/math.so
>         lib-dynload/_random.so random.* sets.*" )
>         -
>         -    m.addPackage( "${PN}-mime", "Python MIME handling APIs",
>         "${PN}-core ${PN}-io",
>         -    "mimetools.* uu.* quopri.* rfc822.* MimeWriter.*" )
>         -
>         -    m.addPackage( "${PN}-mmap", "Python memory-mapped file
>         support", "${PN}-core ${PN}-io",
>         -    "lib-dynload/mmap.so " )
>         -
>         -    m.addPackage( "${PN}-multiprocessing", "Python
>         multiprocessing support", "${PN}-core ${PN}-io ${PN}-lang
>         ${PN}-pickle ${PN}-threading ${PN}-ctypes ${PN}-mmap",
>         -    "lib-dynload/_multiprocessing.so multiprocessing" ) # package
>         -
>         -    m.addPackage( "${PN}-netclient", "Python Internet
>         Protocol clients", "${PN}-core ${PN}-crypt ${PN}-datetime
>         ${PN}-io ${PN}-lang ${PN}-logging ${PN}-mime",
>         -    "*Cookie*.* " +
>         -    "base64.* cookielib.* ftplib.* gopherlib.* hmac.*
>         httplib.* mimetypes.* nntplib.* poplib.* smtplib.* telnetlib.*
>         urllib.* urllib2.* urlparse.* uuid.* rfc822.* mimetools.*" )
>         -
>         -    m.addPackage( "${PN}-netserver", "Python Internet
>         Protocol servers", "${PN}-core ${PN}-netclient ${PN}-shell
>         ${PN}-threading",
>         -    "cgi.* *HTTPServer.* SocketServer.*" )
>         -
>         -    m.addPackage( "${PN}-numbers", "Python number APIs",
>         "${PN}-core ${PN}-lang ${PN}-re",
>         -    "decimal.* fractions.* numbers.*" )
>         -
>         -    m.addPackage( "${PN}-pickle", "Python
>         serialisation/persistence support", "${PN}-core ${PN}-codecs
>         ${PN}-io ${PN}-re",
>         -    "pickle.* shelve.* lib-dynload/cPickle.so pickletools.*" )
>         -
>         -    m.addPackage( "${PN}-pkgutil", "Python package extension
>         utility support", "${PN}-core",
>         -    "pkgutil.*")
>         -
>         -    m.addPackage( "${PN}-plistlib", "Generate and parse Mac
>         OS X .plist files", "${PN}-core ${PN}-datetime ${PN}-io",
>         -    "plistlib.*")
>         -
>         -    m.addPackage( "${PN}-pprint", "Python pretty-print
>         support", "${PN}-core ${PN}-io",
>         -    "pprint.*" )
>         -
>         -    m.addPackage( "${PN}-profile", "Python basic performance
>         profiling support", "${PN}-core ${PN}-textutils",
>         -    "profile.* pstats.* cProfile.* lib-dynload/_lsprof.so" )
>         -
>         -    m.addPackage( "${PN}-re", "Python Regular Expression
>         APIs", "${PN}-core",
>         -    "re.* sre.* sre_compile.* sre_constants* sre_parse.*" ) #
>         _sre is builtin
>         -
>         -    m.addPackage( "${PN}-readline", "Python readline
>         support", "${PN}-core",
>         -    "lib-dynload/readline.so rlcompleter.*" )
>         -
>         -    m.addPackage( "${PN}-resource", "Python resource control
>         interface", "${PN}-core",
>         -    "lib-dynload/resource.so" )
>         -
>         -    m.addPackage( "${PN}-shell", "Python shell-like
>         functionality", "${PN}-core ${PN}-re",
>         -    "cmd.* commands.* dircache.* fnmatch.* glob.* popen2.*
>         shlex.* shutil.*" )
>         -
>         -    m.addPackage( "${PN}-robotparser", "Python robots.txt
>         parser", "${PN}-core ${PN}-netclient",
>         -    "robotparser.*")
>         -
>         -    m.addPackage( "${PN}-runpy", "Python script for
>         locating/executing scripts in module namespace", "${PN}-core
>         ${PN}-pkgutil",
>         -    "runpy.*")
>         -
>         -    m.addPackage( "${PN}-subprocess", "Python subprocess
>         support", "${PN}-core ${PN}-io ${PN}-re ${PN}-fcntl ${PN}-pickle",
>         -    "subprocess.*" )
>         -
>         -    m.addPackage( "${PN}-sqlite3", "Python Sqlite3 database
>         support", "${PN}-core ${PN}-datetime ${PN}-lang ${PN}-crypt
>         ${PN}-io ${PN}-threading ${PN}-zlib",
>         -    "lib-dynload/_sqlite3.so sqlite3/dbapi2.*
>         sqlite3/__init__.* sqlite3/dump.*" )
>         -
>         -    m.addPackage( "${PN}-sqlite3-tests", "Python Sqlite3
>         database support tests", "${PN}-core ${PN}-sqlite3",
>         -    "sqlite3/test" )
>         -
>         -    m.addPackage( "${PN}-stringold", "Python string APIs
>         [deprecated]", "${PN}-core ${PN}-re",
>         -    "lib-dynload/strop.so string.* stringold.*" )
>         -
>         -    m.addPackage( "${PN}-syslog", "Python syslog interface",
>         "${PN}-core",
>         -    "lib-dynload/syslog.so" )
>         -
>         -    m.addPackage( "${PN}-terminal", "Python terminal
>         controlling support", "${PN}-core ${PN}-io",
>         -    "pty.* tty.*" )
>         -
>         -    m.addPackage( "${PN}-tests", "Python tests", "${PN}-core
>         ${PN}-modules",
>         -    "test", True ) # package
>         -
>         -    m.addPackage( "${PN}-threading", "Python threading &
>         synchronization support", "${PN}-core ${PN}-lang",
>         -    "_threading_local.* dummy_thread.* dummy_threading.*
>         mutex.* threading.* Queue.*" )
>         -
>         -    m.addPackage( "${PN}-tkinter", "Python Tcl/Tk bindings",
>         "${PN}-core",
>         -    "lib-dynload/_tkinter.so lib-tk" ) # package
>         -
>         -    m.addPackage( "${PN}-unittest", "Python unit testing
>         framework", "${PN}-core ${PN}-stringold ${PN}-lang ${PN}-io
>         ${PN}-difflib ${PN}-pprint ${PN}-shell",
>         -    "unittest/" )
>         -
>         -    m.addPackage( "${PN}-unixadmin", "Python Unix
>         administration support", "${PN}-core",
>         -    "lib-dynload/nis.so lib-dynload/grp.so lib-dynload/pwd.so
>         getpass.*" )
>         -
>         -    m.addPackage( "${PN}-xml", "Python basic XML support",
>         "${PN}-core ${PN}-re",
>         -    "lib-dynload/_elementtree.so lib-dynload/pyexpat.so xml
>         xmllib.*" ) # package
>         -
>         -    m.addPackage( "${PN}-xmlrpc", "Python XML-RPC support",
>         "${PN}-core ${PN}-xml ${PN}-netserver ${PN}-lang",
>         -    "xmlrpclib.* SimpleXMLRPCServer.* DocXMLRPCServer.*" )
>         -
>         -    m.addPackage( "${PN}-zlib", "Python zlib compression
>         support", "${PN}-core",
>         -    "lib-dynload/zlib.so" )
>         -
>         -    m.addPackage( "${PN}-mailbox", "Python mailbox format
>         support", "${PN}-core ${PN}-mime",
>         -    "mailbox.*" )
>         -
>         -    m.addPackage( "${PN}-argparse", "Python command line
>         argument parser", "${PN}-core ${PN}-codecs ${PN}-textutils",
>         -    "argparse.*" )
>         -
>         -    m.addPackage( "${PN}-contextlib", "Python utilities for
>         with-statement" +
>         -    "contexts.", "${PN}-core",
>         -    "${libdir}/python${PYTHON_MAJMIN}/contextlib.*" )
>         -
>         -    m.make()
>
>         --
>         To stop receiving notification emails like this one, please
>         contact
>         the administrator of this repository.
>         --
>         _______________________________________________
>         Openembedded-commits mailing list
>         Openembedded-commits at lists.openembedded.org
>         <mailto:Openembedded-commits at lists.openembedded.org>
>         http://lists.openembedded.org/mailman/listinfo/openembedded-commits
>         <http://lists.openembedded.org/mailman/listinfo/openembedded-commits>
>
>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20180122/937e8181/attachment-0001.html>


More information about the Openembedded-core mailing list