All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] python3: don't sort the manifest in create_manifest
@ 2018-09-21 11:48 Ross Burton
  2018-09-21 11:48 ` [PATCH 2/4] python3: respect package order in manifest Ross Burton
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Ross Burton @ 2018-09-21 11:48 UTC (permalink / raw)
  To: openembedded-core

Instead of sorting the entire manifest when it is updated, use OrderedDict to
preserve the order of fields.  This means that packages can be ordered in the
manifest to allow non-trivial FILES assignments (such as a package that picks up
pieces of other packages)

The manifest has been regenerated with the new stable ordering, and
distutils-staticdev moved above distutils so the packaging rules work as
expected.

Signed-off-by: Ross Burton <ross.burton@intel.com>
---
 .../python/python3/create_manifest3.py             |  21 +-
 .../python/python3/python3-manifest.json           | 940 ++++++++++-----------
 2 files changed, 480 insertions(+), 481 deletions(-)

diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py
index 2db5e3b0b67..efef62af943 100644
--- a/meta/recipes-devtools/python/python3/create_manifest3.py
+++ b/meta/recipes-devtools/python/python3/create_manifest3.py
@@ -43,6 +43,7 @@ import sys
 import subprocess
 import json
 import os
+import collections
 
 # Get python version from ${PYTHON_MAJMIN}
 pyversion = str(sys.argv[1])
@@ -54,7 +55,7 @@ for p in sys.path:
         nativelibfolder = p[:p.find(pivot)+len(pivot)]
 
 # Empty dict to hold the whole manifest
-new_manifest = {}
+new_manifest = collections.OrderedDict()
 
 # Check for repeated files, folders and wildcards
 allfiles = []
@@ -79,7 +80,7 @@ def isCached(item):
 
 # Read existing JSON manifest
 with open('python3-manifest.json') as manifest:
-    old_manifest = json.load(manifest)
+    old_manifest = json.load(manifest, object_pairs_hook=collections.OrderedDict)
 
 #
 # First pass to get core-package functionality, because we base everything on the fact that core is actually working
@@ -195,18 +196,16 @@ for pypkg in old_manifest:
 
 for pypkg in old_manifest:
     # Use an empty dict as data structure to hold data for each package and fill it up
-    new_manifest[pypkg] = {}
-    new_manifest[pypkg]['files'] = []
+    new_manifest[pypkg] = collections.OrderedDict()
+    new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary']
     new_manifest[pypkg]['rdepends'] = []
+    new_manifest[pypkg]['files'] = []
+    new_manifest[pypkg]['cached'] = old_manifest[pypkg]['cached']
 
     # All packages should depend on core
     if pypkg != 'core':
-         new_manifest[pypkg]['rdepends'].append('core')
-         new_manifest[pypkg]['cached'] = []
-    else:
-         new_manifest[pypkg]['cached'] = old_manifest[pypkg]['cached']
-    new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary']
-
+        new_manifest[pypkg]['rdepends'].append('core')
+        new_manifest[pypkg]['cached'] = []
 
     print('\n')
     print('--------------------------')
@@ -400,7 +399,7 @@ for pypkg in new_manifest:
 
 # 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)
+    json.dump(new_manifest,outfile, indent=4)
     outfile.write('\n')
 
 if (repeated):
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
index 90a41fbf29c..95ae3fb0215 100644
--- a/meta/recipes-devtools/python/python3/python3-manifest.json
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -1,22 +1,17 @@
 {
     "2to3": {
-        "cached": [],
+        "summary": "Python automated Python 2 to 3 code translator",
+        "rdepends": [
+            "core"
+        ],
         "files": [
             "${bindir}/2to3-*",
             "${libdir}/python${PYTHON_MAJMIN}/lib2to3"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python automated Python 2 to 3 code translator"
+        "cached": []
     },
     "asyncio": {
-        "cached": [],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/asyncio",
-            "${libdir}/python${PYTHON_MAJMIN}/concurrent",
-            "${libdir}/python${PYTHON_MAJMIN}/concurrent/futures"
-        ],
+        "summary": "Python Asynchronous I/",
         "rdepends": [
             "compression",
             "core",
@@ -32,14 +27,17 @@
             "threading",
             "unixadmin"
         ],
-        "summary": "Python Asynchronous I/"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/asyncio",
+            "${libdir}/python${PYTHON_MAJMIN}/concurrent",
+            "${libdir}/python${PYTHON_MAJMIN}/concurrent/futures"
+        ],
+        "cached": []
     },
     "audio": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/chunk.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sndhdr.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sunau.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc"
+        "summary": "Python Audio Handling",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/chunk.py",
@@ -49,33 +47,28 @@
             "${libdir}/python${PYTHON_MAJMIN}/sunau.py",
             "${libdir}/python${PYTHON_MAJMIN}/wave.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python Audio Handling"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/chunk.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sndhdr.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sunau.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc"
+        ]
     },
     "codecs": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/xdrlib.*.pyc"
+        "summary": "Python codec",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multibytecodec.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/xdrlib.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python codec"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/xdrlib.*.pyc"
+        ]
     },
     "compile": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc"
-        ],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/compileall.py",
-            "${libdir}/python${PYTHON_MAJMIN}/py_compile.py"
-        ],
+        "summary": "Python bytecode compilation support",
         "rdepends": [
             "asyncio",
             "compression",
@@ -91,16 +84,21 @@
             "threading",
             "unixadmin"
         ],
-        "summary": "Python bytecode compilation support"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/compileall.py",
+            "${libdir}/python${PYTHON_MAJMIN}/py_compile.py"
+        ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc"
+        ]
     },
     "compression": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipfile.*.pyc"
+        "summary": "Python high-level compression support",
+        "rdepends": [
+            "core",
+            "shell",
+            "unixadmin"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/_compression.py",
@@ -113,87 +111,18 @@
             "${libdir}/python${PYTHON_MAJMIN}/tarfile.py",
             "${libdir}/python${PYTHON_MAJMIN}/zipfile.py"
         ],
-        "rdepends": [
-            "core",
-            "shell",
-            "unixadmin"
-        ],
-        "summary": "Python high-level compression support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipfile.*.pyc"
+        ]
     },
     "core": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/__future__.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_bootlocale.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_collections_abc.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_markupbase.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sitebuiltins.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_weakrefset.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/abc.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/argparse.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ast.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bisect.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/code.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codecs.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/configparser.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextlib.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dis.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/enum.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/functools.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/genericpath.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getopt.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gettext.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/heapq.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imp.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/inspect.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/io.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/opcode.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/operator.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/optparse.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/os.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/platform.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/posixpath.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/re.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/reprlib.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/rlcompleter.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/selectors.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/signal.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/site.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_compile.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_constants.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_parse.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stat.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stringprep.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/struct.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/subprocess.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/symbol.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sysconfig.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/textwrap.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/threading.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/token.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tokenize.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/types.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/warnings.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/weakref.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__",
-            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__/abc.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__",
-            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/aliases.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/latin_1.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/utf_8.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__",
-            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/abc.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/machinery.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc"
-        ],
+        "summary": "Python interpreter and core modules",
+        "rdepends": [],
         "files": [
             "${bindir}/python*[!-config]",
             "${includedir}/python${PYTHON_BINABI}/pyconfig*.h",
@@ -296,13 +225,86 @@
             "${libdir}/python${PYTHON_MAJMIN}/warnings.py",
             "${libdir}/python${PYTHON_MAJMIN}/weakref.py"
         ],
-        "rdepends": [],
-        "summary": "Python interpreter and core modules"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/__future__.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_bootlocale.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_collections_abc.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_markupbase.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sitebuiltins.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_weakrefset.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/abc.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/argparse.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ast.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bisect.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/code.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codecs.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/configparser.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextlib.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dis.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/enum.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/functools.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/genericpath.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getopt.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gettext.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/heapq.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imp.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/inspect.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/io.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/opcode.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/operator.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/optparse.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/os.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/platform.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/posixpath.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/re.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/reprlib.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/rlcompleter.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/selectors.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/signal.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/site.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_compile.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_constants.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_parse.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stat.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stringprep.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/struct.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/subprocess.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/symbol.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sysconfig.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/textwrap.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/threading.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/token.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tokenize.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/types.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/warnings.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/weakref.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__",
+            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__/abc.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__",
+            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/aliases.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/latin_1.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/utf_8.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__",
+            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/abc.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/machinery.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc"
+        ]
     },
     "crypt": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/crypt.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hashlib.*.pyc"
+        "summary": "Python basic cryptographic and hashing support",
+        "rdepends": [
+            "core",
+            "math",
+            "stringold"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/crypt.py",
@@ -312,81 +314,79 @@
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha256.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha512.*.so"
         ],
-        "rdepends": [
-            "core",
-            "math",
-            "stringold"
-        ],
-        "summary": "Python basic cryptographic and hashing support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/crypt.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hashlib.*.pyc"
+        ]
     },
     "ctypes": {
-        "cached": [],
+        "summary": "Python C types support",
+        "rdepends": [
+            "core"
+        ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/ctypes",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes_test.*.so"
         ],
+        "cached": []
+    },
+    "curses": {
+        "summary": "Python curses support",
         "rdepends": [
             "core"
         ],
-        "summary": "Python C types support"
-    },
-    "curses": {
-        "cached": [],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/curses",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses_panel.*.so"
         ],
+        "cached": []
+    },
+    "datetime": {
+        "summary": "Python calendar and time support",
         "rdepends": [
             "core"
         ],
-        "summary": "Python curses support"
-    },
-    "datetime": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/calendar.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/datetime.*.pyc"
-        ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/_strptime.py",
             "${libdir}/python${PYTHON_MAJMIN}/calendar.py",
             "${libdir}/python${PYTHON_MAJMIN}/datetime.py",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_datetime.*.so"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/calendar.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/datetime.*.pyc"
+        ]
+    },
+    "db": {
+        "summary": "Python file-based database support",
         "rdepends": [
             "core"
         ],
-        "summary": "Python calendar and time support"
-    },
-    "db": {
-        "cached": [],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/dbm",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_dbm.*.so"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python file-based database support"
+        "cached": []
     },
     "debugger": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bdb.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pdb.*.pyc"
-        ],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/bdb.py",
-            "${libdir}/python${PYTHON_MAJMIN}/pdb.py"
-        ],
+        "summary": "Python debugger",
         "rdepends": [
             "core",
             "pprint",
             "shell",
             "stringold"
         ],
-        "summary": "Python debugger"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/bdb.py",
+            "${libdir}/python${PYTHON_MAJMIN}/pdb.py"
+        ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bdb.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pdb.*.pyc"
+        ]
     },
     "dev": {
         "cached": [],
@@ -411,26 +411,16 @@
         "summary": "Python development package"
     },
     "difflib": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc"
-        ],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/difflib.py"
-        ],
+        "summary": "Python helpers for computing deltas between objects",
         "rdepends": [
             "core"
         ],
-        "summary": "Python helpers for computing deltas between objects"
-    },
-    "distutils": {
-        "cached": [],
         "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/distutils"
-        ],
-        "rdepends": [
-            "core"
+            "${libdir}/python${PYTHON_MAJMIN}/difflib.py"
         ],
-        "summary": "Python Distribution Utilities"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc"
+        ]
     },
     "distutils-staticdev": {
         "cached": [
@@ -444,13 +434,18 @@
         ],
         "summary": "Python distribution utilities (static libraries)"
     },
-    "doctest": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/doctest.*.pyc"
+    "distutils": {
+        "summary": "Python Distribution Utilities",
+        "rdepends": [
+            "core"
         ],
         "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/doctest.py"
+            "${libdir}/python${PYTHON_MAJMIN}/distutils"
         ],
+        "cached": []
+    },
+    "doctest": {
+        "summary": "Python framework for running examples in docstrings",
         "rdepends": [
             "core",
             "debugger",
@@ -461,16 +456,15 @@
             "stringold",
             "unittest"
         ],
-        "summary": "Python framework for running examples in docstrings"
-    },
-    "email": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc"
-        ],
         "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/email",
-            "${libdir}/python${PYTHON_MAJMIN}/imaplib.py"
+            "${libdir}/python${PYTHON_MAJMIN}/doctest.py"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/doctest.*.pyc"
+        ]
+    },
+    "email": {
+        "summary": "Python email support",
         "rdepends": [
             "core",
             "crypt",
@@ -479,74 +473,82 @@
             "math",
             "netclient"
         ],
-        "summary": "Python email support"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/email",
+            "${libdir}/python${PYTHON_MAJMIN}/imaplib.py"
+        ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc"
+        ]
     },
     "fcntl": {
-        "cached": [],
+        "summary": "Python's fcntl interface",
+        "rdepends": [
+            "core"
+        ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so"
         ],
+        "cached": []
+    },
+    "gdbm": {
+        "summary": "Python GNU database support",
         "rdepends": [
             "core"
         ],
-        "summary": "Python's fcntl interface"
-    },
-    "gdbm": {
-        "cached": [],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_gdbm.*.so"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python GNU database support"
+        "cached": []
     },
     "html": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/formatter.*.pyc"
+        "summary": "Python HTML processing support",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/formatter.py",
             "${libdir}/python${PYTHON_MAJMIN}/html"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/formatter.*.pyc"
+        ]
+    },
+    "idle": {
+        "summary": "Python Integrated Development Environment",
         "rdepends": [
             "core"
         ],
-        "summary": "Python HTML processing support"
-    },
-    "idle": {
-        "cached": [],
         "files": [
             "${bindir}/idle*",
             "${libdir}/python${PYTHON_MAJMIN}/idlelib"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python Integrated Development Environment"
+        "cached": []
     },
     "image": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/colorsys.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imghdr.*.pyc"
+        "summary": "Python graphical image handling",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/colorsys.py",
             "${libdir}/python${PYTHON_MAJMIN}/imghdr.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python graphical image handling"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/colorsys.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imghdr.*.pyc"
+        ]
     },
     "io": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pipes.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tempfile.*.pyc"
+        "summary": "Python low-level I/O",
+        "rdepends": [
+            "compression",
+            "core",
+            "crypt",
+            "math",
+            "netclient",
+            "shell",
+            "unixadmin"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/_pyio.py",
@@ -559,46 +561,39 @@
             "${libdir}/python${PYTHON_MAJMIN}/ssl.py",
             "${libdir}/python${PYTHON_MAJMIN}/tempfile.py"
         ],
-        "rdepends": [
-            "compression",
-            "core",
-            "crypt",
-            "math",
-            "netclient",
-            "shell",
-            "unixadmin"
-        ],
-        "summary": "Python low-level I/O"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pipes.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tempfile.*.pyc"
+        ]
     },
     "json": {
-        "cached": [],
+        "summary": "Python JSON support",
+        "rdepends": [
+            "core"
+        ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/json",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_json.*.so"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python JSON support"
+        "cached": []
     },
     "logging": {
-        "cached": [],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/logging"
-        ],
+        "summary": "Python logging support",
         "rdepends": [
             "core",
             "stringold"
         ],
-        "summary": "Python logging support"
-    },
-    "mailbox": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mailbox.*.pyc"
-        ],
         "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/mailbox.py"
+            "${libdir}/python${PYTHON_MAJMIN}/logging"
         ],
+        "cached": []
+    },
+    "mailbox": {
+        "summary": "Python mailbox format support",
         "rdepends": [
             "core",
             "crypt",
@@ -611,46 +606,51 @@
             "netclient",
             "stringold"
         ],
-        "summary": "Python mailbox format support"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/mailbox.py"
+        ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mailbox.*.pyc"
+        ]
     },
     "math": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/random.*.pyc"
+        "summary": "Python math support",
+        "rdepends": [
+            "core",
+            "crypt"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_random.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/cmath.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/random.py"
         ],
-        "rdepends": [
-            "core",
-            "crypt"
-        ],
-        "summary": "Python math support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/random.*.pyc"
+        ]
     },
     "mime": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/quopri.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uu.*.pyc"
+        "summary": "Python MIME handling APIs",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/quopri.py",
             "${libdir}/python${PYTHON_MAJMIN}/uu.py"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/quopri.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uu.*.pyc"
+        ]
+    },
+    "mmap": {
+        "summary": "Python memory-mapped file support",
         "rdepends": [
             "core"
         ],
-        "summary": "Python MIME handling APIs"
-    },
-    "mmap": {
-        "cached": [],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/mmap.*.so"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python memory-mapped file support"
+        "cached": []
     },
     "modules": {
         "cached": [],
@@ -713,27 +713,31 @@
         "summary": "All Python modules"
     },
     "multiprocessing": {
-        "cached": [],
+        "summary": "Python multiprocessing support",
+        "rdepends": [
+            "core"
+        ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multiprocessing.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/multiprocessing"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python multiprocessing support"
+        "cached": []
     },
     "netclient": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/base64.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ftplib.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hmac.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/nntplib.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/poplib.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtplib.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/telnetlib.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uuid.*.pyc"
+        "summary": "Python Internet Protocol clients",
+        "rdepends": [
+            "compression",
+            "core",
+            "crypt",
+            "ctypes",
+            "datetime",
+            "email",
+            "io",
+            "math",
+            "mime",
+            "shell",
+            "stringold",
+            "unixadmin"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/base64.py",
@@ -750,54 +754,48 @@
             "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__",
             "${libdir}/python${PYTHON_MAJMIN}/uuid.py"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/base64.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ftplib.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hmac.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/nntplib.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/poplib.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtplib.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/telnetlib.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uuid.*.pyc"
+        ]
+    },
+    "netserver": {
+        "summary": "Python Internet Protocol servers",
         "rdepends": [
             "compression",
             "core",
             "crypt",
-            "ctypes",
             "datetime",
             "email",
+            "html",
             "io",
             "math",
             "mime",
+            "netclient",
             "shell",
             "stringold",
             "unixadmin"
         ],
-        "summary": "Python Internet Protocol clients"
-    },
-    "netserver": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cgi.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socketserver.*.pyc"
-        ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/cgi.py",
             "${libdir}/python${PYTHON_MAJMIN}/socketserver.py"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cgi.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socketserver.*.pyc"
+        ]
+    },
+    "numbers": {
+        "summary": "Python number APIs",
         "rdepends": [
-            "compression",
-            "core",
-            "crypt",
-            "datetime",
-            "email",
-            "html",
-            "io",
-            "math",
-            "mime",
-            "netclient",
-            "shell",
-            "stringold",
-            "unixadmin"
-        ],
-        "summary": "Python Internet Protocol servers"
-    },
-    "numbers": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc"
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/_pydecimal.py",
@@ -806,17 +804,17 @@
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_decimal.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/numbers.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python number APIs"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc"
+        ]
     },
     "pickle": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compat_pickle.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickle.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickletools.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shelve.*.pyc"
+        "summary": "Python serialisation/persistence support",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/_compat_pickle.py",
@@ -825,54 +823,55 @@
             "${libdir}/python${PYTHON_MAJMIN}/pickletools.py",
             "${libdir}/python${PYTHON_MAJMIN}/shelve.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python serialisation/persistence support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compat_pickle.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickle.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickletools.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shelve.*.pyc"
+        ]
     },
     "pkgutil": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pkgutil.*.pyc"
+        "summary": "Python package extension utility support",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python package extension utility support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pkgutil.*.pyc"
+        ]
     },
     "plistlib": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/plistlib.*.pyc"
-        ],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/plistlib.py"
-        ],
+        "summary": "Generate and parse Mac OS X .plist files",
         "rdepends": [
             "core",
             "datetime",
             "xml"
         ],
-        "summary": "Generate and parse Mac OS X .plist files"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/plistlib.py"
+        ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/plistlib.*.pyc"
+        ]
     },
     "pprint": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pprint.*.pyc"
+        "summary": "Python pretty-print support",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/pprint.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python pretty-print support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pprint.*.pyc"
+        ]
     },
     "profile": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc"
+        "summary": "Python basic performance profiling support",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/cProfile.py",
@@ -880,57 +879,58 @@
             "${libdir}/python${PYTHON_MAJMIN}/profile.py",
             "${libdir}/python${PYTHON_MAJMIN}/pstats.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python basic performance profiling support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc"
+        ]
     },
     "pydoc": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pydoc.*.pyc"
+        "summary": "Python interactive help support",
+        "rdepends": [
+            "core",
+            "netclient",
+            "pkgutil"
         ],
         "files": [
             "${bindir}/pydoc*",
             "${libdir}/python${PYTHON_MAJMIN}/pydoc.py",
             "${libdir}/python${PYTHON_MAJMIN}/pydoc_data"
         ],
-        "rdepends": [
-            "core",
-            "netclient",
-            "pkgutil"
-        ],
-        "summary": "Python interactive help support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pydoc.*.pyc"
+        ]
     },
     "resource": {
-        "cached": [],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/resource.*.so"
-        ],
+        "summary": "Python resource control interface",
         "rdepends": [
             "core"
         ],
-        "summary": "Python resource control interface"
-    },
-    "runpy": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/runpy.*.pyc"
-        ],
         "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/runpy.py"
+            "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/resource.*.so"
         ],
+        "cached": []
+    },
+    "runpy": {
+        "summary": "Python helper for locating/executing scripts in module namespace",
         "rdepends": [
             "core",
             "pkgutil"
         ],
-        "summary": "Python helper for locating/executing scripts in module namespace"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/runpy.py"
+        ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/runpy.*.pyc"
+        ]
     },
     "shell": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/glob.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shutil.*.pyc"
+        "summary": "Python shell-like functionality",
+        "rdepends": [
+            "compression",
+            "core",
+            "stringold",
+            "unixadmin"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/cmd.py",
@@ -939,26 +939,16 @@
             "${libdir}/python${PYTHON_MAJMIN}/shlex.py",
             "${libdir}/python${PYTHON_MAJMIN}/shutil.py"
         ],
-        "rdepends": [
-            "compression",
-            "core",
-            "stringold",
-            "unixadmin"
-        ],
-        "summary": "Python shell-like functionality"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/glob.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shutil.*.pyc"
+        ]
     },
     "smtpd": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asynchat.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asyncore.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtpd.*.pyc"
-        ],
-        "files": [
-            "${bindir}/smtpd.py",
-            "${libdir}/python${PYTHON_MAJMIN}/asynchat.py",
-            "${libdir}/python${PYTHON_MAJMIN}/asyncore.py",
-            "${libdir}/python${PYTHON_MAJMIN}/smtpd.py"
-        ],
+        "summary": "Python Simple Mail Transport Daemon",
         "rdepends": [
             "core",
             "crypt",
@@ -970,24 +960,34 @@
             "netclient",
             "stringold"
         ],
-        "summary": "Python Simple Mail Transport Daemon"
+        "files": [
+            "${bindir}/smtpd.py",
+            "${libdir}/python${PYTHON_MAJMIN}/asynchat.py",
+            "${libdir}/python${PYTHON_MAJMIN}/asyncore.py",
+            "${libdir}/python${PYTHON_MAJMIN}/smtpd.py"
+        ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asynchat.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asyncore.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtpd.*.pyc"
+        ]
     },
     "sqlite3": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__",
-            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dbapi2.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dump.*.pyc"
+        "summary": "Python Sqlite3 database support",
+        "rdepends": [
+            "core",
+            "datetime"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sqlite3.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/sqlite3/dbapi2.py",
             "${libdir}/python${PYTHON_MAJMIN}/sqlite3/dump.py"
         ],
-        "rdepends": [
-            "core",
-            "datetime"
-        ],
-        "summary": "Python Sqlite3 database support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__",
+            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dbapi2.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dump.*.pyc"
+        ]
     },
     "sqlite3-tests": {
         "cached": [],
@@ -1001,41 +1001,41 @@
         "summary": "Python Sqlite3 database support tests"
     },
     "stringold": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/string.*.pyc"
+        "summary": "Python string APIs [deprecated]",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/string.py"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/string.*.pyc"
+        ]
+    },
+    "syslog": {
+        "summary": "Python syslog interface",
         "rdepends": [
             "core"
         ],
-        "summary": "Python string APIs [deprecated]"
-    },
-    "syslog": {
-        "cached": [],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/syslog.*.so"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python syslog interface"
+        "cached": []
     },
     "terminal": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pty.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc"
+        "summary": "Python terminal controlling support",
+        "rdepends": [
+            "core",
+            "io"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/pty.py",
             "${libdir}/python${PYTHON_MAJMIN}/tty.py"
         ],
-        "rdepends": [
-            "core",
-            "io"
-        ],
-        "summary": "Python terminal controlling support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pty.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc"
+        ]
     },
     "tests": {
         "cached": [],
@@ -1049,11 +1049,9 @@
         "summary": "Python tests"
     },
     "threading": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_dummy_thread.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dummy_threading.*.pyc",
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc"
+        "summary": "Python threading & synchronization support",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/_dummy_thread.py",
@@ -1061,40 +1059,37 @@
             "${libdir}/python${PYTHON_MAJMIN}/dummy_threading.py",
             "${libdir}/python${PYTHON_MAJMIN}/queue.py"
         ],
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_dummy_thread.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dummy_threading.*.pyc",
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc"
+        ]
+    },
+    "tkinter": {
+        "summary": "Python Tcl/Tk bindings",
         "rdepends": [
             "core"
         ],
-        "summary": "Python threading & synchronization support"
-    },
-    "tkinter": {
-        "cached": [],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/tkinter"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python Tcl/Tk bindings"
+        "cached": []
     },
     "typing": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc"
+        "summary": "Python typing support",
+        "rdepends": [
+            "core"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/typing.py"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python typing support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc"
+        ]
     },
     "unittest": {
-        "cached": [],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/unittest",
-            "${libdir}/python${PYTHON_MAJMIN}/unittest/",
-            "${libdir}/python${PYTHON_MAJMIN}/unittest/__pycache__"
-        ],
+        "summary": "Python unit testing framework",
         "rdepends": [
             "core",
             "difflib",
@@ -1103,45 +1098,50 @@
             "shell",
             "stringold"
         ],
-        "summary": "Python unit testing framework"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/unittest",
+            "${libdir}/python${PYTHON_MAJMIN}/unittest/",
+            "${libdir}/python${PYTHON_MAJMIN}/unittest/__pycache__"
+        ],
+        "cached": []
     },
     "unixadmin": {
-        "cached": [
-            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getpass.*.pyc"
+        "summary": "Python Unix administration support",
+        "rdepends": [
+            "core",
+            "io"
         ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/getpass.py",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/grp.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/nis.*.so"
         ],
-        "rdepends": [
-            "core",
-            "io"
-        ],
-        "summary": "Python Unix administration support"
+        "cached": [
+            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getpass.*.pyc"
+        ]
     },
     "xml": {
-        "cached": [],
+        "summary": "Python basic XML support",
+        "rdepends": [
+            "core"
+        ],
         "files": [
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_elementtree.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/pyexpat.*.so",
             "${libdir}/python${PYTHON_MAJMIN}/xml"
         ],
-        "rdepends": [
-            "core"
-        ],
-        "summary": "Python basic XML support"
+        "cached": []
     },
     "xmlrpc": {
-        "cached": [],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc",
-            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc/__pycache__"
-        ],
+        "summary": "Python XML-RPC support",
         "rdepends": [
             "core",
             "xml"
         ],
-        "summary": "Python XML-RPC support"
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc",
+            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc/__pycache__"
+        ],
+        "cached": []
     }
 }
-- 
2.11.0



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

* [PATCH 2/4] python3: respect package order in manifest
  2018-09-21 11:48 [PATCH 1/4] python3: don't sort the manifest in create_manifest Ross Burton
@ 2018-09-21 11:48 ` Ross Burton
  2018-09-21 11:48 ` [PATCH 3/4] python3: consolidate tests Ross Burton
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Ross Burton @ 2018-09-21 11:48 UTC (permalink / raw)
  To: openembedded-core

Don't sort the manifest when using it to generate packaging rules, so ordering
can be used to have complex packaging rules.

Signed-off-by: Ross Burton <ross.burton@intel.com>
---
 meta/recipes-devtools/python/python3_3.5.6.bb | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/meta/recipes-devtools/python/python3_3.5.6.bb b/meta/recipes-devtools/python/python3_3.5.6.bb
index 605ea6abfe7..6085e36b7db 100644
--- a/meta/recipes-devtools/python/python3_3.5.6.bb
+++ b/meta/recipes-devtools/python/python3_3.5.6.bb
@@ -252,7 +252,7 @@ RPROVIDES_${PN} += "${PN}-modules"
 INCLUDE_PYCS ?= "1"
 
 python(){
-    import json
+    import collections, json
 
     filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
     # This python changes the datastore based on the contents of a file, so mark
@@ -260,7 +260,7 @@ python(){
     bb.parse.mark_dependency(d, filename)
 
     with open(filename) as manifest_file:
-        python_manifest=json.load(manifest_file)
+        python_manifest=json.load(manifest_file, object_pairs_hook=collections.OrderedDict)
 
     include_pycs = d.getVar('INCLUDE_PYCS')
 
@@ -294,8 +294,6 @@ python(){
             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))
-- 
2.11.0



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

* [PATCH 3/4] python3: consolidate tests
  2018-09-21 11:48 [PATCH 1/4] python3: don't sort the manifest in create_manifest Ross Burton
  2018-09-21 11:48 ` [PATCH 2/4] python3: respect package order in manifest Ross Burton
@ 2018-09-21 11:48 ` Ross Burton
  2018-09-21 11:49 ` [PATCH 4/4] python3: remove specal handling of sqite3-tests Ross Burton
  2018-09-21 16:53 ` [PATCH 1/4] python3: don't sort the manifest in create_manifest Alejandro Hernandez
  3 siblings, 0 replies; 5+ messages in thread
From: Ross Burton @ 2018-09-21 11:48 UTC (permalink / raw)
  To: openembedded-core

Currently the bulk of the tests in python3-tests, some more in
python3-sqlite3-tests, and others in their parent module (such as
python3-ctypes).  This is pointless space usage if we're not planning on running
the tests, so consolidate all the tests into python3-tests.

Signed-off-by: Ross Burton <ross.burton@intel.com>
---
 .../python/python3/python3-manifest.json           | 36 +++++++++-------------
 1 file changed, 14 insertions(+), 22 deletions(-)

diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
index 95ae3fb0215..539b7967b59 100644
--- a/meta/recipes-devtools/python/python3/python3-manifest.json
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -1,4 +1,18 @@
 {
+    "tests": {
+        "summary": "Python test suite",
+        "rdepends": [
+            "core",
+            "modules"
+        ],
+        "files": [
+            "${libdir}/python${PYTHON_MAJMIN}/*/test",
+            "${libdir}/python${PYTHON_MAJMIN}/*/tests",
+            "${libdir}/python${PYTHON_MAJMIN}/idlelib/idle_test/",
+            "${libdir}/python${PYTHON_MAJMIN}/test"
+        ],
+        "cached": []
+    },
     "2to3": {
         "summary": "Python automated Python 2 to 3 code translator",
         "rdepends": [
@@ -989,17 +1003,6 @@
             "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dump.*.pyc"
         ]
     },
-    "sqlite3-tests": {
-        "cached": [],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/test"
-        ],
-        "rdepends": [
-            "core",
-            "tests"
-        ],
-        "summary": "Python Sqlite3 database support tests"
-    },
     "stringold": {
         "summary": "Python string APIs [deprecated]",
         "rdepends": [
@@ -1037,17 +1040,6 @@
             "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc"
         ]
     },
-    "tests": {
-        "cached": [],
-        "files": [
-            "${libdir}/python${PYTHON_MAJMIN}/test"
-        ],
-        "rdepends": [
-            "core",
-            "modules"
-        ],
-        "summary": "Python tests"
-    },
     "threading": {
         "summary": "Python threading & synchronization support",
         "rdepends": [
-- 
2.11.0



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

* [PATCH 4/4] python3: remove specal handling of sqite3-tests
  2018-09-21 11:48 [PATCH 1/4] python3: don't sort the manifest in create_manifest Ross Burton
  2018-09-21 11:48 ` [PATCH 2/4] python3: respect package order in manifest Ross Burton
  2018-09-21 11:48 ` [PATCH 3/4] python3: consolidate tests Ross Burton
@ 2018-09-21 11:49 ` Ross Burton
  2018-09-21 16:53 ` [PATCH 1/4] python3: don't sort the manifest in create_manifest Alejandro Hernandez
  3 siblings, 0 replies; 5+ messages in thread
From: Ross Burton @ 2018-09-21 11:49 UTC (permalink / raw)
  To: openembedded-core

This package doesn't exist anymore so the manifest tool doesn't need to handle
it specially.

Signed-off-by: Ross Burton <ross.burton@intel.com>
---
 meta/recipes-devtools/python/python3/create_manifest3.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py
index efef62af943..fddb23cdc42 100644
--- a/meta/recipes-devtools/python/python3/create_manifest3.py
+++ b/meta/recipes-devtools/python/python3/create_manifest3.py
@@ -214,7 +214,7 @@ for pypkg in old_manifest:
 
     # Handle special cases, we assume that when they were manually added 
     # to the manifest we knew what we were doing.
-    special_packages = ['misc', 'modules', 'dev', 'tests', 'sqlite3-tests']
+    special_packages = ['misc', 'modules', 'dev', 'tests']
     if pypkg in special_packages or 'staticdev' in pypkg:
         print('Passing %s package directly' % pypkg)
         new_manifest[pypkg] = old_manifest[pypkg]
-- 
2.11.0



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

* Re: [PATCH 1/4] python3: don't sort the manifest in create_manifest
  2018-09-21 11:48 [PATCH 1/4] python3: don't sort the manifest in create_manifest Ross Burton
                   ` (2 preceding siblings ...)
  2018-09-21 11:49 ` [PATCH 4/4] python3: remove specal handling of sqite3-tests Ross Burton
@ 2018-09-21 16:53 ` Alejandro Hernandez
  3 siblings, 0 replies; 5+ messages in thread
From: Alejandro Hernandez @ 2018-09-21 16:53 UTC (permalink / raw)
  To: openembedded-core

Looks good, thanks Ross!

Acked-by: Alejandro Enedino Hernandez Samaniego <alejandr@xilinx.com>

On 9/21/2018 4:48 AM, Ross Burton wrote:
> Instead of sorting the entire manifest when it is updated, use OrderedDict to
> preserve the order of fields.  This means that packages can be ordered in the
> manifest to allow non-trivial FILES assignments (such as a package that picks up
> pieces of other packages)
>
> The manifest has been regenerated with the new stable ordering, and
> distutils-staticdev moved above distutils so the packaging rules work as
> expected.
>
> Signed-off-by: Ross Burton <ross.burton@intel.com>
> ---
>   .../python/python3/create_manifest3.py             |  21 +-
>   .../python/python3/python3-manifest.json           | 940 ++++++++++-----------
>   2 files changed, 480 insertions(+), 481 deletions(-)
>
> diff --git a/meta/recipes-devtools/python/python3/create_manifest3.py b/meta/recipes-devtools/python/python3/create_manifest3.py
> index 2db5e3b0b67..efef62af943 100644
> --- a/meta/recipes-devtools/python/python3/create_manifest3.py
> +++ b/meta/recipes-devtools/python/python3/create_manifest3.py
> @@ -43,6 +43,7 @@ import sys
>   import subprocess
>   import json
>   import os
> +import collections
>   
>   # Get python version from ${PYTHON_MAJMIN}
>   pyversion = str(sys.argv[1])
> @@ -54,7 +55,7 @@ for p in sys.path:
>           nativelibfolder = p[:p.find(pivot)+len(pivot)]
>   
>   # Empty dict to hold the whole manifest
> -new_manifest = {}
> +new_manifest = collections.OrderedDict()
>   
>   # Check for repeated files, folders and wildcards
>   allfiles = []
> @@ -79,7 +80,7 @@ def isCached(item):
>   
>   # Read existing JSON manifest
>   with open('python3-manifest.json') as manifest:
> -    old_manifest = json.load(manifest)
> +    old_manifest = json.load(manifest, object_pairs_hook=collections.OrderedDict)
>   
>   #
>   # First pass to get core-package functionality, because we base everything on the fact that core is actually working
> @@ -195,18 +196,16 @@ for pypkg in old_manifest:
>   
>   for pypkg in old_manifest:
>       # Use an empty dict as data structure to hold data for each package and fill it up
> -    new_manifest[pypkg] = {}
> -    new_manifest[pypkg]['files'] = []
> +    new_manifest[pypkg] = collections.OrderedDict()
> +    new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary']
>       new_manifest[pypkg]['rdepends'] = []
> +    new_manifest[pypkg]['files'] = []
> +    new_manifest[pypkg]['cached'] = old_manifest[pypkg]['cached']
>   
>       # All packages should depend on core
>       if pypkg != 'core':
> -         new_manifest[pypkg]['rdepends'].append('core')
> -         new_manifest[pypkg]['cached'] = []
> -    else:
> -         new_manifest[pypkg]['cached'] = old_manifest[pypkg]['cached']
> -    new_manifest[pypkg]['summary'] = old_manifest[pypkg]['summary']
> -
> +        new_manifest[pypkg]['rdepends'].append('core')
> +        new_manifest[pypkg]['cached'] = []
>   
>       print('\n')
>       print('--------------------------')
> @@ -400,7 +399,7 @@ for pypkg in new_manifest:
>   
>   # 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)
> +    json.dump(new_manifest,outfile, indent=4)
>       outfile.write('\n')
>   
>   if (repeated):
> diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
> index 90a41fbf29c..95ae3fb0215 100644
> --- a/meta/recipes-devtools/python/python3/python3-manifest.json
> +++ b/meta/recipes-devtools/python/python3/python3-manifest.json
> @@ -1,22 +1,17 @@
>   {
>       "2to3": {
> -        "cached": [],
> +        "summary": "Python automated Python 2 to 3 code translator",
> +        "rdepends": [
> +            "core"
> +        ],
>           "files": [
>               "${bindir}/2to3-*",
>               "${libdir}/python${PYTHON_MAJMIN}/lib2to3"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python automated Python 2 to 3 code translator"
> +        "cached": []
>       },
>       "asyncio": {
> -        "cached": [],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/asyncio",
> -            "${libdir}/python${PYTHON_MAJMIN}/concurrent",
> -            "${libdir}/python${PYTHON_MAJMIN}/concurrent/futures"
> -        ],
> +        "summary": "Python Asynchronous I/",
>           "rdepends": [
>               "compression",
>               "core",
> @@ -32,14 +27,17 @@
>               "threading",
>               "unixadmin"
>           ],
> -        "summary": "Python Asynchronous I/"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/asyncio",
> +            "${libdir}/python${PYTHON_MAJMIN}/concurrent",
> +            "${libdir}/python${PYTHON_MAJMIN}/concurrent/futures"
> +        ],
> +        "cached": []
>       },
>       "audio": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/chunk.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sndhdr.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sunau.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc"
> +        "summary": "Python Audio Handling",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/chunk.py",
> @@ -49,33 +47,28 @@
>               "${libdir}/python${PYTHON_MAJMIN}/sunau.py",
>               "${libdir}/python${PYTHON_MAJMIN}/wave.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python Audio Handling"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/chunk.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sndhdr.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sunau.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/wave.*.pyc"
> +        ]
>       },
>       "codecs": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/xdrlib.*.pyc"
> +        "summary": "Python codec",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multibytecodec.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/xdrlib.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python codec"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/xdrlib.*.pyc"
> +        ]
>       },
>       "compile": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc"
> -        ],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/compileall.py",
> -            "${libdir}/python${PYTHON_MAJMIN}/py_compile.py"
> -        ],
> +        "summary": "Python bytecode compilation support",
>           "rdepends": [
>               "asyncio",
>               "compression",
> @@ -91,16 +84,21 @@
>               "threading",
>               "unixadmin"
>           ],
> -        "summary": "Python bytecode compilation support"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/compileall.py",
> +            "${libdir}/python${PYTHON_MAJMIN}/py_compile.py"
> +        ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/compileall.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/py_compile.*.pyc"
> +        ]
>       },
>       "compression": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipfile.*.pyc"
> +        "summary": "Python high-level compression support",
> +        "rdepends": [
> +            "core",
> +            "shell",
> +            "unixadmin"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/_compression.py",
> @@ -113,87 +111,18 @@
>               "${libdir}/python${PYTHON_MAJMIN}/tarfile.py",
>               "${libdir}/python${PYTHON_MAJMIN}/zipfile.py"
>           ],
> -        "rdepends": [
> -            "core",
> -            "shell",
> -            "unixadmin"
> -        ],
> -        "summary": "Python high-level compression support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compression.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bz2.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gzip.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/lzma.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tarfile.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/zipfile.*.pyc"
> +        ]
>       },
>       "core": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/__future__.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_bootlocale.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_collections_abc.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_markupbase.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sitebuiltins.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_weakrefset.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/abc.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/argparse.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ast.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bisect.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/code.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codecs.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/configparser.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextlib.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dis.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/enum.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/functools.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/genericpath.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getopt.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gettext.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/heapq.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imp.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/inspect.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/io.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/opcode.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/operator.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/optparse.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/os.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/platform.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/posixpath.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/re.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/reprlib.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/rlcompleter.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/selectors.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/signal.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/site.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_compile.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_constants.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_parse.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stat.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stringprep.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/struct.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/subprocess.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/symbol.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sysconfig.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/textwrap.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/threading.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/token.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tokenize.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/types.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/warnings.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/weakref.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__",
> -            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__/abc.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__",
> -            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/aliases.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/latin_1.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/utf_8.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__",
> -            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/abc.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/machinery.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc"
> -        ],
> +        "summary": "Python interpreter and core modules",
> +        "rdepends": [],
>           "files": [
>               "${bindir}/python*[!-config]",
>               "${includedir}/python${PYTHON_BINABI}/pyconfig*.h",
> @@ -296,13 +225,86 @@
>               "${libdir}/python${PYTHON_MAJMIN}/warnings.py",
>               "${libdir}/python${PYTHON_MAJMIN}/weakref.py"
>           ],
> -        "rdepends": [],
> -        "summary": "Python interpreter and core modules"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/__future__.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_bootlocale.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_collections_abc.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_markupbase.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sitebuiltins.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_sysconfigdata.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_weakrefset.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/abc.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/argparse.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ast.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bisect.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/code.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codecs.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/configparser.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextlib.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dis.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/enum.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/functools.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/genericpath.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getopt.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/gettext.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/heapq.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imp.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/inspect.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/io.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/keyword.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/linecache.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/locale.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/opcode.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/operator.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/optparse.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/os.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/platform.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/posixpath.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/re.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/reprlib.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/rlcompleter.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/selectors.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/signal.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/site.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_compile.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_constants.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sre_parse.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stat.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/stringprep.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/struct.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/subprocess.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/symbol.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/sysconfig.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/textwrap.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/threading.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/token.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tokenize.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/traceback.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/types.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/warnings.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/weakref.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__",
> +            "${libdir}/python${PYTHON_MAJMIN}/collections/__pycache__/abc.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__",
> +            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/aliases.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/latin_1.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/encodings/__pycache__/utf_8.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__",
> +            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/abc.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/machinery.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/importlib/__pycache__/util.*.pyc"
> +        ]
>       },
>       "crypt": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/crypt.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hashlib.*.pyc"
> +        "summary": "Python basic cryptographic and hashing support",
> +        "rdepends": [
> +            "core",
> +            "math",
> +            "stringold"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/crypt.py",
> @@ -312,81 +314,79 @@
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha256.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha512.*.so"
>           ],
> -        "rdepends": [
> -            "core",
> -            "math",
> -            "stringold"
> -        ],
> -        "summary": "Python basic cryptographic and hashing support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/crypt.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hashlib.*.pyc"
> +        ]
>       },
>       "ctypes": {
> -        "cached": [],
> +        "summary": "Python C types support",
> +        "rdepends": [
> +            "core"
> +        ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/ctypes",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_ctypes_test.*.so"
>           ],
> +        "cached": []
> +    },
> +    "curses": {
> +        "summary": "Python curses support",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python C types support"
> -    },
> -    "curses": {
> -        "cached": [],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/curses",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_curses_panel.*.so"
>           ],
> +        "cached": []
> +    },
> +    "datetime": {
> +        "summary": "Python calendar and time support",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python curses support"
> -    },
> -    "datetime": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/calendar.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/datetime.*.pyc"
> -        ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/_strptime.py",
>               "${libdir}/python${PYTHON_MAJMIN}/calendar.py",
>               "${libdir}/python${PYTHON_MAJMIN}/datetime.py",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_datetime.*.so"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_strptime.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/calendar.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/datetime.*.pyc"
> +        ]
> +    },
> +    "db": {
> +        "summary": "Python file-based database support",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python calendar and time support"
> -    },
> -    "db": {
> -        "cached": [],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/dbm",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_dbm.*.so"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python file-based database support"
> +        "cached": []
>       },
>       "debugger": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bdb.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pdb.*.pyc"
> -        ],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/bdb.py",
> -            "${libdir}/python${PYTHON_MAJMIN}/pdb.py"
> -        ],
> +        "summary": "Python debugger",
>           "rdepends": [
>               "core",
>               "pprint",
>               "shell",
>               "stringold"
>           ],
> -        "summary": "Python debugger"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/bdb.py",
> +            "${libdir}/python${PYTHON_MAJMIN}/pdb.py"
> +        ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/bdb.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pdb.*.pyc"
> +        ]
>       },
>       "dev": {
>           "cached": [],
> @@ -411,26 +411,16 @@
>           "summary": "Python development package"
>       },
>       "difflib": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc"
> -        ],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/difflib.py"
> -        ],
> +        "summary": "Python helpers for computing deltas between objects",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python helpers for computing deltas between objects"
> -    },
> -    "distutils": {
> -        "cached": [],
>           "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/distutils"
> -        ],
> -        "rdepends": [
> -            "core"
> +            "${libdir}/python${PYTHON_MAJMIN}/difflib.py"
>           ],
> -        "summary": "Python Distribution Utilities"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/difflib.*.pyc"
> +        ]
>       },
>       "distutils-staticdev": {
>           "cached": [
> @@ -444,13 +434,18 @@
>           ],
>           "summary": "Python distribution utilities (static libraries)"
>       },
> -    "doctest": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/doctest.*.pyc"
> +    "distutils": {
> +        "summary": "Python Distribution Utilities",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/doctest.py"
> +            "${libdir}/python${PYTHON_MAJMIN}/distutils"
>           ],
> +        "cached": []
> +    },
> +    "doctest": {
> +        "summary": "Python framework for running examples in docstrings",
>           "rdepends": [
>               "core",
>               "debugger",
> @@ -461,16 +456,15 @@
>               "stringold",
>               "unittest"
>           ],
> -        "summary": "Python framework for running examples in docstrings"
> -    },
> -    "email": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc"
> -        ],
>           "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/email",
> -            "${libdir}/python${PYTHON_MAJMIN}/imaplib.py"
> +            "${libdir}/python${PYTHON_MAJMIN}/doctest.py"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/doctest.*.pyc"
> +        ]
> +    },
> +    "email": {
> +        "summary": "Python email support",
>           "rdepends": [
>               "core",
>               "crypt",
> @@ -479,74 +473,82 @@
>               "math",
>               "netclient"
>           ],
> -        "summary": "Python email support"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/email",
> +            "${libdir}/python${PYTHON_MAJMIN}/imaplib.py"
> +        ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imaplib.*.pyc"
> +        ]
>       },
>       "fcntl": {
> -        "cached": [],
> +        "summary": "Python's fcntl interface",
> +        "rdepends": [
> +            "core"
> +        ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/fcntl.*.so"
>           ],
> +        "cached": []
> +    },
> +    "gdbm": {
> +        "summary": "Python GNU database support",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python's fcntl interface"
> -    },
> -    "gdbm": {
> -        "cached": [],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_gdbm.*.so"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python GNU database support"
> +        "cached": []
>       },
>       "html": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/formatter.*.pyc"
> +        "summary": "Python HTML processing support",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/formatter.py",
>               "${libdir}/python${PYTHON_MAJMIN}/html"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/formatter.*.pyc"
> +        ]
> +    },
> +    "idle": {
> +        "summary": "Python Integrated Development Environment",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python HTML processing support"
> -    },
> -    "idle": {
> -        "cached": [],
>           "files": [
>               "${bindir}/idle*",
>               "${libdir}/python${PYTHON_MAJMIN}/idlelib"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python Integrated Development Environment"
> +        "cached": []
>       },
>       "image": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/colorsys.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imghdr.*.pyc"
> +        "summary": "Python graphical image handling",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/colorsys.py",
>               "${libdir}/python${PYTHON_MAJMIN}/imghdr.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python graphical image handling"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/colorsys.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/imghdr.*.pyc"
> +        ]
>       },
>       "io": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pipes.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tempfile.*.pyc"
> +        "summary": "Python low-level I/O",
> +        "rdepends": [
> +            "compression",
> +            "core",
> +            "crypt",
> +            "math",
> +            "netclient",
> +            "shell",
> +            "unixadmin"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/_pyio.py",
> @@ -559,46 +561,39 @@
>               "${libdir}/python${PYTHON_MAJMIN}/ssl.py",
>               "${libdir}/python${PYTHON_MAJMIN}/tempfile.py"
>           ],
> -        "rdepends": [
> -            "compression",
> -            "core",
> -            "crypt",
> -            "math",
> -            "netclient",
> -            "shell",
> -            "unixadmin"
> -        ],
> -        "summary": "Python low-level I/O"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pyio.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ipaddress.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pipes.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socket.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ssl.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tempfile.*.pyc"
> +        ]
>       },
>       "json": {
> -        "cached": [],
> +        "summary": "Python JSON support",
> +        "rdepends": [
> +            "core"
> +        ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/json",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_json.*.so"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python JSON support"
> +        "cached": []
>       },
>       "logging": {
> -        "cached": [],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/logging"
> -        ],
> +        "summary": "Python logging support",
>           "rdepends": [
>               "core",
>               "stringold"
>           ],
> -        "summary": "Python logging support"
> -    },
> -    "mailbox": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mailbox.*.pyc"
> -        ],
>           "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/mailbox.py"
> +            "${libdir}/python${PYTHON_MAJMIN}/logging"
>           ],
> +        "cached": []
> +    },
> +    "mailbox": {
> +        "summary": "Python mailbox format support",
>           "rdepends": [
>               "core",
>               "crypt",
> @@ -611,46 +606,51 @@
>               "netclient",
>               "stringold"
>           ],
> -        "summary": "Python mailbox format support"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/mailbox.py"
> +        ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mailbox.*.pyc"
> +        ]
>       },
>       "math": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/random.*.pyc"
> +        "summary": "Python math support",
> +        "rdepends": [
> +            "core",
> +            "crypt"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_random.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/cmath.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/random.py"
>           ],
> -        "rdepends": [
> -            "core",
> -            "crypt"
> -        ],
> -        "summary": "Python math support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/random.*.pyc"
> +        ]
>       },
>       "mime": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/quopri.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uu.*.pyc"
> +        "summary": "Python MIME handling APIs",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/quopri.py",
>               "${libdir}/python${PYTHON_MAJMIN}/uu.py"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/quopri.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uu.*.pyc"
> +        ]
> +    },
> +    "mmap": {
> +        "summary": "Python memory-mapped file support",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python MIME handling APIs"
> -    },
> -    "mmap": {
> -        "cached": [],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/mmap.*.so"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python memory-mapped file support"
> +        "cached": []
>       },
>       "modules": {
>           "cached": [],
> @@ -713,27 +713,31 @@
>           "summary": "All Python modules"
>       },
>       "multiprocessing": {
> -        "cached": [],
> +        "summary": "Python multiprocessing support",
> +        "rdepends": [
> +            "core"
> +        ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multiprocessing.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/multiprocessing"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python multiprocessing support"
> +        "cached": []
>       },
>       "netclient": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/base64.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ftplib.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hmac.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/nntplib.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/poplib.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtplib.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/telnetlib.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uuid.*.pyc"
> +        "summary": "Python Internet Protocol clients",
> +        "rdepends": [
> +            "compression",
> +            "core",
> +            "crypt",
> +            "ctypes",
> +            "datetime",
> +            "email",
> +            "io",
> +            "math",
> +            "mime",
> +            "shell",
> +            "stringold",
> +            "unixadmin"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/base64.py",
> @@ -750,54 +754,48 @@
>               "${libdir}/python${PYTHON_MAJMIN}/urllib/__pycache__",
>               "${libdir}/python${PYTHON_MAJMIN}/uuid.py"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/base64.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/ftplib.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/hmac.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/mimetypes.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/nntplib.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/poplib.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtplib.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/telnetlib.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/uuid.*.pyc"
> +        ]
> +    },
> +    "netserver": {
> +        "summary": "Python Internet Protocol servers",
>           "rdepends": [
>               "compression",
>               "core",
>               "crypt",
> -            "ctypes",
>               "datetime",
>               "email",
> +            "html",
>               "io",
>               "math",
>               "mime",
> +            "netclient",
>               "shell",
>               "stringold",
>               "unixadmin"
>           ],
> -        "summary": "Python Internet Protocol clients"
> -    },
> -    "netserver": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cgi.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socketserver.*.pyc"
> -        ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/cgi.py",
>               "${libdir}/python${PYTHON_MAJMIN}/socketserver.py"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cgi.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/socketserver.*.pyc"
> +        ]
> +    },
> +    "numbers": {
> +        "summary": "Python number APIs",
>           "rdepends": [
> -            "compression",
> -            "core",
> -            "crypt",
> -            "datetime",
> -            "email",
> -            "html",
> -            "io",
> -            "math",
> -            "mime",
> -            "netclient",
> -            "shell",
> -            "stringold",
> -            "unixadmin"
> -        ],
> -        "summary": "Python Internet Protocol servers"
> -    },
> -    "numbers": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc"
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/_pydecimal.py",
> @@ -806,17 +804,17 @@
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_decimal.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/numbers.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python number APIs"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc"
> +        ]
>       },
>       "pickle": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compat_pickle.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickle.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickletools.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shelve.*.pyc"
> +        "summary": "Python serialisation/persistence support",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/_compat_pickle.py",
> @@ -825,54 +823,55 @@
>               "${libdir}/python${PYTHON_MAJMIN}/pickletools.py",
>               "${libdir}/python${PYTHON_MAJMIN}/shelve.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python serialisation/persistence support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_compat_pickle.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickle.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pickletools.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shelve.*.pyc"
> +        ]
>       },
>       "pkgutil": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pkgutil.*.pyc"
> +        "summary": "Python package extension utility support",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/pkgutil.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python package extension utility support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pkgutil.*.pyc"
> +        ]
>       },
>       "plistlib": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/plistlib.*.pyc"
> -        ],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/plistlib.py"
> -        ],
> +        "summary": "Generate and parse Mac OS X .plist files",
>           "rdepends": [
>               "core",
>               "datetime",
>               "xml"
>           ],
> -        "summary": "Generate and parse Mac OS X .plist files"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/plistlib.py"
> +        ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/plistlib.*.pyc"
> +        ]
>       },
>       "pprint": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pprint.*.pyc"
> +        "summary": "Python pretty-print support",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/pprint.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python pretty-print support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pprint.*.pyc"
> +        ]
>       },
>       "profile": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc"
> +        "summary": "Python basic performance profiling support",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/cProfile.py",
> @@ -880,57 +879,58 @@
>               "${libdir}/python${PYTHON_MAJMIN}/profile.py",
>               "${libdir}/python${PYTHON_MAJMIN}/pstats.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python basic performance profiling support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cProfile.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/profile.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pstats.*.pyc"
> +        ]
>       },
>       "pydoc": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pydoc.*.pyc"
> +        "summary": "Python interactive help support",
> +        "rdepends": [
> +            "core",
> +            "netclient",
> +            "pkgutil"
>           ],
>           "files": [
>               "${bindir}/pydoc*",
>               "${libdir}/python${PYTHON_MAJMIN}/pydoc.py",
>               "${libdir}/python${PYTHON_MAJMIN}/pydoc_data"
>           ],
> -        "rdepends": [
> -            "core",
> -            "netclient",
> -            "pkgutil"
> -        ],
> -        "summary": "Python interactive help support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pydoc.*.pyc"
> +        ]
>       },
>       "resource": {
> -        "cached": [],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/resource.*.so"
> -        ],
> +        "summary": "Python resource control interface",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python resource control interface"
> -    },
> -    "runpy": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/runpy.*.pyc"
> -        ],
>           "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/runpy.py"
> +            "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/resource.*.so"
>           ],
> +        "cached": []
> +    },
> +    "runpy": {
> +        "summary": "Python helper for locating/executing scripts in module namespace",
>           "rdepends": [
>               "core",
>               "pkgutil"
>           ],
> -        "summary": "Python helper for locating/executing scripts in module namespace"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/runpy.py"
> +        ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/runpy.*.pyc"
> +        ]
>       },
>       "shell": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/glob.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shutil.*.pyc"
> +        "summary": "Python shell-like functionality",
> +        "rdepends": [
> +            "compression",
> +            "core",
> +            "stringold",
> +            "unixadmin"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/cmd.py",
> @@ -939,26 +939,16 @@
>               "${libdir}/python${PYTHON_MAJMIN}/shlex.py",
>               "${libdir}/python${PYTHON_MAJMIN}/shutil.py"
>           ],
> -        "rdepends": [
> -            "compression",
> -            "core",
> -            "stringold",
> -            "unixadmin"
> -        ],
> -        "summary": "Python shell-like functionality"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/cmd.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/fnmatch.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/glob.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shlex.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/shutil.*.pyc"
> +        ]
>       },
>       "smtpd": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asynchat.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asyncore.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtpd.*.pyc"
> -        ],
> -        "files": [
> -            "${bindir}/smtpd.py",
> -            "${libdir}/python${PYTHON_MAJMIN}/asynchat.py",
> -            "${libdir}/python${PYTHON_MAJMIN}/asyncore.py",
> -            "${libdir}/python${PYTHON_MAJMIN}/smtpd.py"
> -        ],
> +        "summary": "Python Simple Mail Transport Daemon",
>           "rdepends": [
>               "core",
>               "crypt",
> @@ -970,24 +960,34 @@
>               "netclient",
>               "stringold"
>           ],
> -        "summary": "Python Simple Mail Transport Daemon"
> +        "files": [
> +            "${bindir}/smtpd.py",
> +            "${libdir}/python${PYTHON_MAJMIN}/asynchat.py",
> +            "${libdir}/python${PYTHON_MAJMIN}/asyncore.py",
> +            "${libdir}/python${PYTHON_MAJMIN}/smtpd.py"
> +        ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asynchat.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/asyncore.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/smtpd.*.pyc"
> +        ]
>       },
>       "sqlite3": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__",
> -            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dbapi2.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dump.*.pyc"
> +        "summary": "Python Sqlite3 database support",
> +        "rdepends": [
> +            "core",
> +            "datetime"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sqlite3.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/sqlite3/dbapi2.py",
>               "${libdir}/python${PYTHON_MAJMIN}/sqlite3/dump.py"
>           ],
> -        "rdepends": [
> -            "core",
> -            "datetime"
> -        ],
> -        "summary": "Python Sqlite3 database support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__",
> +            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dbapi2.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/sqlite3/__pycache__/dump.*.pyc"
> +        ]
>       },
>       "sqlite3-tests": {
>           "cached": [],
> @@ -1001,41 +1001,41 @@
>           "summary": "Python Sqlite3 database support tests"
>       },
>       "stringold": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/string.*.pyc"
> +        "summary": "Python string APIs [deprecated]",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/string.py"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/string.*.pyc"
> +        ]
> +    },
> +    "syslog": {
> +        "summary": "Python syslog interface",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python string APIs [deprecated]"
> -    },
> -    "syslog": {
> -        "cached": [],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/syslog.*.so"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python syslog interface"
> +        "cached": []
>       },
>       "terminal": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pty.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc"
> +        "summary": "Python terminal controlling support",
> +        "rdepends": [
> +            "core",
> +            "io"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/pty.py",
>               "${libdir}/python${PYTHON_MAJMIN}/tty.py"
>           ],
> -        "rdepends": [
> -            "core",
> -            "io"
> -        ],
> -        "summary": "Python terminal controlling support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/pty.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/tty.*.pyc"
> +        ]
>       },
>       "tests": {
>           "cached": [],
> @@ -1049,11 +1049,9 @@
>           "summary": "Python tests"
>       },
>       "threading": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_dummy_thread.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dummy_threading.*.pyc",
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc"
> +        "summary": "Python threading & synchronization support",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/_dummy_thread.py",
> @@ -1061,40 +1059,37 @@
>               "${libdir}/python${PYTHON_MAJMIN}/dummy_threading.py",
>               "${libdir}/python${PYTHON_MAJMIN}/queue.py"
>           ],
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_dummy_thread.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/dummy_threading.*.pyc",
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc"
> +        ]
> +    },
> +    "tkinter": {
> +        "summary": "Python Tcl/Tk bindings",
>           "rdepends": [
>               "core"
>           ],
> -        "summary": "Python threading & synchronization support"
> -    },
> -    "tkinter": {
> -        "cached": [],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/tkinter"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python Tcl/Tk bindings"
> +        "cached": []
>       },
>       "typing": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc"
> +        "summary": "Python typing support",
> +        "rdepends": [
> +            "core"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/typing.py"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python typing support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/typing.*.pyc"
> +        ]
>       },
>       "unittest": {
> -        "cached": [],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/unittest",
> -            "${libdir}/python${PYTHON_MAJMIN}/unittest/",
> -            "${libdir}/python${PYTHON_MAJMIN}/unittest/__pycache__"
> -        ],
> +        "summary": "Python unit testing framework",
>           "rdepends": [
>               "core",
>               "difflib",
> @@ -1103,45 +1098,50 @@
>               "shell",
>               "stringold"
>           ],
> -        "summary": "Python unit testing framework"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/unittest",
> +            "${libdir}/python${PYTHON_MAJMIN}/unittest/",
> +            "${libdir}/python${PYTHON_MAJMIN}/unittest/__pycache__"
> +        ],
> +        "cached": []
>       },
>       "unixadmin": {
> -        "cached": [
> -            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getpass.*.pyc"
> +        "summary": "Python Unix administration support",
> +        "rdepends": [
> +            "core",
> +            "io"
>           ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/getpass.py",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/grp.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/nis.*.so"
>           ],
> -        "rdepends": [
> -            "core",
> -            "io"
> -        ],
> -        "summary": "Python Unix administration support"
> +        "cached": [
> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/getpass.*.pyc"
> +        ]
>       },
>       "xml": {
> -        "cached": [],
> +        "summary": "Python basic XML support",
> +        "rdepends": [
> +            "core"
> +        ],
>           "files": [
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_elementtree.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/pyexpat.*.so",
>               "${libdir}/python${PYTHON_MAJMIN}/xml"
>           ],
> -        "rdepends": [
> -            "core"
> -        ],
> -        "summary": "Python basic XML support"
> +        "cached": []
>       },
>       "xmlrpc": {
> -        "cached": [],
> -        "files": [
> -            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc",
> -            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc/__pycache__"
> -        ],
> +        "summary": "Python XML-RPC support",
>           "rdepends": [
>               "core",
>               "xml"
>           ],
> -        "summary": "Python XML-RPC support"
> +        "files": [
> +            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc",
> +            "${libdir}/python${PYTHON_MAJMIN}/xmlrpc/__pycache__"
> +        ],
> +        "cached": []
>       }
>   }


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

end of thread, other threads:[~2018-09-21 17:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-21 11:48 [PATCH 1/4] python3: don't sort the manifest in create_manifest Ross Burton
2018-09-21 11:48 ` [PATCH 2/4] python3: respect package order in manifest Ross Burton
2018-09-21 11:48 ` [PATCH 3/4] python3: consolidate tests Ross Burton
2018-09-21 11:49 ` [PATCH 4/4] python3: remove specal handling of sqite3-tests Ross Burton
2018-09-21 16:53 ` [PATCH 1/4] python3: don't sort the manifest in create_manifest Alejandro Hernandez

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.