Mercurial > hg > xemacs-beta
diff lisp/make-docfile.el @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | abe6d1db359e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/make-docfile.el Mon Aug 13 11:28:15 2007 +0200 @@ -0,0 +1,195 @@ +;;; make-docfile.el --- Cache docstrings in external file + +;; Copyright (C) 1985, 1986, 1992-1995, 1997 Free Software Foundation, Inc. + +;; Author: Unknown +;; Maintainer: Steven L Baur <steve@xemacs.org> +;; 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 in FSF + +;;; Commentary: + +;; This is a front-end to the make-docfile program that gathers up all the +;; lisp files that will be dumped with XEmacs. It would probably be best +;; to just move make-docfile.c completely to lisp and be done with it. + +;;; Code: + +(defvar options nil) +(defvar processed nil) +(defvar docfile nil) +(defvar docfile-buffer nil) +(defvar site-file-list nil) +(defvar docfile-out-of-date nil) + +;; Gobble up the stuff we don't wish to pass on. +(setq command-line-args (cdr (cdr (cdr (cdr command-line-args))))) + +;; First gather up the command line options. +(let (done) + (while (and (null done) command-line-args) + (let ((arg (car command-line-args))) + (cond ((or (string-equal arg "-o") ; Specify DOC file name + (string-equal arg "-a") ; Append to DOC file + (string-equal arg "-d")) ; Set working directory + (if (string-equal arg "-o") + (setq docfile (expand-file-name (car (cdr command-line-args))))) + (setq options (cons arg options)) + (setq options (cons (expand-file-name (car (cdr command-line-args))) options))) + ((string-equal arg "-i") ; Set site files to scan + (setq site-file-list (car (cdr command-line-args)))) + (t (setq done t))) + (if (null done) + (setq command-line-args (cdr (cdr command-line-args))))))) +(setq options (nreverse options)) + +;; (print (concat "Options: " (prin1-to-string options))) + +;; Next process the list of C files. +(while command-line-args + (let ((arg (car command-line-args))) + (if (null (member arg processed)) + (progn + (if (and (null docfile-out-of-date) + (file-newer-than-file-p arg docfile)) + (setq docfile-out-of-date t)) + (setq processed (cons arg processed))))) + (setq command-line-args (cdr command-line-args))) + +;; Then process the list of Lisp files. +(setq load-path (split-path (getenv "EMACSBOOTSTRAPLOADPATH"))) + +(load "very-early-lisp" nil t) + +;; Then process the autoloads +(setq autoload-file-name "auto-autoloads.elc") +(load "find-paths.el") +(load "packages.el") +(load "setup-paths.el") +(load "dump-paths.el") + +(setq + load-path + (nconc load-path (split-path (getenv "EMACSBOOTSTRAPLOADPATH")))) + +(let (preloaded-file-list) + (load (expand-file-name "../lisp/dumped-lisp.el")) + + (let ((package-preloaded-file-list + (packages-collect-package-dumped-lisps late-package-load-path))) + + (setq preloaded-file-list + (append package-preloaded-file-list + preloaded-file-list + packages-hardcoded-lisp))) + + (while preloaded-file-list + (let ((arg0 (packages-add-suffix (car preloaded-file-list))) + arg) + (setq arg (locate-library arg0)) + (if (null arg) + (progn + (princ (format "Error: dumped file %s does not exist\n" arg0)) + ;; Uncomment in case of difficulties + ;;(print (format "late-packages: %S" late-packages)) + ;;(print (format "guessed-roots: %S" (paths-find-emacs-roots invocation-directory invocation-name))) + ) + (if (null (member arg processed)) + (progn + (if (and (null docfile-out-of-date) + (file-newer-than-file-p arg docfile)) + (setq docfile-out-of-date t)) + (setq processed (cons arg processed))))) + (setq preloaded-file-list (cdr preloaded-file-list))))) + +;; Finally process the list of site-loaded files. +(if site-file-list + (let (site-load-packages) + (load site-file-list t t) + (while site-load-packages + (let ((arg (car site-load-packages))) + (if (null (member arg processed)) + (progn + (if (and (null docfile-out-of-date) + (file-newer-than-file-p arg docfile)) + (setq docfile-out-of-date t)) + (setq processed (cons arg processed))))) + (setq site-load-packages (cdr site-load-packages))))) + +;(let ((autoloads (packages-list-autoloads-path))) +; ;; (print (concat "Autoloads: " (prin1-to-string autoloads))) +; (while autoloads +; (let ((arg (car autoloads))) +; (if (null (member arg processed)) +; (progn +; ;; (print arg) +; (if (and (null docfile-out-of-date) +; (file-newer-than-file-p arg docfile)) +; (setq docfile-out-of-date t)) +; (setq processed (cons arg processed)))) +; (setq autoloads (cdr autoloads))))) + +;; Now fire up make-docfile and we're done + +(setq processed (nreverse processed)) + +;; (print (prin1-to-string (append options processed))) + +(if docfile-out-of-date + (progn + (princ "Spawning make-docfile ...") + ;; (print (prin1-to-string (append options processed))) + + (setq exec-path (list (concat default-directory "../lib-src"))) + + ;; (locate-file-clear-hashing nil) + (if (memq system-type '(berkeley-unix next-mach)) + ;; Suboptimal, but we have a unresolved bug somewhere in the + ;; low-level process code + (call-process-internal + "/bin/csh" + nil + t + nil + "-fc" + (mapconcat + #'identity + (append + (list (concat default-directory "../lib-src/make-docfile")) + options processed) + " ")) + ;; (print (prin1-to-string (append options processed))) + (apply 'call-process-internal + ;; (concat default-directory "../lib-src/make-docfile") + "make-docfile" + nil + t + nil + (append options processed))) + + (princ "Spawning make-docfile ...done\n") + ;; (write-region-internal (point-min) (point-max) "/tmp/DOC") + ) + (princ "DOC file is up to date\n")) + +(kill-emacs) + +;;; make-docfile.el ends here