This is an automated email from the ASF dual-hosted git repository.

mmerli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-client-python.git


The following commit(s) were added to refs/heads/main by this push:
     new 5f86fdf  Enable building Mac universal2 wheels for Python 3.7 (#18)
5f86fdf is described below

commit 5f86fdf8c351662afdcf5564a25c26c7536370d5
Author: Matteo Merli <[email protected]>
AuthorDate: Sun Oct 16 13:48:21 2022 -0700

    Enable building Mac universal2 wheels for Python 3.7 (#18)
---
 .github/workflows/ci-build-release-wheels.yaml |   2 +-
 pkg/mac/build-dependencies.sh                  |   7 +-
 pkg/mac/build-mac-wheels.sh                    |   6 +-
 pkg/mac/python-3.7.patch                       | 185 +++++++++++++++++++++++++
 4 files changed, 189 insertions(+), 11 deletions(-)

diff --git a/.github/workflows/ci-build-release-wheels.yaml 
b/.github/workflows/ci-build-release-wheels.yaml
index f79bfc2..4f890b5 100644
--- a/.github/workflows/ci-build-release-wheels.yaml
+++ b/.github/workflows/ci-build-release-wheels.yaml
@@ -101,7 +101,7 @@ jobs:
       fail-fast: false
       matrix:
         py:
-          - {version: '3.7', version_long:  '3.7.14'}
+          - {version: '3.7', version_long:  '3.7.15'}
           - {version: '3.8', version_long:  '3.8.13'}
           - {version: '3.9', version_long:  '3.9.14'}
           - {version: '3.10', version_long:  '3.10.7'}
diff --git a/pkg/mac/build-dependencies.sh b/pkg/mac/build-dependencies.sh
index 3e409bf..07c8987 100755
--- a/pkg/mac/build-dependencies.sh
+++ b/pkg/mac/build-dependencies.sh
@@ -70,15 +70,12 @@ if [ ! -f Python-${PYTHON_VERSION_LONG}/.done ]; then
 
   pushd Python-${PYTHON_VERSION_LONG}
       if [ $PYTHON_VERSION = '3.7' ]; then
-          UNIVERSAL_ARCHS='intel-64'
-          PY_CFLAGS=" -arch x86_64"
-      else
-          UNIVERSAL_ARCHS='universal2'
+          patch -p1 < ${ROOT_DIR}/pkg/mac/python-3.7.patch
       fi
 
       CFLAGS="-fPIC -O3 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} 
-I${PREFIX}/include ${PY_CFLAGS}" \
           LDFLAGS=" ${PY_CFLAGS} -L${PREFIX}/lib" \
-          ./configure --prefix=$PREFIX --enable-shared --enable-universalsdk 
--with-universal-archs=${UNIVERSAL_ARCHS}
+          ./configure --prefix=$PREFIX --enable-shared --enable-universalsdk 
--with-universal-archs=universal2
       make -j16
       make install
 
diff --git a/pkg/mac/build-mac-wheels.sh b/pkg/mac/build-mac-wheels.sh
index edb23f5..b311465 100755
--- a/pkg/mac/build-mac-wheels.sh
+++ b/pkg/mac/build-mac-wheels.sh
@@ -49,10 +49,6 @@ PIP_EXE=$PREFIX/bin/pip3
 
 ARCHS='arm64;x86_64'
 PIP_TAG='universal2'
-if [ $PYTHON_VERSION = '3.7' ]; then
-    ARCHS='x86_64'
-    PIP_TAG=$ARCHS
-fi
 
 cmake . \
         -DCMAKE_OSX_ARCHITECTURES=${ARCHS} \
@@ -67,7 +63,7 @@ cmake . \
         -DBOOST_ROOT=${PREFIX}
 
 make clean
-make -j16 VERBOSE=1
+make -j16
 
 $PY_EXE setup.py bdist_wheel
 
diff --git a/pkg/mac/python-3.7.patch b/pkg/mac/python-3.7.patch
new file mode 100644
index 0000000..f788920
--- /dev/null
+++ b/pkg/mac/python-3.7.patch
@@ -0,0 +1,185 @@
+diff -r -u Python-3.7.15.orig/Lib/_osx_support.py 
Python-3.7.15/Lib/_osx_support.py
+--- Python-3.7.15.orig/Lib/_osx_support.py     2022-10-10 05:34:53.000000000 
-0700
++++ Python-3.7.15/Lib/_osx_support.py  2022-10-14 08:10:34.000000000 -0700
+@@ -491,6 +491,8 @@
+                 machine = 'fat64'
+             elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'):
+                 machine = 'universal'
++            elif archs == ('arm64', 'x86_64'):
++                machine = 'universal2'
+             else:
+                 raise ValueError(
+                    "Don't know machine value for archs=%r" % (archs,))
+diff -r -u Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/ffi.h 
Python-3.7.15/Modules/_ctypes/libffi_osx/include/ffi.h
+--- Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/ffi.h        
2022-10-10 05:34:53.000000000 -0700
++++ Python-3.7.15/Modules/_ctypes/libffi_osx/include/ffi.h     2022-10-14 
08:54:33.000000000 -0700
+@@ -62,7 +62,8 @@
+ #     elif defined(__ppc__) || defined(__ppc64__)
+ #             define POWERPC_DARWIN
+ #     else
+-#     error "Unsupported MacOS X CPU type"
++/* Temp fix to allow for universal2 to build through */
++#             define X86_DARWIN
+ #     endif
+ #else
+ #error "Unsupported OS type"
+@@ -199,9 +200,9 @@
+ 
+ void
+ ffi_raw_call(
+-/*@dependent@*/       ffi_cif*        cif, 
+-                              void            (*fn)(void), 
+-/*@out@*/             void*           rvalue, 
++/*@dependent@*/       ffi_cif*        cif,
++                              void            (*fn)(void),
++/*@out@*/             void*           rvalue,
+ /*@dependent@*/       ffi_raw*        avalue);
+ 
+ void
+@@ -225,9 +226,9 @@
+       longs and doubles are followed by an empty 64-bit word. */
+ void
+ ffi_java_raw_call(
+-/*@dependent@*/       ffi_cif*        cif, 
+-                              void            (*fn)(void), 
+-/*@out@*/             void*           rvalue, 
++/*@dependent@*/       ffi_cif*        cif,
++                              void            (*fn)(void),
++/*@out@*/             void*           rvalue,
+ /*@dependent@*/       ffi_raw*        avalue);
+ 
+ void
+@@ -272,8 +273,8 @@
+       ffi_cif*        cif;
+ 
+ #if !FFI_NATIVE_RAW_API
+-      /*      if this is enabled, then a raw closure has the same layout 
+-              as a regular closure.  We use this to install an intermediate 
++      /*      if this is enabled, then a raw closure has the same layout
++              as a regular closure.  We use this to install an intermediate
+               handler to do the transaltion, void** -> ffi_raw*. */
+       void    (*translate_args)(ffi_cif*,void*,void**,void*);
+       void*   this_closure;
+@@ -303,17 +304,17 @@
+ 
+ ffi_status
+ ffi_prep_cif(
+-/*@out@*/ /*@partial@*/                                       ffi_cif*        
        cif, 
++/*@out@*/ /*@partial@*/                                       ffi_cif*        
        cif,
+                                                                               
ffi_abi                 abi,
+-                                                                              
unsigned int    nargs, 
+-/*@dependent@*/ /*@out@*/ /*@partial@*/       ffi_type*               rtype, 
++                                                                              
unsigned int    nargs,
++/*@dependent@*/ /*@out@*/ /*@partial@*/       ffi_type*               rtype,
+ /*@dependent@*/                                                       
ffi_type**              atypes);
+ 
+ void
+ ffi_call(
+-/*@dependent@*/       ffi_cif*        cif, 
+-                              void            (*fn)(void), 
+-/*@out@*/             void*           rvalue, 
++/*@dependent@*/       ffi_cif*        cif,
++                              void            (*fn)(void),
++/*@out@*/             void*           rvalue,
+ /*@dependent@*/       void**          avalue);
+ 
+ /* Useful for eliminating compiler warnings */
+diff -r -u Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/fficonfig.h 
Python-3.7.15/Modules/_ctypes/libffi_osx/include/fficonfig.h
+--- Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/fficonfig.h  
2022-10-10 05:34:53.000000000 -0700
++++ Python-3.7.15/Modules/_ctypes/libffi_osx/include/fficonfig.h       
2022-10-14 13:19:13.000000000 -0700
+@@ -1,4 +1,4 @@
+-/*    Manually created fficonfig.h for Darwin on PowerPC or Intel 
++/*    Manually created fficonfig.h for Darwin on PowerPC or Intel
+ 
+       This file is manually generated to do away with the need for autoconf 
and
+       therefore make it easier to cross-compile and build fat binaries.
+@@ -18,7 +18,7 @@
+ #     define  HAVE_LONG_DOUBLE 1
+ #     define  SIZEOF_LONG_DOUBLE 16
+ 
+-#elif defined(__x86_64__)
++#elif defined(__x86_64__) || defined(__arm64__)
+ #     define  BYTEORDER 1234
+ #     undef   HOST_WORDS_BIG_ENDIAN
+ #     undef   WORDS_BIGENDIAN
+@@ -33,10 +33,10 @@
+ #     define  SIZEOF_DOUBLE 8
+ #     if __GNUC__ >= 4
+ #             define  HAVE_LONG_DOUBLE 1
+-#             define  SIZEOF_LONG_DOUBLE 16 
++#             define  SIZEOF_LONG_DOUBLE 16
+ #     else
+ #             undef   HAVE_LONG_DOUBLE
+-#             define  SIZEOF_LONG_DOUBLE 8 
++#             define  SIZEOF_LONG_DOUBLE 8
+ #     endif
+ 
+ #elif defined(__ppc64__)
+@@ -147,4 +147,4 @@
+ #     else
+ #             define FFI_HIDDEN
+ #     endif
+-#endif
+\ No newline at end of file
++#endif
+diff -r -u Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/ffitarget.h 
Python-3.7.15/Modules/_ctypes/libffi_osx/include/ffitarget.h
+--- Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/ffitarget.h  
2022-10-10 05:34:53.000000000 -0700
++++ Python-3.7.15/Modules/_ctypes/libffi_osx/include/ffitarget.h       
2022-10-14 09:35:48.000000000 -0700
+@@ -4,10 +4,10 @@
+       make building fat binaries harder.
+ */
+ 
+-#if defined(__i386__) || defined(__x86_64__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__arm64__)
+ #include "x86-ffitarget.h"
+ #elif defined(__ppc__) || defined(__ppc64__)
+ #include "ppc-ffitarget.h"
+ #else
+ #error "Unsupported CPU type"
+-#endif
+\ No newline at end of file
++#endif
+diff -r -u 
Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/x86-ffitarget.h 
Python-3.7.15/Modules/_ctypes/libffi_osx/include/x86-ffitarget.h
+--- Python-3.7.15.orig/Modules/_ctypes/libffi_osx/include/x86-ffitarget.h      
2022-10-10 05:34:53.000000000 -0700
++++ Python-3.7.15/Modules/_ctypes/libffi_osx/include/x86-ffitarget.h   
2022-10-14 11:58:41.000000000 -0700
+@@ -33,7 +33,7 @@
+ #     define X86
+ #endif
+ 
+-#if defined(__x86_64__) 
++#if defined(__x86_64__) || defined(__arm64__)
+ #     ifndef X86_64
+ #             define X86_64
+ #     endif
+@@ -58,7 +58,7 @@
+ #endif
+ 
+       /* ---- Intel x86 and AMD x86-64 - */
+-#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__))
++#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__) || 
defined(__arm64__))
+       FFI_SYSV,
+       FFI_UNIX64,   /* Unix variants all use the same ABI for x86-64  */
+ #     ifdef __i386__
+@@ -85,4 +85,4 @@
+ #     define FFI_NATIVE_RAW_API 1     /* x86 has native raw api support */
+ #endif
+ 
+-#endif        // #ifndef LIBFFI_TARGET_H
+\ No newline at end of file
++#endif        // #ifndef LIBFFI_TARGET_H
+Only in Python-3.7.15: config.log
+diff -r -u Python-3.7.15.orig/configure Python-3.7.15/configure
+--- Python-3.7.15.orig/configure       2022-10-10 05:34:53.000000000 -0700
++++ Python-3.7.15/configure    2022-10-14 08:10:34.000000000 -0700
+@@ -7449,6 +7449,11 @@
+                LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+                ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+                ;;
++            universal2)
++               UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
++               LIPO_32BIT_FLAGS=""
++               ARCH_RUN_32BIT=""
++               ;;
+             *)
+                as_fn_error $? "proper usage is 
--with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5
+                ;;

Reply via email to