diff lisp/emacs-lisp/autoload.el @ 105235:f2e56d1eff32

* menu-bar.el: Remove menu-bar-ediff-misc-menu from the Tools menu. * ediff-hook.el: Move menu-bar-ediff-misc-menu into menu-bar-ediff-menu. * emacs-lisp/lisp-mode.el: Add doc-string-elt property to define-overloadable-function. * progmodes/autoconf.el: Provide autoconf as well, so that this file can be `require'd. * emacs-lisp/cl-macs.el (deftype): Add to cl-loaddefs. * emacs-lisp/autoload.el (generated-autoload-feature) (generated-autoload-load-name): New vars. (autoload-rubric, autoload-generate-file-autoloads): Use them. (make-autoload): Recognize define-overloadable-function and defclass forms (for EIEIO). * Makefile.in (update-subdirs): Exclude cedet directory.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 27 Sep 2009 23:25:03 +0000
parents a9dc0e7c3f2b
children bd2966850aac
line wrap: on
line diff
--- a/lisp/emacs-lisp/autoload.el	Sun Sep 27 19:11:13 2009 +0000
+++ b/lisp/emacs-lisp/autoload.el	Sun Sep 27 23:25:03 2009 +0000
@@ -42,6 +42,18 @@
 ;;;###autoload
 (put 'generated-autoload-file 'safe-local-variable 'stringp)
 
+(defvar generated-autoload-feature nil
+  "Feature for `generated-autoload-file' to provide.
+If nil, this defaults to `generated-autoload-file', sans extension.")
+;;;###autoload
+(put 'generated-autoload-feature 'safe-local-variable 'symbolp)
+
+(defvar generated-autoload-load-name nil
+  "Load name for `autoload' statements generated from autoload cookies.
+If nil, this defaults to the file name, sans extension.")
+;;;###autoload
+(put 'generated-autoload-load-name 'safe-local-variable 'stringp)
+
 ;; This feels like it should be a defconst, but MH-E sets it to
 ;; ";;;###mh-autoload" for the autoloads that are to go into mh-loaddefs.el.
 (defvar generate-autoload-cookie ";;;###autoload"
@@ -95,11 +107,12 @@
 		   easy-mmode-define-global-mode define-global-minor-mode
 		   define-globalized-minor-mode
 		   easy-mmode-define-minor-mode define-minor-mode
-		   defun* defmacro*))
+		   defun* defmacro* define-overloadable-function))
       (let* ((macrop (memq car '(defmacro defmacro*)))
 	     (name (nth 1 form))
 	     (args (case car
-		    ((defun defmacro defun* defmacro*) (nth 2 form))
+		    ((defun defmacro defun* defmacro*
+		       define-overloadable-function) (nth 2 form))
 		    ((define-skeleton) '(&optional str arg))
 		    ((define-generic-mode define-derived-mode
                        define-compilation-mode) nil)
@@ -122,6 +135,14 @@
 		  (eq (car-safe (car body)) 'interactive))
 	      (if macrop (list 'quote 'macro) nil))))
 
+     ;; For defclass forms, use `eieio-defclass-autoload'.
+     ((eq car 'defclass)
+      (let ((name (nth 1 form))
+	    (superclasses (nth 2 form))
+	    (doc (nth 4 form)))
+	(list 'eieio-defclass-autoload (list 'quote name)
+	      (list 'quote superclasses) file doc)))
+
      ;; Convert defcustom to less space-consuming data.
      ((eq car 'defcustom)
       (let ((varname (car-safe (cdr-safe form)))
@@ -245,7 +266,12 @@
 	    ";;\n"
 	    ";;; Code:\n\n"
 	    "\n"
-	    "(provide '" (file-name-sans-extension basename) ")\n"
+	    "(provide '"
+	    (if (and generated-autoload-feature
+		     (symbolp generated-autoload-feature))
+		(format "%s" generated-autoload-feature)
+	      (file-name-sans-extension basename))
+	    ")\n"
 	    ";; Local Variables:\n"
 	    ";; version-control: never\n"
 	    ";; no-byte-compile: t\n"
@@ -336,7 +362,7 @@
 \(or OUTBUF if OUTFILE is nil)."
   (catch 'done
     (let ((autoloads-done '())
-          (load-name (autoload-file-load-name file))
+	  load-name
           (print-length nil)
 	  (print-level nil)
           (print-readably t)           ; This does something in Lucid Emacs.
@@ -354,6 +380,10 @@
         ;; Obey the no-update-autoloads file local variable.
         (unless no-update-autoloads
           (message "Generating autoloads for %s..." file)
+	  (setq load-name
+		(if (stringp generated-autoload-load-name)
+		    generated-autoload-load-name
+		  (autoload-file-load-name file)))
           (save-excursion
             (save-restriction
               (widen)