From 2c78d1eadedebf5e279fe282aee7e51958f806a6 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 28 Jan 2023 02:23:36 +0100 Subject: [PATCH] stdalign: Ensure alignof is defined on FreeBSD (regression 2023-01-15). * lib/stdalign.in.h: Include the system's when it exists. * m4/stdalign.m4 (gl_ALIGNASOF): Invoke gl_CHECK_NEXT_HEADERS. Set HAVE_STDALIGN_H. * modules/stdalign (Makefile.am): Substitute GUARD_PREFIX, HAVE_STDALIGN_H, INCLUDE_NEXT, PRAGMA_SYSTEM_HEADER, PRAGMA_COLUMNS, NEXT_STDALIGN_H. --- ChangeLog | 10 ++++++++++ lib/stdalign.in.h | 21 ++++++++++++++++++--- m4/stdalign.m4 | 18 +++++++++++++----- modules/stdalign | 9 ++++++++- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7013ee4aa1..34514a6d9a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2023-01-27 Bruno Haible + + stdalign: Ensure alignof is defined on FreeBSD (regression 2023-01-15). + * lib/stdalign.in.h: Include the system's when it exists. + * m4/stdalign.m4 (gl_ALIGNASOF): Invoke gl_CHECK_NEXT_HEADERS. Set + HAVE_STDALIGN_H. + * modules/stdalign (Makefile.am): Substitute GUARD_PREFIX, + HAVE_STDALIGN_H, INCLUDE_NEXT, PRAGMA_SYSTEM_HEADER, PRAGMA_COLUMNS, + NEXT_STDALIGN_H. + 2023-01-27 Bruno Haible stddef: Fix test-stddef compilation error on FreeBSD 12/x86. diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h index 6523546f16..b616c100fd 100644 --- a/lib/stdalign.in.h +++ b/lib/stdalign.in.h @@ -20,8 +20,22 @@ /* Define two obsolescent C11 macros, assuming alignas and alignof are either keywords or alignasof-defined macros. */ -#ifndef _GL_STDALIGN_H -#define _GL_STDALIGN_H +#ifndef _@GUARD_PREFIX@_STDALIGN_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* We need to include the system's when it exists, because it might + define 'alignof' as a macro when it's not a keyword or compiler built-in. */ +#if @HAVE_STDALIGN_H@ +/* The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_STDALIGN_H@ +#endif + +#ifndef _@GUARD_PREFIX@_STDALIGN_H +#define _@GUARD_PREFIX@_STDALIGN_H #if (defined alignas \ || (defined __STDC_VERSION__ && 202311 <= __STDC_VERSION__) \ @@ -31,4 +45,5 @@ #define __alignof_is_defined 1 -#endif /* _GL_STDALIGN_H */ +#endif /* _@GUARD_PREFIX@_STDALIGN_H */ +#endif /* _@GUARD_PREFIX@_STDALIGN_H */ diff --git a/m4/stdalign.m4 b/m4/stdalign.m4 index 6a0ab2c102..3e83a2ca58 100644 --- a/m4/stdalign.m4 +++ b/m4/stdalign.m4 @@ -179,9 +179,17 @@ AC_DEFUN([gl_ALIGNASOF], AC_DEFUN([gl_STDALIGN_H], [ AC_REQUIRE([gl_ALIGNASOF]) - GL_GENERATE_STDALIGN_H=false - AS_IF([test "$gl_cv_header_working_stdalign_h" = no], - [GL_GENERATE_STDALIGN_H=true]) - - AC_CHECK_HEADERS_ONCE([stdalign.h]) + if test "$gl_cv_header_working_stdalign_h" = no; then + GL_GENERATE_STDALIGN_H=true + else + GL_GENERATE_STDALIGN_H=false + fi + + gl_CHECK_NEXT_HEADERS([stdalign.h]) + if test $ac_cv_header_stdalign_h = yes; then + HAVE_STDALIGN_H=1 + else + HAVE_STDALIGN_H=0 + fi + AC_SUBST([HAVE_STDALIGN_H]) ]) diff --git a/modules/stdalign b/modules/stdalign index c5c29d3088..ceeab546a2 100644 --- a/modules/stdalign +++ b/modules/stdalign @@ -26,7 +26,14 @@ BUILT_SOURCES += $(STDALIGN_H) if GL_GENERATE_STDALIGN_H stdalign.h: stdalign.in.h $(top_builddir)/config.status @NMD@ $(AM_V_GEN)$(MKDIR_P) '%reldir%' - $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h + $(gl_V_at)$(SED_HEADER_STDOUT) \ + -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ + -e 's|@''HAVE_STDALIGN_H''@|$(HAVE_STDALIGN_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' \ + -e 's|@''NEXT_STDALIGN_H''@|$(NEXT_STDALIGN_H)|g' \ + $(srcdir)/stdalign.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdalign.h: $(top_builddir)/config.status -- 2.39.5