python: forward port cross-compiling work to our 3.6 version
This doesn't enable python3.6 for any packages, just makes the
interpreter work correctly & cross-compile properly.
BUG=chromium:884766, chromium:982409
TEST=SDK & CQ still pass
TEST=`emerge-$BOARD python:3.6` works (for betty & elm)
TEST=building python packages (including C modules e.g. numpy) works for 3.6 on elm
Change-Id: I2fdc75419e51fc8049583985654e16fe56790ddf
Reviewed-on: https://chromium-review.googlesource.com/1697461
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Chris McDonald <cjmcdonald@chromium.org>
diff --git a/dev-lang/python/files/python-3.6.5-system-libffi.patch b/dev-lang/python/files/python-3.6.5-system-libffi.patch
new file mode 100644
index 0000000..671e078
--- /dev/null
+++ b/dev-lang/python/files/python-3.6.5-system-libffi.patch
@@ -0,0 +1,36 @@
+make sure we respect the system libffi setting in our build config.
+the compiler probing is fragile and can break in some situations.
+
+--- a/setup.py
++++ b/setup.py
+@@ -2069,7 +2069,7 @@ class PyBuildExt(build_ext):
+ return True
+
+ def detect_ctypes(self, inc_dirs, lib_dirs):
+- self.use_system_libffi = False
++ self.use_system_libffi = ('--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"))
+ include_dirs = []
+ extra_compile_args = []
+ extra_link_args = []
+@@ -2113,8 +2113,6 @@ class PyBuildExt(build_ext):
+ # 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] == '':
+@@ -2141,10 +2141,10 @@ class PyBuildExt(build_ext):
+ ffi_lib = lib_name
+ break
+
+- if ffi_inc and ffi_lib:
++ if ffi_inc:
+ ext.include_dirs.extend(ffi_inc)
++ if ffi_lib:
+ ext.libraries.append(ffi_lib)
+- self.use_system_libffi = True
+
+ if sysconfig.get_config_var('HAVE_LIBDL'):
+ # for dlopen, see bpo-32647