Allow creation of loaddefs files without timestamps.
* lisp/emacs-lisp/autoload.el (autoload-timestamps): New variable. (autoload-generate-file-autoloads, update-directory-autoloads): If autoload-timestamps is nil, write "t" instead of file timestamp. (autoload-find-destination, update-directory-autoloads): If timestamp is "t", use the modtime of the output file instead. ; * etc/NEWS: Mention this.
This commit is contained in:
parent
8d329be865
commit
3517db2d39
2 changed files with 54 additions and 11 deletions
|
@ -87,6 +87,21 @@ that text will be copied verbatim to `generated-autoload-file'.")
|
|||
(defconst generate-autoload-section-continuation ";;;;;; "
|
||||
"String to add on each continuation of the section header form.")
|
||||
|
||||
(defvar autoload-timestamps t
|
||||
"Non-nil means insert a timestamp for each input file into the output.
|
||||
We use these in incremental updates of the output file to decide
|
||||
if we need to rescan an input file. If you set this to nil,
|
||||
then we use the timestamp of the output file instead. As a result:
|
||||
- for fixed inputs, the output will be the same every time
|
||||
- incremental updates of the output file might not be correct if:
|
||||
i) the timestamp of the output file cannot be trusted (at least
|
||||
relative to that of the input files)
|
||||
ii) any of the input files can be modified during the time it takes
|
||||
to create the output
|
||||
iii) only a subset of the input files are scanned
|
||||
These issues are unlikely to happen in practice, and would arguably
|
||||
represent bugs in the build system.")
|
||||
|
||||
(defvar autoload-modified-buffers) ;Dynamically scoped var.
|
||||
|
||||
(defun make-autoload (form file &optional expansion)
|
||||
|
@ -624,7 +639,9 @@ FILE's modification time."
|
|||
;; We'd really want to just use
|
||||
;; `emacs-internal' instead.
|
||||
nil nil 'emacs-mule-unix)
|
||||
(nth 5 (file-attributes relfile))))
|
||||
(if autoload-timestamps
|
||||
(nth 5 (file-attributes relfile))
|
||||
t)))
|
||||
(insert ";;; Generated autoloads from " relfile "\n")))
|
||||
(insert generate-autoload-section-trailer))))
|
||||
(or noninteractive
|
||||
|
@ -688,6 +705,9 @@ removes any prior now out-of-date autoload entries."
|
|||
(catch 'up-to-date
|
||||
(let* ((buf (current-buffer))
|
||||
(existing-buffer (if buffer-file-name buf))
|
||||
(output-file (autoload-generated-file))
|
||||
(output-time (if (file-exists-p output-file)
|
||||
(nth 5 (file-attributes output-file))))
|
||||
(found nil))
|
||||
(with-current-buffer (autoload-find-generated-file)
|
||||
;; This is to make generated-autoload-file have Unix EOLs, so
|
||||
|
@ -712,16 +732,26 @@ removes any prior now out-of-date autoload entries."
|
|||
(file-time (nth 5 (file-attributes file))))
|
||||
(if (and (or (null existing-buffer)
|
||||
(not (buffer-modified-p existing-buffer)))
|
||||
(or
|
||||
(cond
|
||||
;; last-time is the time-stamp (specifying
|
||||
;; the last time we looked at the file) and
|
||||
;; the file hasn't been changed since.
|
||||
(and (listp last-time) (= (length last-time) 2)
|
||||
(not (time-less-p last-time file-time)))
|
||||
((listp last-time)
|
||||
(not (time-less-p last-time file-time)))
|
||||
;; FIXME? Arguably we should throw a
|
||||
;; user error, or some kind of warning,
|
||||
;; if we were called from update-file-autoloads,
|
||||
;; which can update only a single input file.
|
||||
;; It's not appropriate to use the output
|
||||
;; file modtime in such a case,
|
||||
;; if there are multiple input files
|
||||
;; contributing to the output.
|
||||
((and output-time (eq t last-time))
|
||||
(not (time-less-p output-time file-time)))
|
||||
;; last-time is an MD5 checksum instead.
|
||||
(and (stringp last-time)
|
||||
(equal last-time
|
||||
(md5 buf nil nil 'emacs-mule)))))
|
||||
((stringp last-time)
|
||||
(equal last-time
|
||||
(md5 buf nil nil 'emacs-mule)))))
|
||||
(throw 'up-to-date nil)
|
||||
(autoload-remove-section begin)
|
||||
(setq found t))))
|
||||
|
@ -781,7 +811,10 @@ write its autoloads into the specified file instead."
|
|||
(generated-autoload-file
|
||||
(if (called-interactively-p 'interactive)
|
||||
(read-file-name "Write autoload definitions to file: ")
|
||||
generated-autoload-file)))
|
||||
generated-autoload-file))
|
||||
(output-time
|
||||
(if (file-exists-p generated-autoload-file)
|
||||
(nth 5 (file-attributes generated-autoload-file)))))
|
||||
|
||||
(with-current-buffer (autoload-find-generated-file)
|
||||
(save-excursion
|
||||
|
@ -799,6 +832,8 @@ write its autoloads into the specified file instead."
|
|||
;; Remove the obsolete section.
|
||||
(autoload-remove-section (match-beginning 0))
|
||||
(setq last-time (nth 4 form))
|
||||
(if (equal t last-time)
|
||||
(setq last-time output-time))
|
||||
(dolist (file file)
|
||||
(let ((file-time (nth 5 (file-attributes file))))
|
||||
(when (and file-time
|
||||
|
@ -814,7 +849,10 @@ write its autoloads into the specified file instead."
|
|||
(member (expand-file-name file) autoload-excludes))
|
||||
;; Remove the obsolete section.
|
||||
(autoload-remove-section (match-beginning 0)))
|
||||
((not (time-less-p (nth 4 form)
|
||||
((not (time-less-p (let ((oldtime (nth 4 form)))
|
||||
(if (equal t oldtime)
|
||||
output-time
|
||||
oldtime))
|
||||
(nth 5 (file-attributes file))))
|
||||
;; File hasn't changed.
|
||||
nil)
|
||||
|
@ -830,7 +868,7 @@ write its autoloads into the specified file instead."
|
|||
(let ((no-autoloads-time (or last-time '(0 0 0 0))) file-time)
|
||||
(dolist (file files)
|
||||
(cond
|
||||
((member (expand-file-name file) autoload-excludes) nil)
|
||||
((member (expand-file-name file) autoload-excludes nil))
|
||||
;; Passing nil as second argument forces
|
||||
;; autoload-generate-file-autoloads to look for the right
|
||||
;; spot where to insert each autoloads section.
|
||||
|
@ -847,7 +885,9 @@ write its autoloads into the specified file instead."
|
|||
(goto-char (point-max))
|
||||
(search-backward "\f" nil t)
|
||||
(autoload-insert-section-header
|
||||
(current-buffer) nil nil no-autoloads no-autoloads-time)
|
||||
(current-buffer) nil nil no-autoloads (if autoload-timestamps
|
||||
no-autoloads-time
|
||||
t))
|
||||
(insert generate-autoload-section-trailer)))
|
||||
|
||||
(let ((version-control 'never))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue