view lisp/callers-of-rpt.el @ 4932:8b63e21b0436

fix compile issues with gcc 4 -------------------- ChangeLog entries follow: -------------------- ChangeLog addition: 2010-01-24 Ben Wing <ben@xemacs.org> * aclocal.m4 (XE_SHLIB_STUFF): Use -export-all-symbols instead of -export-dynamic on PE targets (Cygwin and MinGW). * configure.ac (XE_EXPAND_VARIABLE): * configure.ac (TAB): Create variable XEMACS_CC_GPP to check whether we're running g++. Don't just check for an executable called `g++' -- it might be called g++-4 or whatever. Instead, check for either named `g++*' or claiming to be g++ when called with --version. Rewrite code do use the variable. Add -fno-strict-aliasing to optimization flags when GCC and optimized, and in all cases with g++, since under these circumstances strict aliasing is otherwise assumed, and XEmacs can't easily be made to respect its restrictions. * configure: Regenerate. lib-src/ChangeLog addition: 2010-01-24 Ben Wing <ben@xemacs.org> * fakemail.c (args_size): * fakemail.c (parse_header): * ootags.c (C_entries): Fix warnings about possible use of uninitialized vars. lwlib/ChangeLog addition: 2010-01-24 Ben Wing <ben@xemacs.org> * xlwgauge.c (GaugeResize): * xlwgauge.c (GaugeSize): Fix warnings about possible use of uninitialized vars. modules/ChangeLog addition: 2010-01-24 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c (CHECK_LIVE_CONNECTION): * postgresql/postgresql.c (print_pgconn): * postgresql/postgresql.c (Fpq_connectdb): * postgresql/postgresql.c (Fpq_connect_start): * postgresql/postgresql.c (Fpq_exec): * postgresql/postgresql.c (Fpq_get_result): Fix g++ 4.3 complaints about implicit conversions of string literals (const char *) to char *. src/ChangeLog addition: 2010-01-24 Ben Wing <ben@xemacs.org> * chartab.c (decode_char_table_range): * extents.c (extent_fragment_update): * objects-msw.c (initialize_font_instance): * process.c (Fgetenv): * redisplay-output.c (get_next_display_block): Fix warnings about possible use of uninitialized vars. * compiler.h: * compiler.h (REGISTER): * event-stream.c (is_scrollbar_event): * window.c (window_scrollbar_width): * window.c (window_scrollbar_height): * window.c (window_left_window_gutter_width): * window.c (window_right_window_gutter_width): Add USED_IF_SCROLLBARS. Use it to fix warnings about unused vars when --with-scrollbars=no. * config.h.in: Change comment to explain better why DECLARE_INLINE_HEADER is needed. * dialog-msw.c: * emacs.c (SHEBANG_EXE_PROGNAME_LENGTH): * emacs.c (main_1): * event-msw.c (struct mswin_message_debug): * event-msw.c (debug_output_mswin_message): * font-mgr.c: * font-mgr.c (Ffc_config_filename): * glyphs-msw.c (struct): * glyphs-msw.c (bitmap_table): * glyphs-x.c (update_widget_face): * intl-win32.c (struct lang_to_string): * intl-win32.c (lang_to_string_table): * nas.c: * objects-xlike-inc.c: * objects-xlike-inc.c (xft_find_charset_font): * syswindows.h: * win32.c (mswindows_output_last_error): Fix g++ 4.3 complaints about implicit conversions of string literals (const char *) to char *. * lisp.h: G++ 4.3 needs #include <limits> to avoid errors about min/max. * lisp.h (disabled_assert_with_message): Use disabled_assert* whenever asserts are disabled. Rewrite disabled_assert* to avoid complaints about unused vars by pretending to use the vars but casting them to (void). Remove code that defined assert() weirdly if DEBUG_XEMACS but not USE_ASSERTIONS -- configure sets USE_ASSERTIONS automatically when DEBUG_XEMACS, and if the user has forced it off, then so be it. * lisp.h (SYMBOL_KEYWORD): Put some of the combined `extern Lisp_Object's back under the file they are declared in. Cosmetic fix. * number.h: Remove `extern Lisp_Object' decls that duplicate lisp.h, since they have different C vs. C++ linkage.
author Ben Wing <ben@xemacs.org>
date Sun, 24 Jan 2010 22:04:58 -0600
parents 3ecd8885ac67
children 308d34e9f07d
line wrap: on
line source

;;; callers-of-rpt.el --- generate call graph of lisp in XEmacs

;; Copyright (C) 1997 Karl Hegbloom
;; Copyright (C) 1997 Free Software Foundation, Inc.

;; Author: Karl Hegbloom <karlheg@inetarena.com>
;; Maintainer: XEmacs Development Team
;; Keywords: internal

;; 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, 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Synched up with: not in FSF

;;; Commentary:

;; Grep-2.1 is required.
;; Modify the `xemacs-src-lisp-dir' and `xemacs-pkg-lisp-dir' to reflect
;;  where these directories live on your local system.

;;; Code:

(defvar xemacs-src-lisp-dir "/usr/src/xemacs-20.0/lisp/"
  "Where the XEmacs 20 lisp sources live.")
(defvar xemacs-pkg-lisp-dir "/home/xemacs/packages/"
  "Where the package lisp sources live.")

;; (makunbound 'caller-table)
(defconst caller-table (make-hash-table :test 'equal)
  "Hash table keyed on the symbols being required.  Each element will
  be a list of file-names of programs that depend on them.")

;;./apel/atype.el:(require 'emu)
;;./apel/atype.el:(require 'alist)
;;./apel/emu-e19.el:       (require 'emu-xemacs))
;;./apel/emu-e19.el:       (require 'emu-19)

(defun make-caller-report ()
  "Generate a simple report showing .el files that are `require'd by
  other .el files, and the list of programs that depend on them."
  (interactive)
  (let ((cmd-out (get-buffer-create "*caller-report find-grep output*"))
	(rpt (get-buffer-create "* caller report *"))
	file-name)
    (switch-to-buffer cmd-out)
    (buffer-disable-undo cmd-out)
    (set-syntax-table emacs-lisp-mode-syntax-table cmd-out)
    (erase-buffer cmd-out)
    (message "Running the find | grep...")
    (sit-for 0)
    ;; Note: Edit this part as needed for your installation.
    (shell-command (concat
		    ;; First the installed lisp
		    "cd " xemacs-src-lisp-dir " ;"
		    "grep -H '(require ' $(find -name '*.el' -print) |"
		    " grep -v 'auto-autoloads\\.el\\|callers-of-rpt\\.el' |"
		    " grep -v 'el:[ \t]*;\\|require load' ;" ; ones commented off, and cus-edit.el
		    ;; Then the packages
		    "cd " xemacs-pkg-lisp-dir " ;"
		    "grep -H '(require ' $(find -name '*.el' -print) |"
		    " grep -v 'auto-autoloads\\.el\\|callers-of-rpt\\.el' |"
		    " grep -v 'el:[ \t]*;' ;" ; ones commented off
		    )
		   cmd-out)
    (message "Running the find | grep... Done.")
    (goto-char (point-min))
    (sit-for 0)
    (while (not (eobp))
      (setq file-name (buffer-substring (+ (point) 2) ; skip the leading "./"
					(progn
					  (skip-chars-forward "^:")
					  (point))
					cmd-out))
      (re-search-forward "(require '" nil t)
      (let* ((key (buffer-substring (point) (progn
					      (skip-chars-forward "^) ")
					      (point))
				    cmd-out))
	     (lst (gethash key caller-table)))
	(unless (member file-name lst)
	  (puthash key (cons file-name lst) caller-table)))
      (forward-line 1)
      (sit-for 0))
    (switch-to-buffer rpt)
    (buffer-disable-undo rpt)
    (erase-buffer rpt)
    (sit-for 0)
    (let (keys)
      (maphash #'(lambda (key val) (push key keys)) caller-table)
      (setq keys (sort keys #'string<))
      (mapc #'(lambda (key)
		(insert (format "(%s '(" key))
		(let ((lst (gethash key caller-table)))
		  (while lst
		    (insert (format "%S" (car lst)))
		    (setq lst (cdr lst))
		    (when lst (insert " "))))
		(insert "))\n")
		(sit-for 0))
	    keys))))

(byte-compile 'make-caller-report)
(delete-other-windows)
(make-caller-report)

;;; callers-of-rpt.el ends here