summaryrefslogtreecommitdiff
path: root/gdb/acinclude.m4
diff options
context:
space:
mode:
authorDoug Evans <xdje42@gmail.com>2014-07-26 18:16:27 -0700
committerDoug Evans <xdje42@gmail.com>2014-07-26 18:16:27 -0700
commite76c5d173bbf7137555919dd136004a7c0118af7 (patch)
tree92e8106c379879427bb0ce570c3d0dece75dc020 /gdb/acinclude.m4
parent186fcde0c6134aed28526d925b1360db95d47171 (diff)
downloadbinutils-gdb-e76c5d173bbf7137555919dd136004a7c0118af7.tar.gz
PR guile/17146
* acinclude.m4 (GDB_GUILE_PROGRAM_NAMES): New macro. (GDB_GUILD_TARGET_FLAG, GDB_TRY_GUILD): New macros. * configure.ac: Try to use guild to compile an scm file, if it fails then disable guile support. * configure: Regenerate. * data-directory/Makefile.in (GUILE_SOURCE_FILES): Renamed from GUILE_FILE_LIST. (GUILE_COMPILED_FILES): New variable. (GUILE_FILES) Update. (GUILD, GUILD_TARGET_FLAG, GUILD_COMPILE_FLAGS): New variables. (stamp-guile): Compile scm files. * guile/guile.c (boot_guile_support): New function. (standard_throw_args_p): New function. (print_standard_throw_error, print_throw_error): New functions. (handle_boot_error): New function. (initialize_scheme_side): Rewrite to call boot_guile_support. * guile/lib/gdb/boot.scm: Update %load-compiled-path. Load gdb.go. * guile/lib/gdb/init.scm (%silence-compiler-warnings%): New function.
Diffstat (limited to 'gdb/acinclude.m4')
-rw-r--r--gdb/acinclude.m472
1 files changed, 72 insertions, 0 deletions
diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
index 01d0fd3dade..a3fb9e27ac6 100644
--- a/gdb/acinclude.m4
+++ b/gdb/acinclude.m4
@@ -473,3 +473,75 @@ AC_DEFUN([GDB_AC_CHECK_BFD], [
CFLAGS=$OLD_CFLAGS
LDFLAGS=$OLD_LDFLAGS
LIBS=$OLD_LIBS])
+
+dnl GDB_GUILE_PROGRAM_NAMES([PKG-CONFIG], [VERSION])
+dnl
+dnl Define and substitute 'GUILD' to contain the absolute file name of
+dnl the 'guild' command for VERSION, using PKG-CONFIG. (This is
+dnl similar to Guile's 'GUILE_PROGS' macro.)
+AC_DEFUN([GDB_GUILE_PROGRAM_NAMES], [
+ AC_CACHE_CHECK([for the absolute file name of the 'guild' command],
+ [ac_cv_guild_program_name],
+ [ac_cv_guild_program_name="`$1 $2 --variable guild`"
+
+ # In Guile up to 2.0.11 included, guile-2.0.pc would not define
+ # the 'guild' and 'bindir' variables. In that case, try to guess
+ # what the program name is, at the risk of getting it wrong if
+ # Guile was configured with '--program-suffix' or similar.
+ if test "x$ac_cv_guild_program_name" = "x"; then
+ guile_exec_prefix="`$1 $2 --variable exec_prefix`"
+ ac_cv_guild_program_name="$guile_exec_prefix/bin/guild"
+ fi
+ ])
+
+ if ! "$ac_cv_guild_program_name" --version >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
+ AC_MSG_ERROR(['$ac_cv_guild_program_name' appears to be unusable])
+ fi
+
+ GUILD="$ac_cv_guild_program_name"
+ AC_SUBST([GUILD])
+])
+
+dnl GDB_GUILD_TARGET_FLAG
+dnl
+dnl Compute the value of GUILD_TARGET_FLAG.
+dnl For native builds this is empty.
+dnl For cross builds this is --target=<host>.
+AC_DEFUN([GDB_GUILD_TARGET_FLAG], [
+ if test "$cross_compiling" = no; then
+ GUILD_TARGET_FLAG=
+ else
+ GUILD_TARGET_FLAG="--target=$host"
+ fi
+ AC_SUBST(GUILD_TARGET_FLAG)
+])
+
+dnl GDB_TRY_GUILD([SRC-FILE])
+dnl
+dnl We precompile the .scm files and install them with gdb, so make sure
+dnl guild works for this host.
+dnl The .scm files are precompiled for several reasons:
+dnl 1) To silence Guile during gdb startup (Guile's auto-compilation output
+dnl is unnecessarily verbose).
+dnl 2) Make gdb developers see compilation errors/warnings during the build,
+dnl and not leave it to later when the user runs gdb.
+dnl 3) As a convenience for the user, so that one copy of the files is built
+dnl instead of one copy per user.
+dnl
+dnl Make sure guild can handle this host by trying to compile SRC-FILE, and
+dnl setting ac_cv_guild_ok to yes or no.
+dnl Note that guild can handle cross-compilation.
+dnl It could happen that guild can't handle the host, but guile would still
+dnl work. For the time being we're conservative, and if guild doesn't work
+dnl we punt.
+AC_DEFUN([GDB_TRY_GUILD], [
+ AC_REQUIRE([GDB_GUILD_TARGET_FLAG])
+ AC_CACHE_CHECK([whether guild supports this host],
+ [ac_cv_guild_ok],
+ [echo "$ac_cv_guild_program_name compile $GUILD_TARGET_FLAG -o conftest.go $1" >&AS_MESSAGE_LOG_FD
+ if "$ac_cv_guild_program_name" compile $GUILD_TARGET_FLAG -o conftest.go "$1" >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
+ ac_cv_guild_ok=yes
+ else
+ ac_cv_guild_ok=no
+ fi])
+])