2016-01-07 19:06:04 +08:00
|
|
|
dnl Autoconf configure script for GDB, the GNU debugger.
|
2018-01-01 12:43:02 +08:00
|
|
|
dnl Copyright (C) 1995-2018 Free Software Foundation, Inc.
|
2016-01-07 19:06:04 +08:00
|
|
|
dnl
|
|
|
|
dnl This file is part of GDB.
|
|
|
|
dnl
|
|
|
|
dnl This program is free software; you can redistribute it and/or modify
|
|
|
|
dnl it under the terms of the GNU General Public License as published by
|
|
|
|
dnl the Free Software Foundation; either version 3 of the License, or
|
|
|
|
dnl (at your option) any later version.
|
|
|
|
dnl
|
|
|
|
dnl This program is distributed in the hope that it will be useful,
|
|
|
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
dnl GNU General Public License for more details.
|
|
|
|
dnl
|
|
|
|
dnl You should have received a copy of the GNU General Public License
|
|
|
|
dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
AC_DEFUN([AM_GDB_WARNINGS],[
|
|
|
|
AC_ARG_ENABLE(werror,
|
|
|
|
AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
|
|
|
|
[case "${enableval}" in
|
|
|
|
yes | y) ERROR_ON_WARNING="yes" ;;
|
|
|
|
no | n) ERROR_ON_WARNING="no" ;;
|
|
|
|
*) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
|
|
|
|
esac])
|
|
|
|
|
|
|
|
# Enable -Werror by default when using gcc. Turn it off for releases.
|
|
|
|
if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then
|
|
|
|
ERROR_ON_WARNING=yes
|
|
|
|
fi
|
|
|
|
|
|
|
|
WERROR_CFLAGS=""
|
|
|
|
if test "${ERROR_ON_WARNING}" = yes ; then
|
|
|
|
WERROR_CFLAGS="-Werror"
|
|
|
|
fi
|
|
|
|
|
2016-09-06 02:10:44 +08:00
|
|
|
# The options we'll try to enable.
|
2016-01-07 19:06:04 +08:00
|
|
|
build_warnings="-Wall -Wpointer-arith \
|
2018-07-09 11:05:41 +08:00
|
|
|
-Wno-unused -Wunused-value -Wunused-variable -Wunused-function \
|
2016-01-07 19:06:04 +08:00
|
|
|
-Wno-switch -Wno-char-subscripts \
|
2016-09-06 02:10:44 +08:00
|
|
|
-Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable \
|
2017-06-18 05:18:49 +08:00
|
|
|
-Wno-sign-compare -Wno-narrowing -Wno-error=maybe-uninitialized \
|
2018-04-07 04:11:51 +08:00
|
|
|
-Wno-mismatched-tags \
|
2018-04-27 12:46:54 +08:00
|
|
|
-Wno-error=deprecated-register \
|
2016-08-19 00:56:11 +08:00
|
|
|
-Wsuggest-override \
|
2018-05-10 22:38:51 +08:00
|
|
|
-Wimplicit-fallthrough=3 \
|
2018-04-22 02:00:29 +08:00
|
|
|
-Wduplicated-cond"
|
2016-01-07 19:06:04 +08:00
|
|
|
|
|
|
|
case "${host}" in
|
Fix gdb 8.1 Solaris compilation
I just tried to compile gdb trunk on Solaris 11.4 (formerly 12), and
failed for a couple of reasons:
*
In file included from /usr/include/python2.7/Python.h:128:0,
from /vol/src/gnu/gdb/gdb/dist/gdb/python/python-internal.h:94,
from /vol/src/gnu/gdb/gdb/dist/gdb/python/py-instruction.h:23,
from /vol/src/gnu/gdb/gdb/dist/gdb/python/py-instruction.c:21:
/usr/include/python2.7/ceval.h:67:0: error: ignoring #pragma no_inline [-Werror=unknown-pragmas]
#pragma no_inline(PyEval_EvalFrameEx)
^
New in Solaris 11.4: <python2.7/ceval.h> uses a Studio-only #pragma.
I've disabled the warning in warnings.m4.
*
/vol/src/gnu/gdb/gdb/dist/gdb/ser-pipe.c: In function ‘int pipe_open(serial*, const char*)’:
/vol/src/gnu/gdb/gdb/dist/gdb/ser-pipe.c:77:9: error: ‘pid_t vfork()’ is deprecated (declared at /usr/include/unistd.h:659) [-Werror=deprecated-declarations]
pid = vfork ();
^
/vol/src/gnu/gdb/gdb/dist/gdb/ser-pipe.c:77:16: error: ‘pid_t vfork()’ is deprecated (declared at /usr/include/unistd.h:659) [-Werror=deprecated-declarations]
pid = vfork ();
^
Since Solaris 11, vfork () is marked deprecated in <unistd.h>.
cf. vfork(2):
The vfork() and vforkx() functions are deprecated. Their sole legiti-
mate use as a prelude to an immediate call to a function from the exec
family can be achieved safely by posix_spawn(3C) or posix_spawnp(3C).
Again, I've disabled the warning.
*
/vol/src/gnu/gdb/gdb/dist/gdb/cli/cli-cmds.c: In function ‘void shell_escape(const char*, int)’:
/vol/src/gnu/gdb/gdb/dist/gdb/cli/cli-cmds.c:750:14: error: ‘pid_t vfork()’ is deprecated (declared at /usr/include/unistd.h:659) [-Werror=deprecated-declarations]
if ((pid = vfork ()) == 0)
^
/vol/src/gnu/gdb/gdb/dist/gdb/cli/cli-cmds.c:750:21: error: ‘pid_t vfork()’ is deprecated (declared at /usr/include/unistd.h:659) [-Werror=deprecated-declarations]
if ((pid = vfork ()) == 0)
^
Same problem.
*
/vol/src/gnu/gdb/gdb/dist/gdb/procfs.c: In function ‘void procfs_init_inferior(target_ops*, int)’:
/vol/src/gnu/gdb/gdb/dist/gdb/procfs.c:4380:30: error: ‘START_INFERIOR_TRAPS_EXPECTED’ was not declared in this scope
gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED);
^
defined in nat/fork-inferior.h, need to include that header
/vol/src/gnu/gdb/gdb/dist/gdb/procfs.c: In function ‘void procfs_create_inferior(target_ops*, const char*, const string&, char**, int)’:
/vol/src/gnu/gdb/gdb/dist/gdb/procfs.c:4605:38: error: ‘fork_inferior’ was not declared in this scope
NULL, NULL, shell_file, NULL);
^
likewise
/vol/src/gnu/gdb/gdb/dist/gdb/procfs.c: In function ‘void procfs_info_proc(target_ops*, const char*, info_proc_what)’:
/vol/src/gnu/gdb/gdb/dist/gdb/procfs.c:5124:20: error: ‘argv’ was not declared in this scope
for (char *arg : argv)
^
Typo, should be built_argv instead!
*
Undefined first referenced
symbol in file
fork_inferior(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char**, void (*)(), void (*)(int), void (*)(), char const*, void (*)(char const*, char* const*, char* const*)) procfs.o
startup_inferior(int, int, target_waitstatus*, ptid_t*) fork-child.o
ld: fatal: symbol referencing errors
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:2249: gdb] Error 1
Need to add fork-inferior.o to NATDEPFILES.
With the changes below, I can build gdb on sparcv9-sun-solaris2.11 and
amd64-pc-solaris2.11 and a simple smoke test (gdb/gdb gdb/gdb) works.
2017-09-22 16:42:45 +08:00
|
|
|
*-*-mingw32*)
|
|
|
|
# Enable -Wno-format by default when using gcc on mingw since many
|
|
|
|
# GCC versions complain about %I64.
|
|
|
|
build_warnings="$build_warnings -Wno-format" ;;
|
|
|
|
*-*-solaris*)
|
|
|
|
# Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC
|
|
|
|
# doesn't understand.
|
|
|
|
build_warnings="$build_warnings -Wno-unknown-pragmas"
|
|
|
|
# Solaris 11 <unistd.h> marks vfork deprecated.
|
|
|
|
build_warnings="$build_warnings -Wno-deprecated-declarations" ;;
|
2016-01-07 19:06:04 +08:00
|
|
|
*) build_warnings="$build_warnings -Wformat-nonliteral" ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
AC_ARG_ENABLE(build-warnings,
|
|
|
|
AS_HELP_STRING([--enable-build-warnings], [enable build-time compiler warnings if gcc is used]),
|
|
|
|
[case "${enableval}" in
|
|
|
|
yes) ;;
|
|
|
|
no) build_warnings="-w";;
|
|
|
|
,*) t=`echo "${enableval}" | sed -e "s/,/ /g"`
|
|
|
|
build_warnings="${build_warnings} ${t}";;
|
|
|
|
*,) t=`echo "${enableval}" | sed -e "s/,/ /g"`
|
|
|
|
build_warnings="${t} ${build_warnings}";;
|
|
|
|
*) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
|
|
|
|
esac
|
|
|
|
if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
|
|
|
|
echo "Setting compiler warning flags = $build_warnings" 6>&1
|
|
|
|
fi])dnl
|
|
|
|
AC_ARG_ENABLE(gdb-build-warnings,
|
|
|
|
AS_HELP_STRING([--enable-gdb-build-warnings], [enable GDB specific build-time compiler warnings if gcc is used]),
|
|
|
|
[case "${enableval}" in
|
|
|
|
yes) ;;
|
|
|
|
no) build_warnings="-w";;
|
|
|
|
,*) t=`echo "${enableval}" | sed -e "s/,/ /g"`
|
|
|
|
build_warnings="${build_warnings} ${t}";;
|
|
|
|
*,) t=`echo "${enableval}" | sed -e "s/,/ /g"`
|
|
|
|
build_warnings="${t} ${build_warnings}";;
|
|
|
|
*) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
|
|
|
|
esac
|
|
|
|
if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
|
|
|
|
echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1
|
|
|
|
fi])dnl
|
|
|
|
|
|
|
|
# The set of warnings supported by a C++ compiler is not the same as
|
|
|
|
# of the C compiler.
|
2016-09-06 02:10:44 +08:00
|
|
|
AC_LANG_PUSH([C++])
|
2016-01-07 19:06:04 +08:00
|
|
|
|
|
|
|
WARN_CFLAGS=""
|
|
|
|
if test "x${build_warnings}" != x -a "x$GCC" = xyes
|
|
|
|
then
|
|
|
|
AC_MSG_CHECKING(compiler warning flags)
|
|
|
|
# Separate out the -Werror flag as some files just cannot be
|
|
|
|
# compiled with it enabled.
|
|
|
|
for w in ${build_warnings}; do
|
|
|
|
# GCC does not complain about -Wno-unknown-warning. Invert
|
|
|
|
# and test -Wunknown-warning instead.
|
|
|
|
case $w in
|
|
|
|
-Wno-*)
|
|
|
|
wtest=`echo $w | sed 's/-Wno-/-W/g'` ;;
|
|
|
|
*)
|
|
|
|
wtest=$w ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case $w in
|
|
|
|
-Werr*) WERROR_CFLAGS=-Werror ;;
|
|
|
|
*)
|
|
|
|
# Check whether GCC accepts it.
|
|
|
|
saved_CFLAGS="$CFLAGS"
|
gdb: Use -Werror when checking for (un)supported warning flags
In warning.m4, we pass all the warning flags one by one to the compiler
to test if they are supported by this particular compiler. If the
compiler exits with an error, we conclude that this warning flag is not
supported and exclude it. This allows us to use warning flags without
having to worry about which versions of which compilers support each
flag.
clang, by default, only emits a warning if an unknown flag is passed:
warning: unknown warning option '-Wfoo' [-Wunknown-warning-option]
The result is that we think that all the warning flags we use are
supported by clang (they are not), and the compilation fails later when
building with -Werror, since the aforementioned warning becomes an
error. The fix is to also pass -Werror when probing for supported
flags, then we'll correctly get an error when using an unknown warning,
and we'll exclude it:
error: unknown warning option '-Wfoo' [-Werror,-Wunknown-warning-option]
I am not sure why there is a change in a random comment in
gdbserver/configure, but I suppose it's a leftfover from a previous
patch, so I included it.
gdb/ChangeLog:
* configure: Re-generate.
* warning.m4: Pass -Werror to compiler when checking for
supported warning flags.
gdb/gdbserver/ChangeLog:
* configure: Re-generate.
2017-06-18 05:18:20 +08:00
|
|
|
CFLAGS="$CFLAGS -Werror $wtest"
|
2016-01-07 19:06:04 +08:00
|
|
|
saved_CXXFLAGS="$CXXFLAGS"
|
gdb: Use -Werror when checking for (un)supported warning flags
In warning.m4, we pass all the warning flags one by one to the compiler
to test if they are supported by this particular compiler. If the
compiler exits with an error, we conclude that this warning flag is not
supported and exclude it. This allows us to use warning flags without
having to worry about which versions of which compilers support each
flag.
clang, by default, only emits a warning if an unknown flag is passed:
warning: unknown warning option '-Wfoo' [-Wunknown-warning-option]
The result is that we think that all the warning flags we use are
supported by clang (they are not), and the compilation fails later when
building with -Werror, since the aforementioned warning becomes an
error. The fix is to also pass -Werror when probing for supported
flags, then we'll correctly get an error when using an unknown warning,
and we'll exclude it:
error: unknown warning option '-Wfoo' [-Werror,-Wunknown-warning-option]
I am not sure why there is a change in a random comment in
gdbserver/configure, but I suppose it's a leftfover from a previous
patch, so I included it.
gdb/ChangeLog:
* configure: Re-generate.
* warning.m4: Pass -Werror to compiler when checking for
supported warning flags.
gdb/gdbserver/ChangeLog:
* configure: Re-generate.
2017-06-18 05:18:20 +08:00
|
|
|
CXXFLAGS="$CXXFLAGS -Werror $wtest"
|
2018-07-09 11:05:41 +08:00
|
|
|
if test "x$w" = "x-Wunused-variable"; then
|
|
|
|
# Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958,
|
|
|
|
# fixed in GCC 4.9. This test is derived from the gdb
|
|
|
|
# source code that triggered this bug in GCC.
|
|
|
|
AC_TRY_COMPILE(
|
|
|
|
[struct scoped_restore_base {};
|
|
|
|
struct scoped_restore_tmpl : public scoped_restore_base {
|
|
|
|
~scoped_restore_tmpl() {}
|
|
|
|
};],
|
|
|
|
[const scoped_restore_base &b = scoped_restore_tmpl();],
|
|
|
|
WARN_CFLAGS="${WARN_CFLAGS} $w",)
|
|
|
|
else
|
|
|
|
AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
|
|
|
|
fi
|
2016-01-07 19:06:04 +08:00
|
|
|
CFLAGS="$saved_CFLAGS"
|
|
|
|
CXXFLAGS="$saved_CXXFLAGS"
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
|
|
|
|
fi
|
|
|
|
AC_SUBST(WARN_CFLAGS)
|
|
|
|
AC_SUBST(WERROR_CFLAGS)
|
|
|
|
|
2016-09-06 02:10:44 +08:00
|
|
|
AC_LANG_POP([C++])
|
2016-01-07 19:06:04 +08:00
|
|
|
])
|