]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/autoload.el
authors.el trivia
[gnu-emacs] / lisp / emacs-lisp / autoload.el
index f8f8d9b00f2bdf6fc413375ed43272fde069462f..5af666b9dedda4b4e423953ea121a69649b7ac8b 100644 (file)
@@ -1,6 +1,6 @@
 ;; autoload.el --- maintain autoloads in loaddefs.el
 
-;; Copyright (C) 1991-1997, 2001-2011  Free Software Foundation, Inc.
+;; Copyright (C) 1991-1997, 2001-2012  Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
 ;; Keywords: maint
@@ -446,7 +446,11 @@ Return non-nil if and only if FILE adds no autoloads to OUTFILE
                    generated-autoload-load-name
                  (autoload-file-load-name absfile)))
           (when (and outfile
-                     (not (equal outfile (autoload-generated-file))))
+                     (not
+                     (if (memq system-type '(ms-dos windows-nt))
+                         (equal (downcase outfile)
+                                (downcase (autoload-generated-file)))
+                       (equal outfile (autoload-generated-file)))))
             (setq otherbuf t))
           (save-excursion
             (save-restriction
@@ -512,8 +516,7 @@ Return non-nil if and only if FILE adds no autoloads to OUTFILE
 
           (when output-start
             (let ((secondary-autoloads-file-buf
-                   (if (local-variable-p 'generated-autoload-file)
-                       (current-buffer))))
+                   (if otherbuf (current-buffer))))
               (with-current-buffer (marker-buffer output-start)
                 (save-excursion
                   ;; Insert the section-header line which lists the file name
@@ -769,52 +772,21 @@ Calls `update-directory-autoloads' on the command line arguments.
 Definitions are written to `generated-autoload-file' (which
 should be non-nil)."
   ;; For use during the Emacs build process only.
+  ;; Exclude those files that are preloaded on ALL platforms.
+  ;; These are the ones in loadup.el where "(load" is at the start
+  ;; of the line (crude, but it works).
   (unless autoload-excludes
-    (let* ((ldir (file-name-directory generated-autoload-file))
-          (default-directory
-            (file-name-as-directory
-             (expand-file-name (if (eq system-type 'windows-nt)
-                                   "../lib-src"
-                                 "../src") ldir)))
-          (mfile "Makefile")
-          (tmpfile "echolisp.tmp")
-          lim)
-      ;; Windows uses the 'echolisp' approach because:
-      ;; i) It does not have $lisp as a single simple definition, so
-      ;; it would be harder to parse the Makefile.
-      ;; ii) It can, since it already has $lisp broken up into pieces
-      ;; that the command-line can handle.
-      ;; Non-Windows builds do not use the 'echolisp' approach because
-      ;; no-one knows (?) the maximum safe command-line length on all
-      ;; supported systems.  $lisp is much longer there since it uses
-      ;; absolute paths, and it would seem a shame to split it just for this.
-      (when (file-readable-p mfile)
-       (if (eq system-type 'windows-nt)
-           (when (ignore-errors
-                  (if (file-exists-p tmpfile) (delete-file tmpfile))
-                  ;; FIXME call-process is better, if it works.
-                  (shell-command (format "%s echolisp > %s"
-                                         autoload-make-program tmpfile))
-                  (file-readable-p tmpfile))
-             (with-temp-buffer
-               (insert-file-contents tmpfile)
-               ;; FIXME could be a single while loop.
-               (while (not (eobp))
-                 (setq lim (line-end-position))
-                 (while (re-search-forward "\\([^ ]+\\.el\\)c?\\>" lim t)
-                   (push (expand-file-name (match-string 1))
-                         autoload-excludes))
-                 (forward-line 1))))
-         (with-temp-buffer
-           (insert-file-contents mfile)
-           (when (re-search-forward "^shortlisp= " nil t)
-             (while (and (not lim)
-                         (re-search-forward "\\.\\./lisp/\\([^ ]+\\.el\\)c?\\>"
-                                            nil t))
-               (push (expand-file-name (match-string 1) ldir)
-                     autoload-excludes)
-               (skip-chars-forward " \t")
-               (if (eolp) (setq lim t)))))))))
+    (let ((default-directory (file-name-directory generated-autoload-file))
+         file)
+      (when (file-readable-p "loadup.el")
+       (with-temp-buffer
+         (insert-file-contents "loadup.el")
+         (while (re-search-forward "^(load \"\\([^\"]+\\)\"" nil t)
+           (setq file (match-string 1))
+           (or (string-match "\\.el\\'" file)
+               (setq file (format "%s.el" file)))
+           (or (string-match "\\`site-" file)
+               (push (expand-file-name file) autoload-excludes)))))))
   (let ((args command-line-args-left))
     (setq command-line-args-left nil)
     (apply 'update-directory-autoloads args)))