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

Martin Jansa martin.jansa at gmail.com
Sun Jan 21 15:13:14 UTC 2018


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
meta-oe/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb
meta-oe/meta-python/recipes-devtools/python/python3-pymongo_3.6.0.bb
meta-oe/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb
meta-oe/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb
meta-oe/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb
meta-oe/meta-python/recipes-devtools/python/python3-hyperlink_17.3.1.bb
meta-oe/meta-python/recipes-devtools/python/python3-click_6.7.bb
meta-oe/meta-python/recipes-devtools/python/python3-prompt-toolkit_1.0.15.bb
meta-oe/meta-python/recipes-devtools/python/python3-decorator_4.1.2.bb
meta-oe/meta-python/recipes-devtools/python/python3-serpent_1.23.bb
meta-oe/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb
meta-oe/meta-python/recipes-devtools/python/python3-jsonpatch_1.21.bb
meta-oe/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.15.bb
meta-oe/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
meta-oe/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb
meta-oe/meta-python/recipes-devtools/python/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
meta-oe/meta-python/recipes-devtools/python/python3-pyroute2_0.4.21.bb
meta-oe/meta-python/recipes-devtools/python/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
meta-oe/meta-python/recipes-devtools/python/python-pyroute2_0.4.21.bb
meta-oe/meta-python/recipes-devtools/python/python-pandas_0.22.0.bb
meta-oe/meta-python/recipes-devtools/python/python-astroid_1.6.0.bb
meta-oe/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb
meta-oe/meta-python/recipes-devtools/python/python-can_2.0.0.bb
meta-oe/meta-python/recipes-devtools/python/python-pyserial_3.4.bb
meta-oe/meta-oe/recipes-devtools/python/python-pygobject_3.22.0.bb
meta-oe/meta-python/recipes-devtools/python/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>
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
>
> 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'?
>
> Regards,
>
> On Sat, Jan 20, 2018 at 11:32 PM, <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>
>> 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.int
>> el.com>
>>     Signed-off-by: Ross Burton <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                 |   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      |   88 +-
>>  scripts/contrib/python/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'
>> Version 20110222.2 (C) 2002-2010 Michael 'Mickey' Lauer <
>> 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
>> --native' Version 20110222.2 (C) 2002-2010 Michael 'Mickey' Lauer <
>> 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
>> b/meta/recipes-devtools/python/python-native_2.7.13.bb
>> index 7edf153..2b74003 100644
>> --- a/meta/recipes-devtools/python/python-native_2.7.13.bb
>> +++ b/meta/recipes-devtools/python/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>
>> +
>> +
>> +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+'/us
>> r/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.basen
>> ame(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.new','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>
>> +
>> +
>> +# 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
>> b/meta/recipes-devtools/python/python_2.7.13.bb
>> index 754c029..dbafb95 100644
>> --- a/meta/recipes-devtools/python/python_2.7.13.bb
>> +++ b/meta/recipes-devtools/python/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${PYTH
>> ON_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-man
>> ifest.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
>> b/scripts/contrib/python/generate-manifest-2.7.py
>> deleted file mode 100755
>> index ee75403..0000000
>> --- a/scripts/contrib/python/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>
>> -# (C) 2007 Jeremy Laine
>> -# licensed under MIT, see COPYING.MIT
>> -#
>> -# June 22, 2011 -- Mark Hatle <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>
>> -#  * 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>"
>> -__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>
>> -""" % ( 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
>> http://lists.openembedded.org/mailman/listinfo/openembedded-commits
>>
>
>


More information about the Openembedded-commits mailing list