<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/9283901f3a3253eb7f3975dd7287e03afe5a35ac">https://github.com/macports/macports-ports/commit/9283901f3a3253eb7f3975dd7287e03afe5a35ac</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 9283901f3a3253eb7f3975dd7287e03afe5a35ac
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Oct 27 04:35:13 2021 +1100

<span style='display:block; white-space:pre;color:#404040;'>    New port: py-bootstrap-modules
</span>---
 python/py-bootstrap-modules/Portfile               | 141 +++++++++++++++++++++
 .../py-bootstrap-modules/files/no-deps-option.diff |  63 +++++++++
 .../files/patch-install-__init__.py.diff           |  43 +++++++
 3 files changed, 247 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-bootstrap-modules/Portfile b/python/py-bootstrap-modules/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..fcb37b22665
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-bootstrap-modules/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,141 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem          1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           python 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name                py-bootstrap-modules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             2021-10-26
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers         jmr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license             MIT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+supported_archs     noarch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         bootstrap PEP 517 module builds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description    This is a set of Python modules that are needed \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    to do PEP 517 building and wheel installation. \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    They have to be installed together to enable \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    bootstrapping, because of circular dependencies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+homepage            https://www.macports.org/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     36 37 38 39 310
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {$subport ne $name} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set flit_core_vers 3.4.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set pep517_vers 0.12.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set python-install_vers 0.0.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set tomli_vers  1.2.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites    pypi:f/flit_core:flit_core \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    pypi:p/pep517:pep517 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    pypi:p/python-install:install \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    pypi:t/tomli:tomli
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles       flit_core-${flit_core_vers}.tar.gz:flit_core \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    pep517-${pep517_vers}.tar.gz:pep517 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    python-install-${python-install_vers}.tar.gz:install \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    tomli-${tomli_vers}.tar.gz:tomli
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums       flit_core-${flit_core_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        md5 a4bb11b54bcf029ec2cd5cb981c07ded \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        rmd160 f8c8435049941067c60e6e5d9931e0924b2c3d93 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256 29468fa2330969167d1f5c23eb9c0661cb6dacfcd46f361a274609a7f4197530 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    pep517-${pep517_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        md5 7ed0adb5f737c316e071d48d66329a5d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        rmd160 f98bf5793c9337653db51635b9ff356cab65129b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256 931378d93d11b298cf511dd634cf5ea4cb249a28ef84160b3247ee9afb4e8ab0 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    python-install-${python-install_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        md5 c591174ae1f14c05ddcc84483381aa7e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        rmd160 203ac0ef46cfcfb6e531548a50cc5a05deb9f049 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256 926f9e0cb959203629ba6ffdc889f96e1a075c36ca6e7528ba7be96ade189a7d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    tomli-${tomli_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        md5 e9294a68fea7bb45afdff37c9951ccc5 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        rmd160 e37cff10eb7e7f050049585b3d7224dd907b463c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256 c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${python.version} < 38} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set importlib_metadata_vers 4.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        license-append  Apache-2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set packaging_vers 21.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set parsing_vers 3.0.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set setuptools_scm_vers 6.3.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set six_vers 1.16.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set typing_extensions_vers 3.10.0.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        license-append  PSF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set zipp_vers 3.6.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        master_sites-append pypi:i/importlib_metadata:importlib_metadata \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pypi:p/packaging:packaging \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pypi:p/pyparsing:parsing \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pypi:s/setuptools_scm:setuptools_scm \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pypi:s/six:six \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pypi:t/typing_extensions:typing_extensions \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pypi:z/zipp:zipp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distfiles-append    importlib_metadata-${importlib_metadata_vers}.tar.gz:importlib_metadata \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            packaging-${packaging_vers}.tar.gz:packaging \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pyparsing-${parsing_vers}.tar.gz:parsing \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            setuptools_scm-${setuptools_scm_vers}.tar.gz:setuptools_scm \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            six-${six_vers}.tar.gz:six \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            typing_extensions-${typing_extensions_vers}.tar.gz:typing_extensions \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            zipp-${zipp_vers}.tar.gz:zipp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums-append    importlib_metadata-${importlib_metadata_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                md5 5b944bce3fccaf848f0cba7a07f850a1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                rmd160 8b0f8acd7ed578abb878fd85077ece9576b1c02f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                sha256 f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            packaging-${packaging_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                md5 240ba5823ed31051a1254e74c9d18d55 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                rmd160 c841981960c81cde8517af856fa7e73a07bd31e3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                sha256 7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            pyparsing-${parsing_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                md5 e1a8c5ecb51dd87472362ff6ce575675 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                rmd160 a753503d9042e9a32943504aa5e876178c2e6e60 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                sha256 84196357aa3566d64ad123d7a3c67b0e597a115c4934b097580e5ce220b91531 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            setuptools_scm-${setuptools_scm_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                md5 32918d8ac566360c21411e0b3556c695 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                rmd160 cc94a6930135ed2f59dbd96cb747302173eaf26f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                sha256 a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            six-${six_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                md5 a7c927740e4964dd29b72cebfc1429bb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                rmd160 ad79fa25e141856d4a384c4b2476f7e41a91ba98 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                sha256 1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            typing_extensions-${typing_extensions_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                md5 ed80ecc8eac5cb15840535ca54eb43f3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                rmd160 b9ba0200913df912b7cb026177a7dc428880b180 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                sha256 49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            zipp-${zipp_vers}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                md5 8d5cf6eb3270384ae13a6440797ea564 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                rmd160 7203de20b31173e32d6c0876d1537e0b147eada8 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                sha256 71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system -W ${workpath}/pep517-${pep517_vers} "patch -p0 < ${filespath}/no-deps-option.diff"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system -W ${workpath}/python-install-${python-install_vers} "patch -p0 < ${filespath}/patch-install-__init__.py.diff"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set instdir ${prefix}/share/${subport}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -m 755 -d ${destroot}${instdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        copy ${workpath}/flit_core-${flit_core_vers}/flit_core \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${workpath}/pep517-${pep517_vers}/pep517 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${workpath}/python-install-${python-install_vers}/install \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${workpath}/tomli-${tomli_vers}/tomli \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${destroot}${instdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${python.version} < 38} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            copy ${workpath}/importlib_metadata-${importlib_metadata_vers}/importlib_metadata \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${workpath}/packaging-${packaging_vers}/packaging \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${workpath}/pyparsing-${parsing_vers}/pyparsing \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${workpath}/setuptools_scm-${setuptools_scm_vers}/src/setuptools_scm \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${workpath}/six-${six_vers}/six.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${workpath}/typing_extensions-${typing_extensions_vers}/src_py3/typing_extensions.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${workpath}/zipp-${zipp_vers}/zipp.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${destroot}${instdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+livecheck.type      none
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-bootstrap-modules/files/no-deps-option.diff b/python/py-bootstrap-modules/files/no-deps-option.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..84049a8c1e7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-bootstrap-modules/files/no-deps-option.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,63 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- pep517/build.py.orig   2020-10-19 07:41:27.000000000 +1100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ pep517/build.py        2020-12-01 12:49:53.000000000 +1100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -55,14 +55,15 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-def _do_build(hooks, env, dist, dest):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++def _do_build(hooks, env, dist, dest, no_deps=False):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     get_requires_name = 'get_requires_for_build_{dist}'.format(**locals())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     get_requires = getattr(hooks, get_requires_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     reqs = get_requires({})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     log.info('Got build requires: %s', reqs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    env.pip_install(reqs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    log.info('Installed dynamic build dependencies')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if not no_deps:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        env.pip_install(reqs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        log.info('Installed dynamic build dependencies')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     with tempdir() as td:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         log.info('Trying to build %s in %s', dist, td)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -73,7 +74,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         shutil.move(source, os.path.join(dest, os.path.basename(filename)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-def build(source_dir, dist, dest=None, system=None):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++def build(source_dir, dist, dest=None, system=None, no_deps=False):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     system = system or load_system(source_dir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     dest = os.path.join(source_dir, dest or 'dist')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     mkdir_p(dest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -84,8 +85,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     with BuildEnvironment() as env:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        env.pip_install(system['requires'])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        _do_build(hooks, env, dist, dest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if not no_deps:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            env.pip_install(system['requires'])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        _do_build(hooks, env, dist, dest, no_deps=no_deps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ parser = argparse.ArgumentParser()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -104,6 +106,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     default=False,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ parser.add_argument(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    '--no-deps', '-n',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    action='store_true',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    default=False,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++parser.add_argument(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     '--out-dir', '-o',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     help="Destination in which to save the builds relative to source dir",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -117,7 +124,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     )))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for dist in dists:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        build(args.source_dir, dist, args.out_dir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        build(args.source_dir, dist, args.out_dir, no_deps=args.no_deps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if __name__ == '__main__':
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-bootstrap-modules/files/patch-install-__init__.py.diff b/python/py-bootstrap-modules/files/patch-install-__init__.py.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..7896e33eff9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-bootstrap-modules/files/patch-install-__init__.py.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,43 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- install/__init__.py.orig       2021-03-27 19:03:57.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ install/__init__.py    2021-03-27 19:08:03.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -84,6 +84,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     def _copy_dir(src, dst, ignore=[]):  # type: (str, str, List[str]) -> None
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if not os.path.exists(dst):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            os.makedirs(dst)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         from distutils.dir_util import copy_tree
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for node in os.listdir(src):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if node in ignore:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- install/__init__.py.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ install/__init__.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -131,6 +131,17 @@ def _replace_shebang(dir, interpreter):  # type: (str, str) -> None
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     f.close()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++def _make_executable(dir):  # type: (str) -> None
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    scripts = [os.path.join(dir, script) for script in os.listdir(dir)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    import stat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    for script in scripts:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        mode = os.stat(script).st_mode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        mode |= stat.S_IRUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IXGRP \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            | stat.S_IROTH | stat.S_IXOTH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        os.chmod(script, mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def _check_requirement(requirement_string):  # type: (str) -> bool
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     import packaging.requirements
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -238,9 +249,11 @@ def build(wheel, cache_dir, optimize=[0, 1, 2], verify_dependencies=False):  # t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if os.path.isfile(entrypoints_file):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         _generate_entrypoint_scripts(entrypoints_file, scripts_cache_dir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        _make_executable(scripts_cache_dir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if os.path.isdir(scripts_dir):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         _replace_shebang(scripts_dir, sys.executable)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        _make_executable(scripts_dir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     _save_pickle(cache_dir, 'wheel-info', wheel_info)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     _save_pickle(cache_dir, 'metadata', metadata)
</span></pre><pre style='margin:0'>

</pre>