Mercurial > hg > xemacs-beta
changeset 4939:349f01075eb7
build fixes for gdbinit and config-dependent elc files
-------------------- ChangeLog entries follow: --------------------
ChangeLog addition:
2010-01-20 Ben Wing <ben@xemacs.org>
* Makefile.in.in:
* Makefile.in.in (GENERATED_HEADERS):
* Makefile.in.in (.PHONY):
* Makefile.in.in (src/.gdbinit):
* configure:
* configure.ac (TAB):
etc/gdbinit.in has been moved to src/.gdbinit.in.in. Reflect
this -- generate src/.gdbinit.in from src/.gdbinit.in.in, and
use the normal mechanism for doing so instead of copying it
specially.
Add target for `config-changed' and pass down to `src'.
Move some PHONY declarations to just before the actual targets.
src/ChangeLog addition:
2010-01-20 Ben Wing <ben@xemacs.org>
* .gdbinit.in.in:
Moved here from etc/.gdbinit.in.
Put @srcdir@ in various places rather than just `..' whenever
Makefile.in.in does so. Fixes various strange crashes and errors
than occur when using `..'.
* Makefile.in.in (config-changed):
Add target, useful when building both Unicode-internal and
old-Mule workspaces using --srcdir and don't run configure before
switching from one to the other.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 20 Jan 2010 19:48:26 -0600 |
parents | 299dce99bdad |
children | 9113c5044de8 |
files | ChangeLog Makefile.in.in configure configure.ac etc/gdbinit.in src/.gdbinit.in.in src/ChangeLog src/Makefile.in.in |
diffstat | 8 files changed, 613 insertions(+), 566 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Jan 19 11:25:37 2010 -0600 +++ b/ChangeLog Wed Jan 20 19:48:26 2010 -0600 @@ -31,6 +31,22 @@ * configure: Regenerate, now we no longer look for rint(). +2010-01-20 Ben Wing <ben@xemacs.org> + + * Makefile.in.in: + * Makefile.in.in (GENERATED_HEADERS): + * Makefile.in.in (.PHONY): + * Makefile.in.in (src/.gdbinit): + * configure: + * configure.ac (TAB): + etc/gdbinit.in has been moved to src/.gdbinit.in.in. Reflect + this -- generate src/.gdbinit.in from src/.gdbinit.in.in, and + use the normal mechanism for doing so instead of copying it + specially. + + Add target for `config-changed' and pass down to `src'. + Move some PHONY declarations to just before the actual targets. + 2010-01-13 Jerry James <james@xemacs.org> * configure.ac: Update comment about Cygwin and pdump.
--- a/Makefile.in.in Tue Jan 19 11:25:37 2010 -0600 +++ b/Makefile.in.in Wed Jan 20 19:48:26 2010 -0600 @@ -1,4 +1,4 @@ -## Copyright (C) 2003, 2005 Ben Wing. +## Copyright (C) 2003, 2005, 2010 Ben Wing. ## DIST: This is the distribution Makefile for XEmacs. configure can ## DIST: make most of the changes to this file you might want, so try @@ -243,7 +243,7 @@ ## instead, we have written out explicit code in the `install' targets. COPYDIR = ${srcdir}/etc ${srcdir}/lisp COPYDESTS = ${etcdir} ${lispdir} -GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/config.h lwlib/config.h src/sheap-adjust.h src/xemacs.def etc/PROBLEMS +GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/config.h lwlib/config.h src/sheap-adjust.h src/xemacs.def etc/PROBLEMS src/.gdbinit ## MAKE_SUBDIR will always be of the form lib-src ... src, where ## `...' includes various other directories that may be inserted by @@ -282,9 +282,15 @@ depend ${srcdir}/src/depend: cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) depend +.PHONY: config-changed +config-changed: + cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@ + +.PHONY: check check: cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@ +.PHONY: check-features check-features: all cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@ @@ -355,6 +361,9 @@ src/xemacs.def: $(srcdir)/src/xemacs.def.in.in ./config.status && touch $@ +src/.gdbinit: ${srcdir}/src/.gdbinit.in.in + ./config.status && touch $@ + etc/PROBLEMS: $(srcdir)/PROBLEMS cp $^ $@ @@ -367,7 +376,6 @@ ## On AIX, use tar xBf. .PHONY: install-only install install-arch-dep install-arch-indep gzip.el mkdir -.PHONY: check check-features ## We delete each directory in ${COPYDESTS} before we copy into it; ## that way, we can reinstall over directories that have been put in
--- a/configure Tue Jan 19 11:25:37 2010 -0600 +++ b/configure Wed Jan 20 19:48:26 2010 -0600 @@ -20329,7 +20329,7 @@ fi -internal_makefile_list="Makefile.in" +internal_makefile_list="Makefile.in src/.gdbinit.in" SUBDIR_MAKEFILES='' test -d lock || mkdir lock for dir in $MAKE_SUBDIR; do @@ -20376,9 +20376,9 @@ fi -if test -f "$srcdir/etc/gdbinit.in"; then - test "$verbose" = "yes" && echo "creating src/.gdbinit.in" - cp $srcdir/etc/gdbinit.in src/.gdbinit.in +if test -f "$srcdir/etc/gdbinit.in.in"; then + test "$verbose" = "yes" && echo "creating src/.gdbinit.in.in" + cp $srcdir/etc/gdbinit.in.in src/.gdbinit.in.in fi if test -f "$srcdir/etc/dbxrc.in"; then
--- a/configure.ac Tue Jan 19 11:25:37 2010 -0600 +++ b/configure.ac Wed Jan 20 19:48:26 2010 -0600 @@ -5258,7 +5258,7 @@ dnl Compute lists of Makefiles and subdirs AC_SUBST(SRC_SUBDIR_DEPS) -internal_makefile_list="Makefile.in" +internal_makefile_list="Makefile.in src/.gdbinit.in" SUBDIR_MAKEFILES='' test -d lock || mkdir lock for dir in $MAKE_SUBDIR; do @@ -5308,11 +5308,8 @@ dnl Unlike TAGS, debugger init files depend on config.h. dnl Regenerate them locally on every configure. -dnl Create a .gdbinit useful for debugging XEmacs -if test -f "$srcdir/etc/gdbinit.in"; then - test "$verbose" = "yes" && echo "creating src/.gdbinit.in" - cp $srcdir/etc/gdbinit.in src/.gdbinit.in -fi +dnl .gdbinit is now handled like xemacs.def or other src files, and +dnl its source is in src/.gdbinit.in.in. dnl Create a .dbxrc useful for debugging XEmacs if test -f "$srcdir/etc/dbxrc.in"; then
--- a/etc/gdbinit.in Tue Jan 19 11:25:37 2010 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,552 +0,0 @@ -## gdb init file for XEmacs -*- ksh -*- -## This is the source for src/.gdbinit. Edit it, and rerun configure. -## (Running config.status is not enough.) -## The generated file depends on src/config.h (currently only in one place). - -## To insert comments that will remain in the generated file, we use the -## imake XCOMM convention. Lines beginning with "XCOMM " exactly (no -## leading whitespace, one trailing ASCII space, case sensitive) will be -## transformed to gdb command file comments in the generated file. - -XCOMM gdb init file for XEmacs -XCOMM AUTOMATICALLY GENERATED FROM etc/gdbinit.in BY configure -- DO NOT EDIT. -XCOMM See etc/gdbinit.in for licensing information and usage hints. -XCOMM Copyright (C) 1998 Free Software Foundation, Inc. - -## This file is part of XEmacs. - -## XEmacs is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by the -## Free Software Foundation; either version 2, or (at your option) any -## later version. - -## XEmacs is distributed in the hope that it will be useful, but WITHOUT -## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -## for more details. - -## You should have received a copy of the GNU General Public License -## along with XEmacs; see the file COPYING. If not, write to -## the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -## Boston, MA 02110-1301 USA - -## Author: Martin Buchholz - -## Other contributors you could ask for help: Ivan Golubev, Jerry James, -## Stephen Turnbull. - -## Some useful commands for debugging emacs with gdb 4.16 or better. -## -## Since this file is called `.gdbinit', it will be read by gdb -## automatically when gdb is run in the build directory, which is where -## developers usually debug their xemacs. You can also source this -## file from your ~/.gdbinit, if you like. -## -## Configure xemacs with --debug, and compile with -g. -## -## See also the question of the XEmacs FAQ, titled -## "How to Debug an XEmacs problem with a debugger". -## -## This can be used to debug XEmacs no matter how the following are -## specified: - -## USE_UNION_TYPE - -## (the above all have configure equivalents) - -## Some functions defined here require a running process, but most -## don't. Considerable effort has been expended to this end. - -## See the dbg_ C support code in src/alloc.c that allows the functions -## defined in this file to work correctly. - -#define NOT_C_CODE -#include "config.h" - -set print union off -set print pretty off - -#ifdef VDB_POSIX -handle SIGSEGV SIGBUS nostop noprint -#endif - -set $Lisp_Type_Int = -2 -set $Lisp_Type_Record = 0 -set $Lisp_Type_Char = 2 - -define decode_object - set $obj = (unsigned long) $arg0 - if $obj & 1 - ## It's an int - set $val = $obj >> 1 - set $type = $Lisp_Type_Int - else - set $type = $obj & dbg_typemask - if $type == $Lisp_Type_Char - set $val = ($obj & dbg_valmask) >> dbg_gctypebits - else - ## It's a record pointer - set $val = $obj - end - end - - if $type == $Lisp_Type_Record - set $lheader = ((struct lrecord_header *) $val) - set $lrecord_type = ($lheader->type) - set $imp = ((struct lrecord_implementation *) lrecord_implementations_table[(int) $lrecord_type]) - else - set $lrecord_type = -1 - set $lheader = -1 - set $imp = -1 - end -end - -document decode_object -Usage: decode_object lisp_object -Extract implementation information from a Lisp Object. -Defines variables $val, $type and $imp. -end - -define xint -decode_object $arg0 -print ((long) $val) -end - -define xtype - decode_object $arg0 - if $type == $Lisp_Type_Int - echo int\n - else - if $type == $Lisp_Type_Char - echo char\n - else - printf "record type: %s\n", $imp->name - end - end -end - -document xtype -Usage: xtype lisp_object -Print the Lisp type of a lisp object. -end - -define lisp-shadows - run -batch -vanilla -f list-load-path-shadows -end - -document lisp-shadows -Usage: lisp-shadows -Run xemacs to check for lisp shadows -end - -define environment-to-run-temacs - unset env EMACSLOADPATH - set env EMACSBOOTSTRAPLOADPATH=../lisp/:.. - set env EMACSBOOTSTRAPMODULEPATH=../modules/:.. -end - -define run-temacs - environment-to-run-temacs - run -nd -no-packages -batch -l ../lisp/loadup.el run-temacs -q -end - -document run-temacs -Usage: run-temacs -Run temacs interactively, like xemacs. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -define check-xemacs - run -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated -end - -document check-xemacs -Usage: check-xemacs -Run the test suite. Equivalent to 'make check'. -end - -define check-temacs - environment-to-run-temacs - run -nd -no-packages -batch -l ../lisp/loadup.el run-temacs -q -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated -end - -document check-temacs -Usage: check-temacs -Run the test suite on temacs. Equivalent to 'make check-temacs'. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -define update-elc - environment-to-run-temacs - run -nd -no-packages -batch -l ../lisp/update-elc.el -end - -document update-elc -Usage: update-elc -Run the core lisp byte compilation part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -define update-elc-2 - environment-to-run-temacs - run -no-packages -batch -no-autoloads -l update-elc-2.el -f batch-update-elc-2 ../lisp -end - -document update-elc-2 -Usage: update-elc-2 -Run the post-dump core lisp byte compilation part of the build procedure. -end - -define dmp - environment-to-run-temacs - run -nd -no-packages -batch -l ../lisp/loadup.el dump -end - -document dmp -Usage: dmp -Run the dumping part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -define ldp - printf "%s", "Lisp => " - call debug_print($arg0) -end - -document ldp -Usage: ldp lisp_object -Print a Lisp Object value using the Lisp printer. -Requires a running xemacs process. -end - -define lbt -call debug_backtrace() -end - -document lbt -Usage: lbt -Print the current Lisp stack trace. -Requires a running xemacs process. -end - - -define leval -ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil))) -end - -document leval -Usage: leval "SEXP" -Eval a lisp expression. -Requires a running xemacs process. - -Example: -(gdb) leval "(+ 1 2)" -Lisp ==> 3 -end - - -define wtype -print $arg0->core.widget_class->core_class.class_name -end - -define xtname -print XrmQuarkToString(((Object)($arg0))->object.xrm_name) -end - -## GDB's command language makes you want to ... - -define pptype - set $type_ptr = ($arg0 *) $val - print $type_ptr - print *$type_ptr -end - -define pstructtype - set $type_ptr = (struct $arg0 *) $val - print $type_ptr - print *$type_ptr -end - -define pobj - decode_object $arg0 - if $type == $Lisp_Type_Int - printf "Integer: %d\n", $val - else - if $type == $Lisp_Type_Char - if $val > 32 && $val < 128 - printf "Char: %c\n", $val - else - printf "Char: %d\n", $val - end - else - if $lrecord_type == lrecord_type_string - pptype Lisp_String - else - if $lrecord_type == lrecord_type_cons - pptype Lisp_Cons - else - if $lrecord_type == lrecord_type_symbol - pptype Lisp_Symbol - printf "Symbol name: %s\n", ((Lisp_String *)$type_ptr->name)->data_ - else - if $lrecord_type == lrecord_type_vector - pptype Lisp_Vector - printf "Vector of length %d\n", $type_ptr->size - ##print *($type_ptr->data) @ $type_ptr->size - else - if $lrecord_type == lrecord_type_bit_vector - pptype Lisp_Bit_Vector - else - if $lrecord_type == lrecord_type_buffer - pstructtype buffer - else - if $lrecord_type == lrecord_type_char_table - pptype Lisp_Char_Table - else - if $lrecord_type == lrecord_type_char_table_entry - pptype Lisp_Char_Table_Entry - else - if $lrecord_type == lrecord_type_charset - pptype Lisp_Charset - else - if $lrecord_type == lrecord_type_coding_system - pptype Lisp_Coding_System - else - if $lrecord_type == lrecord_type_color_instance - pptype Lisp_Color_Instance - else - if $lrecord_type == lrecord_type_command_builder - pptype command_builder - else - if $lrecord_type == lrecord_type_compiled_function - pptype Lisp_Compiled_Function - else - if $lrecord_type == lrecord_type_console - pstructtype console - else - if $lrecord_type == lrecord_type_database - pptype Lisp_Database - else - if $lrecord_type == lrecord_type_device - pstructtype device - else - if $lrecord_type == lrecord_type_event - pptype Lisp_Event - else - if $lrecord_type == lrecord_type_extent - pstructtype extent - else - if $lrecord_type == lrecord_type_extent_auxiliary - pstructtype extent_auxiliary - else - if $lrecord_type == lrecord_type_extent_info - pstructtype extent_info - else - if $lrecord_type == lrecord_type_face - pptype Lisp_Face - else - if $lrecord_type == lrecord_type_float - pptype Lisp_Float - else - if $lrecord_type == lrecord_type_font_instance - pptype Lisp_Font_Instance - else - if $lrecord_type == lrecord_type_frame - pstructtype frame - else - if $lrecord_type == lrecord_type_glyph - pptype Lisp_Glyph - else - if $lrecord_type == lrecord_type_gui_item - pptype Lisp_Gui_Item - else - if $lrecord_type == lrecord_type_hash_table - pptype Lisp_Hash_Table - else - if $lrecord_type == lrecord_type_image_instance - pptype Lisp_Image_Instance - else - if $lrecord_type == lrecord_type_keymap - pptype Lisp_Keymap - else - if $lrecord_type == lrecord_type_lcrecord_list - pstructtype lcrecord_list - else - if $lrecord_type == lrecord_type_ldap - pptype Lisp_LDAP - else - if $lrecord_type == lrecord_type_lstream - pstructtype lstream - else - if $lrecord_type == lrecord_type_marker - pptype Lisp_Marker - else - if $lrecord_type == lrecord_type_opaque - pptype Lisp_Opaque - else - if $lrecord_type == lrecord_type_opaque_ptr - pptype Lisp_Opaque_Ptr - else - if $lrecord_type == lrecord_type_popup_data - pptype popup_data - else - if $lrecord_type == lrecord_type_process - pptype Lisp_Process - else - if $lrecord_type == lrecord_type_range_table - pptype Lisp_Range_Table - else - if $lrecord_type == lrecord_type_specifier - pptype Lisp_Specifier - else - if $lrecord_type == lrecord_type_subr - pptype Lisp_Subr - else - if $lrecord_type == lrecord_type_symbol_value_buffer_local - pstructtype symbol_value_buffer_local - else - if $lrecord_type == lrecord_type_symbol_value_forward - pstructtype symbol_value_forward - else - if $lrecord_type == lrecord_type_symbol_value_lisp_magic - pstructtype symbol_value_lisp_magic - else - if $lrecord_type == lrecord_type_symbol_value_varalias - pstructtype symbol_value_varalias - else - if $lrecord_type == lrecord_type_timeout - pptype Lisp_Timeout - else - if $lrecord_type == lrecord_type_toolbar_button - pstructtype toolbar_button - else - if $lrecord_type == lrecord_type_tooltalk_message - pptype Lisp_Tooltalk_Message - else - if $lrecord_type == lrecord_type_tooltalk_pattern - pptype Lisp_Tooltalk_Pattern - else - if $lrecord_type == lrecord_type_weak_list - pstructtype weak_list - else - if $lrecord_type == lrecord_type_window - pstructtype window - else - if $lrecord_type == lrecord_type_window_configuration - pstructtype window_config - else - if $lrecord_type == lrecord_type_fc_pattern - pstructtype fc_pattern - else - if $lrecord_type == lrecord_type_fc_config - pstructtype fc_config - else - echo Unknown Lisp Object type\n - print $arg0 - ## Barf, gag, retch - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - ## Repeat after me... gdb sux, gdb sux, gdb sux... - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - ## Are we having fun yet?? - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end -end - -document pobj -Usage: pobj lisp_object -Print the internal C representation of a Lisp Object. -end - -## ------------------------------------------------------------- -## functions to test the debugging support itself. -## If you change this file, make sure the following still work... -## ------------------------------------------------------------- -define test_xtype - printf "Vemacs_major_version: " - xtype Vemacs_major_version - printf "Vhelp_char: " - xtype Vhelp_char - printf "Qnil: " - xtype Qnil - printf "Qunbound: " - xtype Qunbound - printf "Vobarray: " - xtype Vobarray - printf "Vall_weak_lists: " - xtype Vall_weak_lists - printf "Vxemacs_codename: " - xtype Vxemacs_codename -end - -define test_pobj - printf "Vemacs_major_version: " - pobj Vemacs_major_version - printf "Vhelp_char: " - pobj Vhelp_char - printf "Qnil: " - pobj Qnil - printf "Qunbound: " - pobj Qunbound - printf "Vobarray: " - pobj Vobarray - printf "Vall_weak_lists: " - pobj Vall_weak_lists - printf "Vxemacs_codename: " - pobj Vxemacs_codename -end -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/.gdbinit.in.in Wed Jan 20 19:48:26 2010 -0600 @@ -0,0 +1,553 @@ +## gdb init file for XEmacs -*- ksh -*- +## This is the source for src/.gdbinit. Edit it, and rerun configure. +## (Running config.status is not enough.) +## The generated file depends on src/config.h (currently only in one place). + +## To insert comments that will remain in the generated file, we use the +## imake XCOMM convention. Lines beginning with "XCOMM " exactly (no +## leading whitespace, one trailing ASCII space, case sensitive) will be +## transformed to gdb command file comments in the generated file. + +XCOMM gdb init file for XEmacs +XCOMM AUTOMATICALLY GENERATED FROM etc/gdbinit.in BY configure -- DO NOT EDIT. +XCOMM See etc/gdbinit.in for licensing information and usage hints. +XCOMM Copyright (C) 1998 Free Software Foundation, Inc. +XCOMM Copyright (C) 2010 Ben Wing. + +## This file is part of XEmacs. + +## XEmacs is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by the +## Free Software Foundation; either version 2, or (at your option) any +## later version. + +## XEmacs is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. + +## You should have received a copy of the GNU General Public License +## along with XEmacs; see the file COPYING. If not, write to +## the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +## Boston, MA 02110-1301 USA + +## Author: Martin Buchholz + +## Other contributors you could ask for help: Ivan Golubev, Jerry James, +## Stephen Turnbull. + +## Some useful commands for debugging emacs with gdb 4.16 or better. +## +## Since this file is called `.gdbinit', it will be read by gdb +## automatically when gdb is run in the build directory, which is where +## developers usually debug their xemacs. You can also source this +## file from your ~/.gdbinit, if you like. +## +## Configure xemacs with --debug, and compile with -g. +## +## See also the question of the XEmacs FAQ, titled +## "How to Debug an XEmacs problem with a debugger". +## +## This can be used to debug XEmacs no matter how the following are +## specified: + +## USE_UNION_TYPE + +## (the above all have configure equivalents) + +## Some functions defined here require a running process, but most +## don't. Considerable effort has been expended to this end. + +## See the dbg_ C support code in src/alloc.c that allows the functions +## defined in this file to work correctly. + +#define NOT_C_CODE +#include "config.h" + +set print union off +set print pretty off + +#ifdef VDB_POSIX +handle SIGSEGV SIGBUS nostop noprint +#endif + +set $Lisp_Type_Int = -2 +set $Lisp_Type_Record = 0 +set $Lisp_Type_Char = 2 + +define decode_object + set $obj = (unsigned long) $arg0 + if $obj & 1 + ## It's an int + set $val = $obj >> 1 + set $type = $Lisp_Type_Int + else + set $type = $obj & dbg_typemask + if $type == $Lisp_Type_Char + set $val = ($obj & dbg_valmask) >> dbg_gctypebits + else + ## It's a record pointer + set $val = $obj + end + end + + if $type == $Lisp_Type_Record + set $lheader = ((struct lrecord_header *) $val) + set $lrecord_type = ($lheader->type) + set $imp = ((struct lrecord_implementation *) lrecord_implementations_table[(int) $lrecord_type]) + else + set $lrecord_type = -1 + set $lheader = -1 + set $imp = -1 + end +end + +document decode_object +Usage: decode_object lisp_object +Extract implementation information from a Lisp Object. +Defines variables $val, $type and $imp. +end + +define xint +decode_object $arg0 +print ((long) $val) +end + +define xtype + decode_object $arg0 + if $type == $Lisp_Type_Int + echo int\n + else + if $type == $Lisp_Type_Char + echo char\n + else + printf "record type: %s\n", $imp->name + end + end +end + +document xtype +Usage: xtype lisp_object +Print the Lisp type of a lisp object. +end + +define lisp-shadows + run -batch -vanilla -f list-load-path-shadows +end + +document lisp-shadows +Usage: lisp-shadows +Run xemacs to check for lisp shadows +end + +define environment-to-run-temacs + unset env EMACSLOADPATH + set env EMACSBOOTSTRAPLOADPATH=@srcdir@/../lisp/:@srcdir@/.. + set env EMACSBOOTSTRAPMODULEPATH=../modules/:.. +end + +define run-temacs + environment-to-run-temacs + run -nd -no-packages -batch -l @srcdir@/../lisp/loadup.el run-temacs -q +end + +document run-temacs +Usage: run-temacs +Run temacs interactively, like xemacs. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. +end + +define check-xemacs + run -vanilla -batch -l @srcdir@/../tests/automated/test-harness.el -f batch-test-emacs @srcdir@/../tests/automated +end + +document check-xemacs +Usage: check-xemacs +Run the test suite. Equivalent to 'make check'. +end + +define check-temacs + environment-to-run-temacs + run -nd -no-packages -batch -l @srcdir@/../lisp/loadup.el run-temacs -q -batch -l @srcdir@/../tests/automated/test-harness.el -f batch-test-emacs @srcdir@/../tests/automated +end + +document check-temacs +Usage: check-temacs +Run the test suite on temacs. Equivalent to 'make check-temacs'. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. +end + +define update-elc + environment-to-run-temacs + run -nd -no-packages -batch -l @srcdir@/../lisp/update-elc.el +end + +document update-elc +Usage: update-elc +Run the core lisp byte compilation part of the build procedure. +Use when debugging temacs, not xemacs! +Use this when temacs builds successfully, but xemacs does not. +end + +define update-elc-2 + environment-to-run-temacs + run -no-packages -batch -no-autoloads -l update-elc-2.el -f batch-update-elc-2 @srcdir@/../lisp +end + +document update-elc-2 +Usage: update-elc-2 +Run the post-dump core lisp byte compilation part of the build procedure. +end + +define dmp + environment-to-run-temacs + run -nd -no-packages -batch -l @srcdir@/../lisp/loadup.el dump +end + +document dmp +Usage: dmp +Run the dumping part of the build procedure. +Use when debugging temacs, not xemacs! +Use this when temacs builds successfully, but xemacs does not. +end + +define ldp + printf "%s", "Lisp => " + call debug_print($arg0) +end + +document ldp +Usage: ldp lisp_object +Print a Lisp Object value using the Lisp printer. +Requires a running xemacs process. +end + +define lbt +call debug_backtrace() +end + +document lbt +Usage: lbt +Print the current Lisp stack trace. +Requires a running xemacs process. +end + + +define leval +ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil))) +end + +document leval +Usage: leval "SEXP" +Eval a lisp expression. +Requires a running xemacs process. + +Example: +(gdb) leval "(+ 1 2)" +Lisp ==> 3 +end + + +define wtype +print $arg0->core.widget_class->core_class.class_name +end + +define xtname +print XrmQuarkToString(((Object)($arg0))->object.xrm_name) +end + +## GDB's command language makes you want to ... + +define pptype + set $type_ptr = ($arg0 *) $val + print $type_ptr + print *$type_ptr +end + +define pstructtype + set $type_ptr = (struct $arg0 *) $val + print $type_ptr + print *$type_ptr +end + +define pobj + decode_object $arg0 + if $type == $Lisp_Type_Int + printf "Integer: %d\n", $val + else + if $type == $Lisp_Type_Char + if $val > 32 && $val < 128 + printf "Char: %c\n", $val + else + printf "Char: %d\n", $val + end + else + if $lrecord_type == lrecord_type_string + pptype Lisp_String + else + if $lrecord_type == lrecord_type_cons + pptype Lisp_Cons + else + if $lrecord_type == lrecord_type_symbol + pptype Lisp_Symbol + printf "Symbol name: %s\n", ((Lisp_String *)$type_ptr->name)->data_ + else + if $lrecord_type == lrecord_type_vector + pptype Lisp_Vector + printf "Vector of length %d\n", $type_ptr->size + ##print *($type_ptr->data) @ $type_ptr->size + else + if $lrecord_type == lrecord_type_bit_vector + pptype Lisp_Bit_Vector + else + if $lrecord_type == lrecord_type_buffer + pstructtype buffer + else + if $lrecord_type == lrecord_type_char_table + pptype Lisp_Char_Table + else + if $lrecord_type == lrecord_type_char_table_entry + pptype Lisp_Char_Table_Entry + else + if $lrecord_type == lrecord_type_charset + pptype Lisp_Charset + else + if $lrecord_type == lrecord_type_coding_system + pptype Lisp_Coding_System + else + if $lrecord_type == lrecord_type_color_instance + pptype Lisp_Color_Instance + else + if $lrecord_type == lrecord_type_command_builder + pptype command_builder + else + if $lrecord_type == lrecord_type_compiled_function + pptype Lisp_Compiled_Function + else + if $lrecord_type == lrecord_type_console + pstructtype console + else + if $lrecord_type == lrecord_type_database + pptype Lisp_Database + else + if $lrecord_type == lrecord_type_device + pstructtype device + else + if $lrecord_type == lrecord_type_event + pptype Lisp_Event + else + if $lrecord_type == lrecord_type_extent + pstructtype extent + else + if $lrecord_type == lrecord_type_extent_auxiliary + pstructtype extent_auxiliary + else + if $lrecord_type == lrecord_type_extent_info + pstructtype extent_info + else + if $lrecord_type == lrecord_type_face + pptype Lisp_Face + else + if $lrecord_type == lrecord_type_float + pptype Lisp_Float + else + if $lrecord_type == lrecord_type_font_instance + pptype Lisp_Font_Instance + else + if $lrecord_type == lrecord_type_frame + pstructtype frame + else + if $lrecord_type == lrecord_type_glyph + pptype Lisp_Glyph + else + if $lrecord_type == lrecord_type_gui_item + pptype Lisp_Gui_Item + else + if $lrecord_type == lrecord_type_hash_table + pptype Lisp_Hash_Table + else + if $lrecord_type == lrecord_type_image_instance + pptype Lisp_Image_Instance + else + if $lrecord_type == lrecord_type_keymap + pptype Lisp_Keymap + else + if $lrecord_type == lrecord_type_lcrecord_list + pstructtype lcrecord_list + else + if $lrecord_type == lrecord_type_ldap + pptype Lisp_LDAP + else + if $lrecord_type == lrecord_type_lstream + pstructtype lstream + else + if $lrecord_type == lrecord_type_marker + pptype Lisp_Marker + else + if $lrecord_type == lrecord_type_opaque + pptype Lisp_Opaque + else + if $lrecord_type == lrecord_type_opaque_ptr + pptype Lisp_Opaque_Ptr + else + if $lrecord_type == lrecord_type_popup_data + pptype popup_data + else + if $lrecord_type == lrecord_type_process + pptype Lisp_Process + else + if $lrecord_type == lrecord_type_range_table + pptype Lisp_Range_Table + else + if $lrecord_type == lrecord_type_specifier + pptype Lisp_Specifier + else + if $lrecord_type == lrecord_type_subr + pptype Lisp_Subr + else + if $lrecord_type == lrecord_type_symbol_value_buffer_local + pstructtype symbol_value_buffer_local + else + if $lrecord_type == lrecord_type_symbol_value_forward + pstructtype symbol_value_forward + else + if $lrecord_type == lrecord_type_symbol_value_lisp_magic + pstructtype symbol_value_lisp_magic + else + if $lrecord_type == lrecord_type_symbol_value_varalias + pstructtype symbol_value_varalias + else + if $lrecord_type == lrecord_type_timeout + pptype Lisp_Timeout + else + if $lrecord_type == lrecord_type_toolbar_button + pstructtype toolbar_button + else + if $lrecord_type == lrecord_type_tooltalk_message + pptype Lisp_Tooltalk_Message + else + if $lrecord_type == lrecord_type_tooltalk_pattern + pptype Lisp_Tooltalk_Pattern + else + if $lrecord_type == lrecord_type_weak_list + pstructtype weak_list + else + if $lrecord_type == lrecord_type_window + pstructtype window + else + if $lrecord_type == lrecord_type_window_configuration + pstructtype window_config + else + if $lrecord_type == lrecord_type_fc_pattern + pstructtype fc_pattern + else + if $lrecord_type == lrecord_type_fc_config + pstructtype fc_config + else + echo Unknown Lisp Object type\n + print $arg0 + ## Barf, gag, retch + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + ## Repeat after me... gdb sux, gdb sux, gdb sux... + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + ## Are we having fun yet?? + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end +end + +document pobj +Usage: pobj lisp_object +Print the internal C representation of a Lisp Object. +end + +## ------------------------------------------------------------- +## functions to test the debugging support itself. +## If you change this file, make sure the following still work... +## ------------------------------------------------------------- +define test_xtype + printf "Vemacs_major_version: " + xtype Vemacs_major_version + printf "Vhelp_char: " + xtype Vhelp_char + printf "Qnil: " + xtype Qnil + printf "Qunbound: " + xtype Qunbound + printf "Vobarray: " + xtype Vobarray + printf "Vall_weak_lists: " + xtype Vall_weak_lists + printf "Vxemacs_codename: " + xtype Vxemacs_codename +end + +define test_pobj + printf "Vemacs_major_version: " + pobj Vemacs_major_version + printf "Vhelp_char: " + pobj Vhelp_char + printf "Qnil: " + pobj Qnil + printf "Qunbound: " + pobj Qunbound + printf "Vobarray: " + pobj Vobarray + printf "Vall_weak_lists: " + pobj Vall_weak_lists + printf "Vxemacs_codename: " + pobj Vxemacs_codename +end +
--- a/src/ChangeLog Tue Jan 19 11:25:37 2010 -0600 +++ b/src/ChangeLog Wed Jan 20 19:48:26 2010 -0600 @@ -70,6 +70,18 @@ 2010-01-20 Ben Wing <ben@xemacs.org> + * .gdbinit.in.in: + Moved here from etc/.gdbinit.in. + Put @srcdir@ in various places rather than just `..' whenever + Makefile.in.in does so. Fixes various strange crashes and errors + than occur when using `..'. + * Makefile.in.in (config-changed): + Add target, useful when building both Unicode-internal and + old-Mule workspaces using --srcdir and don't run configure before + switching from one to the other. + +2010-01-20 Ben Wing <ben@xemacs.org> + * lrecord.h: * lrecord.h (enum lrecord_type): * lrecord.h (struct lrecord_implementation):
--- a/src/Makefile.in.in Tue Jan 19 11:25:37 2010 -0600 +++ b/src/Makefile.in.in Wed Jan 20 19:48:26 2010 -0600 @@ -3,7 +3,7 @@ ## Copyright (C) 1994, 1995 Board of Trustees, University of Illinois ## Copyright (C) 1996, 1997 Sun Microsystems, Inc. ## Copyright (C) 1998, 1999 J. Kean Johnston. -## Copyright (C) 2001, 2002, 2003, 2005 Ben Wing. +## Copyright (C) 2001, 2002, 2003, 2005, 2010 Ben Wing. ## This file is part of XEmacs. @@ -917,6 +917,19 @@ testdir = $(SRC)/../tests/automated batch_test_emacs = $(BATCH_PACKAGES) -l $(testdir)/test-harness.el -f batch-test-emacs $(testdir) +# `config-changed' is useful if you are building both Unicode-internal +# and old-Mule workspaces using --srcdir and don't run configure before +# switching from one to the other. If you rerun configure, update-elc.el +# notices this and automatically removes the two files below, but not +# if you just switch directories and `make'. In that case, do +# `make config-changed' to avoid an error. + +.PHONY: remove-config-dependent-elcs config-changed +remove-config-dependent-elcs: + rm $(LISP)/mule/chinese.elc $(LISP)/mule/general-late.elc +config-changed: remove-config-dependent-elcs all + + .PHONY: check check-temacs check-features check: $(DO_XEMACS) $(batch_test_emacs)