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