Mercurial > hg > xemacs-beta
diff lisp/callers-of-rpt.el @ 227:0e522484dd2a r20-5b12
Import from CVS: tag r20-5b12
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:12:37 +0200 |
parents | |
children | 8626e4521993 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/callers-of-rpt.el Mon Aug 13 10:12:37 2007 +0200 @@ -0,0 +1,119 @@ +;;; 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-hashtable 256 #'equal) + "Hashtable 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))) + (puthash key (add-to-list 'lst file-name) 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