[Python-checkins] cpython (3.3): - Issue #15484: Fix _PYTHON_PROJECT_BASE for srcdir != builddir builds;

matthias.klose python-checkins at python.org
Fri Jan 25 14:36:02 CET 2013


http://hg.python.org/cpython/rev/b2e7c85399f5
changeset:   81714:b2e7c85399f5
branch:      3.3
parent:      81709:c97447e36665
user:        doko at python.org
date:        Fri Jan 25 14:33:33 2013 +0100
summary:
  - Issue #15484: Fix _PYTHON_PROJECT_BASE for srcdir != builddir builds;
  use _PYTHON_PROJECT_BASE in distutils/sysconfig.py.

files:
  Lib/distutils/sysconfig.py |  13 ++++++++-----
  Misc/NEWS                  |   3 +++
  configure                  |   2 +-
  configure.ac               |   2 +-
  4 files changed, 13 insertions(+), 7 deletions(-)


diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -24,7 +24,11 @@
 # Path to the base directory of the project. On Windows the binary may
 # live in project/PCBuild9.  If we're dealing with an x64 Windows build,
 # it'll live in project/PCbuild/amd64.
-project_base = os.path.dirname(os.path.abspath(sys.executable))
+# set for cross builds
+if "_PYTHON_PROJECT_BASE" in os.environ:
+    project_base = os.path.abspath(os.environ["_PYTHON_PROJECT_BASE"])
+else:
+    project_base = os.path.dirname(os.path.abspath(sys.executable))
 if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
     project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
 # PC/VS7.1
@@ -98,7 +102,7 @@
             # the build directory may not be the source directory, we
             # must use "srcdir" from the makefile to find the "Include"
             # directory.
-            base = _sys_home or os.path.dirname(os.path.abspath(sys.executable))
+            base = _sys_home or project_base
             if plat_specific:
                 return base
             if _sys_home:
@@ -251,8 +255,7 @@
 def get_makefile_filename():
     """Return full pathname of installed Makefile from the Python build."""
     if python_build:
-        return os.path.join(_sys_home or os.path.dirname(sys.executable),
-                                                         "Makefile")
+        return os.path.join(_sys_home or project_base, "Makefile")
     lib_dir = get_python_lib(plat_specific=0, standard_lib=1)
     config_file = 'config-{}{}'.format(get_python_version(), build_flags)
     return os.path.join(lib_dir, config_file, 'Makefile')
@@ -555,7 +558,7 @@
         # testing, for example, we might be running a non-installed python
         # from a different directory.
         if python_build and os.name == "posix":
-            base = os.path.dirname(os.path.abspath(sys.executable))
+            base = project_base
             if (not os.path.isabs(_config_vars['srcdir']) and
                 base != os.getcwd()):
                 # srcdir is relative and we are not in the same directory
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -533,6 +533,9 @@
 Build
 -----
 
+- Issue #15484: Fix _PYTHON_PROJECT_BASE for srcdir != builddir builds;
+  use _PYTHON_PROJECT_BASE in distutils/sysconfig.py.
+
 - Issue #17029: Let h2py search the multiarch system include directory.
 
 - Issue #16953: Fix socket module compilation on platforms with
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -2942,7 +2942,7 @@
 	fi
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $interp" >&5
 $as_echo "$interp" >&6; }
-	PYTHON_FOR_BUILD="_PYTHON_PROJECT_BASE=$srcdir"' _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(srcdir)/Lib:$(srcdir)/Lib/plat-$(MACHDEP) '$interp
+	PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/plat-$(MACHDEP) '$interp
     fi
 elif test "$cross_compiling" = maybe; then
     as_fn_error $? "Cross compiling required --host=HOST-TUPLE and --build=ARCH" "$LINENO" 5
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -65,7 +65,7 @@
 	    AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
 	fi
         AC_MSG_RESULT($interp)
-	PYTHON_FOR_BUILD="_PYTHON_PROJECT_BASE=$srcdir"' _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(srcdir)/Lib:$(srcdir)/Lib/plat-$(MACHDEP) '$interp
+	PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/plat-$(MACHDEP) '$interp
     fi
 elif test "$cross_compiling" = maybe; then
     AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list