]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-19521: Fix parallel build race condition on AIX (GH-21997)
authorStefan Krah <skrah@bytereef.org>
Sat, 29 Aug 2020 15:00:08 +0000 (17:00 +0200)
committerGitHub <noreply@github.com>
Sat, 29 Aug 2020 15:00:08 +0000 (17:00 +0200)
    Patch by Michael Haubenwallner.

Makefile.pre.in
configure
configure.ac

index 0a19313ea9939711e0045dedfe0abf2b2b484fcb..5d3ac705a36253ea64b24fc0dfbb7909cdb2a59e 100644 (file)
@@ -161,6 +161,10 @@ BLDSHARED= @BLDSHARED@ $(PY_CORE_LDFLAGS)
 LDCXXSHARED=   @LDCXXSHARED@
 DESTSHARED=    $(BINLIBDEST)/lib-dynload
 
+# List of exported symbols for AIX
+EXPORTSYMS=    @EXPORTSYMS@
+EXPORTSFROM=   @EXPORTSFROM@
+
 # Executable suffix (.exe on Windows and Mac OS X)
 EXE=           @EXEEXT@
 BUILDEXE=      @BUILDEXEEXT@
@@ -571,7 +575,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
        $(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
 
 # Build the interpreter
-$(BUILDPYTHON):        Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
+$(BUILDPYTHON):        Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
        $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
 
 platform: $(BUILDPYTHON) pybuilddir.txt
@@ -643,6 +647,10 @@ libpython$(LDVERSION).dylib: $(LIBRARY_OBJS)
 libpython$(VERSION).sl: $(LIBRARY_OBJS)
        $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM)
 
+# List of exported symbols for AIX
+Modules/python.exp: $(LIBRARY)
+       $(srcdir)/Modules/makexp_aix $@ "$(EXPORTSFROM)" $?
+
 # Copy up the gdb python hooks into a position where they can be automatically
 # loaded by gdb during Lib/test/test_gdb.py
 #
@@ -702,7 +710,7 @@ Makefile Modules/config.c: Makefile.pre \
        @echo "The Makefile was updated, you may need to re-run make."
 
 
-Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
+Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
        $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
 
 ############################################################################
index 69e975a4e8ef3cba215aa8767b95ee2a185ca1f0..4c18ae7e364ca1a641309b574d22cb71b5d13eec 100755 (executable)
--- a/configure
+++ b/configure
@@ -700,6 +700,8 @@ ARFLAGS
 ac_ct_AR
 AR
 GNULD
+EXPORTSFROM
+EXPORTSYMS
 LINKCC
 LDVERSION
 RUNSHARED
@@ -5799,8 +5801,6 @@ LDVERSION="$VERSION"
 # If CXX is set, and if it is needed to link a main function that was
 # compiled with CXX, LINKCC is CXX instead. Always using CXX is undesirable:
 # python might then depend on the C++ runtime
-# This is altered for AIX in order to build the export list before
-# linking.
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking LINKCC" >&5
 $as_echo_n "checking LINKCC... " >&6; }
@@ -5808,13 +5808,6 @@ if test -z "$LINKCC"
 then
        LINKCC='$(PURIFY) $(MAINCC)'
        case $ac_sys_system in
-       AIX*)
-          exp_extra="\"\""
-          if test $ac_sys_release -ge 5 -o \
-                  $ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
-              exp_extra="."
-          fi
-          LINKCC="\$(srcdir)/Modules/makexp_aix Modules/python.exp $exp_extra \$(LIBRARY); $LINKCC";;
        QNX*)
           # qcc must be used because the other compilers do not
           # support -N.
@@ -5824,6 +5817,26 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINKCC" >&5
 $as_echo "$LINKCC" >&6; }
 
+# EXPORTSYMS holds the list of exported symbols for AIX.
+# EXPORTSFROM holds the module name exporting symbols on AIX.
+EXPORTSYMS=
+EXPORTSFROM=
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking EXPORTSYMS" >&5
+$as_echo_n "checking EXPORTSYMS... " >&6; }
+case $ac_sys_system in
+AIX*)
+       EXPORTSYMS="Modules/python.exp"
+       if test $ac_sys_release -ge 5 -o \
+               $ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
+           EXPORTSFROM=. # the main executable
+       fi
+       ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPORTSYMS" >&5
+$as_echo "$EXPORTSYMS" >&6; }
+
 # GNULD is set to "yes" if the GNU linker is used.  If this goes wrong
 # make sure we default having it set to "no": this is used by
 # distutils.unixccompiler to know if it should add --enable-new-dtags
index 07c0585432b0654dfe093967fcdf0a44e0433617..3b40f39124dad507c17aba12e300a457bcd3c580 100644 (file)
@@ -1024,21 +1024,12 @@ LDVERSION="$VERSION"
 # If CXX is set, and if it is needed to link a main function that was
 # compiled with CXX, LINKCC is CXX instead. Always using CXX is undesirable:
 # python might then depend on the C++ runtime
-# This is altered for AIX in order to build the export list before
-# linking.
 AC_SUBST(LINKCC)
 AC_MSG_CHECKING(LINKCC)
 if test -z "$LINKCC"
 then
        LINKCC='$(PURIFY) $(MAINCC)'
        case $ac_sys_system in
-       AIX*)
-          exp_extra="\"\""
-          if test $ac_sys_release -ge 5 -o \
-                  $ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
-              exp_extra="."
-          fi
-          LINKCC="\$(srcdir)/Modules/makexp_aix Modules/python.exp $exp_extra \$(LIBRARY); $LINKCC";;
        QNX*)
           # qcc must be used because the other compilers do not
           # support -N.
@@ -1047,6 +1038,24 @@ then
 fi
 AC_MSG_RESULT($LINKCC)
 
+# EXPORTSYMS holds the list of exported symbols for AIX.
+# EXPORTSFROM holds the module name exporting symbols on AIX.
+EXPORTSYMS=
+EXPORTSFROM=
+AC_SUBST(EXPORTSYMS)
+AC_SUBST(EXPORTSFROM)
+AC_MSG_CHECKING(EXPORTSYMS)
+case $ac_sys_system in
+AIX*)
+       EXPORTSYMS="Modules/python.exp"
+       if test $ac_sys_release -ge 5 -o \
+               $ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
+           EXPORTSFROM=. # the main executable
+       fi
+       ;;
+esac
+AC_MSG_RESULT($EXPORTSYMS)
+
 # GNULD is set to "yes" if the GNU linker is used.  If this goes wrong
 # make sure we default having it set to "no": this is used by
 # distutils.unixccompiler to know if it should add --enable-new-dtags