Although most of the .h files now require <config.h>, it is useful if the .h files generated from .in.h files don't use HAVE_* C macros, except for the mass of HAVE_RAW_DECL_* macros, which are only used by the 'posixcheck' module.
Namely, the advantage is in analysis of problem reports: If in a generated .h file, we have '#if 0' or '#if 1', it is more immediate than if we have '#if HAVE_FOO' and have to look, via '$CC -E', what the value of HAVE_FOO has been. Also, a potential '#undef HAVE_FOO' will no longer cause trouble. I found a couple of such HAVE_* uses: lib/se-selinux.in.h:22:#if HAVE_SELINUX_SELINUX_H lib/stdlib.in.h:468:# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME lib/stdlib.in.h:476:# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME lib/utmp.in.h:45:# if HAVE_UTIL_H /* macOS, NetBSD, OpenBSD, Minix */ lib/utmp.in.h:47:# elif HAVE_LIBUTIL_H /* FreeBSD, Haiku */ lib/utmp.in.h:49:# elif HAVE_TERMIOS_H /* Solaris */ These patches fix them. 2023-04-13 Bruno Haible <br...@clisp.org> utmp: Avoid using HAVE_* macros in *.in.h files. * m4/pty_h.m4 (gl_PTY_CHECK_UTIL_H): New macro, extracted from gl_PTY_H. (gl_PTY_H): Invoke it. * m4/utmp_h.m4 (gl_UTMP_H): Invoke gl_PTY_CHECK_UTIL_H and set HAVE_TERMIOS_H. (gl_UTMP_H_DEFAULTS): Require gl_PTY_H_DEFAULTS, gl_TERMIOS_H_DEFAULTS. * modules/utmp (Files): Add m4/pty_h.m4, m4/termios_h.m4. (Makefile.am): Substitute also HAVE_UTIL_H, HAVE_LIBUTIL_H, HAVE_TERMIOS_H. * lib/utmp.in.h: Test HAVE_UTIL_H, HAVE_LIBUTIL_H, HAVE_TERMIOS_H as Autoconf variables. 2023-04-13 Bruno Haible <br...@clisp.org> getprogname: Avoid using HAVE_* macros in *.in.h files. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_DECL_PROGRAM_INVOCATION_NAME. * m4/getprogname.m4 (gl_FUNC_GETPROGNAME): Require gl_STDLIB_H_DEFAULTS and gl_USE_SYSTEM_EXTENSIONS. Set HAVE_DECL_PROGRAM_INVOCATION_NAME. * modules/stdlib (Makefile.am): Substitute HAVE_DECL_PROGRAM_INVOCATION_NAME. * lib/stdlib.in.h (getprogname): Test HAVE_DECL_PROGRAM_INVOCATION_NAME as an Autoconf variable. 2023-04-13 Bruno Haible <br...@clisp.org> selinux-h: Avoid using HAVE_* macros in *.in.h files. * m4/selinux-selinux-h.m4 (gl_HEADERS_SELINUX_SELINUX_H): Initialize HAVE_SELINUX_SELINUX_H. * modules/selinux-h (Makefile.am): Substitute HAVE_SELINUX_SELINUX_H. * lib/se-selinux.in.h: Test HAVE_SELINUX_SELINUX_H as an Autoconf variable.
>From c5a9b3eaf8d48c19bf39fbcc7bf0d930d988efed Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Thu, 13 Apr 2023 21:12:45 +0200 Subject: [PATCH 1/3] selinux-h: Avoid using HAVE_* macros in *.in.h files. * m4/selinux-selinux-h.m4 (gl_HEADERS_SELINUX_SELINUX_H): Initialize HAVE_SELINUX_SELINUX_H. * modules/selinux-h (Makefile.am): Substitute HAVE_SELINUX_SELINUX_H. * lib/se-selinux.in.h: Test HAVE_SELINUX_SELINUX_H as an Autoconf variable. --- ChangeLog | 9 +++++++++ lib/se-selinux.in.h | 2 +- m4/selinux-selinux-h.m4 | 9 ++++++++- modules/selinux-h | 1 + 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 494ca0f227..87de925f86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2023-04-13 Bruno Haible <br...@clisp.org> + + selinux-h: Avoid using HAVE_* macros in *.in.h files. + * m4/selinux-selinux-h.m4 (gl_HEADERS_SELINUX_SELINUX_H): Initialize + HAVE_SELINUX_SELINUX_H. + * modules/selinux-h (Makefile.am): Substitute HAVE_SELINUX_SELINUX_H. + * lib/se-selinux.in.h: Test HAVE_SELINUX_SELINUX_H as an Autoconf + variable. + 2023-04-13 Bruno Haible <br...@clisp.org> ialloc, gethrxtime: Restore GCC diagnostics options. diff --git a/lib/se-selinux.in.h b/lib/se-selinux.in.h index 5ec13dde73..0296ccdd36 100644 --- a/lib/se-selinux.in.h +++ b/lib/se-selinux.in.h @@ -19,7 +19,7 @@ #endif @PRAGMA_COLUMNS@ -#if HAVE_SELINUX_SELINUX_H +#if @HAVE_SELINUX_SELINUX_H@ #@INCLUDE_NEXT@ @NEXT_SELINUX_SELINUX_H@ diff --git a/m4/selinux-selinux-h.m4 b/m4/selinux-selinux-h.m4 index f69eb3c375..7028248c71 100644 --- a/m4/selinux-selinux-h.m4 +++ b/m4/selinux-selinux-h.m4 @@ -1,4 +1,4 @@ -# serial 5 -*- Autoconf -*- +# serial 6 -*- Autoconf -*- # Copyright (C) 2006-2007, 2009-2023 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,6 +15,13 @@ AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H] if test "$with_selinux" != no; then AC_CHECK_HEADERS([selinux/selinux.h]) + if test $ac_cv_header_selinux_selinux_h = yes; then + HAVE_SELINUX_SELINUX_H=1 + else + HAVE_SELINUX_SELINUX_H=0 + fi + AC_SUBST([HAVE_SELINUX_SELINUX_H]) + if test "$ac_cv_header_selinux_selinux_h" = yes; then # We do have <selinux/selinux.h>, so do compile getfilecon.c # and arrange to use its wrappers. diff --git a/modules/selinux-h b/modules/selinux-h index 041b0663d5..d4e89cc4fc 100644 --- a/modules/selinux-h +++ b/modules/selinux-h @@ -34,6 +34,7 @@ selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/selinux' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ + -e 's/@''HAVE_SELINUX_SELINUX_H''@/$(HAVE_SELINUX_SELINUX_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -- 2.34.1
>From a194861e540c2e278c716022f4ca4103710d1d8f Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Thu, 13 Apr 2023 21:25:59 +0200 Subject: [PATCH 2/3] getprogname: Avoid using HAVE_* macros in *.in.h files. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_DECL_PROGRAM_INVOCATION_NAME. * m4/getprogname.m4 (gl_FUNC_GETPROGNAME): Require gl_STDLIB_H_DEFAULTS and gl_USE_SYSTEM_EXTENSIONS. Set HAVE_DECL_PROGRAM_INVOCATION_NAME. * modules/stdlib (Makefile.am): Substitute HAVE_DECL_PROGRAM_INVOCATION_NAME. * lib/stdlib.in.h (getprogname): Test HAVE_DECL_PROGRAM_INVOCATION_NAME as an Autoconf variable. --- ChangeLog | 12 ++++++++++++ lib/stdlib.in.h | 4 ++-- m4/getprogname.m4 | 8 +++++++- m4/stdlib_h.m4 | 3 ++- modules/stdlib | 1 + 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87de925f86..5e1fab0cfc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2023-04-13 Bruno Haible <br...@clisp.org> + + getprogname: Avoid using HAVE_* macros in *.in.h files. + * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize + HAVE_DECL_PROGRAM_INVOCATION_NAME. + * m4/getprogname.m4 (gl_FUNC_GETPROGNAME): Require gl_STDLIB_H_DEFAULTS + and gl_USE_SYSTEM_EXTENSIONS. Set HAVE_DECL_PROGRAM_INVOCATION_NAME. + * modules/stdlib (Makefile.am): Substitute + HAVE_DECL_PROGRAM_INVOCATION_NAME. + * lib/stdlib.in.h (getprogname): Test HAVE_DECL_PROGRAM_INVOCATION_NAME + as an Autoconf variable. + 2023-04-13 Bruno Haible <br...@clisp.org> selinux-h: Avoid using HAVE_* macros in *.in.h files. diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index da827a5c7b..2b3307d39e 100644 --- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -465,7 +465,7 @@ _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " # undef getprogname # define getprogname rpl_getprogname # endif -# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME +# if @HAVE_DECL_PROGRAM_INVOCATION_NAME@ _GL_FUNCDECL_RPL (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE); # else _GL_FUNCDECL_RPL (getprogname, const char *, (void)); @@ -473,7 +473,7 @@ _GL_FUNCDECL_RPL (getprogname, const char *, (void)); _GL_CXXALIAS_RPL (getprogname, const char *, (void)); # else # if !@HAVE_GETPROGNAME@ -# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME +# if @HAVE_DECL_PROGRAM_INVOCATION_NAME@ _GL_FUNCDECL_SYS (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE); # else _GL_FUNCDECL_SYS (getprogname, const char *, (void)); diff --git a/m4/getprogname.m4 b/m4/getprogname.m4 index b8636e143a..2b741f5083 100644 --- a/m4/getprogname.m4 +++ b/m4/getprogname.m4 @@ -5,10 +5,12 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 8 AC_DEFUN([gl_FUNC_GETPROGNAME], [ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_FUNCS_ANDROID([getprogname], [[#include <stdlib.h>]]) if test $ac_cv_func_getprogname = no; then HAVE_GETPROGNAME=0 @@ -16,6 +18,10 @@ AC_DEFUN([gl_FUNC_GETPROGNAME] future*) REPLACE_GETPROGNAME=1 ;; esac fi + AC_CHECK_DECLS([program_invocation_name], + [], + [HAVE_DECL_PROGRAM_INVOCATION_NAME=0], + [[#include <errno.h>]]) ]) AC_DEFUN([gl_PREREQ_GETPROGNAME], diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4 index cef133e051..3274ea4948 100644 --- a/m4/stdlib_h.m4 +++ b/m4/stdlib_h.m4 @@ -1,4 +1,4 @@ -# stdlib_h.m4 serial 73 +# stdlib_h.m4 serial 74 dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -175,6 +175,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS] HAVE_DECL_FCVT=1; AC_SUBST([HAVE_DECL_FCVT]) HAVE_DECL_GCVT=1; AC_SUBST([HAVE_DECL_GCVT]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) + HAVE_DECL_PROGRAM_INVOCATION_NAME=1; AC_SUBST([HAVE_DECL_PROGRAM_INVOCATION_NAME]) HAVE_GETPROGNAME=1; AC_SUBST([HAVE_GETPROGNAME]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) diff --git a/modules/stdlib b/modules/stdlib index b357d385e0..89f5a0ad2f 100644 --- a/modules/stdlib +++ b/modules/stdlib @@ -95,6 +95,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_DECL_PROGRAM_INVOCATION_NAME''@|$(HAVE_DECL_PROGRAM_INVOCATION_NAME)|g' \ -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -- 2.34.1
>From ffb4ed843f5a18175bc07ef190b9db700c3b5eba Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Thu, 13 Apr 2023 21:43:51 +0200 Subject: [PATCH 3/3] utmp: Avoid using HAVE_* macros in *.in.h files. * m4/pty_h.m4 (gl_PTY_CHECK_UTIL_H): New macro, extracted from gl_PTY_H. (gl_PTY_H): Invoke it. * m4/utmp_h.m4 (gl_UTMP_H): Invoke gl_PTY_CHECK_UTIL_H and set HAVE_TERMIOS_H. (gl_UTMP_H_DEFAULTS): Require gl_PTY_H_DEFAULTS, gl_TERMIOS_H_DEFAULTS. * modules/utmp (Files): Add m4/pty_h.m4, m4/termios_h.m4. (Makefile.am): Substitute also HAVE_UTIL_H, HAVE_LIBUTIL_H, HAVE_TERMIOS_H. * lib/utmp.in.h: Test HAVE_UTIL_H, HAVE_LIBUTIL_H, HAVE_TERMIOS_H as Autoconf variables. --- ChangeLog | 14 ++++++++++++++ lib/utmp.in.h | 6 +++--- m4/pty_h.m4 | 23 +++++++++++++++-------- m4/utmp_h.m4 | 13 ++++++++++++- modules/utmp | 5 +++++ 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e1fab0cfc..eb270cf699 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2023-04-13 Bruno Haible <br...@clisp.org> + + utmp: Avoid using HAVE_* macros in *.in.h files. + * m4/pty_h.m4 (gl_PTY_CHECK_UTIL_H): New macro, extracted from gl_PTY_H. + (gl_PTY_H): Invoke it. + * m4/utmp_h.m4 (gl_UTMP_H): Invoke gl_PTY_CHECK_UTIL_H and set + HAVE_TERMIOS_H. + (gl_UTMP_H_DEFAULTS): Require gl_PTY_H_DEFAULTS, gl_TERMIOS_H_DEFAULTS. + * modules/utmp (Files): Add m4/pty_h.m4, m4/termios_h.m4. + (Makefile.am): Substitute also HAVE_UTIL_H, HAVE_LIBUTIL_H, + HAVE_TERMIOS_H. + * lib/utmp.in.h: Test HAVE_UTIL_H, HAVE_LIBUTIL_H, HAVE_TERMIOS_H as + Autoconf variables. + 2023-04-13 Bruno Haible <br...@clisp.org> getprogname: Avoid using HAVE_* macros in *.in.h files. diff --git a/lib/utmp.in.h b/lib/utmp.in.h index 895704cb1b..6c47ca7b2a 100644 --- a/lib/utmp.in.h +++ b/lib/utmp.in.h @@ -42,11 +42,11 @@ <termios.h>, not in <utmp.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_LOGIN_TTY@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ -# if HAVE_UTIL_H /* macOS, NetBSD, OpenBSD, Minix */ +# if @HAVE_UTIL_H@ /* macOS, NetBSD, OpenBSD, Minix */ # include <util.h> -# elif HAVE_LIBUTIL_H /* FreeBSD, Haiku */ +# elif @HAVE_LIBUTIL_H@ /* FreeBSD, Haiku */ # include <libutil.h> -# elif HAVE_TERMIOS_H /* Solaris */ +# elif @HAVE_TERMIOS_H@ /* Solaris */ # include <termios.h> # endif #endif diff --git a/m4/pty_h.m4 b/m4/pty_h.m4 index 1fce4b98e4..2c0f8bc9ea 100644 --- a/m4/pty_h.m4 +++ b/m4/pty_h.m4 @@ -1,4 +1,4 @@ -# pty_h.m4 serial 14 +# pty_h.m4 serial 15 dnl Copyright (C) 2009-2023 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -15,13 +15,7 @@ AC_DEFUN_ONCE([gl_PTY_H] AC_CHECK_HEADERS_ONCE([pty.h]) if test $ac_cv_header_pty_h != yes; then HAVE_PTY_H=0 - AC_CHECK_HEADERS([util.h libutil.h]) - if test $ac_cv_header_util_h = yes; then - HAVE_UTIL_H=1 - fi - if test $ac_cv_header_libutil_h = yes; then - HAVE_LIBUTIL_H=1 - fi + gl_PTY_CHECK_UTIL_H AC_CHECK_HEADERS_ONCE([termios.h]) else # Have <pty.h>, assume forkpty is declared there. HAVE_PTY_H=1 @@ -50,6 +44,19 @@ AC_DEFUN_ONCE([gl_PTY_H] ]], [forkpty openpty]) ]) +dnl Test for <util.h> and <libutil.h>. +AC_DEFUN([gl_PTY_CHECK_UTIL_H], +[ + AC_REQUIRE([gl_PTY_H_DEFAULTS]) + AC_CHECK_HEADERS([util.h libutil.h]) + if test $ac_cv_header_util_h = yes; then + HAVE_UTIL_H=1 + fi + if test $ac_cv_header_libutil_h = yes; then + HAVE_LIBUTIL_H=1 + fi +]) + # gl_PTY_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. diff --git a/m4/utmp_h.m4 b/m4/utmp_h.m4 index fff6dbdfe7..6dd5eb989b 100644 --- a/m4/utmp_h.m4 +++ b/m4/utmp_h.m4 @@ -5,7 +5,7 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 +# serial 2 AC_DEFUN_ONCE([gl_UTMP_H], [ @@ -21,6 +21,13 @@ AC_DEFUN_ONCE([gl_UTMP_H] fi AC_SUBST([HAVE_UTMP_H]) + gl_PTY_CHECK_UTIL_H + + AC_CHECK_HEADERS_ONCE([termios.h]) + if test $ac_cv_header_termios_h != yes; then + HAVE_TERMIOS_H=0 + fi + dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. @@ -58,6 +65,10 @@ AC_DEFUN([gl_UTMP_H_REQUIRE_DEFAULTS] AC_DEFUN([gl_UTMP_H_DEFAULTS], [ + dnl For HAVE_UTIL_H, HAVE_LIBUTIL_H. + AC_REQUIRE([gl_PTY_H_DEFAULTS]) + dnl For HAVE_TERMIOS_H. + AC_REQUIRE([gl_TERMIOS_H_DEFAULTS]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_LOGIN_TTY=1; AC_SUBST([HAVE_LOGIN_TTY]) REPLACE_LOGIN_TTY=0; AC_SUBST([REPLACE_LOGIN_TTY]) diff --git a/modules/utmp b/modules/utmp index 3a02f01364..d5ba411d87 100644 --- a/modules/utmp +++ b/modules/utmp @@ -4,6 +4,8 @@ A GNU-like <utmp.h>. Files: lib/utmp.in.h m4/utmp_h.m4 +m4/pty_h.m4 +m4/termios_h.m4 Depends-on: gen-header @@ -30,6 +32,9 @@ utmp.h: utmp.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UTMP_H''@|$(NEXT_UTMP_H)|g' \ + -e 's|@''HAVE_UTIL_H''@|$(HAVE_UTIL_H)|g' \ + -e 's|@''HAVE_LIBUTIL_H''@|$(HAVE_LIBUTIL_H)|g' \ + -e 's|@''HAVE_TERMIOS_H''@|$(HAVE_TERMIOS_H)|g' \ -e 's/@''GNULIB_LOGIN_TTY''@/$(GNULIB_LOGIN_TTY)/g' \ -e 's|@''HAVE_LOGIN_TTY''@|$(HAVE_LOGIN_TTY)|g' \ -e 's|@''REPLACE_LOGIN_TTY''@|$(REPLACE_LOGIN_TTY)|g' \ -- 2.34.1