summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Adler <kadler@us.ibm.com>2019-03-04 14:48:40 (GMT)
committerVictor Stinner <vstinner@redhat.com>2019-03-04 14:48:40 (GMT)
commit800d5cd75025876d79ab05980925a05d8e36b63d (patch)
tree8fa3adcfab4e534ea5d520a920f4bebc402f643f
parent4d61e6e3b802399be62a521d6fa785698cb670b5 (diff)
downloadcpython-800d5cd75025876d79ab05980925a05d8e36b63d.zip
cpython-800d5cd75025876d79ab05980925a05d8e36b63d.tar.gz
cpython-800d5cd75025876d79ab05980925a05d8e36b63d.tar.bz2
bpo-35198 Fix C++ extension compilation on AIX (GH-10437)
For C++ extensions, distutils tries to replace the C compiler with the C++ compiler, but it assumes that C compiler is the first element after any environment variables set. On AIX, linking goes through ld_so_aix, so it is the first element and the compiler is the next element. Thus the replacement is faulty: ld_so_aix gcc ... -> g++ gcc ... Also, it assumed that self.compiler_cxx had only 1 element or that there were the same number of elements as the linker has and in the same order. This might not be the case, so instead concatenate everything together.
-rw-r--r--Lib/distutils/unixccompiler.py10
-rw-r--r--Misc/NEWS.d/next/Library/2018-11-09-12-45-28.bpo-35198.EJ8keW.rst1
2 files changed, 10 insertions, 1 deletions
diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py
index ab4d4de..d10a78d 100644
--- a/Lib/distutils/unixccompiler.py
+++ b/Lib/distutils/unixccompiler.py
@@ -188,7 +188,15 @@ class UnixCCompiler(CCompiler):
i = 1
while '=' in linker[i]:
i += 1
- linker[i] = self.compiler_cxx[i]
+
+ if os.path.basename(linker[i]) == 'ld_so_aix':
+ # AIX platforms prefix the compiler with the ld_so_aix
+ # script, so we need to adjust our linker index
+ offset = 1
+ else:
+ offset = 0
+
+ linker[i+offset] = self.compiler_cxx[i]
if sys.platform == 'darwin':
linker = _osx_support.compiler_fixup(linker, ld_args)
diff --git a/Misc/NEWS.d/next/Library/2018-11-09-12-45-28.bpo-35198.EJ8keW.rst b/Misc/NEWS.d/next/Library/2018-11-09-12-45-28.bpo-35198.EJ8keW.rst
new file mode 100644
index 0000000..4ce7a7e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-11-09-12-45-28.bpo-35198.EJ8keW.rst
@@ -0,0 +1 @@
+Fix C++ extension compilation on AIX