This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH v2 01/36] Guile extension language: configure changes
- From: Doug Evans <xdje42 at gmail dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 20 Jan 2014 13:52:02 -0800
- Subject: [PATCH v2 01/36] Guile extension language: configure changes
- Authentication-results: sourceware.org; auth=none
This patch has the makefile and configure changes.
Changes from v1:
- scm-smob.c renamed to scm-gsmob.c
2014-01-20 Doug Evans <xdje42@gmail.com>
* 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.
testsuite/
* configure.ac (AC_OUTPUT): Add gdb.guile.
* configure: Regenerate.
* gdb.guile/Makefile.in: New file.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index fec59a2..b2ff0cf 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -275,6 +275,58 @@ SUBDIR_TUI_LDFLAGS=
SUBDIR_TUI_CFLAGS= \
-DTUI=1
+# Guile sub directory definitons for guile support.
+
+SUBDIR_GUILE_OBS = \
+ guile.o \
+ scm-arch.o \
+ scm-auto-load.o \
+ scm-block.o \
+ scm-breakpoint.o \
+ scm-disasm.o \
+ scm-exception.o \
+ scm-frame.o \
+ scm-iterator.o \
+ scm-lazy-string.o \
+ scm-objfile.o \
+ scm-math.o \
+ scm-ports.o \
+ scm-pretty-print.o \
+ scm-safe-call.o \
+ scm-gsmob.o \
+ scm-string.o \
+ scm-symbol.o \
+ scm-symtab.o \
+ scm-type.o \
+ scm-utils.o \
+ scm-value.o
+SUBDIR_GUILE_SRCS = \
+ guile/guile.c \
+ guile/scm-arch.c \
+ guile/scm-auto-load.c \
+ guile/scm-block.c \
+ guile/scm-breakpoint.c \
+ guile/scm-disasm.c \
+ guile/scm-exception.c \
+ guile/scm-frame.c \
+ guile/scm-iterator.c \
+ guile/scm-lazy-string.c \
+ guile/scm-objfile.c \
+ guile/scm-math.c \
+ guile/scm-ports.c \
+ guile/scm-pretty-print.c \
+ guile/scm-safe-call.c \
+ guile/scm-gsmob.c \
+ guile/scm-string.c \
+ guile/scm-symbol.c \
+ guile/scm-symtab.c \
+ guile/scm-type.c \
+ guile/scm-utils.c \
+ guile/scm-value.c
+SUBDIR_GUILE_DEPS =
+SUBDIR_GUILE_LDFLAGS=
+SUBDIR_GUILE_CFLAGS=
+
#
# python sub directory definitons
#
@@ -455,7 +507,7 @@ CFLAGS = @CFLAGS@
# are sometimes a little generic, we think that the risk of collision
# with other header files is high. If that happens, we try to mitigate
# a bit the consequences by putting the Python includes last in the list.
-INTERNAL_CPPFLAGS = @CPPFLAGS@ @PYTHON_CPPFLAGS@
+INTERNAL_CPPFLAGS = @CPPFLAGS@ @GUILE_CPPFLAGS@ @PYTHON_CPPFLAGS@
# Need to pass this to testsuite for "make check". Probably should be
# consistent with top-level Makefile.in and gdb/testsuite/Makefile.in
@@ -488,7 +540,8 @@ INTERNAL_LDFLAGS = $(CFLAGS) $(GLOBAL_CFLAGS) $(MH_LDFLAGS) $(LDFLAGS) $(CONFIG_
# XM_CLIBS, defined in *config files, have host-dependent libs.
# LIBIBERTY appears twice on purpose.
CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
- $(XM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ @PYTHON_LIBS@ \
+ $(XM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) \
+ @LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \
$(LIBEXPAT) $(LIBLZMA) $(LIBBABELTRACE) \
$(LIBIBERTY) $(WIN32LIBS) $(LIBGNU)
CDEPS = $(XM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) \
@@ -1113,6 +1166,9 @@ install-only: $(CONFIG_INSTALL)
fi
@$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
+install-guile:
+ $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/guile/gdb
+
install-python:
$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
@@ -2164,7 +2220,100 @@ tui-winsource.o: $(srcdir)/tui/tui-winsource.c
$(COMPILE) $(srcdir)/tui/tui-winsource.c
$(POSTCOMPILE)
+# Guile support.
+# gdb/guile dependencies
#
+# Need to explicitly specify the compile rule as make will do nothing
+# or try to compile the object file into the sub-directory.
+
+guile.o: $(srcdir)/guile/guile.c
+ $(COMPILE) $(srcdir)/guile/guile.c
+ $(POSTCOMPILE)
+
+scm-arch.o: $(srcdir)/guile/scm-arch.c
+ $(COMPILE) $(srcdir)/guile/scm-arch.c
+ $(POSTCOMPILE)
+
+scm-auto-load.o: $(srcdir)/guile/scm-auto-load.c
+ $(COMPILE) $(srcdir)/guile/scm-auto-load.c
+ $(POSTCOMPILE)
+
+scm-block.o: $(srcdir)/guile/scm-block.c
+ $(COMPILE) $(srcdir)/guile/scm-block.c
+ $(POSTCOMPILE)
+
+scm-breakpoint.o: $(srcdir)/guile/scm-breakpoint.c
+ $(COMPILE) $(srcdir)/guile/scm-breakpoint.c
+ $(POSTCOMPILE)
+
+scm-disasm.o: $(srcdir)/guile/scm-disasm.c
+ $(COMPILE) $(srcdir)/guile/scm-disasm.c
+ $(POSTCOMPILE)
+
+scm-exception.o: $(srcdir)/guile/scm-exception.c
+ $(COMPILE) $(srcdir)/guile/scm-exception.c
+ $(POSTCOMPILE)
+
+scm-frame.o: $(srcdir)/guile/scm-frame.c
+ $(COMPILE) $(srcdir)/guile/scm-frame.c
+ $(POSTCOMPILE)
+
+scm-iterator.o: $(srcdir)/guile/scm-iterator.c
+ $(COMPILE) $(srcdir)/guile/scm-iterator.c
+ $(POSTCOMPILE)
+
+scm-lazy-string.o: $(srcdir)/guile/scm-lazy-string.c
+ $(COMPILE) $(srcdir)/guile/scm-lazy-string.c
+ $(POSTCOMPILE)
+
+scm-math.o: $(srcdir)/guile/scm-math.c
+ $(COMPILE) $(srcdir)/guile/scm-math.c
+ $(POSTCOMPILE)
+
+scm-objfile.o: $(srcdir)/guile/scm-objfile.c
+ $(COMPILE) $(srcdir)/guile/scm-objfile.c
+ $(POSTCOMPILE)
+
+scm-ports.o: $(srcdir)/guile/scm-ports.c
+ $(COMPILE) $(srcdir)/guile/scm-ports.c
+ $(POSTCOMPILE)
+
+scm-pretty-print.o: $(srcdir)/guile/scm-pretty-print.c
+ $(COMPILE) $(srcdir)/guile/scm-pretty-print.c
+ $(POSTCOMPILE)
+
+scm-safe-call.o: $(srcdir)/guile/scm-safe-call.c
+ $(COMPILE) $(srcdir)/guile/scm-safe-call.c
+ $(POSTCOMPILE)
+
+scm-gsmob.o: $(srcdir)/guile/scm-gsmob.c
+ $(COMPILE) $(srcdir)/guile/scm-gsmob.c
+ $(POSTCOMPILE)
+
+scm-string.o: $(srcdir)/guile/scm-string.c
+ $(COMPILE) $(srcdir)/guile/scm-string.c
+ $(POSTCOMPILE)
+
+scm-symbol.o: $(srcdir)/guile/scm-symbol.c
+ $(COMPILE) $(srcdir)/guile/scm-symbol.c
+ $(POSTCOMPILE)
+
+scm-symtab.o: $(srcdir)/guile/scm-symtab.c
+ $(COMPILE) $(srcdir)/guile/scm-symtab.c
+ $(POSTCOMPILE)
+
+scm-type.o: $(srcdir)/guile/scm-type.c
+ $(COMPILE) $(srcdir)/guile/scm-type.c
+ $(POSTCOMPILE)
+
+scm-utils.o: $(srcdir)/guile/scm-utils.c
+ $(COMPILE) $(srcdir)/guile/scm-utils.c
+ $(POSTCOMPILE)
+
+scm-value.o: $(srcdir)/guile/scm-value.c
+ $(COMPILE) $(srcdir)/guile/scm-value.c
+ $(POSTCOMPILE)
+
# gdb/python/ dependencies
#
# Need to explicitly specify the compile rule as make will do nothing
diff --git a/gdb/configure.ac b/gdb/configure.ac
index fe797cc..c87ca22 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1053,6 +1053,116 @@ AC_SUBST(PYTHON_CFLAGS)
AC_SUBST(PYTHON_CPPFLAGS)
AC_SUBST(PYTHON_LIBS)
+# -------------------- #
+# Check for libguile. #
+# -------------------- #
+
+dnl Utility to simplify finding libguile.
+dnl $1 = guile-config-program
+dnl $2 = yes|no, indicating whether to flag errors or ignore them
+dnl $3 = the shell variable to assign the result to
+dnl If libguile is found we store "yes" here.
+
+dnl FIXME: Need to support pkg-config guile-2.0 --cflags|--libs
+
+AC_DEFUN([AC_TRY_LIBGUILE],
+[
+ guile_config=$1
+ flag_errors=$2
+ define([have_libguile_var],$3)
+ found_usable_guile=checking
+ AC_MSG_CHECKING([for usable guile from ${guile_config}])
+ new_CPPFLAGS=`${guile_config} compile`
+ if test $? != 0; then
+ if test "${flag_errors}" = yes; then
+ AC_ERROR(failure running guile-config compile)
+ fi
+ found_usable_guile=no
+ fi
+ new_LIBS=`${guile_config} link`
+ if test $? != 0; then
+ if test "${flag_errors}" = yes; then
+ AC_ERROR(failure running guile-config link)
+ fi
+ found_usable_guile=no
+ fi
+ if test "${found_usable_guile}" = checking; then
+ save_CPPFLAGS=$CPPFLAGS
+ save_LIBS=$LIBS
+ CPPFLAGS="$CPPFLAGS $new_CPPFLAGS"
+ LIBS="$LIBS $new_LIBS"
+ AC_LINK_IFELSE(AC_LANG_PROGRAM([[#include "libguile.h"]],
+ [[scm_init_guile ();]]),
+ [have_libguile_var=yes
+ found_usable_guile=yes
+ GUILE_CPPFLAGS=$new_CPPFLAGS
+ GUILE_LIBS=$new_LIBS],
+ [found_usable_guile=no])
+ CPPFLAGS=$save_CPPFLAGS
+ LIBS=$save_LIBS
+ fi
+ AC_MSG_RESULT([${found_usable_guile}])
+])
+
+dnl There are several different values for --with-guile:
+dnl
+dnl no - Don't include guile support.
+dnl yes - Include guile support, error if it's missing.
+dnl The guile-config program must be in $PATH.
+dnl auto - Same as "yes", but if guile is missing from the system,
+dnl fall back to "no".
+dnl /path/to/guile-config -
+dnl Use the guile-config program located in this directory.
+dnl NOTE: This needn't be the "real" guile-config program.
+dnl In a cross-compilation scenario (build != host), this could be
+dnl a shell script that provides what guile-config provides for
+dnl "compile" and "link".
+
+AC_ARG_WITH(guile,
+ AS_HELP_STRING([--with-guile@<:@=GUILE@:>@], [include guile support (auto/yes/no/<guile-config-program>)]),
+ [], [with_guile=auto])
+AC_MSG_CHECKING([whether to use guile])
+AC_MSG_RESULT([$with_guile])
+
+have_libguile=no
+case "${with_guile}" in
+no)
+ AC_MSG_WARN([guile support disabled; some features may be unavailable.])
+ ;;
+auto)
+ AC_TRY_LIBGUILE(guile-config, no, have_libguile)
+ ;;
+yes)
+ AC_TRY_LIBGUILE(guile-config, yes, have_libguile)
+ ;;
+[[\\/]]* | ?:[[\\/]]*)
+ AC_TRY_LIBGUILE(${with_guile}, yes, have_libguile)
+ ;;
+*/*)
+ # Disallow --with-guile=foo/bar.
+ AC_ERROR(invalid value for --with-guile)
+ ;;
+*)
+ AC_ERROR(invalid value for --with-guile)
+ ;;
+esac
+
+if test "${have_libguile}" != no; then
+ AC_DEFINE(HAVE_GUILE, 1, [Define if Guile interpreter is being linked in.])
+ 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
+AC_SUBST(GUILE_CPPFLAGS)
+AC_SUBST(GUILE_LIBS)
+
# --------------------- #
# Check for libmcheck. #
# --------------------- #
diff --git a/gdb/testsuite/configure.ac b/gdb/testsuite/configure.ac
index f168a3a..1b5cc7e 100644
--- a/gdb/testsuite/configure.ac
+++ b/gdb/testsuite/configure.ac
@@ -95,7 +95,7 @@ AC_OUTPUT([Makefile \
gdb.server/Makefile gdb.java/Makefile \
gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile \
gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile \
- gdb.hp/gdb.defects/Makefile gdb.linespec/Makefile \
+ gdb.hp/gdb.defects/Makefile gdb.guile/Makefile gdb.linespec/Makefile \
gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile \
gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile \
gdb.perf/Makefile gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile \
diff --git a/gdb/testsuite/gdb.guile/Makefile.in b/gdb/testsuite/gdb.guile/Makefile.in
new file mode 100644
index 0000000..37f9cb0
--- /dev/null
+++ b/gdb/testsuite/gdb.guile/Makefile.in
@@ -0,0 +1,17 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES =
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+ @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+ -rm -f *~ *.o *.ci
+ -rm -f *.dwo *.dwp
+ -rm -f core $(EXECUTABLES) $(MISCELLANEOUS)
+
+distclean maintainer-clean realclean: clean
+ -rm -f Makefile config.status config.log gdb.log gdb.sum