Files
MINGW-packages/mingw-w64-python3/0220-MINGW-default-sys.path-calculations-for-windows-plat.patch
Christoph Reiter 9757046077 python3: Update to 3.6.1 (#2587)
* python3: Update to 3.6.1

The patches starting with 16 are new to fix the build.
Some no longer relevant patches were dropped, the rest is just refreshed.

* Bump pkgrel of all packages containing Python 3 bytecode/extensions.

The package list was generated using:
    pkgfile.exe -R mingw64 -r "cpython.*\\.(py[cod]|dll)"

* lensfun: Add cmake to makedepends

* numpy: Don't hardcode the Python version

* blender: rebuild for new Python

* boost: Don't hardcode Python versions; rebuild

* pillow: Don't hardcode Python version; rebuild

* python-dateutil: Don't hardcode Python versions

* sip: Don't hardcode Python versions

* pyqt4: Don't hardcode Python versions; rebuild

* pyqt5: Don't hardcode Python versions; rebuild

* opencv: Update Python3 version in patch
2017-06-15 17:40:51 +03:00

228 lines
6.2 KiB
Diff

diff -Naur Python-3.5.2-orig/configure.ac Python-3.5.2/configure.ac
--- Python-3.5.2-orig/configure.ac 2016-07-12 14:20:53.877300700 +0300
+++ Python-3.5.2/configure.ac 2016-07-12 14:20:54.264800700 +0300
@@ -5252,8 +5252,21 @@
;;
esac
+dnl getpath module - default sys.path calculations
+AC_SUBST(MODULE_GETPATH)
+MODULE_GETPATH=Modules/getpath.o
+case $host in
+ *-*-mingw*)
+ dnl default sys.path calculations for windows platforms
+ MODULE_GETPATH=PC/getpathp.o
+ ;;
+esac
+
AC_SUBST(SRCDIRS)
SRCDIRS="Parser Grammar Objects Python Modules Mac Programs"
+case $host in
+ *-*-mingw*) SRCDIRS="$SRCDIRS PC";;
+esac
AC_MSG_CHECKING(for build directories)
for dir in $SRCDIRS; do
if test ! -d $dir; then
--- Python-3.6.1/Makefile.pre.in.orig 2017-03-21 07:32:38.000000000 +0100
+++ Python-3.6.1/Makefile.pre.in 2017-06-13 17:46:52.785265100 +0200
@@ -255,7 +255,7 @@
# Modules
MODULE_OBJS= \
Modules/config.o \
- Modules/getpath.o \
+ @MODULE_GETPATH@ \
Modules/main.o \
Modules/gcmodule.o
@@ -745,6 +745,7 @@
-DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
-o $@ $(srcdir)/Modules/getbuildinfo.c
+# default sys.path calculations for posix platforms
Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
$(CC) -c $(PY_CORE_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \
-DPREFIX='"$(prefix)"' \
@@ -753,6 +754,13 @@
-DVPATH='"$(VPATH)"' \
-o $@ $(srcdir)/Modules/getpath.c
+# default sys.path calculations for windows platforms
+PC/getpathp.o: $(srcdir)/PC/getpathp.c Makefile
+ $(CC) -c $(PY_CORE_CFLAGS) \
+ -DVERSION='"$(VERSION)"' \
+ -DSRCDIR='"$(srcdir)"' \
+ -o $@ $(srcdir)/PC/getpathp.c
+
Programs/python.o: $(srcdir)/Programs/python.c
$(MAINCC) -c $(PY_CORE_CFLAGS) -o $@ $(srcdir)/Programs/python.c
--- Python-3.6.1/PC/getpathp.c.orig 2017-03-21 07:32:38.000000000 +0100
+++ Python-3.6.1/PC/getpathp.c 2017-06-13 17:51:56.533638500 +0200
@@ -112,10 +112,26 @@
* with a semicolon separated path prior to calling Py_Initialize.
*/
+#ifndef PYTHONPATH
+# define PYTHONPATH L".\\DLLs;.\\lib"
+#endif
+
#ifndef LANDMARK
#define LANDMARK L"lib\\os.py"
#endif
+#ifdef __MINGW32__
+
+static wchar_t *lib_python = L"lib\\python" VERSION;
+
+# undef LANDMARK
+# define LANDMARK L"os.py"
+
+# define USE_POSIX_PREFIX
+
+#endif
+
+
static wchar_t prefix[MAXPATHLEN+1];
static wchar_t progpath[MAXPATHLEN+1];
static wchar_t dllpath[MAXPATHLEN+1];
@@ -241,6 +257,69 @@
}
}
+#ifdef USE_POSIX_PREFIX
+
+/* based on getpath.c but with paths relative to executable */
+/* search_for_prefix requires that path be no more than MAXPATHLEN
+ bytes long.
+ return: 1 if found; -1 if found build directory
+*/
+static int
+search_for_posix_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_prefix)
+{
+ size_t n;
+
+ /* If PYTHONHOME is set, we believe it unconditionally */
+ if (home) {
+ wchar_t *delim;
+ wcsncpy(prefix, home, MAXPATHLEN);
+ delim = wcschr(prefix, DELIM);
+ if (delim)
+ *delim = L'\0';
+ join(prefix, lib_python);
+ join(prefix, LANDMARK);
+ return 1;
+ }
+
+ /* Check to see if argv[0] is in the build directory */
+ wcscpy(prefix, argv0_path);
+ join(prefix, L"Modules\\Setup");
+ if (exists(prefix)) {
+ wchar_t *vpath;
+ /* Check source directory if argv0_path is in the build directory. */
+ vpath = Py_DecodeLocale(SRCDIR, NULL);
+ if (vpath != NULL) {
+ wcscpy(prefix, argv0_path);
+ join(prefix, vpath);
+ PyMem_Free(vpath);
+ join(prefix, L"Lib");
+ join(prefix, LANDMARK);
+ if (ismodule(prefix))
+ return -1;
+ }
+ }
+
+ /* Search from argv0_path, until root is found */
+ wcscpy(prefix, argv0_path);
+ do {
+ n = wcslen(prefix);
+ join(prefix, lib_python);
+ join(prefix, LANDMARK);
+ if (ismodule(prefix))
+ return 1;
+ prefix[n] = L'\0';
+ reduce(prefix);
+ } while (prefix[0]);
+
+ /* Configure prefix is unused */
+ (void)_prefix;
+
+ /* Fail */
+ return 0;
+}
+
+#endif /*def USE_POSIX_PREFIX */
+
/* gotlandmark only called by search_for_prefix, which ensures
'prefix' is null terminated in bounds. join() ensures
'landmark' can not overflow prefix if too long.
@@ -631,6 +710,9 @@
size_t bufsz;
wchar_t *pythonhome = Py_GetPythonHome();
wchar_t *envpath = NULL;
+#ifdef USE_POSIX_PREFIX
+ int pfound;
+#endif
int skiphome, skipdefault;
wchar_t *machinepath = NULL;
@@ -696,6 +778,16 @@
/* Calculate zip archive path from DLL or exe path */
change_ext(zip_path, dllpath[0] ? dllpath : progpath, L".zip");
+#ifdef USE_POSIX_PREFIX
+ pfound = search_for_posix_prefix(argv0_path, pythonhome, NULL);
+ if (!pfound) {
+ wcsncpy(prefix, argv0_path, MAXPATHLEN);
+ reduce(prefix);
+ join(prefix, lib_python);
+ }
+ else
+ reduce(prefix);
+#else
if (pythonhome == NULL || *pythonhome == '\0') {
if (zip_path[0] && exists(zip_path)) {
wcscpy_s(prefix, MAXPATHLEN+1, zip_path);
@@ -708,6 +800,7 @@
}
else
wcscpy_s(prefix, MAXPATHLEN+1, pythonhome);
+#endif
if (envpath && *envpath == '\0')
envpath = NULL;
@@ -748,6 +841,9 @@
}
else
bufsz = 0;
+#ifdef USE_POSIX_PREFIX
+ bufsz += wcslen(prefix) + 1;
+#endif
bufsz += wcslen(PYTHONPATH) + 1;
bufsz += wcslen(argv0_path) + 1;
if (userpath)
@@ -787,6 +883,11 @@
buf = wcschr(buf, L'\0');
*buf++ = DELIM;
}
+#ifdef USE_POSIX_PREFIX
+ wcscpy(buf, prefix);
+ buf = wcschr(buf, L'\0');
+ *buf++ = DELIM;
+#endif
if (userpath) {
if (wcscpy_s(buf, bufsz - (buf - module_search_path), userpath))
Py_FatalError("buffer overflow in getpathp.c's calculate_path()");
@@ -847,6 +948,12 @@
on the path, and that our 'prefix' directory is
the parent of that.
*/
+#ifdef USE_POSIX_PREFIX
+ if (pfound > 0) {
+ reduce(prefix);
+ reduce(prefix);
+ }
+#endif
if (*prefix==L'\0') {
wchar_t lookBuf[MAXPATHLEN+1];
wchar_t *look = buf - 1; /* 'buf' is at the end of the buffer */