From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22317 invoked by alias); 24 Dec 2013 19:02:51 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 22305 invoked by uid 89); 24 Dec 2013 19:02:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,MSGID_FROM_MTA_HEADER,RCVD_IN_DNSWL_LOW,SPF_PASS,URIBL_BLACK autolearn=no version=3.3.2 X-HELO: mail-pa0-f47.google.com Received: from mail-pa0-f47.google.com (HELO mail-pa0-f47.google.com) (209.85.220.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 24 Dec 2013 19:02:49 +0000 Received: by mail-pa0-f47.google.com with SMTP id kq14so6721696pab.6 for ; Tue, 24 Dec 2013 11:02:47 -0800 (PST) X-Received: by 10.68.212.10 with SMTP id ng10mr10836360pbc.158.1387911767187; Tue, 24 Dec 2013 11:02:47 -0800 (PST) Received: from sspiff.org (173-13-178-53-sfba.hfc.comcastbusiness.net. [173.13.178.53]) by mx.google.com with ESMTPSA id ki1sm43504066pbd.1.2013.12.24.11.02.44 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Dec 2013 11:02:46 -0800 (PST) Message-ID: <52b9da56.011f450a.5d86.7a69@mx.google.com> Received: by sspiff.org (sSMTP sendmail emulation); Tue, 24 Dec 2013 11:02:20 -0800 Date: Tue, 24 Dec 2013 19:02:00 -0000 From: Doug Evans To: gdb-patches@sourceware.org Subject: [PATCH v1 01/36] Guile extension language: configure changes X-IsSubscribed: yes X-SW-Source: 2013-12/txt/msg00923.txt.bz2 This patch has the makefile and configure changes. 2013-12-24 Doug Evans * 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-smob.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 838f27a..3d085fd 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-smob.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-smob.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) \ @@ -1091,6 +1144,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 @@ -2142,7 +2198,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-smob.o: $(srcdir)/guile/scm-smob.c + $(COMPILE) $(srcdir)/guile/scm-smob.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 8e20ce4..130c4cd 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/)]), + [], [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 94f96cc..596e2d7 100644 --- a/gdb/testsuite/configure.ac +++ b/gdb/testsuite/configure.ac @@ -94,7 +94,7 @@ AC_OUTPUT([Makefile \ gdb.fortran/Makefile gdb.go/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