This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [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: Sun, 09 Feb 2014 21:36:53 -0800
- Subject: Re: [PATCH v2 01/36] Guile extension language: configure changes
- Authentication-results: sourceware.org; auth=none
- References: <52dd9a9a dot 488b440a dot 4678 dot 03e6 at mx dot google dot com>
Doug Evans <xdje42@gmail.com> writes:
> 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.
Here's the version I committed.
Subject: [PATCH v3 01/36] Guile extension language: configure changes
This patch has the makefile and configure changes.
Changes from v2:
- use pkg-config instead of guile-config
Changes from v1:
- scm-smob.c renamed to scm-gsmob.c
2014-02-09 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..b97de24 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,99 @@ tui-winsource.o: $(srcdir)/tui/tui-winsource.c
$(COMPILE) $(srcdir)/tui/tui-winsource.c
$(POSTCOMPILE)
+# 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..ef604a4 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1053,6 +1053,154 @@ AC_SUBST(PYTHON_CFLAGS)
AC_SUBST(PYTHON_CPPFLAGS)
AC_SUBST(PYTHON_LIBS)
+# -------------------- #
+# Check for libguile. #
+# -------------------- #
+
+dnl We check guile with pkg-config.
+
+AC_PATH_PROG(pkg_config_prog_path, pkg-config, missing)
+
+dnl Utility to simplify finding libguile.
+dnl $1 = pkg-config-program
+dnl $2 = space-separate list of guile versions to try
+dnl $3 = yes|no, indicating whether to flag errors or ignore them
+dnl $4 = the shell variable to assign the result to
+dnl If libguile is found we store "yes" here.
+
+AC_DEFUN([AC_TRY_LIBGUILE],
+[
+ pkg_config=$1
+ guile_version_list=$2
+ flag_errors=$3
+ define([have_libguile_var],$4)
+ if test "${pkg_config}" = "missing"; then
+ AC_ERROR(pkg-config program not found)
+ fi
+ if test ! -f "${pkg_config}"; then
+ AC_ERROR(pkg-config program ${pkg_config} not found)
+ fi
+ found_usable_guile=checking
+ AC_MSG_CHECKING([for usable guile from ${pkg_config}])
+ for guile_version in ${guile_version_list}; do
+ ${pkg_config} --exists ${guile_version} 2>/dev/null
+ if test $? != 0; then
+ continue
+ fi
+ dnl pkg-config says the package exists, so if we get an error now,
+ dnl that's bad.
+ new_CPPFLAGS=`${pkg_config} --cflags ${guile_version}`
+ if test $? != 0; then
+ AC_ERROR(failure running pkg-config --cflags ${guile_version})
+ fi
+ new_LIBS=`${pkg_config} --libs ${guile_version}`
+ if test $? != 0; then
+ AC_ERROR(failure running pkg-config --libs ${guile_version})
+ fi
+ dnl If we get this far, great.
+ found_usable_guile=${guile_version}
+ break
+ done
+ if test "${found_usable_guile}" = "checking"; then
+ if test "${flag_errors}" = "yes"; then
+ AC_ERROR(unable to find usable guile version from "${guile_version_list}")
+ else
+ found_usable_guile=no
+ fi
+ fi
+ dnl One final sanity check.
+ dnl The user could have said --with-guile=python-2.7.
+ if test "${found_usable_guile}" != no; 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
+ GUILE_CPPFLAGS=$new_CPPFLAGS
+ GUILE_LIBS=$new_LIBS],
+ [found_usable_guile=no])
+ CPPFLAGS=$save_CPPFLAGS
+ LIBS=$save_LIBS
+ if test "${found_usable_guile}" = no; then
+ if test "${flag_errors}" = yes; then
+ AC_MSG_FAILURE(linking guile version ${guile_version} test program failed)
+ fi
+ fi
+ 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 pkg-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 guile-version [guile-version-choice-2 ...] -
+dnl A space-separated list of guile package versions to try.
+dnl These are passed to pkg-config as-is.
+dnl E.g., guile-2.0 or guile-2.2-uninstalled
+dnl This requires making sure PKG_CONFIG_PATH is set appropriately.
+dnl /path/to/pkg-config -
+dnl Use this pkg-config program.
+dnl NOTE: This needn't be the "real" pkg-config program.
+dnl It could be a shell script. It is invoked as:
+dnl pkg-config --exists $version
+dnl pkg-config --cflags $version
+dnl pkg-config --libs $version
+dnl $version will be the default guile version (currently guile-2.0),
+dnl but the program is free to ignore this.
+
+AC_ARG_WITH(guile,
+ AS_HELP_STRING([--with-guile@<:@=GUILE@:>@], [include guile support (auto/yes/no/<guile-version>/<pkg-config-program>)]),
+ [], [with_guile=auto])
+AC_MSG_CHECKING([whether to use guile])
+AC_MSG_RESULT([$with_guile])
+
+try_guile_versions="guile-2.0"
+have_libguile=no
+case "${with_guile}" in
+no)
+ AC_MSG_WARN([guile support disabled; some features will be unavailable.])
+ ;;
+auto)
+ AC_TRY_LIBGUILE(${pkg_config_prog_path}, ${try_guile_versions}, no, have_libguile)
+ ;;
+yes)
+ AC_TRY_LIBGUILE(${pkg_config_prog_path}, ${try_guile_versions}, yes, have_libguile)
+ ;;
+[[\\/]]* | ?:[[\\/]]*)
+ AC_TRY_LIBGUILE(${with_guile}, ${try_guile_versions}, yes, have_libguile)
+ ;;
+"" | */*)
+ # Disallow --with=guile="" and --with-guile=foo/bar.
+ AC_ERROR(invalid value for --with-guile)
+ ;;
+*)
+ # A space separate list of guile versions to try, in order.
+ AC_TRY_LIBGUILE(${pkg_config_prog_path}, ${with_guile}, yes, have_libguile)
+ ;;
+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