<pre style='margin:0'>
Dan Villiom Podlaski Christiansen (danchr) pushed a commit to branch unbreak-pyobjc-big-sur
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/83d6d6db2406e53fe79685827b212c5b9bffb7b1">https://github.com/macports/macports-ports/commit/83d6d6db2406e53fe79685827b212c5b9bffb7b1</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 83d6d6db2406e53fe79685827b212c5b9bffb7b1
</span>Author: Dan Villiom Podlaski Christiansen <danchr@macports.org>
AuthorDate: Fri Mar 19 17:52:35 2021 +0100

<span style='display:block; white-space:pre;color:#404040;'>    py-pyobjc: use provided libffi, build in parallel, use lto
</span>---
 python/py-pyobjc/Portfile                          | 13 +++++++--
 python/py-pyobjc/files/patch-install.py.diff       | 30 +++++++++++++++++---
 ...ch-pyobjc-core-Modules-objc-libffi_support.diff | 32 ++++++++++++++++++++++
 .../files/patch-pyobjc-core-setup.py.diff          | 24 ++++++++++++++++
 4 files changed, 93 insertions(+), 6 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-pyobjc/Portfile b/python/py-pyobjc/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index d799bdb734f..ab87ceb6b65 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-pyobjc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-pyobjc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,7 +5,7 @@ PortGroup           python 1.0
</span> PortGroup           github 1.0
 
 github.setup        ronaldoussoren pyobjc 7.1 v
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> 
 checksums           rmd160  f2d5035a5f35f12a6b34861c0a15a9446bd514fa \
                     sha256  ba15cfd3d3e1d809b236fe147c0854c55cdfed14b7580f1651d9651a4760fdfc \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -39,12 +39,17 @@ if {${name} ne ${subport}} {
</span>     # not in MacPorts
     patchfiles-append \
                     patch-docs-conf.py.diff \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    patch-install.py.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-install.py.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-pyobjc-core-Modules-objc-libffi_support.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-pyobjc-core-setup.py.diff
</span> 
     post-patch {
         reinplace \
             "s/sphinx-build /sphinx-build-${python.branch} /g" \
             ${worksrcpath}/docs/Makefile
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            "s,/usr/include/ffi,${prefix}/include,g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${worksrcpath}/pyobjc-core/setup.py
</span>     }
 
     if {${configure.sdkroot} eq ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -68,6 +73,10 @@ if {${name} ne ${subport}} {
</span>     # the destroot target
     build {
         system -W ${worksrcpath}/docs "make html"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # build the extensions in parallel, for a speedup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system -W ${worksrcpath}/pyobjc-core \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            "${python.bin} ./setup.py build_ext -j${build.jobs}"
</span>     }
 
     # don't pass --no-user-cfg, as the build system subclasses the
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-pyobjc/files/patch-install.py.diff b/python/py-pyobjc/files/patch-install.py.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index 8b5f15d9499..a0e1c541785 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-pyobjc/files/patch-install.py.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-pyobjc/files/patch-install.py.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,6 +1,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- install.py.orig        2020-03-25 12:26:08.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ install.py     2020-04-01 07:49:00.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -198,17 +198,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git install.py install.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- install.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ install.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -198,26 +198,10 @@ def sorted_framework_wrappers():
</span>  def build_project(project, extra_args):
      proj_dir = os.path.join(TOPDIR, project)
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,5 +17,26 @@
</span> -        shutil.rmtree(os.path.join(proj_dir, "build"))
 -
      print("Installing {!r} using {!r}".format(project, sys.executable))
<span style='display:block; white-space:pre;background:#ffe0e0;'>-     status = subprocess.call(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    status = subprocess.call(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    subprocess.check_call(
</span>          [sys.executable, "setup.py", "install"] + extra_args, cwd=proj_dir
<span style='display:block; white-space:pre;background:#e0ffe0;'>+     )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if status != 0:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        print("Installing {!r} failed (status {})".format(project, status))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return False
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return True
</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 version_key(version):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -230,9 +214,7 @@ def main():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         sys.exit(1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for project in ["pyobjc-core"] + sorted_framework_wrappers():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        ok = build_project(project, sys.argv[1:])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if not ok:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        build_project(project, sys.argv[1:])
</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-pyobjc/files/patch-pyobjc-core-Modules-objc-libffi_support.diff b/python/py-pyobjc/files/patch-pyobjc-core-Modules-objc-libffi_support.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..d5c8ac78145
</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-pyobjc/files/patch-pyobjc-core-Modules-objc-libffi_support.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- pyobjc-core/Modules/objc/libffi_support.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ #<buffer libffi_support.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,7 +1,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef PyObjC_FFI_SUPPORT_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define PyObjC_FFI_SUPPORT_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <ffi/ffi.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <ffi.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef FFI_CLOSURES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #error "Need FFI_CLOSURES!"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- pyobjc-core/Modules/objc/libffi_support.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ #<buffer libffi_support.m>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4480,7 +4480,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if PyObjC_BUILD_RELEASE >= 1015
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (@available(macOS 10.15,*)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        cl     = ffi_find_closure_for_code_np(closure);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        cl     = ffi_find_closure_for_code(closure);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         retval = cl->user_data;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         PyObjCFFI_FreeCIF(cl->cif);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ffi_closure_free(cl);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4495,7 +4495,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma clang diagnostic push
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma clang diagnostic ignored "-Wunguarded-availability-new"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    cl     = ffi_find_closure_for_code_np(closure);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    cl     = ffi_find_closure_for_code(closure);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     retval = cl->user_data;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     PyObjCFFI_FreeCIF(cl->cif);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ffi_closure_free(cl);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-pyobjc/files/patch-pyobjc-core-setup.py.diff b/python/py-pyobjc/files/patch-pyobjc-core-setup.py.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..c172f610281
</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-pyobjc/files/patch-pyobjc-core-setup.py.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git pyobjc-core/setup.py pyobjc-core/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- pyobjc-core/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ pyobjc-core/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -141,9 +141,9 @@ else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     cfg_vars = get_config_vars()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for k in cfg_vars:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if isinstance(cfg_vars[k], str) and "-O2" in cfg_vars[k]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            cfg_vars[k] = cfg_vars[k].replace("-O2", "-O3")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            cfg_vars[k] = cfg_vars[k].replace("-O2", "-O3 -flto")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         elif isinstance(cfg_vars[k], str) and "-O3" in cfg_vars[k]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            cfg_vars[k] = cfg_vars[k].replace("-O3", "-O3")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            cfg_vars[k] = cfg_vars[k].replace("-O3", "-O3 -flto")
</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;'>+ # XXX: bug in CPython 3.4 repository leaks unwanted compiler flag into disutils.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -475,7 +475,7 @@ def _fixup_compiler(use_ccache):
</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;'>+ class oc_build_ext(build_ext.build_ext):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    user_options = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    user_options = build_ext.build_ext.user_options + [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             "deployment-target=",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             None,
</span></pre><pre style='margin:0'>

</pre>