| diff -Naur Python-2.7.9-orig/configure.ac Python-2.7.9/configure.ac |
| --- Python-2.7.9-orig/configure.ac 2014-12-11 13:50:36.005000000 +0300 |
| +++ Python-2.7.9/configure.ac 2014-12-11 13:50:37.643000000 +0300 |
| @@ -4850,7 +4850,9 @@ |
| case $host in |
| *-*-mingw*) |
| dnl default sys.path calculations for windows platforms |
| - MODULE_GETPATH=PC/getpathp.o |
| + MODULE_GETPATH=Modules/getpath.o |
| + dnl "PC" is project sub-directory and we has to prepend user defined flags |
| + CPPFLAGS="-I\$(srcdir)/Python -I\$(srcdir)/PC $CPPFLAGS" |
| ;; |
| esac |
| |
| diff -Naur Python-2.7.9-orig/Modules/getpath.c Python-2.7.9/Modules/getpath.c |
| --- Python-2.7.9-orig/Modules/getpath.c 2014-12-11 13:50:36.005000000 +0300 |
| +++ Python-2.7.9/Modules/getpath.c 2014-12-11 13:50:37.643000000 +0300 |
| @@ -10,6 +10,10 @@ |
| #include <mach-o/dyld.h> |
| #endif |
| |
| +#ifdef MS_WINDOWS |
| +#include <windows.h> |
| +#endif |
| + |
| /* Search in some common locations for the associated Python libraries. |
| * |
| * Two directories must be found, the platform independent directory |
| @@ -127,7 +131,11 @@ |
| |
| static char prefix[MAXPATHLEN+1]; |
| static char exec_prefix[MAXPATHLEN+1]; |
| -static char progpath[MAXPATHLEN+1]; |
| +static char progpath[MAXPATHLEN+1] = {'\0'}; |
| +#ifdef MS_WINDOWS |
| +static char dllpath[MAXPATHLEN+1] = {'\0'}; |
| +extern HANDLE PyWin_DLLhModule; |
| +#endif |
| static char *module_search_path = NULL; |
| static char lib_python[] = "lib/python" VERSION; |
| |
| @@ -137,7 +145,7 @@ |
| size_t i = strlen(dir); |
| while (i > 0 && dir[i] != SEP) |
| --i; |
| - dir[i] = '\0'; |
| + dir[i] = 0; |
| } |
| |
| |
| @@ -208,7 +216,11 @@ |
| joinpath(char *buffer, char *stuff) |
| { |
| size_t n, k; |
| +#ifdef MS_WINDOWS |
| + if (stuff[0] == SEP || (stuff[0] != 0 && stuff[1] == ':')) |
| +#else |
| if (stuff[0] == SEP) |
| +#endif |
| n = 0; |
| else { |
| n = strlen(buffer); |
| @@ -229,7 +241,11 @@ |
| static void |
| copy_absolute(char *path, char *p) |
| { |
| +#ifdef MS_WINDOWS |
| + if (p[0] == SEP || (p[0] != 0 && p[1] == ':')) |
| +#else |
| if (p[0] == SEP) |
| +#endif |
| strcpy(path, p); |
| else { |
| if (!getcwd(path, MAXPATHLEN)) { |
| @@ -249,7 +265,11 @@ |
| { |
| char buffer[MAXPATHLEN + 1]; |
| |
| +#ifdef MS_WINDOWS |
| + if (path[0] == SEP || (path[0] != 0 && path[1] == ':')) |
| +#else |
| if (path[0] == SEP) |
| +#endif |
| return; |
| copy_absolute(buffer, path); |
| strcpy(path, buffer); |
| @@ -382,6 +402,35 @@ |
| } |
| |
| |
| +#ifdef MS_WINDOWS |
| +/* Calculates dllpath and progpath, replacing \\ with / */ |
| +int GetWindowsModulePaths() |
| +{ |
| + int result = 0; |
| + char* seps; |
| + result = GetModuleFileNameA(NULL, progpath, MAXPATHLEN); |
| + seps = strchr(progpath, '\\'); |
| + while(seps) { |
| + *seps = '/'; |
| + seps = strchr(seps, '\\'); |
| + } |
| + dllpath[0] = '\0'; |
| +#ifdef Py_ENABLE_SHARED |
| + if (PyWin_DLLhModule) { |
| + if((GetModuleFileNameA(PyWin_DLLhModule, dllpath, MAXPATHLEN) > 0)) { |
| + result = 1; |
| + seps = strchr(dllpath, '\\'); |
| + while(seps) { |
| + *seps = '/'; |
| + seps = strchr(seps, '\\'); |
| + } |
| + } |
| + } |
| +#endif |
| + return result; |
| +} |
| +#endif /* MS_WINDOWS */ |
| + |
| static void |
| calculate_path(void) |
| { |
| @@ -433,6 +482,10 @@ |
| else if(0 == _NSGetExecutablePath(progpath, &nsexeclength) && progpath[0] == SEP) |
| ; |
| #endif /* __APPLE__ */ |
| +#ifdef MS_WINDOWS |
| + else if(GetWindowsModulePaths()) { |
| + } |
| +#endif /* MS_WINDOWS */ |
| else if (path) { |
| while (1) { |
| char *delim = strchr(path, DELIM); |
| @@ -460,7 +513,11 @@ |
| } |
| else |
| progpath[0] = '\0'; |
| +#ifdef MS_WINDOWS |
| + if (progpath[0] != '\0' && progpath[0] != SEP && progpath[1] != ':') |
| +#else |
| if (progpath[0] != SEP && progpath[0] != '\0') |
| +#endif |
| absolutize(progpath); |
| strncpy(argv0_path, progpath, MAXPATHLEN); |
| argv0_path[MAXPATHLEN] = '\0'; |
| diff -Naur Python-2.7.9-orig/Modules/posixmodule.c Python-2.7.9/Modules/posixmodule.c |
| --- Python-2.7.9-orig/Modules/posixmodule.c 2014-12-11 13:49:43.323800000 +0300 |
| +++ Python-2.7.9/Modules/posixmodule.c 2014-12-11 13:50:37.643000000 +0300 |
| @@ -2324,7 +2324,7 @@ |
| Py_END_ALLOW_THREADS |
| /* FindNextFile sets error to ERROR_NO_MORE_FILES if |
| it got to the end of the directory. */ |
| - if (!result && GetLastError() != ERROR_NO_MORE_FILES) { |
| + if (!result && GetLastError() != 0 && GetLastError() != ERROR_NO_MORE_FILES) { |
| Py_DECREF(d); |
| win32_error_unicode("FindNextFileW", wnamebuf); |
| FindClose(hFindFile); |
| @@ -2392,7 +2392,7 @@ |
| Py_END_ALLOW_THREADS |
| /* FindNextFile sets error to ERROR_NO_MORE_FILES if |
| it got to the end of the directory. */ |
| - if (!result && GetLastError() != ERROR_NO_MORE_FILES) { |
| + if (!result && GetLastError() != 0 && GetLastError() != ERROR_NO_MORE_FILES) { |
| Py_DECREF(d); |
| win32_error("FindNextFile", namebuf); |
| FindClose(hFindFile); |