Add Guile as an extension language.

* NEWS: Mention Guile scripting.
	* Makefile.in (SUBDIR_GUILE_OBS): New variable.
	(SUBDIR_GUILE_SRCS, SUBDIR_GUILE_DEPS): New variables
	(SUBDIR_GUILE_LDFLAGS, SUBDIR_GUILE_CFLAGS): New variables.
	(INTERNAL_CPPFLAGS): Add GUILE_CPPFLAGS.
	(CLIBS): Add GUILE_LIBS.
	(install-guile): New rule.
	(guile.o): New rule.
	(scm-arch.o, scm-auto-load.o, scm-block.o): New rules.
	(scm-breakpoint.o, scm-disasm.o, scm-exception.o): New rules.
	(scm-frame.o, scm-iterator.o, scm-lazy-string.o): New rules.
	(scm-math.o, scm-objfile.o, scm-ports.o): New rules.
	(scm-pretty-print.o, scm-safe-call.o, scm-gsmob.o): New rules.
	(scm-string.o, scm-symbol.o, scm-symtab.o): New rules.
	(scm-type.o, scm-utils.o, scm-value.o): New rules.
	* configure.ac: New option --with-guile.
	* configure: Regenerate.
	* config.in: Regenerate.
	* auto-load.c: Remove #include "python/python.h".  Add #include
	"gdb/section-scripts.h".
	(source_section_scripts): Handle Guile scripts.
	(_initialize_auto_load): Add name of Guile objfile script to
	scripts-directory help text.
	* breakpoint.c (condition_command): Tweak comment to include Scheme.
	* breakpoint.h (gdbscm_breakpoint_object): Add forward decl.
	(struct breakpoint): New member scm_bp_object.
	* defs.h (enum command_control_type): New value guile_control.
	* cli/cli-cmds.c: Remove #include "python/python.h".  Add #include
	"extension.h".
	(show_user): Update comment.
	(_initialize_cli_cmds): Update help text for "show user".  Update help
	text for max-user-call-depth.
	* cli/cli-script.c: Remove #include "python/python.h".  Add #include
	"extension.h".
	(multi_line_command_p): Add guile_control.
	(print_command_lines): Handle guile_control.
	(execute_control_command, recurse_read_control_structure): Ditto.
	(process_next_line): Recognize "guile" commands.
	* disasm.c (gdb_disassemble_info): Make non-static.
	* disasm.h: #include "dis-asm.h".
	(struct gdbarch): Add forward decl.
	(gdb_disassemble_info): Declare.
	* extension.c: #include "guile/guile.h".
	(extension_languages): Add guile.
	(get_ext_lang_defn): Handle EXT_LANG_GDB.
	* extension.h (enum extension_language): New value EXT_LANG_GUILE.
	* gdbtypes.c (get_unsigned_type_max): New function.
	(get_signed_type_minmax): New function.
	* gdbtypes.h (get_unsigned_type_max): Declare.
	(get_signed_type_minmax): Declare.
	* guile/README: New file.
	* guile/guile-internal.h: New file.
	* guile/guile.c: New file.
	* guile/guile.h: New file.
	* guile/scm-arch.c: New file.
	* guile/scm-auto-load.c: New file.
	* guile/scm-block.c: New file.
	* guile/scm-breakpoint.c: New file.
	* guile/scm-disasm.c: New file.
	* guile/scm-exception.c: New file.
	* guile/scm-frame.c: New file.
	* guile/scm-gsmob.c: New file.
	* guile/scm-iterator.c: New file.
	* guile/scm-lazy-string.c: New file.
	* guile/scm-math.c: New file.
	* guile/scm-objfile.c: New file.
	* guile/scm-ports.c: New file.
	* guile/scm-pretty-print.c: New file.
	* guile/scm-safe-call.c: New file.
	* guile/scm-string.c: New file.
	* guile/scm-symbol.c: New file.
	* guile/scm-symtab.c: New file.
	* guile/scm-type.c: New file.
	* guile/scm-utils.c: New file.
	* guile/scm-value.c: New file.
	* guile/lib/gdb.scm: New file.
	* guile/lib/gdb/boot.scm: New file.
	* guile/lib/gdb/experimental.scm: New file.
	* guile/lib/gdb/init.scm: New file.
	* guile/lib/gdb/iterator.scm: New file.
	* guile/lib/gdb/printing.scm: New file.
	* guile/lib/gdb/types.scm: New file.
	* data-directory/Makefile.in (GUILE_SRCDIR): New variable.
	(VPATH): Add $(GUILE_SRCDIR).
	(GUILE_DIR): New variable.
	(GUILE_INSTALL_DIR, GUILE_FILES): New variables.
	(all): Add stamp-guile dependency.
	(stamp-guile): New rule.
	(clean-guile, install-guile, uninstall-guile): New rules.
	(install-only): Add install-guile dependency.
	(uninstall): Add uninstall-guile dependency.
	(clean): Add clean-guile dependency.

	doc/
	* Makefile.in (GDB_DOC_FILES): Add guile.texi.
	* gdb.texinfo (Auto-loading): Add set/show auto-load guile-scripts.
	(Extending GDB): New menu entries Guile, Multiple Extension Languages.
	(Guile docs): Include guile.texi.
	(objfile-gdbdotext file): Add objfile-gdb.scm.
	(dotdebug_gdb_scripts section): Mention Guile scripts.
	(Multiple Extension Languages): New node.
	* guile.texi: New file.

	testsuite/
	* configure.ac (AC_OUTPUT): Add gdb.guile.
	* configure: Regenerate.
	* lib/gdb-guile.exp: New file.
	* lib/gdb.exp (get_target_charset): New function.
	* gdb.base/help.exp: Update expected output from "apropos apropos".
	* gdb.guile/Makefile.in: New file.
	* gdb.guile/guile.exp: New file.
	* gdb.guile/scm-arch.c: New file.
	* gdb.guile/scm-arch.exp: New file.
	* gdb.guile/scm-block.c: New file.
	* gdb.guile/scm-block.exp: New file.
	* gdb.guile/scm-breakpoint.c: New file.
	* gdb.guile/scm-breakpoint.exp: New file.
	* gdb.guile/scm-disasm.c: New file.
	* gdb.guile/scm-disasm.exp: New file.
	* gdb.guile/scm-equal.c: New file.
	* gdb.guile/scm-equal.exp: New file.
	* gdb.guile/scm-error.exp: New file.
	* gdb.guile/scm-error.scm: New file.
	* gdb.guile/scm-frame-args.c: New file.
	* gdb.guile/scm-frame-args.exp: New file.
	* gdb.guile/scm-frame-args.scm: New file.
	* gdb.guile/scm-frame-inline.c: New file.
	* gdb.guile/scm-frame-inline.exp: New file.
	* gdb.guile/scm-frame.c: New file.
	* gdb.guile/scm-frame.exp: New file.
	* gdb.guile/scm-generics.exp: New file.
	* gdb.guile/scm-gsmob.exp: New file.
	* gdb.guile/scm-iterator.c: New file.
	* gdb.guile/scm-iterator.exp: New file.
	* gdb.guile/scm-math.c: New file.
	* gdb.guile/scm-math.exp: New file.
	* gdb.guile/scm-objfile-script-gdb.in: New file.
	* gdb.guile/scm-objfile-script.c: New file.
	* gdb.guile/scm-objfile-script.exp: New file.
	* gdb.guile/scm-objfile.c: New file.
	* gdb.guile/scm-objfile.exp: New file.
	* gdb.guile/scm-ports.exp: New file.
	* gdb.guile/scm-pretty-print.c: New file.
	* gdb.guile/scm-pretty-print.exp: New file.
	* gdb.guile/scm-pretty-print.scm: New file.
	* gdb.guile/scm-section-script.c: New file.
	* gdb.guile/scm-section-script.exp: New file.
	* gdb.guile/scm-section-script.scm: New file.
	* gdb.guile/scm-symbol.c: New file.
	* gdb.guile/scm-symbol.exp: New file.
	* gdb.guile/scm-symtab-2.c: New file.
	* gdb.guile/scm-symtab.c: New file.
	* gdb.guile/scm-symtab.exp: New file.
	* gdb.guile/scm-type.c: New file.
	* gdb.guile/scm-type.exp: New file.
	* gdb.guile/scm-value-cc.cc: New file.
	* gdb.guile/scm-value-cc.exp: New file.
	* gdb.guile/scm-value.c: New file.
	* gdb.guile/scm-value.exp: New file.
	* gdb.guile/source2.scm: New file.
	* gdb.guile/types-module.cc: New file.
	* gdb.guile/types-module.exp: New file.
This commit is contained in:
Doug Evans
2014-02-09 19:40:01 -08:00
parent 7026a7c16e
commit ed3ef33944
114 changed files with 27862 additions and 28 deletions

414
gdb/configure vendored
View File

@@ -658,6 +658,9 @@ TARGET_SYSTEM_ROOT
CONFIG_LDFLAGS
RDYNAMIC
ALLOCA
GUILE_LIBS
GUILE_CPPFLAGS
pkg_config_prog_path
PYTHON_LIBS
PYTHON_CPPFLAGS
PYTHON_CFLAGS
@@ -813,6 +816,7 @@ with_gnu_ld
enable_rpath
with_libexpat_prefix
with_python
with_guile
enable_libmcheck
with_included_regex
with_sysroot
@@ -1530,6 +1534,8 @@ Optional Packages:
--without-libexpat-prefix don't search for libexpat in includedir and libdir
--with-python[=PYTHON] include python support
(auto/yes/no/<python-program>)
--with-guile[=GUILE] include guile support
(auto/yes/no/<guile-version>/<pkg-config-program>)
--without-included-regex
don't use included regex; this is the default on
systems with version 2 of the GNU C library (use
@@ -8681,6 +8687,414 @@ fi
# -------------------- #
# Check for libguile. #
# -------------------- #
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_path_pkg_config_prog_path+set}" = set; then :
$as_echo_n "(cached) " >&6
else
case $pkg_config_prog_path in
[\\/]* | ?:[\\/]*)
ac_cv_path_pkg_config_prog_path="$pkg_config_prog_path" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_pkg_config_prog_path="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_pkg_config_prog_path" && ac_cv_path_pkg_config_prog_path="missing"
;;
esac
fi
pkg_config_prog_path=$ac_cv_path_pkg_config_prog_path
if test -n "$pkg_config_prog_path"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkg_config_prog_path" >&5
$as_echo "$pkg_config_prog_path" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
# Check whether --with-guile was given.
if test "${with_guile+set}" = set; then :
withval=$with_guile;
else
with_guile=auto
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use guile" >&5
$as_echo_n "checking whether to use guile... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_guile" >&5
$as_echo "$with_guile" >&6; }
try_guile_versions="guile-2.0"
have_libguile=no
case "${with_guile}" in
no)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: guile support disabled; some features will be unavailable." >&5
$as_echo "$as_me: WARNING: guile support disabled; some features will be unavailable." >&2;}
;;
auto)
pkg_config=${pkg_config_prog_path}
guile_version_list=${try_guile_versions}
flag_errors=no
if test "${pkg_config}" = "missing"; then
as_fn_error "pkg-config program not found" "$LINENO" 5
fi
if test ! -f "${pkg_config}"; then
as_fn_error "pkg-config program ${pkg_config} not found" "$LINENO" 5
fi
found_usable_guile=checking
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable guile from ${pkg_config}" >&5
$as_echo_n "checking for usable guile from ${pkg_config}... " >&6; }
for guile_version in ${guile_version_list}; do
${pkg_config} --exists ${guile_version} 2>/dev/null
if test $? != 0; then
continue
fi
new_CPPFLAGS=`${pkg_config} --cflags ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --cflags ${guile_version}" "$LINENO" 5
fi
new_LIBS=`${pkg_config} --libs ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --libs ${guile_version}" "$LINENO" 5
fi
found_usable_guile=${guile_version}
break
done
if test "${found_usable_guile}" = "checking"; then
if test "${flag_errors}" = "yes"; then
as_fn_error "unable to find usable guile version from \"${guile_version_list}\"" "$LINENO" 5
else
found_usable_guile=no
fi
fi
if test "${found_usable_guile}" != no; then
save_CPPFLAGS=$CPPFLAGS
save_LIBS=$LIBS
CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
LIBS="$LIBS $new_LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include "libguile.h"
int
main ()
{
scm_init_guile ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
have_libguile=yes
GUILE_CPPFLAGS=$new_CPPFLAGS
GUILE_LIBS=$new_LIBS
else
found_usable_guile=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS=$save_CPPFLAGS
LIBS=$save_LIBS
if test "${found_usable_guile}" = no; then
if test "${flag_errors}" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error "linking guile version ${guile_version} test program failed
See \`config.log' for more details." "$LINENO" 5; }
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_guile}" >&5
$as_echo "${found_usable_guile}" >&6; }
;;
yes)
pkg_config=${pkg_config_prog_path}
guile_version_list=${try_guile_versions}
flag_errors=yes
if test "${pkg_config}" = "missing"; then
as_fn_error "pkg-config program not found" "$LINENO" 5
fi
if test ! -f "${pkg_config}"; then
as_fn_error "pkg-config program ${pkg_config} not found" "$LINENO" 5
fi
found_usable_guile=checking
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable guile from ${pkg_config}" >&5
$as_echo_n "checking for usable guile from ${pkg_config}... " >&6; }
for guile_version in ${guile_version_list}; do
${pkg_config} --exists ${guile_version} 2>/dev/null
if test $? != 0; then
continue
fi
new_CPPFLAGS=`${pkg_config} --cflags ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --cflags ${guile_version}" "$LINENO" 5
fi
new_LIBS=`${pkg_config} --libs ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --libs ${guile_version}" "$LINENO" 5
fi
found_usable_guile=${guile_version}
break
done
if test "${found_usable_guile}" = "checking"; then
if test "${flag_errors}" = "yes"; then
as_fn_error "unable to find usable guile version from \"${guile_version_list}\"" "$LINENO" 5
else
found_usable_guile=no
fi
fi
if test "${found_usable_guile}" != no; then
save_CPPFLAGS=$CPPFLAGS
save_LIBS=$LIBS
CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
LIBS="$LIBS $new_LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include "libguile.h"
int
main ()
{
scm_init_guile ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
have_libguile=yes
GUILE_CPPFLAGS=$new_CPPFLAGS
GUILE_LIBS=$new_LIBS
else
found_usable_guile=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS=$save_CPPFLAGS
LIBS=$save_LIBS
if test "${found_usable_guile}" = no; then
if test "${flag_errors}" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error "linking guile version ${guile_version} test program failed
See \`config.log' for more details." "$LINENO" 5; }
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_guile}" >&5
$as_echo "${found_usable_guile}" >&6; }
;;
[\\/]* | ?:[\\/]*)
pkg_config=${with_guile}
guile_version_list=${try_guile_versions}
flag_errors=yes
if test "${pkg_config}" = "missing"; then
as_fn_error "pkg-config program not found" "$LINENO" 5
fi
if test ! -f "${pkg_config}"; then
as_fn_error "pkg-config program ${pkg_config} not found" "$LINENO" 5
fi
found_usable_guile=checking
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable guile from ${pkg_config}" >&5
$as_echo_n "checking for usable guile from ${pkg_config}... " >&6; }
for guile_version in ${guile_version_list}; do
${pkg_config} --exists ${guile_version} 2>/dev/null
if test $? != 0; then
continue
fi
new_CPPFLAGS=`${pkg_config} --cflags ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --cflags ${guile_version}" "$LINENO" 5
fi
new_LIBS=`${pkg_config} --libs ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --libs ${guile_version}" "$LINENO" 5
fi
found_usable_guile=${guile_version}
break
done
if test "${found_usable_guile}" = "checking"; then
if test "${flag_errors}" = "yes"; then
as_fn_error "unable to find usable guile version from \"${guile_version_list}\"" "$LINENO" 5
else
found_usable_guile=no
fi
fi
if test "${found_usable_guile}" != no; then
save_CPPFLAGS=$CPPFLAGS
save_LIBS=$LIBS
CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
LIBS="$LIBS $new_LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include "libguile.h"
int
main ()
{
scm_init_guile ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
have_libguile=yes
GUILE_CPPFLAGS=$new_CPPFLAGS
GUILE_LIBS=$new_LIBS
else
found_usable_guile=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS=$save_CPPFLAGS
LIBS=$save_LIBS
if test "${found_usable_guile}" = no; then
if test "${flag_errors}" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error "linking guile version ${guile_version} test program failed
See \`config.log' for more details." "$LINENO" 5; }
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_guile}" >&5
$as_echo "${found_usable_guile}" >&6; }
;;
"" | */*)
# Disallow --with=guile="" and --with-guile=foo/bar.
as_fn_error "invalid value for --with-guile" "$LINENO" 5
;;
*)
# A space separate list of guile versions to try, in order.
pkg_config=${pkg_config_prog_path}
guile_version_list=${with_guile}
flag_errors=yes
if test "${pkg_config}" = "missing"; then
as_fn_error "pkg-config program not found" "$LINENO" 5
fi
if test ! -f "${pkg_config}"; then
as_fn_error "pkg-config program ${pkg_config} not found" "$LINENO" 5
fi
found_usable_guile=checking
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable guile from ${pkg_config}" >&5
$as_echo_n "checking for usable guile from ${pkg_config}... " >&6; }
for guile_version in ${guile_version_list}; do
${pkg_config} --exists ${guile_version} 2>/dev/null
if test $? != 0; then
continue
fi
new_CPPFLAGS=`${pkg_config} --cflags ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --cflags ${guile_version}" "$LINENO" 5
fi
new_LIBS=`${pkg_config} --libs ${guile_version}`
if test $? != 0; then
as_fn_error "failure running pkg-config --libs ${guile_version}" "$LINENO" 5
fi
found_usable_guile=${guile_version}
break
done
if test "${found_usable_guile}" = "checking"; then
if test "${flag_errors}" = "yes"; then
as_fn_error "unable to find usable guile version from \"${guile_version_list}\"" "$LINENO" 5
else
found_usable_guile=no
fi
fi
if test "${found_usable_guile}" != no; then
save_CPPFLAGS=$CPPFLAGS
save_LIBS=$LIBS
CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
LIBS="$LIBS $new_LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include "libguile.h"
int
main ()
{
scm_init_guile ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
have_libguile=yes
GUILE_CPPFLAGS=$new_CPPFLAGS
GUILE_LIBS=$new_LIBS
else
found_usable_guile=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS=$save_CPPFLAGS
LIBS=$save_LIBS
if test "${found_usable_guile}" = no; then
if test "${flag_errors}" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error "linking guile version ${guile_version} test program failed
See \`config.log' for more details." "$LINENO" 5; }
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${found_usable_guile}" >&5
$as_echo "${found_usable_guile}" >&6; }
;;
esac
if test "${have_libguile}" != no; then
$as_echo "#define HAVE_GUILE 1" >>confdefs.h
CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_GUILE_OBS)"
CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_GUILE_DEPS)"
CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_GUILE_SRCS)"
CONFIG_INSTALL="$CONFIG_INSTALL install-guile"
ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_GUILE_CFLAGS)"
else
# Even if Guile support is not compiled in, we need to have these files
# included.
CONFIG_OBS="$CONFIG_OBS guile.o"
CONFIG_SRCS="$CONFIG_SRCS guile/guile.c"
fi
# --------------------- #
# Check for libmcheck. #
# --------------------- #