1dnl Autoconf configure script for GDB, the GNU debugger. 2dnl Copyright (C) 1995-2023 Free Software Foundation, Inc. 3dnl 4dnl This file is part of GDB. 5dnl 6dnl This program is free software; you can redistribute it and/or modify 7dnl it under the terms of the GNU General Public License as published by 8dnl the Free Software Foundation; either version 3 of the License, or 9dnl (at your option) any later version. 10dnl 11dnl This program is distributed in the hope that it will be useful, 12dnl but WITHOUT ANY WARRANTY; without even the implied warranty of 13dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14dnl GNU General Public License for more details. 15dnl 16dnl You should have received a copy of the GNU General Public License 17dnl along with this program. If not, see <http://www.gnu.org/licenses/>. 18 19AC_DEFUN([AM_GDB_WARNINGS],[ 20AC_ARG_ENABLE(werror, 21 AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]), 22 [case "${enableval}" in 23 yes | y) ERROR_ON_WARNING="yes" ;; 24 no | n) ERROR_ON_WARNING="no" ;; 25 *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;; 26 esac]) 27 28# Enable -Werror by default when using gcc. Turn it off for releases. 29if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then 30 ERROR_ON_WARNING=yes 31fi 32 33WERROR_CFLAGS="" 34if test "${ERROR_ON_WARNING}" = yes ; then 35 WERROR_CFLAGS="-Werror" 36fi 37 38# The options we'll try to enable. 39build_warnings="-Wall -Wpointer-arith \ 40-Wno-unused -Wunused-value -Wunused-variable -Wunused-function \ 41-Wno-switch -Wno-char-subscripts \ 42-Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable \ 43-Wno-sign-compare -Wno-error=maybe-uninitialized \ 44-Wno-mismatched-tags \ 45-Wno-error=deprecated-register \ 46-Wsuggest-override \ 47-Wimplicit-fallthrough=3 \ 48-Wduplicated-cond \ 49-Wshadow=local \ 50-Wdeprecated-copy \ 51-Wdeprecated-copy-dtor \ 52-Wredundant-move \ 53-Wmissing-declarations \ 54-Wstrict-null-sentinel \ 55" 56 57# The -Wmissing-prototypes flag will be accepted by GCC, but results 58# in a warning being printed about the flag not being valid for C++, 59# this is something to do with using ccache, and argument ordering. 60if test "$GDB_COMPILER_TYPE" != gcc; then 61 build_warnings="$build_warnings -Wmissing-prototypes" 62fi 63 64case "${host}" in 65 *-*-mingw32*) 66 # Enable -Wno-format by default when using gcc on mingw since many 67 # GCC versions complain about %I64. 68 build_warnings="$build_warnings -Wno-format" ;; 69 *-*-solaris*) 70 # Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC 71 # doesn't understand. 72 build_warnings="$build_warnings -Wno-unknown-pragmas" 73 # Solaris 11 <unistd.h> marks vfork deprecated. 74 build_warnings="$build_warnings -Wno-deprecated-declarations" ;; 75 *) 76 # Note that gcc requires -Wformat for -Wformat-nonliteral to work, 77 # but there's a special case for this below. 78 build_warnings="$build_warnings -Wformat-nonliteral" ;; 79esac 80 81AC_ARG_ENABLE(build-warnings, 82AS_HELP_STRING([--enable-build-warnings], [enable build-time compiler warnings if gcc is used]), 83[case "${enableval}" in 84 yes) ;; 85 no) build_warnings="-w";; 86 ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` 87 build_warnings="${build_warnings} ${t}";; 88 *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` 89 build_warnings="${t} ${build_warnings}";; 90 *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; 91esac 92if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then 93 echo "Setting compiler warning flags = $build_warnings" 6>&1 94fi])dnl 95AC_ARG_ENABLE(gdb-build-warnings, 96AS_HELP_STRING([--enable-gdb-build-warnings], [enable GDB specific build-time compiler warnings if gcc is used]), 97[case "${enableval}" in 98 yes) ;; 99 no) build_warnings="-w";; 100 ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` 101 build_warnings="${build_warnings} ${t}";; 102 *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` 103 build_warnings="${t} ${build_warnings}";; 104 *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; 105esac 106if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then 107 echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1 108fi])dnl 109 110# The set of warnings supported by a C++ compiler is not the same as 111# of the C compiler. 112AC_LANG_PUSH([C++]) 113 114WARN_CFLAGS="" 115if test "x${build_warnings}" != x -a "x$GCC" = xyes 116then 117 AC_MSG_CHECKING(compiler warning flags) 118 # Separate out the -Werror flag as some files just cannot be 119 # compiled with it enabled. 120 for w in ${build_warnings}; do 121 # GCC does not complain about -Wno-unknown-warning. Invert 122 # and test -Wunknown-warning instead. 123 case $w in 124 -Wno-*) 125 wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; 126 -Wformat-nonliteral) 127 # gcc requires -Wformat before -Wformat-nonliteral 128 # will work, so stick them together. 129 w="-Wformat $w" 130 wtest="$w" 131 ;; 132 *) 133 wtest=$w ;; 134 esac 135 136 case $w in 137 -Werr*) WERROR_CFLAGS=-Werror ;; 138 *) 139 # Check whether GCC accepts it. 140 saved_CFLAGS="$CFLAGS" 141 CFLAGS="$CFLAGS -Werror $wtest" 142 saved_CXXFLAGS="$CXXFLAGS" 143 CXXFLAGS="$CXXFLAGS -Werror $wtest" 144 if test "x$w" = "x-Wunused-variable"; then 145 # Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958, 146 # fixed in GCC 4.9. This test is derived from the gdb 147 # source code that triggered this bug in GCC. 148 AC_COMPILE_IFELSE( 149 [AC_LANG_PROGRAM( 150 [struct scoped_restore_base {}; 151 struct scoped_restore_tmpl : public scoped_restore_base { 152 ~scoped_restore_tmpl() {} 153 };], 154 [const scoped_restore_base &b = scoped_restore_tmpl();] 155 )], 156 [WARN_CFLAGS="${WARN_CFLAGS} $w"], 157 [] 158 ) 159 else 160 AC_COMPILE_IFELSE( 161 [AC_LANG_PROGRAM([], [])], 162 [WARN_CFLAGS="${WARN_CFLAGS} $w"], 163 [] 164 ) 165 fi 166 CFLAGS="$saved_CFLAGS" 167 CXXFLAGS="$saved_CXXFLAGS" 168 esac 169 done 170 AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS}) 171fi 172AC_SUBST(WARN_CFLAGS) 173AC_SUBST(WERROR_CFLAGS) 174 175AC_LANG_POP([C++]) 176]) 177