diff lisp/vm/make-autoloads @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/vm/make-autoloads	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,48 @@
+(defun member (e list)
+  (while (and list (not (equal e (car list))))
+    (setq list (cdr list)))
+  list )
+
+(defun print-autoloads ()
+  (let ((files (cdr (member "print-autoloads" command-line-args)))
+	;; kludge for broken v19 emacs.  it's supposed to accept
+	;; t in autoloads to mean 'macro but it doesn't.  this
+	;; kludge will screw people who try to byte-compile VM
+	;; with emacs18 for emacs19.
+	(macro-flag (if (string-match "^19" emacs-version) ''macro t))
+	sexp function doc interactive macro)
+    (setq expanded-files (mapcar (function expand-file-name) files))
+    (while files
+      (set-buffer (find-file-noselect (car expanded-files)))
+      (goto-char (point-min))
+      (condition-case nil
+	  (while t
+	    (setq sexp (read (current-buffer)))
+	    (if (and (consp sexp) (cdr sexp)
+		     (or (eq (car sexp) 'defun)
+			 (eq (car sexp) 'defmacro)))
+		(progn
+		  (if (eq (car sexp) 'defmacro)
+		      (setq macro macro-flag)
+		    (setq macro nil))
+		  (setq sexp (cdr sexp)
+			function (car sexp)
+			sexp (cdr (cdr sexp)))
+		  (if (stringp (car sexp))
+		      (setq doc (car sexp)
+			    sexp (cdr sexp))
+		    (setq doc nil))
+		  (if (and (consp (car sexp))
+			   (eq (car (car sexp)) 'interactive))
+		      (setq interactive t)
+		    (setq interactive nil))
+		  (if (string-match "\\.el$" (car files))
+		      (setq file (substring (car files) 0 -3))
+		    (setq file (car files)))
+		  (print (list 'autoload (list 'quote function) file
+			       doc interactive macro)))))
+	(end-of-file nil))
+      (kill-buffer (current-buffer))
+      (setq files (cdr files)
+	    expanded-files (cdr expanded-files))))
+  (kill-emacs))