From 162e38c6a312aa3e9c353419301087a4620c513c Mon Sep 17 00:00:00 2001
From: Guido van Rossum <guido@python.org>
Date: Wed, 19 Feb 2003 15:25:10 +0000
Subject: [PATCH] - sys.path[0] (the directory from which the script is loaded)
 is now   turned into an absolute pathname, unless it is the empty string.  
 (SF patch #664376, by Skip Montanaro.)

---
 Misc/NEWS          |  4 ++++
 Python/sysmodule.c | 12 ++++++++++--
 configure          |  5 +++--
 configure.in       |  2 +-
 pyconfig.h.in      |  3 +++
 5 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/Misc/NEWS b/Misc/NEWS
index 8671650bc5..7198541a2a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@ What's New in Python 2.3 alpha 2?
 Core and builtins
 -----------------
 
+- sys.path[0] (the directory from which the script is loaded) is now
+  turned into an absolute pathname, unless it is the empty string.
+  (SF patch #664376.)
+
 - Finally fixed the bug in compile() and exec where a string ending
   with an indented code block but no newline would raise SyntaxError.
   This would have been a four-line change in parsetok.c...  Except
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 765621ecdb..1f51f988f9 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -993,7 +993,9 @@ makeargvobject(int argc, char **argv)
 void
 PySys_SetArgv(int argc, char **argv)
 {
-#ifdef MS_WINDOWS
+#if defined(HAVE_REALPATH)
+	char fullpath[MAXPATHLEN];
+#elif defined(MS_WINDOWS)
 	char fullpath[MAX_PATH];
 #endif
 	PyObject *av = makeargvobject(argc, argv);
@@ -1059,8 +1061,14 @@ PySys_SetArgv(int argc, char **argv)
 			}
 		}
 #else /* All other filename syntaxes */
-		if (argc > 0 && argv0 != NULL)
+		if (argc > 0 && argv0 != NULL) {
+#if defined(HAVE_REALPATH)
+			if (realpath(argv0, fullpath)) {
+				argv0 = fullpath;
+			}
+#endif
 			p = strrchr(argv0, SEP);
+		}
 		if (p != NULL) {
 #ifndef RISCOS
 			n = p + 1 - argv0;
diff --git a/configure b/configure
index e0837f7a7a..1dfc8bc175 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 1.387 .
+# From configure.in Revision: 1.389 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.53 for python 2.3.
 #
@@ -12093,6 +12093,7 @@ echo "${ECHO_T}MACHDEP_OBJS" >&6
 
 
 
+
 
 
 for ac_func in alarm chown clock confstr ctermid execv \
@@ -12101,7 +12102,7 @@ for ac_func in alarm chown clock confstr ctermid execv \
  getpriority getpwent getwd \
  hstrerror inet_aton inet_pton kill killpg lchown lstat mkfifo mknod mktime \
  mremap nice pathconf pause plock poll pthread_init \
- putenv readlink \
+ putenv readlink realpath \
  select setegid seteuid setgid \
  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
  sigaction siginterrupt sigrelse strftime strptime \
diff --git a/configure.in b/configure.in
index 8fce1cd9be..0b893a5c36 100644
--- a/configure.in
+++ b/configure.in
@@ -1843,7 +1843,7 @@ AC_CHECK_FUNCS(alarm chown clock confstr ctermid execv \
  getpriority getpwent getwd \
  hstrerror inet_aton inet_pton kill killpg lchown lstat mkfifo mknod mktime \
  mremap nice pathconf pause plock poll pthread_init \
- putenv readlink \
+ putenv readlink realpath \
  select setegid seteuid setgid \
  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
  sigaction siginterrupt sigrelse strftime strptime \
diff --git a/pyconfig.h.in b/pyconfig.h.in
index c1697975bf..e2dd4d28ec 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -342,6 +342,9 @@
 /* Define to 1 if you have the `readlink' function. */
 #undef HAVE_READLINK
 
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
 /* Define if you have readline 2.2 */
 #undef HAVE_RL_COMPLETION_APPEND_CHARACTER
 
-- 
2.49.0