Mercurial > hg > xemacs-beta
diff lisp/build-report.el @ 217:d44af0c54775 r20-4b7
Import from CVS: tag r20-4b7
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:08:34 +0200 |
parents | |
children | 262b8bb4a523 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/build-report.el Mon Aug 13 10:08:34 2007 +0200 @@ -0,0 +1,243 @@ +;;; xemacs-build-report.el --- Automatically formatted build reports for XEmacs + +;; Copyright (C) 1997 Adrian Aichner + +;; Author: Adrian Aichner, Teradyne GmbH Munich <aichner@ecf.teradyne.com> +;; Date: Sun., Apr. 20, 1997. +;; Version: 1.28 +;; 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, Inc., 59 Temple Place - Suite 330, Boston, MA +;; 02111-1307, USA. + +;;; Synched up with: Not synched. + +;;; Commentary: + +;; The Idea: +;; Let XEmacs report interesting aspects of how it was built. + +;; The Concept: +;; User creates an XEmacs Build Report by just calling +;; M-x xemacs-create-build-report +;; which will initialize a mail buffer with relevant information +;; derived from the XEmacs build process. Point is left at the +;; beginning of the report for user to input some personal notes and +;; send the report. + +;; The Status: +;; This is the first `Proof of Concept'. + +;; The Author: +;; Adrian Aichner, Teradyne GmbH Munich, Sun., Apr. 20, 1997. + +;;; Code: + +(require 'config) +(provide 'xemacs-build-report) + +;; Due to recommandation by developers on xemacs-beta@xemacs.org, +;; release versions are to be checked out using `co -u -kv ...'. +(defconst xemacs-build-report-version + "1.28" + "Version number of xemacs-build-report.") + +(defgroup xemacs-build-report nil + "Package automating the process of sending Xemacs Build Reports.") + +(defcustom xemacs-build-report-destination + "xemacs-beta@xemacs.org" + "The mail address XEmacs Build Reports should go to." + :group 'xemacs-build-report) + +(defcustom xemacs-build-report-keep-regexp + "make\\[\\|error\\|warn\\|pure.*\\(space\\|size\\)\\|hides\\b\\|strange\\|shadowings" + "Regexp of make process output lines to keep in the report." + :group 'xemacs-build-report) + +(defcustom xemacs-build-report-delete-regexp + "confl.*with.*auto-inlining" + "Regexp of make process output lines to delete from the report." + :group 'xemacs-build-report) + +(defcustom xemacs-build-report-make-output-file + (concat (gethash 'blddir (config-value-hash-table)) "/beta.err") + "Filename where stdout and stderr of XEmacs make process have been stored. +mk.err will not be created automatically. You'll have to run make with +output redirection. I use an alias +alias mk 'make \!* >>&\! \!$.err &' +for that, so that I get beta.err went I run `mk beta'." + :group 'xemacs-build-report) + +(defcustom xemacs-build-report-installation-file + (concat (gethash 'blddir (config-value-hash-table)) "/Installation") + "Installation file produced by XEmacs configure process." + :group 'xemacs-build-report) + +(defcustom xemacs-build-report-subject + (concat "[%s] " emacs-version " on " system-configuration) + "XEmacs Build Report Subject Line. %s-sequences will be substituted +with user input through `xemacs-create-build-report' according to +`xemacs-build-report-prompts' using `format'." + :group 'xemacs-build-report) + +(defcustom xemacs-build-report-prompts + '(("Status?: " "Success" "Failure")) + "XEmacs Build Report Prompt(s). This is a list of prompt-string +lists used by `xemacs-create-build-report' in conjunction with +`xemacs-build-report-subject'. Each list consists of a prompt string +followed by any number of strings which can be chosen via the history +mechanism." + :group 'xemacs-build-report) + +(defcustom xemacs-build-report-file-encoding + "7bit" + "XEmacs Build Report File Encoding to be used when MIME support is +available." +:group 'xemacs-build-report) + +;; Symbol Name mappings from TM to SEMI serving as +;; Compatibility Bandaid +;; If 'mime-editor/version-name is bound, we must be using TM(-edit). +(if (featurep 'mime-setup) + (if (locate-library "tm-edit") + (progn + ;; No (defvaralias ...) so far. T + ;; Thanks to "Didier Verna" verna@inf.enst.fr for reporting my + ;; incorrect defvaraliasing of `mime-editor/insert-tag'. + (defalias + 'mime-edit-insert-tag + 'mime-editor/insert-tag + ) + (defalias + 'mime-edit-insert-binary-file + 'mime-editor/insert-binary-file + )))) + +(defun xemacs-create-build-report (&rest args) + "Initializes a fresh mail-mode buffer with the contents of XEmacs +Installation file and excerpts from XEmacs make output and errors and +leaves point at the beginning of the mail text. See also +`xemacs-build-report-destination', +`xemacs-build-report-keep-regexp', +`xemacs-build-report-delete-regexp', +`xemacs-build-report-make-output-file' and +`xemacs-build-report-installation-file'." + (interactive + (let (prompt + hist + arg + (prompts xemacs-build-report-prompts)) + (progn + (while prompts + (setq prompt (caar prompts)) + (setq hist (cdar prompts)) + (setq prompts (cdr prompts)) + (setq arg (cons (read-string prompt "" 'hist) arg))) + arg))) + (save-excursion + (compose-mail + xemacs-build-report-destination + (apply 'format xemacs-build-report-subject args) + nil + nil + nil + nil + nil) + (let ((report-begin (mail-text))) + (xemacs-build-report-insert-make-output report-begin) + (xemacs-build-report-insert-installation-file report-begin) + (xemacs-build-report-insert-header report-begin) + ))) + +(defun xemacs-build-report-insert-header (where) + "Inserts the xemacs-build-report-header at the point specified by `where'." + (goto-char where) + (insert "\n> XEmacs Build Report as generated\n> by " + "xemacs-build-report-version " + xemacs-build-report-version + " follows:\n\n")) + +(defun xemacs-build-report-insert-make-output (where) + "Inserts the output of the XEmacs Beta make run. +The make process output must have been saved in +`xemacs-build-report-make-output-file' during the XEmacs Beta building." + (goto-char where) + (if (file-exists-p xemacs-build-report-make-output-file) + (progn + (if (featurep 'mime-setup) + (progn + (setq xemacs-build-report-keep-regexp + (concat "^--\\[\\[\\|\\]\\]$\\|" + xemacs-build-report-keep-regexp)) + (mime-edit-insert-tag + "application" + "octet-stream" + (concat + "\nContent-Disposition: attachment;" + " filename=\"" + (file-name-nondirectory + xemacs-build-report-make-output-file) + "\"")) + (mime-edit-insert-binary-file + xemacs-build-report-make-output-file + xemacs-build-report-file-encoding)) + (insert-file-contents xemacs-build-report-make-output-file)) + (goto-char where) + (delete-non-matching-lines + xemacs-build-report-keep-regexp) + (goto-char where) + (delete-matching-lines xemacs-build-report-delete-regexp) + (goto-char where) + (insert "> Contents of " + xemacs-build-report-make-output-file + "\n> keeping lines matching\n> \"" + xemacs-build-report-keep-regexp + "\"\n> and then deleting lines matching\n> \"" + xemacs-build-report-delete-regexp + "\"\n\n")) + (insert "> " xemacs-build-report-make-output-file + " does not exist!\n\n"))) + +(defun xemacs-build-report-insert-installation-file (where) + "Inserts the contents of the `xemacs-build-report-installation-file' +created by the XEmacs Beta configure process." + (goto-char where) + (if (file-exists-p xemacs-build-report-installation-file) + (progn + (insert "> Contents of " + xemacs-build-report-installation-file + ":\n\n") + (if (featurep 'mime-setup) + (progn + (mime-edit-insert-tag + "application" + "octet-stream" + (concat + "\nContent-Disposition: attachment;" + " filename=\"" + (file-name-nondirectory + xemacs-build-report-installation-file) + "\"")) + (mime-edit-insert-binary-file + xemacs-build-report-installation-file + xemacs-build-report-file-encoding)) + (insert-file-contents xemacs-build-report-installation-file))) + (insert "> " xemacs-build-report-installation-file + " does not exist!\n\n"))) + +;;; xemacs-build-report.el ends here