Compiling the newest coreutils from git, in a git checkout with
no '.tarball-version' file, with gcc 14 produces the following errors:
gcc-14 -ftrapv -I. -I./lib -Ilib -I./lib -Isrc -I./src -Werror
-fstrict-flex-arrays -Wall -Warith-conversion -Wbad-function-cast
-Wcast-align=strict -Wdate-time -Wdisabled-optimization -Wduplicated-cond
-Wextra -Wformat-signedness -Wflex-array-member-not-at-end -Winit-self
-Winvalid-pch -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs
-Wnull-dereference -Wopenmp-simd -Woverlength-strings -Wpacked -Wpointer-arith
-Wshadow -Wstrict-flex-arrays -Wstrict-prototypes -Wsuggest-attribute=cold
-Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=malloc
-Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wsuggest-final-methods
-Wsuggest-final-types -Wsync-nand -Wtrampolines -Wunknown-pragmas
-Wvariadic-macros -Wvla -Wwrite-strings -Warray-bounds=2 -Wattribute-alias=2
-Wbidi-chars=any,ucn -Wformat=2 -Wimplicit-fallthrough=5 -Wshift-overflow=2
-Wuse-after-free=3 -Wunused-const-variable=2 -Wvla-larger-than=4031
-Wswitch-enum -Wno-sign-compare -Wno-unused-parameter -Wno-format-nonliteral
-fdiagnostics-show-option -funit-at-a-time -Wno-return-local-addr
-Wno-stringop-overflow -Wno-cast-qual -Wno-conversion -Wno-float-equal
-Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter
-Wno-float-conversion -Wimplicit-fallthrough -Wno-pedantic -Wno-sign-conversion
-Wno-type-limits -Wno-unused-const-variable -Wno-unsuffixed-float-constants -g
-O2 -MT lib/libcoreutils_a-readutmp.o -MD -MP -MF
lib/.deps/libcoreutils_a-readutmp.Tpo -c -o lib/libcoreutils_a-readutmp.o `test
-f 'lib/readutmp.c' || echo './'`lib/readutmp.c
lib/readutmp.c: In function 'have_boot_time':
lib/readutmp.c:305:1: error: function might be candidate for attribute 'pure'
if it is known to return normally [-Werror=suggest-attribute=pure]
305 | have_boot_time (struct utmp_alloc a)
| ^~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[2]: *** [Makefile:17464: lib/libcoreutils_a-readutmp.o] Error 1
gcc-14 -ftrapv -I. -I./lib -Ilib -I./lib -Isrc -I./src -Werror
-fstrict-flex-arrays -Wall -Warith-conversion -Wbad-function-cast
-Wcast-align=strict -Wdate-time -Wdisabled-optimization -Wduplicated-cond
-Wextra -Wformat-signedness -Wflex-array-member-not-at-end -Winit-self
-Winvalid-pch -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs
-Wnull-dereference -Wopenmp-simd -Woverlength-strings -Wpacked -Wpointer-arith
-Wshadow -Wstrict-flex-arrays -Wstrict-prototypes -Wsuggest-attribute=cold
-Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=malloc
-Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wsuggest-final-methods
-Wsuggest-final-types -Wsync-nand -Wtrampolines -Wunknown-pragmas
-Wvariadic-macros -Wvla -Wwrite-strings -Warray-bounds=2 -Wattribute-alias=2
-Wbidi-chars=any,ucn -Wformat=2 -Wimplicit-fallthrough=5 -Wshift-overflow=2
-Wuse-after-free=3 -Wunused-const-variable=2 -Wvla-larger-than=4031
-Wswitch-enum -Wno-sign-compare -Wno-unused-parameter -Wno-format-nonliteral
-fdiagnostics-show-option -funit-at-a-time -Wno-return-local-addr
-Wno-stringop-overflow -Wno-cast-qual -Wno-conversion -Wno-float-equal
-Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter
-Wno-float-conversion -Wimplicit-fallthrough -Wno-pedantic -Wno-sign-conversion
-Wno-type-limits -Wno-unused-const-variable -Wno-unsuffixed-float-constants -g
-O2 -MT lib/libcoreutils_a-printf-args.o -MD -MP -MF
lib/.deps/libcoreutils_a-printf-args.Tpo -c -o lib/libcoreutils_a-printf-args.o
`test -f 'lib/printf-args.c' || echo './'`lib/printf-args.c
lib/printf-args.c: In function 'printf_fetchargs':
lib/printf-args.c:45:5: error: enumeration value 'TYPE_NONE' not handled in
switch [-Werror=switch-enum]
45 | switch (ap->type)
| ^~~~~~
cc1: all warnings being treated as errors
make[2]: *** [Makefile:20306: lib/libcoreutils_a-printf-args.o] Error 1
gcc-14 -ftrapv -I. -I./lib -Ilib -I./lib -Isrc -I./src -Werror
-fstrict-flex-arrays -Wall -Warith-conversion -Wbad-function-cast
-Wcast-align=strict -Wdate-time -Wdisabled-optimization -Wduplicated-cond
-Wextra -Wformat-signedness -Wflex-array-member-not-at-end -Winit-self
-Winvalid-pch -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs
-Wnull-dereference -Wopenmp-simd -Woverlength-strings -Wpacked -Wpointer-arith
-Wshadow -Wstrict-flex-arrays -Wstrict-prototypes -Wsuggest-attribute=cold
-Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=malloc
-Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wsuggest-final-methods
-Wsuggest-final-types -Wsync-nand -Wtrampolines -Wunknown-pragmas
-Wvariadic-macros -Wvla -Wwrite-strings -Warray-bounds=2 -Wattribute-alias=2
-Wbidi-chars=any,ucn -Wformat=2 -Wimplicit-fallthrough=5 -Wshift-overflow=2
-Wuse-after-free=3 -Wunused-const-variable=2 -Wvla-larger-than=4031
-Wswitch-enum -Wno-sign-compare -Wno-unused-parameter -Wno-format-nonliteral
-fdiagnostics-show-option -funit-at-a-time -Wno-return-local-addr
-Wno-stringop-overflow -Wno-cast-qual -Wno-conversion -Wno-float-equal
-Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter
-Wno-float-conversion -Wimplicit-fallthrough -Wno-pedantic -Wno-sign-conversion
-Wno-type-limits -Wno-unused-const-variable -Wno-unsuffixed-float-constants -g
-O2 -MT lib/libcoreutils_a-vasnprintf.o -MD -MP -MF
lib/.deps/libcoreutils_a-vasnprintf.Tpo -c -o lib/libcoreutils_a-vasnprintf.o
`test -f 'lib/vasnprintf.c' || echo './'`lib/vasnprintf.c
lib/vasnprintf.c: In function 'vasnprintf':
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_NONE' not handled in
switch [-Werror=switch-enum]
6214 | switch (type)
| ^~~~~~
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_SCHAR' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_UCHAR' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_SHORT' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_USHORT' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_INT' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_UINT' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_INT8_T' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_UINT8_T' not handled
in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_INT16_T' not handled
in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_UINT16_T' not handled
in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_INT32_T' not handled
in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_UINT32_T' not handled
in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_INT_FAST8_T' not
handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_UINT_FAST8_T' not
handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_DOUBLE' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_CHAR' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_STRING' not handled in
switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_POINTER' not handled
in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_SCHAR_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_SHORT_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_INT_POINTER' not
handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_LONGINT_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value
'TYPE_COUNT_LONGLONGINT_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_INT8_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_INT16_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_INT32_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value 'TYPE_COUNT_INT64_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value
'TYPE_COUNT_INT_FAST8_T_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value
'TYPE_COUNT_INT_FAST16_T_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value
'TYPE_COUNT_INT_FAST32_T_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6214:17: error: enumeration value
'TYPE_COUNT_INT_FAST64_T_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_NONE' not handled in
switch [-Werror=switch-enum]
6510 | switch (type)
| ^~~~~~
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_SCHAR_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_SHORT_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_INT_POINTER' not
handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_LONGINT_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value
'TYPE_COUNT_LONGLONGINT_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_INT8_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_INT16_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_INT32_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value 'TYPE_COUNT_INT64_T_POINTER'
not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value
'TYPE_COUNT_INT_FAST8_T_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value
'TYPE_COUNT_INT_FAST16_T_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value
'TYPE_COUNT_INT_FAST32_T_POINTER' not handled in switch [-Werror=switch-enum]
lib/vasnprintf.c:6510:21: error: enumeration value
'TYPE_COUNT_INT_FAST64_T_POINTER' not handled in switch [-Werror=switch-enum]
cc1: all warnings being treated as errors
make[2]: *** [Makefile:20334: lib/libcoreutils_a-vasnprintf.o] Error 1
As said repeatedly on this mailing list:
* Gnulib does not support compilation with '-Werror'.
* Maintainers of packages that use Gnulib MUST NOT force their
personal coding style upon Gnulib, via warning options.
So, these compilation units in coreutils MUST be compiled with -Wno-error.
This patch achieves that.
Previously we had added -Wno-error only on the gnulib tests. This patch
adds it also for the source files in lib/.
2025-02-03 Bruno Haible <[email protected]>
gnulib-tool: Allow compiler warnings in Gnulib code.
* gnulib-tool.sh (func_emit_lib_Makefile_am): Append
$(GL_CFLAG_ALLOW_WARNINGS) to the ${libname}_${libext}_CFLAGS variable.
* pygnulib/GLEmiter.py (GLEmiter.lib_Makefile_am): Likewise.
diff --git a/gnulib-tool.sh b/gnulib-tool.sh
index eedeb306bc..bddd3073d6 100755
--- a/gnulib-tool.sh
+++ b/gnulib-tool.sh
@@ -4025,8 +4025,22 @@ func_emit_lib_Makefile_am ()
fi
echo
echo "${libname}_${libext}_SOURCES ="
+ # Insert a '-Wno-error' option in the compilation commands emitted by
+ # Automake, between $(AM_CPPFLAGS) and before the reference to @CFLAGS@.
+ # Why?
+ # - Because every package maintainer has their preferred set of warnings
+ # that they may want to enforce in the main source code of their package,
+ # and some of these warnings (such as '-Wswitch-enum') complain about code
+ # that is just perfect.
+ # Gnulib source code is maintained according to Gnulib coding style.
+ # Package maintainers have no right to force their coding style upon
Gnulib.
+ # Why before @CFLAGS@?
+ # - Because "the user is always right": If a user adds '-Werror' to their
+ # CFLAGS, they have asked for errors, they will get errors. But they have
+ # no right to complain about these errors, because Gnulib does not support
+ # '-Werror'.
if ! $for_test; then
- echo "${libname}_${libext}_CFLAGS = \$(AM_CFLAGS)
\$(GL_CFLAG_GNULIB_WARNINGS)"
+ echo "${libname}_${libext}_CFLAGS = \$(AM_CFLAGS)
\$(GL_CFLAG_GNULIB_WARNINGS) \$(GL_CFLAG_ALLOW_WARNINGS)"
fi
# Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However,
# automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@.
@@ -4391,7 +4405,9 @@ func_emit_tests_Makefile_am ()
# arguments, endless recursions, etc.) that a compiler may warn about,
# even with just the normal '-Wall' option.
# 2) Because every package maintainer has their preferred set of warnings
- # that they may want to enforce in the main source code of their package.
+ # that they may want to enforce in the main source code of their package,
+ # and some of these warnings (such as '-Wswitch-enum') complain about code
+ # that is just perfect.
# But Gnulib tests are maintained in Gnulib and don't end up in binaries
# that that package installs; therefore it does not make sense for
# package maintainers to enforce the absence of warnings on these tests.
diff --git a/pygnulib/GLEmiter.py b/pygnulib/GLEmiter.py
index a8f22ed97c..814ccae571 100644
--- a/pygnulib/GLEmiter.py
+++ b/pygnulib/GLEmiter.py
@@ -911,8 +911,22 @@ def lib_Makefile_am(self, destfile: str, modules:
list[GLModule], moduletable: G
emit += '\n'
emit += '%s_%s_SOURCES =\n' % (libname, libext)
+ # Insert a '-Wno-error' option in the compilation commands emitted by
+ # Automake, between $(AM_CPPFLAGS) and before the reference to
@CFLAGS@.
+ # Why?
+ # - Because every package maintainer has their preferred set of
warnings
+ # that they may want to enforce in the main source code of their
package,
+ # and some of these warnings (such as '-Wswitch-enum') complain
about code
+ # that is just perfect.
+ # Gnulib source code is maintained according to Gnulib coding style.
+ # Package maintainers have no right to force their coding style upon
Gnulib.
+ # Why before @CFLAGS@?
+ # - Because "the user is always right": If a user adds '-Werror' to
their
+ # CFLAGS, they have asked for errors, they will get errors. But they
have
+ # no right to complain about these errors, because Gnulib does not
support
+ # '-Werror'.
if not for_test:
- emit += '%s_%s_CFLAGS = $(AM_CFLAGS)
$(GL_CFLAG_GNULIB_WARNINGS)\n' % (libname, libext)
+ emit += '%s_%s_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)
$(GL_CFLAG_ALLOW_WARNINGS)\n' % (libname, libext)
# Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same.
However,
# automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@.
emit += '%s_%s_LIBADD = $(%s_%s_%sLIBOBJS)\n' % (libname, libext,
macro_prefix, libname, perhapsLT)
@@ -1183,7 +1197,9 @@ def tests_Makefile_am(self, destfile: str, modules:
list[GLModule], moduletable:
# arguments, endless recursions, etc.) that a compiler may warn
about,
# even with just the normal '-Wall' option.
# 2) Because every package maintainer has their preferred set of
warnings
- # that they may want to enforce in the main source code of their
package.
+ # that they may want to enforce in the main source code of their
package,
+ # and some of these warnings (such as '-Wswitch-enum') complain
about code
+ # that is just perfect.
# But Gnulib tests are maintained in Gnulib and don't end up in
binaries
# that that package installs; therefore it does not make sense for
# package maintainers to enforce the absence of warnings on these
tests.