Autoconf older than 2.63b (such as what ships on CentOS 6) had
a bug that any AC_DEFUN'd macro name that includes shell meta-
characters causes failure due to missing shell quoting during
aclocal's use of autom4te. We can work around the problem by
using m4_defun instead (same semantics in autom4te, but no
longer traced by aclocal, so no longer tickles the shell
quoting bug).
* m4/warnings.m4 (gl_UNKNOWN_WARNINGS_ARE_ERRORS(C))
(gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)): Use m4_defun rather than
AC_DEFUN.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC(C))
(gl_MANYWARN_ALL_GCC(C++)): Likewise.
Reported-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
* build-aux/g++-warning.spec: New file.
* m4/manywarnings-c++.m4: New file.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC(C++)): New macro, that
redirects to manywarnings-c++.m4.
* modules/manywarnings (Files): Add m4/manywarnings-c++.m4.
* warnings.m4 (gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL): Renamed from
gl_UNKNOWN_WARNINGS_ARE_ERRORS.
(gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)): New macro.
(gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)): New macro.
(gl_UNKNOWN_WARNINGS_ARE_ERRORS): Dispatch to
gl_UNKNOWN_WARNINGS_ARE_ERRORS(_AC_LANG).
(gl_WARN_ADD): Require the gl_UNKNOWN_WARNINGS_ARE_ERRORS specialization
of the current language. If C++ is the current language, modify
WARN_CXXFLAGS instead of WARN_CFLAGS.
* manywarnings.m4 (gl_MANYWARN_ALL_GCC(C)): New macro, extracted from
gl_MANYWARN_ALL_GCC.
(gl_MANYWARN_ALL_GCC): Dispatch to gl_MANYWARN_ALL_GCC(_AC_LANG).
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Compute max safe
object size rather than hardwiring 2147483647. This is needed to
build GNU Emacs, which has one conditional (and used
only-in-theory) call to malloc with a literal greater than
2147483647.
* build-aux/gcc-warning.spec:
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC):
Add GCC 7 warnings, notably -Wimplicit-fallthrough=5, which
requires a non-comment fallthrough attribute. This is a bit
cleaner than the comment versions.
* lib/strftime.c, lib/dfa.c, lib/fnmatch.c, lib/mbrtowc.c:
* lib/vasnprintf.c, tests/macros.h (FALLTHROUGH): New macro.
Use it whenever one switch case falls through into the next.
* build-aux/gendocs.sh (version):
* doc/gendocs_template:
* doc/gendocs_template_min:
* doc/gnulib.texi:
* lib/version-etc.c (COPYRIGHT_YEAR):
Update copyright dates by hand in templates and the like.
* all files: Run 'make update-copyright'.
* m4/manywarnings.m4: Fix -Wno-missing-field-initializers detection
to be independent of -Wunused-variable. I.E. ensure the latter
warning doesn't occur so that detection of the former is accurate.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -fno-common
to the list. Quoting the manual, "Compiling with -fno-common is
useful on targets for which it provides better performance, or if
you wish to verify that the program will work on other systems that
always treat uninitialized variable declarations this way [putting
it in the data section]." If diffutils had been using this sooner,
it would have prevented this duplicate declaration issue:
http://git.sv.gnu.org/cgit/diffutils.git/commit/?id=v3.4-10-gc2dc91f
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC):
Add GCC 6.1 options that apply to C.
* build-aux/gcc-warning.spec: Add GCC 6.1 options that
do not apply to C, are obsolescent, etc.
* build-aux/gendocs.sh (version):
* doc/gendocs_template:
* doc/gendocs_template_min:
* doc/gnulib.texi:
* lib/version-etc.c (COPYRIGHT_YEAR):
Update copyright dates by hand in templates and the like.
* all files: Run 'make update-copyright'.
Also, make it easier to maintain this in the future.
* build-aux/gcc-warning.spec: Add -Wabi-tag,
-Wconditionally-supported, -Wdelete-incomplete,
-Winherited-variadic-ctor, -Wvirtual-move-assign, -Wzerotrip.
Remove duplicates. Use tabs uniformly, as that's what 'cut' wants.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -Wdate-time,
-Wopenmp-simd. Use -fdiagnostics-show-option and -funit-at-a-time
only for older GCC versions that need them. Handke
-Wnormalized=nfc specially, so that the 'comm' command used
for maintenance doesn't get confused.
With gcc 4.3.4, -Wdisabled-optimization is noisy unless you also
use -funit-at-a-time.
With gcc 4.4.7, there is no indication which warning option
triggered a particular message unless you also use
-fdiagnostics-show-option.
Both of these options are default in newer gcc (such as 4.8.1);
but including them in the list of possible warnings makes the
experience nicer on older platforms.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Older gcc requires
some -f options for optimal warnings.
Signed-off-by: Eric Blake <eblake@redhat.com>
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC):
Add -Waggressive-loop-optimizations, -Wreturn-local-addr, which
are new to GCC 4.8. Remove -Wformat=2, -Wmissing-format-attribute,
-Wmissing-noreturn, as they are duplicates of other warnings.
Remove -Wunreachable-code, as it is removed in GCC 4.8 and
was documented to be flaky in earlier versions of GCC.
Some versions of gcc (at least 4.2.1) noisily warn if
-Wuninitialized is given without -O; in isolation, configure
learns that the warning option is supported, but when later
compiling with -Werror, this makes builds fail. If the
option will have no effect for the configured choice of
$CFLAGS, then it is not worth including in the set.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add test for
-Wuninitialized without -O.
Signed-off-by: Eric Blake <eblake@redhat.com>
* m4/manywarnings.m4: Unite lists, and add many new options.
* build-aux/gcc-warning: New file.
Run this command with the latest gcc to see if they have added
options not yet on our list:
gl=.; comm -1 -3 \
<(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' $gl/m4/manywarnings.m4 |sort) \
<(gcc --help=warnings|sed -n 's/^ \(-[^ ]*\) .*/\1/p' |sort \
|grep -v --line-regexp -f <(cut -f1 $gl/build-aux/gcc-warning.spec))
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Remove duplicate
entry for -Wmultichar. -Wno-multichar is in the GCC 4.7.0 manual,
so keep the entry marked as documented.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): C99 does not allow
'1.0D', which is the only way to silence this warning for 'double'.
Signed-off-by: Eric Blake <eblake@redhat.com>
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add the above
option if it's needed to allow initialization with { 0, },
which is the case with GCC before version 4.7