# HG changeset patch # User Glenn Morris # Date 1255586992 0 # Node ID 97edf9210d351b1e59aad7aa6bf5822c39067d9d # Parent 95ba84479a01c7b8e63ee965de1f2a942e72304d (autoload-make-program): New variable. (batch-update-autoloads): Handle autoload-excludes on windows-nt. See discussion: http://lists.gnu.org/archive/html/emacs-devel/2009-10/msg00243.html diff -r 95ba84479a01 -r 97edf9210d35 lisp/emacs-lisp/autoload.el --- a/lisp/emacs-lisp/autoload.el Thu Oct 15 06:05:07 2009 +0000 +++ b/lisp/emacs-lisp/autoload.el Thu Oct 15 06:09:52 2009 +0000 @@ -679,6 +679,9 @@ (define-obsolete-function-alias 'update-autoloads-from-directories 'update-directory-autoloads "22.1") +(defvar autoload-make-program (or (getenv "MAKE") "make") + "Name of the make program in use during the Emacs build process.") + ;;;###autoload (defun batch-update-autoloads () "Update loaddefs.el autoloads in batch mode. @@ -686,17 +689,48 @@ ;; For use during the Emacs build process only. (unless autoload-excludes (let* ((ldir (file-name-directory generated-autoload-file)) - (mfile (expand-file-name "../src/Makefile" ldir)) + (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) - (with-temp-buffer - (insert-file-contents mfile) - (when (re-search-forward "^lisp= " nil t) - (setq lim (line-end-position)) - (while (re-search-forward "\\${lispsource}\\([^ ]+\\.el\\)c?\\>" - lim t) - (push (expand-file-name (match-string 1) ldir) - autoload-excludes))))))) + (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 "^lisp= " nil t) + (setq lim (line-end-position)) + (while (re-search-forward "\\${lispsource}\\([^ ]+\\.el\\)c?\\>" + lim t) + (push (expand-file-name (match-string 1) ldir) + autoload-excludes)))))))) (let ((args command-line-args-left)) (setq command-line-args-left nil) (apply 'update-directory-autoloads args)))