Commit 935043d1 authored by Zachary Ware's avatar Zachary Ware

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.
parent b7f3c944
...@@ -1010,6 +1010,16 @@ Build and C API Changes ...@@ -1010,6 +1010,16 @@ Build and C API Changes
Deprecated 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 New Keywords
------------ ------------
......
...@@ -311,6 +311,9 @@ Tests ...@@ -311,6 +311,9 @@ Tests
Build 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 - Issue #27983: Cause lack of llvm-profdata tool when using clang as
required for PGO linking to be a configure time error rather than required for PGO linking to be a configure time error rather than
make time when --with-optimizations is enabled. Also improve our make time when --with-optimizations is enabled. Also improve our
......
...@@ -9851,11 +9851,27 @@ $as_echo_n "checking for --with-system-ffi... " >&6; } ...@@ -9851,11 +9851,27 @@ $as_echo_n "checking for --with-system-ffi... " >&6; }
# Check whether --with-system_ffi was given. # Check whether --with-system_ffi was given.
if test "${with_system_ffi+set}" = set; then : if test "${with_system_ffi+set}" = set; then :
withval=$with_system_ffi; 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 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/ *$//'`" LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
else else
......
...@@ -2737,9 +2737,25 @@ AC_MSG_RESULT($with_system_expat) ...@@ -2737,9 +2737,25 @@ AC_MSG_RESULT($with_system_expat)
# Check for use of the system libffi library # Check for use of the system libffi library
AC_MSG_CHECKING(for --with-system-ffi) AC_MSG_CHECKING(for --with-system-ffi)
AC_ARG_WITH(system_ffi, AC_ARG_WITH(system_ffi,
AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library]), AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library]),,,)
[],
[with_system_ffi="no"]) 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 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/ *$//'`" LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
......
...@@ -1911,6 +1911,9 @@ class PyBuildExt(build_ext): ...@@ -1911,6 +1911,9 @@ class PyBuildExt(build_ext):
if host_platform == 'darwin': if host_platform == 'darwin':
return self.configure_ctypes_darwin(ext) 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') srcdir = sysconfig.get_config_var('srcdir')
ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_builddir = os.path.join(self.build_temp, 'libffi')
ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules',
...@@ -2007,13 +2010,14 @@ class PyBuildExt(build_ext): ...@@ -2007,13 +2010,14 @@ class PyBuildExt(build_ext):
libraries=math_libs) libraries=math_libs)
self.extensions.extend([ext, ext_test]) self.extensions.extend([ext, ext_test])
if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
return
if host_platform == 'darwin': 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 # OS X 10.5 comes with libffi.dylib; the include files are
# in /usr/include/ffi # in /usr/include/ffi
inc_dirs.append('/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")] ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
if not ffi_inc or ffi_inc[0] == '': if not ffi_inc or ffi_inc[0] == '':
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment