annotate lisp/emacs-lisp/autoload.el @ 30408:e3e2c9051c5f

Got rid of all byte-compiler warnings on Emacs. Add to the menu when the file is loaded, not in ada-mode-hook. Add -toolbar to the default ddd command Switches moved from ada-prj-default-comp-cmd and ada-prj-default-make-cmd to ada-prj-default-comp-opt (ada-add-ada-menu): Remove the map and name parameters Add the Ada Reference Manual to the menu (ada-check-current): rewritten as a call to ada-compile-current (ada-compile): Removed. (ada-compile-application, ada-compile-current, ada-check-current): Set the compilation-search-path so that compile.el automatically finds the sources in src_dir. Automatic scrollong of the compilation buffer. C-uC-cC-c asks for confirmation before compiling (ada-compile-current): New parameter, prj-field (ada-complete-identifier): Load the .ali file before doing processing (ada-find-ali-file-in-dir): prepend build_dir to obj_dir to conform to gnatmake's behavior. (ada-find-file-in-dir): New function (ada-find-references): Set the environment variables for gnatfind (ada-find-src-file-in-dir): New function. (ada-first-non-nil): Removed (ada-gdb-application): Add support for jdb, the java debugger. (ada-get-ada-file-name): Load the original-file first if not done yet. (ada-get-all-references): Handles the new ali syntax (parent types are found between <>). (ada-initialize-runtime-library): New function (ada-mode-hook): Always load a project file when a file is opened, so that the casing exceptions are correctly read. (ada-operator-re): Add all missing operators ("abs", "rem", "**"). (ada-parse-prj-file): Use find-file-noselect instead of find-file to open the project file, since the latter does not work with speedbar Get default values before loading the prj file, or the default executable file name is wrong. Use the absolute value of src_dir to initialize ada-search-directories and compilation-search-path,... Add the standard runtime library to the search path for find-file. (ada-prj-default-debugger): Was missing an opening '{' (ada-prj-default-bind-opt, ada-prj-default-link-opt): New variables. (ada-prj-default-gnatmake-opt): New variable (ada-prj-find-prj-file): Handles non-file buffers For non-Ada buffers, the project file is the default one Save the windows configuration before displaying the menu. (ada-prj-src-dir, ada-prj-obj-dir, ada-prj-comp-opt,...): Removed (ada-read-identifier): Fix xrefs on operators (for "mod", "and", ...) regexp-quote identifiers names to support operators +, -,... in regexps. (ada-remote): New function. (ada-run-application): Erase the output buffer before starting the run Support remote execution of the application. Use call-process, or the arguments are incorrectly parsed (ada-set-default-project-file): Reread the content of the active project file, not the one from the current buffer When a project file is set as the default project, all directories are automatically associated with it. (ada-set-environment): New function (ada-treat-cmd-string): New special variable ${current} (ada-treat-cmd-string): Revised. The substitution is now done for any ${...} substring (ada-xref-current): If no body was found, compiles the spec instead. Setup ADA_{SOURCE,OBJECTS}_PATH before running the compiler to get rid of command line length limitations. (ada-xref-get-project-field): New function (ada-xref-project-files): New variable (ada-xref-runtime-library-specs-path) (ada-xref-runtime-library-ali-path): New variables (ada-xref-set-default-prj-values): Default run command now does a cd to the build directory. New field: main_unit Provide a default file name even if the current buffer has no prj file.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 24 Jul 2000 11:13:11 +0000
parents eafd45bcdcc1
children 6144bd28b9b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 648
diff changeset
1 ;;; autoload.el --- maintain autoloads in loaddefs.el.
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 648
diff changeset
2
16995
22c9b578e220 (update-autoloads-from-directory): Get absolute file names from
Roland McGrath <roland@gnu.org>
parents: 16158
diff changeset
3 ;; Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
4
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 24896
diff changeset
5 ;; Author: Roland McGrath <roland@gnu.org>
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1975
diff changeset
6 ;; Keywords: maint
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
7
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
8 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
9
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
13 ;; any later version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
14
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
18 ;; GNU General Public License for more details.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
19
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
20 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14044
diff changeset
23 ;; Boston, MA 02111-1307, USA.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24
7942
bc5dccc5375f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7477
diff changeset
25 ;;; Commentary:
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
26
7437
d9b4098cebb7 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7354
diff changeset
27 ;; This code helps GNU Emacs maintainers keep the loaddefs.el file up to
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
28 ;; date. It interprets magic cookies of the form ";;;###autoload" in
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
29 ;; lisp source files in various useful ways. To learn more, read the
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
30 ;; source; if you're going to use this, you'd better be able to.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
31
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
32 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
33
19170
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
34 (defvar generated-autoload-file "loaddefs.el"
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
35 "*File \\[update-file-autoloads] puts autoloads into.
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
36 A `.el' file can set this in its local variables section to make its
24896
701d2b4c7484 (generated-autoload-file): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23092
diff changeset
37 autoloads go somewhere else. The autoload file is assumed to contain a
701d2b4c7484 (generated-autoload-file): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23092
diff changeset
38 trailer starting with a FormFeed character.")
19170
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
39
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
40 (defconst generate-autoload-cookie ";;;###autoload"
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
41 "Magic comment indicating the following form should be autoloaded.
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
42 Used by \\[update-file-autoloads]. This string should be
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
43 meaningless to Lisp (e.g., a comment).
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
44
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
45 This string is used:
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
46
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
47 ;;;###autoload
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
48 \(defun function-to-be-autoloaded () ...)
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
49
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
50 If this string appears alone on a line, the following form will be
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
51 read and an autoload made for it. If there is further text on the line,
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
52 that text will be copied verbatim to `generated-autoload-file'.")
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
53
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
54 (defconst generate-autoload-section-header "\f\n;;;### "
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
55 "String that marks the form at the start of a new file's autoload section.")
19170
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
56
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
57 (defconst generate-autoload-section-trailer "\n;;;***\n"
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
58 "String which indicates the end of the section of autoloads for a file.")
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
59
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
60 (defconst generate-autoload-section-continuation ";;;;;; "
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
61 "String to add on each continuation of the section header form.")
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
62
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 (defun make-autoload (form file)
17750
f11a3a49088c (defcustom): Add doc-string-elt property.
Richard M. Stallman <rms@gnu.org>
parents: 17591
diff changeset
64 "Turn FORM into an autoload or defvar for source file FILE.
29549
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
65 Returns nil if FORM is not a special autoload form (i.e. a function definition
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
66 or macro definition or a defcustom)."
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
67 (let ((car (car-safe form)) expand)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
68 (cond
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
69 ;; For complex cases, try again on the macro-expansion.
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
70 ((and (memq car '(easy-mmode-define-global-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
71 easy-mmode-define-minor-mode define-minor-mode))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
72 (setq expand (let ((load-file-name file)) (macroexpand form)))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
73 (eq (car expand) 'progn)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
74 (memq :autoload-end expand))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
75 (let ((end (memq :autoload-end expand)))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
76 ;; Cut-off anything after the :autoload-end marker.
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
77 (setcdr end nil)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
78 (cons 'progn
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
79 (mapcar (lambda (form) (make-autoload form file))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
80 (cdr expand)))))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
81
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
82 ;; For special function-like operators, use the `autoload' function.
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
83 ((memq car '(defun define-skeleton defmacro define-derived-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
84 define-generic-mode easy-mmode-define-minor-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
85 easy-mmode-define-global-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
86 define-minor-mode defun*))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
87 (let* ((macrop (eq car 'defmacro))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
88 (name (nth 1 form))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
89 (body (nthcdr (get car 'doc-string-elt) form))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
90 (doc (if (stringp (car body)) (pop body))))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
91 ;; `define-generic-mode' quotes the name, so take care of that
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
92 (list 'autoload (if (listp name) name (list 'quote name)) file doc
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
93 (or (and (memq car '(define-skeleton define-derived-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
94 define-generic-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
95 easy-mmode-define-global-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
96 easy-mmode-define-minor-mode
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
97 define-minor-mode)) t)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
98 (eq (car-safe (car body)) 'interactive))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
99 (if macrop (list 'quote 'macro) nil))))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
100
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
101 ;; Convert defcustom to a simpler (and less space-consuming) defvar,
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
102 ;; but add some extra stuff if it uses :require.
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
103 ((eq car 'defcustom)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
104 (let ((varname (car-safe (cdr-safe form)))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
105 (init (car-safe (cdr-safe (cdr-safe form))))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
106 (doc (car-safe (cdr-safe (cdr-safe (cdr-safe form)))))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
107 (rest (cdr-safe (cdr-safe (cdr-safe (cdr-safe form))))))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
108 (if (not (plist-get rest :require))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
109 `(defvar ,varname ,init ,doc)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
110 `(progn
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
111 (defvar ,varname ,init ,doc)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
112 (custom-add-to-group ,(plist-get rest :group)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
113 ',varname 'custom-variable)
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
114 (custom-add-load ',varname
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
115 ,(plist-get rest :require))))))
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
116
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
117 ;; nil here indicates that this is not a special autoload form.
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
118 (t nil))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
120 ;;; Forms which have doc-strings which should be printed specially.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
121 ;;; A doc-string-elt property of ELT says that (nth ELT FORM) is
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
122 ;;; the doc-string in FORM.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
123 ;;;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
124 ;;; There used to be the following note here:
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
125 ;;; ;;; Note: defconst and defvar should NOT be marked in this way.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
126 ;;; ;;; We don't want to produce defconsts and defvars that
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
127 ;;; ;;; make-docfile can grok, because then it would grok them twice,
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
128 ;;; ;;; once in foo.el (where they are given with ;;;###autoload) and
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
129 ;;; ;;; once in loaddefs.el.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
130 ;;;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
131 ;;; Counter-note: Yes, they should be marked in this way.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
132 ;;; make-docfile only processes those files that are loaded into the
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
133 ;;; dumped Emacs, and those files should never have anything
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
134 ;;; autoloaded here. The above-feared problem only occurs with files
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
135 ;;; which have autoloaded entries *and* are processed by make-docfile;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
136 ;;; there should be no such files.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
137
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 (put 'autoload 'doc-string-elt 3)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
139 (put 'defun 'doc-string-elt 3)
29416
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
140 (put 'defun* 'doc-string-elt 3)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
141 (put 'defvar 'doc-string-elt 3)
17750
f11a3a49088c (defcustom): Add doc-string-elt property.
Richard M. Stallman <rms@gnu.org>
parents: 17591
diff changeset
142 (put 'defcustom 'doc-string-elt 3)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
143 (put 'defconst 'doc-string-elt 3)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
144 (put 'defmacro 'doc-string-elt 3)
28400
206604013d7f Also print defsubst doc string
Andreas Schwab <schwab@suse.de>
parents: 26552
diff changeset
145 (put 'defsubst 'doc-string-elt 3)
29416
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
146 (put 'define-skeleton 'doc-string-elt 2)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
147 (put 'define-derived-mode 'doc-string-elt 4)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
148 (put 'easy-mmode-define-minor-mode 'doc-string-elt 2)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
149 (put 'define-minor-mode 'doc-string-elt 2)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
150 (put 'define-generic-mode 'doc-string-elt 7)
29549
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
151 ;; defin-global-mode has no explicit docstring.
eafd45bcdcc1 (make-autoload): Use `cond'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29419
diff changeset
152 (put 'easy-mmode-define-global-mode 'doc-string-elt 1000)
22247
7db7ffb27feb (make-autoload): Add support for define-derived-mode. Update the
Richard M. Stallman <rms@gnu.org>
parents: 22242
diff changeset
153
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
155 (defun autoload-trim-file-name (file)
7477
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
156 ;; Returns a relative pathname of FILE
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
157 ;; starting from the directory that loaddefs.el is in.
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
158 ;; That is normally a directory in load-path,
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
159 ;; which means Emacs will be able to find FILE when it looks.
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
160 ;; Any extra directory names here would prevent finding the file.
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
161 (setq file (expand-file-name file))
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
162 (file-relative-name file
7477
a01cc9d6398d (autoload-trim-file-name): Make it relative
Richard M. Stallman <rms@gnu.org>
parents: 7472
diff changeset
163 (file-name-directory generated-autoload-file)))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
164
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
165 (defun autoload-read-section-header ()
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
166 "Read a section header form.
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
167 Since continuation lines have been marked as comments,
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
168 we must copy the text of the form and remove those comment
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
169 markers before we call `read'."
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
170 (save-match-data
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
171 (let ((beginning (point))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
172 string)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
173 (forward-line 1)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
174 (while (looking-at generate-autoload-section-continuation)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
175 (forward-line 1))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
176 (setq string (buffer-substring beginning (point)))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
177 (with-current-buffer (get-buffer-create " *autoload*")
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
178 (erase-buffer)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
179 (insert string)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
180 (goto-char (point-min))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
181 (while (search-forward generate-autoload-section-continuation nil t)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
182 (replace-match " "))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
183 (goto-char (point-min))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
184 (read (current-buffer))))))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
185
29416
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
186 ;; !! Requires OUTBUF to be bound !!
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
187 (defun autoload-print-form (form)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
188 "Print FORM such that make-docfile will find the docstrings."
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
189 (cond
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
190 ;; If the form is a sequence, recurse.
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
191 ((eq (car form) 'progn) (mapcar 'autoload-print-form (cdr form)))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
192 ;; Symbols at the toplevel are meaningless.
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
193 ((symbolp form) nil)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
194 (t
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
195 (let ((doc-string-elt (get (car-safe form) 'doc-string-elt)))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
196 (if (and doc-string-elt (stringp (nth doc-string-elt form)))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
197 ;; We need to hack the printing because the
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
198 ;; doc-string must be printed specially for
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
199 ;; make-docfile (sigh).
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
200 (let* ((p (nthcdr (1- doc-string-elt) form))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
201 (elt (cdr p)))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
202 (setcdr p nil)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
203 (princ "\n(" outbuf)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
204 (let ((print-escape-newlines t)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
205 (print-escape-nonascii t))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
206 (mapcar (lambda (elt)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
207 (prin1 elt outbuf)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
208 (princ " " outbuf))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
209 form))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
210 (princ "\"\\\n" outbuf)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
211 (let ((begin (with-current-buffer outbuf (point))))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
212 (princ (substring (prin1-to-string (car elt)) 1)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
213 outbuf)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
214 ;; Insert a backslash before each ( that
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
215 ;; appears at the beginning of a line in
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
216 ;; the doc string.
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
217 (with-current-buffer outbuf
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
218 (save-excursion
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
219 (while (search-backward "\n(" begin t)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
220 (forward-char 1)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
221 (insert "\\"))))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
222 (if (null (cdr elt))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
223 (princ ")" outbuf)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
224 (princ " " outbuf)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
225 (princ (substring (prin1-to-string (cdr elt)) 1)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
226 outbuf))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
227 (terpri outbuf)))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
228 (let ((print-escape-newlines t)
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
229 (print-escape-nonascii t))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
230 (print form outbuf)))))))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
231
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 (defun generate-file-autoloads (file)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 "Insert at point a loaddefs autoload section for FILE.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 autoloads are generated for defuns and defmacros in FILE
2494
c0fbbfadcb04 (generate-file-autoloads): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 2307
diff changeset
235 marked by `generate-autoload-cookie' (which see).
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 If FILE is being visited in a buffer, the contents of the buffer
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 are used."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 (interactive "fGenerate autoloads for file: ")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (let ((outbuf (current-buffer))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 (autoloads-done '())
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 (load-name (let ((name (file-name-nondirectory file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 (if (string-match "\\.elc?$" name)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 (substring name 0 (match-beginning 0))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 name)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (print-length nil)
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
246 (print-readably t) ; This does something in Lucid Emacs.
4555
434ef4c2fda7 (generate-file-autoloads): Set float-output-format to
Richard M. Stallman <rms@gnu.org>
parents: 4215
diff changeset
247 (float-output-format nil)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (done-any nil)
1884
4a8bc12e7017 (generate-file-autoloads): If no buffer was visiting FILE when we started,
Roland McGrath <roland@gnu.org>
parents: 1552
diff changeset
249 (visited (get-file-buffer file))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 output-end)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
251
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
252 ;; If the autoload section we create here uses an absolute
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
253 ;; pathname for FILE in its header, and then Emacs is installed
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
254 ;; under a different path on another system,
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
255 ;; `update-autoloads-here' won't be able to find the files to be
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
256 ;; autoloaded. So, if FILE is in the same directory or a
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
257 ;; subdirectory of the current buffer's directory, we'll make it
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
258 ;; relative to the current buffer's directory.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
259 (setq file (expand-file-name file))
4089
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
260 (let* ((source-truename (file-truename file))
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
261 (dir-truename (file-name-as-directory
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
262 (file-truename default-directory)))
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
263 (len (length dir-truename)))
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
264 (if (and (< len (length source-truename))
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
265 (string= dir-truename (substring source-truename 0 len)))
410395998370 (generate-file-autoloads): Fix FILE truename hacking to substring
Roland McGrath <roland@gnu.org>
parents: 4068
diff changeset
266 (setq file (substring source-truename len))))
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 662
diff changeset
267
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 (message "Generating autoloads for %s..." file)
1975
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
269 (save-excursion
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
270 (unwind-protect
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
271 (progn
13730
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
272 (if visited
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
273 (set-buffer visited)
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
274 ;; It is faster to avoid visiting the file.
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
275 (set-buffer (get-buffer-create " *generate-autoload-file*"))
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
276 (kill-all-local-variables)
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
277 (erase-buffer)
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
278 (setq buffer-undo-list t
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
279 buffer-read-only nil)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
280 (emacs-lisp-mode)
13730
87eb8f956a00 (generate-file-autoloads): If no buffer visiting FILE exists, read it into
Roland McGrath <roland@gnu.org>
parents: 12500
diff changeset
281 (insert-file-contents file nil))
1975
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
282 (save-excursion
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
283 (save-restriction
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
284 (widen)
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
285 (goto-char (point-min))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
286 (while (not (eobp))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
287 (skip-chars-forward " \t\n\f")
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
288 (cond
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
289 ((looking-at (regexp-quote generate-autoload-cookie))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
290 (search-forward generate-autoload-cookie)
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
291 (skip-chars-forward " \t")
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
292 (setq done-any t)
5854
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
293 (if (eolp)
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
294 ;; Read the next form and make an autoload.
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
295 (let* ((form (prog1 (read (current-buffer))
29416
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
296 (or (bolp) (forward-line 1))))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
297 (autoload (make-autoload form load-name)))
5854
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
298 (if autoload
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
299 (setq autoloads-done (cons (nth 1 form)
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
300 autoloads-done))
9d1ae808403b (generate-file-autoloads): Don't frob literal formfeeds into \f; just bind
Roland McGrath <roland@gnu.org>
parents: 5843
diff changeset
301 (setq autoload form))
29416
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
302 (autoload-print-form autoload))
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
303
6d8ceb166666 (make-autoload): Simplify docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28400
diff changeset
304 ;; Copy the rest of the line to the output.
13937
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
305 (princ (buffer-substring
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
306 (progn
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
307 ;; Back up over whitespace, to preserve it.
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
308 (skip-chars-backward " \f\t")
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
309 (if (= (char-after (1+ (point))) ? )
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
310 ;; Eat one space.
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
311 (forward-char 1))
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
312 (point))
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
313 (progn (forward-line 1) (point)))
35c457f8bedf (generate-file-autoloads): Preserve whitespace after cookie in literal text
Roland McGrath <roland@gnu.org>
parents: 13730
diff changeset
314 outbuf)))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
315 ((looking-at ";")
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
316 ;; Don't read the comment.
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
317 (forward-line 1))
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
318 (t
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
319 (forward-sexp 1)
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
320 (forward-line 1)))))))
1975
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
321 (or visited
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
322 ;; We created this buffer, so we should kill it.
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
323 (kill-buffer (current-buffer)))
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
324 (set-buffer outbuf)
3334e2489824 * autoload.el (generate-file-autoloads): Add another
Jim Blandy <jimb@redhat.com>
parents: 1884
diff changeset
325 (setq output-end (point-marker))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 (if done-any
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 (progn
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
328 ;; Insert the section-header line
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
329 ;; which lists the file name and which functions are in it, etc.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 (insert generate-autoload-section-header)
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
331 (prin1 (list 'autoloads autoloads-done load-name
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
332 (autoload-trim-file-name file)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 (nth 5 (file-attributes file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 outbuf)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 (terpri outbuf)
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
336 ;; Break that line at spaces, to avoid very long lines.
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
337 ;; Make each sub-line into a comment.
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
338 (with-current-buffer outbuf
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
339 (save-excursion
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
340 (forward-line -1)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
341 (while (not (eolp))
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
342 (move-to-column 64)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
343 (skip-chars-forward "^ \n")
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
344 (or (eolp)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
345 (insert "\n" generate-autoload-section-continuation)))))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
346 (insert ";;; Generated autoloads from "
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
347 (autoload-trim-file-name file) "\n")
8864
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
348 ;; Warn if we put a line in loaddefs.el
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
349 ;; that is long enough to cause trouble.
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
350 (while (< (point) output-end)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
351 (let ((beg (point)))
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
352 (end-of-line)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
353 (if (> (- (point) beg) 900)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
354 (progn
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
355 (message "A line is too long--over 900 characters")
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
356 (sleep-for 2)
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
357 (goto-char output-end))))
65731429a2c1 (generate-file-autoloads): Warn if we put a line
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
358 (forward-line 1))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 (goto-char output-end)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 (insert generate-autoload-section-trailer)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 (message "Generating autoloads for %s...done" file)))
2535
86d5500624d5 (update-file-autoloads, update-directory-autoloads): If called
Roland McGrath <roland@gnu.org>
parents: 2494
diff changeset
362
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 (defun update-file-autoloads (file)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 "Update the autoloads for FILE in `generated-autoload-file'
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 \(which FILE might bind in its local variables)."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 (interactive "fUpdate autoloads for file: ")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 (let ((load-name (let ((name (file-name-nondirectory file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 (if (string-match "\\.elc?$" name)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 (substring name 0 (match-beginning 0))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 name)))
5815
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
372 (found nil)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 (existing-buffer (get-file-buffer file)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 (save-excursion
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 ;; We want to get a value for generated-autoload-file from
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 ;; the local variables section if it's there.
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
377 (if existing-buffer
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
378 (set-buffer existing-buffer))
17001
ce8565274e49 (update-file-autoloads): Read loaddefs.el without
Karl Heuer <kwzh@gnu.org>
parents: 16995
diff changeset
379 ;; We must read/write the file without any code conversion.
ce8565274e49 (update-file-autoloads): Read loaddefs.el without
Karl Heuer <kwzh@gnu.org>
parents: 16995
diff changeset
380 (let ((coding-system-for-read 'no-conversion))
21369
9ca6953d7ce8 (update-file-autoloads): Redo 1997-08-23 change.
Richard M. Stallman <rms@gnu.org>
parents: 21119
diff changeset
381 (set-buffer (find-file-noselect
9ca6953d7ce8 (update-file-autoloads): Redo 1997-08-23 change.
Richard M. Stallman <rms@gnu.org>
parents: 21119
diff changeset
382 (expand-file-name generated-autoload-file
9ca6953d7ce8 (update-file-autoloads): Redo 1997-08-23 change.
Richard M. Stallman <rms@gnu.org>
parents: 21119
diff changeset
383 (expand-file-name "lisp"
9ca6953d7ce8 (update-file-autoloads): Redo 1997-08-23 change.
Richard M. Stallman <rms@gnu.org>
parents: 21119
diff changeset
384 source-directory)))))
20817
297fefd12ecf (update-file-autoloads): Give clean errors
Richard M. Stallman <rms@gnu.org>
parents: 19482
diff changeset
385 (or (> (buffer-size) 0)
297fefd12ecf (update-file-autoloads): Give clean errors
Richard M. Stallman <rms@gnu.org>
parents: 19482
diff changeset
386 (error "Autoloads file %s does not exist" buffer-file-name))
297fefd12ecf (update-file-autoloads): Give clean errors
Richard M. Stallman <rms@gnu.org>
parents: 19482
diff changeset
387 (or (file-writable-p buffer-file-name)
297fefd12ecf (update-file-autoloads): Give clean errors
Richard M. Stallman <rms@gnu.org>
parents: 19482
diff changeset
388 (error "Autoloads file %s is not writable" buffer-file-name))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 (save-excursion
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 (save-restriction
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 (widen)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 (goto-char (point-min))
5815
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
393 ;; Look for the section for LOAD-NAME.
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
394 (while (and (not found)
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
395 (search-forward generate-autoload-section-header nil t))
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
396 (let ((form (autoload-read-section-header)))
5815
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
397 (cond ((string= (nth 2 form) load-name)
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
398 ;; We found the section for this file.
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
399 ;; Check if it is up to date.
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
400 (let ((begin (match-beginning 0))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
401 (last-time (nth 4 form))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
402 (file-time (nth 5 (file-attributes file))))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
403 (if (and (or (null existing-buffer)
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
404 (not (buffer-modified-p existing-buffer)))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
405 (listp last-time) (= (length last-time) 2)
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
406 (or (> (car last-time) (car file-time))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
407 (and (= (car last-time) (car file-time))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
408 (>= (nth 1 last-time)
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
409 (nth 1 file-time)))))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
410 (progn
14252
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
411 (if (interactive-p)
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
412 (message "\
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
413 Autoload section for %s is up to date."
7ef2eabb1a9c (update-file-autoloads): Only give "up to date" msg if (interactive-p).
Roland McGrath <roland@gnu.org>
parents: 14192
diff changeset
414 file))
5815
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
415 (setq found 'up-to-date))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
416 (search-forward generate-autoload-section-trailer)
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
417 (delete-region begin (point))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
418 (setq found t))))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
419 ((string< load-name (nth 2 form))
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
420 ;; We've come to a section alphabetically later than
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
421 ;; LOAD-NAME. We assume the file is in order and so
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
422 ;; there must be no section for LOAD-NAME. We will
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
423 ;; insert one before the section here.
b1e5e6efed1d (update-file-autoloads): Never ask the user where to put a new section.
Roland McGrath <roland@gnu.org>
parents: 4555
diff changeset
424 (goto-char (match-beginning 0))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
425 (setq found 'new)))))
14044
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
426 (or found
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
427 (progn
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
428 (setq found 'new)
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
429 ;; No later sections in the file. Put before the last page.
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
430 (goto-char (point-max))
16158
af6ef293cb42 (update-file-autoloads): Don't barf if autoloads file
Richard M. Stallman <rms@gnu.org>
parents: 14252
diff changeset
431 (search-backward "\f" nil t)))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
432 (or (eq found 'up-to-date)
14044
1c331f9332ae (update-file-autoloads): Fix placement of new sections.
Roland McGrath <roland@gnu.org>
parents: 14043
diff changeset
433 (and (eq found 'new)
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
434 ;; Check that FILE has any cookies before generating a
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
435 ;; new section for it.
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
436 (save-excursion
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
437 (if existing-buffer
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
438 (set-buffer existing-buffer)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
439 ;; It is faster to avoid visiting the file.
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
440 (set-buffer (get-buffer-create " *autoload-file*"))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
441 (kill-all-local-variables)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
442 (erase-buffer)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
443 (setq buffer-undo-list t
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
444 buffer-read-only nil)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
445 (emacs-lisp-mode)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
446 (insert-file-contents file nil))
5837
fd1e2c6f7bf5 (autoload-trim-file-name): New function.
Roland McGrath <roland@gnu.org>
parents: 5815
diff changeset
447 (save-excursion
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
448 (save-restriction
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
449 (widen)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
450 (goto-char (point-min))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
451 (prog1
19209
50857b41060a (update-file-autoloads): Use anchored regexp search instead of requiring
Roland McGrath <roland@gnu.org>
parents: 19170
diff changeset
452 (if (re-search-forward
50857b41060a (update-file-autoloads): Use anchored regexp search instead of requiring
Roland McGrath <roland@gnu.org>
parents: 19170
diff changeset
453 (concat "^" (regexp-quote
50857b41060a (update-file-autoloads): Use anchored regexp search instead of requiring
Roland McGrath <roland@gnu.org>
parents: 19170
diff changeset
454 generate-autoload-cookie))
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
455 nil t)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
456 nil
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
457 (if (interactive-p)
14192
b1bc0f5d8cf3 (update-file-autoloads): Fix message.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
458 (message "%s has no autoloads" file))
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
459 t)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
460 (or existing-buffer
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
461 (kill-buffer (current-buffer))))))))
7456
493a32789e7d (update-file-autoloads): Delete leftover variable.
Karl Heuer <kwzh@gnu.org>
parents: 7437
diff changeset
462 (generate-file-autoloads file))))
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
463 (and (interactive-p)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
464 (buffer-modified-p)
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
465 (save-buffer)))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 ;;;###autoload
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
468 (defun update-autoloads-from-directories (&rest dirs)
3774
3b0cb275ca29 (generate-autoload-cookie, update-autoloads-here): Doc fixes.
Roland McGrath <roland@gnu.org>
parents: 2535
diff changeset
469 "\
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
470 Update loaddefs.el with all the current autoloads from DIRS, and no old ones.
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
471 This uses `update-file-autoloads' (which see) do its work."
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
472 (interactive "DUpdate autoloads from directory: ")
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
473 (let ((files (apply 'nconc
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
474 (mapcar (function (lambda (dir)
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
475 (directory-files (expand-file-name dir)
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
476 t
19170
ecc4375537e3 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 19131
diff changeset
477 "^[^=.].*\\.el$")))
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
478 dirs)))
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
479 autoloads-file
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
480 top-dir)
19019
65f371a2cf00 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 17851
diff changeset
481 (setq autoloads-file
65f371a2cf00 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 17851
diff changeset
482 (expand-file-name generated-autoload-file
65f371a2cf00 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 17851
diff changeset
483 (expand-file-name "lisp"
65f371a2cf00 (update-autoloads-from-directories):
Richard M. Stallman <rms@gnu.org>
parents: 17851
diff changeset
484 source-directory)))
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
485 (setq top-dir (file-name-directory autoloads-file))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 (save-excursion
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
487 (set-buffer (find-file-noselect autoloads-file))
2535
86d5500624d5 (update-file-autoloads, update-directory-autoloads): If called
Roland McGrath <roland@gnu.org>
parents: 2494
diff changeset
488 (save-excursion
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
489 (goto-char (point-min))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
490 (while (search-forward generate-autoload-section-header nil t)
21479
89c1bfb63571 (generate-autoload-section-header): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 21369
diff changeset
491 (let* ((form (autoload-read-section-header))
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
492 (file (nth 3 form)))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
493 (cond ((not (stringp file)))
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
494 ((not (file-exists-p (expand-file-name file top-dir)))
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
495 ;; Remove the obsolete section.
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
496 (let ((begin (match-beginning 0)))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
497 (search-forward generate-autoload-section-trailer)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
498 (delete-region begin (point))))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
499 (t
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
500 (update-file-autoloads file)))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
501 (setq files (delete file files)))))
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
502 ;; Elements remaining in FILES have no existing autoload sections.
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
503 (mapcar 'update-file-autoloads files)
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
504 (save-buffer))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 (defun batch-update-autoloads ()
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
508 "Update loaddefs.el autoloads in batch mode.
17851
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
509 Calls `update-autoloads-from-directories' on the command line arguments."
6e7bb77cd7e1 (update-autoloads-from-directories): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 17750
diff changeset
510 (apply 'update-autoloads-from-directories command-line-args-left)
14043
d44a43c284e7 (update-file-autoloads): Notice when searching found nothing at all.
Roland McGrath <roland@gnu.org>
parents: 14022
diff changeset
511 (setq command-line-args-left nil))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 (provide 'autoload)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
514
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 648
diff changeset
515 ;;; autoload.el ends here