From 8ad7bc671475d3291df10a1a1d64fddfd30e5175 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 12 Apr 2023 14:49:29 +0200 Subject: Add more reminders to include . * m4/gnulib-common.m4 (gl_COMMON): In config.h, define _GL_CONFIG_H_INCLUDED. * lib/acl-internal.h: Test _GL_CONFIG_H_INCLUDED instead of _GL_INLINE_HEADER_BEGIN. * lib/alignalloc.h: Likewise. * lib/argp-fmtstream.h: Likewise. * lib/argp.h: Likewise. * lib/binary-io.h: Likewise. * lib/bitrotate.h: Likewise. * lib/c-ctype.h: Likewise. * lib/count-leading-zeros.h: Likewise. * lib/count-one-bits.h: Likewise. * lib/count-trailing-zeros.h: Likewise. * lib/eealloc.h: Likewise. * lib/execinfo.in.h: Likewise. * lib/gethrxtime.h: Likewise. * lib/gl_list.h: Likewise. * lib/gl_map.h: Likewise. * lib/gl_omap.h: Likewise. * lib/gl_openssl.h: Likewise. * lib/gl_oset.h: Likewise. * lib/gl_set.h: Likewise. * lib/gl_xlist.h: Likewise. * lib/gl_xmap.h: Likewise. * lib/gl_xomap.h: Likewise. * lib/gl_xoset.h: Likewise. * lib/gl_xset.h: Likewise. * lib/gl_xsublist.h: Likewise. * lib/glthread/cond.h: Likewise. * lib/hamt.h: Likewise. * lib/ialloc.h: Likewise. * lib/math.in.h: Likewise. * lib/mbchar.h: Likewise. * lib/mbfile.h: Likewise. * lib/mbiter.h: Likewise. * lib/mbuiter.h: Likewise. * lib/openat.h: Likewise. * lib/pipe-filter-aux.h: Likewise. * lib/priv-set.h: Likewise. * lib/safe-alloc.h: Likewise. * lib/savewd.h: Likewise. * lib/se-context.in.h: Likewise. * lib/se-label.in.h: Likewise. * lib/se-selinux.in.h: Likewise. * lib/sig-handler.h: Likewise. * lib/stat-time.h: Likewise. * lib/string-desc-quotearg.h: Likewise. * lib/string-desc.h: Likewise. * lib/sys_socket.in.h: Likewise. * lib/timespec.h: Likewise. * lib/u64.h: Likewise. * lib/uchar.in.h: Likewise. * lib/unistd.in.h: Likewise. * lib/utimens.h: Likewise. * lib/wctype.in.h: Likewise. * lib/xalloc.h: Likewise. * lib/xbinary-io.h: Likewise. * lib/xsize.h: Likewise. * lib/xstring-desc.h: Likewise. * lib/xtime.h: Likewise. * lib/acl.h: Check that config.h was already included. * lib/alignof.h: Likewise. * lib/argmatch.h: Likewise. * lib/argv-iter.h: Likewise. * lib/arpa_inet.in.h: Likewise. * lib/attribute.h: Likewise. * lib/backupfile.h: Likewise. * lib/base32.h: Likewise. * lib/base64.h: Likewise. * lib/basename-lgpl.h: Likewise. * lib/bitset.h: Likewise. * lib/bitsetv.h: Likewise. * lib/c-snprintf.h: Likewise. * lib/c-stack.h: Likewise. * lib/c-strcase.h: Likewise. * lib/c-vasnprintf.h: Likewise. * lib/c-vasprintf.h: Likewise. * lib/c-vsnprintf.h: Likewise. * lib/c-xvasprintf.h: Likewise. * lib/canon-host.h: Likewise. * lib/canonicalize.h: Likewise. * lib/clean-temp.h: Likewise. * lib/concat-filename.h: Likewise. * lib/ctype.in.h: Likewise. * lib/dfa.h: Likewise. * lib/di-set.h: Likewise. * lib/dirent-safer.h: Likewise. * lib/dirent.in.h: Likewise. * lib/dirname.h: Likewise. * lib/eloop-threshold.h: Likewise. * lib/error.in.h: Likewise. * lib/exclude.h: Likewise. * lib/fatal-signal.h: Likewise. * lib/fcntl.in.h: Likewise. * lib/file-type.h: Likewise. * lib/filenamecat.h: Likewise. * lib/filevercmp.h: Likewise. * lib/flexmember.h: Likewise. * lib/fnmatch.in.h: Likewise. * lib/fpending.h: Likewise. * lib/freadable.h: Likewise. * lib/freadahead.h: Likewise. * lib/freading.h: Likewise. * lib/fts_.h: Likewise. * lib/fwritable.h: Likewise. * lib/fwriting.h: Likewise. * lib/gc.h: Likewise. * lib/get_progname_of.h: Likewise. * lib/glob.in.h: Likewise. * lib/glthread/thread.h: Likewise. * lib/hash-pjw-bare.h: Likewise. * lib/hash-pjw.h: Likewise. * lib/hash-triple.h: Likewise. * lib/hash.h: Likewise. * lib/i-ring.h: Likewise. * lib/iconv.in.h: Likewise. * lib/ino-map.h: Likewise. * lib/inttostr.h: Likewise. * lib/inttypes.in.h: Likewise. * lib/javaversion.h: Likewise. * lib/langinfo.in.h: Likewise. * lib/locale.in.h: Likewise. * lib/localename.h: Likewise. * lib/malloc.in.h: Likewise. * lib/malloca.h: Likewise. * lib/memcasecmp.h: Likewise. * lib/memchr2.h: Likewise. * lib/memcmp2.h: Likewise. * lib/modechange.h: Likewise. * lib/monetary.in.h: Likewise. * lib/mountlist.h: Likewise. * lib/netdb.in.h: Likewise. * lib/obstack.h: Likewise. * lib/opendirat.h: Likewise. * lib/pagealign_alloc.h: Likewise. * lib/pipe-filter.h: Likewise. * lib/poll.in.h: Likewise. * lib/pthread.in.h: Likewise. * lib/pty.in.h: Likewise. * lib/quotearg.h: Likewise. * lib/read-file.h: Likewise. * lib/readline.h: Likewise. * lib/readutmp.h: Likewise. * lib/regex-quote.h: Likewise. * lib/relocatable.h: Likewise. * lib/savedir.h: Likewise. * lib/sched.in.h: Likewise. * lib/search.in.h: Likewise. * lib/sh-quote.h: Likewise. * lib/signal.in.h: Likewise. * lib/sigpipe-die.h: Likewise. * lib/sockets.h: Likewise. * lib/spawn.in.h: Likewise. * lib/ssfmalloc.h: Likewise. * lib/stack.h: Likewise. * lib/stdalign.in.h: Likewise. * lib/stdarg.in.h: Likewise. * lib/stddef.in.h: Likewise. * lib/stdio-safer.h: Likewise. * lib/stdio.in.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/stdnoreturn.in.h: Likewise. * lib/strerror-override.h: Likewise. * lib/striconv.h: Likewise. * lib/striconveh.h: Likewise. * lib/striconveha.h: Likewise. * lib/string-buffer.h: Likewise. * lib/string.in.h: Likewise. * lib/strings.in.h: Likewise. * lib/strnlen1.h: Likewise. * lib/sys_file.in.h: Likewise. * lib/sys_ioctl.in.h: Likewise. * lib/sys_random.in.h: Likewise. * lib/sys_resource.in.h: Likewise. * lib/sys_select.in.h: Likewise. * lib/sys_stat.in.h: Likewise. * lib/sys_time.in.h: Likewise. * lib/sys_times.in.h: Likewise. * lib/sys_utsname.in.h: Likewise. * lib/sys_wait.in.h: Likewise. * lib/system-quote.h: Likewise. * lib/term-style-control.h: Likewise. * lib/termios.in.h: Likewise. * lib/textstyle.in.h: Likewise. * lib/threads.in.h: Likewise. * lib/time.in.h: Likewise. * lib/trim.h: Likewise. * lib/utime.in.h: Likewise. * lib/utmp.in.h: Likewise. * lib/vasnprintf.h: Likewise. * lib/verror.h: Likewise. * lib/version-etc.h: Likewise. * lib/wchar.in.h: Likewise. * lib/windows-spawn.h: Likewise. * lib/windows-thread.h: Likewise. * lib/xgetcwd.h: Likewise. * lib/xgetdomainname.h: Likewise. * lib/xgethostname.h: Likewise. * lib/xmalloca.h: Likewise. * lib/xmemdup0.h: Likewise. * lib/xprintf.h: Likewise. * lib/xreadlink.h: Likewise. * lib/xstriconv.h: Likewise. * lib/xstriconveh.h: Likewise. * lib/xstrndup.h: Likewise. * lib/xstrtol-error.h: Likewise. * lib/xvasprintf.h: Likewise. * Makefile (config_h_MACROS*): New variables. (sc_check_config_h_reminder): New rule. --- Makefile | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 1044869450..76e3b5cc54 100644 --- a/Makefile +++ b/Makefile @@ -138,6 +138,95 @@ sc_check_sym_list: <(sed -n /^_intprops_name/,/^_intprops_syms_re/p top/maint.mk \ |sed '/^_/d;s/^ //;s/ *\\$$//') + +# List of C macros defined through AH_VERBATIM in m4/extern-inline.m4: +config_h_MACROS1 = \ + _GL_INLINE \ + _GL_EXTERN_INLINE \ + _GL_INLINE_HEADER_BEGIN \ + _GL_INLINE_HEADER_END +# List of C macros defined through AH_VERBATIM in m4/gnulib-common.m4: +config_h_MACROS2 = \ + _GL_GNUC_PREREQ \ + _Noreturn \ + _GL_ATTRIBUTE_ALLOC_SIZE \ + _GL_ATTRIBUTE_ALWAYS_INLINE \ + _GL_ATTRIBUTE_ARTIFICIAL \ + _GL_ATTRIBUTE_COLD \ + _GL_ATTRIBUTE_CONST \ + _GL_ATTRIBUTE_DEALLOC \ + _GL_ATTRIBUTE_DEPRECATED \ + _GL_ATTRIBUTE_ERROR \ + _GL_ATTRIBUTE_WARNING \ + _GL_ATTRIBUTE_EXTERNALLY_VISIBLE \ + _GL_ATTRIBUTE_FALLTHROUGH \ + _GL_ATTRIBUTE_FORMAT \ + _GL_ATTRIBUTE_LEAF \ + _GL_ATTRIBUTE_MALLOC \ + _GL_ATTRIBUTE_MAY_ALIAS \ + _GL_ATTRIBUTE_MAYBE_UNUSED \ + _GL_UNUSED \ + _GL_ATTRIBUTE_NODISCARD \ + _GL_ATTRIBUTE_NOINLINE \ + _GL_ATTRIBUTE_NONNULL \ + _GL_ATTRIBUTE_NONSTRING \ + _GL_ATTRIBUTE_NOTHROW \ + _GL_ATTRIBUTE_PACKED \ + _GL_ATTRIBUTE_PURE \ + _GL_ATTRIBUTE_RETURNS_NONNULL \ + _GL_ATTRIBUTE_SENTINEL \ + _GL_ATTRIBUTE_UNUSED \ + _GL_UNUSED_LABEL \ + _GL_BEGIN_C_LINKAGE \ + _GL_END_C_LINKAGE \ + _GL_ASYNC_SAFE \ + _GL_CMP +# List of C macros defined through AH_VERBATIM in m4/nullptr.m4: +config_h_MACROS3 = \ + nullptr +# List of C macros defined through AH_VERBATIM in m4/posixcheck.m4: +config_h_MACROS4 = \ + GNULIB_POSIXCHECK +# List of C macros defined through AH_VERBATIM in m4/sh-filename.m4: +config_h_MACROS5 = \ + BOURNE_SHELL +# List of C macros defined through AH_VERBATIM in m4/stdalign.m4: +config_h_MACROS6 = \ + alignof \ + alignas +# List of C macros defined through AH_VERBATIM in m4/stdarg.m4: +config_h_MACROS7 = \ + va_copy +# List of C macros defined through AH_VERBATIM in m4/threads_h.m4: +config_h_MACROS8 = \ + _Thread_local +# List of C macros defined through AH_VERBATIM (only the most important ones): +config_h_MACROS = \ + $(config_h_MACROS1) $(config_h_MACROS2) $(config_h_MACROS3) \ + $(config_h_MACROS4) $(config_h_MACROS5) $(config_h_MACROS6) \ + $(config_h_MACROS7) $(config_h_MACROS8) + +# Ensure that .h files that use macros from config.h contain a reminder to +# include . +sc_check_config_h_reminder: + fail=0; \ + for file in `grep -l -F -w -f <(for macro in $(config_h_MACROS); do echo $$macro; done) lib/*.h lib/*/*.h`; do \ + : "Filter out .h files that are not public header files of their respective module."; \ + include_pattern='[<"]'`echo $$file | sed -e 's,^lib/,,' -e 's,[.]in[.]h,.h,' -e 's,_,[/_],g' -e 's,[.],[.],g'`'[>"]' ; \ + if ./gnulib-tool --extract-include-directive `./gnulib-tool --find $$file` | grep "$$include_pattern" >/dev/null; then \ + grep '# *error "Please include config[.]h first[.]"' $$file >/dev/null \ + || { echo -n "File $$file lacks a config.h reminder. Needed for:"; \ + for macro in $(config_h_MACROS); do \ + if grep -F -w $$macro $$file >/dev/null; then echo -n " $$macro"; fi; \ + done; \ + echo; \ + fail=1; \ + }; \ + fi; \ + done; \ + exit $$fail + + # Ensure that the copyright statements in files and in the module descriptions # are consistent. sc_check_copyright: -- cgit v1.2.1