All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/19] python improvements
@ 2017-12-08 22:45 Tim Orling
  2017-12-08 22:45 ` [PATCH v2 01/19] python: Restructure python packaging and replace it with autopackaging Tim Orling
                   ` (19 more replies)
  0 siblings, 20 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

This patchset combines Alejandro Hernandez' new python packaging as
well as adding Derek Straka's pypi.bbclass from meta-python.

The commits which delete the old manifests will fail git send-email, so
this series must be pulled from git.

The pypi.bbclass added to meta-python by Derek Straka significantly
simplifies python module packaging and has utility outside of just
the meta-python layer. Most notably, it knows how to generate the
SRC_URI, S, UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX variables
given a PYPI_PACKAGE. For special cases where PYPI_PACKAGE is not
guessable from the BPN, the value can be set in your recipe. For
special cases where the upstream source is not bundled as a .tar.gz,
the PYPI_PACKAGE_EXT can be set in your recipe. Providing python2 and
python3 packaging is also simplified by putting most of the common
content into .inc files. Note that it is strongly recommend to use
PYTHON_PN to dynamically set "python-" vs. "python3-" prefix for your
DEPENDS and RDEPENDS needs. This often moves everything but the
"requires python-foo.inc" and "include setuptools*" lines in your
python recipes to the common .inc file. Much simpler maintenance.

This patch series adds runpy to the new json-style python-*-manifests, 
which allows you to run, for example "python -m pip" from the command
line. It also adds a couple dependencies that were silently breaking
python packages at runtime.

This series modifies all the recipes in recipes-devtools/python which
had a SRC_URI pointing to "pythonhosted" to use the pypi.bbclass. Where
it made sense, the "python-" and "python3-" specific files were simplified,
putting the common content into the .inc file.

Finally, this series upgrades python-scons and python*-setuptools to the
latest versions.

The following changes since commit 4469acdf1d0338220f3fe2ecb5e079eea6fda375:

  lib/oe/utils: remove param_bool() (2017-12-02 11:25:34 +0000)

are available in the git repository at:

  git://push.yoctoproject.org/poky-contrib timo/pypi-v2

Alejandro Hernandez (5):
  python: Restructure python packaging and replace it with autopackaging
  python3: Restructure python3 packaging and replace it with
    autopackaging
  python3: fix RDEPENDS on several recipes, due to non-existent python3
    packages
  hwlatdetect: fix RDEPENDS to avoid QA failures
  python-scons: Remove python-importlib dependency

Tim Orling (14):
  pypi.bbclass: bring in from meta-python
  python2 create_manifest.py: fix trailing whitespace in json
  python*-manifest.json: add dependencies, runpy
  python*-setuptools: upgrade to 38.2.3; use pypi.bbclass; improvements
  python3-pip: use pypi.bbclass
  python-nose: use pypi.bbclass
  python-six: use pypi.bbclass
  python-async: use pypi.bbclass
  python-mako: use pypi.bbclass
  python-smmap: use pypi.bbclass
  python-gitdb: use pypi.bbclass
  python-git: use pypi.bbclass
  python3-iniparse: use pypi.bbclass
  python-scons: upgrade to 3.0.1; use pypi.bbclass

 meta/classes/pypi.bbclass                          |   26 +
 meta/conf/documentation.conf                       |    3 +
 meta/recipes-core/libxml/libxml2_2.9.7.bb          |    2 +-
 .../bootchart2/bootchart2_0.14.8.bb                |    2 +-
 meta/recipes-devtools/dnf/dnf_2.6.3.bb             |   26 +-
 meta/recipes-devtools/gdb/gdb-cross-canadian.inc   |    4 +-
 .../opkg-utils/opkg-utils_0.3.5.bb                 |    2 +-
 .../python-numpy/python3-numpy_1.13.3.bb           |    2 -
 .../python/python-2.7-manifest.inc                 |  287 -----
 .../python/python-3.5-manifest.inc                 |  283 -----
 meta/recipes-devtools/python/python-async.inc      |    5 +-
 meta/recipes-devtools/python/python-git.inc        |   23 +-
 meta/recipes-devtools/python/python-gitdb.inc      |   16 +-
 meta/recipes-devtools/python/python-mako.inc       |   14 +-
 .../python/python-native-3.5-manifest.inc          |   10 -
 .../python/python-native_2.7.13.bb                 |   24 +-
 meta/recipes-devtools/python/python-nose.inc       |   18 +
 meta/recipes-devtools/python/python-nose_1.3.7.bb  |   25 +-
 ...ative_3.0.0.bb => python-scons-native_3.0.1.bb} |    0
 ...onscript-Support-python2-print-statements.patch |   38 -
 meta/recipes-devtools/python/python-scons_3.0.0.bb |   28 -
 meta/recipes-devtools/python/python-scons_3.0.1.bb |   18 +
 meta/recipes-devtools/python/python-setuptools.inc |   39 +-
 .../python/python-setuptools_36.5.0.bb             |   38 -
 .../python/python-setuptools_38.2.3.bb             |    9 +
 meta/recipes-devtools/python/python-six.inc        |    8 +-
 meta/recipes-devtools/python/python-smmap.inc      |    9 +-
 .../python/python/create_manifest2.py              |  277 +++++
 .../python/python/get_module_deps2.py              |  112 ++
 .../python/python/python2-manifest.json            | 1044 ++++++++++++++++++
 .../python/python/sitecustomize.py                 |    8 -
 .../recipes-devtools/python/python3-async_0.6.2.bb |    3 -
 meta/recipes-devtools/python/python3-git_2.1.7.bb  |    4 -
 .../recipes-devtools/python/python3-gitdb_0.6.4.bb |    4 -
 .../python/python3-iniparse_0.4.bb                 |   11 +-
 meta/recipes-devtools/python/python3-mako_1.0.7.bb |    9 -
 .../python/python3-native_3.5.3.bb                 |   30 +-
 meta/recipes-devtools/python/python3-nose_1.3.7.bb |   24 +-
 meta/recipes-devtools/python/python3-pip_9.0.1.bb  |   15 +-
 .../python/python3-pygobject_3.26.0.bb             |    2 +-
 .../python/python3-setuptools_36.5.0.bb            |   38 -
 .../python/python3-setuptools_38.2.3.bb            |    6 +
 meta/recipes-devtools/python/python3-six_1.11.0.bb |    4 +-
 .../recipes-devtools/python/python3-smmap_0.9.0.bb |    2 -
 .../python/python3/create_manifest3.py             |  321 ++++++
 .../python/python3/get_module_deps3.py             |  146 +++
 .../python/python3/python3-manifest.json           | 1130 ++++++++++++++++++++
 meta/recipes-devtools/python/python3_3.5.3.bb      |   83 +-
 meta/recipes-devtools/python/python_2.7.13.bb      |   80 +-
 .../qemu/nativesdk-qemu-helper_1.0.bb              |    2 +-
 meta/recipes-graphics/piglit/piglit_git.bb         |    4 +-
 meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb        |    2 +-
 meta/recipes-rt/rt-tests/rt-tests_1.1.bb           |    2 +-
 scripts/contrib/python/generate-manifest-2.7.py    |  421 --------
 scripts/contrib/python/generate-manifest-3.5.py    |  433 --------
 55 files changed, 3443 insertions(+), 1733 deletions(-)
 create mode 100644 meta/classes/pypi.bbclass
 delete mode 100644 meta/recipes-devtools/python/python-2.7-manifest.inc
 delete mode 100644 meta/recipes-devtools/python/python-3.5-manifest.inc
 delete mode 100644 meta/recipes-devtools/python/python-native-3.5-manifest.inc
 create mode 100644 meta/recipes-devtools/python/python-nose.inc
 rename meta/recipes-devtools/python/{python-scons-native_3.0.0.bb => python-scons-native_3.0.1.bb} (100%)
 delete mode 100644 meta/recipes-devtools/python/python-scons/SConscript-Support-python2-print-statements.patch
 delete mode 100644 meta/recipes-devtools/python/python-scons_3.0.0.bb
 create mode 100644 meta/recipes-devtools/python/python-scons_3.0.1.bb
 delete mode 100644 meta/recipes-devtools/python/python-setuptools_36.5.0.bb
 create mode 100644 meta/recipes-devtools/python/python-setuptools_38.2.3.bb
 create mode 100644 meta/recipes-devtools/python/python/create_manifest2.py
 create mode 100644 meta/recipes-devtools/python/python/get_module_deps2.py
 create mode 100644 meta/recipes-devtools/python/python/python2-manifest.json
 delete mode 100644 meta/recipes-devtools/python/python3-setuptools_36.5.0.bb
 create mode 100644 meta/recipes-devtools/python/python3-setuptools_38.2.3.bb
 create mode 100644 meta/recipes-devtools/python/python3/create_manifest3.py
 create mode 100644 meta/recipes-devtools/python/python3/get_module_deps3.py
 create mode 100644 meta/recipes-devtools/python/python3/python3-manifest.json
 delete mode 100755 scripts/contrib/python/generate-manifest-2.7.py
 delete mode 100755 scripts/contrib/python/generate-manifest-3.5.py

-- 
2.13.6



^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v2 01/19] python: Restructure python packaging and replace it with autopackaging
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 02/19] python3: Restructure python3 " Tim Orling
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

From: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>

The reason we have a manifest file for python is that our goal is to
keep python-core as small as posible and add other python packages only
when the user needs them, hence why we split upstream python into several
packages.

Although our manifest file has several issues:
 - Its unorganized and hard to read and understand it for an average
   human being.
 - When a new package needs to be added, the user actually has to modify
   the script that creates the manifest, then call the script to create
   a new manifest, and then submit a patch for both the script and the
   manifest, so its a little convoluted.
 - Git complains every single time a patch is submitted to the manifest,
   since it violates some of its guidelines.
 - It changes or may change with every release of python, its impossible
   to know if the required files for a certain package have changed
   (it could have more or less dependencies), the only way of doing so
   would be to install and test them all one by one on separate individual
   images, and even then we wouldnt know if they require less dependencies,
   we would just know if an extra dependency is required since it would
   complain, lets face it, this isnt feasible.
 - The same thing happens for new packages, if someone wants to add a
   new package, its dependencies need to be checked manually one by one.

This patch fixes those issues, while adding some additional features.

Features/Fixes:

 - A new manifest format is used (JSON), easy to read and understand.
   This file is parsed by the python recipe and python packages read
   from here are passed directly to bitbake during parsing time.
 - It provides an automatic manifest creation task (explained below),
   which automagically checks for every package dependencies and adds
   them to the new manifest, hence we will have on each package exactly
   what that package needs to be run, providing finer granularity.
 - Dependencies are also checked automagically for new packages (explained below).
 - Fixes the manifest in the following ways:
   * python-core should be base and all packages should depend on it,
     fixes lang, string, codecs, etc.
   * Fixes packages with repeated files (e.g. bssdb and db, or
     netclient and mime, and many others).
 - Sitecustomize was fixed since encoding was deprecated.
 - The JSON manifest file invalidates bitbake's cache, so if it changes
   the python package will be rebuilt.
 - It creates a solution for users that want precompiled bytecode files
   (*.pyc) INCLUDE_PYCS = "1" can be set by the user on their local.conf to
   include such files, some argument they get faster boot time, even when the
   files would be created on their first run?, but they also sometimes give a
   magic number error and take up space, so we leave it to the user to
   decide if they want them or not.
 - Fixes python-core dependencies, e.g.
   When python is run on an image, it TRIES to import everything it needs,
   but it doesnt necessarily fails when it doesnt find something, so even if
   we didnt know, we had errors like (trimmed on purpose):
   # trying /usr/lib/python2.7/_locale.so
   # trying /usr/lib/python2.7/lib-dynload/_locale.so
   # trying /usr/lib/python2.7/_sysconfigdata.so

   while it didnt complain about _locale it should have imported it,
   after creating a new manifest with the automated script we get:

   # trying /usr/lib/python2.7/lib-dynload/_locale.so
   dlopen("/usr/lib/python2.7/lib-dynload/_locale.so", 2);
   import _locale # dynamically loaded from /usr/lib/python2.7/lib-dynload/_locale.so

How to use (after a new release of python, or maybe before every OE
release):
 - A new task called create_manifest was added to the python package,
   which may be invoked via:

 $ bitbake python -c create_manifest

 This task runs a script on native python on our HOST system, and since
 the python and python-native packages come from the same source, we can
 use it to know the dependencies of each module as if we were doing it
 on an image, this script is called create_manifest.py and in a very
 simplistic way it does the following:

 1. Reads the JSON manifest file and creates a dictionary data structure
    with all of our python packages, their FILES, RDEPENDS and SUMMARY.
 2. Loops through all of them and runs every module listed on them
    asynchronously, determining every dependency that they have.
 3. These module dependencies are then handled, to be able to know which
    packages contain those files and which should RDEPEND on one another.
 4. The data structure that comes out of this, is then used to create a
    new manifest file which is automatically copied onto the user's python
    directory replacing the old one.

 Create_manifest script features:
 - Handles modules which dont exist anymore (new release for example).
 - Handles modules that are builtin.
 - Deals with modules which were not compiled (e.g. bsddb or ossaudiodev)
 - Deals with packages which include folders.
 - Deals with packages which include FILES with a wildcard.
 - The manifest can be constructed on a multilib environment as well.
 - This method works for both python modules and shared libraries used
   by python.

How to add a new package:
 - If a user wants to add a new package all that has to be done is
   modify the python2-manifest.json file, and add the required file(s)
   to the FILES list, the script should handle all the rest.
   Real example:
   We want to add a web browser package, including the file webbrowser.py
   which at the moment is on python-misc.
   "webbrowser": {
       "files": ["${libdir}/python2.7/lib-dynload/webbrowser.py"],
       "rdepends": [],
       "summary": "Python Web Browser support"}

 Run bitbake python -c create_manifest and the resulting manifest
 should  be completed after a few seconds, showing something like:
   "webbrowser": {
      "files": ["${libdir}/python2.7/webbrowser.py"],
      "rdepends": ["core","fcntl","io","pickle","shell","subprocess"],
      "summary": "Python Web Browser support"}

Known errors/issues:
 - Some special packages are handled differently: core, misc,
   modules,dev, staticdev.
   All these should be handled manually, because they either include
   binaries, static libraries, include files, etc. (something that we
   cant import).
   Specifically static libraries are not not supported by this method
   and have to be handled by the user.
 - The change should be transparent to the user, other than the fact
   that now we CANT build python-foo (it was pretty dumb anyway, since
   what building python-foo actually did was building the whole python
   package anyway), but doing IMAGE_INSTALL_append = " python-foo"
   would create an image with the requested package with no issues.

[YOCTO #11510] [YOCTO #11694] [YOCTO #11695]

Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
---
 .../python/python-2.7-manifest.inc                 |  287 ------
 .../python/python-native_2.7.13.bb                 |   24 +-
 .../python/python/create_manifest2.py              |  277 ++++++
 .../python/python/get_module_deps2.py              |  112 +++
 .../python/python/python2-manifest.json            | 1033 ++++++++++++++++++++
 .../python/python/sitecustomize.py                 |    8 -
 meta/recipes-devtools/python/python_2.7.13.bb      |   80 +-
 scripts/contrib/python/generate-manifest-2.7.py    |  421 --------
 8 files changed, 1521 insertions(+), 721 deletions(-)
 delete mode 100644 meta/recipes-devtools/python/python-2.7-manifest.inc
 create mode 100644 meta/recipes-devtools/python/python/create_manifest2.py
 create mode 100644 meta/recipes-devtools/python/python/get_module_deps2.py
 create mode 100644 meta/recipes-devtools/python/python/python2-manifest.json
 delete mode 100755 scripts/contrib/python/generate-manifest-2.7.py

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



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 02/19] python3: Restructure python3 packaging and replace it with autopackaging
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
  2017-12-08 22:45 ` [PATCH v2 01/19] python: Restructure python packaging and replace it with autopackaging Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 03/19] python3: fix RDEPENDS on several recipes, due to non-existent python3 packages Tim Orling
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

From: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>

See previous commit (python2 version) for more info, since mostly
everything applies here as well.

Old manifest file had several issues:
 - Its unorganized and hard to read and understand it for an average
   human being.
 - When a new package needs to be added, the user actually has to modify
   the script that creates the manifest, then call the script to create
   a new manifest, and then submit a patch for both the script and the
   manifest, so its a little convoluted.
 - Git complains every single time a patch is submitted to the manifest,
   since it violates some of its guidelines.
 - It changes or may change with every release of python, its impossible
   to know if the required files for a certain package have changed
   (it could have more or less dependencies), the only way of doing so
   would be to install and test them all one by one on separate individual
   images, and even then we wouldnt know if they require less dependencies,
   we would just know if an extra dependency is required since it would
   complain, lets face it, this isnt feasible.
 - The same thing happens for new packages, if someone wants to add a new
   package, its dependencies need to be checked manually one by one.

Features/Fixes:
 - A new manifest format is used (JSON), easy to read and understand.
   This file is parsed by the python recipe and python packages
   read from here are passed directly to bitbake during parsing time.
 - It provides an automatic manifest creation task (explained on previous
   commit), which automagically checks for every package dependencies and
   adds them to the new manifest, hence we will have on each package
   exactly what that package needs to be run, providing finer granularity.
  - Dependencies are also checked automagically for new packages
   (explained on previous commit).

This patch has the same features as the python2 version but it differs
in the following ways:
 - Python3 handles precompiled bytecode files  (*.pyc) differently.
   for this reason and since we are cross compiling, wildcards couldnt be
   avoided on python3 (See PEP #3147 [1]).
   Both the manifest and the manifest creation script handle this
   differently, the manifest for python3 has an extra field for cached
   files, which is how it lets the user install the cached files or not
   via : INCLUDE_PYCS = "1" on their local.conf.
 - Shared libraries nomenclature also changed on python3, so again, we
   use wildcards to deal with this issue ( See PEP #3149 [2]):
 - Fixes python3 manifest, python3-core should be base and everything
   should depend on it, hence several packages were deleted:
   python3-enum, re, gdbm, subprocess, signal, readline.
 - When building python3-native it adds as symlink to it called
   nativepython3, which is then isued by the create_manifest task.
 - Fixes [YOCTO #11513] while were at it.

References:
[1] https://www.python.org/dev/peps/pep-3147/
[2] https://www.python.org/dev/peps/pep-3149/

Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
---
 .../python/python-3.5-manifest.inc                 |  283 -----
 .../python/python-native-3.5-manifest.inc          |   10 -
 .../python/python3-native_3.5.3.bb                 |   30 +-
 .../python/python3/create_manifest3.py             |  321 ++++++
 .../python/python3/get_module_deps3.py             |  146 +++
 .../python/python3/python3-manifest.json           | 1097 ++++++++++++++++++++
 meta/recipes-devtools/python/python3_3.5.3.bb      |   83 +-
 scripts/contrib/python/generate-manifest-3.5.py    |  433 --------
 8 files changed, 1668 insertions(+), 735 deletions(-)
 delete mode 100644 meta/recipes-devtools/python/python-3.5-manifest.inc
 delete mode 100644 meta/recipes-devtools/python/python-native-3.5-manifest.inc
 create mode 100644 meta/recipes-devtools/python/python3/create_manifest3.py
 create mode 100644 meta/recipes-devtools/python/python3/get_module_deps3.py
 create mode 100644 meta/recipes-devtools/python/python3/python3-manifest.json
 delete mode 100755 scripts/contrib/python/generate-manifest-3.5.py

diff --git a/meta/recipes-devtools/python/python-3.5-manifest.inc b/meta/recipes-devtools/python/python-3.5-manifest.inc
deleted file mode 100644
index 0260e87e75f..00000000000
--- a/meta/recipes-devtools/python/python-3.5-manifest.inc
+++ /dev/null
@@ -1,283 +0,0 @@
-
-# WARNING: This file is AUTO GENERATED: Manual edits will be lost next time I regenerate the file.
-# Generator: 'scripts/contrib/python/generate-manifest-3.5.py' Version 20140131 (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
-
- 
-
-PROVIDES+="${PN}-2to3 ${PN}-argparse ${PN}-asyncio ${PN}-audio ${PN}-codecs ${PN}-compile ${PN}-compression ${PN}-core ${PN}-crypt ${PN}-ctypes ${PN}-curses ${PN}-datetime ${PN}-db ${PN}-debugger ${PN}-dev ${PN}-difflib ${PN}-distutils ${PN}-distutils-staticdev ${PN}-doctest ${PN}-email ${PN}-enum ${PN}-fcntl ${PN}-gdbm ${PN}-html ${PN}-idle ${PN}-image ${PN}-importlib ${PN}-io ${PN}-json ${PN}-lang ${PN}-logging ${PN}-mailbox ${PN}-math ${PN}-mime ${PN}-mmap ${PN}-multiprocessing ${PN}-netclient ${PN}-netserver ${PN}-numbers ${PN}-pickle ${PN}-pkgutil ${PN}-pprint ${PN}-profile ${PN}-pydoc ${PN}-re ${PN}-readline ${PN}-reprlib ${PN}-resource ${PN}-selectors ${PN}-shell ${PN}-signal ${PN}-smtpd ${PN}-sqlite3 ${PN}-sqlite3-tests ${PN}-stringold ${PN}-subprocess ${PN}-syslog ${PN}-terminal ${PN}-tests ${PN}-textutils ${PN}-threading ${PN}-tkinter ${PN}-typing ${PN}-unittest ${PN}-unixadmin ${PN}-xml ${PN}-xmlrpc "
-
-PACKAGES="${PN}-dbg ${PN}-2to3 ${PN}-argparse ${PN}-asyncio ${PN}-audio ${PN}-codecs ${PN}-compile ${PN}-compression ${PN}-core ${PN}-crypt ${PN}-ctypes ${PN}-curses ${PN}-datetime ${PN}-db ${PN}-debugger ${PN}-dev ${PN}-difflib ${PN}-distutils-staticdev ${PN}-distutils ${PN}-doctest ${PN}-email ${PN}-enum ${PN}-fcntl ${PN}-gdbm ${PN}-html ${PN}-idle ${PN}-image ${PN}-importlib ${PN}-io ${PN}-json ${PN}-lang ${PN}-logging ${PN}-mailbox ${PN}-math ${PN}-mime ${PN}-mmap ${PN}-multiprocessing ${PN}-netclient ${PN}-netserver ${PN}-numbers ${PN}-pickle ${PN}-pkgutil ${PN}-pprint ${PN}-profile ${PN}-pydoc ${PN}-re ${PN}-readline ${PN}-reprlib ${PN}-resource ${PN}-selectors ${PN}-shell ${PN}-signal ${PN}-smtpd ${PN}-sqlite3 ${PN}-sqlite3-tests ${PN}-stringold ${PN}-subprocess ${PN}-syslog ${PN}-terminal ${PN}-tests ${PN}-textutils ${PN}-threading ${PN}-tkinter ${PN}-typing ${PN}-unittest ${PN}-unixadmin ${PN}-xml ${PN}-xmlrpc ${PN}-modules"
-
-SUMMARY_${PN}-2to3="Python automated Python 2 to 3 code translator"
-RDEPENDS_${PN}-2to3="${PN}-core"
-FILES_${PN}-2to3="${libdir}/python3.5/lib2to3 ${libdir}/python3.5/lib2to3/__pycache__ "
-
-SUMMARY_${PN}-argparse="Python command line argument parser"
-RDEPENDS_${PN}-argparse="${PN}-core ${PN}-codecs ${PN}-textutils"
-FILES_${PN}-argparse="${libdir}/python3.5/argparse.* ${libdir}/python3.5/__pycache__/argparse.* "
-
-SUMMARY_${PN}-asyncio="Python Asynchronous I/O, event loop, coroutines and tasks"
-RDEPENDS_${PN}-asyncio="${PN}-core"
-FILES_${PN}-asyncio="${libdir}/python3.5/asyncio ${libdir}/python3.5/asyncio/__pycache__ "
-
-SUMMARY_${PN}-audio="Python Audio Handling"
-RDEPENDS_${PN}-audio="${PN}-core"
-FILES_${PN}-audio="${libdir}/python3.5/wave.* ${libdir}/python3.5/__pycache__/wave.* ${libdir}/python3.5/chunk.* ${libdir}/python3.5/__pycache__/chunk.* ${libdir}/python3.5/sndhdr.* ${libdir}/python3.5/__pycache__/sndhdr.* ${libdir}/python3.5/lib-dynload/ossaudiodev.*.so ${libdir}/python3.5/lib-dynload/__pycache__/ossaudiodev.*.so ${libdir}/python3.5/lib-dynload/audioop.*.so ${libdir}/python3.5/lib-dynload/__pycache__/audioop.*.so ${libdir}/python3.5/audiodev.* ${libdir}/python3.5/__pycache__/audiodev.* ${libdir}/python3.5/sunaudio.* ${libdir}/python3.5/__pycache__/sunaudio.* ${libdir}/python3.5/sunau.* ${libdir}/python3.5/__pycache__/sunau.* ${libdir}/python3.5/toaiff.* ${libdir}/python3.5/__pycache__/toaiff.* "
-
-SUMMARY_${PN}-codecs="Python codecs, encodings & i18n support"
-RDEPENDS_${PN}-codecs="${PN}-core ${PN}-lang"
-FILES_${PN}-codecs="${libdir}/python3.5/codecs.* ${libdir}/python3.5/__pycache__/codecs.* ${libdir}/python3.5/encodings ${libdir}/python3.5/encodings/__pycache__ ${libdir}/python3.5/gettext.* ${libdir}/python3.5/__pycache__/gettext.* ${libdir}/python3.5/locale.* ${libdir}/python3.5/__pycache__/locale.* ${libdir}/python3.5/lib-dynload/_locale.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_locale.*.so ${libdir}/python3.5/lib-dynload/_codecs* ${libdir}/python3.5/lib-dynload/_codecs*/__pycache__ ${libdir}/python3.5/lib-dynload/_multibytecodec.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_multibytecodec.*.so ${libdir}/python3.5/lib-dynload/unicodedata.*.so ${libdir}/python3.5/lib-dynload/__pycache__/unicodedata.*.so ${libdir}/python3.5/stringprep.* ${libdir}/python3.5/__pycache__/stringprep.* ${libdir}/python3.5/xdrlib.* ${libdir}/python3.5/__pycache__/xdrlib.* "
-
-SUMMARY_${PN}-compile="Python bytecode compilation support"
-RDEPENDS_${PN}-compile="${PN}-core"
-FILES_${PN}-compile="${libdir}/python3.5/py_compile.* ${libdir}/python3.5/__pycache__/py_compile.* ${libdir}/python3.5/compileall.* ${libdir}/python3.5/__pycache__/compileall.* "
-
-SUMMARY_${PN}-compression="Python high-level compression support"
-RDEPENDS_${PN}-compression="${PN}-core ${PN}-codecs ${PN}-importlib ${PN}-threading ${PN}-shell"
-FILES_${PN}-compression="${libdir}/python3.5/gzip.* ${libdir}/python3.5/__pycache__/gzip.* ${libdir}/python3.5/zipfile.* ${libdir}/python3.5/__pycache__/zipfile.* ${libdir}/python3.5/tarfile.* ${libdir}/python3.5/__pycache__/tarfile.* ${libdir}/python3.5/lib-dynload/bz2.*.so ${libdir}/python3.5/lib-dynload/__pycache__/bz2.*.so ${libdir}/python3.5/lib-dynload/zlib.*.so ${libdir}/python3.5/lib-dynload/__pycache__/zlib.*.so ${libdir}/python3.5/bz2.py ${libdir}/python3.5/__pycache__/bz2.py ${libdir}/python3.5/lzma.py ${libdir}/python3.5/__pycache__/lzma.py ${libdir}/python3.5/_compression.py ${libdir}/python3.5/__pycache__/_compression.py "
-
-SUMMARY_${PN}-core="Python interpreter and core modules"
-RDEPENDS_${PN}-core="${PN}-lang ${PN}-re ${PN}-reprlib ${PN}-codecs ${PN}-io ${PN}-math"
-FILES_${PN}-core="${libdir}/python3.5/__future__.* ${libdir}/python3.5/__pycache__/__future__.* ${libdir}/python3.5/_abcoll.* ${libdir}/python3.5/__pycache__/_abcoll.* ${libdir}/python3.5/abc.* ${libdir}/python3.5/__pycache__/abc.* ${libdir}/python3.5/ast.* ${libdir}/python3.5/__pycache__/ast.* ${libdir}/python3.5/copy.* ${libdir}/python3.5/__pycache__/copy.* ${libdir}/python3.5/copyreg.* ${libdir}/python3.5/__pycache__/copyreg.* ${libdir}/python3.5/configparser.* ${libdir}/python3.5/__pycache__/configparser.* ${libdir}/python3.5/genericpath.* ${libdir}/python3.5/__pycache__/genericpath.* ${libdir}/python3.5/getopt.* ${libdir}/python3.5/__pycache__/getopt.* ${libdir}/python3.5/linecache.* ${libdir}/python3.5/__pycache__/linecache.* ${libdir}/python3.5/new.* ${libdir}/python3.5/__pycache__/new.* ${libdir}/python3.5/os.* ${libdir}/python3.5/__pycache__/os.* ${libdir}/python3.5/posixpath.* ${libdir}/python3.5/__pycache__/posixpath.* ${libdir}/python3.5/struct.* ${libdir}/python3.5/__pycache__/struct.* ${libdir}/python3.5/warnings.* ${libdir}/python3.5/__pycache__/warnings.* ${libdir}/python3.5/site.* ${libdir}/python3.5/__pycache__/site.* ${libdir}/python3.5/stat.* ${libdir}/python3.5/__pycache__/stat.* ${libdir}/python3.5/UserDict.* ${libdir}/python3.5/__pycache__/UserDict.* ${libdir}/python3.5/UserList.* ${libdir}/python3.5/__pycache__/UserList.* ${libdir}/python3.5/UserString.* ${libdir}/python3.5/__pycache__/UserString.* ${libdir}/python3.5/lib-dynload/binascii.*.so ${libdir}/python3.5/lib-dynload/__pycache__/binascii.*.so ${libdir}/python3.5/lib-dynload/_struct.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_struct.*.so ${libdir}/python3.5/lib-dynload/time.*.so ${libdir}/python3.5/lib-dynload/__pycache__/time.*.so ${libdir}/python3.5/lib-dynload/xreadlines.*.so ${libdir}/python3.5/lib-dynload/__pycache__/xreadlines.*.so ${libdir}/python3.5/types.* ${libdir}/python3.5/__pycache__/types.* ${libdir}/python3.5/platform.* ${libdir}/python3.5/__pycache__/platform.* ${bindir}/python* ${libdir}/python3.5/_weakrefset.* ${libdir}/python3.5/__pycache__/_weakrefset.* ${libdir}/python3.5/sysconfig.* ${libdir}/python3.5/__pycache__/sysconfig.* ${libdir}/python3.5/_sysconfigdata.* ${libdir}/python3.5/__pycache__/_sysconfigdata.* ${includedir}/python${PYTHON_BINABI}/pyconfig*.h ${libdir}/python${PYTHON_MAJMIN}/collections ${libdir}/python${PYTHON_MAJMIN}/_collections_abc.* ${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.* ${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py "
-
-SUMMARY_${PN}-crypt="Python basic cryptographic and hashing support"
-RDEPENDS_${PN}-crypt="${PN}-core"
-FILES_${PN}-crypt="${libdir}/python3.5/hashlib.* ${libdir}/python3.5/__pycache__/hashlib.* ${libdir}/python3.5/md5.* ${libdir}/python3.5/__pycache__/md5.* ${libdir}/python3.5/sha.* ${libdir}/python3.5/__pycache__/sha.* ${libdir}/python3.5/lib-dynload/crypt.*.so ${libdir}/python3.5/lib-dynload/__pycache__/crypt.*.so ${libdir}/python3.5/lib-dynload/_hashlib.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_hashlib.*.so ${libdir}/python3.5/lib-dynload/_sha256.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_sha256.*.so ${libdir}/python3.5/lib-dynload/_sha512.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_sha512.*.so "
-
-SUMMARY_${PN}-ctypes="Python C types support"
-RDEPENDS_${PN}-ctypes="${PN}-core ${PN}-subprocess"
-FILES_${PN}-ctypes="${libdir}/python3.5/ctypes ${libdir}/python3.5/ctypes/__pycache__ ${libdir}/python3.5/lib-dynload/_ctypes.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_ctypes.*.so ${libdir}/python3.5/lib-dynload/_ctypes_test.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_ctypes_test.*.so "
-
-SUMMARY_${PN}-curses="Python curses support"
-RDEPENDS_${PN}-curses="${PN}-core"
-FILES_${PN}-curses="${libdir}/python3.5/curses ${libdir}/python3.5/curses/__pycache__ ${libdir}/python3.5/lib-dynload/_curses.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_curses.*.so ${libdir}/python3.5/lib-dynload/_curses_panel.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_curses_panel.*.so "
-
-SUMMARY_${PN}-datetime="Python calendar and time support"
-RDEPENDS_${PN}-datetime="${PN}-core ${PN}-codecs"
-FILES_${PN}-datetime="${libdir}/python3.5/_strptime.* ${libdir}/python3.5/__pycache__/_strptime.* ${libdir}/python3.5/calendar.* ${libdir}/python3.5/__pycache__/calendar.* ${libdir}/python3.5/datetime.* ${libdir}/python3.5/__pycache__/datetime.* ${libdir}/python3.5/lib-dynload/_datetime.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_datetime.*.so "
-
-SUMMARY_${PN}-db="Python file-based database support"
-RDEPENDS_${PN}-db="${PN}-core"
-FILES_${PN}-db="${libdir}/python3.5/anydbm.* ${libdir}/python3.5/__pycache__/anydbm.* ${libdir}/python3.5/dumbdbm.* ${libdir}/python3.5/__pycache__/dumbdbm.* ${libdir}/python3.5/whichdb.* ${libdir}/python3.5/__pycache__/whichdb.* ${libdir}/python3.5/dbm ${libdir}/python3.5/dbm/__pycache__ ${libdir}/python3.5/lib-dynload/_dbm.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_dbm.*.so "
-
-SUMMARY_${PN}-debugger="Python debugger"
-RDEPENDS_${PN}-debugger="${PN}-core ${PN}-io ${PN}-lang ${PN}-re ${PN}-stringold ${PN}-shell ${PN}-pprint ${PN}-importlib ${PN}-pkgutil"
-FILES_${PN}-debugger="${libdir}/python3.5/bdb.* ${libdir}/python3.5/__pycache__/bdb.* ${libdir}/python3.5/pdb.* ${libdir}/python3.5/__pycache__/pdb.* "
-
-SUMMARY_${PN}-dev="Python development package"
-RDEPENDS_${PN}-dev="${PN}-core"
-FILES_${PN}-dev="${includedir} ${libdir}/lib*${SOLIBSDEV} ${libdir}/*.la ${libdir}/*.a ${libdir}/*.o ${libdir}/pkgconfig ${base_libdir}/*.a ${base_libdir}/*.o ${datadir}/aclocal ${datadir}/pkgconfig ${libdir}/python3.5/config*/Makefile ${libdir}/python3.5/config*/Makefile/__pycache__ "
-
-SUMMARY_${PN}-difflib="Python helpers for computing deltas between objects"
-RDEPENDS_${PN}-difflib="${PN}-lang ${PN}-re"
-FILES_${PN}-difflib="${libdir}/python3.5/difflib.* ${libdir}/python3.5/__pycache__/difflib.* "
-
-SUMMARY_${PN}-distutils="Python Distribution Utilities"
-RDEPENDS_${PN}-distutils="${PN}-core ${PN}-email"
-FILES_${PN}-distutils="${libdir}/python3.5/config ${libdir}/python3.5/config/__pycache__ ${libdir}/python3.5/distutils ${libdir}/python3.5/distutils/__pycache__ "
-
-SUMMARY_${PN}-distutils-staticdev="Python distribution utilities (static libraries)"
-RDEPENDS_${PN}-distutils-staticdev="${PN}-distutils"
-FILES_${PN}-distutils-staticdev="${libdir}/python3.5/config/lib*.a ${libdir}/python3.5/config/__pycache__/lib*.a "
-
-SUMMARY_${PN}-doctest="Python framework for running examples in docstrings"
-RDEPENDS_${PN}-doctest="${PN}-core ${PN}-lang ${PN}-io ${PN}-re ${PN}-unittest ${PN}-debugger ${PN}-difflib"
-FILES_${PN}-doctest="${libdir}/python3.5/doctest.* ${libdir}/python3.5/__pycache__/doctest.* "
-
-SUMMARY_${PN}-email="Python email support"
-RDEPENDS_${PN}-email="${PN}-core ${PN}-io ${PN}-re ${PN}-mime ${PN}-audio ${PN}-image ${PN}-netclient"
-FILES_${PN}-email="${libdir}/python3.5/imaplib.* ${libdir}/python3.5/__pycache__/imaplib.* ${libdir}/python3.5/email ${libdir}/python3.5/email/__pycache__ "
-
-SUMMARY_${PN}-enum="Python support for enumerations"
-RDEPENDS_${PN}-enum="${PN}-core"
-FILES_${PN}-enum="${libdir}/python3.5/enum.* ${libdir}/python3.5/__pycache__/enum.* "
-
-SUMMARY_${PN}-fcntl="Python's fcntl interface"
-RDEPENDS_${PN}-fcntl="${PN}-core"
-FILES_${PN}-fcntl="${libdir}/python3.5/lib-dynload/fcntl.*.so ${libdir}/python3.5/lib-dynload/__pycache__/fcntl.*.so "
-
-SUMMARY_${PN}-gdbm="Python GNU database support"
-RDEPENDS_${PN}-gdbm="${PN}-core"
-FILES_${PN}-gdbm="${libdir}/python3.5/lib-dynload/_gdbm.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_gdbm.*.so "
-
-SUMMARY_${PN}-html="Python HTML processing support"
-RDEPENDS_${PN}-html="${PN}-core"
-FILES_${PN}-html="${libdir}/python3.5/formatter.* ${libdir}/python3.5/__pycache__/formatter.* ${libdir}/python3.5/htmlentitydefs.* ${libdir}/python3.5/__pycache__/htmlentitydefs.* ${libdir}/python3.5/html ${libdir}/python3.5/html/__pycache__ ${libdir}/python3.5/htmllib.* ${libdir}/python3.5/__pycache__/htmllib.* ${libdir}/python3.5/markupbase.* ${libdir}/python3.5/__pycache__/markupbase.* ${libdir}/python3.5/sgmllib.* ${libdir}/python3.5/__pycache__/sgmllib.* ${libdir}/python3.5/HTMLParser.* ${libdir}/python3.5/__pycache__/HTMLParser.* "
-
-SUMMARY_${PN}-idle="Python Integrated Development Environment"
-RDEPENDS_${PN}-idle="${PN}-core ${PN}-tkinter"
-FILES_${PN}-idle="${bindir}/idle ${libdir}/python3.5/idlelib ${libdir}/python3.5/idlelib/__pycache__ "
-
-SUMMARY_${PN}-image="Python graphical image handling"
-RDEPENDS_${PN}-image="${PN}-core"
-FILES_${PN}-image="${libdir}/python3.5/colorsys.* ${libdir}/python3.5/__pycache__/colorsys.* ${libdir}/python3.5/imghdr.* ${libdir}/python3.5/__pycache__/imghdr.* ${libdir}/python3.5/lib-dynload/imageop.*.so ${libdir}/python3.5/lib-dynload/__pycache__/imageop.*.so ${libdir}/python3.5/lib-dynload/rgbimg.*.so ${libdir}/python3.5/lib-dynload/__pycache__/rgbimg.*.so "
-
-SUMMARY_${PN}-importlib="Python import implementation library"
-RDEPENDS_${PN}-importlib="${PN}-core ${PN}-lang"
-FILES_${PN}-importlib="${libdir}/python3.5/importlib ${libdir}/python3.5/importlib/__pycache__ ${libdir}/python3.5/imp.* ${libdir}/python3.5/__pycache__/imp.* "
-
-SUMMARY_${PN}-io="Python low-level I/O"
-RDEPENDS_${PN}-io="${PN}-core ${PN}-math"
-FILES_${PN}-io="${libdir}/python3.5/lib-dynload/_socket.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_socket.*.so ${libdir}/python3.5/lib-dynload/_io.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_io.*.so ${libdir}/python3.5/lib-dynload/_ssl.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_ssl.*.so ${libdir}/python3.5/lib-dynload/select.*.so ${libdir}/python3.5/lib-dynload/__pycache__/select.*.so ${libdir}/python3.5/lib-dynload/termios.*.so ${libdir}/python3.5/lib-dynload/__pycache__/termios.*.so ${libdir}/python3.5/lib-dynload/cStringIO.*.so ${libdir}/python3.5/lib-dynload/__pycache__/cStringIO.*.so ${libdir}/python3.5/ipaddress.* ${libdir}/python3.5/__pycache__/ipaddress.* ${libdir}/python3.5/pipes.* ${libdir}/python3.5/__pycache__/pipes.* ${libdir}/python3.5/socket.* ${libdir}/python3.5/__pycache__/socket.* ${libdir}/python3.5/ssl.* ${libdir}/python3.5/__pycache__/ssl.* ${libdir}/python3.5/tempfile.* ${libdir}/python3.5/__pycache__/tempfile.* ${libdir}/python3.5/StringIO.* ${libdir}/python3.5/__pycache__/StringIO.* ${libdir}/python3.5/io.* ${libdir}/python3.5/__pycache__/io.* ${libdir}/python3.5/_pyio.* ${libdir}/python3.5/__pycache__/_pyio.* "
-
-SUMMARY_${PN}-json="Python JSON support"
-RDEPENDS_${PN}-json="${PN}-core ${PN}-math ${PN}-re"
-FILES_${PN}-json="${libdir}/python3.5/json ${libdir}/python3.5/json/__pycache__ ${libdir}/python3.5/lib-dynload/_json.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_json.*.so "
-
-SUMMARY_${PN}-lang="Python low-level language support"
-RDEPENDS_${PN}-lang="${PN}-core ${PN}-importlib"
-FILES_${PN}-lang="${libdir}/python3.5/lib-dynload/_bisect.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_bisect.*.so ${libdir}/python3.5/lib-dynload/_collections.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_collections.*.so ${libdir}/python3.5/lib-dynload/_heapq.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_heapq.*.so ${libdir}/python3.5/lib-dynload/_weakref.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_weakref.*.so ${libdir}/python3.5/lib-dynload/_functools.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_functools.*.so ${libdir}/python3.5/lib-dynload/array.*.so ${libdir}/python3.5/lib-dynload/__pycache__/array.*.so ${libdir}/python3.5/lib-dynload/itertools.*.so ${libdir}/python3.5/lib-dynload/__pycache__/itertools.*.so ${libdir}/python3.5/lib-dynload/operator.*.so ${libdir}/python3.5/lib-dynload/__pycache__/operator.*.so ${libdir}/python3.5/lib-dynload/parser.*.so ${libdir}/python3.5/lib-dynload/__pycache__/parser.*.so ${libdir}/python3.5/atexit.* ${libdir}/python3.5/__pycache__/atexit.* ${libdir}/python3.5/bisect.* ${libdir}/python3.5/__pycache__/bisect.* ${libdir}/python3.5/code.* ${libdir}/python3.5/__pycache__/code.* ${libdir}/python3.5/codeop.* ${libdir}/python3.5/__pycache__/codeop.* ${libdir}/python3.5/collections.* ${libdir}/python3.5/__pycache__/collections.* ${libdir}/python3.5/_collections_abc.* ${libdir}/python3.5/__pycache__/_collections_abc.* ${libdir}/python3.5/contextlib.* ${libdir}/python3.5/__pycache__/contextlib.* ${libdir}/python3.5/dis.* ${libdir}/python3.5/__pycache__/dis.* ${libdir}/python3.5/functools.* ${libdir}/python3.5/__pycache__/functools.* ${libdir}/python3.5/heapq.* ${libdir}/python3.5/__pycache__/heapq.* ${libdir}/python3.5/inspect.* ${libdir}/python3.5/__pycache__/inspect.* ${libdir}/python3.5/keyword.* ${libdir}/python3.5/__pycache__/keyword.* ${libdir}/python3.5/opcode.* ${libdir}/python3.5/__pycache__/opcode.* ${libdir}/python3.5/operator.* ${libdir}/python3.5/__pycache__/operator.* ${libdir}/python3.5/symbol.* ${libdir}/python3.5/__pycache__/symbol.* ${libdir}/python3.5/repr.* ${libdir}/python3.5/__pycache__/repr.* ${libdir}/python3.5/token.* ${libdir}/python3.5/__pycache__/token.* ${libdir}/python3.5/tokenize.* ${libdir}/python3.5/__pycache__/tokenize.* ${libdir}/python3.5/traceback.* ${libdir}/python3.5/__pycache__/traceback.* ${libdir}/python3.5/weakref.* ${libdir}/python3.5/__pycache__/weakref.* "
-
-SUMMARY_${PN}-logging="Python logging support"
-RDEPENDS_${PN}-logging="${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-stringold"
-FILES_${PN}-logging="${libdir}/python3.5/logging ${libdir}/python3.5/logging/__pycache__ "
-
-SUMMARY_${PN}-mailbox="Python mailbox format support"
-RDEPENDS_${PN}-mailbox="${PN}-core ${PN}-mime"
-FILES_${PN}-mailbox="${libdir}/python3.5/mailbox.* ${libdir}/python3.5/__pycache__/mailbox.* "
-
-SUMMARY_${PN}-math="Python math support"
-RDEPENDS_${PN}-math="${PN}-core ${PN}-crypt"
-FILES_${PN}-math="${libdir}/python3.5/lib-dynload/cmath.*.so ${libdir}/python3.5/lib-dynload/__pycache__/cmath.*.so ${libdir}/python3.5/lib-dynload/math.*.so ${libdir}/python3.5/lib-dynload/__pycache__/math.*.so ${libdir}/python3.5/lib-dynload/_random.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_random.*.so ${libdir}/python3.5/random.* ${libdir}/python3.5/__pycache__/random.* ${libdir}/python3.5/sets.* ${libdir}/python3.5/__pycache__/sets.* "
-
-SUMMARY_${PN}-mime="Python MIME handling APIs"
-RDEPENDS_${PN}-mime="${PN}-core ${PN}-io"
-FILES_${PN}-mime="${libdir}/python3.5/mimetools.* ${libdir}/python3.5/__pycache__/mimetools.* ${libdir}/python3.5/uu.* ${libdir}/python3.5/__pycache__/uu.* ${libdir}/python3.5/quopri.* ${libdir}/python3.5/__pycache__/quopri.* ${libdir}/python3.5/rfc822.* ${libdir}/python3.5/__pycache__/rfc822.* ${libdir}/python3.5/MimeWriter.* ${libdir}/python3.5/__pycache__/MimeWriter.* "
-
-SUMMARY_${PN}-mmap="Python memory-mapped file support"
-RDEPENDS_${PN}-mmap="${PN}-core ${PN}-io"
-FILES_${PN}-mmap="${libdir}/python3.5/lib-dynload/mmap.*.so ${libdir}/python3.5/lib-dynload/__pycache__/mmap.*.so "
-
-SUMMARY_${PN}-multiprocessing="Python multiprocessing support"
-RDEPENDS_${PN}-multiprocessing="${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-threading ${PN}-ctypes ${PN}-mmap"
-FILES_${PN}-multiprocessing="${libdir}/python3.5/lib-dynload/_multiprocessing.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_multiprocessing.*.so ${libdir}/python3.5/multiprocessing ${libdir}/python3.5/multiprocessing/__pycache__ "
-
-SUMMARY_${PN}-netclient="Python Internet Protocol clients"
-RDEPENDS_${PN}-netclient="${PN}-argparse ${PN}-core ${PN}-crypt ${PN}-datetime ${PN}-io ${PN}-lang ${PN}-logging ${PN}-mime ${PN}-html"
-FILES_${PN}-netclient="${libdir}/python3.5/*Cookie*.* ${libdir}/python3.5/__pycache__/*Cookie*.* ${libdir}/python3.5/base64.* ${libdir}/python3.5/__pycache__/base64.* ${libdir}/python3.5/cookielib.* ${libdir}/python3.5/__pycache__/cookielib.* ${libdir}/python3.5/ftplib.* ${libdir}/python3.5/__pycache__/ftplib.* ${libdir}/python3.5/gopherlib.* ${libdir}/python3.5/__pycache__/gopherlib.* ${libdir}/python3.5/hmac.* ${libdir}/python3.5/__pycache__/hmac.* ${libdir}/python3.5/http* ${libdir}/python3.5/http*/__pycache__ ${libdir}/python3.5/httplib.* ${libdir}/python3.5/__pycache__/httplib.* ${libdir}/python3.5/mimetypes.* ${libdir}/python3.5/__pycache__/mimetypes.* ${libdir}/python3.5/nntplib.* ${libdir}/python3.5/__pycache__/nntplib.* ${libdir}/python3.5/poplib.* ${libdir}/python3.5/__pycache__/poplib.* ${libdir}/python3.5/smtplib.* ${libdir}/python3.5/__pycache__/smtplib.* ${libdir}/python3.5/telnetlib.* ${libdir}/python3.5/__pycache__/telnetlib.* ${libdir}/python3.5/urllib ${libdir}/python3.5/urllib/__pycache__ ${libdir}/python3.5/uuid.* ${libdir}/python3.5/__pycache__/uuid.* ${libdir}/python3.5/rfc822.* ${libdir}/python3.5/__pycache__/rfc822.* ${libdir}/python3.5/mimetools.* ${libdir}/python3.5/__pycache__/mimetools.* "
-
-SUMMARY_${PN}-netserver="Python Internet Protocol servers"
-RDEPENDS_${PN}-netserver="${PN}-core ${PN}-netclient ${PN}-shell ${PN}-threading"
-FILES_${PN}-netserver="${libdir}/python3.5/cgi.* ${libdir}/python3.5/__pycache__/cgi.* ${libdir}/python3.5/socketserver.* ${libdir}/python3.5/__pycache__/socketserver.* ${libdir}/python3.5/*HTTPServer.* ${libdir}/python3.5/__pycache__/*HTTPServer.* ${libdir}/python3.5/SocketServer.* ${libdir}/python3.5/__pycache__/SocketServer.* "
-
-SUMMARY_${PN}-numbers="Python number APIs"
-RDEPENDS_${PN}-numbers="${PN}-core ${PN}-lang ${PN}-re"
-FILES_${PN}-numbers="${libdir}/python3.5/decimal.* ${libdir}/python3.5/__pycache__/decimal.* ${libdir}/python3.5/fractions.* ${libdir}/python3.5/__pycache__/fractions.* ${libdir}/python3.5/numbers.* ${libdir}/python3.5/__pycache__/numbers.* "
-
-SUMMARY_${PN}-pickle="Python serialisation/persistence support"
-RDEPENDS_${PN}-pickle="${PN}-core ${PN}-codecs ${PN}-io ${PN}-re"
-FILES_${PN}-pickle="${libdir}/python3.5/_compat_pickle.* ${libdir}/python3.5/__pycache__/_compat_pickle.* ${libdir}/python3.5/pickle.* ${libdir}/python3.5/__pycache__/pickle.* ${libdir}/python3.5/shelve.* ${libdir}/python3.5/__pycache__/shelve.* ${libdir}/python3.5/lib-dynload/cPickle.*.so ${libdir}/python3.5/lib-dynload/__pycache__/cPickle.*.so ${libdir}/python3.5/pickletools.* ${libdir}/python3.5/__pycache__/pickletools.* "
-
-SUMMARY_${PN}-pkgutil="Python package extension utility support"
-RDEPENDS_${PN}-pkgutil="${PN}-core"
-FILES_${PN}-pkgutil="${libdir}/python3.5/pkgutil.* ${libdir}/python3.5/__pycache__/pkgutil.* "
-
-SUMMARY_${PN}-pprint="Python pretty-print support"
-RDEPENDS_${PN}-pprint="${PN}-core ${PN}-io"
-FILES_${PN}-pprint="${libdir}/python3.5/pprint.* ${libdir}/python3.5/__pycache__/pprint.* "
-
-SUMMARY_${PN}-profile="Python basic performance profiling support"
-RDEPENDS_${PN}-profile="${PN}-core ${PN}-textutils"
-FILES_${PN}-profile="${libdir}/python3.5/profile.* ${libdir}/python3.5/__pycache__/profile.* ${libdir}/python3.5/pstats.* ${libdir}/python3.5/__pycache__/pstats.* ${libdir}/python3.5/cProfile.* ${libdir}/python3.5/__pycache__/cProfile.* ${libdir}/python3.5/lib-dynload/_lsprof.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_lsprof.*.so "
-
-SUMMARY_${PN}-pydoc="Python interactive help support"
-RDEPENDS_${PN}-pydoc="${PN}-core ${PN}-lang ${PN}-stringold ${PN}-re"
-FILES_${PN}-pydoc="${bindir}/pydoc ${libdir}/python3.5/pydoc.* ${libdir}/python3.5/__pycache__/pydoc.* ${libdir}/python3.5/pydoc_data ${libdir}/python3.5/pydoc_data/__pycache__ "
-
-SUMMARY_${PN}-re="Python Regular Expression APIs"
-RDEPENDS_${PN}-re="${PN}-core"
-FILES_${PN}-re="${libdir}/python3.5/re.* ${libdir}/python3.5/__pycache__/re.* ${libdir}/python3.5/sre.* ${libdir}/python3.5/__pycache__/sre.* ${libdir}/python3.5/sre_compile.* ${libdir}/python3.5/__pycache__/sre_compile.* ${libdir}/python3.5/sre_constants* ${libdir}/python3.5/sre_constants*/__pycache__ ${libdir}/python3.5/sre_parse.* ${libdir}/python3.5/__pycache__/sre_parse.* "
-
-SUMMARY_${PN}-readline="Python readline support"
-RDEPENDS_${PN}-readline="${PN}-core"
-FILES_${PN}-readline="${libdir}/python3.5/lib-dynload/readline.*.so ${libdir}/python3.5/lib-dynload/__pycache__/readline.*.so ${libdir}/python3.5/rlcompleter.* ${libdir}/python3.5/__pycache__/rlcompleter.* "
-
-SUMMARY_${PN}-reprlib="Python alternate repr() implementation"
-RDEPENDS_${PN}-reprlib="${PN}-core"
-FILES_${PN}-reprlib="${libdir}/python3.5/reprlib.py ${libdir}/python3.5/__pycache__/reprlib.py "
-
-SUMMARY_${PN}-resource="Python resource control interface"
-RDEPENDS_${PN}-resource="${PN}-core"
-FILES_${PN}-resource="${libdir}/python3.5/lib-dynload/resource.*.so ${libdir}/python3.5/lib-dynload/__pycache__/resource.*.so "
-
-SUMMARY_${PN}-selectors="Python High-level I/O multiplexing"
-RDEPENDS_${PN}-selectors="${PN}-core"
-FILES_${PN}-selectors="${libdir}/python3.5/selectors.* ${libdir}/python3.5/__pycache__/selectors.* "
-
-SUMMARY_${PN}-shell="Python shell-like functionality"
-RDEPENDS_${PN}-shell="${PN}-core ${PN}-re ${PN}-compression"
-FILES_${PN}-shell="${libdir}/python3.5/cmd.* ${libdir}/python3.5/__pycache__/cmd.* ${libdir}/python3.5/commands.* ${libdir}/python3.5/__pycache__/commands.* ${libdir}/python3.5/dircache.* ${libdir}/python3.5/__pycache__/dircache.* ${libdir}/python3.5/fnmatch.* ${libdir}/python3.5/__pycache__/fnmatch.* ${libdir}/python3.5/glob.* ${libdir}/python3.5/__pycache__/glob.* ${libdir}/python3.5/popen2.* ${libdir}/python3.5/__pycache__/popen2.* ${libdir}/python3.5/shlex.* ${libdir}/python3.5/__pycache__/shlex.* ${libdir}/python3.5/shutil.* ${libdir}/python3.5/__pycache__/shutil.* "
-
-SUMMARY_${PN}-signal="Python set handlers for asynchronous events support"
-RDEPENDS_${PN}-signal="${PN}-core ${PN}-enum"
-FILES_${PN}-signal="${libdir}/python3.5/signal.* ${libdir}/python3.5/__pycache__/signal.* "
-
-SUMMARY_${PN}-smtpd="Python Simple Mail Transport Daemon"
-RDEPENDS_${PN}-smtpd="${PN}-core ${PN}-netserver ${PN}-email ${PN}-mime"
-FILES_${PN}-smtpd="${bindir}/smtpd.* ${libdir}/python3.5/smtpd.* ${libdir}/python3.5/__pycache__/smtpd.* "
-
-SUMMARY_${PN}-sqlite3="Python Sqlite3 database support"
-RDEPENDS_${PN}-sqlite3="${PN}-core ${PN}-datetime ${PN}-lang ${PN}-crypt ${PN}-io ${PN}-threading"
-FILES_${PN}-sqlite3="${libdir}/python3.5/lib-dynload/_sqlite3.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_sqlite3.*.so ${libdir}/python3.5/sqlite3/dbapi2.* ${libdir}/python3.5/sqlite3/__pycache__/dbapi2.* ${libdir}/python3.5/sqlite3/__init__.* ${libdir}/python3.5/sqlite3/__pycache__/__init__.* ${libdir}/python3.5/sqlite3/dump.* ${libdir}/python3.5/sqlite3/__pycache__/dump.* "
-
-SUMMARY_${PN}-sqlite3-tests="Python Sqlite3 database support tests"
-RDEPENDS_${PN}-sqlite3-tests="${PN}-core ${PN}-sqlite3"
-FILES_${PN}-sqlite3-tests="${libdir}/python3.5/sqlite3/test ${libdir}/python3.5/sqlite3/test/__pycache__ "
-
-SUMMARY_${PN}-stringold="Python string APIs [deprecated]"
-RDEPENDS_${PN}-stringold="${PN}-core ${PN}-re"
-FILES_${PN}-stringold="${libdir}/python3.5/lib-dynload/strop.*.so ${libdir}/python3.5/lib-dynload/__pycache__/strop.*.so ${libdir}/python3.5/string.* ${libdir}/python3.5/__pycache__/string.* ${libdir}/python3.5/stringold.* ${libdir}/python3.5/__pycache__/stringold.* "
-
-SUMMARY_${PN}-subprocess="Python subprocess support"
-RDEPENDS_${PN}-subprocess="${PN}-core ${PN}-io ${PN}-re ${PN}-fcntl ${PN}-pickle ${PN}-threading ${PN}-signal ${PN}-selectors"
-FILES_${PN}-subprocess="${libdir}/python3.5/subprocess.* ${libdir}/python3.5/__pycache__/subprocess.* ${libdir}/python3.5/lib-dynload/_posixsubprocess.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_posixsubprocess.*.so "
-
-SUMMARY_${PN}-syslog="Python syslog interface"
-RDEPENDS_${PN}-syslog="${PN}-core"
-FILES_${PN}-syslog="${libdir}/python3.5/lib-dynload/syslog.*.so ${libdir}/python3.5/lib-dynload/__pycache__/syslog.*.so "
-
-SUMMARY_${PN}-terminal="Python terminal controlling support"
-RDEPENDS_${PN}-terminal="${PN}-core ${PN}-io"
-FILES_${PN}-terminal="${libdir}/python3.5/pty.* ${libdir}/python3.5/__pycache__/pty.* ${libdir}/python3.5/tty.* ${libdir}/python3.5/__pycache__/tty.* "
-
-SUMMARY_${PN}-tests="Python tests"
-RDEPENDS_${PN}-tests="${PN}-core ${PN}-compression"
-FILES_${PN}-tests="${libdir}/python3.5/test ${libdir}/python3.5/test/__pycache__ "
-
-SUMMARY_${PN}-textutils="Python option parsing, text wrapping and CSV support"
-RDEPENDS_${PN}-textutils="${PN}-core ${PN}-io ${PN}-re ${PN}-stringold"
-FILES_${PN}-textutils="${libdir}/python3.5/lib-dynload/_csv.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_csv.*.so ${libdir}/python3.5/csv.* ${libdir}/python3.5/__pycache__/csv.* ${libdir}/python3.5/optparse.* ${libdir}/python3.5/__pycache__/optparse.* ${libdir}/python3.5/textwrap.* ${libdir}/python3.5/__pycache__/textwrap.* "
-
-SUMMARY_${PN}-threading="Python threading & synchronization support"
-RDEPENDS_${PN}-threading="${PN}-core ${PN}-lang"
-FILES_${PN}-threading="${libdir}/python3.5/_threading_local.* ${libdir}/python3.5/__pycache__/_threading_local.* ${libdir}/python3.5/dummy_thread.* ${libdir}/python3.5/__pycache__/dummy_thread.* ${libdir}/python3.5/dummy_threading.* ${libdir}/python3.5/__pycache__/dummy_threading.* ${libdir}/python3.5/mutex.* ${libdir}/python3.5/__pycache__/mutex.* ${libdir}/python3.5/threading.* ${libdir}/python3.5/__pycache__/threading.* ${libdir}/python3.5/queue.* ${libdir}/python3.5/__pycache__/queue.* "
-
-SUMMARY_${PN}-tkinter="Python Tcl/Tk bindings"
-RDEPENDS_${PN}-tkinter="${PN}-core"
-FILES_${PN}-tkinter="${libdir}/python3.5/lib-dynload/_tkinter.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_tkinter.*.so ${libdir}/python3.5/lib-tk ${libdir}/python3.5/lib-tk/__pycache__ ${libdir}/python3.5/tkinter ${libdir}/python3.5/tkinter/__pycache__ "
-
-SUMMARY_${PN}-typing="Python typing support"
-RDEPENDS_${PN}-typing="${PN}-core"
-FILES_${PN}-typing="${libdir}/python3.5/typing.* ${libdir}/python3.5/__pycache__/typing.* "
-
-SUMMARY_${PN}-unittest="Python unit testing framework"
-RDEPENDS_${PN}-unittest="${PN}-core ${PN}-stringold ${PN}-lang ${PN}-io ${PN}-difflib ${PN}-pprint ${PN}-shell"
-FILES_${PN}-unittest="${libdir}/python3.5/unittest/ ${libdir}/python3.5/unittest/__pycache__ "
-
-SUMMARY_${PN}-unixadmin="Python Unix administration support"
-RDEPENDS_${PN}-unixadmin="${PN}-core"
-FILES_${PN}-unixadmin="${libdir}/python3.5/lib-dynload/nis.*.so ${libdir}/python3.5/lib-dynload/__pycache__/nis.*.so ${libdir}/python3.5/lib-dynload/grp.*.so ${libdir}/python3.5/lib-dynload/__pycache__/grp.*.so ${libdir}/python3.5/lib-dynload/pwd.*.so ${libdir}/python3.5/lib-dynload/__pycache__/pwd.*.so ${libdir}/python3.5/getpass.* ${libdir}/python3.5/__pycache__/getpass.* "
-
-SUMMARY_${PN}-xml="Python basic XML support"
-RDEPENDS_${PN}-xml="${PN}-core ${PN}-re"
-FILES_${PN}-xml="${libdir}/python3.5/lib-dynload/_elementtree.*.so ${libdir}/python3.5/lib-dynload/__pycache__/_elementtree.*.so ${libdir}/python3.5/lib-dynload/pyexpat.*.so ${libdir}/python3.5/lib-dynload/__pycache__/pyexpat.*.so ${libdir}/python3.5/xml ${libdir}/python3.5/xml/__pycache__ ${libdir}/python3.5/xmllib.* ${libdir}/python3.5/__pycache__/xmllib.* "
-
-SUMMARY_${PN}-xmlrpc="Python XML-RPC support"
-RDEPENDS_${PN}-xmlrpc="${PN}-core ${PN}-xml ${PN}-netserver ${PN}-lang ${PN}-pydoc"
-FILES_${PN}-xmlrpc="${libdir}/python3.5/xmlrpclib.* ${libdir}/python3.5/__pycache__/xmlrpclib.* ${libdir}/python3.5/SimpleXMLRPCServer.* ${libdir}/python3.5/__pycache__/SimpleXMLRPCServer.* ${libdir}/python3.5/DocXMLRPCServer.* ${libdir}/python3.5/__pycache__/DocXMLRPCServer.* ${libdir}/python3.5/xmlrpc ${libdir}/python3.5/xmlrpc/__pycache__ "
-
-SUMMARY_${PN}-modules="All Python modules"
-RDEPENDS_${PN}-modules="${PN}-2to3 ${PN}-argparse ${PN}-asyncio ${PN}-audio ${PN}-codecs ${PN}-compile ${PN}-compression ${PN}-core ${PN}-crypt ${PN}-ctypes ${PN}-curses ${PN}-datetime ${PN}-db ${PN}-debugger ${PN}-difflib ${PN}-distutils ${PN}-doctest ${PN}-email ${PN}-enum ${PN}-fcntl ${PN}-gdbm ${PN}-html ${PN}-idle ${PN}-image ${PN}-importlib ${PN}-io ${PN}-json ${PN}-lang ${PN}-logging ${PN}-mailbox ${PN}-math ${PN}-mime ${PN}-mmap ${PN}-multiprocessing ${PN}-netclient ${PN}-netserver ${PN}-numbers ${PN}-pickle ${PN}-pkgutil ${PN}-pprint ${PN}-profile ${PN}-pydoc ${PN}-re ${PN}-readline ${PN}-reprlib ${PN}-resource ${PN}-selectors ${PN}-shell ${PN}-signal ${PN}-smtpd ${PN}-sqlite3 ${PN}-sqlite3-tests ${PN}-stringold ${PN}-subprocess ${PN}-syslog ${PN}-terminal ${PN}-textutils ${PN}-threading ${PN}-tkinter ${PN}-typing ${PN}-unittest ${PN}-unixadmin ${PN}-xml ${PN}-xmlrpc  "
-ALLOW_EMPTY_${PN}-modules = "1"
-
-
diff --git a/meta/recipes-devtools/python/python-native-3.5-manifest.inc b/meta/recipes-devtools/python/python-native-3.5-manifest.inc
deleted file mode 100644
index f1f732eb846..00000000000
--- a/meta/recipes-devtools/python/python-native-3.5-manifest.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-
-# WARNING: This file is AUTO GENERATED: Manual edits will be lost next time I regenerate the file.
-# Generator: '../scripts/contrib/python/generate-manifest-3.5.py --native' Version 20140131 (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
-
- 
-
-RPROVIDES += "python3-modules-native python3-2to3-native python3-argparse-native python3-asyncio-native python3-audio-native python3-codecs-native python3-compile-native python3-compression-native python3-core-native python3-crypt-native python3-ctypes-native python3-curses-native python3-datetime-native python3-db-native python3-debugger-native python3-dev-native python3-difflib-native python3-distutils-native python3-distutils-staticdev-native python3-doctest-native python3-email-native python3-enum-native python3-fcntl-native python3-gdbm-native python3-html-native python3-idle-native python3-image-native python3-importlib-native python3-io-native python3-json-native python3-lang-native python3-logging-native python3-mailbox-native python3-math-native python3-mime-native python3-mmap-native python3-multiprocessing-native python3-netclient-native python3-netserver-native python3-numbers-native python3-pickle-native python3-pkgutil-native python3-pprint-native python3-profile-native python3-pydoc-native python3-re-native python3-readline-native python3-reprlib-native python3-resource-native python3-selectors-native python3-shell-native python3-signal-native python3-smtpd-native python3-sqlite3-native python3-sqlite3-tests-native python3-stringold-native python3-subprocess-native python3-syslog-native python3-terminal-native python3-tests-native python3-textutils-native python3-threading-native python3-tkinter-native python3-typing-native python3-unittest-native python3-unixadmin-native python3-xml-native python3-xmlrpc-native"
-
-
-
diff --git a/meta/recipes-devtools/python/python3-native_3.5.3.bb b/meta/recipes-devtools/python/python3-native_3.5.3.bb
index 8cd9c88a821..3053c4bace6 100644
--- a/meta/recipes-devtools/python/python3-native_3.5.3.bb
+++ b/meta/recipes-devtools/python/python3-native_3.5.3.bb
@@ -42,8 +42,6 @@ DEPENDS = "openssl-native bzip2-replacement-native zlib-native readline-native s
 
 inherit native
 
-require python-native-${PYTHON_MAJMIN}-manifest.inc
-
 # uninative may be used on pre glibc 2.25 systems which don't have getentropy
 EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --without-ensurepip ac_cv_func_getentropy=no"
 
@@ -77,8 +75,30 @@ do_install() {
 		sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
 	done
 
-	# Tests are large and we don't need them in the native sysroot
-	rm ${D}${libdir}/python${PYTHON_MAJMIN}/test -rf
+        # Add a symlink to the native Python so that scripts can just invoke
+        # "nativepython" and get the right one without needing absolute paths
+        # (these often end up too long for the #! parser in the kernel as the
+        # buffer is 128 bytes long).
+        ln -s python3-native/python3 ${D}${bindir}/nativepython3
 }
 
-RPROVIDES += "python3-misc-native"
+python(){
+
+    # Read JSON manifest
+    import json
+    pythondir = d.getVar('THISDIR',True)
+    with open(pythondir+'/python3/python3-manifest.json') as manifest_file:
+        python_manifest=json.load(manifest_file)
+
+    rprovides = d.getVar('RPROVIDES').split()
+
+    # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
+    pn = 'python3'
+
+    for key in python_manifest:
+        pypackage = pn + '-' + key + '-native'
+        if pypackage not in rprovides:
+              rprovides.append(pypackage)
+
+    d.setVar('RPROVIDES', ' '.join(rprovides))
+}
diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py
new file mode 100644
index 00000000000..ead27e9fcc2
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/create_manifest3.py
@@ -0,0 +1,321 @@
+# This script is used as a bitbake task to create a new python manifest
+# $ bitbake python -c create_manifest
+#
+# Our goal is to keep python-core as small as posible and add other python
+# packages only when the user needs them, hence why we split upstream python
+# into several packages.
+#
+# In a very simplistic way what this does is: 
+# Launch python and see specifically what is required for it to run at a minimum
+#
+# Go through the python-manifest file and launch a separate task for every single
+# one of the files on each package, this task will check what was required for that
+# specific module to run, these modules will be called dependencies.
+# The output of such task will be a list of the modules or dependencies that were
+# found for that file.
+#
+# Such output will be parsed by this script, we will look for each dependency on the
+# manifest and if we find that another package already includes it, then we will add
+# that package as an RDEPENDS to the package we are currently checking; in case we dont
+# find the current dependency on any other package we will add it to the current package
+# as part of FILES.
+#
+#
+# This way we will create a new manifest from the data structure that was built during
+# this process, ont this new manifest each package will contain specifically only
+# what it needs to run.
+#
+# There are some caveats which we try to deal with, such as repeated files on different
+# packages, packages that include folders, wildcards, and special packages.
+# Its also important to note that this method only works for python files, and shared
+# libraries. Static libraries, header files and binaries need to be dealt with manually.
+#
+# This script differs from its python2 version mostly on how shared libraries are handled
+# The manifest file for python3 has an extra field which contains the cached files for
+# each package.
+# Tha method to handle cached files does not work when a module includes a folder which
+# itself contains the pycache folder, gladly this is almost never the case.
+#
+# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com>
+
+
+import sys
+import subprocess
+import json
+import os
+
+# Hack to get native python search path (for folders), not fond of it but it works for now
+pivot='recipe-sysroot-native'
+for p in sys.path:
+  if pivot in p:
+    nativelibfolder=p[:p.find(pivot)+len(pivot)]
+
+# Empty dict to hold the whole manifest
+new_manifest = {}
+
+# Check for repeated files, folders and wildcards
+allfiles=[]
+repeated=[]
+wildcards=[]
+
+hasfolders=[]
+allfolders=[]
+
+def isFolder(value):
+  if os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib')) or os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib64')) or os.path.isdir(value.replace('${libdir}',nativelibfolder+'/usr/lib32')):
+    return True
+  else:
+    return False
+
+def isCached(item):
+  if '__pycache__' in item:
+    return True
+  else:
+    return False
+
+# Read existing JSON manifest
+with open('python3-manifest.json') as manifest:
+  old_manifest=json.load(manifest)
+
+
+# First pass to get core-package functionality, because we base everything on the fact that core is actually working
+# Not exactly the same so it should not be a function
+print ('Getting dependencies for core package:')
+
+# Special call to check for core package
+output = subprocess.check_output([sys.executable, 'get_module_deps3.py', 'python-core-package']).decode('utf8')
+for item in output.split():
+    # We append it so it doesnt hurt what we currently have:
+    if isCached(item):
+        if item not in old_manifest['core']['cached']:
+            # We use the same data structure since its the one which will be used to check
+            # dependencies for other packages
+            old_manifest['core']['cached'].append(item)
+    else:
+        if item not in old_manifest['core']['files']:
+            # We use the same data structure since its the one which will be used to check
+            # dependencies for other packages
+            old_manifest['core']['files'].append(item)
+
+for value in old_manifest['core']['files']:
+  # Ignore folders, since we don't import those, difficult to handle multilib
+  if isFolder(value):
+    # Pass it directly
+    if isCached(value):
+        if value not in old_manifest['core']['cached']:
+            old_manifest['core']['cached'].append(value)
+    else:
+        if value not in old_manifest['core']['files']:
+            old_manifest['core']['files'].append(value)
+    continue
+  # Ignore binaries, since we don't import those, assume it was added correctly (manually)
+  if '${bindir}' in value:
+    # Pass it directly
+    if value not in old_manifest['core']['files']:
+      old_manifest['core']['files'].append(value)
+    continue
+  # Ignore empty values
+  if value == '':
+    continue
+  if '${includedir}' in value:
+    if value not in old_manifest['core']['files']:
+      old_manifest['core']['files'].append(value)
+    continue
+  # Get module name , shouldnt be affected by libdir/bindir
+  value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
+
+
+  # Launch separate task for each module for deterministic behavior
+  # Each module will only import what is necessary for it to work in specific
+  print ('Getting dependencies for module: %s' % value)
+  output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % value]).decode('utf8')
+  print (output)
+  for item in output.split():
+    # We append it so it doesnt hurt what we currently have:
+    if isCached(item):
+        if item not in old_manifest['core']['cached']:
+            # We use the same data structure since its the one which will be used to check
+            # dependencies for other packages
+            old_manifest['core']['cached'].append(item)
+    else:
+        if item not in old_manifest['core']['files']:
+            # We use the same data structure since its the one which will be used to check
+            # dependencies for other packages
+            old_manifest['core']['files'].append(item)
+
+
+# We check which packages include folders
+for key in old_manifest:
+    for value in old_manifest[key]['files']:
+        # Ignore folders, since we don't import those, difficult to handle multilib
+        if isFolder(value):
+            print ('%s is a folder' % value)
+            if key not in hasfolders:
+                hasfolders.append(key)
+            if value not in allfolders:
+                allfolders.append(value)
+
+for key in old_manifest:
+    # Use an empty dict as data structure to hold data for each package and fill it up
+    new_manifest[key]={}
+    new_manifest[key]['files']=[]
+    
+    new_manifest[key]['rdepends']=[]
+    # All packages should depend on core
+    if key != 'core':
+         new_manifest[key]['rdepends'].append('core')
+         new_manifest[key]['cached']=[]
+    else:
+         new_manifest[key]['cached']=old_manifest[key]['cached']
+    new_manifest[key]['summary']=old_manifest[key]['summary']
+
+    # Handle special cases, we assume that when they were manually added 
+    # to the manifest we knew what we were doing.
+    print ('Handling package %s' % key)
+    special_packages=['misc', 'modules', 'dev']
+    if key in special_packages or 'staticdev' in key:
+        print('Passing %s package directly' % key)
+        new_manifest[key]=old_manifest[key]
+        continue
+
+    for value in old_manifest[key]['files']:
+        # We already handled core on the first pass
+        if key == 'core':
+            new_manifest[key]['files'].append(value)
+            continue
+        # Ignore folders, since we don't import those, difficult to handle multilib
+        if isFolder(value):
+            # Pass folders directly
+            new_manifest[key]['files'].append(value)
+        # Ignore binaries, since we don't import those
+        if '${bindir}' in value:
+            # Pass it directly to the new manifest data structure
+            if value not in new_manifest[key]['files']:
+                new_manifest[key]['files'].append(value)
+            continue
+        # Ignore empty values
+        if value == '':
+            continue
+        if '${includedir}' in value:
+            if value not in new_manifest[key]['files']:
+                new_manifest[key]['files'].append(value)
+            continue
+        # Get module name , shouldnt be affected by libdir/bindir
+        value = os.path.splitext(os.path.basename(os.path.normpath(value)))[0]
+
+        # Launch separate task for each module for deterministic behavior
+        # Each module will only import what is necessary for it to work in specific
+        print ('Getting dependencies for module: %s' % value)
+        output = subprocess.check_output([sys.executable, 'get_module_deps3.py', '%s' % value]).decode('utf8')
+        # We can print dependencies for debugging purposes
+        print (output)
+        # Output will have all dependencies
+        for item in output.split():
+
+            # Warning: This first part is ugly
+            # One of the dependencies that was found, could be inside of one of the folders included by another package
+            # We need to check if this happens so we can add the package containing the folder as an rdependency
+            # e.g. Folder encodings contained in codecs
+            # This would be solved if no packages included any folders
+
+            # This can be done in two ways:
+            # 1 - We assume that if we take out the filename from the path we would get
+            #   the folder string, then we would check if folder string is in the list of folders
+            #   This would not work if a package contains a folder which contains another folder
+            #   e.g. path/folder1/folder2/filename  folder_string= path/folder1/folder2
+            #   folder_string would not match any value contained in the list of folders
+            #
+            # 2 - We do it the other way around, checking if the folder is contained in the path
+            #   e.g. path/folder1/folder2/filename  folder_string= path/folder1/folder2
+            #   is folder_string inside path/folder1/folder2/filename?, 
+            #   Yes, it works, but we waste a couple of milliseconds.
+
+            inFolders=False
+            for folder in allfolders:
+                if folder in item:
+                    inFolders = True # Did we find a folder?
+                    folderFound = False # Second flag to break inner for
+                    # Loop only through packages which contain folders
+                    for keyfolder in hasfolders:
+                        if (folderFound == False):
+                            #print('Checking folder %s on package %s' % (item,keyfolder))
+                            for file_folder in old_manifest[keyfolder]['files'] or file_folder in old_manifest[keyfolder]['cached']:
+                                if file_folder==folder:
+                                    print ('%s found in %s' % (folder, keyfolder))
+                                    folderFound = True
+                                    if keyfolder not in new_manifest[key]['rdepends'] and keyfolder != key:
+                                        new_manifest[key]['rdepends'].append(keyfolder)
+                                    
+                        else:
+                            break
+
+            # A folder was found so we're done with this item, we can go on
+            if inFolders:
+                continue
+
+            # We might already have it on the dictionary since it could depend on a (previously checked) module
+            if item not in new_manifest[key]['files'] and item not in new_manifest[key]['cached']:
+                # Handle core as a special package, we already did it so we pass it to NEW data structure directly
+                if key=='core':
+                  print('Adding %s to %s FILES' % (item, key))
+                  if item.endswith('*'):
+                      wildcards.append(item)
+                  if isCached(item):
+                      new_manifest[key]['cached'].append(item)
+                  else:
+                      new_manifest[key]['files'].append(item)
+
+                  # Check for repeated files
+                  if item not in allfiles:
+                      allfiles.append(item)
+                  else:
+                      repeated.append(item)
+
+                else:
+
+                    # Check if this dependency is already contained on another package, so we add it
+                    # as an RDEPENDS, or if its not, it means it should be contained on the current
+                    # package, so we should add it to FILES
+                    for newkey in old_manifest:
+                        # Debug
+                        #print('Checking %s ' % item + ' in %s' % newkey)
+                        if item in old_manifest[newkey]['files'] or item in old_manifest[newkey]['cached']:      
+                                # Since were nesting, we need to check its not the same key
+                                if(newkey!=key):
+                                    if newkey not in new_manifest[key]['rdepends']:
+                                       # Add it to the new manifest data struct
+                                       # Debug
+                                       print('Adding %s to %s RDEPENDS, because it contains %s' % (newkey, key, item))
+                                       new_manifest[key]['rdepends'].append(newkey)
+                                    break
+                    else:
+                      # Debug
+                      print('Adding %s to %s FILES' % (item, key))
+                      # Since it wasnt found on another package, its not an RDEP, so add it to FILES for this package
+                      if isCached(item):
+                          new_manifest[key]['cached'].append(item)
+                      else:
+                          new_manifest[key]['files'].append(item)
+                      if item.endswith('*'):
+                          wildcards.append(item)
+                      if item not in allfiles:
+                          allfiles.append(item)
+                      else:
+                          repeated.append(item)
+
+print ('The following files are repeated (contained in more than one package), please check which package should get it:')
+print (repeated)
+print('The following files contain wildcards, please check they are necessary')
+print(wildcards)
+print('The following files contain folders, please check they are necessary')
+print(hasfolders)
+
+# Sort it just so it looks nicer
+for key in new_manifest:
+    new_manifest[key]['files'].sort()
+    new_manifest[key]['cached'].sort()
+    new_manifest[key]['rdepends'].sort()
+
+# Create the manifest from the data structure that was built
+with open('python3-manifest.json.new','w') as outfile:
+    json.dump(new_manifest,outfile,sort_keys=True, indent=4)
diff --git a/meta/recipes-devtools/python/python3/get_module_deps3.py b/meta/recipes-devtools/python/python3/get_module_deps3.py
new file mode 100644
index 00000000000..fd12baad84e
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/get_module_deps3.py
@@ -0,0 +1,146 @@
+# This script is launched on separate task for each python module
+# It checks for dependencies for that specific module and prints 
+# them out, the output of this execution will have all dependencies
+# for a specific module, which will be parsed an dealt on create_manifest.py
+#
+# Author: Alejandro Enedino Hernandez Samaniego "aehs29" <aehs29@gmail.com>
+
+# We can get a log per module, for all the dependencies that were found, but its messy.
+debug=False
+
+import sys
+
+# We can get a list of the modules which are currently required to run python
+# so we run python-core and get its modules, we then import what we need
+# and check what modules are currently running, if we substract them from the
+# modules we had initially, we get the dependencies for the module we imported.
+
+# We use importlib to achieve this, so we also need to know what modules importlib needs
+import importlib
+
+core_deps=set(sys.modules)
+
+def fix_path(dep_path):
+    import os
+    # We DONT want the path on our HOST system
+    pivot='recipe-sysroot-native'
+    dep_path=dep_path[dep_path.find(pivot)+len(pivot):]
+
+    if '/usr/bin' in dep_path:
+        dep_path = dep_path.replace('/usr/bin''${bindir}')
+
+    # Handle multilib, is there a better way?
+    if '/usr/lib32' in dep_path:
+        dep_path = dep_path.replace('/usr/lib32','${libdir}')
+    if '/usr/lib64' in dep_path:
+        dep_path = dep_path.replace('/usr/lib64','${libdir}')
+    if '/usr/lib' in dep_path:
+        dep_path = dep_path.replace('/usr/lib','${libdir}')
+    if '/usr/include' in dep_path:
+        dep_path = dep_path.replace('/usr/include','${includedir}')
+    if '__init__.' in dep_path:
+        dep_path =  os.path.split(dep_path)[0]
+    return dep_path
+
+
+# Module to import was passed as an argument
+current_module =  str(sys.argv[1]).rstrip()
+if(debug==True):
+    log = open('log_%s' % current_module,'w')
+    log.write('Module %s generated the following dependencies:\n' % current_module)
+try: 
+    importlib.import_module('%s' % current_module)
+except ImportError as e:
+    if (debug==True):
+        log.write('Module was not found')
+    pass
+
+
+# Get current module dependencies, dif will contain a list of specific deps for this module
+module_deps=set(sys.modules)
+
+# We handle the core package (1st pass on create_manifest.py) as a special case
+if current_module == 'python-core-package':
+    dif = core_deps
+else:
+    # We know this is not the core package, so there must be a difference.
+    dif = module_deps-core_deps
+
+
+# Check where each dependency came from
+for item in dif:
+    dep_path=''
+    try:
+        if (debug==True):
+            log.write('Calling: sys.modules[' + '%s' % item + '].__file__\n')
+        dep_path = sys.modules['%s' % item].__file__
+    except AttributeError as e:
+        # Deals with thread (builtin module) not having __file__ attribute
+        if debug==True:
+            log.write(item + ' ')
+            log.write(str(e))
+            log.write('\n')
+        pass
+    except NameError as e:
+        # Deals with NameError: name 'dep_path' is not defined
+        # because module is not found (wasn't compiled?), e.g. bddsm
+        if (debug==True):
+            log.write(item+' ') 
+            log.write(str(e))                                              
+        pass
+
+    # Site-customize is a special case since we (OpenEmbedded) put it there manually
+    if 'sitecustomize' in dep_path:
+        dep_path = '${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py'
+        # Prints out result, which is what will be used by create_manifest
+        print (dep_path)
+        continue
+
+    dep_path = fix_path(dep_path)
+
+    import sysconfig
+    soabi=sysconfig.get_config_var('SOABI')
+    # Check if its a shared library and deconstruct it
+    if soabi in dep_path:
+        if (debug==True):
+            log.write('Shared library found in %s' % dep_path)
+        dep_path = dep_path.replace(soabi,'*')
+        print (dep_path)
+        continue
+
+    if (debug==True):
+        log.write(dep_path+'\n')
+    # Prints out result, which is what will be used by create_manifest
+    print (dep_path)
+
+
+    import imp
+    cpython_tag = imp.get_tag() 
+    cached=''
+    # Theres no naive way to find *.pyc files on python3
+    try:
+        if (debug==True):
+            log.write('Calling: sys.modules[' + '%s' % item + '].__cached__\n')
+        cached = sys.modules['%s' % item].__cached__
+    except AttributeError as e:
+        # Deals with thread (builtin module) not having __cached__ attribute
+        if debug==True:
+            log.write(item + ' ')
+            log.write(str(e))
+            log.write('\n')
+        pass
+    except NameError as e:
+        # Deals with NameError: name 'cached' is not defined
+        if (debug==True):
+            log.write(item+' ') 
+            log.write(str(e))                                              
+        pass
+    if cached is not None:
+        if (debug==True):
+            log.write(cached)
+        cached = fix_path(cached)
+        cached = cached.replace(cpython_tag,'*')
+        print (cached)
+
+if debug==True:
+    log.close()
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
new file mode 100644
index 00000000000..1843e185eed
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -0,0 +1,1097 @@
+{
+    "2to3": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib2to3"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python automated Python 2 to 3 code translator"
+    },
+    "asyncio": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/asyncio",
+            "${libdir}/python3.5/concurrent",
+            "${libdir}/python3.5/concurrent/futures"
+        ],
+        "rdepends": [
+            "compression",
+            "core",
+            "crypt",
+            "io",
+            "logging",
+            "math",
+            "multiprocessing",
+            "netclient",
+            "pickle",
+            "shell",
+            "stringold",
+            "threading",
+            "unixadmin"
+        ],
+        "summary": "Python Asynchronous I/"
+    },
+    "audio": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/chunk.*.pyc",
+            "${libdir}/python3.5/__pycache__/sndhdr.*.pyc",
+            "${libdir}/python3.5/__pycache__/sunau.*.pyc",
+            "${libdir}/python3.5/__pycache__/wave.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/chunk.py",
+            "${libdir}/python3.5/lib-dynload/audioop.*.so",
+            "${libdir}/python3.5/lib-dynload/ossaudiodev.*.so",
+            "${libdir}/python3.5/sndhdr.py",
+            "${libdir}/python3.5/sunau.py",
+            "${libdir}/python3.5/wave.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python Audio Handling"
+    },
+    "codecs": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/stringprep.*.pyc",
+            "${libdir}/python3.5/__pycache__/xdrlib.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/_multibytecodec.*.so",
+            "${libdir}/python3.5/lib-dynload/unicodedata.*.so",
+            "${libdir}/python3.5/stringprep.py",
+            "${libdir}/python3.5/xdrlib.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python codec"
+    },
+    "compile": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/compileall.*.pyc",
+            "${libdir}/python3.5/__pycache__/py_compile.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/compileall.py",
+            "${libdir}/python3.5/py_compile.py"
+        ],
+        "rdepends": [
+            "asyncio",
+            "compression",
+            "core",
+            "crypt",
+            "io",
+            "logging",
+            "math",
+            "multiprocessing",
+            "pickle",
+            "shell",
+            "stringold",
+            "threading",
+            "unixadmin"
+        ],
+        "summary": "Python bytecode compilation support"
+    },
+    "compression": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/_compression.*.pyc",
+            "${libdir}/python3.5/__pycache__/bz2.*.pyc",
+            "${libdir}/python3.5/__pycache__/gzip.*.pyc",
+            "${libdir}/python3.5/__pycache__/lzma.*.pyc",
+            "${libdir}/python3.5/__pycache__/tarfile.*.pyc",
+            "${libdir}/python3.5/__pycache__/zipfile.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/_compression.py",
+            "${libdir}/python3.5/bz2.py",
+            "${libdir}/python3.5/gzip.py",
+            "${libdir}/python3.5/lib-dynload/_bz2.*.so",
+            "${libdir}/python3.5/lib-dynload/_lzma.*.so",
+            "${libdir}/python3.5/lib-dynload/zlib.*.so",
+            "${libdir}/python3.5/lzma.py",
+            "${libdir}/python3.5/tarfile.py",
+            "${libdir}/python3.5/zipfile.py"
+        ],
+        "rdepends": [
+            "core",
+            "shell",
+            "unixadmin"
+        ],
+        "summary": "Python high-level compression support"
+    },
+    "core": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/__future__.*.pyc",
+            "${libdir}/python3.5/__pycache__/_bootlocale.*.pyc",
+            "${libdir}/python3.5/__pycache__/_collections_abc.*.pyc",
+            "${libdir}/python3.5/__pycache__/_sitebuiltins.*.pyc",
+            "${libdir}/python3.5/__pycache__/_sysconfigdata.*.pyc",
+            "${libdir}/python3.5/__pycache__/_weakrefset.*.pyc",
+            "${libdir}/python3.5/__pycache__/abc.*.pyc",
+            "${libdir}/python3.5/__pycache__/argparse.*.pyc",
+            "${libdir}/python3.5/__pycache__/ast.*.pyc",
+            "${libdir}/python3.5/__pycache__/bisect.*.pyc",
+            "${libdir}/python3.5/__pycache__/code.*.pyc",
+            "${libdir}/python3.5/__pycache__/codecs.*.pyc",
+            "${libdir}/python3.5/__pycache__/codeop.*.pyc",
+            "${libdir}/python3.5/__pycache__/configparser.*.pyc",
+            "${libdir}/python3.5/__pycache__/contextlib.*.pyc",
+            "${libdir}/python3.5/__pycache__/copy.*.pyc",
+            "${libdir}/python3.5/__pycache__/copyreg.*.pyc",
+            "${libdir}/python3.5/__pycache__/csv.*.pyc",
+            "${libdir}/python3.5/__pycache__/dis.*.pyc",
+            "${libdir}/python3.5/__pycache__/enum.*.pyc",
+            "${libdir}/python3.5/__pycache__/functools.*.pyc",
+            "${libdir}/python3.5/__pycache__/genericpath.*.pyc",
+            "${libdir}/python3.5/__pycache__/getopt.*.pyc",
+            "${libdir}/python3.5/__pycache__/gettext.*.pyc",
+            "${libdir}/python3.5/__pycache__/heapq.*.pyc",
+            "${libdir}/python3.5/__pycache__/imp.*.pyc",
+            "${libdir}/python3.5/__pycache__/inspect.*.pyc",
+            "${libdir}/python3.5/__pycache__/io.*.pyc",
+            "${libdir}/python3.5/__pycache__/keyword.*.pyc",
+            "${libdir}/python3.5/__pycache__/linecache.*.pyc",
+            "${libdir}/python3.5/__pycache__/locale.*.pyc",
+            "${libdir}/python3.5/__pycache__/opcode.*.pyc",
+            "${libdir}/python3.5/__pycache__/operator.*.pyc",
+            "${libdir}/python3.5/__pycache__/optparse.*.pyc",
+            "${libdir}/python3.5/__pycache__/os.*.pyc",
+            "${libdir}/python3.5/__pycache__/platform.*.pyc",
+            "${libdir}/python3.5/__pycache__/posixpath.*.pyc",
+            "${libdir}/python3.5/__pycache__/re.*.pyc",
+            "${libdir}/python3.5/__pycache__/reprlib.*.pyc",
+            "${libdir}/python3.5/__pycache__/rlcompleter.*.pyc",
+            "${libdir}/python3.5/__pycache__/selectors.*.pyc",
+            "${libdir}/python3.5/__pycache__/signal.*.pyc",
+            "${libdir}/python3.5/__pycache__/site.*.pyc",
+            "${libdir}/python3.5/__pycache__/sre_compile.*.pyc",
+            "${libdir}/python3.5/__pycache__/sre_constants.*.pyc",
+            "${libdir}/python3.5/__pycache__/sre_parse.*.pyc",
+            "${libdir}/python3.5/__pycache__/stat.*.pyc",
+            "${libdir}/python3.5/__pycache__/struct.*.pyc",
+            "${libdir}/python3.5/__pycache__/subprocess.*.pyc",
+            "${libdir}/python3.5/__pycache__/symbol.*.pyc",
+            "${libdir}/python3.5/__pycache__/sysconfig.*.pyc",
+            "${libdir}/python3.5/__pycache__/textwrap.*.pyc",
+            "${libdir}/python3.5/__pycache__/threading.*.pyc",
+            "${libdir}/python3.5/__pycache__/token.*.pyc",
+            "${libdir}/python3.5/__pycache__/tokenize.*.pyc",
+            "${libdir}/python3.5/__pycache__/traceback.*.pyc",
+            "${libdir}/python3.5/__pycache__/types.*.pyc",
+            "${libdir}/python3.5/__pycache__/warnings.*.pyc",
+            "${libdir}/python3.5/__pycache__/weakref.*.pyc",
+            "${libdir}/python3.5/collections/__pycache__",
+            "${libdir}/python3.5/collections/__pycache__/abc.*.pyc",
+            "${libdir}/python3.5/encodings/__pycache__",
+            "${libdir}/python3.5/encodings/__pycache__/aliases.*.pyc",
+            "${libdir}/python3.5/encodings/__pycache__/latin_1.*.pyc",
+            "${libdir}/python3.5/encodings/__pycache__/utf_8.*.pyc",
+            "${libdir}/python3.5/importlib/__pycache__",
+            "${libdir}/python3.5/importlib/__pycache__/abc.*.pyc",
+            "${libdir}/python3.5/importlib/__pycache__/machinery.*.pyc",
+            "${libdir}/python3.5/importlib/__pycache__/util.*.pyc"
+        ],
+        "files": [
+            "${bindir}/python*[!-config]",
+            "${includedir}/python${PYTHON_BINABI}/pyconfig*.h",
+            "${libdir}/python${PYTHON_MAJMIN}/_collections_abc.py",
+            "${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.py",
+            "${libdir}/python${PYTHON_MAJMIN}/collections",
+            "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py",
+            "${libdir}/python3.5/UserDict.py",
+            "${libdir}/python3.5/UserList.py",
+            "${libdir}/python3.5/UserString.py",
+            "${libdir}/python3.5/__future__.py",
+            "${libdir}/python3.5/_abcoll.py",
+            "${libdir}/python3.5/_bootlocale.py",
+            "${libdir}/python3.5/_collections_abc.py",
+            "${libdir}/python3.5/_sitebuiltins.py",
+            "${libdir}/python3.5/_sysconfigdata.py",
+            "${libdir}/python3.5/_weakrefset.py",
+            "${libdir}/python3.5/abc.py",
+            "${libdir}/python3.5/argparse.py",
+            "${libdir}/python3.5/ast.py",
+            "${libdir}/python3.5/bisect.py",
+            "${libdir}/python3.5/code.py",
+            "${libdir}/python3.5/codecs.py",
+            "${libdir}/python3.5/codeop.py",
+            "${libdir}/python3.5/collections",
+            "${libdir}/python3.5/collections/abc.py",
+            "${libdir}/python3.5/configparser.py",
+            "${libdir}/python3.5/contextlib.py",
+            "${libdir}/python3.5/copy.py",
+            "${libdir}/python3.5/copyreg.py",
+            "${libdir}/python3.5/csv.py",
+            "${libdir}/python3.5/dis.py",
+            "${libdir}/python3.5/encodings",
+            "${libdir}/python3.5/encodings/aliases.py",
+            "${libdir}/python3.5/encodings/latin_1.py",
+            "${libdir}/python3.5/encodings/utf_8.py",
+            "${libdir}/python3.5/enum.py",
+            "${libdir}/python3.5/functools.py",
+            "${libdir}/python3.5/genericpath.py",
+            "${libdir}/python3.5/getopt.py",
+            "${libdir}/python3.5/gettext.py",
+            "${libdir}/python3.5/heapq.py",
+            "${libdir}/python3.5/imp.py",
+            "${libdir}/python3.5/importlib",
+            "${libdir}/python3.5/importlib/_bootstrap.py",
+            "${libdir}/python3.5/importlib/_bootstrap_external.py",
+            "${libdir}/python3.5/importlib/abc.py",
+            "${libdir}/python3.5/importlib/machinery.py",
+            "${libdir}/python3.5/importlib/util.py",
+            "${libdir}/python3.5/inspect.py",
+            "${libdir}/python3.5/io.py",
+            "${libdir}/python3.5/keyword.py",
+            "${libdir}/python3.5/lib-dynload/__pycache__/_struct.*.so",
+            "${libdir}/python3.5/lib-dynload/__pycache__/binascii.*.so",
+            "${libdir}/python3.5/lib-dynload/__pycache__/time.*.so",
+            "${libdir}/python3.5/lib-dynload/__pycache__/xreadlines.*.so",
+            "${libdir}/python3.5/lib-dynload/_bisect.*.so",
+            "${libdir}/python3.5/lib-dynload/_csv.*.so",
+            "${libdir}/python3.5/lib-dynload/_heapq.*.so",
+            "${libdir}/python3.5/lib-dynload/_opcode.*.so",
+            "${libdir}/python3.5/lib-dynload/_posixsubprocess.*.so",
+            "${libdir}/python3.5/lib-dynload/_struct.*.so",
+            "${libdir}/python3.5/lib-dynload/array.*.so",
+            "${libdir}/python3.5/lib-dynload/binascii.*.so",
+            "${libdir}/python3.5/lib-dynload/math.*.so",
+            "${libdir}/python3.5/lib-dynload/parser.*.so",
+            "${libdir}/python3.5/lib-dynload/readline.*.so",
+            "${libdir}/python3.5/lib-dynload/select.*.so",
+            "${libdir}/python3.5/lib-dynload/time.*.so",
+            "${libdir}/python3.5/lib-dynload/xreadlines.*.so",
+            "${libdir}/python3.5/linecache.py",
+            "${libdir}/python3.5/locale.py",
+            "${libdir}/python3.5/new.py",
+            "${libdir}/python3.5/opcode.py",
+            "${libdir}/python3.5/operator.py",
+            "${libdir}/python3.5/optparse.py",
+            "${libdir}/python3.5/os.py",
+            "${libdir}/python3.5/platform.py",
+            "${libdir}/python3.5/posixpath.py",
+            "${libdir}/python3.5/re.py",
+            "${libdir}/python3.5/reprlib.py",
+            "${libdir}/python3.5/rlcompleter.py",
+            "${libdir}/python3.5/selectors.py",
+            "${libdir}/python3.5/signal.py",
+            "${libdir}/python3.5/site.py",
+            "${libdir}/python3.5/sre_compile.py",
+            "${libdir}/python3.5/sre_constants.py",
+            "${libdir}/python3.5/sre_parse.py",
+            "${libdir}/python3.5/stat.py",
+            "${libdir}/python3.5/struct.py",
+            "${libdir}/python3.5/subprocess.py",
+            "${libdir}/python3.5/symbol.py",
+            "${libdir}/python3.5/sysconfig.py",
+            "${libdir}/python3.5/textwrap.py",
+            "${libdir}/python3.5/threading.py",
+            "${libdir}/python3.5/token.py",
+            "${libdir}/python3.5/tokenize.py",
+            "${libdir}/python3.5/traceback.py",
+            "${libdir}/python3.5/types.py",
+            "${libdir}/python3.5/warnings.py",
+            "${libdir}/python3.5/weakref.py"
+        ],
+        "rdepends": [],
+        "summary": "Python interpreter and core modules"
+    },
+    "crypt": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/crypt.*.pyc",
+            "${libdir}/python3.5/__pycache__/hashlib.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/crypt.py",
+            "${libdir}/python3.5/hashlib.py",
+            "${libdir}/python3.5/lib-dynload/_crypt.*.so",
+            "${libdir}/python3.5/lib-dynload/_hashlib.*.so",
+            "${libdir}/python3.5/lib-dynload/_sha256.*.so",
+            "${libdir}/python3.5/lib-dynload/_sha512.*.so"
+        ],
+        "rdepends": [
+            "core",
+            "math",
+            "stringold"
+        ],
+        "summary": "Python basic cryptographic and hashing support"
+    },
+    "ctypes": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/ctypes",
+            "${libdir}/python3.5/lib-dynload/_ctypes.*.so",
+            "${libdir}/python3.5/lib-dynload/_ctypes_test.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python C types support"
+    },
+    "curses": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/curses",
+            "${libdir}/python3.5/lib-dynload/_curses.*.so",
+            "${libdir}/python3.5/lib-dynload/_curses_panel.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python curses support"
+    },
+    "datetime": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/_strptime.*.pyc",
+            "${libdir}/python3.5/__pycache__/calendar.*.pyc",
+            "${libdir}/python3.5/__pycache__/datetime.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/_strptime.py",
+            "${libdir}/python3.5/calendar.py",
+            "${libdir}/python3.5/datetime.py",
+            "${libdir}/python3.5/lib-dynload/_datetime.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python calendar and time support"
+    },
+    "db": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/dbm"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python file-based database support"
+    },
+    "debugger": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/bdb.*.pyc",
+            "${libdir}/python3.5/__pycache__/pdb.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/bdb.py",
+            "${libdir}/python3.5/pdb.py"
+        ],
+        "rdepends": [
+            "core",
+            "pprint",
+            "shell",
+            "stringold"
+        ],
+        "summary": "Python debugger"
+    },
+    "dev": {
+        "cached": [],
+        "files": [
+            "${base_libdir}/*.a",
+            "${base_libdir}/*.o",
+            "${bindir}/python*-config",
+            "${datadir}/aclocal",
+            "${datadir}/pkgconfig",
+            "${includedir}",
+            "${libdir}/*.a",
+            "${libdir}/*.la",
+            "${libdir}/*.o",
+            "${libdir}/lib*${SOLIBSDEV}",
+            "${libdir}/pkgconfig",
+            "${libdir}/python3.5/config*/Makefile",
+            "${libdir}/python3.5/config*/Makefile/__pycache__"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python development package"
+    },
+    "difflib": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/difflib.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/difflib.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python helpers for computing deltas between objects"
+    },
+    "distutils": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/distutils"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python Distribution Utilities"
+    },
+    "distutils-staticdev": {
+        "cached": [
+            "${libdir}/python3.5/config/__pycache__/lib*.a"
+        ],
+        "files": [
+            "${libdir}/python3.5/config/lib*.a"
+        ],
+        "rdepends": [
+            "distutils"
+        ],
+        "summary": "Python distribution utilities (static libraries)"
+    },
+    "doctest": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/doctest.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/doctest.py"
+        ],
+        "rdepends": [
+            "core",
+            "debugger",
+            "difflib",
+            "logging",
+            "pprint",
+            "shell",
+            "stringold",
+            "unittest"
+        ],
+        "summary": "Python framework for running examples in docstrings"
+    },
+    "email": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/imaplib.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/email",
+            "${libdir}/python3.5/imaplib.py"
+        ],
+        "rdepends": [
+            "core",
+            "crypt",
+            "datetime",
+            "io",
+            "math",
+            "netclient"
+        ],
+        "summary": "Python email support"
+    },
+    "fcntl": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/fcntl.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python's fcntl interface"
+    },
+    "html": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/formatter.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/formatter.py",
+            "${libdir}/python3.5/html"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python HTML processing support"
+    },
+    "idle": {
+        "cached": [],
+        "files": [
+            "${bindir}/idle",
+            "${libdir}/python3.5/idlelib"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python Integrated Development Environment"
+    },
+    "image": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/colorsys.*.pyc",
+            "${libdir}/python3.5/__pycache__/imghdr.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/colorsys.py",
+            "${libdir}/python3.5/imghdr.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python graphical image handling"
+    },
+    "io": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/_pyio.*.pyc",
+            "${libdir}/python3.5/__pycache__/ipaddress.*.pyc",
+            "${libdir}/python3.5/__pycache__/pipes.*.pyc",
+            "${libdir}/python3.5/__pycache__/socket.*.pyc",
+            "${libdir}/python3.5/__pycache__/ssl.*.pyc",
+            "${libdir}/python3.5/__pycache__/tempfile.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/_pyio.py",
+            "${libdir}/python3.5/ipaddress.py",
+            "${libdir}/python3.5/lib-dynload/_socket.*.so",
+            "${libdir}/python3.5/lib-dynload/_ssl.*.so",
+            "${libdir}/python3.5/lib-dynload/termios.*.so",
+            "${libdir}/python3.5/pipes.py",
+            "${libdir}/python3.5/socket.py",
+            "${libdir}/python3.5/ssl.py",
+            "${libdir}/python3.5/tempfile.py"
+        ],
+        "rdepends": [
+            "compression",
+            "core",
+            "crypt",
+            "math",
+            "netclient",
+            "shell",
+            "unixadmin"
+        ],
+        "summary": "Python low-level I/O"
+    },
+    "json": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/json",
+            "${libdir}/python3.5/lib-dynload/_json.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python JSON support"
+    },
+    "logging": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/logging"
+        ],
+        "rdepends": [
+            "core",
+            "stringold"
+        ],
+        "summary": "Python logging support"
+    },
+    "mailbox": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/mailbox.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/mailbox.py"
+        ],
+        "rdepends": [
+            "core",
+            "crypt",
+            "datetime",
+            "email",
+            "fcntl",
+            "io",
+            "math",
+            "mime",
+            "netclient",
+            "stringold"
+        ],
+        "summary": "Python mailbox format support"
+    },
+    "math": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/random.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/_random.*.so",
+            "${libdir}/python3.5/lib-dynload/cmath.*.so",
+            "${libdir}/python3.5/random.py"
+        ],
+        "rdepends": [
+            "core",
+            "crypt"
+        ],
+        "summary": "Python math support"
+    },
+    "mime": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/quopri.*.pyc",
+            "${libdir}/python3.5/__pycache__/uu.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/quopri.py",
+            "${libdir}/python3.5/uu.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python MIME handling APIs"
+    },
+    "mmap": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/mmap.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python memory-mapped file support"
+    },
+    "modules": {
+        "cached": [],
+        "files": [],
+        "rdepends": [
+            "2to3",
+            "asyncio",
+            "audio",
+            "codecs",
+            "compile",
+            "compression",
+            "core",
+            "crypt",
+            "ctypes",
+            "curses",
+            "datetime",
+            "db",
+            "debugger",
+            "difflib",
+            "distutils",
+            "doctest",
+            "email",
+            "fcntl",
+            "html",
+            "idle",
+            "image",
+            "io",
+            "json",
+            "logging",
+            "mailbox",
+            "math",
+            "mime",
+            "mmap",
+            "multiprocessing",
+            "netclient",
+            "netserver",
+            "numbers",
+            "pickle",
+            "pkgutil",
+            "pprint",
+            "profile",
+            "pydoc",
+            "resource",
+            "shell",
+            "smtpd",
+            "sqlite3",
+            "sqlite3-tests",
+            "stringold",
+            "syslog",
+            "terminal",
+            "tests",
+            "threading",
+            "tkinter",
+            "typing",
+            "unittest",
+            "unixadmin",
+            "xml",
+            "xmlrpc"
+        ],
+        "summary": "All Python modules"
+    },
+    "multiprocessing": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/_multiprocessing.*.so",
+            "${libdir}/python3.5/multiprocessing"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python multiprocessing support"
+    },
+    "netclient": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/base64.*.pyc",
+            "${libdir}/python3.5/__pycache__/ftplib.*.pyc",
+            "${libdir}/python3.5/__pycache__/hmac.*.pyc",
+            "${libdir}/python3.5/__pycache__/mimetypes.*.pyc",
+            "${libdir}/python3.5/__pycache__/nntplib.*.pyc",
+            "${libdir}/python3.5/__pycache__/poplib.*.pyc",
+            "${libdir}/python3.5/__pycache__/smtplib.*.pyc",
+            "${libdir}/python3.5/__pycache__/telnetlib.*.pyc",
+            "${libdir}/python3.5/__pycache__/uuid.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/base64.py",
+            "${libdir}/python3.5/ftplib.py",
+            "${libdir}/python3.5/hmac.py",
+            "${libdir}/python3.5/mimetypes.py",
+            "${libdir}/python3.5/nntplib.py",
+            "${libdir}/python3.5/poplib.py",
+            "${libdir}/python3.5/smtplib.py",
+            "${libdir}/python3.5/telnetlib.py",
+            "${libdir}/python3.5/urllib",
+            "${libdir}/python3.5/urllib/__pycache__",
+            "${libdir}/python3.5/uuid.py"
+        ],
+        "rdepends": [
+            "compression",
+            "core",
+            "crypt",
+            "ctypes",
+            "datetime",
+            "email",
+            "io",
+            "math",
+            "mime",
+            "shell",
+            "stringold",
+            "unixadmin"
+        ],
+        "summary": "Python Internet Protocol clients"
+    },
+    "netserver": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/cgi.*.pyc",
+            "${libdir}/python3.5/__pycache__/socketserver.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/cgi.py",
+            "${libdir}/python3.5/socketserver.py"
+        ],
+        "rdepends": [
+            "compression",
+            "core",
+            "crypt",
+            "datetime",
+            "email",
+            "html",
+            "io",
+            "math",
+            "mime",
+            "netclient",
+            "shell",
+            "stringold",
+            "unixadmin"
+        ],
+        "summary": "Python Internet Protocol servers"
+    },
+    "numbers": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/decimal.*.pyc",
+            "${libdir}/python3.5/__pycache__/fractions.*.pyc",
+            "${libdir}/python3.5/__pycache__/numbers.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/decimal.py",
+            "${libdir}/python3.5/fractions.py",
+            "${libdir}/python3.5/lib-dynload/_decimal.*.so",
+            "${libdir}/python3.5/numbers.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python number APIs"
+    },
+    "pickle": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/_compat_pickle.*.pyc",
+            "${libdir}/python3.5/__pycache__/pickle.*.pyc",
+            "${libdir}/python3.5/__pycache__/pickletools.*.pyc",
+            "${libdir}/python3.5/__pycache__/shelve.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/_compat_pickle.py",
+            "${libdir}/python3.5/lib-dynload/_pickle.*.so",
+            "${libdir}/python3.5/pickle.py",
+            "${libdir}/python3.5/pickletools.py",
+            "${libdir}/python3.5/shelve.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python serialisation/persistence support"
+    },
+    "pkgutil": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/pkgutil.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/pkgutil.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python package extension utility support"
+    },
+    "pprint": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/pprint.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/pprint.py"
+        ],
+        "rdepends": [
+            "core"
+       ], 
+        "summary": "Python pretty-print support"
+    },
+    "profile": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/cProfile.*.pyc",
+            "${libdir}/python3.5/__pycache__/profile.*.pyc",
+            "${libdir}/python3.5/__pycache__/pstats.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/cProfile.py",
+            "${libdir}/python3.5/lib-dynload/_lsprof.*.so",
+            "${libdir}/python3.5/profile.py",
+            "${libdir}/python3.5/pstats.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python basic performance profiling support"
+    },
+    "pydoc": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/pydoc.*.pyc"
+        ],
+        "files": [
+            "${bindir}/pydoc",
+            "${libdir}/python3.5/pydoc.py",
+            "${libdir}/python3.5/pydoc_data"
+        ],
+        "rdepends": [
+            "core",
+            "netclient",
+            "pkgutil"
+        ],
+        "summary": "Python interactive help support"
+    },
+    "resource": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/resource.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python resource control interface"
+    },
+    "shell": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/cmd.*.pyc",
+            "${libdir}/python3.5/__pycache__/fnmatch.*.pyc",
+            "${libdir}/python3.5/__pycache__/glob.*.pyc",
+            "${libdir}/python3.5/__pycache__/shlex.*.pyc",
+            "${libdir}/python3.5/__pycache__/shutil.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/cmd.py",
+            "${libdir}/python3.5/fnmatch.py",
+            "${libdir}/python3.5/glob.py",
+            "${libdir}/python3.5/shlex.py",
+            "${libdir}/python3.5/shutil.py"
+        ],
+        "rdepends": [
+            "compression",
+            "core",
+            "stringold",
+            "unixadmin"
+        ],
+        "summary": "Python shell-like functionality"
+    },
+    "smtpd": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/asynchat.*.pyc",
+            "${libdir}/python3.5/__pycache__/asyncore.*.pyc",
+            "${libdir}/python3.5/__pycache__/smtpd.*.pyc"
+        ],
+        "files": [
+            "${bindir}/smtpd.py",
+            "${libdir}/python3.5/asynchat.py",
+            "${libdir}/python3.5/asyncore.py",
+            "${libdir}/python3.5/smtpd.py"
+        ],
+        "rdepends": [
+            "core",
+            "crypt",
+            "datetime",
+            "email",
+            "io",
+            "math",
+            "mime",
+            "netclient",
+            "stringold"
+        ],
+        "summary": "Python Simple Mail Transport Daemon"
+    },
+    "sqlite3": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/_sqlite3.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python Sqlite3 database support"
+    },
+    "sqlite3-tests": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/sqlite3/test"
+        ],
+        "rdepends": [
+            "core",
+            "tests"
+        ],
+        "summary": "Python Sqlite3 database support tests"
+    },
+    "stringold": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/string.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/string.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python string APIs [deprecated]"
+    },
+    "syslog": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/syslog.*.so"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python syslog interface"
+    },
+    "terminal": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/pty.*.pyc",
+            "${libdir}/python3.5/__pycache__/tty.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/pty.py",
+            "${libdir}/python3.5/tty.py"
+        ],
+        "rdepends": [
+            "core",
+            "io"
+        ],
+        "summary": "Python terminal controlling support"
+    },
+    "tests": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/test"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python tests"
+    },
+    "threading": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/_dummy_thread.*.pyc",
+            "${libdir}/python3.5/__pycache__/_threading_local.*.pyc",
+            "${libdir}/python3.5/__pycache__/dummy_threading.*.pyc",
+            "${libdir}/python3.5/__pycache__/queue.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/_dummy_thread.py",
+            "${libdir}/python3.5/_threading_local.py",
+            "${libdir}/python3.5/dummy_threading.py",
+            "${libdir}/python3.5/queue.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python threading & synchronization support"
+    },
+    "tkinter": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/tkinter"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python Tcl/Tk bindings"
+    },
+    "typing": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/typing.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/typing.py"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python typing support"
+    },
+    "unittest": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/unittest",
+            "${libdir}/python3.5/unittest/",
+            "${libdir}/python3.5/unittest/__pycache__"
+        ],
+        "rdepends": [
+            "core",
+            "difflib",
+            "logging",
+            "pprint",
+            "shell",
+            "stringold"
+        ],
+        "summary": "Python unit testing framework"
+    },
+    "unixadmin": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/getpass.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/getpass.py",
+            "${libdir}/python3.5/lib-dynload/grp.*.so",
+            "${libdir}/python3.5/lib-dynload/nis.*.so"
+        ],
+        "rdepends": [
+            "core",
+            "io"
+        ],
+        "summary": "Python Unix administration support"
+    },
+    "xml": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/lib-dynload/_elementtree.*.so",
+            "${libdir}/python3.5/lib-dynload/pyexpat.*.so",
+            "${libdir}/python3.5/xml"
+        ],
+        "rdepends": [
+            "core"
+        ],
+        "summary": "Python basic XML support"
+    },
+    "xmlrpc": {
+        "cached": [],
+        "files": [
+            "${libdir}/python3.5/xmlrpc",
+            "${libdir}/python3.5/xmlrpc/__pycache__"
+        ],
+        "rdepends": [
+            "core",
+            "xml"
+        ],
+        "summary": "Python XML-RPC support"
+    }
+}
diff --git a/meta/recipes-devtools/python/python3_3.5.3.bb b/meta/recipes-devtools/python/python3_3.5.3.bb
index b70915e54f6..b072c74f5bd 100644
--- a/meta/recipes-devtools/python/python3_3.5.3.bb
+++ b/meta/recipes-devtools/python/python3_3.5.3.bb
@@ -1,6 +1,7 @@
 require recipes-devtools/python/python.inc
 
 DEPENDS = "python3-native libffi bzip2 gdbm openssl readline sqlite3 zlib virtual/libintl xz"
+
 PR = "${INC_PR}.0"
 PYTHON_MAJMIN = "3.5"
 PYTHON_BINABI= "${PYTHON_MAJMIN}m"
@@ -191,11 +192,8 @@ py_package_preprocess () {
 		${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py
 }
 
-require python-${PYTHON_MAJMIN}-manifest.inc
-
 # manual dependency additions
 RPROVIDES_${PN}-modules = "${PN}"
-RRECOMMENDS_${PN}-core = "${PN}-readline"
 RRECOMMENDS_${PN}-crypt = "openssl"
 RRECOMMENDS_${PN}-crypt_class-nativesdk = "nativesdk-openssl"
 
@@ -214,7 +212,7 @@ INSANE_SKIP_${PN}-dev += "dev-elf"
 
 # catch all the rest (unsorted)
 PACKAGES += "${PN}-misc"
-RDEPENDS_${PN}-misc += "${PN}-core ${PN}-email ${PN}-codecs ${PN}-textutils ${PN}-argparse"
+RDEPENDS_${PN}-misc += "${PN}-core ${PN}-email ${PN}-codecs"
 RDEPENDS_${PN}-modules += "${PN}-misc"
 FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"
 
@@ -223,3 +221,80 @@ PACKAGES += "${PN}-man"
 FILES_${PN}-man = "${datadir}/man"
 
 BBCLASSEXTEND = "nativesdk"
+
+RPROVIDES_${PN} += "${PN}-modules"
+    
+# We want bytecode precompiled .py files (.pyc's) by default
+# but the user may set it on their own conf
+            
+INCLUDE_PYCS ?= "1"
+
+python(){
+
+    pythondir = d.getVar('THISDIR',True)
+
+    # Read JSON manifest
+    import json
+    with open(pythondir+'/python3/python3-manifest.json') as manifest_file:
+        python_manifest=json.load(manifest_file)
+        
+    include_pycs = d.getVar('INCLUDE_PYCS')
+
+    packages = d.getVar('PACKAGES').split()
+    pn = d.getVar('PN')
+
+    newpackages=[]
+    for key in python_manifest:
+        pypackage= pn + '-' + key
+
+        if pypackage not in packages:
+            # We need to prepend, otherwise python-misc gets everything
+            # so we use a new variable
+            newpackages.append(pypackage)
+
+        # "Build" python's manifest FILES, RDEPENDS and SUMMARY
+        d.setVar('FILES_' + pypackage, '')
+        for value in python_manifest[key]['files']:
+            d.appendVar('FILES_' + pypackage, value + ' ')
+
+	# Add cached files 
+        if include_pycs == '1':
+            for value in python_manifest[key]['cached']:
+                    d.appendVar('FILES_' + pypackage, value)
+
+        d.setVar('RDEPENDS_' + pypackage, '')
+        for value in python_manifest[key]['rdepends']:
+            # Make it work with or without $PN
+            if '${PN}' in value:
+                value=value.split('-')[1]
+            d.appendVar('RDEPENDS_' + pypackage, pn + '-' + value + ' ')
+        d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
+
+    # We need to ensure staticdev packages match for files first so we sort in reverse
+    newpackages.sort(reverse=True)
+    # Prepending so to avoid python-misc getting everything
+    packages = newpackages + packages
+    d.setVar('PACKAGES', ' '.join(packages))
+    d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
+}
+do_split_packages[file-checksums] += "${THISDIR}/python/python3-manifest.json:True"
+
+
+
+# Files needed to create a new manifest
+SRC_URI += "file://create_manifest3.py file://get_module_deps3.py file://python3-manifest.json"
+
+do_create_manifest() {
+
+cd ${WORKDIR}
+# This needs to be executed by python-native and NOT by HOST's python
+nativepython3 create_manifest3.py
+cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
+}                   
+
+# bitbake python -c create_manifest
+addtask do_create_manifest
+
+# Make sure we have native python ready when we create a new manifest
+do_create_manifest[depends] += "python3:do_prepare_recipe_sysroot"
+do_create_manifest[depends] += "python3:do_patch"
diff --git a/scripts/contrib/python/generate-manifest-3.5.py b/scripts/contrib/python/generate-manifest-3.5.py
deleted file mode 100755
index 6352f8f1207..00000000000
--- a/scripts/contrib/python/generate-manifest-3.5.py
+++ /dev/null
@@ -1,433 +0,0 @@
-#!/usr/bin/env python
-
-# generate Python Manifest for the OpenEmbedded build system
-# (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
-# (C) 2007 Jeremy Laine
-# licensed under MIT, see COPYING.MIT
-#
-# June 22, 2011 -- Mark Hatle <mark.hatle@windriver.com>
-#  * Updated to no longer generate special -dbg package, instead use the
-#    single system -dbg
-#  * Update version with ".1" to indicate this change
-#
-# 2014 Khem Raj <raj.khem@gmail.com>
-# Added python3 support
-#
-# February 26, 2017 -- Ming Liu <peter.x.liu@external.atlascopco.com>
-# * Updated to support generating manifest for native python3
-
-import os
-import sys
-import time
-import argparse
-
-VERSION = "3.5.0"
-
-__author__ = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
-__version__ = "20140131"
-
-class MakefileMaker:
-
-    def __init__( self, outfile, isNative ):
-        """initialize"""
-        self.packages = {}
-        self.excluded_pkgs = []
-        self.targetPrefix = "${libdir}/python%s/" % VERSION[:3]
-        self.isNative = isNative
-        self.output = outfile
-        self.out( """
-# WARNING: This file is AUTO GENERATED: Manual edits will be lost next time I regenerate the file.
-# Generator: '%s%s' Version %s (C) 2002-2010 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
-""" % ( sys.argv[0], ' --native' if isNative else '', __version__ ) )
-
-    #
-    # helper functions
-    #
-
-    def out( self, data ):
-        """print a line to the output file"""
-        self.output.write( "%s\n" % data )
-
-    def setPrefix( self, targetPrefix ):
-        """set a file prefix for addPackage files"""
-        self.targetPrefix = targetPrefix
-
-    def doProlog( self ):
-        self.out( """ """ )
-        self.out( "" )
-
-    def addPackage( self, name, description, dependencies, filenames, mod_exclude = False ):
-        """add a package to the Makefile"""
-        if type( filenames ) == type( "" ):
-            filenames = filenames.split()
-        fullFilenames = []
-        for filename in filenames:
-            if filename[0] != "$":
-                fullFilenames.append( "%s%s" % ( self.targetPrefix, filename ) )
-                fullFilenames.append( "%s%s" % ( self.targetPrefix,
-                                                 self.pycachePath( filename ) ) )
-            else:
-                fullFilenames.append( filename )
-        if mod_exclude:
-            self.excluded_pkgs.append( name )
-        self.packages[name] = description, dependencies, fullFilenames
-
-    def pycachePath( self, filename ):
-        dirname = os.path.dirname( filename )
-        basename = os.path.basename( filename )
-        if '.' in basename:
-            return os.path.join( dirname, '__pycache__', basename )
-        else:
-            return os.path.join( dirname, basename, '__pycache__' )
-
-    def doBody( self ):
-        """generate body of Makefile"""
-
-        global VERSION
-
-        #
-        # generate rprovides line for native
-        #
-
-        if self.isNative:
-            pkglist = []
-            for name in ['${PN}-modules'] + sorted(self.packages):
-                pkglist.append('%s-native' % name.replace('${PN}', 'python3'))
-
-            self.out('RPROVIDES += "%s"' % " ".join(pkglist))
-            return
-
-        #
-        # generate provides line
-        #
-
-        provideLine = 'PROVIDES+="'
-        for name in sorted(self.packages):
-            provideLine += "%s " % name
-        provideLine += '"'
-
-        self.out( provideLine )
-        self.out( "" )
-
-        #
-        # generate package line
-        #
-
-        packageLine = 'PACKAGES="${PN}-dbg '
-        for name in sorted(self.packages):
-            if name.startswith("${PN}-distutils"):
-                if name == "${PN}-distutils":
-                    packageLine += "%s-staticdev %s " % (name, name)
-            elif name != '${PN}-dbg':
-                packageLine += "%s " % name
-        packageLine += '${PN}-modules"'
-
-        self.out( packageLine )
-        self.out( "" )
-
-        #
-        # generate package variables
-        #
-
-        for name, data in sorted(self.packages.items()):
-            desc, deps, files = data
-
-            #
-            # write out the description, revision and dependencies
-            #
-            self.out( 'SUMMARY_%s="%s"' % ( name, desc ) )
-            self.out( 'RDEPENDS_%s="%s"' % ( name, deps ) )
-
-            line = 'FILES_%s="' % name
-
-            #
-            # check which directories to make in the temporary directory
-            #
-
-            dirset = {} # if python had a set-datatype this would be sufficient. for now, we're using a dict instead.
-            for target in files:
-                dirset[os.path.dirname( target )] = True
-
-            #
-            # generate which files to copy for the target (-dfR because whole directories are also allowed)
-            #
-
-            for target in files:
-                line += "%s " % target
-
-            line += '"'
-            self.out( line )
-            self.out( "" )
-
-        self.out( 'SUMMARY_${PN}-modules="All Python modules"' )
-        line = 'RDEPENDS_${PN}-modules="'
-
-        for name, data in sorted(self.packages.items()):
-            if name not in ['${PN}-dev', '${PN}-distutils-staticdev'] and name not in self.excluded_pkgs:
-                line += "%s " % name
-
-        self.out( "%s \"" % line )
-        self.out( 'ALLOW_EMPTY_${PN}-modules = "1"' )
-
-    def doEpilog( self ):
-        self.out( """""" )
-        self.out( "" )
-
-    def make( self ):
-        self.doProlog()
-        self.doBody()
-        self.doEpilog()
-
-if __name__ == "__main__":
-    parser = argparse.ArgumentParser( description='generate python3 manifest' )
-    parser.add_argument( '-n', '--native', help='generate manifest for native python3', action='store_true' )
-    parser.add_argument( 'outfile', metavar='OUTPUT_FILE', nargs='?', default='', help='Output file (defaults to stdout)' )
-    args = parser.parse_args()
-
-    if args.outfile:
-        try:
-            os.unlink( args.outfile )
-        except Exception:
-            sys.exc_clear()
-        outfile = open( args.outfile, "w" )
-    else:
-        outfile = sys.stdout
-
-    m = MakefileMaker( outfile, args.native )
-
-    # Add packages here. Only specify dlopen-style library dependencies here, no ldd-style dependencies!
-    # Parameters: revision, name, description, dependencies, filenames
-    #
-
-    m.addPackage( "${PN}-core", "Python interpreter and core modules", "${PN}-lang ${PN}-re ${PN}-reprlib ${PN}-codecs ${PN}-io ${PN}-math",
-    "__future__.* _abcoll.* abc.* ast.* copy.* copyreg.* configparser.* " +
-    "genericpath.* getopt.* linecache.* new.* " +
-    "os.* posixpath.* struct.* " +
-    "warnings.* site.* stat.* " +
-    "UserDict.* UserList.* UserString.* " +
-    "lib-dynload/binascii.*.so lib-dynload/_struct.*.so lib-dynload/time.*.so " +
-    "lib-dynload/xreadlines.*.so types.* platform.* ${bindir}/python* "  + 
-    "_weakrefset.* sysconfig.* _sysconfigdata.* " +
-    "${includedir}/python${PYTHON_BINABI}/pyconfig*.h " +
-    "${libdir}/python${PYTHON_MAJMIN}/collections " +
-    "${libdir}/python${PYTHON_MAJMIN}/_collections_abc.* " +
-    "${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.* " +
-    "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py ")
-
-    m.addPackage( "${PN}-dev", "Python development package", "${PN}-core",
-    "${includedir} " +
-    "${libdir}/lib*${SOLIBSDEV} " +
-    "${libdir}/*.la " +
-    "${libdir}/*.a " +
-    "${libdir}/*.o " +
-    "${libdir}/pkgconfig " +
-    "${base_libdir}/*.a " +
-    "${base_libdir}/*.o " +
-    "${datadir}/aclocal " +
-    "${datadir}/pkgconfig " +
-    "config*/Makefile ")
-
-    m.addPackage( "${PN}-2to3", "Python automated Python 2 to 3 code translator", "${PN}-core",
-    "lib2to3" ) # package
-
-    m.addPackage( "${PN}-idle", "Python Integrated Development Environment", "${PN}-core ${PN}-tkinter",
-    "${bindir}/idle idlelib" ) # package
-
-    m.addPackage( "${PN}-pydoc", "Python interactive help support", "${PN}-core ${PN}-lang ${PN}-stringold ${PN}-re",
-    "${bindir}/pydoc pydoc.* pydoc_data" )
-
-    m.addPackage( "${PN}-smtpd", "Python Simple Mail Transport Daemon", "${PN}-core ${PN}-netserver ${PN}-email ${PN}-mime",
-    "${bindir}/smtpd.* smtpd.*" )
-
-    m.addPackage( "${PN}-audio", "Python Audio Handling", "${PN}-core",
-    "wave.* chunk.* sndhdr.* lib-dynload/ossaudiodev.*.so lib-dynload/audioop.*.so audiodev.* sunaudio.* sunau.* toaiff.*" )
-
-    m.addPackage( "${PN}-argparse", "Python command line argument parser", "${PN}-core ${PN}-codecs ${PN}-textutils",
-    "argparse.*" )
-
-    m.addPackage( "${PN}-asyncio", "Python Asynchronous I/O, event loop, coroutines and tasks", "${PN}-core",
-    "asyncio" )
-
-    m.addPackage( "${PN}-codecs", "Python codecs, encodings & i18n support", "${PN}-core ${PN}-lang",
-    "codecs.* encodings gettext.* locale.* lib-dynload/_locale.*.so lib-dynload/_codecs* lib-dynload/_multibytecodec.*.so lib-dynload/unicodedata.*.so stringprep.* xdrlib.*" )
-
-    m.addPackage( "${PN}-compile", "Python bytecode compilation support", "${PN}-core",
-    "py_compile.* compileall.*" )
-
-    m.addPackage( "${PN}-compression", "Python high-level compression support", "${PN}-core ${PN}-codecs ${PN}-importlib ${PN}-threading ${PN}-shell",
-    "gzip.* zipfile.* tarfile.* lib-dynload/bz2.*.so lib-dynload/zlib.*.so bz2.py lzma.py _compression.py" )
-
-    m.addPackage( "${PN}-crypt", "Python basic cryptographic and hashing support", "${PN}-core",
-    "hashlib.* md5.* sha.* lib-dynload/crypt.*.so lib-dynload/_hashlib.*.so lib-dynload/_sha256.*.so lib-dynload/_sha512.*.so" )
-
-    m.addPackage( "${PN}-textutils", "Python option parsing, text wrapping and CSV support", "${PN}-core ${PN}-io ${PN}-re ${PN}-stringold",
-    "lib-dynload/_csv.*.so csv.* optparse.* textwrap.*" )
-
-    m.addPackage( "${PN}-curses", "Python curses support", "${PN}-core",
-    "curses lib-dynload/_curses.*.so lib-dynload/_curses_panel.*.so" ) # directory + low level module
-
-    m.addPackage( "${PN}-ctypes", "Python C types support", "${PN}-core ${PN}-subprocess",
-    "ctypes lib-dynload/_ctypes.*.so lib-dynload/_ctypes_test.*.so" ) # directory + low level module
-
-    m.addPackage( "${PN}-datetime", "Python calendar and time support", "${PN}-core ${PN}-codecs",
-    "_strptime.* calendar.* datetime.* lib-dynload/_datetime.*.so" )
-
-    m.addPackage( "${PN}-db", "Python file-based database support", "${PN}-core",
-    "anydbm.* dumbdbm.* whichdb.* dbm lib-dynload/_dbm.*.so" )
-
-    m.addPackage( "${PN}-debugger", "Python debugger", "${PN}-core ${PN}-io ${PN}-lang ${PN}-re ${PN}-stringold ${PN}-shell ${PN}-pprint ${PN}-importlib ${PN}-pkgutil",
-    "bdb.* pdb.*" )
-
-    m.addPackage( "${PN}-difflib", "Python helpers for computing deltas between objects", "${PN}-lang ${PN}-re",
-    "difflib.*" )
-
-    m.addPackage( "${PN}-distutils-staticdev", "Python distribution utilities (static libraries)", "${PN}-distutils",
-    "config/lib*.a" ) # package
-
-    m.addPackage( "${PN}-distutils", "Python Distribution Utilities", "${PN}-core ${PN}-email",
-    "config distutils" ) # package
-
-    m.addPackage( "${PN}-doctest", "Python framework for running examples in docstrings", "${PN}-core ${PN}-lang ${PN}-io ${PN}-re ${PN}-unittest ${PN}-debugger ${PN}-difflib",
-    "doctest.*" )
-
-    m.addPackage( "${PN}-email", "Python email support", "${PN}-core ${PN}-io ${PN}-re ${PN}-mime ${PN}-audio ${PN}-image ${PN}-netclient",
-    "imaplib.* email" ) # package
-
-    m.addPackage( "${PN}-enum", "Python support for enumerations", "${PN}-core",
-    "enum.*" )
-
-    m.addPackage( "${PN}-fcntl", "Python's fcntl interface", "${PN}-core",
-    "lib-dynload/fcntl.*.so" )
-
-    m.addPackage( "${PN}-html", "Python HTML processing support", "${PN}-core",
-    "formatter.* htmlentitydefs.* html htmllib.* markupbase.* sgmllib.* HTMLParser.* " )
-
-    m.addPackage( "${PN}-importlib", "Python import implementation library", "${PN}-core ${PN}-lang",
-    "importlib imp.*" )
-
-    m.addPackage( "${PN}-gdbm", "Python GNU database support", "${PN}-core",
-    "lib-dynload/_gdbm.*.so" )
-
-    m.addPackage( "${PN}-image", "Python graphical image handling", "${PN}-core",
-    "colorsys.* imghdr.* lib-dynload/imageop.*.so lib-dynload/rgbimg.*.so" )
-
-    m.addPackage( "${PN}-io", "Python low-level I/O", "${PN}-core ${PN}-math",
-    "lib-dynload/_socket.*.so lib-dynload/_io.*.so lib-dynload/_ssl.*.so lib-dynload/select.*.so lib-dynload/termios.*.so lib-dynload/cStringIO.*.so " +
-    "ipaddress.* pipes.* socket.* ssl.* tempfile.* StringIO.* io.* _pyio.*" )
-
-    m.addPackage( "${PN}-json", "Python JSON support", "${PN}-core ${PN}-math ${PN}-re",
-    "json lib-dynload/_json.*.so" ) # package
-
-    m.addPackage( "${PN}-lang", "Python low-level language support", "${PN}-core ${PN}-importlib",
-    "lib-dynload/_bisect.*.so lib-dynload/_collections.*.so lib-dynload/_heapq.*.so lib-dynload/_weakref.*.so lib-dynload/_functools.*.so " +
-    "lib-dynload/array.*.so lib-dynload/itertools.*.so lib-dynload/operator.*.so lib-dynload/parser.*.so " +
-    "atexit.* bisect.* code.* codeop.* collections.* _collections_abc.* contextlib.* dis.* functools.* heapq.* inspect.* keyword.* opcode.* operator.* symbol.* repr.* token.* " +
-    "tokenize.* traceback.* weakref.*" )
-
-    m.addPackage( "${PN}-logging", "Python logging support", "${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-stringold",
-    "logging" ) # package
-
-    m.addPackage( "${PN}-mailbox", "Python mailbox format support", "${PN}-core ${PN}-mime",
-    "mailbox.*" )
-
-    m.addPackage( "${PN}-math", "Python math support", "${PN}-core ${PN}-crypt",
-    "lib-dynload/cmath.*.so lib-dynload/math.*.so lib-dynload/_random.*.so random.* sets.*" )
-
-    m.addPackage( "${PN}-mime", "Python MIME handling APIs", "${PN}-core ${PN}-io",
-    "mimetools.* uu.* quopri.* rfc822.* MimeWriter.*" )
-
-    m.addPackage( "${PN}-mmap", "Python memory-mapped file support", "${PN}-core ${PN}-io",
-    "lib-dynload/mmap.*.so " )
-
-    m.addPackage( "${PN}-multiprocessing", "Python multiprocessing support", "${PN}-core ${PN}-io ${PN}-lang ${PN}-pickle ${PN}-threading ${PN}-ctypes ${PN}-mmap",
-    "lib-dynload/_multiprocessing.*.so multiprocessing" ) # package
-
-    m.addPackage( "${PN}-netclient", "Python Internet Protocol clients", "${PN}-argparse ${PN}-core ${PN}-crypt ${PN}-datetime ${PN}-io ${PN}-lang ${PN}-logging ${PN}-mime ${PN}-html",
-    "*Cookie*.* " +
-    "base64.* cookielib.* ftplib.* gopherlib.* hmac.* http* httplib.* mimetypes.* nntplib.* poplib.* smtplib.* telnetlib.* urllib  uuid.* rfc822.* mimetools.*" )
-
-    m.addPackage( "${PN}-netserver", "Python Internet Protocol servers", "${PN}-core ${PN}-netclient ${PN}-shell ${PN}-threading",
-    "cgi.* socketserver.* *HTTPServer.* SocketServer.*" )
-
-    m.addPackage( "${PN}-numbers", "Python number APIs", "${PN}-core ${PN}-lang ${PN}-re",
-    "decimal.* fractions.* numbers.*" )
-
-    m.addPackage( "${PN}-pickle", "Python serialisation/persistence support", "${PN}-core ${PN}-codecs ${PN}-io ${PN}-re",
-    "_compat_pickle.* pickle.* shelve.* lib-dynload/cPickle.*.so pickletools.*" )
-
-    m.addPackage( "${PN}-pkgutil", "Python package extension utility support", "${PN}-core",
-    "pkgutil.*")
-
-    m.addPackage( "${PN}-pprint", "Python pretty-print support", "${PN}-core ${PN}-io",
-    "pprint.*" )
-
-    m.addPackage( "${PN}-profile", "Python basic performance profiling support", "${PN}-core ${PN}-textutils",
-    "profile.* pstats.* cProfile.* lib-dynload/_lsprof.*.so" )
-
-    m.addPackage( "${PN}-re", "Python Regular Expression APIs", "${PN}-core",
-    "re.* sre.* sre_compile.* sre_constants* sre_parse.*" ) # _sre is builtin
-
-    m.addPackage( "${PN}-readline", "Python readline support", "${PN}-core",
-    "lib-dynload/readline.*.so rlcompleter.*" )
-
-    m.addPackage( "${PN}-reprlib", "Python alternate repr() implementation", "${PN}-core",
-    "reprlib.py" )
-
-    m.addPackage( "${PN}-resource", "Python resource control interface", "${PN}-core",
-    "lib-dynload/resource.*.so" )
-
-    m.addPackage( "${PN}-selectors", "Python High-level I/O multiplexing", "${PN}-core",
-    "selectors.*" )
-
-    m.addPackage( "${PN}-shell", "Python shell-like functionality", "${PN}-core ${PN}-re ${PN}-compression",
-    "cmd.* commands.* dircache.* fnmatch.* glob.* popen2.* shlex.* shutil.*" )
-
-    m.addPackage( "${PN}-signal", "Python set handlers for asynchronous events support", "${PN}-core ${PN}-enum",
-    "signal.*" )
-
-    m.addPackage( "${PN}-subprocess", "Python subprocess support", "${PN}-core ${PN}-io ${PN}-re ${PN}-fcntl ${PN}-pickle ${PN}-threading ${PN}-signal ${PN}-selectors",
-    "subprocess.* lib-dynload/_posixsubprocess.*.so" )
-
-    m.addPackage( "${PN}-sqlite3", "Python Sqlite3 database support", "${PN}-core ${PN}-datetime ${PN}-lang ${PN}-crypt ${PN}-io ${PN}-threading",
-    "lib-dynload/_sqlite3.*.so sqlite3/dbapi2.* sqlite3/__init__.* sqlite3/dump.*" )
-
-    m.addPackage( "${PN}-sqlite3-tests", "Python Sqlite3 database support tests", "${PN}-core ${PN}-sqlite3",
-    "sqlite3/test" )
-
-    m.addPackage( "${PN}-stringold", "Python string APIs [deprecated]", "${PN}-core ${PN}-re",
-    "lib-dynload/strop.*.so string.* stringold.*" )
-
-    m.addPackage( "${PN}-syslog", "Python syslog interface", "${PN}-core",
-    "lib-dynload/syslog.*.so" )
-
-    m.addPackage( "${PN}-terminal", "Python terminal controlling support", "${PN}-core ${PN}-io",
-    "pty.* tty.*" )
-
-    m.addPackage( "${PN}-tests", "Python tests", "${PN}-core ${PN}-compression",
-    "test", True ) # package
-
-    m.addPackage( "${PN}-threading", "Python threading & synchronization support", "${PN}-core ${PN}-lang",
-    "_threading_local.* dummy_thread.* dummy_threading.* mutex.* threading.* queue.*" )
-
-    m.addPackage( "${PN}-tkinter", "Python Tcl/Tk bindings", "${PN}-core",
-    "lib-dynload/_tkinter.*.so lib-tk tkinter" ) # package
-
-    m.addPackage( "${PN}-typing", "Python typing support", "${PN}-core",
-    "typing.*" )
-
-    m.addPackage( "${PN}-unittest", "Python unit testing framework", "${PN}-core ${PN}-stringold ${PN}-lang ${PN}-io ${PN}-difflib ${PN}-pprint ${PN}-shell",
-    "unittest/" )
-
-    m.addPackage( "${PN}-unixadmin", "Python Unix administration support", "${PN}-core",
-    "lib-dynload/nis.*.so lib-dynload/grp.*.so lib-dynload/pwd.*.so getpass.*" )
-
-    m.addPackage( "${PN}-xml", "Python basic XML support", "${PN}-core ${PN}-re",
-    "lib-dynload/_elementtree.*.so lib-dynload/pyexpat.*.so xml xmllib.*" ) # package
-
-    m.addPackage( "${PN}-xmlrpc", "Python XML-RPC support", "${PN}-core ${PN}-xml ${PN}-netserver ${PN}-lang ${PN}-pydoc",
-    "xmlrpclib.* SimpleXMLRPCServer.* DocXMLRPCServer.* xmlrpc" )
-
-    m.addPackage( "${PN}-mailbox", "Python mailbox format support", "${PN}-core ${PN}-mime",
-    "mailbox.*" )
-
-    m.make()
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 03/19] python3: fix RDEPENDS on several recipes, due to non-existent python3 packages
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
  2017-12-08 22:45 ` [PATCH v2 01/19] python: Restructure python packaging and replace it with autopackaging Tim Orling
  2017-12-08 22:45 ` [PATCH v2 02/19] python3: Restructure python3 " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 04/19] hwlatdetect: fix RDEPENDS to avoid QA failures Tim Orling
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

From: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>

Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
---
 meta/recipes-core/libxml/libxml2_2.9.7.bb          |  2 +-
 .../bootchart2/bootchart2_0.14.8.bb                |  2 +-
 meta/recipes-devtools/dnf/dnf_2.6.3.bb             | 26 ++++++++++++++++++++--
 meta/recipes-devtools/gdb/gdb-cross-canadian.inc   |  4 ++--
 .../opkg-utils/opkg-utils_0.3.5.bb                 |  2 +-
 .../python-numpy/python3-numpy_1.13.3.bb           |  2 --
 .../recipes-devtools/python/python3-async_0.6.2.bb |  2 +-
 meta/recipes-devtools/python/python3-git_2.1.7.bb  |  2 +-
 .../recipes-devtools/python/python3-gitdb_0.6.4.bb |  2 +-
 meta/recipes-devtools/python/python3-pip_9.0.1.bb  |  1 -
 .../python/python3-pygobject_3.26.0.bb             |  2 +-
 .../python/python3-setuptools_36.5.0.bb            |  3 ---
 .../recipes-devtools/python/python3-smmap_0.9.0.bb |  2 +-
 .../qemu/nativesdk-qemu-helper_1.0.bb              |  2 +-
 meta/recipes-graphics/piglit/piglit_git.bb         |  4 ++--
 meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb        |  2 +-
 meta/recipes-rt/rt-tests/rt-tests_1.1.bb           |  2 +-
 17 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/meta/recipes-core/libxml/libxml2_2.9.7.bb b/meta/recipes-core/libxml/libxml2_2.9.7.bb
index 996e671ae04..1f755fcc1fa 100644
--- a/meta/recipes-core/libxml/libxml2_2.9.7.bb
+++ b/meta/recipes-core/libxml/libxml2_2.9.7.bb
@@ -39,7 +39,7 @@ inherit autotools pkgconfig binconfig-disabled ptest
 
 inherit ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3native', '', d)}
 
-RDEPENDS_${PN}-ptest += "make ${@bb.utils.contains('PACKAGECONFIG', 'python', 'libgcc python3-core python3-argparse python3-logging python3-shell python3-signal python3-stringold python3-threading python3-unittest ${PN}-python', '', d)}"
+RDEPENDS_${PN}-ptest += "make ${@bb.utils.contains('PACKAGECONFIG', 'python', 'libgcc python3-core python3-logging python3-shell  python3-stringold python3-threading python3-unittest ${PN}-python', '', d)}"
 
 RDEPENDS_${PN}-python += "${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3-core', '', d)}"
 
diff --git a/meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb b/meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb
index a3101351ee7..c047be1e85b 100644
--- a/meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb
+++ b/meta/recipes-devtools/bootchart2/bootchart2_0.14.8.bb
@@ -139,7 +139,7 @@ do_install () {
 
 PACKAGES =+ "pybootchartgui"
 FILES_pybootchartgui += "${PYTHON_SITEPACKAGES_DIR}/pybootchartgui ${bindir}/pybootchartgui"
-RDEPENDS_pybootchartgui = "python3-pycairo python3-compression python3-image python3-textutils python3-shell python3-compression python3-codecs"
+RDEPENDS_pybootchartgui = "python3-pycairo python3-compression python3-image python3-shell python3-compression python3-codecs"
 RDEPENDS_${PN}_class-target += "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'sysvinit-pidof', 'procps', d)}"
 RDEPENDS_${PN}_class-target += "lsb"
 DEPENDS_append_class-native = " python3-pycairo-native"
diff --git a/meta/recipes-devtools/dnf/dnf_2.6.3.bb b/meta/recipes-devtools/dnf/dnf_2.6.3.bb
index 3ed6a74570f..39d9b92f6ec 100644
--- a/meta/recipes-devtools/dnf/dnf_2.6.3.bb
+++ b/meta/recipes-devtools/dnf/dnf_2.6.3.bb
@@ -26,8 +26,30 @@ DEPENDS += "libdnf librepo libcomps python3-iniparse"
 EXTRA_OECMAKE = " -DWITH_MAN=0 -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
 
 BBCLASSEXTEND = "native nativesdk"
-RDEPENDS_${PN}_class-target += "python3-core python3-codecs python3-netclient python3-email python3-threading python3-distutils librepo python3-shell python3-subprocess libcomps libdnf python3-sqlite3 python3-compression python3-rpm python3-iniparse python3-json python3-importlib python3-curses python3-argparse python3-misc python3-gpg"
-# Recommend gnupg so that GPG signature check on repository metadata is possible
+
+RDEPENDS_${PN}_class-target += " \
+  python3-core \
+  python3-codecs \
+  python3-netclient \
+  python3-email \
+  python3-threading \
+  python3-distutils \
+  python3-logging \
+  python3-fcntl \
+  librepo \
+  python3-shell \
+  libcomps \
+  libdnf \
+  python3-sqlite3 \
+  python3-compression \
+  python3-rpm \
+  python3-iniparse \
+  python3-json \
+  python3-curses \
+  python3-misc \
+  python3-gpg \
+  "
+
 RRECOMMENDS_${PN}_class-target += "gnupg"
 
 # Create a symlink called 'dnf' as 'make install' does not do it, but
diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian.inc b/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
index 3ff19895388..4fc6747d9da 100644
--- a/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
+++ b/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
@@ -13,9 +13,9 @@ GDBPROPREFIX = "--program-prefix='${TARGET_PREFIX}'"
 # Overrides PACKAGECONFIG variables in gdb-common.inc
 PACKAGECONFIG ??= "python readline"
 PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,nativesdk-python3, \
-                         nativesdk-python3-core nativesdk-python3-lang nativesdk-python3-re \
+                         nativesdk-python3-core \
                          nativesdk-python3-codecs nativesdk-python3-netclient \
-                         nativesdk-python3-importlib"
+                         "
 PACKAGECONFIG[readline] = "--with-system-readline,--without-system-readline,nativesdk-readline"
 
 SSTATE_DUPWHITELIST += "${STAGING_DATADIR}/gdb"
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils_0.3.5.bb b/meta/recipes-devtools/opkg-utils/opkg-utils_0.3.5.bb
index 514ba7912a3..e9ba9de0948 100644
--- a/meta/recipes-devtools/opkg-utils/opkg-utils_0.3.5.bb
+++ b/meta/recipes-devtools/opkg-utils/opkg-utils_0.3.5.bb
@@ -20,7 +20,7 @@ SRC_URI[sha256sum] = "7f4b08912e26a3f4f6f423f3b4e7157a73b1f3a7483fc59b216d1a80b5
 TARGET_CC_ARCH += "${LDFLAGS}"
 
 # For native builds we use the host Python
-PYTHONRDEPS = "python3 python3-shell python3-io python3-math python3-crypt python3-logging python3-fcntl python3-subprocess python3-pickle python3-compression python3-textutils python3-stringold"
+PYTHONRDEPS = "python3 python3-shell python3-io python3-math python3-crypt python3-logging python3-fcntl python3-pickle python3-compression python3-stringold"
 PYTHONRDEPS_class-native = ""
 
 PACKAGECONFIG = "python update-alternatives"
diff --git a/meta/recipes-devtools/python-numpy/python3-numpy_1.13.3.bb b/meta/recipes-devtools/python-numpy/python3-numpy_1.13.3.bb
index 42b2a18a5b8..277c21f9da4 100644
--- a/meta/recipes-devtools/python-numpy/python3-numpy_1.13.3.bb
+++ b/meta/recipes-devtools/python-numpy/python3-numpy_1.13.3.bb
@@ -102,11 +102,9 @@ RDEPENDS_${PN} = "python3-unittest \
                   python3-pydoc \
                   python3-pkgutil \
                   python3-email \
-                  python3-subprocess \
                   python3-compression \
                   python3-ctypes \
                   python3-threading \
-                  python3-textutils \
 "
 
 RDEPENDS_${PN}_class-native = ""
diff --git a/meta/recipes-devtools/python/python3-async_0.6.2.bb b/meta/recipes-devtools/python/python3-async_0.6.2.bb
index 54a30f5498e..f45781c44f8 100644
--- a/meta/recipes-devtools/python/python3-async_0.6.2.bb
+++ b/meta/recipes-devtools/python/python3-async_0.6.2.bb
@@ -2,5 +2,5 @@ require python-async.inc
 
 inherit setuptools3
 
-RDEPENDS_${PN} += "python3-threading python3-lang"
+RDEPENDS_${PN} += "python3-threading"
 
diff --git a/meta/recipes-devtools/python/python3-git_2.1.7.bb b/meta/recipes-devtools/python/python3-git_2.1.7.bb
index 4ac2a0ec799..ca42688f97e 100644
--- a/meta/recipes-devtools/python/python3-git_2.1.7.bb
+++ b/meta/recipes-devtools/python/python3-git_2.1.7.bb
@@ -4,4 +4,4 @@ DEPENDS = "python3-gitdb"
 
 inherit setuptools3
 
-RDEPENDS_${PN} += "python3-gitdb python3-lang python3-io python3-shell python3-math python3-re python3-subprocess python3-stringold python3-unixadmin python3-enum python3-logging python3-datetime python3-netclient python3-unittest python3-argparse git"
+RDEPENDS_${PN} += "python3-gitdb python3-io python3-shell python3-math python3-stringold python3-unixadmin python3-logging python3-datetime python3-netclient python3-unittest git"
diff --git a/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb b/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb
index 80d9d469aff..a209c52f9ee 100644
--- a/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb
+++ b/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb
@@ -4,4 +4,4 @@ DEPENDS = "python3-async python3-smmap"
 
 inherit distutils3
 
-RDEPENDS_${PN} += "python3-smmap python3-async python3-mmap python3-lang python3-io python3-shell python3-crypt python3-compression"
+RDEPENDS_${PN} += "python3-smmap python3-async python3-mmap python3-io python3-shell python3-crypt python3-compression"
diff --git a/meta/recipes-devtools/python/python3-pip_9.0.1.bb b/meta/recipes-devtools/python/python3-pip_9.0.1.bb
index 9b907a26319..a6dd72df3b1 100644
--- a/meta/recipes-devtools/python/python3-pip_9.0.1.bb
+++ b/meta/recipes-devtools/python/python3-pip_9.0.1.bb
@@ -44,7 +44,6 @@ do_install_append() {
 RDEPENDS_${PN} = "\
   python3-compile \
   python3-io \
-  python3-enum \
   python3-html \
   python3-json \
   python3-netserver \
diff --git a/meta/recipes-devtools/python/python3-pygobject_3.26.0.bb b/meta/recipes-devtools/python/python3-pygobject_3.26.0.bb
index f368e6cce94..10a4650185e 100644
--- a/meta/recipes-devtools/python/python3-pygobject_3.26.0.bb
+++ b/meta/recipes-devtools/python/python3-pygobject_3.26.0.bb
@@ -24,7 +24,7 @@ PACKAGECONFIG ??= "${@bb.utils.contains_any('DISTRO_FEATURES', [ 'directfb', 'wa
 # we don't link against python3-pycairo -> RDEPENDS
 PACKAGECONFIG[cairo] = "--enable-cairo,--disable-cairo,cairo python3-pycairo, python3-pycairo"
 
-RDEPENDS_${PN} += "python3-setuptools python3-importlib"
+RDEPENDS_${PN} += "python3-setuptools"
 
 BBCLASSEXTEND = "native"
 PACKAGECONFIG_class-native = ""
diff --git a/meta/recipes-devtools/python/python3-setuptools_36.5.0.bb b/meta/recipes-devtools/python/python3-setuptools_36.5.0.bb
index 63f241809e0..dab8ad89b01 100644
--- a/meta/recipes-devtools/python/python3-setuptools_36.5.0.bb
+++ b/meta/recipes-devtools/python/python3-setuptools_36.5.0.bb
@@ -23,12 +23,9 @@ RDEPENDS_${PN} = "\
   python3-ctypes \
   python3-distutils \
   python3-email \
-  python3-importlib \
   python3-numbers \
   python3-compression \
   python3-shell \
-  python3-subprocess \
-  python3-textutils \
   python3-pkgutil \
   python3-threading \
   python3-misc \
diff --git a/meta/recipes-devtools/python/python3-smmap_0.9.0.bb b/meta/recipes-devtools/python/python3-smmap_0.9.0.bb
index 9f8a26d79ed..1df74c172c4 100644
--- a/meta/recipes-devtools/python/python3-smmap_0.9.0.bb
+++ b/meta/recipes-devtools/python/python3-smmap_0.9.0.bb
@@ -2,4 +2,4 @@ require python-smmap.inc
 
 inherit setuptools3
 
-RDEPENDS_${PN} += "python3-codecs python3-mmap python3-lang"
+RDEPENDS_${PN} += "python3-codecs python3-mmap"
diff --git a/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb b/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
index 943ca5f89dc..1a9ad5cc2b9 100644
--- a/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
+++ b/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
@@ -1,6 +1,6 @@
 SUMMARY = "Qemu helper scripts"
 LICENSE = "GPLv2"
-RDEPENDS_${PN} = "nativesdk-qemu nativesdk-python3-subprocess \
+RDEPENDS_${PN} = "nativesdk-qemu \
                   nativesdk-python3-shell nativesdk-python3-fcntl \
                 "
 
diff --git a/meta/recipes-graphics/piglit/piglit_git.bb b/meta/recipes-graphics/piglit/piglit_git.bb
index bbe9a88969e..26b36aa743a 100644
--- a/meta/recipes-graphics/piglit/piglit_git.bb
+++ b/meta/recipes-graphics/piglit/piglit_git.bb
@@ -45,9 +45,9 @@ do_install() {
 }
 
 RDEPENDS_${PN} = "waffle python3 python3-mako python3-json \
-	python3-subprocess python3-misc python3-importlib \
+	python3-misc \
 	python3-unixadmin python3-xml python3-multiprocessing \
-	python3-six python3-shell python3-io python3-argparse \
+	python3-six python3-shell python3-io \
 	python3-netserver mesa-demos bash \
 	"
 
diff --git a/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb b/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
index 012b2dd0a7d..60b44a4d258 100644
--- a/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
+++ b/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
@@ -22,5 +22,5 @@ do_install() {
 }
 
 FILES_${PN} += "${libdir}/python${PYTHON_BASEVERSION}/dist-packages/hwlatdetect.py"
-RDEPENDS_${PN} = "python3 python3-subprocess python3-textutils"
+RDEPENDS_${PN} = "python3 "
 RRECOMMENDS_${PN} = "kernel-module-hwlat-detector"
diff --git a/meta/recipes-rt/rt-tests/rt-tests_1.1.bb b/meta/recipes-rt/rt-tests/rt-tests_1.1.bb
index 4336c50d631..496f04fdbae 100644
--- a/meta/recipes-rt/rt-tests/rt-tests_1.1.bb
+++ b/meta/recipes-rt/rt-tests/rt-tests_1.1.bb
@@ -26,6 +26,6 @@ do_install_ptest() {
         cp ${WORKDIR}/rt_bmark.py ${D}${PTEST_PATH}
 }
 
-RDEPENDS_${PN}-ptest += " stress python3 python3-subprocess python3-multiprocessing python3-datetime python3-re python3-lang python3-misc"
+RDEPENDS_${PN}-ptest += " stress python3 python3-multiprocessing python3-datetime python3-misc"
 
 FILES_${PN} += "${prefix}/src/backfire"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 04/19] hwlatdetect: fix RDEPENDS to avoid QA failures
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (2 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 03/19] python3: fix RDEPENDS on several recipes, due to non-existent python3 packages Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 05/19] python-scons: Remove python-importlib dependency Tim Orling
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

From: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>

When listing python3 as an RDEPENDS, the image will in fact
contain python3-modules, but the QA check fails to get
RPROVIDERS correctly (since the python3 package does not
actually exist), /usr/bin/python3 is provided by the
python3-core package, so by fixing the RDEPENDS and listing
python3-core instead of python3, the QA check works correctly
and we avoid failures.

Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
---
 meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb b/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
index 60b44a4d258..5f61c4ecddc 100644
--- a/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
+++ b/meta/recipes-rt/rt-tests/hwlatdetect_1.1.bb
@@ -22,5 +22,5 @@ do_install() {
 }
 
 FILES_${PN} += "${libdir}/python${PYTHON_BASEVERSION}/dist-packages/hwlatdetect.py"
-RDEPENDS_${PN} = "python3 "
+RDEPENDS_${PN} = "python3-core "
 RRECOMMENDS_${PN} = "kernel-module-hwlat-detector"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 05/19] python-scons: Remove python-importlib dependency
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (3 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 04/19] hwlatdetect: fix RDEPENDS to avoid QA failures Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 06/19] pypi.bbclass: bring in from meta-python Tim Orling
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

From: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>

With the new manifest python-importlib became part of python-core
(it was being installed anyway), so now the package cant be found
and it shouldnt be listed as a dependency, this patch fixes
python-scons RDEPENDS to avoid dependency errors.

Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
---
 meta/recipes-devtools/python/python-scons_3.0.0.bb | 1 -
 1 file changed, 1 deletion(-)

diff --git a/meta/recipes-devtools/python/python-scons_3.0.0.bb b/meta/recipes-devtools/python/python-scons_3.0.0.bb
index 8fe74f4b3c1..e780c542e4a 100644
--- a/meta/recipes-devtools/python/python-scons_3.0.0.bb
+++ b/meta/recipes-devtools/python/python-scons_3.0.0.bb
@@ -24,5 +24,4 @@ RDEPENDS_${PN} = "\
   python-subprocess \
   python-shell \
   python-pprint \
-  python-importlib \
   "
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 06/19] pypi.bbclass: bring in from meta-python
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (4 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 05/19] python-scons: Remove python-importlib dependency Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 07/19] python2 create_manifest.py: fix trailing whitespace in json Tim Orling
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

The pypi.bbclass has usefullness in many meta layers, not
just meta-python. Add it to oe-core for the benefit of
everyone.

Documentation strings for PYPI_PACKAGE, PYPI_PACKAGE_EXT and
PYPI_SRC_URI added to meta/conf/documentation.conf

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/classes/pypi.bbclass    | 26 ++++++++++++++++++++++++++
 meta/conf/documentation.conf |  3 +++
 2 files changed, 29 insertions(+)
 create mode 100644 meta/classes/pypi.bbclass

diff --git a/meta/classes/pypi.bbclass b/meta/classes/pypi.bbclass
new file mode 100644
index 00000000000..e5d7ab3ce10
--- /dev/null
+++ b/meta/classes/pypi.bbclass
@@ -0,0 +1,26 @@
+def pypi_package(d):
+    bpn = d.getVar('BPN')
+    if bpn.startswith('python-'):
+        return bpn[7:]
+    elif bpn.startswith('python3-'):
+        return bpn[8:]
+    return bpn
+
+PYPI_PACKAGE ?= "${@pypi_package(d)}"
+PYPI_PACKAGE_EXT ?= "tar.gz"
+
+def pypi_src_uri(d):
+    package = d.getVar('PYPI_PACKAGE')
+    package_ext = d.getVar('PYPI_PACKAGE_EXT')
+    pv = d.getVar('PV')
+    return 'https://files.pythonhosted.org/packages/source/%s/%s/%s-%s.%s' % (package[0], package, package, pv, package_ext)
+
+PYPI_SRC_URI ?= "${@pypi_src_uri(d)}"
+
+HOMEPAGE ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/"
+SECTION = "devel/python"
+SRC_URI += "${PYPI_SRC_URI}"
+S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}"
+
+UPSTREAM_CHECK_URI ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/"
+UPSTREAM_CHECK_REGEX ?= "/${PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)"
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index a55e2836b5e..081e726d4b8 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -338,6 +338,9 @@ PRIORITY[doc] = "Indicates the importance of a package.  The default value is 'o
 PROVIDES[doc] = "A list of aliases that a recipe also provides. These aliases are useful for satisfying dependencies of other recipes during the build as specified by DEPENDS."
 PRSERV_HOST[doc] = "The network based PR service host and port."
 PV[doc] = "The version of the recipe. The version is normally extracted from the recipe filename."
+PYPI_PACKAGE[doc] = "The python package name to use for fetching from pypi. Default is parsed from the recipe name, but can be overridden if upstream name is different than recipe name."
+PYPI_PACKAGE_EXT[doc] = "The archive file extension to use for fetching from pypi. Default is tar.gz, but can be overridden if upstream uses a different compression scheme."
+PYPI_SRC_URI[doc] = "The URI to use to fetch from pypi, default uses pythonhosted.org and is constructed from PYPI_PACKAGE, PYPI_PACKAGE_EXT and PV."
 
 #Q
 
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 07/19] python2 create_manifest.py: fix trailing whitespace in json
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (5 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 06/19] pypi.bbclass: bring in from meta-python Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 08/19] python*-manifest.json: add dependencies, runpy Tim Orling
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

The json.dumps function adds trailing whitespace when using
indent, because the default separator is not ','.

The workaround [1] is to set the separators to be ',' and ': ',
e.g. separators=(',', ': ')

[1] https://hg.python.org/cpython/rev/78bad589f205

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python/create_manifest2.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-devtools/python/python/create_manifest2.py b/meta/recipes-devtools/python/python/create_manifest2.py
index bd64ec3ee74..e7450452ba5 100644
--- a/meta/recipes-devtools/python/python/create_manifest2.py
+++ b/meta/recipes-devtools/python/python/create_manifest2.py
@@ -274,4 +274,4 @@ for key in new_manifest:
 
 # Create the manifest from the data structure that was built
 with open('python2-manifest.json.new','w') as outfile:
-    json.dump(new_manifest,outfile,sort_keys=True, indent=4)
+    json.dump(new_manifest,outfile,sort_keys=True, indent=4, separators=(',', ': '))
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 08/19] python*-manifest.json: add dependencies, runpy
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (6 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 07/19] python2 create_manifest.py: fix trailing whitespace in json Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 09/19] python*-setuptools: upgrade to 38.2.3; use pypi.bbclass; improvements Tim Orling
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* runpy allows running modules/scripts with 'python -m foo'
  - create explicit python2 and 3 packages rather than the
    misc catchall
* python3-setuptools and html.parser RDEPENDS on _markupbase
  - add to python3-core rather than misc catchall
* pip3 RDEPENDS on plistlib, http.client
  - already packaged in python2, add to python3
  - add http/ to -netclient
* "pip3 install" RDEPENDS on encodingds.idna
  - encodings.idna packaged in -core, but missing:
    - stringprep (move from -codecs to -core)
    - unicodedata (move from -codecs to -core)

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 .../python/python/python2-manifest.json            | 1295 ++++++++++----------
 .../python/python3/python3-manifest.json           |   41 +-
 2 files changed, 690 insertions(+), 646 deletions(-)

diff --git a/meta/recipes-devtools/python/python/python2-manifest.json b/meta/recipes-devtools/python/python/python2-manifest.json
index 2e325971556..a0321ee7d06 100644
--- a/meta/recipes-devtools/python/python/python2-manifest.json
+++ b/meta/recipes-devtools/python/python/python2-manifest.json
@@ -1,1033 +1,1044 @@
 {
     "2to3": {
         "files": [
-            "${bindir}/2to3", 
+            "${bindir}/2to3",
             "${libdir}/python2.7/lib2to3"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python automated Python 2 to 3 code translator"
-    }, 
+    },
     "argparse": {
         "files": [
             "${libdir}/python2.7/argparse.py"
-        ], 
+        ],
         "rdepends": [
-            "codecs", 
-            "core", 
-            "lang", 
+            "codecs",
+            "core",
+            "lang",
             "textutils"
-        ], 
+        ],
         "summary": "Python command line argument parser"
-    }, 
+    },
     "audio": {
         "files": [
-            "${libdir}/python2.7/audiodev.py", 
-            "${libdir}/python2.7/chunk.py", 
-            "${libdir}/python2.7/lib-dynload/audioop.so", 
-            "${libdir}/python2.7/lib-dynload/ossaudiodev.so", 
-            "${libdir}/python2.7/sndhdr.py", 
-            "${libdir}/python2.7/sunau.py", 
-            "${libdir}/python2.7/sunaudio.py", 
-            "${libdir}/python2.7/toaiff.py", 
+            "${libdir}/python2.7/audiodev.py",
+            "${libdir}/python2.7/chunk.py",
+            "${libdir}/python2.7/lib-dynload/audioop.so",
+            "${libdir}/python2.7/lib-dynload/ossaudiodev.so",
+            "${libdir}/python2.7/sndhdr.py",
+            "${libdir}/python2.7/sunau.py",
+            "${libdir}/python2.7/sunaudio.py",
+            "${libdir}/python2.7/toaiff.py",
             "${libdir}/python2.7/wave.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "crypt", 
-            "fcntl", 
-            "io", 
+            "core",
+            "crypt",
+            "fcntl",
+            "io",
             "math"
-        ], 
+        ],
         "summary": "Python Audio Handling"
-    }, 
+    },
     "bsddb": {
         "files": [
-            "${libdir}/python2.7/bsddb", 
+            "${libdir}/python2.7/bsddb",
             "${libdir}/python2.7/lib-dynload/_bsddb.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python bindings for the Berkeley Database"
-    }, 
+    },
     "codecs": {
         "files": [
-            "${libdir}/python2.7/gettext.py", 
-            "${libdir}/python2.7/lib-dynload/_codecs_cn.so", 
-            "${libdir}/python2.7/lib-dynload/_codecs_hk.so", 
-            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so", 
-            "${libdir}/python2.7/lib-dynload/_codecs_jp.so", 
-            "${libdir}/python2.7/lib-dynload/_codecs_kr.so", 
-            "${libdir}/python2.7/lib-dynload/_codecs_tw.so", 
-            "${libdir}/python2.7/lib-dynload/_multibytecodec.so", 
-            "${libdir}/python2.7/lib-dynload/unicodedata.so", 
-            "${libdir}/python2.7/locale.py", 
-            "${libdir}/python2.7/stringprep.py", 
+            "${libdir}/python2.7/gettext.py",
+            "${libdir}/python2.7/lib-dynload/_codecs_cn.so",
+            "${libdir}/python2.7/lib-dynload/_codecs_hk.so",
+            "${libdir}/python2.7/lib-dynload/_codecs_iso2022.so",
+            "${libdir}/python2.7/lib-dynload/_codecs_jp.so",
+            "${libdir}/python2.7/lib-dynload/_codecs_kr.so",
+            "${libdir}/python2.7/lib-dynload/_codecs_tw.so",
+            "${libdir}/python2.7/lib-dynload/_multibytecodec.so",
+            "${libdir}/python2.7/lib-dynload/unicodedata.so",
+            "${libdir}/python2.7/locale.py",
+            "${libdir}/python2.7/stringprep.py",
             "${libdir}/python2.7/xdrlib.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "io", 
+            "core",
+            "io",
             "lang"
-        ], 
+        ],
         "summary": "Python codec"
-    }, 
+    },
     "compile": {
         "files": [
-            "${libdir}/python2.7/compileall.py", 
+            "${libdir}/python2.7/compileall.py",
             "${libdir}/python2.7/py_compile.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python bytecode compilation support"
-    }, 
+    },
     "compiler": {
         "files": [
             "${libdir}/python2.7/compiler"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "io", 
+            "core",
+            "io",
             "lang"
-        ], 
+        ],
         "summary": "Python compiler support"
-    }, 
+    },
     "compression": {
         "files": [
-            "${libdir}/python2.7/gzip.py", 
-            "${libdir}/python2.7/lib-dynload/bz2.so", 
-            "${libdir}/python2.7/tarfile.py", 
+            "${libdir}/python2.7/gzip.py",
+            "${libdir}/python2.7/lib-dynload/bz2.so",
+            "${libdir}/python2.7/tarfile.py",
             "${libdir}/python2.7/zipfile.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "io", 
-            "shell", 
-            "unixadmin", 
+            "core",
+            "io",
+            "shell",
+            "unixadmin",
             "zlib"
-        ], 
+        ],
         "summary": "Python high-level compression support"
-    }, 
+    },
     "contextlib": {
         "files": [
             "${libdir}/python2.7/contextlib.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "lang"
-        ], 
+        ],
         "summary": "Python utilities for with-statementcontexts."
-    }, 
+    },
     "core": {
         "files": [
-            "${bindir}/python*", 
-            "${includedir}/python2.7/pyconfig*.h", 
-            "${libdir}/python2.7/ConfigParser.py", 
-            "${libdir}/python2.7/UserDict.py", 
-            "${libdir}/python2.7/UserList.py", 
-            "${libdir}/python2.7/UserString.py", 
-            "${libdir}/python2.7/__future__.py", 
-            "${libdir}/python2.7/_abcoll.py", 
-            "${libdir}/python2.7/_sysconfigdata.py", 
-            "${libdir}/python2.7/_weakrefset.py", 
-            "${libdir}/python2.7/abc.py", 
-            "${libdir}/python2.7/ast.py", 
-            "${libdir}/python2.7/atexit.py", 
-            "${libdir}/python2.7/codecs.py", 
-            "${libdir}/python2.7/collections.py", 
-            "${libdir}/python2.7/copy.py", 
-            "${libdir}/python2.7/copy_reg.py", 
-            "${libdir}/python2.7/encodings", 
-            "${libdir}/python2.7/encodings/aliases.py", 
-            "${libdir}/python2.7/encodings/utf_8.py", 
-            "${libdir}/python2.7/genericpath.py", 
-            "${libdir}/python2.7/getopt.py", 
-            "${libdir}/python2.7/heapq.py", 
-            "${libdir}/python2.7/importlib", 
-            "${libdir}/python2.7/keyword.py", 
-            "${libdir}/python2.7/lib-dynload/_collections.so", 
-            "${libdir}/python2.7/lib-dynload/_heapq.so", 
-            "${libdir}/python2.7/lib-dynload/_locale.so", 
-            "${libdir}/python2.7/lib-dynload/_struct.so", 
-            "${libdir}/python2.7/lib-dynload/binascii.so", 
-            "${libdir}/python2.7/lib-dynload/itertools.so", 
-            "${libdir}/python2.7/lib-dynload/operator.so", 
-            "${libdir}/python2.7/lib-dynload/readline.so", 
-            "${libdir}/python2.7/lib-dynload/strop.so", 
-            "${libdir}/python2.7/lib-dynload/time.so", 
-            "${libdir}/python2.7/lib-dynload/xreadlines.so", 
-            "${libdir}/python2.7/linecache.py", 
-            "${libdir}/python2.7/new.py", 
-            "${libdir}/python2.7/os.py", 
-            "${libdir}/python2.7/platform.py", 
-            "${libdir}/python2.7/posixpath.py", 
-            "${libdir}/python2.7/re.py", 
-            "${libdir}/python2.7/rlcompleter.py", 
-            "${libdir}/python2.7/site.py", 
-            "${libdir}/python2.7/sitecustomize.py", 
-            "${libdir}/python2.7/sre_compile.py", 
-            "${libdir}/python2.7/sre_constants.py", 
-            "${libdir}/python2.7/sre_parse.py", 
-            "${libdir}/python2.7/stat.py", 
-            "${libdir}/python2.7/string.py", 
-            "${libdir}/python2.7/struct.py", 
-            "${libdir}/python2.7/sysconfig.py", 
-            "${libdir}/python2.7/traceback.py", 
-            "${libdir}/python2.7/types.py", 
-            "${libdir}/python2.7/warnings.py", 
+            "${bindir}/python*",
+            "${includedir}/python2.7/pyconfig*.h",
+            "${libdir}/python2.7/ConfigParser.py",
+            "${libdir}/python2.7/UserDict.py",
+            "${libdir}/python2.7/UserList.py",
+            "${libdir}/python2.7/UserString.py",
+            "${libdir}/python2.7/__future__.py",
+            "${libdir}/python2.7/_abcoll.py",
+            "${libdir}/python2.7/_sysconfigdata.py",
+            "${libdir}/python2.7/_weakrefset.py",
+            "${libdir}/python2.7/abc.py",
+            "${libdir}/python2.7/ast.py",
+            "${libdir}/python2.7/atexit.py",
+            "${libdir}/python2.7/codecs.py",
+            "${libdir}/python2.7/collections.py",
+            "${libdir}/python2.7/copy.py",
+            "${libdir}/python2.7/copy_reg.py",
+            "${libdir}/python2.7/encodings",
+            "${libdir}/python2.7/encodings/aliases.py",
+            "${libdir}/python2.7/encodings/utf_8.py",
+            "${libdir}/python2.7/genericpath.py",
+            "${libdir}/python2.7/getopt.py",
+            "${libdir}/python2.7/heapq.py",
+            "${libdir}/python2.7/importlib",
+            "${libdir}/python2.7/keyword.py",
+            "${libdir}/python2.7/lib-dynload/_collections.so",
+            "${libdir}/python2.7/lib-dynload/_heapq.so",
+            "${libdir}/python2.7/lib-dynload/_locale.so",
+            "${libdir}/python2.7/lib-dynload/_struct.so",
+            "${libdir}/python2.7/lib-dynload/binascii.so",
+            "${libdir}/python2.7/lib-dynload/itertools.so",
+            "${libdir}/python2.7/lib-dynload/operator.so",
+            "${libdir}/python2.7/lib-dynload/readline.so",
+            "${libdir}/python2.7/lib-dynload/strop.so",
+            "${libdir}/python2.7/lib-dynload/time.so",
+            "${libdir}/python2.7/lib-dynload/xreadlines.so",
+            "${libdir}/python2.7/linecache.py",
+            "${libdir}/python2.7/new.py",
+            "${libdir}/python2.7/os.py",
+            "${libdir}/python2.7/platform.py",
+            "${libdir}/python2.7/posixpath.py",
+            "${libdir}/python2.7/re.py",
+            "${libdir}/python2.7/rlcompleter.py",
+            "${libdir}/python2.7/site.py",
+            "${libdir}/python2.7/sitecustomize.py",
+            "${libdir}/python2.7/sre_compile.py",
+            "${libdir}/python2.7/sre_constants.py",
+            "${libdir}/python2.7/sre_parse.py",
+            "${libdir}/python2.7/stat.py",
+            "${libdir}/python2.7/string.py",
+            "${libdir}/python2.7/struct.py",
+            "${libdir}/python2.7/sysconfig.py",
+            "${libdir}/python2.7/traceback.py",
+            "${libdir}/python2.7/types.py",
+            "${libdir}/python2.7/warnings.py",
             "${libdir}/python2.7/weakref.py"
-        ], 
-        "rdepends": [], 
+        ],
+        "rdepends": [],
         "summary": "Python interpreter and core modules"
-    }, 
+    },
     "crypt": {
         "files": [
-            "${libdir}/python2.7/hashlib.py", 
-            "${libdir}/python2.7/lib-dynload/_hashlib.so", 
-            "${libdir}/python2.7/lib-dynload/crypt.so", 
-            "${libdir}/python2.7/md5.py", 
+            "${libdir}/python2.7/hashlib.py",
+            "${libdir}/python2.7/lib-dynload/_hashlib.so",
+            "${libdir}/python2.7/lib-dynload/crypt.so",
+            "${libdir}/python2.7/md5.py",
             "${libdir}/python2.7/sha.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python basic cryptographic and hashing support"
-    }, 
+    },
     "ctypes": {
         "files": [
-            "${libdir}/python2.7/ctypes", 
-            "${libdir}/python2.7/lib-dynload/_ctypes.so", 
+            "${libdir}/python2.7/ctypes",
+            "${libdir}/python2.7/lib-dynload/_ctypes.so",
             "${libdir}/python2.7/lib-dynload/_ctypes_test.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python C types support"
-    }, 
+    },
     "curses": {
         "files": [
-            "${libdir}/python2.7/curses", 
-            "${libdir}/python2.7/lib-dynload/_curses.so", 
+            "${libdir}/python2.7/curses",
+            "${libdir}/python2.7/lib-dynload/_curses.so",
             "${libdir}/python2.7/lib-dynload/_curses_panel.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python curses support"
-    }, 
+    },
     "datetime": {
         "files": [
-            "${libdir}/python2.7/_strptime.py", 
-            "${libdir}/python2.7/calendar.py", 
+            "${libdir}/python2.7/_strptime.py",
+            "${libdir}/python2.7/calendar.py",
             "${libdir}/python2.7/lib-dynload/datetime.so"
-        ], 
+        ],
         "rdepends": [
-            "codecs", 
-            "core", 
+            "codecs",
+            "core",
             "lang"
-        ], 
+        ],
         "summary": "Python calendar and time support"
-    }, 
+    },
     "db": {
         "files": [
-            "${libdir}/python2.7/anydbm.py", 
-            "${libdir}/python2.7/dbhash.py", 
-            "${libdir}/python2.7/dumbdbm.py", 
-            "${libdir}/python2.7/lib-dynload/dbm.so", 
+            "${libdir}/python2.7/anydbm.py",
+            "${libdir}/python2.7/dbhash.py",
+            "${libdir}/python2.7/dumbdbm.py",
+            "${libdir}/python2.7/lib-dynload/dbm.so",
             "${libdir}/python2.7/whichdb.py"
-        ], 
+        ],
         "rdepends": [
-            "bsddb", 
-            "core", 
+            "bsddb",
+            "core",
             "gdbm"
-        ], 
+        ],
         "summary": "Python file-based database support"
-    }, 
+    },
     "debugger": {
         "files": [
-            "${libdir}/python2.7/bdb.py", 
+            "${libdir}/python2.7/bdb.py",
             "${libdir}/python2.7/pdb.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "io", 
-            "lang", 
-            "pprint", 
+            "core",
+            "io",
+            "lang",
+            "pprint",
             "shell"
-        ], 
+        ],
         "summary": "Python debugger"
-    }, 
+    },
     "dev": {
         "files": [
-            "${base_libdir}/*.a", 
-            "${base_libdir}/*.o", 
-            "${datadir}/aclocal", 
-            "${datadir}/pkgconfig", 
-            "${includedir}", 
-            "${libdir}/*.a", 
-            "${libdir}/*.la", 
-            "${libdir}/*.o", 
-            "${libdir}/lib*${SOLIBSDEV}", 
-            "${libdir}/pkgconfig", 
+            "${base_libdir}/*.a",
+            "${base_libdir}/*.o",
+            "${datadir}/aclocal",
+            "${datadir}/pkgconfig",
+            "${includedir}",
+            "${libdir}/*.a",
+            "${libdir}/*.la",
+            "${libdir}/*.o",
+            "${libdir}/lib*${SOLIBSDEV}",
+            "${libdir}/pkgconfig",
             "${libdir}/python2.7/config/Makefile"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python development package"
-    }, 
+    },
     "difflib": {
         "files": [
             "${libdir}/python2.7/difflib.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "lang"
-        ], 
+        ],
         "summary": "Python helpers for computing deltas between objects"
-    }, 
+    },
     "distutils": {
         "files": [
-            "${libdir}/python2.7/config", 
+            "${libdir}/python2.7/config",
             "${libdir}/python2.7/distutils"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python Distribution Utilities"
-    }, 
+    },
     "distutils-staticdev": {
         "files": [
             "${libdir}/python2.7/config/lib*.a"
-        ], 
+        ],
         "rdepends": [
             "distutils"
-        ], 
+        ],
         "summary": "Python distribution utilities (static libraries)"
-    }, 
+    },
     "doctest": {
         "files": [
             "${libdir}/python2.7/doctest.py"
-        ], 
-        "rdepends": [
-            "core", 
-            "crypt", 
-            "debugger", 
-            "difflib", 
-            "fcntl", 
-            "io", 
-            "lang", 
-            "math", 
-            "pprint", 
-            "shell", 
+        ],
+        "rdepends": [
+            "core",
+            "crypt",
+            "debugger",
+            "difflib",
+            "fcntl",
+            "io",
+            "lang",
+            "math",
+            "pprint",
+            "shell",
             "unittest"
-        ], 
+        ],
         "summary": "Python framework for running examples in docstrings"
-    }, 
+    },
     "email": {
         "files": [
-            "${libdir}/python2.7/email", 
+            "${libdir}/python2.7/email",
             "${libdir}/python2.7/imaplib.py"
-        ], 
-        "rdepends": [
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "fcntl", 
-            "io", 
-            "lang", 
-            "math", 
-            "netclient", 
-            "pickle", 
-            "subprocess", 
+        ],
+        "rdepends": [
+            "contextlib",
+            "core",
+            "crypt",
+            "fcntl",
+            "io",
+            "lang",
+            "math",
+            "netclient",
+            "pickle",
+            "subprocess",
             "textutils"
-        ], 
+        ],
         "summary": "Python email support"
-    }, 
+    },
     "fcntl": {
         "files": [
             "${libdir}/python2.7/lib-dynload/fcntl.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python's fcntl interface"
-    }, 
+    },
     "gdbm": {
         "files": [
             "${libdir}/python2.7/lib-dynload/gdbm.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python GNU database support"
-    }, 
+    },
     "hotshot": {
         "files": [
-            "${libdir}/python2.7/hotshot", 
+            "${libdir}/python2.7/hotshot",
             "${libdir}/python2.7/lib-dynload/_hotshot.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python hotshot performance profiler"
-    }, 
+    },
     "html": {
         "files": [
-            "${libdir}/python2.7/HTMLParser.py", 
-            "${libdir}/python2.7/formatter.py", 
-            "${libdir}/python2.7/htmlentitydefs.py", 
-            "${libdir}/python2.7/htmllib.py", 
-            "${libdir}/python2.7/markupbase.py", 
+            "${libdir}/python2.7/HTMLParser.py",
+            "${libdir}/python2.7/formatter.py",
+            "${libdir}/python2.7/htmlentitydefs.py",
+            "${libdir}/python2.7/htmllib.py",
+            "${libdir}/python2.7/markupbase.py",
             "${libdir}/python2.7/sgmllib.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python HTML processing support"
-    }, 
+    },
     "idle": {
         "files": [
-            "${bindir}/idle", 
+            "${bindir}/idle",
             "${libdir}/python2.7/idlelib"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python Integrated Development Environment"
-    }, 
+    },
     "image": {
         "files": [
-            "${libdir}/python2.7/colorsys.py", 
+            "${libdir}/python2.7/colorsys.py",
             "${libdir}/python2.7/imghdr.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python graphical image handling"
-    }, 
+    },
     "io": {
         "files": [
-            "${libdir}/python2.7/StringIO.py", 
-            "${libdir}/python2.7/_pyio.py", 
-            "${libdir}/python2.7/io.py", 
-            "${libdir}/python2.7/lib-dynload/_io.so", 
-            "${libdir}/python2.7/lib-dynload/_socket.so", 
-            "${libdir}/python2.7/lib-dynload/_ssl.so", 
-            "${libdir}/python2.7/lib-dynload/cStringIO.so", 
-            "${libdir}/python2.7/lib-dynload/select.so", 
-            "${libdir}/python2.7/lib-dynload/termios.so", 
-            "${libdir}/python2.7/pipes.py", 
-            "${libdir}/python2.7/socket.py", 
-            "${libdir}/python2.7/ssl.py", 
+            "${libdir}/python2.7/StringIO.py",
+            "${libdir}/python2.7/_pyio.py",
+            "${libdir}/python2.7/io.py",
+            "${libdir}/python2.7/lib-dynload/_io.so",
+            "${libdir}/python2.7/lib-dynload/_socket.so",
+            "${libdir}/python2.7/lib-dynload/_ssl.so",
+            "${libdir}/python2.7/lib-dynload/cStringIO.so",
+            "${libdir}/python2.7/lib-dynload/select.so",
+            "${libdir}/python2.7/lib-dynload/termios.so",
+            "${libdir}/python2.7/pipes.py",
+            "${libdir}/python2.7/socket.py",
+            "${libdir}/python2.7/ssl.py",
             "${libdir}/python2.7/tempfile.py"
-        ], 
-        "rdepends": [
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "fcntl", 
-            "lang", 
-            "math", 
-            "netclient", 
+        ],
+        "rdepends": [
+            "contextlib",
+            "core",
+            "crypt",
+            "fcntl",
+            "lang",
+            "math",
+            "netclient",
             "textutils"
-        ], 
+        ],
         "summary": "Python low-level I/O"
-    }, 
+    },
     "json": {
         "files": [
-            "${libdir}/python2.7/json", 
+            "${libdir}/python2.7/json",
             "${libdir}/python2.7/lib-dynload/_json.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python JSON support"
-    }, 
+    },
     "lang": {
         "files": [
-            "${libdir}/python2.7/bisect.py", 
-            "${libdir}/python2.7/code.py", 
-            "${libdir}/python2.7/codeop.py", 
-            "${libdir}/python2.7/dis.py", 
-            "${libdir}/python2.7/functools.py", 
-            "${libdir}/python2.7/inspect.py", 
-            "${libdir}/python2.7/lib-dynload/_bisect.so", 
-            "${libdir}/python2.7/lib-dynload/_functools.so", 
-            "${libdir}/python2.7/lib-dynload/array.so", 
-            "${libdir}/python2.7/lib-dynload/parser.so", 
-            "${libdir}/python2.7/opcode.py", 
-            "${libdir}/python2.7/repr.py", 
-            "${libdir}/python2.7/symbol.py", 
-            "${libdir}/python2.7/token.py", 
+            "${libdir}/python2.7/bisect.py",
+            "${libdir}/python2.7/code.py",
+            "${libdir}/python2.7/codeop.py",
+            "${libdir}/python2.7/dis.py",
+            "${libdir}/python2.7/functools.py",
+            "${libdir}/python2.7/inspect.py",
+            "${libdir}/python2.7/lib-dynload/_bisect.so",
+            "${libdir}/python2.7/lib-dynload/_functools.so",
+            "${libdir}/python2.7/lib-dynload/array.so",
+            "${libdir}/python2.7/lib-dynload/parser.so",
+            "${libdir}/python2.7/opcode.py",
+            "${libdir}/python2.7/repr.py",
+            "${libdir}/python2.7/symbol.py",
+            "${libdir}/python2.7/token.py",
             "${libdir}/python2.7/tokenize.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python low-level language support"
-    }, 
+    },
     "logging": {
         "files": [
             "${libdir}/python2.7/logging"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "io", 
+            "core",
+            "io",
             "threading"
-        ], 
+        ],
         "summary": "Python logging support"
-    }, 
+    },
     "mailbox": {
         "files": [
             "${libdir}/python2.7/mailbox.py"
-        ], 
-        "rdepends": [
-            "codecs", 
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "datetime", 
-            "email", 
-            "fcntl", 
-            "io", 
-            "lang", 
-            "math", 
-            "mime", 
-            "netclient", 
+        ],
+        "rdepends": [
+            "codecs",
+            "contextlib",
+            "core",
+            "crypt",
+            "datetime",
+            "email",
+            "fcntl",
+            "io",
+            "lang",
+            "math",
+            "mime",
+            "netclient",
             "textutils"
-        ], 
+        ],
         "summary": "Python mailbox format support"
-    }, 
+    },
     "math": {
         "files": [
-            "${libdir}/python2.7/lib-dynload/_random.so", 
-            "${libdir}/python2.7/lib-dynload/cmath.so", 
-            "${libdir}/python2.7/lib-dynload/math.so", 
-            "${libdir}/python2.7/random.py", 
+            "${libdir}/python2.7/lib-dynload/_random.so",
+            "${libdir}/python2.7/lib-dynload/cmath.so",
+            "${libdir}/python2.7/lib-dynload/math.so",
+            "${libdir}/python2.7/random.py",
             "${libdir}/python2.7/sets.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "crypt"
-        ], 
+        ],
         "summary": "Python math support"
-    }, 
+    },
     "mime": {
         "files": [
-            "${libdir}/python2.7/MimeWriter.py", 
-            "${libdir}/python2.7/mimetools.py", 
-            "${libdir}/python2.7/mimetypes.py", 
-            "${libdir}/python2.7/quopri.py", 
-            "${libdir}/python2.7/rfc822.py", 
+            "${libdir}/python2.7/MimeWriter.py",
+            "${libdir}/python2.7/mimetools.py",
+            "${libdir}/python2.7/mimetypes.py",
+            "${libdir}/python2.7/quopri.py",
+            "${libdir}/python2.7/rfc822.py",
             "${libdir}/python2.7/uu.py"
-        ], 
-        "rdepends": [
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "fcntl", 
-            "io", 
-            "lang", 
-            "math", 
-            "netclient", 
+        ],
+        "rdepends": [
+            "contextlib",
+            "core",
+            "crypt",
+            "fcntl",
+            "io",
+            "lang",
+            "math",
+            "netclient",
             "textutils"
-        ], 
+        ],
         "summary": "Python MIME handling APIs"
-    }, 
+    },
     "mmap": {
         "files": [
             "${libdir}/python2.7/lib-dynload/mmap.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python memory-mapped file support"
-    }, 
+    },
     "modules": {
-        "files": [], 
-        "rdepends": [
-            "2to3", 
-            "argparse", 
-            "audio", 
-            "bsddb", 
-            "codecs", 
-            "compile", 
-            "compiler", 
-            "compression", 
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "ctypes", 
-            "curses", 
-            "datetime", 
-            "db", 
-            "debugger", 
-            "difflib", 
-            "distutils", 
-            "doctest", 
-            "email", 
-            "fcntl", 
-            "gdbm", 
-            "hotshot", 
-            "html", 
-            "idle", 
-            "image", 
-            "io", 
-            "json", 
-            "lang", 
-            "logging", 
-            "mailbox", 
-            "math", 
-            "mime", 
-            "mmap", 
-            "multiprocessing", 
-            "netclient", 
-            "netserver", 
-            "numbers", 
-            "pickle", 
-            "pkgutil", 
-            "plistlib", 
-            "pprint", 
-            "profile", 
-            "pydoc", 
-            "re", 
-            "resource", 
-            "robotparser", 
-            "shell", 
-            "smtpd", 
-            "sqlite3", 
-            "sqlite3", 
-            "stringold", 
-            "subprocess", 
-            "syslog", 
-            "terminal", 
-            "tests", 
-            "textutils", 
-            "threading", 
-            "tkinter", 
-            "unittest", 
-            "unixadmin", 
-            "xml", 
-            "xmlrpc", 
+        "files": [],
+        "rdepends": [
+            "2to3",
+            "argparse",
+            "audio",
+            "bsddb",
+            "codecs",
+            "compile",
+            "compiler",
+            "compression",
+            "contextlib",
+            "core",
+            "crypt",
+            "ctypes",
+            "curses",
+            "datetime",
+            "db",
+            "debugger",
+            "difflib",
+            "distutils",
+            "doctest",
+            "email",
+            "fcntl",
+            "gdbm",
+            "hotshot",
+            "html",
+            "idle",
+            "image",
+            "io",
+            "json",
+            "lang",
+            "logging",
+            "mailbox",
+            "math",
+            "mime",
+            "mmap",
+            "multiprocessing",
+            "netclient",
+            "netserver",
+            "numbers",
+            "pickle",
+            "pkgutil",
+            "plistlib",
+            "pprint",
+            "profile",
+            "pydoc",
+            "re",
+            "resource",
+            "robotparser",
+	    "runpy",
+            "shell",
+            "smtpd",
+            "sqlite3",
+            "sqlite3",
+            "stringold",
+            "subprocess",
+            "syslog",
+            "terminal",
+            "tests",
+            "textutils",
+            "threading",
+            "tkinter",
+            "unittest",
+            "unixadmin",
+            "xml",
+            "xmlrpc",
             "zlib"
-        ], 
+        ],
         "summary": "All Python modules"
-    }, 
+    },
     "multiprocessing": {
         "files": [
-            "${libdir}/python2.7/lib-dynload/_multiprocessing.so", 
+            "${libdir}/python2.7/lib-dynload/_multiprocessing.so",
             "${libdir}/python2.7/multiprocessing"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "fcntl", 
-            "io", 
-            "pickle", 
-            "subprocess", 
+            "core",
+            "fcntl",
+            "io",
+            "pickle",
+            "subprocess",
             "threading"
-        ], 
+        ],
         "summary": "Python multiprocessing support"
-    }, 
+    },
     "netclient": {
         "files": [
-            "${libdir}/python2.7/Cookie.py", 
-            "${libdir}/python2.7/_LWPCookieJar.py", 
-            "${libdir}/python2.7/_MozillaCookieJar.py", 
-            "${libdir}/python2.7/base64.py", 
-            "${libdir}/python2.7/cookielib.py", 
-            "${libdir}/python2.7/ftplib.py", 
-            "${libdir}/python2.7/hmac.py", 
-            "${libdir}/python2.7/httplib.py", 
-            "${libdir}/python2.7/nntplib.py", 
-            "${libdir}/python2.7/poplib.py", 
-            "${libdir}/python2.7/smtplib.py", 
-            "${libdir}/python2.7/telnetlib.py", 
-            "${libdir}/python2.7/urllib.py", 
-            "${libdir}/python2.7/urllib2.py", 
-            "${libdir}/python2.7/urlparse.py", 
+            "${libdir}/python2.7/Cookie.py",
+            "${libdir}/python2.7/_LWPCookieJar.py",
+            "${libdir}/python2.7/_MozillaCookieJar.py",
+            "${libdir}/python2.7/base64.py",
+            "${libdir}/python2.7/cookielib.py",
+            "${libdir}/python2.7/ftplib.py",
+            "${libdir}/python2.7/hmac.py",
+            "${libdir}/python2.7/httplib.py",
+            "${libdir}/python2.7/nntplib.py",
+            "${libdir}/python2.7/poplib.py",
+            "${libdir}/python2.7/smtplib.py",
+            "${libdir}/python2.7/telnetlib.py",
+            "${libdir}/python2.7/urllib.py",
+            "${libdir}/python2.7/urllib2.py",
+            "${libdir}/python2.7/urlparse.py",
             "${libdir}/python2.7/uuid.py"
-        ], 
-        "rdepends": [
-            "codecs", 
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "ctypes", 
-            "datetime", 
-            "email", 
-            "fcntl", 
-            "io", 
-            "lang", 
-            "math", 
-            "mime", 
-            "pickle", 
-            "subprocess", 
-            "textutils", 
+        ],
+        "rdepends": [
+            "codecs",
+            "contextlib",
+            "core",
+            "crypt",
+            "ctypes",
+            "datetime",
+            "email",
+            "fcntl",
+            "io",
+            "lang",
+            "math",
+            "mime",
+            "pickle",
+            "subprocess",
+            "textutils",
             "threading"
-        ], 
+        ],
         "summary": "Python Internet Protocol clients"
-    }, 
+    },
     "netserver": {
         "files": [
-            "${libdir}/python2.7/BaseHTTPServer.py", 
-            "${libdir}/python2.7/CGIHTTPServer.py", 
-            "${libdir}/python2.7/SimpleHTTPServer.py", 
-            "${libdir}/python2.7/SocketServer.py", 
+            "${libdir}/python2.7/BaseHTTPServer.py",
+            "${libdir}/python2.7/CGIHTTPServer.py",
+            "${libdir}/python2.7/SimpleHTTPServer.py",
+            "${libdir}/python2.7/SocketServer.py",
             "${libdir}/python2.7/cgi.py"
-        ], 
-        "rdepends": [
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "fcntl", 
-            "io", 
-            "lang", 
-            "math", 
-            "mime", 
-            "netclient", 
-            "shell", 
-            "textutils", 
-            "threading", 
+        ],
+        "rdepends": [
+            "contextlib",
+            "core",
+            "crypt",
+            "fcntl",
+            "io",
+            "lang",
+            "math",
+            "mime",
+            "netclient",
+            "shell",
+            "textutils",
+            "threading",
             "unixadmin"
-        ], 
+        ],
         "summary": "Python Internet Protocol servers"
-    }, 
+    },
     "numbers": {
         "files": [
-            "${libdir}/python2.7/decimal.py", 
-            "${libdir}/python2.7/fractions.py", 
+            "${libdir}/python2.7/decimal.py",
+            "${libdir}/python2.7/fractions.py",
             "${libdir}/python2.7/numbers.py"
-        ], 
+        ],
         "rdepends": [
-            "codecs", 
-            "core", 
-            "lang", 
-            "math", 
+            "codecs",
+            "core",
+            "lang",
+            "math",
             "threading"
-        ], 
+        ],
         "summary": "Python number APIs"
-    }, 
+    },
     "pickle": {
         "files": [
-            "${libdir}/python2.7/lib-dynload/cPickle.so", 
-            "${libdir}/python2.7/pickle.py", 
-            "${libdir}/python2.7/pickletools.py", 
+            "${libdir}/python2.7/lib-dynload/cPickle.so",
+            "${libdir}/python2.7/pickle.py",
+            "${libdir}/python2.7/pickletools.py",
             "${libdir}/python2.7/shelve.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "io"
-        ], 
+        ],
         "summary": "Python serialisation/persistence support"
-    }, 
+    },
     "pkgutil": {
         "files": [
             "${libdir}/python2.7/pkgutil.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python package extension utility support"
-    }, 
+    },
     "plistlib": {
         "files": [
             "${libdir}/python2.7/plistlib.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "datetime", 
+            "core",
+            "datetime",
             "io"
-        ], 
+        ],
         "summary": "Generate and parse Mac OS X .plist files"
-    }, 
+    },
     "pprint": {
         "files": [
             "${libdir}/python2.7/pprint.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "io"
-        ], 
+        ],
         "summary": "Python pretty-print support"
-    }, 
+    },
     "profile": {
         "files": [
-            "${libdir}/python2.7/cProfile.py", 
-            "${libdir}/python2.7/lib-dynload/_lsprof.so", 
-            "${libdir}/python2.7/profile.py", 
+            "${libdir}/python2.7/cProfile.py",
+            "${libdir}/python2.7/lib-dynload/_lsprof.so",
+            "${libdir}/python2.7/profile.py",
             "${libdir}/python2.7/pstats.py"
-        ], 
+        ],
         "rdepends": [
-            "codecs", 
-            "core", 
-            "lang", 
-            "resource", 
+            "codecs",
+            "core",
+            "lang",
+            "resource",
             "textutils"
-        ], 
+        ],
         "summary": "Python basic performance profiling support"
-    }, 
+    },
     "pydoc": {
         "files": [
-            "${bindir}/pydoc", 
-            "${libdir}/python2.7/pydoc.py", 
+            "${bindir}/pydoc",
+            "${libdir}/python2.7/pydoc.py",
             "${libdir}/python2.7/pydoc_data"
-        ], 
+        ],
         "rdepends": [
-            "codecs", 
-            "core", 
-            "lang", 
+            "codecs",
+            "core",
+            "lang",
             "pkgutil"
-        ], 
+        ],
         "summary": "Python interactive help support"
-    }, 
+    },
     "re": {
         "files": [
             "${libdir}/python2.7/sre.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python Regular Expression APIs"
-    }, 
+    },
     "resource": {
         "files": [
             "${libdir}/python2.7/lib-dynload/resource.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python resource control interface"
-    }, 
+    },
     "robotparser": {
         "files": [
             "${libdir}/python2.7/robotparser.py"
-        ], 
+        ],
         "rdepends": [
-            "contextlib", 
-            "core", 
-            "io", 
-            "lang", 
-            "netclient", 
+            "contextlib",
+            "core",
+            "io",
+            "lang",
+            "netclient",
             "textutils"
-        ], 
+        ],
         "summary": "Python robots.txt parser"
-    }, 
+    },
+    "runpy": {
+        "files": [
+            "${libdir}/python2.7/runpy.py"
+        ],
+        "rdepends": [
+            "core",
+            "pkgutil"
+        ],
+        "summary": "Python helper for locating/executing scripts in module namespace"
+    },
     "shell": {
         "files": [
-            "${libdir}/python2.7/cmd.py", 
-            "${libdir}/python2.7/commands.py", 
-            "${libdir}/python2.7/dircache.py", 
-            "${libdir}/python2.7/fnmatch.py", 
-            "${libdir}/python2.7/glob.py", 
-            "${libdir}/python2.7/popen2.py", 
-            "${libdir}/python2.7/shlex.py", 
+            "${libdir}/python2.7/cmd.py",
+            "${libdir}/python2.7/commands.py",
+            "${libdir}/python2.7/dircache.py",
+            "${libdir}/python2.7/fnmatch.py",
+            "${libdir}/python2.7/glob.py",
+            "${libdir}/python2.7/popen2.py",
+            "${libdir}/python2.7/shlex.py",
             "${libdir}/python2.7/shutil.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "io", 
+            "core",
+            "io",
             "unixadmin"
-        ], 
+        ],
         "summary": "Python shell-like functionality"
-    }, 
+    },
     "smtpd": {
         "files": [
-            "${bindir}/smtpd.py", 
-            "${libdir}/python2.7/asynchat.py", 
-            "${libdir}/python2.7/asyncore.py", 
+            "${bindir}/smtpd.py",
+            "${libdir}/python2.7/asynchat.py",
+            "${libdir}/python2.7/asyncore.py",
             "${libdir}/python2.7/smtpd.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "fcntl", 
-            "io", 
+            "core",
+            "fcntl",
+            "io",
             "lang"
-        ], 
+        ],
         "summary": "Python Simple Mail Transport Daemon"
-    }, 
+    },
     "sqlite3": {
         "files": [
             "${libdir}/python2.7/lib-dynload/_sqlite3.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python Sqlite3 database support"
-    }, 
+    },
     "sqlite3-tests": {
         "files": [
             "${libdir}/python2.7/sqlite3/test"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "tests"
-        ], 
+        ],
         "summary": "Python Sqlite3 database support tests"
-    }, 
+    },
     "stringold": {
         "files": [
             "${libdir}/python2.7/stringold.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python string APIs [deprecated]"
-    }, 
+    },
     "subprocess": {
         "files": [
             "${libdir}/python2.7/subprocess.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "fcntl", 
-            "io", 
+            "core",
+            "fcntl",
+            "io",
             "pickle"
-        ], 
+        ],
         "summary": "Python subprocess support"
-    }, 
+    },
     "syslog": {
         "files": [
             "${libdir}/python2.7/lib-dynload/syslog.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python syslog interface"
-    }, 
+    },
     "terminal": {
         "files": [
-            "${libdir}/python2.7/pty.py", 
+            "${libdir}/python2.7/pty.py",
             "${libdir}/python2.7/tty.py"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "io"
-        ], 
+        ],
         "summary": "Python terminal controlling support"
-    }, 
+    },
     "tests": {
         "files": [
             "${libdir}/python2.7/test"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python tests"
-    }, 
+    },
     "textutils": {
         "files": [
-            "${libdir}/python2.7/csv.py", 
-            "${libdir}/python2.7/lib-dynload/_csv.so", 
-            "${libdir}/python2.7/optparse.py", 
+            "${libdir}/python2.7/csv.py",
+            "${libdir}/python2.7/lib-dynload/_csv.so",
+            "${libdir}/python2.7/optparse.py",
             "${libdir}/python2.7/textwrap.py"
-        ], 
+        ],
         "rdepends": [
-            "codecs", 
-            "core", 
-            "io", 
+            "codecs",
+            "core",
+            "io",
             "lang"
-        ], 
+        ],
         "summary": "Python option parsin"
-    }, 
+    },
     "threading": {
         "files": [
-            "${libdir}/python2.7/Queue.py", 
-            "${libdir}/python2.7/_threading_local.py", 
-            "${libdir}/python2.7/dummy_thread.py", 
-            "${libdir}/python2.7/dummy_threading.py", 
-            "${libdir}/python2.7/mutex.py", 
+            "${libdir}/python2.7/Queue.py",
+            "${libdir}/python2.7/_threading_local.py",
+            "${libdir}/python2.7/dummy_thread.py",
+            "${libdir}/python2.7/dummy_threading.py",
+            "${libdir}/python2.7/mutex.py",
             "${libdir}/python2.7/threading.py"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python threading & synchronization support"
-    }, 
+    },
     "tkinter": {
         "files": [
             "${libdir}/python2.7/lib-tk"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python Tcl/Tk bindings"
-    }, 
+    },
     "unittest": {
         "files": [
             "${libdir}/python2.7/unittest"
-        ], 
+        ],
         "rdepends": [
-            "core", 
-            "difflib", 
-            "io", 
-            "lang", 
-            "pprint", 
+            "core",
+            "difflib",
+            "io",
+            "lang",
+            "pprint",
             "shell"
-        ], 
+        ],
         "summary": "Python unit testing framework"
-    }, 
+    },
     "unixadmin": {
         "files": [
-            "${libdir}/python2.7/getpass.py", 
-            "${libdir}/python2.7/lib-dynload/grp.so", 
+            "${libdir}/python2.7/getpass.py",
+            "${libdir}/python2.7/lib-dynload/grp.so",
             "${libdir}/python2.7/lib-dynload/nis.so"
-        ], 
+        ],
         "rdepends": [
-            "core", 
+            "core",
             "io"
-        ], 
+        ],
         "summary": "Python Unix administration support"
-    }, 
+    },
     "xml": {
         "files": [
-            "${libdir}/python2.7/lib-dynload/_elementtree.so", 
-            "${libdir}/python2.7/lib-dynload/pyexpat.so", 
+            "${libdir}/python2.7/lib-dynload/_elementtree.so",
+            "${libdir}/python2.7/lib-dynload/pyexpat.so",
             "${libdir}/python2.7/xml"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python basic XML support"
-    }, 
+    },
     "xmlrpc": {
         "files": [
-            "${libdir}/python2.7/DocXMLRPCServer.py", 
+            "${libdir}/python2.7/DocXMLRPCServer.py",
             "${libdir}/python2.7/SimpleXMLRPCServer.py"
-        ], 
-        "rdepends": [
-            "codecs", 
-            "compression", 
-            "contextlib", 
-            "core", 
-            "crypt", 
-            "datetime", 
-            "fcntl", 
-            "io", 
-            "lang", 
-            "math", 
-            "mime", 
-            "netclient", 
-            "netserver", 
-            "pkgutil", 
-            "pydoc", 
-            "textutils", 
-            "threading", 
-            "xml", 
+        ],
+        "rdepends": [
+            "codecs",
+            "compression",
+            "contextlib",
+            "core",
+            "crypt",
+            "datetime",
+            "fcntl",
+            "io",
+            "lang",
+            "math",
+            "mime",
+            "netclient",
+            "netserver",
+            "pkgutil",
+            "pydoc",
+            "textutils",
+            "threading",
+            "xml",
             "zlib"
-        ], 
+        ],
         "summary": "Python XML-RPC support"
-    }, 
+    },
     "zlib": {
         "files": [
             "${libdir}/python2.7/lib-dynload/zlib.so"
-        ], 
+        ],
         "rdepends": [
             "core"
-        ], 
+        ],
         "summary": "Python zlib compression support"
     }
-}
\ No newline at end of file
+}
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
index 1843e185eed..72d95d84841 100644
--- a/meta/recipes-devtools/python/python3/python3-manifest.json
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -55,13 +55,10 @@
     },
     "codecs": {
         "cached": [
-            "${libdir}/python3.5/__pycache__/stringprep.*.pyc",
             "${libdir}/python3.5/__pycache__/xdrlib.*.pyc"
         ],
         "files": [
             "${libdir}/python3.5/lib-dynload/_multibytecodec.*.so",
-            "${libdir}/python3.5/lib-dynload/unicodedata.*.so",
-            "${libdir}/python3.5/stringprep.py",
             "${libdir}/python3.5/xdrlib.py"
         ],
         "rdepends": [
@@ -127,6 +124,7 @@
             "${libdir}/python3.5/__pycache__/__future__.*.pyc",
             "${libdir}/python3.5/__pycache__/_bootlocale.*.pyc",
             "${libdir}/python3.5/__pycache__/_collections_abc.*.pyc",
+            "${libdir}/python3.5/__pycache__/_markupbase.*.pyc",
             "${libdir}/python3.5/__pycache__/_sitebuiltins.*.pyc",
             "${libdir}/python3.5/__pycache__/_sysconfigdata.*.pyc",
             "${libdir}/python3.5/__pycache__/_weakrefset.*.pyc",
@@ -171,6 +169,7 @@
             "${libdir}/python3.5/__pycache__/sre_constants.*.pyc",
             "${libdir}/python3.5/__pycache__/sre_parse.*.pyc",
             "${libdir}/python3.5/__pycache__/stat.*.pyc",
+            "${libdir}/python3.5/__pycache__/stringprep.*.pyc",
             "${libdir}/python3.5/__pycache__/struct.*.pyc",
             "${libdir}/python3.5/__pycache__/subprocess.*.pyc",
             "${libdir}/python3.5/__pycache__/symbol.*.pyc",
@@ -208,6 +207,7 @@
             "${libdir}/python3.5/_abcoll.py",
             "${libdir}/python3.5/_bootlocale.py",
             "${libdir}/python3.5/_collections_abc.py",
+            "${libdir}/python3.5/_markupbase.py",
             "${libdir}/python3.5/_sitebuiltins.py",
             "${libdir}/python3.5/_sysconfigdata.py",
             "${libdir}/python3.5/_weakrefset.py",
@@ -263,6 +263,7 @@
             "${libdir}/python3.5/lib-dynload/readline.*.so",
             "${libdir}/python3.5/lib-dynload/select.*.so",
             "${libdir}/python3.5/lib-dynload/time.*.so",
+            "${libdir}/python3.5/lib-dynload/unicodedata.*.so",
             "${libdir}/python3.5/lib-dynload/xreadlines.*.so",
             "${libdir}/python3.5/linecache.py",
             "${libdir}/python3.5/locale.py",
@@ -283,6 +284,7 @@
             "${libdir}/python3.5/sre_constants.py",
             "${libdir}/python3.5/sre_parse.py",
             "${libdir}/python3.5/stat.py",
+            "${libdir}/python3.5/stringprep.py",
             "${libdir}/python3.5/struct.py",
             "${libdir}/python3.5/subprocess.py",
             "${libdir}/python3.5/symbol.py",
@@ -679,10 +681,12 @@
             "numbers",
             "pickle",
             "pkgutil",
+            "plistlib",
             "pprint",
             "profile",
             "pydoc",
             "resource",
+            "runpy",
             "shell",
             "smtpd",
             "sqlite3",
@@ -728,6 +732,8 @@
             "${libdir}/python3.5/base64.py",
             "${libdir}/python3.5/ftplib.py",
             "${libdir}/python3.5/hmac.py",
+            "${libdir}/python3.5/http",
+            "${libdir}/python3.5/http/__pycache__",
             "${libdir}/python3.5/mimetypes.py",
             "${libdir}/python3.5/nntplib.py",
             "${libdir}/python3.5/poplib.py",
@@ -827,6 +833,20 @@
         ],
         "summary": "Python package extension utility support"
     },
+    "plistlib": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/plistlib.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/plistlib.py"
+        ],
+        "rdepends": [
+            "core",
+            "datetime",
+            "xml"
+        ],
+        "summary": "Generate and parse Mac OS X .plist files"
+    },
     "pprint": {
         "cached": [
             "${libdir}/python3.5/__pycache__/pprint.*.pyc"
@@ -836,7 +856,7 @@
         ],
         "rdepends": [
             "core"
-       ], 
+        ],
         "summary": "Python pretty-print support"
     },
     "profile": {
@@ -882,6 +902,19 @@
         ],
         "summary": "Python resource control interface"
     },
+    "runpy": {
+        "cached": [
+            "${libdir}/python3.5/__pycache__/runpy.*.pyc"
+        ],
+        "files": [
+            "${libdir}/python3.5/runpy.py"
+        ],
+        "rdepends": [
+            "core",
+            "pkgutil"
+        ],
+        "summary": "Python helper for locating/executing scripts in module namespace"
+    },
     "shell": {
         "cached": [
             "${libdir}/python3.5/__pycache__/cmd.*.pyc",
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 09/19] python*-setuptools: upgrade to 38.2.3; use pypi.bbclass; improvements
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (7 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 08/19] python*-manifest.json: add dependencies, runpy Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 10/19] python3-pip: use pypi.bbclass Tim Orling
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify python- and python3-setuptools with pypi.bbclass
* inherit setuptools rather than distutils
* Consolidate common settings in python-setuptools.inc
  - use PYTHON_PN variable to eliminate duplication
  - python3-setuptools had RDEPENDS on _markupbase
    - prior commit it added to -core rather than -misc catchall
  - installer no longer creates setuptools.pth, drop fixes
  - easy_install script is installed in /usr/bin/, add --script-dir

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-setuptools.inc | 39 ++++++++++++++++++----
 .../python/python-setuptools_36.5.0.bb             | 38 ---------------------
 .../python/python-setuptools_38.2.3.bb             |  9 +++++
 .../python/python3-setuptools_36.5.0.bb            | 35 -------------------
 .../python/python3-setuptools_38.2.3.bb            |  6 ++++
 5 files changed, 48 insertions(+), 79 deletions(-)
 delete mode 100644 meta/recipes-devtools/python/python-setuptools_36.5.0.bb
 create mode 100644 meta/recipes-devtools/python/python-setuptools_38.2.3.bb
 delete mode 100644 meta/recipes-devtools/python/python3-setuptools_36.5.0.bb
 create mode 100644 meta/recipes-devtools/python/python3-setuptools_38.2.3.bb

diff --git a/meta/recipes-devtools/python/python-setuptools.inc b/meta/recipes-devtools/python/python-setuptools.inc
index 1eae0b6174d..dcabd4c9288 100644
--- a/meta/recipes-devtools/python/python-setuptools.inc
+++ b/meta/recipes-devtools/python/python-setuptools.inc
@@ -5,17 +5,44 @@ LICENSE = "MIT"
 
 LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=19;md5=9a33897f1bca1160d7aad3835152e158"
 
-SRCNAME = "setuptools"
+PYPI_PACKAGE_EXT = "zip"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/s/${SRCNAME}/${SRCNAME}-${PV}.zip"
+SRC_URI[md5sum] = "0ae64455d276ff864b40aca9c06ea7c1"
+SRC_URI[sha256sum] = "63c394084de7d11bbbec59a4f9a9a6bab10209657c615e76ef62ae25cea39288"
 
-SRC_URI[md5sum] = "704f500dd55f4bd0be905444f3ba892c"
-SRC_URI[sha256sum] = "ce2007c1cea3359870b80657d634253a0765b0c7dc5a988d77ba803fc86f2c64"
+inherit pypi
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/setuptools"
+DEPENDS += "${PYTHON_PN}"
+DEPENDS_class-native += "${PYTHON_PN}-native"
+DEPENDS_class-nativesdk += "nativesdk-${PYTHON_PN}"
 
-S = "${WORKDIR}/${SRCNAME}-${PV}"
+DISTUTILS_INSTALL_ARGS += "--install-lib=${D}${PYTHON_SITEPACKAGES_DIR} \
+                           --script-dir=${bindir}"
+
+RDEPENDS_${PN}_class-native = "\
+  ${PYTHON_PN}-distutils \
+  ${PYTHON_PN}-compression \
+"
+RDEPENDS_${PN} = "\
+  ${PYTHON_PN}-compile \
+  ${PYTHON_PN}-compression \
+  ${PYTHON_PN}-ctypes \
+  ${PYTHON_PN}-distutils \
+  ${PYTHON_PN}-email \
+  ${PYTHON_PN}-html \
+  ${PYTHON_PN}-netserver \
+  ${PYTHON_PN}-numbers \
+  ${PYTHON_PN}-pkgutil \
+  ${PYTHON_PN}-plistlib \
+  ${PYTHON_PN}-shell \
+  ${PYTHON_PN}-stringold \
+  ${PYTHON_PN}-threading \
+  ${PYTHON_PN}-unittest \
+  ${PYTHON_PN}-xml \
+"
 
 do_install_prepend() {
     install -d ${D}${PYTHON_SITEPACKAGES_DIR}
 }
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-setuptools_36.5.0.bb b/meta/recipes-devtools/python/python-setuptools_36.5.0.bb
deleted file mode 100644
index 526474c7ea5..00000000000
--- a/meta/recipes-devtools/python/python-setuptools_36.5.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-require python-setuptools.inc
-
-PROVIDES = "python-distribute"
-
-DEPENDS += "python"
-DEPENDS_class-native += "python-native"
-
-inherit distutils
-
-DISTUTILS_INSTALL_ARGS += "--install-lib=${D}${PYTHON_SITEPACKAGES_DIR}"
-
-RDEPENDS_${PN} = "\
-  python-stringold \
-  python-email \
-  python-shell \
-  python-distutils \
-  python-compression \
-  python-pkgutil \
-  python-plistlib \
-  python-numbers \
-  python-html \
-  python-netserver \
-  python-ctypes \
-  python-subprocess \
-  python-unittest \
-  python-compile \
-"
-
-RDEPENDS_${PN}_class-native = "\
-  python-distutils \
-  python-compression \
-"
-
-RREPLACES_${PN} = "python-distribute"
-RPROVIDES_${PN} = "python-distribute"
-RCONFLICTS_${PN} = "python-distribute"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-setuptools_38.2.3.bb b/meta/recipes-devtools/python/python-setuptools_38.2.3.bb
new file mode 100644
index 00000000000..cf9440495bd
--- /dev/null
+++ b/meta/recipes-devtools/python/python-setuptools_38.2.3.bb
@@ -0,0 +1,9 @@
+require python-setuptools.inc
+
+PROVIDES = "python-distribute"
+
+inherit setuptools
+
+RREPLACES_${PN} = "python-distribute"
+RPROVIDES_${PN} = "python-distribute"
+RCONFLICTS_${PN} = "python-distribute"
diff --git a/meta/recipes-devtools/python/python3-setuptools_36.5.0.bb b/meta/recipes-devtools/python/python3-setuptools_36.5.0.bb
deleted file mode 100644
index dab8ad89b01..00000000000
--- a/meta/recipes-devtools/python/python3-setuptools_36.5.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-require python-setuptools.inc
-
-DEPENDS += "python3"
-DEPENDS_class-native += "python3-native"
-DEPENDS_class-nativesdk += "nativesdk-python3"
-
-inherit distutils3
-
-DISTUTILS_INSTALL_ARGS += "--install-lib=${D}${PYTHON_SITEPACKAGES_DIR}"
-
-# The installer puts the wrong path in the setuptools.pth file.  Correct it.
-do_install_append() {
-    rm ${D}${PYTHON_SITEPACKAGES_DIR}/setuptools.pth
-    mv ${D}${bindir}/easy_install ${D}${bindir}/easy3_install
-    echo "./${SRCNAME}-${PV}-py${PYTHON_BASEVERSION}.egg" > ${D}${PYTHON_SITEPACKAGES_DIR}/setuptools.pth
-}
-
-RDEPENDS_${PN}_class-native = "\
-  python3-distutils \
-  python3-compression \
-"
-RDEPENDS_${PN} = "\
-  python3-ctypes \
-  python3-distutils \
-  python3-email \
-  python3-numbers \
-  python3-compression \
-  python3-shell \
-  python3-pkgutil \
-  python3-threading \
-  python3-misc \
-  python3-unittest \
-  python3-xml \
-"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-setuptools_38.2.3.bb b/meta/recipes-devtools/python/python3-setuptools_38.2.3.bb
new file mode 100644
index 00000000000..0dc1ed86227
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-setuptools_38.2.3.bb
@@ -0,0 +1,6 @@
+require python-setuptools.inc
+inherit setuptools3
+
+do_install_append() {
+    mv ${D}${bindir}/easy_install ${D}${bindir}/easy3_install
+}
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 10/19] python3-pip: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (8 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 09/19] python*-setuptools: upgrade to 38.2.3; use pypi.bbclass; improvements Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 11/19] python-nose: " Tim Orling
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify recipe using pypi.bbclass

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python3-pip_9.0.1.bb | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/meta/recipes-devtools/python/python3-pip_9.0.1.bb b/meta/recipes-devtools/python/python3-pip_9.0.1.bb
index a6dd72df3b1..b56862c2450 100644
--- a/meta/recipes-devtools/python/python3-pip_9.0.1.bb
+++ b/meta/recipes-devtools/python/python3-pip_9.0.1.bb
@@ -1,22 +1,15 @@
 SUMMARY = "The PyPA recommended tool for installing Python packages"
-sHOMEPAGEsss = "https://pypi.python.org/pypi/pip"
+HOMEPAGE = "https://pypi.python.org/pypi/pip"
 SECTION = "devel/python"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=25fba45109565f87de20bae85bc39452"
 
-SRCNAME = "pip"
 DEPENDS += "python3 python3-setuptools-native"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/p/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
-
 SRC_URI[md5sum] = "35f01da33009719497f01a4ba69d63c9"
 SRC_URI[sha256sum] = "09f243e1a7b461f654c26a725fa373211bb7ff17a9300058b205c61658ca940d"
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/pip"
-
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-inherit distutils3
+inherit pypi distutils3
 
 DISTUTILS_INSTALL_ARGS += "--install-lib=${D}${PYTHON_SITEPACKAGES_DIR}"
 
@@ -33,7 +26,7 @@ do_install_append() {
     rm ${D}/${bindir}/pip
 
     # Installed eggs need to be passed directly to the interpreter via a pth file
-    echo "./${SRCNAME}-${PV}-py${PYTHON_BASEVERSION}.egg" > ${D}${PYTHON_SITEPACKAGES_DIR}/${SRCNAME}-${PV}.pth
+    echo "./${PYPI_PACKAGE}-${PV}-py${PYTHON_BASEVERSION}.egg" > ${D}${PYTHON_SITEPACKAGES_DIR}/${PYPI_PACKAGE}-${PV}.pth
 
     # Make sure we use /usr/bin/env python3
     for PYTHSCRIPT in `grep -rIl ${bindir} ${D}${bindir}/pip3*`; do
@@ -46,6 +39,7 @@ RDEPENDS_${PN} = "\
   python3-io \
   python3-html \
   python3-json \
+  python3-netclient \
   python3-netserver \
   python3-setuptools \
   python3-unixadmin \
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 11/19] python-nose: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (9 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 10/19] python3-pip: use pypi.bbclass Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 12/19] python-six: " Tim Orling
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify python- and python3-nose by using pypi.bbclass
* Consolidate common content in python-nose.inc
  - Avoid duplication by using PYTHON_PN variable
* nosetests RDEPENDS on python-logging

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-nose.inc       | 18 ++++++++++++++++
 meta/recipes-devtools/python/python-nose_1.3.7.bb  | 25 +++-------------------
 meta/recipes-devtools/python/python3-nose_1.3.7.bb | 24 +--------------------
 3 files changed, 22 insertions(+), 45 deletions(-)
 create mode 100644 meta/recipes-devtools/python/python-nose.inc

diff --git a/meta/recipes-devtools/python/python-nose.inc b/meta/recipes-devtools/python/python-nose.inc
new file mode 100644
index 00000000000..072be87356d
--- /dev/null
+++ b/meta/recipes-devtools/python/python-nose.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Extends Python unittest to make testing easier"
+HOMEPAGE = "http://readthedocs.org/docs/nose/"
+DESCRIPTION = "nose extends the test loading and running features of unittest, \
+making it easier to write, find and run tests."
+SECTION = "devel/python"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://lgpl.txt;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+SRC_URI[md5sum] = "4d3ad0ff07b61373d2cefc89c5d0b20b"
+SRC_URI[sha256sum] = "f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target = "\
+  ${PYTHON_PN}-unittest \
+  "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python-nose_1.3.7.bb b/meta/recipes-devtools/python/python-nose_1.3.7.bb
index 9b3509cafbb..584d604079b 100644
--- a/meta/recipes-devtools/python/python-nose_1.3.7.bb
+++ b/meta/recipes-devtools/python/python-nose_1.3.7.bb
@@ -1,25 +1,6 @@
-SUMMARY = "Extends Python unittest to make testing easier"
-HOMEPAGE = "http://readthedocs.org/docs/nose/"
-DESCRIPTION = "nose extends the test loading and running features of unittest, \
-making it easier to write, find and run tests."
-SECTION = "devel/python"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://lgpl.txt;md5=a6f89e2100d9b6cdffcea4f398e37343"
-
-SRC_URI = "https://files.pythonhosted.org/packages/source/n/nose/nose-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "4d3ad0ff07b61373d2cefc89c5d0b20b"
-SRC_URI[sha256sum] = "f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"
-
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/nose/"
-UPSTREAM_CHECK_REGEX = "/nose/(?P<pver>(\d+[\.\-_]*)+)"
-
-S = "${WORKDIR}/nose-${PV}"
-
+require python-nose.inc
 inherit setuptools
 
-RDEPENDS_${PN} = "\
-  python-unittest \
+RDEPENDS_${PN}_class-target += "\
+  python-logging \
   "
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-nose_1.3.7.bb b/meta/recipes-devtools/python/python3-nose_1.3.7.bb
index 1e2ff74f578..2d1ae3b8bf5 100644
--- a/meta/recipes-devtools/python/python3-nose_1.3.7.bb
+++ b/meta/recipes-devtools/python/python3-nose_1.3.7.bb
@@ -1,28 +1,6 @@
-SUMMARY = "Extends Python unittest to make testing easier"
-DESCRIPTION = "nose extends the test loading and running features of unittest, \
-making it easier to write, find and run tests."
-SECTION = "devel/python"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://lgpl.txt;md5=a6f89e2100d9b6cdffcea4f398e37343"
-
-SRC_URI = "https://files.pythonhosted.org/packages/source/n/nose/nose-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "4d3ad0ff07b61373d2cefc89c5d0b20b"
-SRC_URI[sha256sum] = "f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"
-
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/nose/"
-UPSTREAM_CHECK_REGEX = "/nose/(?P<pver>(\d+[\.\-_]*)+)"
-
-S = "${WORKDIR}/nose-${PV}"
-
+require python-nose.inc
 inherit setuptools3
 
 do_install_append() {
     mv ${D}${bindir}/nosetests ${D}${bindir}/nosetests3
 }
-
-RDEPENDS_${PN}_class-target = "\
-  python3-unittest \
-  "
-
-BBCLASSEXTEND = "native nativesdk"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 12/19] python-six: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (10 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 11/19] python-nose: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 13/19] python-async: " Tim Orling
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify python3-six by using pypi.bbclass
  - Use PYTHON_PN in .inc to avoid duplication in RDEPENDS

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-six.inc        | 8 +++-----
 meta/recipes-devtools/python/python3-six_1.11.0.bb | 4 +---
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/meta/recipes-devtools/python/python-six.inc b/meta/recipes-devtools/python/python-six.inc
index f9e7d6429d0..aeac7e7e9fc 100644
--- a/meta/recipes-devtools/python/python-six.inc
+++ b/meta/recipes-devtools/python/python-six.inc
@@ -4,13 +4,11 @@ SECTION = "devel/python"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=35cec5bf04dd0820d0a18533ea7c774a"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/s/six/six-${PV}.tar.gz"
 SRC_URI[md5sum] = "d12789f9baf7e9fb2524c0c64f1773f8"
 SRC_URI[sha256sum] = "70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/six/"
-UPSTREAM_CHECK_REGEX = "/six/(?P<pver>(\d+[\.\-_]*)+)"
+inherit pypi
 
-BBCLASSEXTEND = "native nativesdk"
+RDEPENDS_${PN} += "${PYTHON_PN}-io"
 
-S = "${WORKDIR}/six-${PV}"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-six_1.11.0.bb b/meta/recipes-devtools/python/python3-six_1.11.0.bb
index 38a47b77ddf..9c41f947625 100644
--- a/meta/recipes-devtools/python/python3-six_1.11.0.bb
+++ b/meta/recipes-devtools/python/python3-six_1.11.0.bb
@@ -1,4 +1,2 @@
-inherit setuptools3
 require python-six.inc
-
-RDEPENDS_${PN} += "python3-io"
+inherit setuptools3
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 13/19] python-async: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (11 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 12/19] python-six: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 14/19] python-mako: " Tim Orling
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify by using pypi.bbclass
* Use PYTHON_PN for RDEPENDS in .inc to avoid duplication

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-async.inc       | 5 ++---
 meta/recipes-devtools/python/python3-async_0.6.2.bb | 3 ---
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/meta/recipes-devtools/python/python-async.inc b/meta/recipes-devtools/python/python-async.inc
index 2c5cb4d1916..56e9592ac02 100644
--- a/meta/recipes-devtools/python/python-async.inc
+++ b/meta/recipes-devtools/python/python-async.inc
@@ -4,12 +4,11 @@ SECTION = "devel/python"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/a/async/async-${PV}.tar.gz"
 SRC_URI[md5sum] = "9b06b5997de2154f3bc0273f80bcef6b"
 SRC_URI[sha256sum] = "ac6894d876e45878faae493b0cf61d0e28ec417334448ac0a6ea2229d8343051"
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/async/"
+inherit pypi
 
-S = "${WORKDIR}/async-${PV}"
+RDEPENDS_${PN} += "${PYTHON_PN}-threading"
 
 BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python3-async_0.6.2.bb b/meta/recipes-devtools/python/python3-async_0.6.2.bb
index f45781c44f8..e62b21fcaef 100644
--- a/meta/recipes-devtools/python/python3-async_0.6.2.bb
+++ b/meta/recipes-devtools/python/python3-async_0.6.2.bb
@@ -1,6 +1,3 @@
 require python-async.inc
 
 inherit setuptools3
-
-RDEPENDS_${PN} += "python3-threading"
-
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 14/19] python-mako: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (12 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 13/19] python-async: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 15/19] python-smmap: " Tim Orling
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify python3-mako by using pypi.bbclass
* Avoid duplication by using PYTHON_PN in .inc

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-mako.inc       | 14 +++++++++-----
 meta/recipes-devtools/python/python3-mako_1.0.7.bb |  9 ---------
 2 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/meta/recipes-devtools/python/python-mako.inc b/meta/recipes-devtools/python/python-mako.inc
index 1c83af6a239..7adae6161e8 100644
--- a/meta/recipes-devtools/python/python-mako.inc
+++ b/meta/recipes-devtools/python/python-mako.inc
@@ -4,13 +4,17 @@ SECTION = "devel/python"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=1bb21fa2d2f7a534c884b990430a6863"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/M/Mako/Mako-${PV}.tar.gz"
+PYPI_PACKAGE = "Mako"
+
+inherit pypi
 
 SRC_URI[md5sum] = "5836cc997b1b773ef389bf6629c30e65"
 SRC_URI[sha256sum] = "4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae"
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/mako/"
-UPSTREAM_CHECK_REGEX = "/Mako/(?P<pver>(\d+[\.\-_]*)+)"
-
-S = "${WORKDIR}/Mako-${PV}"
+RDEPENDS_${PN}_class-target += " \
+  ${PYTHON_PN}-html \
+  ${PYTHON_PN}-netclient \
+  ${PYTHON_PN}-threading \
+  "
 
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/python/python3-mako_1.0.7.bb b/meta/recipes-devtools/python/python3-mako_1.0.7.bb
index 2b50ffd08ad..156d4f16829 100644
--- a/meta/recipes-devtools/python/python3-mako_1.0.7.bb
+++ b/meta/recipes-devtools/python/python3-mako_1.0.7.bb
@@ -1,11 +1,2 @@
 require python-mako.inc
-
 inherit setuptools3
-
-RDEPENDS_${PN} = "python3-threading \
-                  python3-netclient \
-                  python3-html \
-"
-RDEPENDS_${PN}_class-native = ""
-
-BBCLASSEXTEND = "native nativesdk"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 15/19] python-smmap: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (13 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 14/19] python-mako: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 16/19] python-gitdb: " Tim Orling
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simpify python3-smmap using pypi.bbclass
* Consolidate common content in .inc

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-smmap.inc       | 9 +++++----
 meta/recipes-devtools/python/python3-smmap_0.9.0.bb | 2 --
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/meta/recipes-devtools/python/python-smmap.inc b/meta/recipes-devtools/python/python-smmap.inc
index d67e6b54124..4117c947947 100644
--- a/meta/recipes-devtools/python/python-smmap.inc
+++ b/meta/recipes-devtools/python/python-smmap.inc
@@ -7,13 +7,14 @@ SECTION = "devel/python"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/s/smmap/smmap-${PV}.tar.gz"
 SRC_URI[md5sum] = "d7932d5ace206bf4ae15198cf36fb6ab"
 SRC_URI[sha256sum] = "0e2b62b497bd5f0afebc002eda4d90df9d209c30ef257e8673c90a6b5c119d62"
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/smmap/"
-UPSTREAM_CHECK_REGEX = "/smmap/(?P<pver>(\d+[\.\-_]*)+)"
+inherit pypi
 
-S = "${WORKDIR}/smmap-${PV}"
+RDEPENDS_${PN} += " \
+  ${PYTHON_PN}-codecs \
+  ${PYTHON_PN}-mmap \
+  "
 
 BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python3-smmap_0.9.0.bb b/meta/recipes-devtools/python/python3-smmap_0.9.0.bb
index 1df74c172c4..9c25ca18096 100644
--- a/meta/recipes-devtools/python/python3-smmap_0.9.0.bb
+++ b/meta/recipes-devtools/python/python3-smmap_0.9.0.bb
@@ -1,5 +1,3 @@
 require python-smmap.inc
 
 inherit setuptools3
-
-RDEPENDS_${PN} += "python3-codecs python3-mmap"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 16/19] python-gitdb: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (14 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 15/19] python-smmap: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 17/19] python-git: " Tim Orling
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify python3-gitdb recipe using pypi.bblass
* Avoid duplication by using PYTHON_PN in .inc
* Sort RDEPENDS alphabetically

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-gitdb.inc       | 16 ++++++++++++----
 meta/recipes-devtools/python/python3-gitdb_0.6.4.bb |  4 ----
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/meta/recipes-devtools/python/python-gitdb.inc b/meta/recipes-devtools/python/python-gitdb.inc
index 08193fbf258..45c75ef3089 100644
--- a/meta/recipes-devtools/python/python-gitdb.inc
+++ b/meta/recipes-devtools/python/python-gitdb.inc
@@ -4,13 +4,21 @@ SECTION = "devel/python"
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=59e5ecb13339a936eedf83282eaf4528"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/g/gitdb/gitdb-${PV}.tar.gz"
-
 SRC_URI[md5sum] = "44e4366b8bdfd306b075c3a52c96ae1a"
 SRC_URI[sha256sum] = "a3ebbc27be035a2e874ed904df516e35f4a29a778a764385de09de9e0f139658"
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/gitdb/"
+inherit pypi
+
+DEPENDS = "${PYTHON_PN}-async ${PYTHON_PN}-smmap"
 
-S = "${WORKDIR}/gitdb-${PV}"
+RDEPENDS_${PN} += " \
+  ${PYTHON_PN}-async \
+  ${PYTHON_PN}-compression \
+  ${PYTHON_PN}-crypt \
+  ${PYTHON_PN}-io \
+  ${PYTHON_PN}-mmap \
+  ${PYTHON_PN}-shell \
+  ${PYTHON_PN}-smmap \
+  "
 
 BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb b/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb
index a209c52f9ee..412cf8c02c9 100644
--- a/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb
+++ b/meta/recipes-devtools/python/python3-gitdb_0.6.4.bb
@@ -1,7 +1,3 @@
 require python-gitdb.inc
 
-DEPENDS = "python3-async python3-smmap"
-
 inherit distutils3
-
-RDEPENDS_${PN} += "python3-smmap python3-async python3-mmap python3-io python3-shell python3-crypt python3-compression"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 17/19] python-git: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (15 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 16/19] python-gitdb: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 18/19] python3-iniparse: " Tim Orling
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify python3-git recipe using pypi.bbclass
* Avoid duplication by using PYTHON_PN in .inc
* Sort RDEPENDS alphabetically

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python-git.inc       | 23 ++++++++++++++++++-----
 meta/recipes-devtools/python/python3-git_2.1.7.bb |  4 ----
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/meta/recipes-devtools/python/python-git.inc b/meta/recipes-devtools/python/python-git.inc
index 0b7e44ac0c4..696f8081de9 100644
--- a/meta/recipes-devtools/python/python-git.inc
+++ b/meta/recipes-devtools/python/python-git.inc
@@ -8,14 +8,27 @@ SECTION = "devel/python"
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=8b8d26c37c1d5a04f9b0186edbebc183"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/G/GitPython/GitPython-${PV}.tar.gz"
-
 SRC_URI[md5sum] = "a63fdd2a650694ea23e268fd0c952034"
 SRC_URI[sha256sum] = "13c7cd99c2bf277fc99accfc25148752fa90e7cc6c6d08a3f01d229dacb461d9"
 
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/GitPython/"
-UPSTREAM_CHECK_REGEX = "/GitPython/(?P<pver>(\d+[\.\-_]*)+)"
+PYPI_PACKAGE = "GitPython"
+
+inherit pypi
+
+DEPENDS = "${PYTHON_PN}-gitdb"
 
-S = "${WORKDIR}/GitPython-${PV}"
 
+RDEPENDS_${PN} += " \
+  ${PYTHON_PN}-datetime \
+  ${PYTHON_PN}-gitdb \
+  ${PYTHON_PN}-io \
+  ${PYTHON_PN}-logging \
+  ${PYTHON_PN}-math \
+  ${PYTHON_PN}-netclient \
+  ${PYTHON_PN}-shell \
+  ${PYTHON_PN}-stringold \
+  ${PYTHON_PN}-unittest \
+  ${PYTHON_PN}-unixadmin \
+  git \
+  "
 BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/python/python3-git_2.1.7.bb b/meta/recipes-devtools/python/python3-git_2.1.7.bb
index ca42688f97e..1d69de5c782 100644
--- a/meta/recipes-devtools/python/python3-git_2.1.7.bb
+++ b/meta/recipes-devtools/python/python3-git_2.1.7.bb
@@ -1,7 +1,3 @@
 require python-git.inc
 
-DEPENDS = "python3-gitdb"
-
 inherit setuptools3
-
-RDEPENDS_${PN} += "python3-gitdb python3-io python3-shell python3-math python3-stringold python3-unixadmin python3-logging python3-datetime python3-netclient python3-unittest git"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 18/19] python3-iniparse: use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (16 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 17/19] python-git: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 22:45 ` [PATCH v2 19/19] python-scons: upgrade to 3.0.1; " Tim Orling
  2017-12-08 23:02 ` ✗ patchtest: failure for python improvements Patchwork
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify recipe using pypi.bbclass

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 meta/recipes-devtools/python/python3-iniparse_0.4.bb | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/meta/recipes-devtools/python/python3-iniparse_0.4.bb b/meta/recipes-devtools/python/python3-iniparse_0.4.bb
index f51ce647c9b..7ab9fe3b386 100644
--- a/meta/recipes-devtools/python/python3-iniparse_0.4.bb
+++ b/meta/recipes-devtools/python/python3-iniparse_0.4.bb
@@ -4,17 +4,14 @@ LICENSE = "MIT & PSF"
 LIC_FILES_CHKSUM = "file://LICENSE-PSF;md5=1c78a5bb3584b353496d5f6f34edb4b2 \
                     file://LICENSE;md5=52f28065af11d69382693b45b5a8eb54"
 
-SRC_URI = "https://files.pythonhosted.org/packages/source/i/iniparse/iniparse-${PV}.tar.gz \
-           file://0001-Add-python-3-compatibility.patch "
+SRC_URI = "file://0001-Add-python-3-compatibility.patch"
 SRC_URI[md5sum] = "5e573e9e9733d97623881ce9bbe5eca6"
 SRC_URI[sha256sum] = "abc1ee12d2cfb2506109072d6c21e40b6c75a3fe90a9c924327d80bc0d99c054"
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/iniparse/"
 
-inherit distutils3
+inherit pypi distutils3
 
-RDEPENDS_${PN} += "python3-core python3-six"
 DEPENDS += "python3-six"
 
-BBCLASSEXTEND = "native nativesdk"
+RDEPENDS_${PN} += "python3-core python3-six"
 
-S = "${WORKDIR}/iniparse-${PV}"
+BBCLASSEXTEND = "native nativesdk"
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 19/19] python-scons: upgrade to 3.0.1; use pypi.bbclass
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (17 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 18/19] python3-iniparse: " Tim Orling
@ 2017-12-08 22:45 ` Tim Orling
  2017-12-08 23:02 ` ✗ patchtest: failure for python improvements Patchwork
  19 siblings, 0 replies; 21+ messages in thread
From: Tim Orling @ 2017-12-08 22:45 UTC (permalink / raw)
  To: openembedded-core

* Simplify recipe by using pypi.bbclass
* Drop patch for __future__ print_function
  - fixed upstream:
https://github.com/SConsProject/scons/pull/1/commits/4c199d06e76afb9379e76942d0f68caa57f42509

Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
---
 ...ative_3.0.0.bb => python-scons-native_3.0.1.bb} |  0
 ...onscript-Support-python2-print-statements.patch | 38 ----------------------
 meta/recipes-devtools/python/python-scons_3.0.0.bb | 27 ---------------
 meta/recipes-devtools/python/python-scons_3.0.1.bb | 18 ++++++++++
 4 files changed, 18 insertions(+), 65 deletions(-)
 rename meta/recipes-devtools/python/{python-scons-native_3.0.0.bb => python-scons-native_3.0.1.bb} (100%)
 delete mode 100644 meta/recipes-devtools/python/python-scons/SConscript-Support-python2-print-statements.patch
 delete mode 100644 meta/recipes-devtools/python/python-scons_3.0.0.bb
 create mode 100644 meta/recipes-devtools/python/python-scons_3.0.1.bb

diff --git a/meta/recipes-devtools/python/python-scons-native_3.0.0.bb b/meta/recipes-devtools/python/python-scons-native_3.0.1.bb
similarity index 100%
rename from meta/recipes-devtools/python/python-scons-native_3.0.0.bb
rename to meta/recipes-devtools/python/python-scons-native_3.0.1.bb
diff --git a/meta/recipes-devtools/python/python-scons/SConscript-Support-python2-print-statements.patch b/meta/recipes-devtools/python/python-scons/SConscript-Support-python2-print-statements.patch
deleted file mode 100644
index b1a790219ed..00000000000
--- a/meta/recipes-devtools/python/python-scons/SConscript-Support-python2-print-statements.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 885aabdb313685405737112dcb7d7774eee6d879 Mon Sep 17 00:00:00 2001
-From: Thomas Berg <merlin66b@gmail.com>
-Date: Thu, 19 Oct 2017 14:02:21 -0500
-Subject: [PATCH] SConscript: Support python2 print statements
-
-This fixes a regression introduced in scons-3.0.0, where
-SConscripts containing python 2 print statements would cause
-syntax errors even when executing scons with python 2.7.
-
-This ensures backward compatibility, allowing users to build
-legacy code with scons-3.0.0 without having to patch it.
-
-Taken from
-https://github.com/SConsProject/scons/commit/2e0de3c55f22b3eaa7767b69740b898f3d2f46bf
-
-Upstream-Status: Accepted
-
-Signed-off-by: Jose Lamego <jose.a.lamego@linux.intel.com>
----
- engine/SCons/Script/SConscript.py | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/engine/SCons/Script/SConscript.py b/engine/SCons/Script/SConscript.py
-index bc05540..332d1fa 100644
---- a/engine/SCons/Script/SConscript.py
-+++ b/engine/SCons/Script/SConscript.py
-@@ -5,8 +5,6 @@ files.
- 
- """
- 
--from __future__ import print_function
--
- #
- # Copyright (c) 2001 - 2017 The SCons Foundation
- #
--- 
-2.7.4
-
diff --git a/meta/recipes-devtools/python/python-scons_3.0.0.bb b/meta/recipes-devtools/python/python-scons_3.0.0.bb
deleted file mode 100644
index e780c542e4a..00000000000
--- a/meta/recipes-devtools/python/python-scons_3.0.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "Software Construction tool (make/autotools replacement)"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=46ddf66004e5be5566367cb525a66fc6"
-SRCNAME = "scons"
-
-SRC_URI = "https://files.pythonhosted.org/packages/source/s/${SRCNAME}/${SRCNAME}-${PV}.tar.gz \
-           file://SConscript-Support-python2-print-statements.patch"
-
-SRC_URI[md5sum] = "7ca558edaaa1942fe38f3105ca2400fb"
-SRC_URI[sha256sum] = "aa5afb33c2bbd33c311e47e912412195739e9ffb2e933534a31f85fba8f3470e"
-
-UPSTREAM_CHECK_URI = "http://scons.org/pages/download.html"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
-
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-inherit setuptools
-
-RDEPENDS_${PN} = "\
-  python-fcntl \
-  python-io \
-  python-json \
-  python-subprocess \
-  python-shell \
-  python-pprint \
-  "
diff --git a/meta/recipes-devtools/python/python-scons_3.0.1.bb b/meta/recipes-devtools/python/python-scons_3.0.1.bb
new file mode 100644
index 00000000000..4add9eb3ad7
--- /dev/null
+++ b/meta/recipes-devtools/python/python-scons_3.0.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Software Construction tool (make/autotools replacement)"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=46ddf66004e5be5566367cb525a66fc6"
+
+SRC_URI[md5sum] = "b6a292e251b34b82c203b56cfa3968b3"
+SRC_URI[sha256sum] = "24475e38d39c19683bc88054524df018fe6949d70fbd4c69e298d39a0269f173"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "\
+  python-fcntl \
+  python-io \
+  python-json \
+  python-subprocess \
+  python-shell \
+  python-pprint \
+  "
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* ✗ patchtest: failure for python improvements
  2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
                   ` (18 preceding siblings ...)
  2017-12-08 22:45 ` [PATCH v2 19/19] python-scons: upgrade to 3.0.1; " Tim Orling
@ 2017-12-08 23:02 ` Patchwork
  19 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2017-12-08 23:02 UTC (permalink / raw)
  To: Tim Orling; +Cc: openembedded-core

== Series Details ==

Series: python improvements
Revision: 1
URL   : https://patchwork.openembedded.org/series/10133/
State : failure

== Summary ==


Thank you for submitting this patch series to OpenEmbedded Core. This is
an automated response. Several tests have been executed on the proposed
series by patchtest resulting in the following failures:



* Issue             Series cannot be parsed correctly due to malformed diff lines [test_mbox_format] 
  Suggested fix    Create the series again using git-format-patch and ensure it can be applied using git am
  Diff line        diff --git a/meta/recipes-devtools/python/python-native_2.7.13.bb b/meta/recipes-devtools/python/python-native_2.7.13.bb


* Issue             Series does not apply on top of target branch [test_series_merge_on_head] 
  Suggested fix    Rebase your series on top of targeted branch
  Targeted branch  master (currently at a7cd9d1183)



If you believe any of these test results are incorrect, please reply to the
mailing list (openembedded-core@lists.openembedded.org) raising your concerns.
Otherwise we would appreciate you correcting the issues and submitting a new
version of the patchset if applicable. Please ensure you add/increment the
version number when sending the new version (i.e. [PATCH] -> [PATCH v2] ->
[PATCH v3] -> ...).

---
Guidelines:     https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines
Test framework: http://git.yoctoproject.org/cgit/cgit.cgi/patchtest
Test suite:     http://git.yoctoproject.org/cgit/cgit.cgi/patchtest-oe



^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2017-12-08 23:02 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-08 22:45 [PATCH v2 00/19] python improvements Tim Orling
2017-12-08 22:45 ` [PATCH v2 01/19] python: Restructure python packaging and replace it with autopackaging Tim Orling
2017-12-08 22:45 ` [PATCH v2 02/19] python3: Restructure python3 " Tim Orling
2017-12-08 22:45 ` [PATCH v2 03/19] python3: fix RDEPENDS on several recipes, due to non-existent python3 packages Tim Orling
2017-12-08 22:45 ` [PATCH v2 04/19] hwlatdetect: fix RDEPENDS to avoid QA failures Tim Orling
2017-12-08 22:45 ` [PATCH v2 05/19] python-scons: Remove python-importlib dependency Tim Orling
2017-12-08 22:45 ` [PATCH v2 06/19] pypi.bbclass: bring in from meta-python Tim Orling
2017-12-08 22:45 ` [PATCH v2 07/19] python2 create_manifest.py: fix trailing whitespace in json Tim Orling
2017-12-08 22:45 ` [PATCH v2 08/19] python*-manifest.json: add dependencies, runpy Tim Orling
2017-12-08 22:45 ` [PATCH v2 09/19] python*-setuptools: upgrade to 38.2.3; use pypi.bbclass; improvements Tim Orling
2017-12-08 22:45 ` [PATCH v2 10/19] python3-pip: use pypi.bbclass Tim Orling
2017-12-08 22:45 ` [PATCH v2 11/19] python-nose: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 12/19] python-six: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 13/19] python-async: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 14/19] python-mako: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 15/19] python-smmap: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 16/19] python-gitdb: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 17/19] python-git: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 18/19] python3-iniparse: " Tim Orling
2017-12-08 22:45 ` [PATCH v2 19/19] python-scons: upgrade to 3.0.1; " Tim Orling
2017-12-08 23:02 ` ✗ patchtest: failure for python improvements Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.