From: Bruno Haible <bruno@clisp.org>
To: Simon Josefsson <simon@josefsson.org>, Jim Meyering <jim@meyering.net>
Cc: bug-gnulib@gnu.org, Collin Funk <collin.funk1@gmail.com>
Subject: Re: syntax-check rule to silence -Winclude-next-absolute-path warning
Date: Tue, 20 Feb 2024 16:17:51 +0100 [thread overview]
Message-ID: <28183632.p16igRAIYV@nimes> (raw)
In-Reply-To: <87y1bg4zc0.fsf@kaka.sjd.se>
Simon Josefsson wrote:
> There are some checks that I struggle to understand the point of,
> and one that I simply disagree with (sc_prohibit_strcmp).
Likewise for me. [1]
> Having a link
> to discussion helps to determine how to deal with errors.
>
> What do you think about:
>
> 1) using a URL to the gnulib online manual instead? For most users,
> that allows easier lookup, and for people who are really offline,
> the URL contains sufficient detail to find the relevant in the
> manual, and
>
> 2) print the rationale link as part of the error message instead of a
> comment in the code
>
> ?
We can do this. But it needs your input. With your input, I can put each
sc's rationale into a separate doc subsection, group these subsections
through sections, then republish the doc, then find out about the URLs
and store them in maint.mk.
Please reply to this mail, with a rationale for the following. Don't
omit references to standards (ISO C 23, POSIX:2018, GNU Coding Style)
when relevant.
sc_avoid_if_before_free:
sc_cast_of_argument_to_free:
sc_cast_of_x_alloc_return_value:
sc_cast_of_alloca_return_value:
sc_space_tab:
# Don't use *scanf or the old ato* functions in "real" code.
# They provide no error checking mechanism.
# Instead, use strto* functions.
sc_prohibit_atoi_atof:
# Use STREQ rather than comparing strcmp == 0, or != 0.
sc_prohibit_strcmp:
# Really. You don't want to use this function.
# It may fail to NUL-terminate the destination,
# and always NUL-pads out to the specified length.
sc_prohibit_strncpy:
# Pass EXIT_*, not number, to usage, exit, and error (when exiting)
sc_prohibit_magic_number_exit:
# Check that we don't use $< in non-implicit Makefile rules.
sc_prohibit_gnu_make_extensions:
# Using EXIT_SUCCESS as the first argument to error is misleading,
# since when that parameter is 0, error does not exit. Use '0' instead.
sc_error_exit_success:
# "FATAL:" should be fully upper-cased in error messages
# "WARNING:" should be fully upper-cased, or fully lower-cased
sc_error_message_warn_fatal:
# Error messages should not start with a capital letter
sc_error_message_uppercase:
# Error messages should not end with a period
sc_error_message_period:
sc_file_system:
# Don't use cpp tests of this symbol. All code assumes config.h is included.
sc_prohibit_have_config_h:
# Nearly all .c files must include <config.h>. However, we also permit this
# via inclusion of a package-specific header, if cfg.mk specified one.
# config_h_header must be suitable for grep -E.
# Rationale: The Gnulib documentation, node 'Include <config.h>'.
sc_require_config_h:
# You must include <config.h> before including any other header file.
# This can possibly be via a package-specific header, if given by cfg.mk.
# Rationale: The Gnulib documentation, node 'Include <config.h>'.
sc_require_config_h_first:
# Suggest using '#include <header.h>' instead of '#include "header.h"' for
# headers that override system headers.
# Rationale: The Gnulib documentation, node 'Style of #include statements'.
sc_prefer_angle_bracket_headers:
sc_prohibit_HAVE_MBRTOWC:
# Prohibit the inclusion of assert.h without an actual use of assert.
sc_prohibit_assert_without_use:
# Prohibit the inclusion of close-stream.h without an actual use.
sc_prohibit_close_stream_without_use:
# Prohibit the inclusion of getopt.h without an actual use.
sc_prohibit_getopt_without_use:
# Don't include quotearg.h unless you use one of its functions.
sc_prohibit_quotearg_without_use:
# Don't include quote.h unless you use one of its functions.
sc_prohibit_quote_without_use:
# Don't include this header unless you use one of its functions.
sc_prohibit_long_options_without_use:
# Don't include this header unless you use one of its functions.
sc_prohibit_inttostr_without_use:
# Don't include this header unless you use one of its functions.
sc_prohibit_ignore_value_without_use:
# Don't include this header unless you use one of its functions.
sc_prohibit_error_without_use:
# Don't include xalloc.h unless you use one of its symbols.
sc_prohibit_xalloc_without_use:
sc_prohibit_hash_without_use:
sc_prohibit_cloexec_without_use:
sc_prohibit_posixver_without_use:
sc_prohibit_same_without_use:
sc_prohibit_hash_pjw_without_use:
sc_prohibit_safe_read_without_use:
sc_prohibit_argmatch_without_use:
sc_prohibit_canonicalize_without_use:
sc_prohibit_root_dev_ino_without_use:
sc_prohibit_openat_without_use:
# Prohibit the inclusion of c-ctype.h without an actual use.
sc_prohibit_c_ctype_without_use:
# Prohibit the inclusion of signal.h without an actual use.
sc_prohibit_signal_without_use:
# Don't include stdio--.h unless you use one of its functions.
sc_prohibit_stdio--_without_use:
# Don't include stdio-safer.h unless you use one of its functions.
sc_prohibit_stdio-safer_without_use:
# Prohibit the inclusion of strings.h without a sensible use.
# Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible.
sc_prohibit_strings_without_use:
# Prohibit the inclusion of intprops.h without an actual use.
sc_prohibit_intprops_without_use:
# Prohibit the inclusion of stddef.h without an actual use.
sc_prohibit_stddef_without_use:
# Prohibit the inclusion of dirent.h without an actual use.
sc_prohibit_dirent_without_use:
# Prohibit the inclusion of verify.h without an actual use.
sc_prohibit_verify_without_use:
# Don't include xfreopen.h unless you use one of its functions.
sc_prohibit_xfreopen_without_use:
sc_obsolete_symbols:
# Each nonempty ChangeLog line must start with a year number, or a TAB.
sc_changelog:
# Ensure that each .c file containing a "main" function also
# calls bindtextdomain.
sc_bindtextdomain:
# Require that the final line of each test-lib.sh-using test be this one:
# Exit $fail
sc_require_test_exit_idiom:
sc_trailing_blank:
sc_two_space_separator_in_usage:
# Look for diagnostics that aren't marked for translation.
# This won't find any for which error's format string is on a separate line.
sc_unmarked_diagnostics:
# Avoid useless parentheses like those in this example:
# #if defined (SYMBOL) || defined (SYM2)
sc_useless_cpp_parens:
sc_prohibit_always_true_header_tests:
sc_prohibit_defined_have_decl_tests:
# Don't define macros that we already get from gnulib header files.
sc_prohibit_always-defined_macros:
# Prohibit checked in backup files.
sc_prohibit_backup_files:
# Require the latest GPL.
sc_GPL_version:
# Require the latest GFDL.
sc_GFDL_version:
# Don't use Texinfo's @acronym{}.
# https://lists.gnu.org/r/bug-gnulib/2010-03/msg00321.html
sc_texinfo_acronym:
sc_prohibit_cvs_keyword:
sc_prohibit_empty_lines_at_EOF:
# Make sure we don't use st_blocks. Use ST_NBLOCKS or STP_NBLOCKS instead.
# This is a bit of a kludge, since it prevents use of the string
# even in comments, but for now it does the job with no false positives.
sc_prohibit_stat_st_blocks:
# Make sure we don't define any S_IS* macros in src/*.c files.
# They're already defined via gnulib's sys/stat.h replacement.
sc_prohibit_S_IS_definition:
sc_prohibit_doubled_word:
# A regular expression matching undesirable combinations of words like
# "can not"; this matches them even when the two words appear on different
# lines, but not when there is an intervening delimiter like "#" or "*".
# Similarly undesirable, "See @xref{...}", since an @xref should start
# a sentence. Explicitly prohibit any prefix of "see" or "also".
# Also prohibit a prefix matching "\w+ +".
# @pxref gets the same see/also treatment and should be parenthesized;
# presume it must *not* start a sentence.
# POSIX spells it "timestamp" rather than "time\s+stamp", so we do, too.
sc_prohibit_undesirable_word_seq:
# Except for shell files and for loops, double semicolon is probably a mistake
sc_prohibit_double_semicolon:
# Using test's -a and -o operators is not portable.
# We prefer test over [, since the latter is spelled [[ in configure.ac.
sc_prohibit_test_minus_ao:
# Avoid a test bashism.
sc_prohibit_test_double_equal:
# Each program that uses proper_name_utf8 must link with one of the
# ICONV libraries. Otherwise, some ICONV library must appear in LDADD.
sc_proper_name_utf8_requires_ICONV:
# Warn about "c0nst struct Foo const foo[]",
# but not about "char const *const foo" or "#define const const".
sc_redundant_const:
sc_const_long_option:
# Ensure that we don't accidentally insert an entry into an old NEWS block.
sc_immutable_NEWS:
# Ensure that we use only the standard $(VAR) notation,
# not @...@ in Makefile.am, now that we can rely on automake
# to emit a definition for each substituted variable.
# However, there is still one case in which @VAR@ use is not just
# legitimate, but actually required: when augmenting an automake-defined
# variable with a prefix. For example, gettext uses this:
# MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@
# otherwise, makeinfo would put German or French (current locale)
# navigation hints in the otherwise-English documentation.
sc_makefile_at_at_check:
sc_makefile_TAB_only_indentation:
sc_m4_quote_check:
# Verify that all source files using _() (more specifically, files that
# match $(_gl_translatable_string_re)) are listed in po/POTFILES.in.
sc_po_check:
# Sometimes it is useful to change the PATH environment variable
# in Makefiles. When doing so, it's better not to use the Unix-centric
# path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'.
sc_makefile_path_separator_check:
sc_makefile_DISTCHECK_CONFIGURE_FLAGS:
# Make sure that the copyright date in $(v_etc_file) is up to date.
# Do the same for the $(sample-test) and the main doc/.texi file.
sc_copyright_check:
# If tests/help-version exists and seems to be new enough, assume that its
# use of init.sh and path_prepend_ is correct, and ensure that every other
# use of init.sh is identical.
# This is useful because help-version cross-checks prog --version
# with $(VERSION), which verifies that its path_prepend_ invocation
# sets PATH correctly. This is an inexpensive way to ensure that
# the other init.sh-using tests also get it right.
sc_cross_check_PATH_usage_in_tests:
# In tests, use "compare expected actual", not the reverse.
sc_prohibit_reversed_compare_failure:
# #if HAVE_... will evaluate to false for any non numeric string.
# That would be flagged by using -Wundef, however gnulib currently
# tests many undefined macros, and so we can't enable that option.
# So at least preclude common boolean strings as macro values.
sc_Wundef_boolean:
# Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might
# not be constant, or might overflow a stack. In general, use PATH_MAX as
# a limit, not an array or alloca size.
sc_prohibit_path_max_allocation:
sc_vulnerable_makefile_CVE-2009-4029:
sc_vulnerable_makefile_CVE-2012-3386:
sc_unportable_grep_q:
# The GNU Coding standards say that README should refer to both
# INSTALL and the file that contains the copying conditions. This
# shall be COPYING for GPL and COPYING.LESSER for LGPL.
sc_readme_link_install:
sc_readme_link_copying:
Bruno
[1] https://lists.gnu.org/archive/html/poke-devel/2024-02/msg00082.html
next prev parent reply other threads:[~2024-02-20 15:18 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-17 8:36 [PATCH] math: Silence -Winclude-next-absolute-path warning Collin Funk
2024-02-17 10:51 ` Bruno Haible
2024-02-17 12:26 ` Collin Funk
2024-02-17 13:17 ` Bruno Haible
2024-02-18 12:19 ` Bruno Haible
2024-02-18 12:44 ` syntax-check rule to silence " Bruno Haible
2024-02-18 20:12 ` Collin Funk
2024-02-18 20:33 ` Bruno Haible
2024-02-19 5:02 ` Jim Meyering
2024-02-19 18:11 ` Collin Funk
2024-02-19 18:32 ` Jim Meyering
2024-02-19 8:45 ` Simon Josefsson via Gnulib discussion list
2024-02-19 20:39 ` Jim Meyering
2024-02-20 15:17 ` Bruno Haible [this message]
2024-02-20 20:23 ` Collin Funk
2024-02-20 20:49 ` Bruno Haible
2024-02-19 6:31 ` [PATCH] math: Silence " Paul Eggert
2024-02-19 11:03 ` Bruno Haible
2024-02-19 20:41 ` Paul Eggert
2024-02-19 21:24 ` Bruno Haible
2024-02-19 21:45 ` Paul Eggert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=28183632.p16igRAIYV@nimes \
--to=bruno@clisp.org \
--cc=bug-gnulib@gnu.org \
--cc=collin.funk1@gmail.com \
--cc=jim@meyering.net \
--cc=simon@josefsson.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).