diff mbox series

[1/4] python3: don't sort the manifest in create_manifest

Message ID 20180921114900.26338-1-ross.burton@intel.com
State Accepted
Commit 1c67c2146e3644a26367a32885d27a4378f17ac6
Headers show
Series [1/4] python3: don't sort the manifest in create_manifest | expand

Commit Message

Ross Burton Sept. 21, 2018, 11:48 a.m. UTC
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(-)

-- 
2.11.0

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Comments

Alejandro Enedino Hernandez Samaniego Sept. 21, 2018, 4:53 p.m. UTC | #1
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": []

>       }

>   }

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
diff mbox series

Patch

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": []
     }
 }