diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index bd61bc56f32..4e664642b82 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -748,6 +748,9 @@ class build_ext(Command): elif sys.platform == 'darwin': # Don't use the default code below return ext.libraries + elif sys.platform[:3] == 'aix': + # Don't use the default code below + return ext.libraries else: from distutils import sysconfig if sysconfig.get_config_var('Py_ENABLE_SHARED'): diff --git a/Makefile.pre.in b/Makefile.pre.in index d5b0ebc7287..d2bb685992d 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -446,10 +446,10 @@ $(LIBRARY): $(LIBRARY_OBJS) libpython$(VERSION).so: $(LIBRARY_OBJS) if test $(INSTSONAME) != $(LDLIBRARY); then \ - $(LDSHARED) $(PY_LDFLAGS) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ + $(BLDSHARED) $(PY_LDFLAGS) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ $(LN) -f $(INSTSONAME) $@; \ else \ - $(LDSHARED) $(PY_LDFLAGS) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ + $(BLDSHARED) $(PY_LDFLAGS) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ fi libpython$(VERSION).dylib: $(LIBRARY_OBJS) @@ -1220,7 +1220,7 @@ distclean: clobber done -rm -f core Makefile Makefile.pre config.status \ Modules/Setup Modules/Setup.local Modules/Setup.config \ - Misc/python.pc + Modules/ld_so_aix Misc/python.pc -rm -f python*-gdb.py -rm -f pybuilddir.txt find $(srcdir) '(' -name '*.fdc' -o -name '*~' \ diff --git a/Misc/NEWS b/Misc/NEWS index 437b9764f69..6349b397ef7 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -102,6 +102,9 @@ Tools/Demos Build ----- +- Issue #941346: Improve the build process under AIX and allow Python to + be built as a shared library. Patch by Sébastien Sablé. + - Issue #4026: Make the fcntl extension build under AIX. Patch by Sébastien Sablé. diff --git a/Modules/ld_so_aix b/Modules/ld_so_aix.in old mode 100755 new mode 100644 similarity index 92% rename from Modules/ld_so_aix rename to Modules/ld_so_aix.in index 6b83823d19e..0fd245b0622 --- a/Modules/ld_so_aix +++ b/Modules/ld_so_aix.in @@ -131,11 +131,14 @@ do shift done +if test "$objfile" = "libpython@VERSION@.so"; then + ldsocoremode="true" +fi if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 -elif test ! -r "$impfile"; then +elif test ! -r "$impfile" -a -z "$ldsocoremode"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi @@ -155,7 +158,7 @@ fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then - entry=init`echo $filename | sed "s/module.*//"` + entry=PyInit_`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" @@ -166,11 +169,12 @@ fi #echo " -> object files: $objs" #echo " -> CC arguments: $args" -CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" -CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" -# Note: to use dynamic libraries like libtcl8.4.so and libtk8.4.so -# you may need to replace the second CCOPT line above with the following: -# CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -brtl -bnortllib -lm -o $objfile" +if test -z "$ldsocoremode"; then + CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" +else + CCOPT="-Wl,-bnoentry -Wl,-bE:$expfile -Wl,-bhalt:4" +fi +CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -Wl,-brtl -Wl,-bnortllib -lm -o $objfile" CCARGS="$args" diff --git a/configure b/configure index a3859d3916e..8bd1ea5127e 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 84584 . +# From configure.in Revision: 84674 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65 for python 3.2. # @@ -4929,6 +4929,10 @@ $as_echo "#define Py_ENABLE_SHARED 1" >>confdefs.h BLDLIBRARY='-L. -lpython$(VERSION)' RUNSHARED='DYLD_LIBRARY_PATH=`pwd`:${DYLD_LIBRARY_PATH}' ;; + AIX*) + LDLIBRARY='libpython$(VERSION).so' + RUNSHARED=LIBPATH=`pwd`:${LIBPATH} + ;; esac else # shared is disabled @@ -7484,7 +7488,7 @@ if test -z "$LDSHARED" then case $ac_sys_system/$ac_sys_release in AIX*) - BLDSHARED="\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:Modules/python.exp" + BLDSHARED="\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:Modules/python.exp -L\$(srcdir)" LDSHARED="\$(BINLIBDEST)/config/ld_so_aix \$(CC) -bI:\$(BINLIBDEST)/config/python.exp" ;; IRIX/5*) LDSHARED="ld -shared";; @@ -13756,6 +13760,8 @@ $as_echo "done" >&6; } # generate output files ac_config_files="$ac_config_files Makefile.pre Modules/Setup.config Misc/python.pc" +ac_config_files="$ac_config_files Modules/ld_so_aix" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -14448,6 +14454,7 @@ do "Makefile.pre") CONFIG_FILES="$CONFIG_FILES Makefile.pre" ;; "Modules/Setup.config") CONFIG_FILES="$CONFIG_FILES Modules/Setup.config" ;; "Misc/python.pc") CONFIG_FILES="$CONFIG_FILES Misc/python.pc" ;; + "Modules/ld_so_aix") CONFIG_FILES="$CONFIG_FILES Modules/ld_so_aix" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -14987,6 +14994,11 @@ $as_echo "$as_me: $ac_file is unchanged" >&6;} esac + + case $ac_file$ac_mode in + "Modules/ld_so_aix":F) chmod +x Modules/ld_so_aix ;; + + esac done # for ac_tag diff --git a/configure.in b/configure.in index 5caa5d76e09..b4672848aeb 100644 --- a/configure.in +++ b/configure.in @@ -766,6 +766,10 @@ if test $enable_shared = "yes"; then BLDLIBRARY='-L. -lpython$(VERSION)' RUNSHARED='DYLD_LIBRARY_PATH=`pwd`:${DYLD_LIBRARY_PATH}' ;; + AIX*) + LDLIBRARY='libpython$(VERSION).so' + RUNSHARED=LIBPATH=`pwd`:${LIBPATH} + ;; esac else # shared is disabled @@ -1665,7 +1669,7 @@ if test -z "$LDSHARED" then case $ac_sys_system/$ac_sys_release in AIX*) - BLDSHARED="\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:Modules/python.exp" + BLDSHARED="\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:Modules/python.exp -L\$(srcdir)" LDSHARED="\$(BINLIBDEST)/config/ld_so_aix \$(CC) -bI:\$(BINLIBDEST)/config/python.exp" ;; IRIX/5*) LDSHARED="ld -shared";; @@ -4247,6 +4251,7 @@ AC_MSG_RESULT(done) # generate output files AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc) +AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix]) AC_OUTPUT echo "creating Modules/Setup"