]> Savannah Git Hosting - gnulib.git/commitdiff
getprogname: correct the test for a __progname variable
authorJim Meyering <meyering@fb.com>
Sun, 2 Oct 2016 02:53:52 +0000 (19:53 -0700)
committerJim Meyering <meyering@fb.com>
Sun, 2 Oct 2016 02:58:57 +0000 (19:58 -0700)
* m4/getprogname.m4 (gl_FUNC_GETPROGNAME): Use AC_CACHE_CHECK
and AC_LINK_IFELSE to check for a global __progname.  If found,
define HAVE_VAR___PROGNAME.
* lib/getprogname.c (getprogname): Reflect the new name of the
preprocessor symbol: s/HAVE_DECL___PROGNAME/HAVE_VAR___PROGNAME/
Assaf Gordon reported that the erroneous prior check caused
link failure on AIX 7 in
https://lists.gnu.org/archive/html/grep-devel/2016-10/msg00001.html

ChangeLog
lib/getprogname.c
m4/getprogname.m4

index e9b4c80fee9193895f66f8f79c88646d0e2d4fad..7c848c46cccb236c809148e4464bff2e4d26bd5f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-10-01  Jim Meyering  <meyering@fb.com>
+
+       getprogname: correct the test for a __progname variable
+       * m4/getprogname.m4 (gl_FUNC_GETPROGNAME): Use AC_CACHE_CHECK
+       and AC_LINK_IFELSE to check for a global __progname.  If found,
+       define HAVE_VAR___PROGNAME.
+       * lib/getprogname.c (getprogname): Reflect the new name of the
+       feature- checked preprocessor symbol:
+       s/HAVE_DECL___PROGNAME/HAVE_VAR___PROGNAME/
+
 2016-09-28  Jim Meyering  <meyering@fb.com>
 
        u8-uctomb-aux.c: build: placate GCC 7's new -Wimplicit-fallthrough
index 7de231768f946ddedd4ea393fa5cb8fee54e617c..97a6aef943ef1617e687d889635236b0b4961c15 100644 (file)
@@ -47,7 +47,7 @@ getprogname (void)
 # elif HAVE_DECL___ARGV
   const char *p = __argv && __argv[0] ? __argv[0] : "?";
   return last_component (p);
-# elif HAVE_DECL___PROGNAME
+# elif HAVE_VAR___PROGNAME
   /* Be careful to declare this only when we absolutely need it
      (OpenBSD 5.1), rather than when it's available.  Otherwise,
      its mere declaration makes program_invocation_short_name
index ec3ac8fb21e954f843c35e084a6d0f41e1c310a1..f027037fc6ba8858af43e3d2ac70f474273e0a27 100644 (file)
@@ -5,14 +5,39 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
+# serial 4
 
 AC_DEFUN([gl_FUNC_GETPROGNAME],
 [
   AC_CHECK_FUNCS_ONCE([getprogname getexecname])
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-  AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
-  AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>])
-  AC_CHECK_DECLS([__argv], [], [], [#include <stdlib.h>])
-  AC_CHECK_DECLS([__progname], [], [], [char *__progname;])
+  ac_found=0
+  AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [],
+    [#include <errno.h>])
+  AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [],
+    [#include <errno.h>])
+  AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>])
+
+  # Incur the cost of this test only if none of the above worked.
+  if test $ac_found = 0; then
+    # On OpenBSD 5.1, using the global __progname variable appears to be
+    # the only way to implement getprogname.
+    AC_CACHE_CHECK([whether __progname is defined in default libraries],
+      [gl_cv_var___progname],
+      [
+        gl_cv_var___progname=
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+            [[extern char *__progname;]],
+            [[return *__progname;]]
+          )],
+          [gl_cv_var___progname=yes]
+        )
+      ]
+    )
+    if test "$gl_cv_var___progname" = yes; then
+      AC_DEFINE([HAVE_VAR___PROGNAME], 1,
+        [Define if you have a global __progname variable])
+    fi
+  fi
 ])