From 80f45a09985d8396209045db236eabb0f8f3bce4 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Fri, 10 Sep 2010 19:55:19 +0000 Subject: Merged revisions 84680 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ........ r84680 | antoine.pitrou | 2010-09-10 21:44:44 +0200 (ven., 10 sept. 2010) | 4 lines Issue #941346: Improve the build process under AIX and allow Python to be built as a shared library. Patch by Sébastien Sablé. ........ --- Lib/distutils/command/build_ext.py | 3 + Makefile.pre.in | 6 +- Misc/NEWS | 3 + Modules/ld_so_aix | 190 ------------------------------------ Modules/ld_so_aix.in | 194 +++++++++++++++++++++++++++++++++++++ configure | 16 ++- configure.in | 7 +- 7 files changed, 223 insertions(+), 196 deletions(-) delete mode 100755 Modules/ld_so_aix create mode 100644 Modules/ld_so_aix.in diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index bd61bc5..4e66464 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 c18bd0a..6c2f4d1 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -435,10 +435,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) @@ -1189,7 +1189,7 @@ clobber: clean profile-removal distclean: clobber -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 find $(srcdir) '(' -name '*.fdc' -o -name '*~' \ -o -name '[@,#]*' -o -name '*.old' \ -o -name '*.orig' -o -name '*.rej' \ diff --git a/Misc/NEWS b/Misc/NEWS index d0a31c1..d716e47 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -552,6 +552,9 @@ Extension Modules 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 deleted file mode 100755 index 6b83823..0000000 --- a/Modules/ld_so_aix +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/sh -# -# ======================================================================== -# FILE: ld_so_aix -# TYPE: executable, uses makexp_aix -# SYSTEM: AIX -# -# DESCRIPTION: Creates a shareable .o from a set of pre-compiled -# (unshared) .o files -# -# USAGE: ld_so_aix [CC] [arguments] -# -# ARGUMENTS: Same as for "ld". The following arguments are processed -# or supplied by this script (those marked with an asterisk -# can be overriden from command line): -# -# Argument Default value -# (*) -o [OutputFileName] -o shr.o -# (*) -e [EntryPointLabel] -e init[OutputBaseName] -# (*) -bE:[ExportFile] -bE:[OutputBaseName].exp -# (*) -bI:[ImportFile] -bI:./python.exp -# -bM:[ModuleType] -bM:SRE -# -bhalt:[Number] -bhalt:4 -# -T[Number] -T512 -# -H[Number] -H512 -# -lm -# -# The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) -# arguments will be automatically passed to "ld" according -# to the CC command provided as a first argument to this -# script. Usually, the same CC command was used to produce -# the pre-compiled .o file(s). -# -# NOTES: 1. Since "ld_so_aix" was originally written for building -# shared modules for the Python interpreter, the -e and -# -bI default values match Python's conventions. In -# Python, the entry point for a shared module is based -# on the module's name (e.g., the "mathmodule" will -# expect an entry point of "initmath"). -# 2. The script accepts multiple .o or .a input files and -# creates a single (shared) output file. The export list -# that is created is based on the output file's basename -# with the suffix ".exp". -# 3. The resulting shared object file is left in the -# current directory. -# 4. Uncommenting the "echo" lines gives detailed output -# about the commands executed in the script. -# -# -# HISTORY: Oct-1996 -- Support added for multiple .o files -- -# -- and optional arguments processing. -- -# Chris Myers (myers@tc.cornell.edu), Keith Kwok -# (kkwok@tc.cornell.edu) and Vladimir Marangozov -# -# Aug-6-1996 -- Take care of the compiler specific -- -# -- args by leaving CC to invoke "ld". -- -# Vladimir Marangozov -# -# Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- -# -- Use makexp_aix for the export list. -- -# Vladimir Marangozov (Vladimir.Marangozov@imag.fr) -# -# Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 -# ======================================================================== -# - -usage="Usage: ld_so_aix [CC command] [ld arguments]" -if test ! -n "$*"; then - echo $usage; exit 2 -fi - -makexp=`dirname $0`/makexp_aix - -# Check for existence of compiler. -CC=$1; shift -whichcc=`which $CC` - -if test ! -x "$whichcc"; then - echo "ld_so_aix: Compiler '$CC' not found; exiting." - exit 2 -fi - -if test ! -n "$*"; then - echo $usage; exit 2 -fi - -# Default import file for Python -# Can be overriden by providing a -bI: argument. -impfile="./python.exp" - -# Parse arguments -while test -n "$1" -do - case "$1" in - -e | -Wl,-e) - if test -z "$2"; then - echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 - else - shift; entry=$1 - fi - ;; - -e* | -Wl,-e*) - entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` - ;; - -o) - if test -z "$2"; then - echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 - else - shift; objfile=$1 - fi - ;; - -o*) - objfile=`echo $1 | sed "s/-o//"` - ;; - -bI:* | -Wl,-bI:*) - impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` - ;; - -bE:* | -Wl,-bE:*) - expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` - ;; - *.o | *.a) - objs="$objs $1" - args="$args $1" - ;; - -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) - ;; - *) - args="$args $1" - ;; - esac - shift -done - - -if test -z "$objs"; then - echo "ld_so_aix: No input files; exiting." - exit 2 -elif test ! -r "$impfile"; then - echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." - exit 2 -fi - -# If -o wasn't specified, assume "-o shr.o" -if test -z "$objfile"; then - objfile=shr.o -fi - -filename=`basename $objfile | sed "s/\.[^.]*$//"` - -# If -bE: wasn't specified, assume "-bE:$filename.exp" -if test -z "$expfile"; then - expfile="$filename.exp" -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.*//"` -fi - -#echo "ld_so_aix: Debug info section" -#echo " -> output file : $objfile" -#echo " -> import file : $impfile" -#echo " -> export file : $expfile" -#echo " -> entry point : $entry" -#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" - -CCARGS="$args" - -# Export list generation. -#echo $makexp $expfile "$objfile" $objs -$makexp $expfile "$objfile" $objs - -# Perform the link. -#echo $CC $CCOPT $CCARGS -$CC $CCOPT $CCARGS -retval=$? - -# Delete the module's export list file. -# Comment this line if you need it. -rm -f $expfile - -exit $retval diff --git a/Modules/ld_so_aix.in b/Modules/ld_so_aix.in new file mode 100644 index 0000000..0fd245b --- /dev/null +++ b/Modules/ld_so_aix.in @@ -0,0 +1,194 @@ +#!/bin/sh +# +# ======================================================================== +# FILE: ld_so_aix +# TYPE: executable, uses makexp_aix +# SYSTEM: AIX +# +# DESCRIPTION: Creates a shareable .o from a set of pre-compiled +# (unshared) .o files +# +# USAGE: ld_so_aix [CC] [arguments] +# +# ARGUMENTS: Same as for "ld". The following arguments are processed +# or supplied by this script (those marked with an asterisk +# can be overriden from command line): +# +# Argument Default value +# (*) -o [OutputFileName] -o shr.o +# (*) -e [EntryPointLabel] -e init[OutputBaseName] +# (*) -bE:[ExportFile] -bE:[OutputBaseName].exp +# (*) -bI:[ImportFile] -bI:./python.exp +# -bM:[ModuleType] -bM:SRE +# -bhalt:[Number] -bhalt:4 +# -T[Number] -T512 +# -H[Number] -H512 +# -lm +# +# The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) +# arguments will be automatically passed to "ld" according +# to the CC command provided as a first argument to this +# script. Usually, the same CC command was used to produce +# the pre-compiled .o file(s). +# +# NOTES: 1. Since "ld_so_aix" was originally written for building +# shared modules for the Python interpreter, the -e and +# -bI default values match Python's conventions. In +# Python, the entry point for a shared module is based +# on the module's name (e.g., the "mathmodule" will +# expect an entry point of "initmath"). +# 2. The script accepts multiple .o or .a input files and +# creates a single (shared) output file. The export list +# that is created is based on the output file's basename +# with the suffix ".exp". +# 3. The resulting shared object file is left in the +# current directory. +# 4. Uncommenting the "echo" lines gives detailed output +# about the commands executed in the script. +# +# +# HISTORY: Oct-1996 -- Support added for multiple .o files -- +# -- and optional arguments processing. -- +# Chris Myers (myers@tc.cornell.edu), Keith Kwok +# (kkwok@tc.cornell.edu) and Vladimir Marangozov +# +# Aug-6-1996 -- Take care of the compiler specific -- +# -- args by leaving CC to invoke "ld". -- +# Vladimir Marangozov +# +# Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- +# -- Use makexp_aix for the export list. -- +# Vladimir Marangozov (Vladimir.Marangozov@imag.fr) +# +# Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 +# ======================================================================== +# + +usage="Usage: ld_so_aix [CC command] [ld arguments]" +if test ! -n "$*"; then + echo $usage; exit 2 +fi + +makexp=`dirname $0`/makexp_aix + +# Check for existence of compiler. +CC=$1; shift +whichcc=`which $CC` + +if test ! -x "$whichcc"; then + echo "ld_so_aix: Compiler '$CC' not found; exiting." + exit 2 +fi + +if test ! -n "$*"; then + echo $usage; exit 2 +fi + +# Default import file for Python +# Can be overriden by providing a -bI: argument. +impfile="./python.exp" + +# Parse arguments +while test -n "$1" +do + case "$1" in + -e | -Wl,-e) + if test -z "$2"; then + echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 + else + shift; entry=$1 + fi + ;; + -e* | -Wl,-e*) + entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` + ;; + -o) + if test -z "$2"; then + echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 + else + shift; objfile=$1 + fi + ;; + -o*) + objfile=`echo $1 | sed "s/-o//"` + ;; + -bI:* | -Wl,-bI:*) + impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` + ;; + -bE:* | -Wl,-bE:*) + expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` + ;; + *.o | *.a) + objs="$objs $1" + args="$args $1" + ;; + -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) + ;; + *) + args="$args $1" + ;; + esac + 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" -a -z "$ldsocoremode"; then + echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." + exit 2 +fi + +# If -o wasn't specified, assume "-o shr.o" +if test -z "$objfile"; then + objfile=shr.o +fi + +filename=`basename $objfile | sed "s/\.[^.]*$//"` + +# If -bE: wasn't specified, assume "-bE:$filename.exp" +if test -z "$expfile"; then + expfile="$filename.exp" +fi + +# Default entry symbol for Python modules = init[modulename] +# Can be overriden by providing a -e argument. +if test -z "$entry"; then + entry=PyInit_`echo $filename | sed "s/module.*//"` +fi + +#echo "ld_so_aix: Debug info section" +#echo " -> output file : $objfile" +#echo " -> import file : $impfile" +#echo " -> export file : $expfile" +#echo " -> entry point : $entry" +#echo " -> object files: $objs" +#echo " -> CC arguments: $args" + +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" + +# Export list generation. +#echo $makexp $expfile "$objfile" $objs +$makexp $expfile "$objfile" $objs + +# Perform the link. +#echo $CC $CCOPT $CCARGS +$CC $CCOPT $CCARGS +retval=$? + +# Delete the module's export list file. +# Comment this line if you need it. +rm -f $expfile + +exit $retval diff --git a/configure b/configure index 7e6654d..7313145 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 84586 . +# From configure.in Revision: 84675 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65 for python 3.1. # @@ -4870,6 +4870,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 @@ -7472,7 +7476,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";; @@ -13380,6 +13384,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 @@ -14072,6 +14078,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 @@ -14611,6 +14618,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 3ccb66a..73ab4a4 100644 --- a/configure.in +++ b/configure.in @@ -748,6 +748,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 @@ -1723,7 +1727,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";; @@ -4106,6 +4110,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" -- cgit v0.12