428
|
1 ;;; build-report.el --- Automatically formatted build reports for XEmacs
|
|
2
|
2976
|
3 ;; Copyright (C) 1997-2003 Adrian Aichner
|
428
|
4
|
434
|
5 ;; Author: Adrian Aichner <adrian@xemacs.org>
|
3008
|
6 ;; Date: $Date: 2005/10/21 10:34:35 $
|
|
7 ;; Version: $Revision: 1.14 $
|
428
|
8 ;; Keywords: internal
|
|
9
|
|
10 ;; This file is part of XEmacs.
|
|
11
|
|
12 ;; XEmacs is free software; you can redistribute it and/or modify
|
|
13 ;; it under the terms of the GNU General Public License as published by
|
|
14 ;; the Free Software Foundation; either version 2, or (at your option)
|
|
15 ;; any later version.
|
|
16
|
|
17 ;; XEmacs is distributed in the hope that it will be useful, but
|
|
18 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
20 ;; General Public License for more details.
|
|
21
|
|
22 ;; You should have received a copy of the GNU General Public License
|
|
23 ;; along with XEmacs; see the file COPYING. If not, write to the Free
|
|
24 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
25 ;; 02111-1307, USA.
|
|
26
|
3008
|
27 ;;; Synched up with: XEmacs build package build-report.el Revision 1.49.
|
428
|
28
|
|
29 ;;; Commentary:
|
|
30
|
|
31 ;; The Idea:
|
|
32 ;; Let XEmacs report interesting aspects of how it was built.
|
|
33
|
|
34 ;; The Concept:
|
|
35 ;; User creates an XEmacs Build Report by just calling
|
|
36 ;; M-x build-report
|
|
37 ;; which will initialize a mail buffer with relevant information
|
|
38 ;; derived from the XEmacs build process. Point is left at the
|
|
39 ;; beginning of the report for user to input some personal notes and
|
|
40 ;; send the report.
|
|
41
|
|
42 ;; The Status:
|
|
43 ;; This is the first `Proof of Concept'.
|
|
44
|
|
45 ;; The Author:
|
|
46 ;; Adrian Aichner, Teradyne GmbH Munich, Sun., Apr. 20, 1997.
|
|
47
|
|
48 ;;; Code:
|
|
49
|
|
50 (require 'config)
|
442
|
51 (require 'custom)
|
|
52 (require 'cl)
|
428
|
53 (provide 'build-report)
|
|
54
|
442
|
55 ;;; Constant definitions used internally by `build-report'. These are not
|
|
56 ;;; anticipated to be changed by users of `build-report'.
|
|
57 ;;; If users do need to change the value of any of these, they need to do
|
|
58 ;;; it after `build-report' has been loaded (not just required). Please
|
|
59 ;;; report it to the maintainers of `build-report' when you think you
|
|
60 ;;; need to do this.
|
|
61 (defconst build-report-installation-version-regexp
|
975
|
62 "XEmacs\\s-+\\([0-9]+\\)\\.\\([0-9]+\\)\\(\\(-b\\|\\.\\)\\([0-9]+\\)\\)?\\s-+\\\\?\"\\([^\\\"]+\\)\\\\?\"\\s-+\\(.*\\)?configured\\s-+for\\s-+`\\(.+\\)'\\."
|
442
|
63 "*REGEXP matching XEmacs Beta Version string in
|
|
64 `build-report-installation-file' file. This variable is used by
|
|
65 `build-report-installation-data'.")
|
|
66
|
|
67 (defconst build-report-version-file-regexp
|
|
68 "emacs_major_version\\s-*=\\s-*\\([0-9]+\\)
|
|
69 emacs_minor_version\\s-*=\\s-*\\([0-9]+\\)
|
|
70 emacs_beta_version\\s-*=\\s-*\\([0-9]+\\)?
|
2976
|
71 xemacs_codename\\s-*=\\s-*\"\\([^\"]+\\)\"\\(
|
|
72 xemacs_extra_name\\s-*=\\s-*\"\\([^\"]+\\)\"\\)?"
|
442
|
73 "*REGEXP matching XEmacs Beta Version variable assignments in
|
|
74 `build-report-version-file' file. This variable is used by
|
|
75 `build-report-version-file-data'.")
|
|
76
|
|
77 (defconst build-report-installation-srcdir-regexp
|
|
78 "\\s-*Where should the build process find the source code\\?\\s-*\\(.*\\)$"
|
|
79 "REGEXP matching XEmacs Beta srcdir as the first substring match in
|
|
80 `build-report-installation-file' file. This variable is used by
|
|
81 `build-report-installation-data'.")
|
|
82
|
|
83 ;;; Customization support for build-report starts here.
|
428
|
84
|
|
85 (defgroup build-report nil
|
442
|
86 "Standardizes the Creation of XEmacs Build Reports."
|
|
87 :load 'build-report
|
428
|
88 :group 'build)
|
|
89
|
|
90 (defcustom build-report-destination
|
460
|
91 (list
|
|
92 "XEmacs Build Reports List <xemacs-buildreports@xemacs.org>"
|
|
93 "XEmacs Beta List <xemacs-beta@xemacs.org>")
|
442
|
94 "*The list of mail addresses XEmacs Build Reports should most likely
|
|
95 go to."
|
|
96 :type '(repeat
|
|
97 :custom-show t
|
|
98 :documentation-shown t
|
|
99 string)
|
428
|
100 :group 'build-report)
|
|
101
|
|
102 (defcustom build-report-keep-regexp
|
460
|
103 (list
|
|
104 "^\\(cd\\|n?make\\)\\s-"
|
|
105 "errors?"
|
|
106 "warnings?"
|
|
107 "pure.*\\(space\\|size\\)"
|
|
108 "hides\\b"
|
|
109 "strange"
|
|
110 "shadowings"
|
|
111 "^Compil\\(ing\\s-+in\\|ation\\)"
|
|
112 "^Using"
|
|
113 "not\\s-+found"
|
|
114 "^While\\s-+compiling.*\\(\n\\s-+.+\\)*"
|
|
115 "^Note:"
|
|
116 "Installing"
|
|
117 "[Ff]ile(s) copied"
|
2976
|
118 "\\s-+tests\\s-+"
|
|
119 "^[A-Z] [^ ]+$"
|
|
120 "^Wrong number of arguments:"
|
|
121 "^ \\*\\* "
|
|
122 "^\\(FAIL\\|SKIP\\):")
|
442
|
123 "*Regexp of make process output lines to keep in the report."
|
|
124 :type '(repeat
|
|
125 :custom-show t
|
|
126 :documentation-shown t
|
|
127 regexp)
|
428
|
128 :group 'build-report)
|
|
129
|
|
130 (defcustom build-report-delete-regexp
|
460
|
131 (list
|
|
132 "confl.*with.*auto-inlining"
|
|
133 "^Formatting:"
|
2976
|
134 "^\\s-*0 .*\\(failure\\|error\\)s?"
|
|
135 "^PASS:"
|
460
|
136 "(100%) tests successful")
|
442
|
137 "*Regexp of make process output lines to delete from the report."
|
|
138 :type '(repeat
|
|
139 :custom-show t
|
|
140 :documentation-shown t
|
|
141 regexp)
|
428
|
142 :group 'build-report)
|
|
143
|
442
|
144 (defcustom build-report-make-output-dir
|
|
145 (cond
|
|
146 ((equal system-type 'windows-nt)
|
|
147 (expand-file-name "nt"
|
|
148 (gethash 'blddir (config-value-hash-table))))
|
|
149 (t
|
|
150 (gethash 'blddir (config-value-hash-table))))
|
|
151 "*Directory where the build report file is found.
|
|
152 If this is empty or nil, the default, it is replaced by the value of
|
|
153 the XEmacs build directory."
|
|
154 :type '(directory
|
|
155 :custom-show t
|
|
156 :documentation-shown t)
|
|
157 :group 'build-report)
|
|
158
|
|
159 (defcustom build-report-make-output-files
|
460
|
160 (list
|
|
161 "beta.err"
|
|
162 "xemacs-make-all.err"
|
|
163 "xemacs-make-check-temacs.err"
|
|
164 "xemacs-make-check.err"
|
|
165 "xemacs-make-install.err")
|
442
|
166 "*List of Filenames where stdout and stderr of XEmacs make process
|
|
167 have been stored. These are relative to
|
|
168 `build-report-make-output-dir`. You'll have to run make with output
|
|
169 redirection or use the `build' XEmacs package to save this output. You
|
|
170 may use following alias
|
|
171
|
428
|
172 alias mk 'make \!* >>&\! \!$.err &'
|
442
|
173
|
501
|
174 under csh, so that you get beta.err when you run `mk beta'."
|
442
|
175 :type '(repeat
|
|
176 :custom-show t
|
|
177 :documentation-shown t
|
|
178 file)
|
428
|
179 :group 'build-report)
|
|
180
|
|
181 (defcustom build-report-installation-file
|
442
|
182 (expand-file-name "Installation"
|
|
183 (gethash 'blddir (config-value-hash-table)))
|
|
184 "*Installation file produced by XEmacs configure process."
|
|
185 :type '(file
|
|
186 :custom-show t
|
|
187 :documentation-shown t)
|
428
|
188 :group 'build-report)
|
|
189
|
442
|
190 (defcustom build-report-version-file
|
|
191 (expand-file-name
|
|
192 "version.sh"
|
|
193 (gethash 'blddir (config-value-hash-table)))
|
|
194 "*version.sh file identifying XEmacs (Beta) Distribution."
|
|
195 :type '(file
|
|
196 :custom-show t
|
|
197 :documentation-shown t)
|
|
198 :group 'build-report)
|
|
199
|
|
200 (defcustom build-report-installation-insert-all
|
|
201 nil
|
|
202 "*Tell build-report to insert the whole Installation file
|
|
203 instead of just the last report."
|
428
|
204 :type 'boolean
|
|
205 :group 'build-report)
|
|
206
|
|
207 (defcustom build-report-subject
|
|
208 (concat "[%s] " emacs-version " on " system-configuration)
|
2976
|
209 ;; #### this should allow variable names which will be evalled and
|
|
210 ;; formatted using %s, see `build-report-prompts'
|
442
|
211 "*XEmacs Build Report Subject Line. %s-sequences will be substituted
|
|
212 with user input through `build-report' according to
|
|
213 `build-report-prompts' using `format'."
|
|
214 :type '(string
|
|
215 :custom-show t
|
|
216 :documentation-shown t)
|
428
|
217 :group 'build-report)
|
|
218
|
|
219 (defcustom build-report-prompts
|
442
|
220 (quote (("Status?: " ("Success" "Failure"))))
|
2976
|
221 ;; #### this should allow variable names which will be evalled and
|
|
222 ;; formatted using %s, see `build-report-prompts'
|
442
|
223 "*XEmacs Build Report Prompt(s). This is a list of prompt-string
|
|
224 lists used by `build-report' in conjunction with
|
|
225 `build-report-subject'. Each list consists of a prompt string
|
|
226 followed by any number of strings which can be chosen via the history
|
|
227 mechanism."
|
|
228 :type '(repeat
|
|
229 :custom-show t
|
|
230 :documentation-shown t
|
|
231 (list
|
|
232 :tag "Prompt"
|
|
233 string
|
|
234 (repeat
|
|
235 :tag "Values"
|
|
236 string)))
|
428
|
237 :group 'build-report)
|
|
238
|
|
239 (defcustom build-report-file-encoding
|
|
240 "7bit"
|
442
|
241 "*XEmacs Build Report File Encoding to be used when MIME support is
|
|
242 available."
|
428
|
243 :group 'build-report)
|
|
244
|
|
245 ;; Symbol Name mappings from TM to SEMI serving as Compatibility
|
|
246 ;; Bandaid
|
|
247 (when (featurep 'mime-setup)
|
|
248 ;; No (defvaralias ...) so far. Thanks to "Didier Verna"
|
442
|
249 ;; <didier@xemacs.org> for reporting my incorrect defvaraliasing of
|
428
|
250 ;; `mime-editor/insert-tag'.
|
|
251 ;; Thanks to Jens-Ulrik Holger Petersen
|
|
252 ;; <petersen@kurims.kyoto-u.ac.jp> for suggesting the conditional
|
|
253 ;; aliasing of SEMI functions.
|
|
254 (unless (fboundp 'mime-edit-content-beginning)
|
|
255 (defalias 'mime-edit-content-beginning 'mime-editor/content-beginning))
|
|
256 (unless (fboundp 'mime-edit-insert-tag)
|
|
257 (defalias 'mime-edit-insert-tag 'mime-editor/insert-tag))
|
|
258 (unless (fboundp 'mime-edit-insert-binary-file)
|
|
259 (defalias 'mime-edit-insert-binary-file
|
|
260 'mime-editor/insert-binary-file)))
|
|
261
|
442
|
262 (defun build-report-make-output-get ()
|
2976
|
263 "Return the filename the XEmacs make output is saved in."
|
442
|
264 (interactive)
|
|
265 (if (or (string-equal build-report-make-output-dir "")
|
|
266 (null build-report-make-output-dir))
|
|
267 (mapcar
|
|
268 (function
|
|
269 (lambda (f)
|
|
270 (expand-file-name
|
|
271 f
|
|
272 (file-name-as-directory
|
|
273 (gethash 'blddir (config-value-hash-table))))))
|
|
274 build-report-make-output-files)
|
|
275 (mapcar
|
|
276 (function
|
|
277 (lambda (f)
|
|
278 (expand-file-name
|
|
279 f
|
|
280 (file-name-as-directory build-report-make-output-dir))))
|
|
281 build-report-make-output-files)))
|
|
282
|
|
283 ;;;###autoload
|
428
|
284 (defun build-report (&rest args)
|
462
|
285 "Report build information including Installation and make output.
|
|
286
|
|
287 Prompts for status (usually \"Success\" or \"Failure\"). Then uses
|
|
288 `compose-mail' to create a mail message. The Subject header contains
|
|
289 status and version information. Point is left at the beginning of the
|
|
290 mail text. Add some notes if you like, and send the report.
|
|
291
|
|
292 Looks for Installation and the make output file (`beta.err' by
|
|
293 default, customizable via `build-report-make-output-files') in the
|
|
294 build directory of the running XEmacs by default (customizable via
|
|
295 `build-report-make-output-dir'). The output from make is filtered
|
|
296 through `build-report-keep-regexp' and `build-report-delete-regexp'
|
|
297 before including in the message.
|
|
298
|
|
299 See also `mail-user-agent', `build-report-destination', and
|
|
300 `build-report-installation-file'."
|
442
|
301 ;; `interactive' form returns value for formal parameter `args'.
|
428
|
302 (interactive
|
|
303 (let (prompt
|
442
|
304 hist
|
|
305 arg
|
|
306 (prompts build-report-prompts))
|
428
|
307 (progn
|
|
308 (while prompts
|
442
|
309 (defvar hist)
|
|
310 (setq prompt (caar prompts))
|
|
311 (setq hist (cdar prompts))
|
|
312 ;; `build-report-prompts' used to be a list of lists, the
|
|
313 ;; first element of each list being the prompt, the rest being
|
|
314 ;; the history. The history is now in a separate list. We
|
|
315 ;; better check for that.
|
|
316 (if (listp (car hist))
|
|
317 (setq hist (car hist)))
|
|
318 (setq prompts (cdr prompts))
|
|
319 (setq arg (cons (read-string prompt "" 'hist) arg)))
|
428
|
320 arg)))
|
3006
|
321 (let ((destination-address
|
|
322 ;; `build-report-destination' used to be a single string, so
|
|
323 ;; let's test if we really get a list of destinations.
|
|
324 (if (listp build-report-destination)
|
|
325 (read-string
|
|
326 "Build Report Destination: "
|
|
327 (car build-report-destination)
|
|
328 'build-report-destination)
|
|
329 (read-string
|
|
330 "Build Report Destination: "
|
|
331 build-report-destination)
|
|
332 )))
|
|
333 (save-excursion
|
|
334 (build-report-create-report destination-address args))))
|
|
335
|
|
336 ;;;###autoload
|
|
337 (defun batch-build-report (&optional status destination)
|
|
338 "Format a build report. Save it as \"./BUILD-REPORT\".
|
|
339 If the file \"./BUILD-REPORT-COMMENT\" is readable, insert its contents.
|
|
340 Optional STATUS is a string to insert in the subject. It defaults to
|
|
341 \"Success\". \(This will be made customizable.)
|
|
342 Optional DESTINATION is a string containing the destination mailbox. It
|
|
343 defaults to \"XEmacs Build Reports <xemacs-buildreports@xemacs.org>\".
|
|
344 \(This will be made customizable.)
|
|
345 This function may be invoked as a command."
|
|
346 (interactive)
|
|
347 (unless (stringp status) (setq status "Success"))
|
|
348 (unless (stringp destination)
|
|
349 (setq destination "XEmacs Build Reports <xemacs-buildreports@xemacs.org>"))
|
428
|
350 (save-excursion
|
3006
|
351 (build-report-create-report destination
|
|
352 ;; #### listify in the internal function?
|
|
353 (list status)))
|
|
354 (when (file-readable-p "BUILD-REPORT-COMMENT")
|
|
355 (insert-file "BUILD-REPORT-COMMENT"))
|
|
356 (write-file "BUILD-REPORT"))
|
|
357
|
|
358 (defun build-report-create-report (destination status)
|
|
359 "Format current buffer as an XEmacs build report to DESTINATION.
|
|
360
|
|
361 DESTINATION is the mailbox to which the report will be submitted.
|
|
362 STATUS is the status of the build.
|
|
363 You probably don't want to use this function; see `build-report' for the
|
|
364 interactive command, and `batch-build-report' for a command suitable for
|
|
365 use in shell scripts and Makefiles."
|
|
366 (if (file-exists-p build-report-installation-file)
|
442
|
367 (multiple-value-bind
|
3006
|
368 (major minor beta codename extraname configuration)
|
|
369 (build-report-installation-data build-report-installation-file)
|
|
370 (setq build-report-subject
|
|
371 (format "[%%s] XEmacs %s.%s%s \"%s\" %s%s"
|
|
372 major minor beta codename extraname configuration)))
|
|
373 (multiple-value-bind
|
|
374 (major minor beta codename extraname)
|
|
375 (build-report-version-file-data build-report-version-file)
|
|
376 (setq build-report-subject
|
|
377 (format "[%%s] XEmacs %s.%s%s \"%s\" %s%s"
|
|
378 major minor beta codename extraname system-configuration))))
|
|
379 (compose-mail destination
|
|
380 (apply 'format build-report-subject status)
|
|
381 nil nil nil nil nil)
|
|
382 (let* ((report-begin (point))
|
|
383 (files (reverse (build-report-make-output-get)))
|
|
384 (file (car files)))
|
|
385 (while file
|
|
386 (if (file-exists-p file)
|
|
387 (insert (build-report-insert-make-output report-begin file))
|
|
388 (insert (format "%s not found!\n" file)))
|
442
|
389 (insert "\n")
|
3006
|
390 (setq files (cdr files))
|
|
391 (setq file (car files)))
|
|
392 (if (file-exists-p build-report-installation-file)
|
|
393 (insert (build-report-insert-installation-file
|
|
394 report-begin
|
|
395 build-report-installation-insert-all))
|
|
396 (insert (format "%s not found!\n" build-report-installation-file)))
|
|
397 (insert "\n")
|
|
398 (insert (build-report-insert-header report-begin))
|
|
399 (goto-char report-begin)))
|
428
|
400
|
|
401 (defun build-report-insert-header (where)
|
|
402 "Inserts the build-report-header at the point specified by `where'."
|
|
403 (goto-char where)
|
|
404 (with-temp-buffer
|
442
|
405 (insert
|
|
406 (format "
|
|
407 > XEmacs Build Report generated by emacs-version
|
|
408 > %s
|
|
409 > with system-configuration
|
|
410 > %s
|
|
411 > follows:\n\n" emacs-version system-configuration))
|
428
|
412 (buffer-string)))
|
|
413
|
442
|
414 (defun build-report-insert-make-output (where file)
|
|
415 "Inserts the output of the XEmacs Beta make run in the
|
|
416 current buffer at position WHERE.
|
428
|
417 The make process output must have been saved in
|
442
|
418 `build-report-make-output-files' during the XEmacs Beta building."
|
428
|
419 (goto-char where)
|
|
420 (with-temp-buffer
|
442
|
421 (if (file-exists-p file)
|
|
422 (progn
|
|
423 (if (featurep 'mime-setup)
|
|
424 (progn
|
|
425 (mime-edit-insert-tag
|
|
426 "text"
|
|
427 "plain"
|
|
428 (concat
|
|
429 "\nContent-Disposition: attachment;"
|
|
430 " filename=\""
|
|
431 (file-name-nondirectory
|
|
432 file)
|
|
433 "\""))
|
|
434 (mime-edit-insert-binary-file
|
|
435 file
|
|
436 build-report-file-encoding))
|
|
437 (insert-file-contents file))
|
|
438 (when build-report-keep-regexp
|
|
439 (goto-char (point-min))
|
|
440 (delete-non-matching-lines (build-report-keep)))
|
|
441 (when build-report-delete-regexp
|
|
442 (goto-char (point-min))
|
|
443 (delete-matching-lines (build-report-delete)))
|
|
444 (goto-char (point-min))
|
|
445 (if build-report-keep-regexp
|
|
446 (insert
|
|
447 (format
|
|
448 "> keeping lines matching
|
|
449 > \"%s\"
|
|
450 "
|
|
451 (build-report-keep))))
|
|
452 (if build-report-delete-regexp
|
|
453 (insert
|
|
454 (format
|
|
455 "> %sdeleting lines matching
|
|
456 > \"%s\"
|
|
457 "
|
|
458 (if build-report-keep-regexp
|
|
459 "and then "
|
|
460 "")
|
|
461 (build-report-delete))))
|
|
462 (insert "\n")
|
|
463 (goto-char (point-min))
|
|
464 (insert
|
|
465 (format "> Contents of %s\n" file)))
|
|
466 (insert "> " file
|
|
467 " does not exist!\n\n"))
|
428
|
468 (buffer-string)))
|
442
|
469
|
428
|
470 (defun build-report-insert-installation-file (where all)
|
|
471 "Inserts the contents of the `build-report-installation-file'
|
|
472 created by the XEmacs Beta configure process."
|
|
473 (goto-char where)
|
|
474 (with-temp-buffer
|
|
475 (if (file-exists-p build-report-installation-file)
|
442
|
476 (let (file-begin last-configure)
|
|
477 (insert "> Contents of "
|
|
478 build-report-installation-file
|
|
479 ":\n")
|
|
480 (insert
|
|
481 (format
|
|
482 "> (Output from %s of ./configure)\n\n"
|
|
483 (if all "all runs" "most recent run")))
|
|
484 (if (featurep 'mime-setup)
|
|
485 (progn
|
|
486 (mime-edit-insert-tag
|
|
487 "text"
|
|
488 "plain"
|
|
489 (concat
|
|
490 "\nContent-Disposition: attachment;"
|
|
491 " filename=\""
|
|
492 (file-name-nondirectory
|
|
493 build-report-installation-file)
|
|
494 "\""))
|
|
495 (mime-edit-insert-binary-file
|
|
496 build-report-installation-file
|
|
497 build-report-file-encoding)
|
|
498 (setq file-begin (mime-edit-content-beginning)))
|
|
499 (setq file-begin (point))
|
|
500 (insert-file-contents
|
|
501 build-report-installation-file))
|
|
502 (unless all
|
|
503 (setq last-configure
|
|
504 (search-backward-regexp
|
|
505 "^\\(uname.*\\|osversion\\|OS\\):\\s-+" file-begin t))
|
|
506 (if (and file-begin last-configure)
|
|
507 (delete-region file-begin last-configure))))
|
428
|
508 (insert "> " build-report-installation-file
|
442
|
509 " does not exist!\n\n"))
|
428
|
510 (buffer-string)))
|
|
511
|
|
512 (defun build-report-keep ()
|
442
|
513 "Concatenate elements of `build-report-keep-regexp' and a general
|
|
514 MIME tag REGEXP. The result is a REGEXP string matching either of the
|
|
515 REGEXPs in `build-report-keep-regexp' or a general MIME tag REGEXP."
|
428
|
516 (mapconcat #'identity
|
442
|
517 (cons "^--\\[\\[\\|\\]\\]$" build-report-keep-regexp) "\\|"))
|
428
|
518
|
|
519 (defun build-report-delete ()
|
442
|
520 "Concatenate elements of `build-report-delete-regexp' and a general
|
|
521 MIME tag REGEXP. The result is a REGEXP string matching either of the
|
|
522 REGEXPs in `build-report-delete-regexp' or a general MIME tag REGEXP."
|
|
523 (mapconcat '(lambda (item) item)
|
|
524 build-report-delete-regexp "\\|"))
|
|
525
|
|
526 (defun build-report-installation-data (&optional file)
|
|
527 "Return a list of XEmacs installation data containing MAJOR_NUMBER
|
|
528 MINOR_NUMBER BETA_STRING CODENAME CONFIGURATION SRCDIR from FILE,
|
|
529 which defaults to `build-report-installation-file'."
|
|
530 (interactive "fInstallation file: ")
|
|
531 (unless file
|
|
532 (setq file build-report-installation-file))
|
|
533 (let
|
975
|
534 (major minor beta codename extraname configuration srcdir)
|
442
|
535 (save-window-excursion
|
|
536 (find-file-read-only file)
|
|
537 (goto-char (point-min))
|
|
538 (while (< (point) (point-max))
|
|
539 (cond
|
|
540 ((looking-at build-report-installation-version-regexp)
|
|
541 (goto-char (match-end 0))
|
2976
|
542 (setq major (or (match-string 1) ""))
|
|
543 (setq minor (or (match-string 2) ""))
|
|
544 (setq beta (or (match-string 3) ""))
|
|
545 (setq codename (or (match-string 6) ""))
|
|
546 (setq extraname (or (match-string 7) ""))
|
|
547 (setq configuration (or (match-string 8) "")))
|
442
|
548 ((looking-at build-report-installation-srcdir-regexp)
|
|
549 (goto-char (match-end 0))
|
2976
|
550 (setq srcdir (or (match-string 1) "")))
|
442
|
551 ;; We avoid matching a potentially zero-length string to avoid
|
|
552 ;; infinite looping.
|
|
553 ((looking-at
|
|
554 "^.+$")
|
|
555 (goto-char (match-end 0)))
|
|
556 ((looking-at "\n")
|
|
557 (goto-char (match-end 0)))))
|
975
|
558 (values major minor (or beta "") codename extraname configuration srcdir))))
|
442
|
559
|
|
560 (defun build-report-version-file-data (&optional file)
|
|
561 "Return a list of XEmacs version information containing
|
|
562 MAJOR_NUMBER MINOR_NUMBER BETA_STRING CODENAME from FILE, which
|
|
563 defaults to `build-report-version-file'."
|
|
564 (interactive "fversion.sh file: ")
|
|
565 (unless file
|
|
566 (setq file build-report-version-file))
|
|
567 (let
|
975
|
568 (major minor beta codename extraname)
|
442
|
569 (save-window-excursion
|
|
570 (find-file-read-only file)
|
|
571 (goto-char (point-min))
|
|
572 (while (< (point) (point-max))
|
|
573 (cond
|
|
574 ((looking-at build-report-version-file-regexp)
|
|
575 (goto-char (match-end 0))
|
2976
|
576 (setq major (or (match-string 1) ""))
|
|
577 (setq minor (or (match-string 2) ""))
|
|
578 (setq beta (or (match-string 3) ""))
|
|
579 (setq codename (or (match-string 4) ""))
|
|
580 (setq extraname (or (match-string 6) "")))
|
442
|
581 ;; We avoid matching a potentially zero-length string to avoid
|
|
582 ;; infinite looping.
|
|
583 ((looking-at
|
|
584 "^.+$")
|
|
585 (goto-char (match-end 0)))
|
|
586 ((looking-at "\n")
|
|
587 (goto-char (match-end 0)))))
|
975
|
588 (values major minor (or beta "") codename extraname))))
|
428
|
589
|
|
590 ;;; build-report.el ends here
|