]> granicus.if.org Git - python/commitdiff
Issue #21166: Prevent possible segfaults and other random failures of
authorNed Deily <nad@acm.org>
Fri, 22 Aug 2014 20:32:49 +0000 (13:32 -0700)
committerNed Deily <nad@acm.org>
Fri, 22 Aug 2014 20:32:49 +0000 (13:32 -0700)
python --generate-posix-vars in pybuilddir.txt build target by ensuring
that pybuilddir.txt is always regenerated when configure is run and
that the newly built skeleton python does not inadvertently import
modules from previously installed instances.

Makefile.pre.in
Misc/NEWS
configure
configure.ac

index 3b4e21edaea336ed6e3566f4e75c028595b964bc..c0f0c7b5a7ac097c4af427b9b4dd7351530b6571 100644 (file)
@@ -546,8 +546,18 @@ platform: $(BUILDPYTHON) pybuilddir.txt
 # Create build directory and generate the sysconfig build-time data there.
 # pybuilddir.txt contains the name of the build dir and is used for
 # sys.path fixup -- see Modules/getpath.c.
+# Since this step runs before shared modules are built, try to avoid bootstrap
+# problems by creating a dummy pybuildstr.txt just to allow interpreter
+# initialization to succeed.  It will be overwritten by generate-posix-vars
+# or removed in case of failure.
 pybuilddir.txt: $(BUILDPYTHON)
-       $(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars
+       @echo "none" > ./pybuilddir.txt
+       $(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars ;\
+       if test $$? -ne 0 ; then \
+               echo "generate-posix-vars failed" ; \
+               rm -f ./pybuilddir.txt ; \
+               exit 1 ; \
+       fi
 
 # Build the shared modules
 # Under GNU make, MAKEFLAGS are sorted and normalized; the 's' for
index 9396ac906f4db1b44d1fdbe81ece77411822af6a..97d42db153c9238b1c66e4b8c6b22cc7f90b4d75 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -242,6 +242,9 @@ Build
 
 - Issue #21811: Anticipated fixes to support OS X versions > 10.9.
 
+- Issue #21166: Prevent possible segfaults and other random failures of
+  python --generate-posix-vars in pybuilddir.txt build target.
+
 IDLE
 ----
 
index 73792038507c8112fd26decfb554f4ef71ecffe1..139d391d0c61f124158725809ec5f13fc01fb83d 100755 (executable)
--- a/configure
+++ b/configure
@@ -2950,6 +2950,9 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
 
+# pybuilddir.txt will be created by --generate-posix-vars in the Makefile
+rm -f pybuilddir.txt
+
 if test "$cross_compiling" = yes; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5
 $as_echo_n "checking for python interpreter for cross build... " >&6; }
index 418e16ffa5d517364a2782fbae712e34200b5cac..9698ea0221e38599f6159ebccd063e0df0af11d0 100644 (file)
@@ -53,6 +53,9 @@ AC_CANONICAL_HOST
 AC_SUBST(build)
 AC_SUBST(host)
 
+# pybuilddir.txt will be created by --generate-posix-vars in the Makefile
+rm -f pybuilddir.txt
+
 if test "$cross_compiling" = yes; then
     AC_MSG_CHECKING([for python interpreter for cross build])
     if test -z "$PYTHON_FOR_BUILD"; then