NON-WORKING python with an older version of the MinGW patch.
[fedora-mingw.git] / python / python-2.4.1-canonicalize.patch
diff --git a/python/python-2.4.1-canonicalize.patch b/python/python-2.4.1-canonicalize.patch
new file mode 100644 (file)
index 0000000..4127359
--- /dev/null
@@ -0,0 +1,121 @@
+--- Python-2.4.1/pyconfig.h.in.canonicalize    2004-10-13 11:30:55.000000000 -0400
++++ Python-2.4.1/pyconfig.h.in 2005-10-06 14:04:06.000000000 -0400
+@@ -58,6 +58,9 @@
+ /* Define if pthread_sigmask() does not work on your system. */
+ #undef HAVE_BROKEN_PTHREAD_SIGMASK
++/* Define to 1 if you have the `canonicalize_file_name' function. */
++#undef HAVE_CANONICALIZE_FILE_NAME
++
+ /* Define to 1 if you have the `chown' function. */
+ #undef HAVE_CHOWN
+--- Python-2.4.1/Python/sysmodule.c.canonicalize       2005-01-27 13:58:30.000000000 -0500
++++ Python-2.4.1/Python/sysmodule.c    2005-10-06 14:56:37.000000000 -0400
+@@ -1168,11 +1168,13 @@
+ void
+ PySys_SetArgv(int argc, char **argv)
+ {
++#ifndef HAVE_CANONICALIZE_FILE_NAME
+ #if defined(HAVE_REALPATH)
+       char fullpath[MAXPATHLEN];
+ #elif defined(MS_WINDOWS)
+       char fullpath[MAX_PATH];
+ #endif
++#endif
+       PyObject *av = makeargvobject(argc, argv);
+       PyObject *path = PySys_GetObject("path");
+       if (av == NULL)
+@@ -1184,6 +1186,64 @@
+               char *p = NULL;
+               int n = 0;
+               PyObject *a;
++#ifdef HAVE_CANONICALIZE_FILE_NAME
++              char *link = NULL, *argv0copy = NULL;
++                
++                if (argc > 0 && argv0 != NULL) {
++                      
++                      link = canonicalize_file_name(argv0);
++                      if (link == NULL) {
++                              link = strdup(argv0);
++                              if (!link)
++                                      Py_FatalError("no mem for sys.argv");
++                      }
++              }
++              if (link) {
++                      if (link[0] == SEP) /* Link to absolute path */
++                              argv0 = link;
++                      else if (strchr(link, SEP) == NULL) {
++                              /* Link without path */
++                              /* strdup argv0 so we can free it 
++                                 unconditionally */
++                              argv0 = strdup(argv0);
++                              if (!argv0)
++                                      Py_FatalError("no mem for sys.argv");
++                              free(link);
++                      } else {
++                              /* Must join(dirname(argv0), link) */
++                              char *q = strrchr(argv0, SEP);
++                              if (q == NULL) /* argv0 without path */
++                                      argv0 = link;
++                              else {
++                                      /* Must make a copy */
++                                      argv0copy = calloc(
++                                                strlen(link) + strlen(q) +1,
++                                                sizeof (char));
++                                      if (!argv0copy)
++                                              Py_FatalError("no mem for sys.argv");
++                                      strcpy(argv0copy, argv0);
++                                      q = strrchr(argv0copy, SEP);
++                                      strcpy(argv0copy+1, link);
++                                      argv0 = argv0copy;
++                                      p = NULL;
++                                      free(link);
++                              }
++                      }
++              }
++              if (argc > 0 && argv0 != NULL) {
++                      char *q;
++                      p = strrchr(argv0, SEP);
++                      /* Test for alternate separator */
++                      q = strrchr(p ? p : argv0, '/');
++                      if (q != NULL)
++                              p = q;
++                      if (p != NULL) {
++                              n = p + 1 - argv0;
++                              if (n > 1 && p[-1] != ':')
++                                      n--; /* Drop trailing separator */
++                      }
++              }
++#else /* ! HAVE_CANONICALIZE_FILE_NAME */
+ #ifdef HAVE_READLINK
+               char link[MAXPATHLEN+1];
+               char argv0copy[2*MAXPATHLEN+1];
+@@ -1256,9 +1316,14 @@
+ #endif /* Unix */
+               }
+ #endif /* All others */
++#endif /* ! HAVE_CANONICALIZE_FILE_NAME */
+               a = PyString_FromStringAndSize(argv0, n);
+               if (a == NULL)
+                       Py_FatalError("no mem for sys.path insertion");
++#ifdef HAVE_CANONICALIZE_FILE_NAME
++              if (argc > 0 && argv0 != NULL)
++                      free(argv0);
++#endif /* HAVE_CANONICALIZE_FILE_NAME */
+               if (PyList_Insert(path, 0, a) < 0)
+                       Py_FatalError("sys.path.insert(0) failed");
+               Py_DECREF(a);
+--- Python-2.4.1/configure.in.canonicalize     2005-03-28 18:23:34.000000000 -0500
++++ Python-2.4.1/configure.in  2005-10-06 14:04:06.000000000 -0400
+@@ -2096,8 +2096,8 @@
+ AC_MSG_RESULT(MACHDEP_OBJS)
+ # checks for library functions
+-AC_CHECK_FUNCS(alarm bind_textdomain_codeset chown clock confstr ctermid \
+- execv fork fpathconf ftime ftruncate \
++AC_CHECK_FUNCS(alarm bind_textdomain_codeset canonicalize_file_name chown \
++ clock confstr ctermid execv fork fpathconf ftime ftruncate \
+  gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
+  getpriority getpwent getsid getwd \
+  kill killpg lchown lstat mkfifo mknod mktime \