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.
This commit is contained in:
Kevin Adler 2019-03-04 08:48:40 -06:00 committed by Victor Stinner
parent 4d61e6e3b8
commit 800d5cd750
2 changed files with 10 additions and 1 deletions

View File

@ -188,7 +188,15 @@ class UnixCCompiler(CCompiler):
i = 1 i = 1
while '=' in linker[i]: while '=' in linker[i]:
i += 1 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': if sys.platform == 'darwin':
linker = _osx_support.compiler_fixup(linker, ld_args) linker = _osx_support.compiler_fixup(linker, ld_args)

View File

@ -0,0 +1 @@
Fix C++ extension compilation on AIX