<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/03fd9ff75107ebb4d664b0d51fbb40d00a5c8be5">https://github.com/macports/macports-ports/commit/03fd9ff75107ebb4d664b0d51fbb40d00a5c8be5</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 03fd9ff7510 python310: update to 3.10.8
</span>03fd9ff7510 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 03fd9ff75107ebb4d664b0d51fbb40d00a5c8be5
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Oct 12 13:15:48 2022 +1100

<span style='display:block; white-space:pre;color:#404040;'>    python310: update to 3.10.8
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Build gdbm and tkinter extensions with PEP517, and install them to
</span><span style='display:block; white-space:pre;color:#404040;'>    lib-dynload.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/59147
</span>---
 lang/python310/Portfile                 |  8 +--
 python/py-gdbm/Portfile                 | 86 +++++++++++++++----------------
 python/py-gdbm/files/pyproject.toml     | 12 +++++
 python/py-gdbm/files/setup-pep517.py    | 13 +++++
 python/py-tkinter/Portfile              | 89 +++++++++++++++++----------------
 python/py-tkinter/files/pyproject.toml  | 12 +++++
 python/py-tkinter/files/setup-pep517.py | 16 ++++++
 7 files changed, 147 insertions(+), 89 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/python310/Portfile b/lang/python310/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 93ca7c24598..b3577ec5fbf 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/python310/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/python310/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,7 +7,7 @@ PortGroup clang_dependency 1.0
</span> name                python310
 
 # Remember to keep py310-tkinter and py310-gdbm's versions sync'd with this
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version             3.10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             3.10.8
</span> 
 set branch          [join [lrange [split ${version} .] 0 1] .]
 categories          lang
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -23,9 +23,9 @@ master_sites        ${homepage}ftp/python/${version}/
</span> 
 distname            Python-${version}
 use_xz              yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           md5 b8094f007b3a835ca3be6bdf8116cccc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160 15cea01c9fa3fe2f60ac6f7ba67b6c04072f5c72 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256 6eed8415b7516fb2f260906db5d48dd4c06acc0cb24a7d6cc15296a604dcdc48
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           md5 e92356b012ed4d0e09675131d39b1bde \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160 e798facc3419b78c1eb980a2e63a9ec5e9cc586b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256 6a30ecde59c47048013eb5a658c9b5dec277203d2793667f578df7671f7f03f3
</span> 
 patchfiles          patch-setup.py.diff \
                     patch-Lib-cgi.py.diff \
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-gdbm/Portfile b/python/py-gdbm/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 01a57431fcd..fec1ef7a098 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-gdbm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-gdbm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -14,29 +14,28 @@ long_description        ${description}
</span> 
 homepage               https://docs.python.org/2/library/gdbm.html
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions 26 27 32 33 34 35 36 37 38 39
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set setup_py "setup.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set extract_files "Modules/gdbmmodule.c"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions 26 27 32 33 34 35 36 37 38 39 310
</span> 
 subport py26-gdbm {
     maintainers     {mcalhoun @MarcusCalhoun-Lopez} openmaintainer
     version         2.6.9
     revision        2
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz          yes
</span>     checksums       md5 933a811f11e3db3d73ae492f6c3a7a76 \
                     rmd160 42edf7c9f2f64b77ab173de30ea453257c2c06b3 \
                     sha256 cae7bb995006ea5b703d9d28446f694894c441fe4bfb95d561c0ac908cd06e41
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    set setup_files [list setup.py]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set extract_files [list Modules/gdbmmodule.c]
</span>     livecheck.regex {Python (2\.6\.[0-9]+)}
 }
 subport py27-gdbm {
     maintainers     {jmr @jmroot} openmaintainer
     version         2.7.18
     revision        0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 fd6cc8ec0a78c44036f825e739f36e5a \
                     rmd160 40a514bb05c9e631454ea8466e28f5bb229428ad \
                     sha256 b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    set setup_files [list setup.py]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set extract_files [list Modules/gdbmmodule.c]
</span>     livecheck.regex {Python (2\.7\.[0-9]+)}
 }
 subport py32-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,12 +43,9 @@ subport py32-gdbm {
</span>     version         3.2.6
     revision        2
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5     e0ba4360dfcb4aec735e666cc0ae7b0e \
                     rmd160  f3f5877cd3ac03151f161353e808a38204f1270d \
                     sha256  1d12b501819fd26afafbf8459be1aa279b56f032b4c15412de0a713ce0de7bdc
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c"
</span>     livecheck.regex {Python (3\.2\.[0-9]+)}
 }
 subport py33-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -58,12 +54,9 @@ subport py33-gdbm {
</span>     epoch           20141012
     revision        2
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 84e2f12f044ca53b577f6224c53f82ac \
                     rmd160 3a915ea86ef3826fc0483eb94a2b4e2b9ad787b1 \
                     sha256 85f60c327501c36bc18c33370c14d472801e6af2f901dafbba056f61685429fe
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c"
</span>     livecheck.regex {Python (3\.3\.[0-9]+)}
 }
 subport py34-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -72,12 +65,9 @@ subport py34-gdbm {
</span>     version         3.4.10
     revision        0
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 f88a98bce17a03c43a6a5f8a66ab2e62 \
                     rmd160 050bb8f215d9b5ed8287b2a9f9faa6448d7513a5 \
                     sha256 d46a8f6fe91679e199c671b1b0a30aaf172d2acb5bcab25beb35f16c3d195b4e
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c"
</span>     livecheck.regex {Python (3\.4\.[0-9]+)}
 }
 subport py35-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -86,12 +76,9 @@ subport py35-gdbm {
</span>     version         3.5.10
     revision        0
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 75c9c268703654aa6f6f2ae67303dde4 \
                     rmd160 5ec7da2d568f963a81b78433bf72ed1ad9e87292 \
                     sha256 0f0fa8685c1dc1f1dacb0b4e7779796b90aef99dc1fa4967a71b9da7b57d4a28
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c Modules/clinic/_gdbmmodule.c.h"
</span>     livecheck.regex {Python (3\.5\.[0-9]+)}
 }
 subport py36-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -100,12 +87,9 @@ subport py36-gdbm {
</span>     version         3.6.15
     revision        0
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 bc04aa6c2a1a172a35012abd668538cd \
                     rmd160 eb84f49be5de3e2cc93059b9e90d3d42c971a90f \
                     sha256 6e28d7cdd6dd513dd190e49bca3972e20fcf455090ccf2ef3f1a227614135d91
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c Modules/clinic/_gdbmmodule.c.h"
</span>     livecheck.regex {Python (3\.6\.[0-9]+)}
 }
 subport py37-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -113,12 +97,9 @@ subport py37-gdbm {
</span>     version         3.7.14
     revision        0
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 0acdd6e1a95f49ee7f9b338fb6092b65 \
                     rmd160 487f1741e42c4f2132dc13468c9d02767e8b9c71 \
                     sha256 4157ae31eb81af19e81c36882610491b0fb8f50e00fa8a17b095c88908b9c45c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c Modules/clinic/_gdbmmodule.c.h"
</span>     livecheck.regex {Python (3\.7\.[0-9]+)}
 }
 subport py38-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -126,12 +107,9 @@ subport py38-gdbm {
</span>     version         3.8.14
     revision        0
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 78710eed185b71f4198d354502ff62c9 \
                     rmd160 66936ea9c98e7a00fb23d44010ee3ee26ee37ea5 \
                     sha256 5d77e278271ba803e9909a41a4f3baca006181c93ada682a5e5fe8dc4a24c5f3
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c Modules/clinic/_gdbmmodule.c.h"
</span>     livecheck.regex {Python (3\.8\.[0-9]+)}
 }
 subport py39-gdbm {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -139,25 +117,19 @@ subport py39-gdbm {
</span>     version         3.9.14
     revision        0
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span>     checksums       md5 81cbab3acbc7771f71491b52206d9b6a \
                     rmd160 89c35a6e272853b5a5e30cf87c3fdeedf826997f \
                     sha256 651304d216c8203fe0adf1a80af472d8e92c3b0e0a7892222ae4d9f3ae4debcf
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c Modules/clinic/_gdbmmodule.c.h"
</span>     livecheck.regex {Python (3\.9\.[0-9]+)}
 }
 subport py310-gdbm {
     maintainers     {jmr @jmroot}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    version         3.10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    version         3.10.8
</span>     revision        0
     homepage        https://docs.python.org/release/${version}/library/dbm.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz                      yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    checksums       md5 b8094f007b3a835ca3be6bdf8116cccc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160 15cea01c9fa3fe2f60ac6f7ba67b6c04072f5c72 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256 6eed8415b7516fb2f260906db5d48dd4c06acc0cb24a7d6cc15296a604dcdc48
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set setup_py "setup-py3k.py"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set extract_files "Modules/_gdbmmodule.c Modules/clinic/_gdbmmodule.c.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums       md5 e92356b012ed4d0e09675131d39b1bde \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160 e798facc3419b78c1eb980a2e63a9ec5e9cc586b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256 6a30ecde59c47048013eb5a658c9b5dec277203d2793667f578df7671f7f03f3
</span>     livecheck.regex {Python (3\.10\.[0-9]+)}
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -168,23 +140,53 @@ master_sites       https://www.python.org/ftp/python/${version}/
</span> livecheck.type    none
 
 if {${name} ne ${subport}} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    use_xz      yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     depends_lib-append    port:gdbm
 
     dist_subdir                python${python.version}
 
     worksrcdir ${worksrcdir}/Modules
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${python.version} >= 310} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        python.pep517   yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set setup_files [list pyproject.toml setup-pep517.py]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xinstall -d ${destroot}${python.libdir}/lib-dynload
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            move {*}[glob ${destroot}${python.pkgd}/*.so] ${destroot}${python.libdir}/lib-dynload
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            delete ${destroot}${python.pkgd}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {${python.version} >= 30} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set setup_files [list setup-py3k.py]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${python.version} >= 30} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set extract_files [list Modules/_gdbmmodule.c]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${python.version} >= 35} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend extract_files Modules/clinic/_gdbmmodule.c.h
</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>     foreach f $extract_files {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend extract_files_full "${distname}/$f"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend extract_files_full [shellescape ${distname}/${f}]
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    extract.post_args   "| tar -xf - ${extract_files_full}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    extract.post_args      "| tar -xf - [join ${extract_files_full}]"
</span>     post-extract {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        file copy       ${filespath}/${setup_py} ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach f $setup_files {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[string match setup-*.py $f]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                copy    ${filespath}/${f} ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                copy    ${filespath}/${f} ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
 
     patch {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        reinplace "s|__VERSION__|${version}|g" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reinplace "s|__PREFIX__|${prefix}|g" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace "s|__PREFIX__|${prefix}|" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[file exists ${worksrcpath}/pyproject.toml]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|__VERSION__|${version}|" ${worksrcpath}/pyproject.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|__VERSION__|${version}|" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
 
     livecheck.type     regex
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-gdbm/files/pyproject.toml b/python/py-gdbm/files/pyproject.toml
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b429b18be27
</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-gdbm/files/pyproject.toml
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[build-system]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+requires = ["setuptools"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build-backend = "setuptools.build_meta"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[project]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name = "gdbm"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version = "__VERSION__"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description = "GDBM Extension to Python"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[tool.setuptools.packages.find]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+exclude = ["clinic*"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+namespaces = false
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-gdbm/files/setup-pep517.py b/python/py-gdbm/files/setup-pep517.py
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..34d4cd63bba
</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-gdbm/files/setup-pep517.py
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from setuptools import Extension, setup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+setup(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ext_modules = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Extension(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            name="_gdbm",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            sources=["_gdbmmodule.c"],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            include_dirs = ["__PREFIX__/include"],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            libraries = ["gdbm"],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            library_dirs = ["__PREFIX__/lib"]
</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;color:#808080;'>diff --git a/python/py-tkinter/Portfile b/python/py-tkinter/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index af933c74256..96ee40c5d21 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-tkinter/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-tkinter/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -15,10 +15,10 @@ long_description \
</span> 
 homepage        https://docs.python.org/library/tkinter.html
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions 26 27 32 33 34 35 36 37 38 39
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions 26 27 32 33 34 35 36 37 38 39 310
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set extract_files "Modules/_tkinter.c Modules/tkappinit.c"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set module_name Tkinter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set extract_files [list Modules/_tkinter.c Modules/tkappinit.c]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set module_name tkinter
</span> subport py26-tkinter {
     maintainers {mcalhoun @MarcusCalhoun-Lopez} openmaintainer
     version     2.6.9
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -27,18 +27,17 @@ subport py26-tkinter {
</span>     checksums   md5 933a811f11e3db3d73ae492f6c3a7a76 \
                 rmd160 42edf7c9f2f64b77ab173de30ea453257c2c06b3 \
                 sha256 cae7bb995006ea5b703d9d28446f694894c441fe4bfb95d561c0ac908cd06e41
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set module_name Tkinter
</span> }
 subport py27-tkinter {
     maintainers {jmr @jmroot} openmaintainer
     version     2.7.18
     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 fd6cc8ec0a78c44036f825e739f36e5a \
                 rmd160 40a514bb05c9e631454ea8466e28f5bb229428ad \
                 sha256 b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set module_name Tkinter
</span> }
 subport py32-tkinter {
     maintainers {jmr @jmroot}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -47,21 +46,15 @@ subport py32-tkinter {
</span>     checksums   md5     e0ba4360dfcb4aec735e666cc0ae7b0e \
                 rmd160  f3f5877cd3ac03151f161353e808a38204f1270d \
                 sha256  1d12b501819fd26afafbf8459be1aa279b56f032b4c15412de0a713ce0de7bdc
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz        yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py33-tkinter {
     maintainers {jmr @jmroot}
     version     3.3.7
     epoch       20141012
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 84e2f12f044ca53b577f6224c53f82ac \
                 rmd160 3a915ea86ef3826fc0483eb94a2b4e2b9ad787b1 \
                 sha256 85f60c327501c36bc18c33370c14d472801e6af2f901dafbba056f61685429fe
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py34-tkinter {
     maintainers {jmr @jmroot} openmaintainer
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -69,12 +62,9 @@ subport py34-tkinter {
</span>     version     3.4.10
     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 f88a98bce17a03c43a6a5f8a66ab2e62 \
                 rmd160 050bb8f215d9b5ed8287b2a9f9faa6448d7513a5 \
                 sha256 d46a8f6fe91679e199c671b1b0a30aaf172d2acb5bcab25beb35f16c3d195b4e
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py35-tkinter {
     maintainers {jmr @jmroot} openmaintainer
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -82,12 +72,9 @@ subport py35-tkinter {
</span>     version     3.5.10
     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 75c9c268703654aa6f6f2ae67303dde4 \
                 rmd160 5ec7da2d568f963a81b78433bf72ed1ad9e87292 \
                 sha256 0f0fa8685c1dc1f1dacb0b4e7779796b90aef99dc1fa4967a71b9da7b57d4a28
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h Modules/clinic/_tkinter.c.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py36-tkinter {
     maintainers {jmr @jmroot}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -95,84 +82,100 @@ subport py36-tkinter {
</span>     version     3.6.15
     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 bc04aa6c2a1a172a35012abd668538cd \
                 rmd160 eb84f49be5de3e2cc93059b9e90d3d42c971a90f \
                 sha256 6e28d7cdd6dd513dd190e49bca3972e20fcf455090ccf2ef3f1a227614135d91
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h Modules/clinic/_tkinter.c.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py37-tkinter {
     maintainers {jmr @jmroot}
     version     3.7.14
     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 0acdd6e1a95f49ee7f9b338fb6092b65 \
                 rmd160 487f1741e42c4f2132dc13468c9d02767e8b9c71 \
                 sha256 4157ae31eb81af19e81c36882610491b0fb8f50e00fa8a17b095c88908b9c45c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h Modules/clinic/_tkinter.c.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py38-tkinter {
     maintainers nomaintainer
     version     3.8.14
     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 78710eed185b71f4198d354502ff62c9 \
                 rmd160 66936ea9c98e7a00fb23d44010ee3ee26ee37ea5 \
                 sha256 5d77e278271ba803e9909a41a4f3baca006181c93ada682a5e5fe8dc4a24c5f3
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h Modules/clinic/_tkinter.c.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py39-tkinter {
     maintainers {jmr @jmroot}
     version     3.9.14
     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span>     checksums   md5 81cbab3acbc7771f71491b52206d9b6a \
                 rmd160 89c35a6e272853b5a5e30cf87c3fdeedf826997f \
                 sha256 651304d216c8203fe0adf1a80af472d8e92c3b0e0a7892222ae4d9f3ae4debcf
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h Modules/clinic/_tkinter.c.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span> }
 subport py310-tkinter {
     maintainers {jmr @jmroot}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    version     3.10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    version     3.10.8
</span>     revision    0
     homepage    https://docs.python.org/release/${version}/library/tkinter.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    use_xz      yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    checksums   md5 b8094f007b3a835ca3be6bdf8116cccc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                rmd160 15cea01c9fa3fe2f60ac6f7ba67b6c04072f5c72 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                sha256 6eed8415b7516fb2f260906db5d48dd4c06acc0cb24a7d6cc15296a604dcdc48
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    append extract_files " Modules/tkinter.h Modules/clinic/_tkinter.c.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set module_name tkinter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums   md5 e92356b012ed4d0e09675131d39b1bde \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                rmd160 e798facc3419b78c1eb980a2e63a9ec5e9cc586b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                sha256 6a30ecde59c47048013eb5a658c9b5dec277203d2793667f578df7671f7f03f3
</span> }
 
 master_sites    https://www.python.org/ftp/python/${version}/
 distname        Python-${version}
 
 if {${name} ne ${subport}} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    use_xz      yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     depends_lib-append port:tk
 
     dist_subdir python${python.version}
 
     worksrcdir  ${worksrcdir}/Modules
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${python.version} >= 310} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        python.pep517   yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set setup_files [list pyproject.toml setup-pep517.py]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xinstall -d ${destroot}${python.libdir}/lib-dynload
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            move {*}[glob ${destroot}${python.pkgd}/*.so] ${destroot}${python.libdir}/lib-dynload
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            delete ${destroot}${python.pkgd}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set setup_files [list setup.py]
</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 {${python.version} >= 27} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend extract_files Modules/tkinter.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${python.version} >= 35} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend extract_files Modules/clinic/_tkinter.c.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span>     foreach f $extract_files {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend extract_files_full "${distname}/$f"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend extract_files_full [shellescape ${distname}/${f}]
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    extract.post_args   "| tar -xf - $extract_files_full"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    extract.post_args   "| tar -xf - [join $extract_files_full]"
</span>     post-extract {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        file copy ${filespath}/setup.py ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach f $setup_files {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[string match setup-*.py $f]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                copy    ${filespath}/${f} ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                copy    ${filespath}/${f} ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
 
     configure {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        reinplace "s|__PREFIX__|${prefix}|g" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reinplace "s|__TK-VERSION__|8.6|g" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reinplace "s|__MODULE_NAME__|${module_name}|g" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace "s|__PREFIX__|${prefix}|" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace "s|__TK-VERSION__|8.6|" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[file exists ${worksrcpath}/pyproject.toml]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|__MODULE_NAME__|${module_name}|" ${worksrcpath}/pyproject.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|__VERSION__|${version}|" ${worksrcpath}/pyproject.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|__MODULE_NAME__|${module_name}|" ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
 
     livecheck.type  regex
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-tkinter/files/pyproject.toml b/python/py-tkinter/files/pyproject.toml
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..2bfe0be5016
</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-tkinter/files/pyproject.toml
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[build-system]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+requires = ["setuptools"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build-backend = "setuptools.build_meta"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[project]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name = "__MODULE_NAME__"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version = "__VERSION__"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description = "Tk Extension to Python"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[tool.setuptools.packages.find]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+exclude = ["clinic*"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+namespaces = false
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-tkinter/files/setup-pep517.py b/python/py-tkinter/files/setup-pep517.py
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..263ec469db1
</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-tkinter/files/setup-pep517.py
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from setuptools import Extension, setup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+tkversion = "__TK-VERSION__"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+setup(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ext_modules = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Extension(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            name="_tkinter",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            sources=["_tkinter.c", "tkappinit.c"],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            define_macros=[("WITH_APPINIT", 1)],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            include_dirs = ["__PREFIX__/include"],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            libraries = ["tcl" + tkversion, "tk" + tkversion],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            library_dirs = ["__PREFIX__/lib"]
</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></pre><pre style='margin:0'>

</pre>