blob: 6e7358aab865978ed9a7a8187fa4dc4d6d69350c [file] [log] [blame]
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);