Hi Bruno, Bruno Haible <br...@clisp.org> writes:
> #if @HAVE_SYS_CDEFS_H@ > # include <sys/cdefs.h> > #endif > > It would be good to use the same idiom in fts_.h. The idea is that > things are more robust if the value of some HAVE_* macro is taken > directly from config.status, rather than from config.h (where it > comes from config.status as well, but indirectly). If the wrong config.h > is included, due to wrong -I option in the package's Makefile.am, it > helps to rely on config.h as little as possible. Originally I just wanted to use gl_CHECK_HEADER_SYS_CDEFS_H from sys_cdefs_h.m4 by adding an AC_DEFINE. But I felt that doing this: if test "$gl_cv_header_sys_cdefs_h" = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_DEFINE_UNQUOTED([HAVE_SYS_CDEFS_H], [$HAVE_SYS_CDEFS_H], ...) But on a system without sys/cdefs.h that would produce this line in config.h: #define HAVE_SYS_CDEFS_H 0 Where an AC_CHECK_HEADER would do: /* #undef HAVE_SYS_CDEFS_H */ Maybe I was overthinking it, but that seemed strange. Therefore, I just used AC_CHECK_HEADERS_ONCE. I prefer just changing this to an *.in.h file and replacing the variable like you suggest. Could you double check the attached patch before I push the change? Collin
>From 21d8dfb0ef2becf18e41035739e1288eac153685 Mon Sep 17 00:00:00 2001 From: Collin Funk <collin.fu...@gmail.com> Date: Sat, 10 May 2025 17:39:26 -0700 Subject: [PATCH] fts: Improve previous commit. Suggested by Bruno Haible in <https://lists.gnu.org/archive/html/bug-gnulib/2025-05/msg00134.html>. * lib/fts_.h: Remove file. * lib/fts_.in.h: New file. * m4/fts.m4 (gl_FUNC_FTS_CORE): Use gl_CHECK_HEADER_SYS_CDEFS_H instead of AC_CHECK_HEADERS_ONCE. * modules/fts (Files): Remove lib/fts_.h. Add lib/fts_.in.h and m4/sys_cdefs_h.m4. (Depends-on): Add gen-header. (Makefile.am): Add fts_.h to BUILT_SOURCES. Generate fts_.h using fts_.in.h while replacing @HAVE_SYS_CDEFS_H@. Add fts_.h and fts_.h-t to MOSTLYCLEANFILES. --- ChangeLog | 14 ++++++++++++++ lib/{fts_.h => fts_.in.h} | 2 +- m4/fts.m4 | 4 ++-- modules/fts | 13 ++++++++++++- 4 files changed, 29 insertions(+), 4 deletions(-) rename lib/{fts_.h => fts_.in.h} (99%) diff --git a/ChangeLog b/ChangeLog index 6c248f533a..c1eeff1fae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 2025-05-10 Collin Funk <collin.fu...@gmail.com> + fts: Improve previous commit. + Suggested by Bruno Haible in + <https://lists.gnu.org/archive/html/bug-gnulib/2025-05/msg00134.html>. + * lib/fts_.h: Remove file. + * lib/fts_.in.h: New file. + * m4/fts.m4 (gl_FUNC_FTS_CORE): Use gl_CHECK_HEADER_SYS_CDEFS_H instead + of AC_CHECK_HEADERS_ONCE. + * modules/fts (Files): Remove lib/fts_.h. Add lib/fts_.in.h and + m4/sys_cdefs_h.m4. + (Depends-on): Add gen-header. + (Makefile.am): Add fts_.h to BUILT_SOURCES. Generate fts_.h using + fts_.in.h while replacing @HAVE_SYS_CDEFS_H@. Add fts_.h and fts_.h-t to + MOSTLYCLEANFILES. + fts: Fix redefinition of __THROW. * lib/fts_.h: Include <sys/cdefs.h> if the system has it. (__THROW, __BEGIN_DECLS, __END_DECLS): Define properly if not previously diff --git a/lib/fts_.h b/lib/fts_.in.h similarity index 99% rename from lib/fts_.h rename to lib/fts_.in.h index 052858da7b..32533b9f6a 100644 --- a/lib/fts_.h +++ b/lib/fts_.in.h @@ -62,7 +62,7 @@ # define __FLEXIBLE_ARRAY_MEMBER # endif # else -# if HAVE_SYS_CDEFS_H +# if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> # endif # define __FLEXIBLE_ARRAY_MEMBER FLEXIBLE_ARRAY_MEMBER diff --git a/m4/fts.m4 b/m4/fts.m4 index 1d3a32f52e..c5bdc6eac9 100644 --- a/m4/fts.m4 +++ b/m4/fts.m4 @@ -1,5 +1,5 @@ # fts.m4 -# serial 25 +# serial 26 dnl Copyright (C) 2005-2025 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,7 +15,7 @@ AC_DEFUN([gl_FUNC_FTS_CORE] [ dnl Prerequisites of lib/fts.c. gl_FUNC_OPENAT - AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) + gl_CHECK_HEADER_SYS_CDEFS_H AC_CHECK_FUNCS_ONCE([fstatfs]) AC_CHECK_HEADERS_ONCE([sys/param.h sys/vfs.h])dnl diff --git a/modules/fts b/modules/fts index a50bd958b9..ecbd4f57ad 100644 --- a/modules/fts +++ b/modules/fts @@ -2,12 +2,14 @@ Description: Traverse a file hierarchy. Files: -lib/fts_.h +lib/fts_.in.h lib/fts.c lib/fts-cycle.c m4/fts.m4 +m4/sys_cdefs_h.m4 Depends-on: +gen-header alignasof attribute c99 @@ -45,10 +47,19 @@ dnl NetBSD versions have bugs and/or unnecessary limitations. gl_CONDITIONAL([GL_COND_OBJ_FTS], [true]) Makefile.am: +BUILT_SOURCES += fts_.h if GL_COND_OBJ_FTS lib_SOURCES += fts.c endif +fts_.h: fts_.in.h +@NMD@ $(AM_V_GEN)$(MKDIR_P) '%reldir%' + $(gl_V_at)$(SED_HEADER_STDOUT) \ + -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ + $(srcdir)/fts_.in.h > $@-t + $(AM_V_at)mv $@-t $@ +MOSTLYCLEANFILES += fts_.h fts_.h-t + Include: "fts_.h" -- 2.49.0