This groups both autoload changes and package-suppress, but they depend on
each other in ways that would be difficult to extricate.
src/ChangeLog addition:
2005-02-02 Ben Wing <ben(a)xemacs.org>
* lread.c:
* lread.c (check_if_suppressed):
* lread.c (Fload_internal):
* lread.c (locate_file_in_directory_mapper):
* lread.c (readevalloop):
* lread.c (syms_of_lread):
* lread.c (vars_of_lread):
* lisp.h:
Remove undeeded Vload_file_name_internal_the_purecopy,
Qload_file_name -- use internal_bind_lisp_object instead of
specbind.
Add load-suppress-alist.
lisp/ChangeLog addition:
2005-02-02 Ben Wing <ben(a)xemacs.org>
* easy-mmode.el, regexp-opt.el:
Move these files into core.
Uncomment stuff depending on new custom.el.
* autoload.el:
* autoload.el (generate-autoload-function): New.
* autoload.el (autoload-feature-suffix): New.
* autoload.el (generate-autoload-section-continuation): New.
* autoload.el (make-autoload):
* autoload.el (generate-file-autoloads):
* autoload.el (generate-autoload-type-section):
* autoload.el (process-one-lisp-autoload): New.
* autoload.el (generate-lisp-file-autoloads-1):
* autoload.el (generate-c-file-autoloads-1):
* autoload.el (generate-custom-defines): New.
* autoload.el (print-autoload): Removed.
* autoload.el (autoload-print-form): New.
* autoload.el (defcustom):
* autoload.el (autoload-read-section-header): New.
* autoload.el (update-file-autoloads):
* autoload.el (update-autoloads-here): Removed.
* autoload.el (batch-update-directory-custom-defines): New.
* autoload.el (update-autoload-files):
* autoload.el (autoload-update-directory-autoloads): Removed.
* autoload.el (batch-update-directory-autoloads): New.
* autoload.el (autoload-featurep-protect-autoloads):
* autoload.el (update-autoloads-from-directory): Removed.
* autoload.el (update-custom-define-files): New.
* autoload.el (autoload-make-feature-name):
* autoload.el (batch-update-autoloads):
* autoload.el (batch-update-directory): Removed.
* autoload.el (batch-update-one-directory): Removed.
* autoload.el (batch-force-update-one-directory): Removed.
Major update. Sync with FSF 21.2.
Create the ability to make custom-defines files.
* update-elc-2.el (batch-update-elc-2):
* update-elc.el (do-autoload-commands):
Rewrite to use new autoload API.
* update-elc.el (lisp-files-needing-early-byte-compilation):
Add easy-mmode.
2005-02-02 Ben Wing <ben(a)xemacs.org>
* behavior.el:
* behavior.el (behavior-group-hash-table): New.
* behavior.el (behavior-override-hash-table): New.
* behavior.el (define-behavior): Removed.
* behavior.el (behavior-group-p): New.
* behavior.el (check-behavior-group): New.
* behavior.el (override-behavior):
* behavior.el (define-behavior-group):
* behavior.el (read-behavior):
* behavior.el (compute-behavior-group-children): New.
* behavior.el (behavior-menu-filter-1): New.
* behavior.el (behavior-menu-filter): New.
Major update. Add documentation of how it works.
* behavior-defs.el:
* behavior-defs.el (tty):
* behavior-defs.el ('scroll-in-place): Removed.
* behavior-defs.el ('mouse-avoidance): Removed.
* behavior-defs.el ('jka-compr): Removed.
* behavior-defs.el ('efs): Removed.
* behavior-defs.el ('resize-minibuffer): Removed.
* behavior-defs.el ('func-menu): Removed.
* behavior-defs.el ('mwheel): Removed.
* behavior-defs.el ('recent-files): Removed.
* behavior-defs.el ('filladapt): Removed.
* behavior-defs.el ('tty)): New.
* behavior-defs.el ('toolbars)): New.
* behavior-defs.el ('menus)): New.
* behavior-defs.el ('mouse)): New.
* behavior-defs.el ('editing)): New.
* behavior-defs.el ('keyboard)): New.
* behavior-defs.el ('files)): New.
* behavior-defs.el ('games)): New.
* behavior-defs.el ('processes)): New.
* behavior-defs.el ('display)): New.
* behavior-defs.el ('programming)): New.
* behavior-defs.el ('international)): New.
* behavior-defs.el ('buffers-and-windows)): New.
* behavior-defs.el ('internet)): New.
* behavior-defs.el ('compose-mail): New.
Only define the basic behavior groups here.
Move the definitions for particular packages to the
appropriate package files.
* mwheel.el:
* mwheel.el ('mwheel): New.
Add define-behavior for mwheel.
2005-02-02 Ben Wing <ben(a)xemacs.org>
* easymenu.el (easy-menu-add):
* easymenu.el (easy-menu-remove):
* map-ynp.el (map-y-or-n-p):
Use normalize-menu-text not normalize-menu-item-name.
* menubar-items.el (submenu-generate-accelerator-spec): Removed.
* menubar.el (submenu-generate-accelerator-spec): New.
Move to menubar.el and rewrite for cleanliness.
* menubar-items.el (coding-system-menu-filter):
Use menu-split-long-menu-and-sort.
* menubar-items.el (menu-item-strip-accelerator-spec): Removed.
* menubar-items.el (menu-item-generate-accelerator-spec): Removed.
* menubar-items.el (menu-max-items): Removed.
* menubar-items.el (menu-submenu-max-items): Removed.
* menubar-items.el (menu-submenu-name-format): Removed.
* menubar-items.el (menu-split-long-menu): Removed.
* menubar-items.el (menu-sort-menu): Removed.
* menubar.el (menu-item-strip-accelerator-spec): New.
* menubar.el (menu-item-generate-accelerator-spec): New.
* menubar.el (menu-max-items): New.
* menubar.el (menu-submenu-max-items): New.
* menubar.el (menu-submenu-name-format): New.
* menubar.el (menu-split-long-menu): New.
* menubar.el (menu-sort-menu): New.
Move to menubar.el.
* menubar.el (menu-item-text): New.
* menubar.el (menu-split-long-menu-and-sort): New.
New funs.
* menubar.el (find-menu-item):
* menubar.el (find-menu-item-1): New.
Split up find-menu-item w/find-menu-item-1, since PARENT is not
an external item.
Rewrite to use compare-menu-text.
* menubar.el (add-menu-item-1):
Don't normalize items as find-menu-item does not need it.
* menubar-items.el (default-menubar):
Delete old Behavior menu defn, replaced by behavior-menu-filter.
Planning to [[Delete many menus from Tools menu -- they have been
integrated as part of the behavior system.]] Currently the new
Tools menu (very short, just a call to the behavior-menu-filter)
is commented out, and the old Toold menu defn remains. Once the
new packages are in place (c. 1 or 2 weeks), I'll make the
switchover.
Use menu-split-long-menu-and-sort.
2005-02-02 Ben Wing <ben(a)xemacs.org>
* cus-dep.el (Custom-make-dependencies-1):
If a directory has no custom dependencies, write a blank
custom-load file rather than deleting the file, so that
time-based rebuild checking will work.
* cus-edit.el:
* cus-edit.el (custom-load-symbol):
* cus-edit.el (custom-load-symbol-1): New.
* cus-edit.el (custom-already-loaded-custom-defines): New.
* cus-edit.el (custom-define-current-source-file): New.
* cus-edit.el (custom-warn-when-reloading-necessary): New.
* cus-edit.el (custom-load-custom-defines): New.
* cus-edit.el (custom-load-custom-defines-1): New.
Split out code in custom-load-symbol. Support loading of
the new custom-defines file.
* cus-edit.el (custom-menu-create):
Split long menus.
* custom.el:
* custom.el (load):
* custom.el (custom-dont-initialize): New.
* custom.el (custom-current-group-alist): New.
* custom.el (custom-declare-variable):
* custom.el (defcustom):
* custom.el (custom-current-group): New.
* custom.el (custom-declare-group):
* custom.el (defgroup):
* custom.el (custom-add-to-group):
* custom.el (custom-group-of-mode): New.
* custom.el (custom-handle-all-keywords):
* custom.el (custom-autoload): New.
* custom.el (custom-variable-p): New.
* custom.el (custom-load-recursion): New.
* custom.el (custom-load-symbol): New.
* custom.el (custom-known-themes):
* custom.el (custom-declare-theme): New.
* custom.el (deftheme):
* custom.el (custom-make-theme-feature):
* custom.el (custom-check-theme):
* custom.el (custom-push-theme):
* custom.el (custom-set-variables):
* custom.el (custom-theme-set-variables):
* custom.el (custom-set-default): New.
* custom.el (custom-quote): New.
* custom.el (customize-mark-to-save): New.
* custom.el (provide-theme):
* custom.el (require-theme):
* custom.el (customize-mark-as-set): New.
* custom.el (custom-remove-theme): New.
* custom.el (custom-do-theme-reset):
* custom.el (custom-theme-load-themes):
* custom.el (custom-load-themes):
* custom.el (custom-theme-value):
* custom.el (custom-theme-variable-value):
* custom.el (custom-theme-reset-internal):
* custom.el (copy-upto-last): Removed.
* custom.el (custom-theme-reset-variables):
* custom.el (custom-reset-variables):
* custom.el:
* custom.el (load):
* custom.el (custom-dont-initialize): New.
* custom.el (custom-current-group-alist): New.
* custom.el (custom-declare-variable):
* custom.el (defcustom):
* custom.el (custom-current-group): New.
* custom.el (custom-declare-group):
* custom.el (defgroup):
* custom.el (custom-add-to-group):
* custom.el (custom-group-of-mode): New.
* custom.el (custom-handle-all-keywords):
* custom.el (custom-autoload): New.
* custom.el (custom-variable-p): New.
* custom.el (custom-load-recursion): New.
* custom.el (custom-load-symbol): New.
* custom.el (custom-known-themes):
* custom.el (custom-declare-theme): New.
* custom.el (deftheme):
* custom.el (custom-make-theme-feature):
* custom.el (custom-check-theme):
* custom.el (custom-push-theme):
* custom.el (custom-set-variables):
* custom.el (custom-theme-set-variables):
* custom.el (custom-set-default): New.
* custom.el (custom-quote): New.
* custom.el (customize-mark-to-save): New.
* custom.el (provide-theme):
* custom.el (require-theme):
* custom.el (customize-mark-as-set): New.
* custom.el (custom-remove-theme): New.
* custom.el (custom-do-theme-reset):
* custom.el (custom-theme-load-themes):
* custom.el (custom-load-themes):
* custom.el (custom-theme-value):
* custom.el (custom-theme-variable-value):
* custom.el (custom-theme-reset-internal):
* custom.el (copy-upto-last): Removed.
* custom.el (custom-theme-reset-variables):
* custom.el (custom-reset-variables):
Sync with FSF 21.3.
behavior source patch:
Diff command: bash -ci "cvs-diff --show-c-function -no-changelog "
Files affected: lisp/update-elc-2.el lisp/update-elc.el lisp/autoload.el src/lisp.h src/lread.c
Index: src/lread.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lread.c,v
retrieving revision 1.73
diff -u -p -r1.73 lread.c
--- src/lread.c 2005/01/24 23:34:02 1.73
+++ src/lread.c 2005/02/03 05:37:13
@@ -59,8 +59,8 @@ Lisp_Object Qbackquote, Qbacktick, Qcomm
#endif
Lisp_Object Qvariable_domain; /* I18N3 */
Lisp_Object Vvalues, Vstandard_input, Vafter_load_alist;
-Lisp_Object Qcurrent_load_list;
-Lisp_Object Qload, Qload_file_name, Qload_internal, Qfset;
+Lisp_Object Vload_suppress_alist;
+Lisp_Object Qload, Qload_internal, Qfset;
/* Hash-table that maps directory names to hashes of their contents. */
static Lisp_Object Vlocate_file_hash_table;
@@ -118,8 +118,6 @@ Lisp_Object Vload_file_name;
our #$ checks are reliable. */
Lisp_Object Vload_file_name_internal;
-Lisp_Object Vload_file_name_internal_the_purecopy;
-
/* Function to use for reading, in `load' and friends. */
Lisp_Object Vload_read_function;
@@ -340,6 +338,50 @@ load_unwind (Lisp_Object stream) /* use
return Qnil;
}
+/* Check if NONRELOC/RELOC (an absolute filename) is suppressed according
+ to load-suppress-alist. */
+static int
+check_if_suppressed (Ibyte *nonreloc, Lisp_Object reloc)
+{
+ Bytecount len;
+
+ if (!NILP (reloc))
+ {
+ nonreloc = XSTRING_DATA (reloc);
+ len = XSTRING_LENGTH (reloc);
+ }
+ else
+ len = qxestrlen (nonreloc);
+
+ if (len >= 4 && !qxestrcmp_ascii (nonreloc + len - 4, ".elc"))
+ len -= 4;
+ else if (len >= 3 && !qxestrcmp_ascii (nonreloc + len - 3, ".el"))
+ len -= 3;
+
+ EXTERNAL_LIST_LOOP_2 (acons, Vload_suppress_alist)
+ {
+ if (CONSP (acons) && STRINGP (XCAR (acons)))
+ {
+ Lisp_Object name = XCAR (acons);
+ if (XSTRING_LENGTH (name) == len &&
+ !memcmp (XSTRING_DATA (name), nonreloc, len))
+ {
+ struct gcpro gcpro1;
+ Lisp_Object val;
+
+ GCPRO1 (reloc);
+ val = Feval (XCDR (acons));
+ UNGCPRO;
+
+ if (!NILP (val))
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
/* The plague is coming.
Ring around the rosy, pocket full of posy,
@@ -689,12 +731,11 @@ do { \
internal_bind_lisp_object (&Vload_descriptor_list,
Fcons (make_int (fd), Vload_descriptor_list));
internal_bind_lisp_object (&Vload_file_name_internal, found);
- internal_bind_lisp_object (&Vload_file_name_internal_the_purecopy, Qnil);
/* this is not a simple internal_bind. */
record_unwind_protect (load_force_doc_string_unwind,
Vload_force_doc_string_list);
Vload_force_doc_string_list = Qnil;
- specbind (Qload_file_name, found);
+ internal_bind_lisp_object (&Vload_file_name, found);
#ifdef I18N3
/* set it to nil; a call to #'domain will set it. */
internal_bind_lisp_object (&Vfile_domain, Qnil);
@@ -818,6 +859,9 @@ If MODE is non-nil, it should be a symbo
requirements. Allowed symbols are `exists', `executable', `writable', and
`readable'. If MODE is nil, it defaults to `readable'.
+Filenames are checked against `load-suppress-alist' to determine if they
+should be ignored.
+
`locate-file' keeps hash tables of the directories it searches through,
in order to speed things up. It tries valiantly to not get confused in
the face of a changing and unpredictable environment, but can occasionally
@@ -1024,11 +1068,14 @@ locate_file_in_directory_mapper (Ibyte *
if (closure->fd >= 0)
{
- /* We succeeded; return this descriptor and filename. */
- if (closure->storeptr)
- *closure->storeptr = build_intstring (fn);
+ if (!check_if_suppressed (fn, Qnil))
+ {
+ /* We succeeded; return this descriptor and filename. */
+ if (closure->storeptr)
+ *closure->storeptr = build_intstring (fn);
- return 1;
+ return 1;
+ }
}
}
/* Keep mapping. */
@@ -1178,7 +1225,7 @@ can be used if the internal tables grow
just look for one for which access(file,MODE) succeeds. In this case,
returns a nonnegative value on success. On failure, returns -1.
- If STOREPTR is nonzero, it points to a slot where the name of
+ If STOREPTR is non-nil, it points to a slot where the name of
the file actually found should be stored as a Lisp string.
Nil is stored there on failure.
@@ -1377,7 +1424,7 @@ readevalloop (Lisp_Object readcharfun,
READCHARFUN (which can be a stream) to Lisp. --hniksic */
/*specbind (Qstandard_input, readcharfun);*/
- specbind (Qcurrent_load_list, Qnil);
+ internal_bind_lisp_object (&Vcurrent_load_list, Qnil);
#ifdef COMPILED_FUNCTION_ANNOTATION_HACK
Vcurrent_compiled_function_annotation = Qnil;
@@ -3072,9 +3119,7 @@ syms_of_lread (void)
DEFSYMBOL (Qstandard_input);
DEFSYMBOL (Qread_char);
- DEFSYMBOL (Qcurrent_load_list);
DEFSYMBOL (Qload);
- DEFSYMBOL (Qload_file_name);
DEFSYMBOL (Qload_internal);
DEFSYMBOL (Qfset);
@@ -3141,6 +3186,16 @@ directory in which the XEmacs executable
Non-nil iff inside of `load'.
*/ );
+ DEFVAR_LISP ("load-suppress-alist", &Vload_suppress_alist /*
+An alist of expressions controlling whether particular files can be loaded.
+Each element looks like (FILENAME EXPR).
+FILENAME should be a full pathname, but without the .el suffix.
+When `load' is run and is about to load the specified file, it evaluates
+the form to determine if the file can be loaded.
+This variable is normally initialized automatically.
+*/ );
+ Vload_suppress_alist = Qnil;
+
DEFVAR_LISP ("after-load-alist", &Vafter_load_alist /*
An alist of expressions to be evalled when particular files are loaded.
Each element looks like (FILENAME FORMS...).
@@ -3254,9 +3309,6 @@ character escape syntaxes or just read t
Vload_file_name_internal = Qnil;
staticpro (&Vload_file_name_internal);
-
- Vload_file_name_internal_the_purecopy = Qnil;
- staticpro (&Vload_file_name_internal_the_purecopy);
#ifdef COMPILED_FUNCTION_ANNOTATION_HACK
Vcurrent_compiled_function_annotation = Qnil;
Index: src/lisp.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lisp.h,v
retrieving revision 1.122
diff -u -p -r1.122 lisp.h
--- src/lisp.h 2005/01/31 19:29:49 1.122
+++ src/lisp.h 2005/02/03 05:37:16
@@ -5294,8 +5294,7 @@ extern Lisp_Object Vexecuting_macro, Vfe
extern Lisp_Object Vinvocation_directory, Vinvocation_name;
extern Lisp_Object Vlast_command, Vlast_command_char;
extern Lisp_Object Vlast_command_event, Vlast_input_event;
-extern Lisp_Object Vload_file_name_internal;
-extern Lisp_Object Vload_file_name_internal_the_purecopy, Vload_history;
+extern Lisp_Object Vload_file_name_internal, Vload_history;
extern Lisp_Object Vload_path, Vmark_even_if_inactive, Vmenubar_configuration;
extern Lisp_Object Vminibuf_preprompt, Vminibuf_prompt, Vminibuffer_zero;
extern Lisp_Object Vmodule_directory, Vmswindows_downcase_file_names;
Index: lisp/autoload.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/autoload.el,v
retrieving revision 1.20
diff -u -p -r1.20 autoload.el
--- lisp/autoload.el 2003/10/15 09:19:10 1.20
+++ lisp/autoload.el 2005/02/03 05:37:18
@@ -2,9 +2,10 @@
;; Copyright (C) 1991-1994, 1997, 2003 Free Software Foundation, Inc.
;; Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
-;; Copyright (C) 1996, 2000, 2002, 2003 Ben Wing.
+;; Copyright (C) 1996, 2000, 2002, 2003, 2004 Ben Wing.
-;; Author: Roland McGrath <roland(a)gnu.ai.mit.edu>
+;; Original Author: Roland McGrath <roland(a)gnu.ai.mit.edu>
+;; Heavily Modified: XEmacs Maintainers
;; Keywords: maint
;; This file is part of XEmacs.
@@ -24,13 +25,17 @@
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.
-;;; Synched up with: Not synched with FSF.
+;;; Synched up with: FSF 21.2 by Ben Wing.
+;;; Note that update-file-autoloads is seriously modified and not really
+;;; syncable.
;;; Commentary:
;; This code keeps auto-autoloads.el files up to date. It interprets
;; magic cookies (of the form ";;;###autoload" in Lisp source files
;; and "/* ###autoload */" in C source files) in various useful ways.
+;; It is also used to maintain custom-defines.el files, since most of
+;; the logic for computing them is the same as for auto-autoloads.el.
;; Usage
;; =====
@@ -39,8 +44,7 @@
;; build process, is
;; xemacs -no-packages -batch \
-;; -eval "(setq generated-autoload-file \"PATH\")" \
-;; -l autoload -f autoload-update-directory-autoloads PREFIX DIRECTORY
+;; -l autoload -f batch-update-directory-autoloads PREFIX DIRECTORY
;; which causes XEmacs to update the file named by PATH from the .el
;; files in DIRECTORY (but not recursing into subdirectories) and (if
@@ -61,24 +65,13 @@
;; of XEmacs).
;; The probable next step is to fix up the packages to use the
-;; `autoload-update-directory-autoloads' API. However, for backward
+;; `batch-update-directory-autoloads' API. However, for backward
;; compatibility with XEmacs 21.4 and 21.1, this can't be done quickly.
-;; For now the API used in update-elc-2.el:
-
-;; (let* ((dir "DIRECTORY")
-;; (generated-autoload-file (expand-file-name "auto-autoloads.el" dir))
-;; (autoload-package-name "PREFIX"))
-;; (update-autoload-files (list muledir))
-;; (byte-recompile-file generated-autoload-file 0))
-
-;; is available, but this ugly kludge is deprecated. It will be removed
-;; in favor of using proper arguments instead of special variables.
-
;; For backward compatibility the API used in the packages/XEmacs.rules:
;; xemacs -vanilla -batch -eval "$(AUTOLOAD_PACKAGE_NAME)" \
-;; -l autoload -f batch-update-directory $(AUTOLOAD_PATH)
+;; -l autoload -f batch-update-autoloads $(AUTOLOAD_PATH)
;; is supported, and the implementation is unchanged. However,
;; revision of the API (in a backward compatible way) and the
@@ -130,6 +123,10 @@
;;; Code:
+;; Need to load easy-mmode because we expand macro calls to easy-mmode
+;; macros in make-autoloads below.
+(require 'easy-mmode)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Standard file and directory names
@@ -144,6 +141,10 @@ Use `generated-autoload-file' (q.v.) to
;; Dynamic variables for communication among functions
+;; FSF 21.2:
+;; The autoload file is assumed to contain a trailer starting with a FormFeed
+;; character.
+
(defvar generated-autoload-file
(expand-file-name autoload-file-name lisp-directory)
"*File `update-file-autoloads' puts autoloads into.
@@ -154,6 +155,11 @@ Note that `batch-update-directory' binds
generally the file named by `autoload-file-name' in the directory being
updated. XEmacs.rules setq's this variable for package autoloads.")
+(defvar generate-autoload-function
+ #'generate-file-autoloads
+ "Function to generate the autoloads for a file and insert at point.
+Called with one argument, the file.")
+
(define-obsolete-variable-alias 'autoload-package-name
'autoload-feature-prefix)
(defvar autoload-feature-prefix nil
@@ -164,6 +170,9 @@ in the top of the package hierarchy), or
auto-autoloads file). Highest priority candidate except for an explicit
argument to `autoload-make-feature-name' (q.v.).")
+(defvar autoload-feature-suffix "-autoloads"
+ "String added to `autoload-feature-prefix' to create the autoload feature name.")
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Magic strings in source files
@@ -210,40 +219,69 @@ the section of autoloads for a file.")
(defconst generate-autoload-section-trailer "\n;;;***\n"
"String which indicates the end of the section of autoloads for a file.")
+(defconst generate-autoload-section-continuation ";;;;;; "
+ "String to add on each continuation of the section header form.")
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Parsing the source file text.
-;; Autoloads in C source differ from those in Lisp source. For historical
-;; reasons, functions handling only Lisp don't have "lisp" in their names;
-;; maybe this should be changed.
+;; Autoloads in C source differ from those in Lisp source.
(defun make-autoload (form file)
- "Turn a definition generator FORM into an autoload for source file FILE.
-Returns nil if FORM is not a defun, defun*, defmacro, defmacro*,
-define-skeleton, or define-derived-mode."
- (let ((car (car-safe form)))
- (if (memq car '(defun defun* define-skeleton defmacro defmacro*
- define-derived-mode))
- (let ((macrop (memq car '(defmacro defmacro*)))
- name doc)
- (setq form (cdr form)
- name (car form)
- ;; Ignore the arguments.
- form (cdr (cond ((eq car 'define-skeleton)
- form)
- ((eq car 'define-derived-mode)
- (cddr form))
- (t
- (cdr form))))
- doc (car form))
- (if (stringp doc)
- (setq form (cdr form))
- (setq doc nil))
- (list 'autoload (list 'quote name) file doc
- (or (eq car 'define-skeleton)
- (eq car 'define-derived-mode)
- (eq (car-safe (car form)) 'interactive))
- (if macrop (list 'quote 'macro) nil)))
- nil)))
+ "Turn FORM into an autoload or defvar for source file FILE.
+Returns nil if FORM is not a special autoload form (i.e. a function definition
+or macro definition or a defcustom)."
+ (let ((car (car-safe form)) expand)
+ (cond
+ ;; For complex cases, try again on the macro-expansion.
+ ((and (memq car '(easy-mmode-define-global-mode
+ easy-mmode-define-minor-mode define-minor-mode))
+ (setq expand (let ((load-file-name file)) (macroexpand form)))
+ (eq (car expand) 'progn)
+ (memq :autoload-end expand))
+ (let ((end (memq :autoload-end expand)))
+ ;; Cut-off anything after the :autoload-end marker.
+ (setcdr end nil)
+ (cons 'progn
+ (mapcar (lambda (form) (make-autoload form file))
+ (cdr expand)))))
+
+ ;; For special function-like operators, use the `autoload' function.
+ ((memq car '(defun define-skeleton defmacro define-derived-mode
+ define-generic-mode easy-mmode-define-minor-mode
+ easy-mmode-define-global-mode
+ define-minor-mode defun* defmacro*))
+ (let* ((macrop (memq car '(defmacro defmacro*)))
+ (name (nth 1 form))
+ (body (nthcdr (get car 'doc-string-elt) form))
+ (doc (if (stringp (car body)) (pop body))))
+ ;; `define-generic-mode' quotes the name, so take care of that
+ (list 'autoload (if (listp name) name (list 'quote name)) file doc
+ (or (and (memq car '(define-skeleton define-derived-mode
+ define-generic-mode
+ easy-mmode-define-global-mode
+ easy-mmode-define-minor-mode
+ define-minor-mode)) t)
+ (eq (car-safe (car body)) 'interactive))
+ (if macrop (list 'quote 'macro) nil))))
+
+ ;; Convert defcustom to a simpler (and less space-consuming) defvar,
+ ;; but add some extra stuff if it uses :require.
+ ((eq car 'defcustom)
+ (let ((varname (car-safe (cdr-safe form)))
+ (init (car-safe (cdr-safe (cdr-safe form))))
+ (doc (car-safe (cdr-safe (cdr-safe (cdr-safe form)))))
+ (rest (cdr-safe (cdr-safe (cdr-safe (cdr-safe form))))))
+ (if (not (plist-get rest :require))
+ `(defvar ,varname ,init ,doc)
+ `(progn
+ (defvar ,varname ,init ,doc)
+ (custom-add-to-group ,(plist-get rest :group)
+ ',varname 'custom-variable)
+ (custom-add-load ',varname
+ ,(plist-get rest :require))))))
+
+ ;; nil here indicates that this is not a special autoload form.
+ (t nil))))
(defun make-c-autoload (module)
"Make an autoload list for the DEFUN at point in MODULE.
@@ -283,7 +321,7 @@ Returns nil if the DEFUN is malformed."
;; Generating autoloads for a single file
;;;###autoload
-(defun generate-file-autoloads (file &optional funlist)
+(defun generate-file-autoloads (file)
"Insert at point an autoload section for FILE.
autoloads are generated for defuns and defmacros in FILE
marked by `generate-autoload-cookie' (which see).
@@ -291,26 +329,26 @@ If FILE is being visited in a buffer, th
are used."
(interactive "fGenerate autoloads for file: ")
(cond ((string-match "\\.el$" file)
- (generate-autoload-ish-1
+ (generate-autoload-type-section
file
(replace-in-string (file-name-nondirectory file) "\\.elc?$" "")
- nil #'generate-file-autoloads-1
- funlist))
+ nil #'generate-lisp-file-autoloads-1))
;; #### jj, are C++ modules possible?
((string-match "\\.c$" file)
- (generate-autoload-ish-1
+ (generate-autoload-type-section
file
(replace-in-string (file-name-nondirectory file) "\\.c$" "")
- t #'generate-c-file-autoloads-1
- funlist))
+ t #'generate-c-file-autoloads-1))
(t
(error 'wrong-type-argument file "not a C or Elisp source file"))))
-(defun* generate-autoload-ish-1 (file load-name literal fun-to-call &rest args)
+(defun* generate-autoload-type-section (file load-name literal fun-to-call)
"Insert at point an autoload-type section for FILE.
-If LITERAL, open the file literally, without decoding.
-Calls FUN-TO-CALL to compute the autoloads, passing it OUTBUF, LOAD-NAME,
- TRIM-NAME, and ARGS."
+LOAD-NAME is the non-directory portion of the name, with the final .el, .elc
+or .c section removed. If LITERAL, open the file literally, without decoding.
+Calls FUN-TO-CALL to compute the autoloads, with the loaded file in the
+current buffer, passing it OUTBUF (where to write the autoloads), LOAD-NAME,
+and TRIM-NAME (result of calling `autoload-trim-file-name' on FILE)."
(let ((outbuf (current-buffer))
(trim-name (autoload-trim-file-name file))
(autoloads-done '())
@@ -318,6 +356,7 @@ Calls FUN-TO-CALL to compute the autoloa
(print-readably t) ; XEmacs
(float-output-format nil)
(visited (get-file-buffer file))
+ suppress-form
;; (done-any nil)
output-end)
@@ -329,21 +368,74 @@ Calls FUN-TO-CALL to compute the autoloa
;; subdirectory of the current buffer's directory, we'll make it
;; relative to the current buffer's directory.
(setq file (expand-file-name file))
+ ;; #### FSF 21.2. Do we want this?
+; (let* ((source-truename (file-truename file))
+; (dir-truename (file-name-as-directory
+; (file-truename default-directory)))
+; (len (length dir-truename)))
+; (if (and (< len (length source-truename))
+; (string= dir-truename (substring source-truename 0 len)))
+; (setq file (substring source-truename len))))
+
+ ;; Check for suppression form (XEmacs)
+ (let* ((dir (file-name-directory file))
+ (_pkg (expand-file-name "_pkg.el" dir))
+ (pkg-vis (get-file-buffer _pkg))
+ pkg-buf)
+ (save-excursion
+ (when (file-readable-p _pkg)
+ (unwind-protect
+ (progn
+ (let ((find-file-hooks nil)
+ (enable-local-variables nil))
+ (set-buffer (or pkg-vis (find-file-noselect _pkg)))
+ (set-syntax-table emacs-lisp-mode-syntax-table))
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (block nil
+ (while (search-forward "(package-suppress" nil t)
+ ;; skip over package-name
+ (forward-sexp 1)
+ (let ((supfile (read (current-buffer))))
+ (when (equal supfile load-name)
+ (setq suppress-form (eval (read (current-buffer))))
+ (return))))))))
+ (unless pkg-vis
+ ;; We created this buffer, so we should kill it.
+ (if pkg-buf (kill-buffer pkg-buf)))))))
(save-excursion
(unwind-protect
(progn
- (let ((find-file-hooks nil)
- (enable-local-variables nil))
+ (let (;(find-file-hooks nil)
+ ;(enable-local-variables nil)
+ )
(set-buffer (or visited (find-file-noselect file literal literal
)))
;; This doesn't look right for C files, but it is. The only
;; place we need the syntax table is when snarfing the Lisp
;; function name.
(set-syntax-table emacs-lisp-mode-syntax-table))
+; (if visited
+; (set-buffer visited)
+; ;; It is faster to avoid visiting the file.
+; (set-buffer (get-buffer-create " *generate-autoload-file*"))
+; (kill-all-local-variables)
+; (erase-buffer)
+; (setq buffer-undo-list t
+; buffer-read-only nil)
+; ;; This doesn't look right for C files, but it is. The only
+; ;; place we need the syntax table is when snarfing the Lisp
+; ;; function name.
+; (emacs-lisp-mode)
+; (if literal
+; (insert-file-contents-literally file nil)
+; (insert-file-contents file nil)))
(unless (setq autoloads-done
- (apply fun-to-call outbuf load-name trim-name args))
- (return-from generate-autoload-ish-1))
+ (funcall fun-to-call outbuf load-name trim-name))
+ (return-from generate-autoload-type-section))
)
(unless visited
;; We created this buffer, so we should kill it.
@@ -354,108 +446,124 @@ Calls FUN-TO-CALL to compute the autoloa
;; XEmacs -- always do this so that we cache the information
;; that we've processed the file already.
(progn
+ ;; Insert the section-header line
+ ;; which lists the file name and which functions are in it, etc.
(insert generate-autoload-section-header)
- (prin1 (list 'autoloads autoloads-done load-name trim-name)
+ (prin1 (list 'autoloads autoloads-done load-name trim-name
+ ;; In FSF 21.2. Also in FSF 19.30. Presumably
+ ;; deleted from XEmacs.
+ ;; (nth 5 (file-attributes file))
+ )
outbuf)
(terpri outbuf)
- ;;;; (insert ";;; Generated autoloads from "
- ;;;; (autoload-trim-file-name file) "\n")
- ;; Warn if we put a line in auto-autoloads.el
- ;; that is long enough to cause trouble.
- (when (< output-end (point))
- (setq output-end (point-marker)))
- (while (< (point) output-end)
- ;; (let ((beg (point)))
- (end-of-line)
- ;; Emacs -- I still haven't figured this one out.
- ;; (if (> (- (point) beg) 900)
- ;; (progn
- ;; (message "A line is too long--over 900 characters")
- ;; (sleep-for 2)
- ;; (goto-char output-end)))
- ;; )
- (forward-line 1))
+ ;; #### Alas, we will have to think about this. Adding this means
+ ;; that, once we have created or maintained an auto-autoloads file,
+ ;; we alone and our successors can update the file. The file itself
+ ;; will work fine in older XEmacsen, but they won't be able to
+ ;; update autoloads -- hence, to build.
+; ;; Break that line at spaces, to avoid very long lines.
+; ;; Make each sub-line into a comment.
+; (with-current-buffer outbuf
+; (save-excursion
+; (forward-line -1)
+; (while (not (eolp))
+; (move-to-column 64)
+; (skip-chars-forward "^ \n")
+; (or (eolp)
+; (insert "\n" generate-autoload-section-continuation)))))
+ ;; XEmacs: This was commented out before. #### Correct?
+; (insert ";;; Generated autoloads from "
+; (autoload-trim-file-name file) "\n")
+ ;; XEmacs -- handle suppression
+ (when suppress-form
+ (insert "\n;;; Suppress form from _pkg.el\n")
+ (insert "(unless " (prin1-to-string suppress-form) "\n\n"))
(goto-char output-end)
+ ;; XEmacs -- handle suppression
+ (when suppress-form
+ (insert "\n) ;; unless (suppressed)\n"))
(insert generate-autoload-section-trailer)))
- (or noninteractive ; XEmacs: only need one line in -batch mode.
- (message "Generating autoloads for %s...done" file))))
+ ))
-(defun* generate-file-autoloads-1 (outbuf load-name trim-name funlist)
- "Insert at point an autoload section for FILE.
-autoloads are generated for defuns and defmacros in FILE
-marked by `generate-autoload-cookie' (which see).
-If FILE is being visited in a buffer, the contents of the buffer
-are used."
+
+(defun process-one-lisp-autoload (autoloads-done outbuf load-name)
+ "Process a single autoload at point and write to OUTBUF.
+Point should be just after a magic cookie string (e.g. ;;;###autoload).
+Updates AUTOLOADS-DONE and returns the new value."
+ (skip-chars-forward " \t")
+ ;; (setq done-any t)
+ (if (eolp)
+ ;; Read the next form and make an autoload.
+ (let* ((form (prog1 (read (current-buffer))
+ (or (bolp) (forward-line 1))))
+ (autoload (make-autoload form load-name)))
+ (if autoload
+ (setq autoloads-done (cons (nth 1 form)
+ autoloads-done))
+ (setq autoload form))
+ (autoload-print-form autoload outbuf ""))
+ ;; Copy the rest of the line to the output.
+ (cond ((looking-at "immediate\\s *$") ; XEmacs
+ ;; This is here so that you can automatically
+ ;; have small hook functions copied to
+ ;; auto-autoloads.el so that it's not necessary
+ ;; to load a whole file just to get a two-line
+ ;; do-nothing find-file-hook... --Stig
+ (forward-line 1)
+ (let ((begin (point)))
+ (forward-sexp)
+ (forward-line 1)
+ (princ (buffer-substring begin (point)) outbuf)))
+ (t
+ (princ (buffer-substring
+ (progn
+ ;; Back up over whitespace, to preserve it.
+ (skip-chars-backward " \f\t")
+ (if (= (char-after (1+ (point))) ? )
+ ;; Eat one space.
+ (forward-char 1))
+ (point))
+ (progn (forward-line 1) (point)))
+ outbuf))))
+ autoloads-done)
+
+(defun* generate-lisp-file-autoloads-1 (outbuf load-name trim-name)
+ "Insert at point in OUTBUF an autoload section for an Elisp file.
+The file is assumed to be already loaded and in the current buffer.
+autoloads are generated for defuns and defmacros marked by
+`generate-autoload-cookie' (which see)."
(let ((autoloads-done '())
- (dofiles (not (null funlist)))
)
-
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(unless (search-forward generate-autoload-cookie nil t)
(message "No autoloads found in %s" trim-name)
- (return-from generate-file-autoloads-1 nil))
+ (return-from generate-lisp-file-autoloads-1 nil))
(message "Generating autoloads for %s..." trim-name)
(goto-char (point-min))
- (while (if dofiles funlist (not (eobp)))
- (if (not dofiles)
- (skip-chars-forward " \t\n\f")
- (goto-char (point-min))
- (re-search-forward
- (concat "(def\\(un\\|var\\|const\\|macro\\) "
- (regexp-quote (symbol-name (car funlist)))
- "\\s "))
- (goto-char (match-beginning 0)))
+ (while (not (eobp))
+ (skip-chars-forward " \t\n\f")
(cond
- ((or dofiles
- (looking-at (regexp-quote generate-autoload-cookie)))
- (if dofiles
- nil
- (search-forward generate-autoload-cookie)
- (skip-chars-forward " \t"))
- ;; (setq done-any t)
- (if (or dofiles (eolp))
- ;; Read the next form and make an autoload.
- (let* ((form (prog1 (read (current-buffer))
- (or (bolp) (forward-line 1))))
- (autoload (make-autoload form load-name))
- (doc-string-elt (get (car-safe form)
- 'doc-string-elt)))
- (if autoload
- (setq autoloads-done (cons (nth 1 form)
- autoloads-done))
- (setq autoload form))
- (print-autoload autoload doc-string-elt outbuf ""))
- ;; Copy the rest of the line to the output.
- (let ((begin (point)))
- ;; (terpri outbuf)
- (cond ((looking-at "immediate\\s *$") ; XEmacs
- ;; This is here so that you can automatically
- ;; have small hook functions copied to
- ;; auto-autoloads.el so that it's not necessary
- ;; to load a whole file just to get a two-line
- ;; do-nothing find-file-hook... --Stig
- (forward-line 1)
- (setq begin (point))
- (forward-sexp)
- (forward-line 1))
- (t
- (forward-line 1)))
- (princ (buffer-substring begin (point)) outbuf))))
+ ((looking-at (regexp-quote generate-autoload-cookie))
+ (search-forward generate-autoload-cookie)
+ (setq autoloads-done
+ (process-one-lisp-autoload autoloads-done outbuf load-name)))
((looking-at ";")
;; Don't read the comment.
(forward-line 1))
(t
(forward-sexp 1)
(forward-line 1)))
- (if dofiles
- (setq funlist (cdr funlist))))))
+ )))
+ (or noninteractive ; XEmacs: only need one line in -batch mode.
+ (message "Generating autoloads for %s...done" trim-name))
autoloads-done))
-(defun* generate-c-file-autoloads-1 (outbuf load-name trim-name funlist)
+(defun* generate-c-file-autoloads-1 (outbuf load-name trim-name
+ &optional funlist)
"Insert at point an autoload section for the C file FILE.
autoloads are generated for defuns and defmacros in FILE
marked by `generate-c-autoload-cookie' (which see).
@@ -488,7 +596,7 @@ are used."
(let ((autoload (make-c-autoload load-name)))
(when autoload
(push (nth 1 (nth 1 autoload)) autoloads-done)
- (print-autoload autoload 3 outbuf " "))))
+ (autoload-print-form autoload outbuf " "))))
;; close the princ'd `when' form
(princ ")" outbuf))
(goto-char (point-min))
@@ -505,91 +613,175 @@ are used."
(let ((autoload (make-c-autoload load-name)))
(when autoload
(push (nth 1 (nth 1 autoload)) autoloads-done)
- (print-autoload autoload 3 outbuf " ")))
+ (autoload-print-form autoload outbuf " ")))
(setq match
(search-forward generate-c-autoload-cookie nil t)))
;; close the princ'd `when' form
(princ ")" outbuf)))))
+ (or noninteractive ; XEmacs: only need one line in -batch mode.
+ (message "Generating autoloads for %s...done" trim-name))
+ autoloads-done))
+
+;;;###autoload
+(defun generate-custom-defines (file)
+ "Insert at point a custom-define section for FILE.
+If FILE is being visited in a buffer, the contents of the buffer
+are used."
+ (interactive "fGenerate custom defines for file: ")
+ (cond ((string-match "\\.el$" file)
+ (generate-autoload-type-section
+ file
+ (replace-in-string (file-name-nondirectory file) "\\.elc?$" "")
+ nil #'generate-custom-defines-1))
+ ((string-match "\\.c$" file)
+ ;; no way to generate custom-defines for C files (currently?),
+ ;; but cannot signal an error.
+ nil)
+ (t
+ (error 'wrong-type-argument file "not a C or Elisp source file"))))
+
+(defun* generate-custom-defines-1 (outbuf load-name trim-name)
+ "Insert at point in OUTBUF a custom-define section for an Elisp file.
+This contains all defcustoms and defgroups in the file.
+The file is assumed to be already loaded and in the current buffer."
+ (let* ((search-regexp-1 "^(\\(defcustom\\|defgroup\\) ")
+ (search-string-2 ";;;###custom-define")
+ (search-regexp-2 (regexp-quote search-string-2))
+ (autoloads-done '()))
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (unless (or (re-search-forward search-regexp-1 nil t)
+ (re-search-forward search-regexp-2 nil t))
+ (message "No custom defines found in %s" trim-name)
+ (return-from generate-custom-defines-1 nil))
+ (message "Generating custom defines for %s..." trim-name)
+ (princ "(defconst custom-define-current-source-file " outbuf)
+ (prin1 (file-relative-name (buffer-file-name)
+ (symbol-value-in-buffer 'default-directory
+ outbuf)) outbuf)
+ (princ ")\n" outbuf)
+
+ (goto-char (point-min))
+ (while (not (eobp))
+ (skip-chars-forward " \t\n\f")
+ (cond
+ ((looking-at search-regexp-1)
+ ;; Read the next form and copy it to make an autoload.
+ (let* ((form (prog1 (read (current-buffer))
+ (or (bolp) (forward-line 1))))
+ (autoload form ;(make-autoload form load-name)
+ ))
+ (if autoload
+ (setq autoloads-done (cons (nth 1 form)
+ autoloads-done))
+ (setq autoload form))
+ (autoload-print-form autoload outbuf ""))
+ )
+ ((looking-at search-regexp-2)
+ (search-forward search-string-2)
+ (beep)
+ (setq autoloads-done
+ (process-one-lisp-autoload autoloads-done outbuf load-name)))
+ ((looking-at ";")
+ ;; Don't read the comment.
+ (forward-line 1))
+ (t
+ (forward-sexp 1)
+ (forward-line 1)))
+ )))
+ (or noninteractive ; XEmacs: only need one line in -batch mode.
+ (message "Generating custom defines for %s...done" trim-name))
autoloads-done))
-;; Assorted utilities for generating autoloads and pieces thereof
+;; Assorted utilities for generating autoloads and pieces thereof
-(defun print-autoload (autoload doc-string-elt outbuf margin)
+(defun autoload-print-form (form outbuf margin)
"Print an autoload form, handling special characters.
In particular, print docstrings with escapes inserted before left parentheses
at the beginning of lines and ^L characters."
- (if (and doc-string-elt (stringp (nth doc-string-elt autoload)))
- ;; We need to hack the printing because the doc-string must be
- ;; printed specially for make-docfile (sigh).
- (let* ((p (nthcdr (1- doc-string-elt) autoload))
- (elt (cdr p))
- (start-string (format "\n%s(" margin)))
- (setcdr p nil)
- (princ start-string outbuf)
- ;; XEmacs change: don't let ^^L's get into
- ;; the file or sorting is hard.
- (let ((print-escape-newlines t)
- (p (save-excursion
- (set-buffer outbuf)
- (point)))
+ (cond
+ ;; If the form is a sequence, recurse.
+ ((eq (car form) 'progn)
+ (mapcar #'(lambda (x) (autoload-print-form x outbuf margin))
+ (cdr form)))
+ ;; Symbols at the toplevel are meaningless.
+ ((symbolp form) nil)
+ (t
+ (let ((doc-string-elt (get (car-safe form) 'doc-string-elt)))
+ (if (and doc-string-elt (stringp (nth doc-string-elt form)))
+ ;; We need to hack the printing because the doc-string must be
+ ;; printed specially for make-docfile (sigh).
+ (let* ((p (nthcdr (1- doc-string-elt) form))
+ (elt (cdr p))
+ (start-string (format "\n%s(" margin)))
+ (setcdr p nil)
+ (princ start-string outbuf)
+ ;; XEmacs change: don't let ^^L's get into
+ ;; the file or sorting is hard.
+ (let ((print-escape-newlines t)
+ ;;#### FSF 21.2 (print-escape-nonascii t)
+ (p (point outbuf))
+ p2)
+ (mapcar #'(lambda (elt)
+ (prin1 elt outbuf)
+ (princ " " outbuf))
+ form)
+ (with-current-buffer outbuf
+ (setq p2 (point-marker))
+ (goto-char p)
+ (save-match-data
+ (while (search-forward "\^L" p2 t)
+ (delete-char -1)
+ (insert "\\^L")))
+ (goto-char p2)))
+ (princ "\"\\\n" outbuf)
+ (let ((begin (point outbuf)))
+ (princ (substring (prin1-to-string (car elt)) 1) outbuf)
+ ;; Insert a backslash before each ( that appears at the beginning
+ ;; of a line in the doc string.
+ (with-current-buffer outbuf
+ (save-excursion
+ (while (search-backward start-string begin t)
+ (forward-char 1)
+ (insert "\\"))))
+ (if (null (cdr elt))
+ (princ ")" outbuf)
+ (princ " " outbuf)
+ (princ (substring (prin1-to-string (cdr elt)) 1) outbuf))
+ (terpri outbuf)
+ (princ margin outbuf)))
+ ;; XEmacs change: another ^L hack
+ (let ((p (point outbuf))
+ (print-escape-newlines t)
+ ;;#### FSF 21.2 (print-escape-nonascii t)
p2)
- (mapcar #'(lambda (elt)
- (prin1 elt outbuf)
- (princ " " outbuf))
- autoload)
- (save-excursion
- (set-buffer outbuf)
+ (print form outbuf)
+ (with-current-buffer outbuf
(setq p2 (point-marker))
(goto-char p)
(save-match-data
(while (search-forward "\^L" p2 t)
(delete-char -1)
(insert "\\^L")))
- (goto-char p2)))
- (princ "\"\\\n" outbuf)
- (let ((begin (save-excursion
- (set-buffer outbuf)
- (point))))
- (princ (substring (prin1-to-string (car elt)) 1) outbuf)
- ;; Insert a backslash before each ( that appears at the beginning
- ;; of a line in the doc string.
- (save-excursion
- (set-buffer outbuf)
- (save-excursion
- (while (search-backward start-string begin t)
- (forward-char 1)
- (insert "\\"))))
- (if (null (cdr elt))
- (princ ")" outbuf)
- (princ " " outbuf)
- (princ (substring (prin1-to-string (cdr elt)) 1) outbuf))
- (terpri outbuf)
- (princ margin outbuf)))
- ;; XEmacs change: another ^L hack
- (let ((p (save-excursion
- (set-buffer outbuf)
- (point)))
- (print-escape-newlines t)
- p2)
- (print autoload outbuf)
- (save-excursion
- (set-buffer outbuf)
- (setq p2 (point-marker))
- (goto-char p)
- (save-match-data
- (while (search-forward "\^L" p2 t)
- (delete-char -1)
- (insert "\\^L")))
- (goto-char p2)))))
+ (goto-char p2))))))))
;;; Forms which have doc-strings which should be printed specially.
;;; A doc-string-elt property of ELT says that (nth ELT FORM) is
;;; the doc-string in FORM.
+;;;
+;;; There used to be the following note here:
+;;; ;;; Note: defconst and defvar should NOT be marked in this way.
+;;; ;;; We don't want to produce defconsts and defvars that
+;;; ;;; make-docfile can grok, because then it would grok them twice,
+;;; ;;; once in foo.el (where they are given with ;;;###autoload) and
+;;; ;;; once in loaddefs.el.
;;;
-;;; defvar and defconst should be also be marked in this way. There is
-;;; no interference from make-docfile, which only processes those files
-;;; that are loaded into the dumped Emacs, and those files should
-;;; never have anything autoloaded here. Problems only occur with files
+;;; Counter-note: Yes, they should be marked in this way.
+;;; make-docfile only processes those files that are loaded into the
+;;; dumped Emacs, and those files should never have anything
+;;; autoloaded here. The above-feared problem only occurs with files
;;; which have autoloaded entries *and* are processed by make-docfile;
;;; there should be no such files.
@@ -597,11 +789,18 @@ at the beginning of lines and ^L charact
(put 'defun 'doc-string-elt 3)
(put 'defun* 'doc-string-elt 3)
(put 'defvar 'doc-string-elt 3)
+(put 'defcustom 'doc-string-elt 3)
(put 'defconst 'doc-string-elt 3)
(put 'defmacro 'doc-string-elt 3)
(put 'defmacro* 'doc-string-elt 3)
-(put 'define-skeleton 'doc-string-elt 3)
+(put 'defsubst 'doc-string-elt 3)
+(put 'define-skeleton 'doc-string-elt 2)
(put 'define-derived-mode 'doc-string-elt 4)
+(put 'easy-mmode-define-minor-mode 'doc-string-elt 2)
+(put 'define-minor-mode 'doc-string-elt 2)
+(put 'define-generic-mode 'doc-string-elt 7)
+;; defin-global-mode has no explicit docstring.
+(put 'easy-mmode-define-global-mode 'doc-string-elt 1000)
(defun autoload-trim-file-name (file)
"Returns relative pathname of FILE including the last directory.
@@ -615,6 +814,27 @@ Hard-codes the directory separator as a
;; #### is this a good idea?
"\\\\" "/"))
+(defun autoload-read-section-header ()
+ "Read a section header form.
+Since continuation lines have been marked as comments,
+we must copy the text of the form and remove those comment
+markers before we call `read'."
+ (save-match-data
+ (let ((beginning (point))
+ string)
+ (forward-line 1)
+ (while (looking-at generate-autoload-section-continuation)
+ (forward-line 1))
+ (setq string (buffer-substring beginning (point)))
+ (with-current-buffer (get-buffer-create " *autoload*")
+ (erase-buffer)
+ (insert string)
+ (goto-char (point-min))
+ (while (search-forward generate-autoload-section-continuation nil t)
+ (replace-match " "))
+ (goto-char (point-min))
+ (read (current-buffer))))))
+
;;;###autoload
(defun update-file-autoloads (file)
"Update the autoloads for FILE in `generated-autoload-file'
@@ -633,16 +853,42 @@ equal to `autoload-file-name')."
(trim-name (autoload-trim-file-name file))
section-begin form)
(save-excursion
+ ;; FSF has: [[ We want to get a value for generated-autoload-file
+ ;; from the local variables section if it's there. ]] Not
+ ;; applicable in XEmacs, since we always keep the autoloads
+ ;; up-to-date.
+
+ ;; #### FSF 21.2 adds: [[ We must read/write the file without any
+ ;; code conversion, but still decode EOLs. ]] Not clear if we need
+ ;; this. --ben
+ ;; (let ((coding-system-for-read 'raw-text))
(let ((find-file-hooks nil))
(set-buffer (or (get-file-buffer generated-autoload-file)
(find-file-noselect generated-autoload-file))))
+ ;; FSF 21.2 says:
+
+ ;; [[ This is to make generated-autoload-file have Unix EOLs, so
+ ;; that it is portable to all platforms. ]]
+ ;; (setq buffer-file-coding-system 'raw-text-unix))
+ ;; Not applicable in XEmacs, since we always keep the autoloads
+ ;; up-to-date and recompile when we build.
+
+ ;; FSF 21.2: [not applicable to XEmacs]
+; (or (> (buffer-size) 0)
+; (error "Autoloads file %s does not exist" buffer-file-name))
+; (or (file-writable-p buffer-file-name)
+; (error "Autoloads file %s is not writable" buffer-file-name))
+
+ ;; NOTE: The rest of this function is totally changed from FSF.
+ ;; Hence, not synched.
+
;; Make sure we can scribble in it.
(setq buffer-read-only nil)
;; First delete all sections for this file.
(goto-char (point-min))
(while (search-forward generate-autoload-section-header nil t)
(setq section-begin (match-beginning 0))
- (setq form (read (current-buffer)))
+ (setq form (autoload-read-section-header))
(when (string= (nth 2 form) load-name)
(search-forward generate-autoload-section-trailer)
(delete-region section-begin (point))))
@@ -651,7 +897,7 @@ equal to `autoload-file-name')."
(block find-insertion-point
(goto-char (point-min))
(while (search-forward generate-autoload-section-header nil t)
- (setq form (read (current-buffer)))
+ (setq form (autoload-read-section-header))
(when (string< trim-name (nth 3 form))
;; Found alphabetically correct insertion point
(goto-char (match-beginning 0))
@@ -661,65 +907,15 @@ equal to `autoload-file-name')."
(goto-char (point-max)))) ; Append.
;; Add in new sections for file
- (generate-file-autoloads file))
+ (funcall generate-autoload-function file))
(when (interactive-p) (save-buffer)))))
-;;;###autoload
-(defun update-autoloads-here ()
- "Update sections of the current buffer generated by `update-file-autoloads'."
- (interactive)
- (let ((generated-autoload-file (buffer-file-name)))
- (save-excursion
- (goto-char (point-min))
- (while (search-forward generate-autoload-section-header nil t)
- (let* ((form (condition-case ()
- (read (current-buffer))
- (end-of-file nil)))
- (file (nth 3 form)))
- ;; XEmacs change: if we can't find the file as specified, look
- ;; around a bit more.
- (cond ((and (stringp file)
- (or (get-file-buffer file)
- (file-exists-p file))))
- ((and (stringp file)
- (save-match-data
- (let ((loc (locate-file (file-name-nondirectory file)
- load-path)))
- (if (null loc)
- nil
- (setq loc (expand-file-name
- (autoload-trim-file-name loc)
- ".."))
- (if (or (get-file-buffer loc)
- (file-exists-p loc))
- (setq file loc)
- nil))))))
- (t
- (setq file
- (if (y-or-n-p
- (format
- "Can't find library `%s'; remove its autoloads? "
- (nth 2 form) file))
- t
- (condition-case ()
- (read-file-name
- (format "Find `%s' load file: "
- (nth 2 form))
- nil nil t)
- (quit nil))))))
- (if file
- (let ((begin (match-beginning 0)))
- (search-forward generate-autoload-section-trailer)
- (delete-region begin (point))))
- (if (stringp file)
- (generate-file-autoloads file)))))))
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Utilities for batch updates
;;;###autoload
-(defun autoload-update-directory-autoloads ()
+(defun batch-update-directory-autoloads ()
"Update the autoloads for a directory, using a specified feature prefix.
Must be used only with -batch. The feature prefix and directory to update
are taken from the first and second elements of `command-line-args-left',
@@ -730,16 +926,33 @@ rewrites the autoloads file, even if unc
applying `autoload-make-feature-name' to the specified feature prefix.
#### The API and semantics of this function are subject to change."
+ (unless noninteractive
+ (error "batch-update-directory-autoloads: may be used only with -batch"))
+ (update-autoload-files (list (cadr command-line-args-left))
+ (car command-line-args-left) nil t)
+ (setq command-line-args-left (cddr command-line-args-left)))
+
+;;;###autoload
+(defun batch-update-directory-custom-defines ()
+ "Update the custom defines for a directory, using a specified feature prefix.
+Must be used only with -batch. The feature prefix and directory to update
+are taken from the first and second elements of `command-line-args-left',
+respectively, and they are then removed from `command-line-args-left'.
+
+Runs `update-file-autoloads' on each file in the given directory. Always
+rewrites the autoloads file, even if unchanged. Makes a feature name by
+applying `autoload-make-feature-name' to the specified feature prefix.
+
+#### The API and semantics of this function are subject to change."
(unless noninteractive
- (error "autoload-batch-update-autoloads: may be used only with -batch"))
- (let* ((autoload-feature-prefix (car command-line-args-left))
- (dir (cadr command-line-args-left))
- (generated-autoload-file (expand-file-name autoload-file-name dir)))
- (update-autoload-files (list dir) t t)
- (setq command-line-args-left (cddr command-line-args-left))))
+ (error "batch-update-directory-custom-defines: may be used only with -batch"))
+ (update-custom-define-files (list (cadr command-line-args-left))
+ (car command-line-args-left) nil t)
+ (setq command-line-args-left (cddr command-line-args-left)))
;;;###autoload
-(defun update-autoload-files (files-or-dirs &optional all-into-one-file force)
+(defun update-autoload-files (files-or-dirs feature-prefix
+ &optional into-file force)
"Update all the autoload files associated with FILES-OR-DIRS.
FILES-OR-DIRS is a list of files and/or directories to be processed.
@@ -747,98 +960,144 @@ An appropriate autoload file is chosen a
each element of FILES-OR-DIRS. Fixup code testing for the autoload file's
feature and to provide the feature is added.
-If optional ALL-INTO-ONE-FILE is non-`nil', `generated-autoload-file'
-should be set to the name of an autoload file and all autoloads will be
-placed in that file. `autoload-feature-prefix' should be set to an
-appropriate prefix which will be concatenated with \"-autoloads\" to
-produce the feature name. Otherwise the appropriate autoload file for
-each file or directory (located in that directory, or in the directory of
-the specified file) will be updated with the directory's or file's
-autoloads and the protective forms will be added, and the files will be
-saved. Use of the default here is unreliable, and therefore deprecated.
+If optional INTO-FILE is non-`nil', it should specify a file into which
+the autoloads will be placed. Otherwise, the autoloads will be placed into
+a file named `auto-autoloads.el' in the directory of each element in
+FILES-OR-DIRS.
+
+FEATURE-PREFIX should be set to an appropriate prefix which will
+be concatenated with \"-autoloads\" to produce the feature name. Otherwise
+the appropriate autoload file for each file or directory (located in that
+directory, or in the directory of the specified file) will be updated with
+the directory's or file's autoloads and the protective forms will be added,
+and the files will be saved. Use of the default here is unreliable, and
+therefore deprecated.
Note that if some of FILES-OR-DIRS are directories, recursion goes only
one level deep.
If FORCE is non-nil, always save out the autoload files even if unchanged."
+ (or (listp files-or-dirs) (setq files-or-dirs (list files-or-dirs)))
(let ((defdir (directory-file-name default-directory))
;; value for all-into-one-file
- (autoload-feature-name (autoload-make-feature-name))
- (enable-local-eval nil)) ; Don't query in batch mode.
+ (autoload-feature-name (autoload-make-feature-name feature-prefix))
+ (enable-local-eval nil) ; Don't query in batch mode.
+ (autoload-feature-prefix feature-prefix)
+ ;; protect from change
+ (generated-autoload-file generated-autoload-file))
(dolist (arg files-or-dirs)
(setq arg (expand-file-name arg defdir))
(cond
((file-directory-p arg)
+ (setq generated-autoload-file
+ (or into-file (expand-file-name autoload-file-name arg)))
(message "Updating autoloads for directory %s..." arg)
- (update-autoloads-from-directory arg))
+ (let ((simple-dir (file-name-as-directory
+ (file-name-nondirectory
+ (directory-file-name arg))))
+ (enable-local-eval nil))
+ (save-excursion
+ (let ((find-file-hooks nil))
+ (set-buffer (find-file-noselect generated-autoload-file)))
+ (goto-char (point-min))
+ (while (search-forward generate-autoload-section-header nil t)
+ (let* ((begin (match-beginning 0))
+ (form (autoload-read-section-header))
+ (file (nth 3 form)))
+ (when (and (stringp file)
+ (string= (file-name-directory file) simple-dir)
+ (not (file-exists-p
+ (expand-file-name
+ (file-name-nondirectory file) arg))))
+ ;; Remove the obsolete section.
+ (search-forward generate-autoload-section-trailer)
+ (delete-region begin (point)))))
+ ;; Update or create autoload sections for existing files.
+ (mapcar 'update-file-autoloads
+ (directory-files arg t "^[^=].*\\.\\(el\\|c\\)$")))))
((file-exists-p arg)
+ (setq generated-autoload-file
+ (or into-file (expand-file-name autoload-file-name
+ (file-name-directory arg))))
(update-file-autoloads arg))
(t (error "No such file or directory: %s" arg)))
- (when (not all-into-one-file)
+ (when (not into-file)
(autoload-featurep-protect-autoloads
(autoload-make-feature-name
- (file-name-nondirectory (directory-file-name arg))))
+ (or feature-prefix
+ (file-name-nondirectory (directory-file-name arg)))))
(if force (set-buffer-modified-p
t (find-file-noselect generated-autoload-file)))))
- (when all-into-one-file
+ (when into-file
(autoload-featurep-protect-autoloads autoload-feature-name)
(if force (set-buffer-modified-p
- t (find-file-noselect generated-autoload-file))))
+ t (find-file-noselect into-file))))
(save-some-buffers t)
))
;;;###autoload
-(defun update-autoloads-from-directory (dir)
- "Update `generated-autoload-file' with all the current autoloads from DIR.
-This runs `update-file-autoloads' on each .el and .c file in DIR.
-Obsolete autoload entries for files that no longer exist are deleted.
-Note that, if this function is called from `batch-update-directory',
-`generated-autoload-file' was rebound in that function.
-
-You don't really want to be calling this function. Try using
-`update-autoload-files' instead."
- (interactive "DUpdate autoloads for directory: ")
- (setq dir (expand-file-name dir))
- (let ((simple-dir (file-name-as-directory
- (file-name-nondirectory
- (directory-file-name dir))))
- (enable-local-eval nil))
- (save-excursion
- (let ((find-file-hooks nil))
- (set-buffer (find-file-noselect generated-autoload-file)))
- (goto-char (point-min))
- (while (search-forward generate-autoload-section-header nil t)
- (let* ((begin (match-beginning 0))
- (form (condition-case ()
- (read (current-buffer))
- (end-of-file nil)))
- (file (nth 3 form)))
- (when (and (stringp file)
- (string= (file-name-directory file) simple-dir)
- (not (file-exists-p
- (expand-file-name
- (file-name-nondirectory file) dir))))
- ;; Remove the obsolete section.
- (search-forward generate-autoload-section-trailer)
- (delete-region begin (point)))))
- ;; Update or create autoload sections for existing files.
- (mapcar 'update-file-autoloads
- (directory-files dir t "^[^=].*\\.\\(el\\|c\\)$"))
- (unless noninteractive
- (save-buffer)))))
+(defun update-custom-define-files (files-or-dirs feature-prefix
+ &optional into-file force)
+ "Update all the custom-define files associated with FILES-OR-DIRS.
+Works just like `update-file-autoloads'."
+ (let* ((autoload-feature-suffix "-custom-defines")
+ (autoload-file-name "custom-defines.el")
+ (generate-autoload-function #'generate-custom-defines))
+ (update-autoload-files files-or-dirs feature-prefix into-file force)))
(defun autoload-featurep-protect-autoloads (sym)
(save-excursion
(set-buffer (find-file-noselect generated-autoload-file))
(goto-char (point-min))
- (if (and (not (= (point-min) (point-max)))
- (not (looking-at ";;; DO NOT MODIFY THIS FILE")))
- (progn
- (insert ";;; DO NOT MODIFY THIS FILE\n")
- (insert "(if (featurep '" sym ")")
- (insert " (error \"Feature " sym " already loaded\"))\n")
- (goto-char (point-max))
- (insert "\n(provide '" sym ")\n")))))
+ (cond ((eq (point-min) (point-max)) nil)
+ ;; if there's some junk in the file but no sections, just
+ ;; delete everything. the junk might be stuff inserted by
+ ;; an older version of this function.
+ ((not (search-forward generate-autoload-section-header nil t))
+ (delete-region (point-min) (point-max)))
+ (t
+ (goto-char (point-min))
+ (when (looking-at ";;; DO NOT MODIFY THIS FILE")
+ (delete-region (point-min)
+ (progn
+ (search-forward generate-autoload-section-header)
+ (match-beginning 0))))
+ ;; Determine and set the coding system for the file if under Mule.
+ ;; If there are any extended characters in the input file, use
+ ;; `escape-quoted' to make sure that both binary and extended
+ ;; characters are output properly and distinguished properly.
+ ;; Otherwise, use `raw-text' for maximum portability with non-Mule
+ ;; Emacsen.
+ (if (or (featurep '(not mule)) ;; Don't scan if no Mule support
+ (progn
+ (goto-char (point-min))
+ ;; mrb- There must be a better way than skip-chars-forward
+ (skip-chars-forward (concat (char-to-string 0) "-"
+ (char-to-string 255)))
+ (eq (point) (point-max))))
+ (setq buffer-file-coding-system 'raw-text-unix)
+ (setq buffer-file-coding-system 'escape-quoted))
+ (goto-char (point-min))
+ (insert ";;; DO NOT MODIFY THIS FILE")
+ ;; NOTE: XEmacs prior to 21.5.12 or so had a bug in that it
+ ;; recognized only one of the two magic-cookie styles (the -*- kind)
+ ;; in find-file, but both of them in load. We go ahead and put both
+ ;; in, just to be safe.
+ (when (eq buffer-file-coding-system 'escape-quoted)
+ (insert " -*- coding: escape-quoted; -*-
+\(or (featurep 'mule) (error \"Loading this file requires Mule support\"))
+;;;###coding system: escape-quoted"))
+ (insert "\n(if (featurep '" sym ")")
+ (insert " (error \"Feature " sym " already loaded\"))\n")
+ (goto-char (point-max))
+ (save-excursion
+ (forward-line -1)
+ (when (looking-at "(provide")
+ (delete-region (point) (point-max))))
+ (unless (bolp) (insert "\n"))
+ (unless (eq (char-before (1- (point))) ?\^L)
+ (insert "\^L\n"))
+ (insert "(provide '" sym ")\n")))))
(defun autoload-make-feature-name (&optional prefix)
"Generate the feature name to protect this auto-autoloads file from PREFIX.
@@ -864,19 +1123,23 @@ You should specify it as an argument to
(file-name-directory generated-autoload-file))))
(t (error 'invalid-argument
"Could not compute a feature name")))
- "-autoloads"))
+ autoload-feature-suffix))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Deprecated entry points
;; A grep of the core and packages shows use of `batch-update-autoloads'
;; by XEmacs.rules, pcomplete, eshell, oort-gnus; `batch-update-directory'
-;; by liece.
+;; by liece. The other two entry points (`batch-update-one-directory',
+;; `batch-force-update-one-directory') were not used at all.
+;;
+;; All except the first are now history. liece has been updated.
+;; XEmacs.rules has been updated. The others will be, eventually.
+
+;; There don't seem to be very many packages that use the first one (the
+;; "all-into-one-file" variety), and do they actually rely on this
+;; functionality? --ben
-;; #### these entry points below are a big mess, especially the
-;; first two. there don't seem to be very many packages that use the
-;; first one (the "all-into-one-file" variety), and do they actually
-;; rely on this functionality? --ben
;; but XEmacs.rules does, though maybe it doesn't "rely" on it, and
;; modules do now, and that relies on it. --sjt
@@ -891,58 +1154,14 @@ The directory to which the auto-autoload
on the command line."
(unless noninteractive
(error "batch-update-autoloads is to be used only with -batch"))
- (update-autoload-files command-line-args-left t)
+ (update-autoload-files command-line-args-left generated-autoload-file)
(kill-emacs 0))
-;;;###autoload
-(defun batch-update-directory ()
- "Update the autoloads for the directories on the command line.
-Runs `update-file-autoloads' on each file in the given directory, and must
-be used only with -batch.
-
-Uses and removes the first element of `command-line-args-left'."
- (unless noninteractive
- (error "batch-update-directory is to be used only with -batch"))
- (update-autoload-files command-line-args-left)
- ;; (kill-emacs 0)
- (setq command-line-args-left nil))
-
-;;;###autoload
-(defun batch-update-one-directory ()
- "Update the autoloads for a single directory on the command line.
-Runs `update-file-autoloads' on each file in the given directory, and must
-be used only with -batch."
- (unless noninteractive
- (error "batch-update-one-directory is to be used only with -batch"))
- (let ((arg (car command-line-args-left)))
- (setq command-line-args-left (cdr command-line-args-left))
- (update-autoload-files (list arg))))
-
-;;;###autoload
-(defun batch-force-update-one-directory ()
- "Update the autoloads for a single directory on the command line.
-Runs `update-file-autoloads' on each file in the given directory, and must
-be used only with -batch. Always rewrites the autoloads file, even if
-unchanged.
-
-Uses and removes the first element of `command-line-args-left'."
- (unless noninteractive
- (error "batch-force-update-directory is to be used only with -batch"))
- (let ((arg (car command-line-args-left)))
- (setq command-line-args-left (cdr command-line-args-left))
- (update-autoload-files (list arg) nil t)))
-
;; Declare obsolescence
(make-obsolete-variable 'autoload-target-directory
"Don't use this. Bind `generated-autoload-file' to an absolute path.")
(make-obsolete 'batch-update-autoloads
- 'autoload-update-directory-autoloads)
-(make-obsolete 'batch-update-directory
- 'autoload-update-directory-autoloads)
-(make-obsolete 'batch-update-one-directory
- 'autoload-update-directory-autoloads)
-(make-obsolete 'batch-force-update-one-directory
'autoload-update-directory-autoloads)
(provide 'autoload)
Index: lisp/update-elc.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/update-elc.el,v
retrieving revision 1.34
diff -u -p -r1.34 update-elc.el
--- lisp/update-elc.el 2004/12/27 12:25:15 1.34
+++ lisp/update-elc.el 2005/02/03 05:37:20
@@ -106,7 +106,7 @@
;; early byte compilation. These are files loaded by update-elc.el in
;; order to do the compilation of all the rest of the files.
(defvar lisp-files-needing-early-byte-compilation
- '(;"easy-mmode"
+ '("easy-mmode"
"autoload"
"shadow"
"cl-macs"))
@@ -312,10 +312,10 @@ If any of these files are changed, we ne
need-to-rebuild-mule-autoloads)
(list "-l" "autoload"))
(if need-to-rebuild-autoloads
- (list "-f" "autoload-update-directory-autoloads"
+ (list "-f" "batch-update-directory-autoloads"
"auto" source-lisp))
(if need-to-rebuild-mule-autoloads
- (list "-f" "autoload-update-directory-autoloads"
+ (list "-f" "batch-update-directory-autoloads"
"mule" source-lisp-mule))
(if need-to-recompile-autoloads
(list "-f" "batch-byte-compile-one-file"
Index: lisp/update-elc-2.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/update-elc-2.el,v
retrieving revision 1.11
diff -u -p -r1.11 update-elc-2.el
--- lisp/update-elc-2.el 2003/03/01 07:25:27 1.11
+++ lisp/update-elc-2.el 2005/02/03 05:37:21
@@ -149,32 +149,25 @@
;; way is slow, so we avoid it when possible.
(when (file-exists-p (expand-file-name "REBUILD_AUTOLOADS"
invocation-directory))
- (let ((generated-autoload-file (expand-file-name "auto-autoloads.el" dir))
- (autoload-package-name "auto")) ; feature prefix
- ;; if we were instructed to rebuild the autoloads, force the file
- ;; to be touched even w/o changes; otherwise, we won't ever stop
- ;; being told to rebuild them.
- (update-autoload-files (list dir) nil t)
- (byte-recompile-file generated-autoload-file 0))
+ ;; if we were instructed to rebuild the autoloads, force the file
+ ;; to be touched even w/o changes; otherwise, we won't ever stop
+ ;; being told to rebuild them.
+ (update-autoload-files dir "auto" nil t)
+ (byte-recompile-file (expand-file-name "auto-autoloads.el" dir) 0)
(when (featurep 'mule)
- (let* ((muledir (expand-file-name "../lisp/mule" (file-truename dir)))
- (generated-autoload-file
- (expand-file-name "auto-autoloads.el" muledir))
- (autoload-package-name "mule")) ; feature prefix
+ (let ((muledir (expand-file-name "../lisp/mule" (file-truename dir))))
;; force here just like above.
- (update-autoload-files (list muledir) nil t)
- (byte-recompile-file generated-autoload-file 0))))
+ (update-autoload-files muledir "mule" nil t)
+ (byte-recompile-file (expand-file-name "auto-autoloads.el" dir) 0))))
(when (featurep 'modules)
(let* ((moddir (expand-file-name "../modules" (file-truename dir)))
- (generated-autoload-file
- (expand-file-name "auto-autoloads.el" moddir))
- (autoload-package-name "modules")) ; feature prefix
- (update-autoload-files
+ (autofile (expand-file-name "auto-autoloads.el" moddir)))
+ (update-autoload-files
(delete (concat (file-name-as-directory moddir) ".")
(delete (concat (file-name-as-directory moddir) "..")
(directory-files moddir t nil nil 0)))
- t)
- (byte-recompile-file generated-autoload-file 0)))
+ "modules" autofile)
+ (byte-recompile-file autofile 0)))
;; now load the (perhaps newly rebuilt) autoloads; we were called with
;; -no-autoloads so they're not already loaded.
(load (expand-file-name "auto-autoloads" lisp-directory))
cvs server: lisp/easy-mmode.el is a new entry, no comparison available
cvs server: lisp/regexp-opt.el is a new entry, no comparison available