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