bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

argp: Don't break getprogname on non-glibc systems


From: Bruno Haible
Subject: argp: Don't break getprogname on non-glibc systems
Date: Sun, 22 Nov 2020 22:32:22 +0100
User-agent: KMail/5.1.3 (Linux/4.4.0-193-generic; KDE/5.18.0; x86_64; ; )

In a testdir of all of gnulib, 'test-getprogname' crashes on Alpine Linux 3.12.
The cause is that the 'argp' module defines program_invocation_short_name as a
global variable, outside libc, and therefore libc cannot initialize it.

This patch fixes it.


2020-11-22  Bruno Haible  <bruno@clisp.org>

        argp: Don't break getprogname on non-glibc systems.
        * m4/argp.m4 (gl_ARGP): Don't expect <argp.h> to exist when testing for
        program_invocation_name and program_invocation_short_name.

diff --git a/m4/argp.m4 b/m4/argp.m4
index bfe2024..8b863e3 100644
--- a/m4/argp.m4
+++ b/m4/argp.m4
@@ -1,4 +1,4 @@
-# argp.m4 serial 15
+# argp.m4 serial 16
 dnl Copyright (C) 2003-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -10,34 +10,42 @@ AC_DEFUN([gl_ARGP],
   AC_REQUIRE([AC_C_RESTRICT])
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
 
-  AC_CHECK_DECLS([program_invocation_name], [],
-                 [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1],
-                            [Define to 1 to add extern declaration of 
program_invocation_name to argp.h])],
-                 [[#include <errno.h>]])
-  AC_CHECK_DECLS([program_invocation_short_name], [],
-                 [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1],
-                            [Define to 1 to add extern declaration of 
program_invocation_short_name to argp.h])],
-                 [[#include <errno.h>]])
+  AC_CHECK_DECLS([program_invocation_name],
+    [],
+    [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1],
+       [Define to 1 to add extern declaration of program_invocation_name to 
argp.h])],
+    [[#include <errno.h>]])
+  AC_CHECK_DECLS([program_invocation_short_name],
+    [],
+    [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1],
+       [Define to 1 to add extern declaration of program_invocation_short_name 
to argp.h])],
+    [[#include <errno.h>]])
 
   # Check if program_invocation_name and program_invocation_short_name
   # are defined elsewhere. It is improbable that only one of them will
   # be defined and other not, I prefer to stay on the safe side and to
   # test each one separately.
   AC_MSG_CHECKING([whether program_invocation_name is defined])
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <argp.h>]],
-                                  [[program_invocation_name = "test";]])],
-                 [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1],
-                            [Define if program_invocation_name is defined])
-                  AC_MSG_RESULT([yes])],
-                 [AC_MSG_RESULT([no])])
+  AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM(
+       [[extern char *program_invocation_name;]],
+       [[program_invocation_name = "test";]])],
+    [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1],
+       [Define if program_invocation_name is defined])
+     AC_MSG_RESULT([yes])
+    ],
+    [AC_MSG_RESULT([no])])
 
   AC_MSG_CHECKING([whether program_invocation_short_name is defined])
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <argp.h>]],
-                                  [[program_invocation_short_name = 
"test";]])],
-                 [AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1],
-                            [Define if program_invocation_short_name is 
defined])
-                  AC_MSG_RESULT([yes])],
-                 [AC_MSG_RESULT([no])])
+  AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM(
+       [[extern char *program_invocation_short_name;]],
+       [[program_invocation_short_name = "test";]])],
+    [AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1],
+       [Define if program_invocation_short_name is defined])
+     AC_MSG_RESULT([yes])
+    ],
+    [AC_MSG_RESULT([no])])
 
   AC_CHECK_DECLS_ONCE([clearerr_unlocked])
   AC_CHECK_DECLS_ONCE([feof_unlocked])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]