[Python-checkins] cpython: Closes #27976: Deprecate bundled full copy of libffi

zach.ware python-checkins at python.org
Fri Sep 9 20:01:33 EDT 2016


https://hg.python.org/cpython/rev/3e02187e50df
changeset:   103504:3e02187e50df
user:        Zachary Ware <zachary.ware at gmail.com>
date:        Fri Sep 09 17:01:21 2016 -0700
summary:
  Closes #27976: Deprecate bundled full copy of libffi

Builds on non-OSX UNIX now default to using the system libffi, and warn if the
bundled copy is used.

files:
  Doc/whatsnew/3.6.rst |  10 ++++++++++
  Misc/NEWS            |   3 +++
  configure            |  24 ++++++++++++++++++++----
  configure.ac         |  22 +++++++++++++++++++---
  setup.py             |  10 +++++++---
  5 files changed, 59 insertions(+), 10 deletions(-)


diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -1010,6 +1010,16 @@
 Deprecated
 ==========
 
+Deprecated Build Options
+------------------------
+
+The ``--with-system-ffi`` configure flag is now on by default on non-OSX UNIX
+platforms.  It may be disabled by using ``--without-system-ffi``, but using the
+flag is deprecated and will not be accepted in Python 3.7.  OSX is unaffected
+by this change.  Note that many OS distributors already use the
+``--with-system-ffi`` flag when building their system Python.
+
+
 New Keywords
 ------------
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -311,6 +311,9 @@
 Build
 -----
 
+- Issue #27976: Deprecate building _ctypes with the bundled copy of libffi on
+  non-OSX UNIX platforms.
+
 - Issue #27983: Cause lack of llvm-profdata tool when using clang as
   required for PGO linking to be a configure time error rather than
   make time when --with-optimizations is enabled.  Also improve our
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -9851,10 +9851,26 @@
 # Check whether --with-system_ffi was given.
 if test "${with_system_ffi+set}" = set; then :
   withval=$with_system_ffi;
-else
-  with_system_ffi="no"
-fi
-
+fi
+
+
+case "$with_system_ffi" in
+    "")
+        case $ac_sys_system in
+            Darwin)
+                with_system_ffi="no"
+                ;;
+            *)
+                with_system_ffi="yes"
+                ;;
+        esac
+        ;;
+    yes|no)
+        ;;
+    *)
+        as_fn_error $? "--with-system-ffi accepts no arguments" "$LINENO" 5
+        ;;
+esac
 
 if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then
     LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -2737,9 +2737,25 @@
 # Check for use of the system libffi library
 AC_MSG_CHECKING(for --with-system-ffi)
 AC_ARG_WITH(system_ffi,
-            AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library]),
-            [],
-            [with_system_ffi="no"])
+            AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library]),,,)
+
+case "$with_system_ffi" in
+    "")
+        case $ac_sys_system in
+            Darwin)
+                with_system_ffi="no"
+                ;;
+            *)
+                with_system_ffi="yes"
+                ;;
+        esac
+        ;;
+    yes|no)
+        ;;
+    *)
+        AC_MSG_ERROR([--with-system-ffi accepts no arguments])
+        ;;
+esac
 
 if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then
     LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -1911,6 +1911,9 @@
             if host_platform == 'darwin':
                 return self.configure_ctypes_darwin(ext)
 
+            print('warning: building with the bundled copy of libffi is'
+                  ' deprecated on this platform.  It will not be'
+                  ' distributed with Python 3.7')
             srcdir = sysconfig.get_config_var('srcdir')
             ffi_builddir = os.path.join(self.build_temp, 'libffi')
             ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules',
@@ -2007,13 +2010,14 @@
                      libraries=math_libs)
         self.extensions.extend([ext, ext_test])
 
-        if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
-            return
-
         if host_platform == 'darwin':
+            if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"):
+                return
             # OS X 10.5 comes with libffi.dylib; the include files are
             # in /usr/include/ffi
             inc_dirs.append('/usr/include/ffi')
+        elif '--without-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
+            return
 
         ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
         if not ffi_inc or ffi_inc[0] == '':

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list