[1/4] gdb/selftest.m4: ensure $development is set
Commit Message
The GDB build in non-development mode (turn development to false in
bfd/development.sh if you want to try) is currently broken:
CXXLD gdb
/home/smarchi/src/binutils-gdb/gdb/disasm-selftests.c:218: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void (*)(gdbarch*))'
/home/smarchi/src/binutils-gdb/gdb/disasm-selftests.c:220: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void (*)(gdbarch*))'
/home/smarchi/src/binutils-gdb/gdb/dwarf2/frame.c:2310: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void (*)(gdbarch*))'
/home/smarchi/src/binutils-gdb/gdb/gdbarch-selftests.c:168: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void (*)(gdbarch*))'
/home/smarchi/src/binutils-gdb/gdbsupport/selftest.cc:96: error: undefined reference to 'selftests::reset()'
This is because the gdbsupport configure script doesn't source
bfd/development.sh to set the development variable. When $development
is unset, GDB_AC_SELFTEST defaults to enabling selftests. I don't think
the macro was written with this intention in mind, it just happens to be
that way.
So gdbsupport thinks selftests are enabled, while gdb thinks they are
disabled. gdbsupport compiles in code that calls selftests:: functions,
which are normally provided by gdb, but gdb doesn't provide them, hence
the undefined references.
Since the macro relies on the `development` variable, I propose to
modify it such that it errors out if $development does not have an
expected value of "true" or "false". This could prevent a future
similar problem from happening while refactoring the configure scripts.
This catches the current problem in the gdbsupport configure script,
which is fixed by sourcing development.sh, as it's done in
gdb/configure.ac and gdbserver/configure.ac.
gdb/ChangeLog:
* selftest.m4 (GDB_AC_SELFTEST): Error out if $development is
not "true" or "false".
* configure: Re-generate.
gdbserver/ChangeLog:
* configure: Re-generate.
gdbsupport/ChangeLog:
* configure.ac: Source bfd/development.sh.
* configure: Re-generate.
---
gdb/configure | 5 +++++
gdb/selftest.m4 | 4 ++++
gdbserver/configure | 5 +++++
gdbsupport/configure | 8 ++++++++
gdbsupport/configure.ac | 3 +++
5 files changed, 25 insertions(+)
@@ -19186,6 +19186,11 @@ $as_echo "#define GDB_DEFAULT_HOST_CHARSET \"UTF-8\"" >>confdefs.h
# The default value of this option changes depending whether we're on
# development mode (in which case it's "true") or not (in which case
# it's "false").
+
+if test "x$development" != xtrue && test "x$development" != xfalse; then :
+ as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5
+fi
+
# Check whether --enable-unit-tests was given.
if test "${enable_unit_tests+set}" = set; then :
enableval=$enable_unit_tests; case "${enableval}" in
@@ -27,6 +27,10 @@ AC_DEFUN([GDB_AC_SELFTEST],[
# The default value of this option changes depending whether we're on
# development mode (in which case it's "true") or not (in which case
# it's "false").
+
+AS_IF([test "x$development" != xtrue && test "x$development" != xfalse],
+ [AC_MSG_ERROR([Invalid value for \$development, got "$development", expecting "true" or "false".])])
+
AC_ARG_ENABLE(unit-tests,
AS_HELP_STRING([--enable-unit-tests],
[Enable the inclusion of unit tests when compiling GDB]),
@@ -6083,6 +6083,11 @@ fi
# The default value of this option changes depending whether we're on
# development mode (in which case it's "true") or not (in which case
# it's "false").
+
+if test "x$development" != xtrue && test "x$development" != xfalse; then :
+ as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5
+fi
+
# Check whether --enable-unit-tests was given.
if test "${enable_unit_tests+set}" = set; then :
enableval=$enable_unit_tests; case "${enableval}" in
@@ -3538,6 +3538,9 @@ fi
AM_BACKSLASH='\'
+# Set the 'development' global.
+. $srcdir/../bfd/development.sh
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -10603,6 +10606,11 @@ $as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; }
# The default value of this option changes depending whether we're on
# development mode (in which case it's "true") or not (in which case
# it's "false").
+
+if test "x$development" != xtrue && test "x$development" != xfalse; then :
+ as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5
+fi
+
# Check whether --enable-unit-tests was given.
if test "${enable_unit_tests+set}" = set; then :
enableval=$enable_unit_tests; case "${enableval}" in
@@ -25,6 +25,9 @@ AC_CONFIG_AUX_DIR(..)
AM_INIT_AUTOMAKE
AM_SILENT_RULES([yes])
+# Set the 'development' global.
+. $srcdir/../bfd/development.sh
+
AC_PROG_CC
AC_PROG_CXX
AC_PROG_RANLIB