changeset 11154:0895f142cac3 v8.0.0464

patch 8.0.0464: can't find executable name on Solaris and FreeBSD commit https://github.com/vim/vim/commit/f3757f0c87bbd52c7989c85dcbd21511bffcbdd6 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Mar 16 15:13:45 2017 +0100 patch 8.0.0464: can't find executable name on Solaris and FreeBSD Problem: Can't find executable name on Solaris and FreeBSD. Solution: Check for "/proc/self/path/a.out". (Danek Duvall) And for "/proc/curproc/file".
author Christian Brabandt <cb@256bit.org>
date Thu, 16 Mar 2017 15:15:05 +0100
parents 11200da8a321
children f32a834a52de
files src/auto/configure src/config.h.in src/configure.ac src/main.c src/version.c
diffstat 5 files changed, 37 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -10101,15 +10101,25 @@ fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /proc/self/exe" >&5
-$as_echo_n "checking for /proc/self/exe... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /proc link to executable" >&5
+$as_echo_n "checking for /proc link to executable... " >&6; }
 if test -L "/proc/self/exe"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    $as_echo "#define HAVE_PROC_SELF_EXE 1" >>confdefs.h
-
-else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: /proc/self/exe" >&5
+$as_echo "/proc/self/exe" >&6; }
+  $as_echo "#define PROC_EXE_LINK \"/proc/self/exe\"" >>confdefs.h
+
+elif test -L "/proc/self/path/a.out"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: /proc/self/path/a.out" >&5
+$as_echo "/proc/self/path/a.out" >&6; }
+  $as_echo "#define PROC_EXE_LINK \"/proc/self/path/a.out\"" >>confdefs.h
+
+elif test -L "/proc/curproc/file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: /proc/curproc/file" >&5
+$as_echo "/proc/curproc/file" >&6; }
+  $as_echo "#define PROC_EXE_LINK \"/proc/curproc/file\"" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -446,8 +446,8 @@
 /* Define if fcntl()'s F_SETFD command knows about FD_CLOEXEC */
 #undef HAVE_FD_CLOEXEC
 
-/* Define if /proc/self/exe can be read */
-#undef HAVE_PROC_SELF_EXE
+/* Define if /proc/self/exe or similar can be read */
+#undef PROC_EXE_LINK
 
 /* Define if you want Cygwin to use the WIN32 clipboard, not compatible with X11*/
 #undef FEAT_CYGWIN_WIN32_CLIPBOARD
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -3020,12 +3020,21 @@ dnl ------------------------------------
 dnl end of GUI-checking
 dnl ---------------------------------------------------------------------------
 
-AC_MSG_CHECKING([for /proc/self/exe])
+AC_MSG_CHECKING([for /proc link to executable])
 if test -L "/proc/self/exe"; then
-    AC_MSG_RESULT(yes)
-    AC_DEFINE(HAVE_PROC_SELF_EXE)
+  dnl Linux
+  AC_MSG_RESULT([/proc/self/exe])
+  AC_DEFINE(PROC_EXE_LINK, "/proc/self/exe")
+elif test -L "/proc/self/path/a.out"; then
+  dnl Solaris
+  AC_MSG_RESULT([/proc/self/path/a.out])
+  AC_DEFINE(PROC_EXE_LINK, "/proc/self/path/a.out")
+elif test -L "/proc/curproc/file"; then
+  dnl FreeBSD
+  AC_MSG_RESULT([/proc/curproc/file])
+  AC_DEFINE(PROC_EXE_LINK, "/proc/curproc/file")
 else
-    AC_MSG_RESULT(no)
+  AC_MSG_RESULT(no)
 fi
 
 dnl Check for Cygwin, which needs an extra source file if not using X11
--- a/src/main.c
+++ b/src/main.c
@@ -3539,11 +3539,11 @@ set_progpath(char_u *argv0)
 {
     char_u *val = argv0;
 
-# ifdef HAVE_PROC_SELF_EXE
+# ifdef PROC_EXE_LINK
     char    buf[PATH_MAX + 1];
     ssize_t len;
 
-    len = readlink("/proc/self/exe", buf, PATH_MAX);
+    len = readlink(PROC_EXE_LINK, buf, PATH_MAX);
     if (len > 0)
     {
 	buf[len] = NUL;
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    464,
+/**/
     463,
 /**/
     462,