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