| diff -Naur Python-3.8.0-orig/configure.ac Python-3.8.0/configure.ac |
| --- Python-3.8.0-orig/configure.ac 2019-10-22 10:02:29.123698700 +0300 |
| +++ Python-3.8.0/configure.ac 2019-10-22 10:02:56.595346900 +0300 |
| @@ -598,6 +598,65 @@ |
| AC_DEFINE(_INCLUDE__STDC_A1_SOURCE, 1, Define to include mbstate_t for mbrtowc) |
| fi |
| |
| +# On 'semi-native' build systems (MSYS*/Cygwin targeting MinGW-w64) |
| +# _sysconfigdata.py will contain paths that are correct only in the |
| +# build environment. This means external modules will fail to build |
| +# without setting up the same env and also that the build of Python |
| +# itself will fail as the paths are not correct for the host tools. |
| +# |
| +# Also, getpath.c uses GetModuleFileNameW (replacing \ with /) and |
| +# compares that with the define VPATH (passed in via command-line) |
| +# to determine whether it's the build- or the installed-Python. |
| +# |
| +# To work around these issues a set of _b2h variables are created: |
| +# VPATH_b2h, prefix_b2h, srcdir_b2h, abs_srcdir_b2h |
| +# and abs_builddir_b2h |
| +# .. where b2h stands for build to host. sysconfig.py replaces path |
| +# prefixes matching the non-b2h versions with the b2h equivalents. |
| +# |
| +# (note this assumes the host compilers are native and *not* cross |
| +# - in the 'semi-native' scenario only that is.) |
| + |
| +AC_DEFUN([ABS_PATH_HOST], |
| +[$1=$(cd $$2 && pwd) |
| + case $build_os in |
| + mingw*) |
| + case $host_os in |
| + mingw*) $1=$(cd $$2 && pwd -W) ;; |
| + *) ;; |
| + esac |
| + ;; |
| + cygwin*) |
| + case $host_os in |
| + mingw*) $1=$(cygpath -w -m $$2) ;; |
| + *) ;; |
| + esac |
| + ;; |
| + esac |
| +AC_SUBST([$1]) |
| +]) |
| + |
| +AC_MSG_CHECKING(absolute host location of VPATH) |
| +ABS_PATH_HOST([VPATH_b2h],[srcdir]) |
| +AC_MSG_RESULT([$VPATH_b2h]) |
| + |
| +AC_MSG_CHECKING(absolute host location of prefix) |
| +ABS_PATH_HOST([prefix_b2h],[prefix]) |
| +AC_MSG_RESULT([$prefix_b2h]) |
| + |
| +AC_MSG_CHECKING(absolute host location of srcdir) |
| +ABS_PATH_HOST([srcdir_b2h],[srcdir]) |
| +AC_MSG_RESULT([$srcdir_b2h]) |
| + |
| +AC_MSG_CHECKING(absolute host location of abs_srcdir) |
| +ABS_PATH_HOST([abs_srcdir_b2h],[srcdir]) |
| +AC_MSG_RESULT([$abs_srcdir_b2h]) |
| + |
| +my_builddir=. |
| +AC_MSG_CHECKING(Absolute host location of abs_builddir) |
| +ABS_PATH_HOST([abs_builddir_b2h],[my_builddir]) |
| +AC_MSG_RESULT([$abs_builddir_b2h]) |
| + |
| AC_MSG_CHECKING([for init system calls]) |
| AC_SUBST(INITSYS) |
| case $host in |
| diff -Naur Python-3.8.0-orig/Lib/sysconfig.py Python-3.8.0/Lib/sysconfig.py |
| --- Python-3.8.0-orig/Lib/sysconfig.py 2019-10-22 10:02:09.342863900 +0300 |
| +++ Python-3.8.0/Lib/sysconfig.py 2019-10-22 10:02:57.000947600 +0300 |
| @@ -329,6 +329,14 @@ |
| if isinstance(v, str): |
| done[k] = v.strip() |
| |
| + # any keys that have one with the same name suffixed with _b2h |
| + # need to be replaced with the value of the _b2h key. |
| + # This converts from MSYS*/Cygwin paths to Windows paths. |
| + for k, v in dict(done).items(): |
| + if isinstance(k, str): |
| + if k.endswith("_b2h"): |
| + done[k[:-4]]=v |
| + |
| # save the results in the global dictionary |
| vars.update(done) |
| return vars |
| diff -Naur Python-3.8.0-orig/Makefile.pre.in Python-3.8.0/Makefile.pre.in |
| --- Python-3.8.0-orig/Makefile.pre.in 2019-10-22 10:01:28.376191900 +0300 |
| +++ Python-3.8.0/Makefile.pre.in 2019-10-22 10:02:57.390948300 +0300 |
| @@ -137,6 +137,13 @@ |
| # Install prefix for data files |
| datarootdir= @datarootdir@ |
| |
| +# Locations needed for semi-native fixup of sysconfig. |
| +srcdir_b2h= @srcdir_b2h@ |
| +VPATH_b2h= @VPATH_b2h@ |
| +abs_srcdir_b2h= @abs_srcdir_b2h@ |
| +abs_builddir_b2h= @abs_builddir_b2h@ |
| +prefix_b2h= @prefix_b2h@ |
| + |
| # Expanded directories |
| BINDIR= @bindir@ |
| LIBDIR= @libdir@ |