diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index aeb6b744dcc..5b3be6fbd64 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -753,7 +753,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 a0c977ae816..e878a2c1fb4 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -422,10 +422,10 @@ $(LIBRARY): $(LIBRARY_OBJS) libpython$(VERSION).so: $(LIBRARY_OBJS) if test $(INSTSONAME) != $(LDLIBRARY); then \ - $(LDSHARED) $(LDFLAGS) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ + $(BLDSHARED) $(LDFLAGS) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ $(LN) -f $(INSTSONAME) $@; \ else \ - $(LDSHARED) $(LDFLAGS) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ + $(BLDSHARED) $(LDFLAGS) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ fi libpython$(VERSION).dylib: $(LIBRARY_OBJS) @@ -1197,7 +1197,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 find $(srcdir) '(' -name '*.fdc' -o -name '*~' \ -o -name '[@,#]*' -o -name '*.old' \ diff --git a/Misc/NEWS b/Misc/NEWS index 13cec41ba7d..b65e8609324 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -302,6 +302,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 187009bacbe..254cae7cf19 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 84585 . +# From configure.in Revision: 84676 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65 for python 2.7. # @@ -4950,6 +4950,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 @@ -7531,7 +7535,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" ;; BeOS*) @@ -13753,6 +13757,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 @@ -14446,6 +14452,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 @@ -14985,6 +14992,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 2c0bf4f3f84..51cdaa5ea45 100644 --- a/configure.in +++ b/configure.in @@ -823,6 +823,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 @@ -1757,7 +1761,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" ;; BeOS*) @@ -4273,6 +4277,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"