diff lisp/build-report.el @ 219:262b8bb4a523 r20-4b8

Import from CVS: tag r20-4b8
author cvs
date Mon, 13 Aug 2007 10:09:35 +0200
parents d44af0c54775
children 85a06df23a9a
line wrap: on
line diff
--- a/lisp/build-report.el	Mon Aug 13 10:08:36 2007 +0200
+++ b/lisp/build-report.el	Mon Aug 13 10:09:35 2007 +0200
@@ -1,10 +1,10 @@
-;;; xemacs-build-report.el --- Automatically formatted build reports for 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
+;; Version: 1.35
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
@@ -33,7 +33,7 @@
 
 ;; The Concept:
 ;; User creates an XEmacs Build Report by just calling
-;; M-x xemacs-create-build-report
+;; M-x 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
@@ -48,100 +48,124 @@
 ;;; Code:
 
 (require 'config)
-(provide 'xemacs-build-report)
+(provide '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.")
+(defconst build-report-version
+  "1.35"
+  "Version number of build-report.")
 
-(defgroup xemacs-build-report nil
-  "Package automating the process of sending Xemacs Build Reports.")
+(defgroup build-report nil
+  "Package automating the process of sending XEmacs Build Reports."
+  :group 'build)
 
-(defcustom xemacs-build-report-destination
+(defcustom 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)
+  :type 'string
+  :group 'build-report)
 
-(defcustom xemacs-build-report-delete-regexp
-  "confl.*with.*auto-inlining"
+(defcustom build-report-keep-regexp
+  (list
+   "make\\["
+   "error"
+   "warn"
+   "pure.*\\(space\\|size\\)"
+   "hides\\b"
+   "strange"
+   "shadowings"
+   "^Compilation"
+   "not\\s-+found")
+  "Regexp of make process output lines to keep in the report."
+  :type '(repeat regexp)
+  :group 'build-report)
+
+(defcustom build-report-delete-regexp
+  (list
+   "confl.*with.*auto-inlining")
   "Regexp of make process output lines to delete from the report."
-  :group 'xemacs-build-report)
+  :type '(repeat regexp)
+  :group 'build-report)
 
-(defcustom xemacs-build-report-make-output-file
+(defcustom 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)
+  :type 'file
+  :group 'build-report)
 
-(defcustom xemacs-build-report-installation-file
+(defcustom build-report-installation-file
   (concat (gethash 'blddir (config-value-hash-table)) "/Installation")
   "Installation file produced by XEmacs configure process."
-  :group 'xemacs-build-report)
+  :type 'file
+  :group 'build-report)
 
-(defcustom xemacs-build-report-subject
+(defcustom build-report-installation-insert-all nil
+  "Tell build-report to insert the whole Installation file
+instead of just the last report."
+  :type 'boolean
+  :group 'build-report)
+
+(defcustom 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)
+with user input through `build-report' according to
+`build-report-prompts' using `format'."
+  :type 'string
+  :group 'build-report)
 
-(defcustom xemacs-build-report-prompts
+(defcustom 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
+lists used by `build-report' in conjunction with
+`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)
+  :group 'build-report)
 
-(defcustom xemacs-build-report-file-encoding
+(defcustom build-report-file-encoding
   "7bit"
   "XEmacs Build Report File Encoding to be used when MIME support is
 available."
-:group 'xemacs-build-report)
+  :group '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
-	    ))))
+;; Symbol Name mappings from TM to SEMI serving as Compatibility
+;; Bandaid
+(when (featurep 'mime-setup)
+  ;; No (defvaralias ...) so far. Thanks to "Didier Verna"
+  ;; <verna@inf.enst.fr> for reporting my incorrect defvaraliasing of
+  ;; `mime-editor/insert-tag'.
+  ;; Thanks to Jens-Ulrik Holger Petersen
+  ;; <petersen@kurims.kyoto-u.ac.jp> for suggesting the conditional
+  ;; aliasing of SEMI functions.
+  (unless (fboundp 'mime-edit-content-beginning)
+    (defalias 'mime-edit-content-beginning 'mime-editor/content-beginning))
+  (unless (fboundp 'mime-edit-insert-tag)
+    (defalias 'mime-edit-insert-tag 'mime-editor/insert-tag))
+  (unless (fboundp 'mime-edit-insert-binary-file)
+    (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'."
+(defun build-report (&rest args)
+  "Initializes a fresh mail composition buffer using `compose-mail'
+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
+`compose-mail', `mail-user-agent',
+`build-report-destination',
+`build-report-keep-regexp',
+`build-report-delete-regexp',
+`build-report-make-output-file' and
+`build-report-installation-file'."
   (interactive
    (let (prompt
 	 hist
 	 arg
-	 (prompts xemacs-build-report-prompts))
+	 (prompts build-report-prompts))
      (progn
        (while prompts
 	 (setq prompt (caar prompts))
@@ -151,93 +175,119 @@
        arg)))
   (save-excursion
     (compose-mail
-     xemacs-build-report-destination
-     (apply 'format xemacs-build-report-subject args)
+     build-report-destination
+     (apply 'format 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)
-      )))
+    (let ((report-begin (point)))
+      (insert (build-report-insert-make-output report-begin))
+      (insert (build-report-insert-installation-file
+	       report-begin
+	       build-report-installation-insert-all))
+      (insert (build-report-insert-header report-begin))
+      (goto-char report-begin))))
 
-(defun xemacs-build-report-insert-header (where)
-  "Inserts the xemacs-build-report-header at the point specified by `where'."
+(defun build-report-insert-header (where)
+  "Inserts the 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"))
+  (with-temp-buffer
+    (insert "\n> XEmacs Build Report as generated\n> by"
+	    " build-report-version "
+	    build-report-version " follows:\n\n")
+    (buffer-string)))
 
-(defun xemacs-build-report-insert-make-output (where)
+(defun 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."
+`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")))
+  (with-temp-buffer
+    (if (file-exists-p build-report-make-output-file)
+	(progn
+	  (if (featurep 'mime-setup)
+	      (progn
+		(mime-edit-insert-tag
+		 "text"
+		 "plain" 
+		 (concat
+		  "\nContent-Disposition: attachment;"
+		  " filename=\""
+		  (file-name-nondirectory
+		   build-report-make-output-file)
+		  "\""))
+		(mime-edit-insert-binary-file
+		 build-report-make-output-file
+		 build-report-file-encoding))
+	    (insert-file-contents build-report-make-output-file))
+	  (goto-char (point-min))
+	  (delete-non-matching-lines (build-report-keep))
+	  (goto-char (point-min))
+	  (delete-matching-lines (build-report-delete))
+	  (goto-char (point-min))
+	  (insert "> Contents of " 
+		  build-report-make-output-file
+		  "\n> keeping lines matching\n> \""
+		  (build-report-keep)
+		  "\"\n> and then deleting lines matching\n> \""
+		  (build-report-delete)
+		  "\"\n\n"))
+      (insert "> " build-report-make-output-file
+	      " does not exist!\n\n"))
+    (buffer-string)))
       
-(defun xemacs-build-report-insert-installation-file (where)
-  "Inserts the contents of the `xemacs-build-report-installation-file'
+(defun build-report-insert-installation-file (where all)
+  "Inserts the contents of the `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")))
+  (with-temp-buffer
+    (if (file-exists-p build-report-installation-file)
+	(let (file-begin last-configure)
+	  (insert "> Contents of "
+		  build-report-installation-file
+		  ":\n")
+	  (insert
+	   (format
+	    "> (Output from %s of ./configure)\n\n"
+	    (if all "all runs" "most recent run")))
+	  (if (featurep 'mime-setup)
+	      (progn
+		(mime-edit-insert-tag
+		 "text"
+		 "plain" 
+		 (concat
+		  "\nContent-Disposition: attachment;"
+		  " filename=\""
+		  (file-name-nondirectory
+		   build-report-installation-file)
+		  "\""))
+		(mime-edit-insert-binary-file
+		 build-report-installation-file
+		 build-report-file-encoding)
+		(setq file-begin (mime-edit-content-beginning)))
+	    (setq file-begin (point))
+	    (insert-file-contents
+	     build-report-installation-file))
+	  (unless all
+	    (setq last-configure
+		  (search-backward-regexp
+		   "^\\(uname.*\\|osversion\\):\\s-+" file-begin t))
+	    (if (and file-begin last-configure)
+		(delete-region file-begin last-configure))))
+      (insert "> " build-report-installation-file
+	      " does not exist!\n\n"))
+    (buffer-string)))
 
-;;; xemacs-build-report.el ends here
+(defun build-report-keep ()
+  "build-report-internal fuction of no general value."
+  (mapconcat '(lambda (item) item)
+	     (cons "^--\\[\\[\\|\\]\\]$" build-report-keep-regexp) "\\|"))
+
+(defun build-report-delete ()
+  "build-report-internal fuction of no general value."
+  (mapconcat '(lambda (item) item)
+	     build-report-delete-regexp "\\|"))
+
+;;; build-report.el ends here