Issue 10656: "Out of tree" build fails on AIX (original) (raw)

There are some unit tests concerning distutils which are currently failing on AIX and may be an illustration of the same problem:

====================================================================== ERROR: test_build_ext (distutils.tests.test_build_ext.BuildExtTestCase)

Traceback (most recent call last): File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/unixccompiler.py", line 254, in link self.spawn(linker + ld_args) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/ccompiler.py", line 911, in spawn spawn(cmd, dry_run=self.dry_run) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/spawn.py", line 34, in spawn _spawn_posix(cmd, search_path, dry_run=dry_run) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/spawn.py", line 138, in _spawn_posix % (cmd[0], exit_status)) distutils.errors.DistutilsExecError: command './Modules/ld_so_aix' failed with exit status 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/tests/test_build_ext.py", line 85, in test_build_ext cmd.run() File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/command/build_ext.py", line 347, in run self.build_extensions() File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/command/build_ext.py", line 456, in build_extensions self.build_extension(ext) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/command/build_ext.py", line 543, in build_extension target_lang=language) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/ccompiler.py", line 719, in link_shared_object extra_preargs, extra_postargs, build_temp, target_lang) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/unixccompiler.py", line 256, in link raise LinkError(msg) distutils.errors.LinkError: command './Modules/ld_so_aix' failed with exit status 1

====================================================================== ERROR: test_get_outputs (distutils.tests.test_build_ext.BuildExtTestCase)

Traceback (most recent call last): File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/unixccompiler.py", line 254, in link self.spawn(linker + ld_args) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/ccompiler.py", line 911, in spawn spawn(cmd, dry_run=self.dry_run) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/spawn.py", line 34, in spawn _spawn_posix(cmd, search_path, dry_run=dry_run) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/spawn.py", line 138, in _spawn_posix % (cmd[0], exit_status)) distutils.errors.DistutilsExecError: command './Modules/ld_so_aix' failed with exit status 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/tests/test_build_ext.py", line 343, in test_get_outputs cmd.run() File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/command/build_ext.py", line 347, in run self.build_extensions() File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/command/build_ext.py", line 456, in build_extensions self.build_extension(ext) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/command/build_ext.py", line 543, in build_extension target_lang=language) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/ccompiler.py", line 719, in link_shared_object extra_preargs, extra_postargs, build_temp, target_lang) File "/san_cis/home/cis/.buildbot/python-aix6/py3k-aix6-xlc/build/Lib/distutils/unixccompiler.py", line 256, in link raise LinkError(msg) distutils.errors.LinkError: command './Modules/ld_so_aix' failed with exit status 1

I will take a look.

I have experienced the same problem under ppc64 aix 6.1.2.0 while compiling Python 2.7.1

$ cd Python-2.7.1 $ mkdir __build $ cd __build $ ../configure --with-gcc=xlc_r --with-cxx-main=xlC_r --with-threads --disable-ipv6 $ /usr/linux/bin/make [...] ../Modules/ld_so_aix xlc_r -bI:Modules/python.exp -L.. -L/opt/freeware/lib -L/opt/freeware/lib build/temp.aix-6.1-2.7/data/tcarel/ngbuilder/python/2.7.1/Python-2.7.1/Modules/_struct.o -L/opt/freeware/lib -L/usr/local/lib -o build/lib.aix-6.1-2.7/_struct.so unable to execute ../Modules/ld_so_aix: No such file or directory

There are references to $(srcdir)/Modules/ld_so_aix in both configure.in and Makefile.pre.in whereas ld_so_aix is created in build tree.

================================================== diff -r f4e6e18cae4b Makefile.pre.in --- a/Makefile.pre.in Tue Mar 29 17:28:25 2011 -0700 +++ b/Makefile.pre.in Thu Mar 31 13:05:45 2011 +0200 @@ -1028,7 +1028,7 @@ (INSTALLSCRIPT)(INSTALL_SCRIPT) (INSTALLSCRIPT)(srcdir)/Modules/makexp_aix
(DESTDIR)(DESTDIR)(DESTDIR)(LIBPL)/makexp_aix;
echo "$(LIBPL)/makexp_aix";
- (INSTALLSCRIPT)(INSTALL_SCRIPT) (INSTALLSCRIPT)(srcdir)/Modules/ld_so_aix
+ $(INSTALL_SCRIPT) Modules/ld_so_aix
(DESTDIR)(DESTDIR)(DESTDIR)(LIBPL)/ld_so_aix;
echo "$(LIBPL)/ld_so_aix";
echo; echo "See Misc/AIX-NOTES for details.";
diff -r f4e6e18cae4b configure.in --- a/configure.in Tue Mar 29 17:28:25 2011 -0700 +++ b/configure.in Thu Mar 31 13:05:45 2011 +0200 @@ -1778,7 +1778,7 @@ then case acsyssystem/ac_sys_system/acsyssystem/ac_sys_release in AIX*) - BLDSHARED="$(srcdir)/Modules/ld_so_aix $(CC) -bI:$(srcdir)/Modules/python.exp" + BLDSHARED="Modules/ld_so_aix $(CC) -bI:Modules/python.exp -L$(srcdir)" LDSHARED="$(BINLIBDEST)/config/ld_so_aix $(CC) -bI:$(BINLIBDEST)/config/python.exp" ;; BeOS*)

After fixing these 2 files, Modules/ld_so_aix is found and properly executed by compilation process, but then there is a new issue:

Modules/ld_so_aix xlc_r -bI:Modules/python.exp -L.. -L/opt/freeware/lib -L/opt/freeware/lib build/temp.aix-6.1-2.7/data/tcarel/Python-2.7.1/Modules/_struct.o -L/opt/freeware/lib -L/usr/local/lib -o build/lib.aix-6.1-2.7/_struct.so Modules/ld_so_aix[183]: Modules/makexp_aix: not found.

This time, makexp_aix is expected to be is the same directory than ld_so_aix whereas makeexp_aix remains in the source tree.

Here is a fix:

================================================== diff -r f4e6e18cae4b Modules/ld_so_aix.in --- a/Modules/ld_so_aix.in Tue Mar 29 17:28:25 2011 -0700 +++ b/Modules/ld_so_aix.in Thu Mar 31 13:01:57 2011 +0200 @@ -69,7 +69,10 @@ echo $usage; exit 2 fi -makexp=dirname $0/makexp_aix +makexp=dirname $0/@srcdir@/makexp_aix +if test ! -e "$makexp" ; then + makeexp=makexp_aix +fi # Check for existence of compiler. CC=$1; shift

The first value fix the issue while building Python. The second will use PATH to find makeexp_aix as explained in section `SHARED LIBRARY SUPPORT' in AIX-NOTES (for building shared extension modules).

You can find a patch for 2.7 branch in attachment.

Regards

Tristan Carel Exalead