[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])
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- argp: Don't break getprogname on non-glibc systems,
Bruno Haible <=