diff options
author | Kevin Adler <kadler@us.ibm.com> | 2019-03-04 14:48:40 (GMT) |
---|---|---|
committer | Victor Stinner <vstinner@redhat.com> | 2019-03-04 14:48:40 (GMT) |
commit | 800d5cd75025876d79ab05980925a05d8e36b63d (patch) | |
tree | 8fa3adcfab4e534ea5d520a920f4bebc402f643f | |
parent | 4d61e6e3b802399be62a521d6fa785698cb670b5 (diff) | |
download | cpython-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.py | 10 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-11-09-12-45-28.bpo-35198.EJ8keW.rst | 1 |
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 |