Branch
Hash :
c504bec0
Author :
Date :
2022-09-13T17:29:35
assert-h: static_assert is a keyword in C23 * m4/assert_h.m4 (gl_ASSERT_H): Also test for static_assert keyword a la C23, and define HAVE_C_STATIC_ASSERT if so. If not, arrange for config.h to #define static_assert by including <assert.h>, and then do "#undef assert" so that the assert macro still needs an explicit include. This should be safe even on very old hosts, as assert.h has been re-includable for decades. * tests/tests-assert.c: New test. * modules/assert-h-tests (Files, Makefile.am): Add it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
Description:
An <assert.h> and static_assert that are like C23.
Files:
lib/assert.in.h
lib/verify.h
m4/assert_h.m4
Depends-on:
gen-header
include_next
configure.ac:
gl_ASSERT_H
gl_CONDITIONAL_HEADER([assert.h])
AC_PROG_MKDIR_P
Makefile.am:
BUILT_SOURCES += $(ASSERT_H)
# We need the following in order to create <assert.h> when the system
# doesn't have one that works with the given compiler.
if GL_GENERATE_ASSERT_H
assert.h: assert.in.h verify.h $(top_builddir)/config.status
@NMD@ $(AM_V_GEN)$(MKDIR_P) '%reldir%'
$(gl_V_at){ $(SED_HEADER_STDOUT) \
-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_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \
< $(srcdir)/assert.in.h && \
sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \
-e 's|_gl_verify|_gl_static_assert|g' \
-e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \
-e 's|_GL\(_STATIC_ASSERT_H\)|_${gl_include_guard_prefix}\1|g' \
< $(srcdir)/verify.h; \
} > $@-t
$(AM_V_at)mv $@-t $@
else
assert.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += assert.h assert.h-t
Include:
<assert.h>
License:
LGPLv2+
Maintainer:
Paul Eggert