aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong2012-03-12 11:03:16 +0800
committerChong Yidong2012-03-12 11:03:16 +0800
commit292112ed3b196b6181010b0965a1df41d0cacf3a (patch)
treeb0544e40379a6f0e867d4bb85cfd742f183706bc
parent4098f8f73cf80eee975e9fc5c4b6fd3719e384ff (diff)
downloademacs-292112ed3b196b6181010b0965a1df41d0cacf3a.tar.gz
emacs-292112ed3b196b6181010b0965a1df41d0cacf3a.zip
Load a package's generated autoloads file before byte compiling it.
* lisp/emacs-lisp/package.el (package-unpack, package-unpack-single): Load generated autoloads file before byte compiling. (package--make-autoloads-and-compile): New helper fun. Fixes: debbugs:10970
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/emacs-lisp/package.el23
2 files changed, 21 insertions, 8 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 4a3e895339a..9108455df44 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
12012-03-12 Chong Yidong <cyd@gnu.org>
2
3 * emacs-lisp/package.el (package-unpack, package-unpack-single):
4 Load generated autoloads file before byte compiling (Bug#10970).
5 (package--make-autoloads-and-compile): New helper fun.
6
12012-03-12 Christopher Schmidt <christopher@ch.ristopher.com> 72012-03-12 Christopher Schmidt <christopher@ch.ristopher.com>
2 8
3 * ibuffer.el (ibuffer-redisplay): Remove another gratuitous error. 9 * ibuffer.el (ibuffer-redisplay): Remove another gratuitous error.
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index fd0eb029fc3..5b158eb994f 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -607,16 +607,25 @@ untar into a directory named DIR; otherwise, signal an error."
607 (error "Package does not untar cleanly into directory %s/" dir)))) 607 (error "Package does not untar cleanly into directory %s/" dir))))
608 (tar-untar-buffer)) 608 (tar-untar-buffer))
609 609
610(defun package-unpack (name version) 610(defun package-unpack (package version)
611 (let* ((dirname (concat (symbol-name name) "-" version)) 611 (let* ((name (symbol-name package))
612 (dirname (concat name "-" version))
612 (pkg-dir (expand-file-name dirname package-user-dir))) 613 (pkg-dir (expand-file-name dirname package-user-dir)))
613 (make-directory package-user-dir t) 614 (make-directory package-user-dir t)
614 ;; FIXME: should we delete PKG-DIR if it exists? 615 ;; FIXME: should we delete PKG-DIR if it exists?
615 (let* ((default-directory (file-name-as-directory package-user-dir))) 616 (let* ((default-directory (file-name-as-directory package-user-dir)))
616 (package-untar-buffer dirname) 617 (package-untar-buffer dirname)
617 (package-generate-autoloads (symbol-name name) pkg-dir) 618 (package--make-autoloads-and-compile name pkg-dir))))
618 (let ((load-path (cons pkg-dir load-path))) 619
619 (byte-recompile-directory pkg-dir 0 t))))) 620(defun package--make-autoloads-and-compile (name pkg-dir)
621 "Generate autoloads and do byte-compilation for package named NAME.
622PKG-DIR is the name of the package directory."
623 (package-generate-autoloads name pkg-dir)
624 (let ((load-path (cons pkg-dir load-path)))
625 ;; We must load the autoloads file before byte compiling, in
626 ;; case there are magic cookies to set up non-trivial paths.
627 (load (expand-file-name (concat name "-autoloads") pkg-dir) nil t)
628 (byte-recompile-directory pkg-dir 0 t)))
620 629
621(defun package--write-file-no-coding (file-name) 630(defun package--write-file-no-coding (file-name)
622 (let ((buffer-file-coding-system 'no-conversion)) 631 (let ((buffer-file-coding-system 'no-conversion))
@@ -656,9 +665,7 @@ untar into a directory named DIR; otherwise, signal an error."
656 nil 665 nil
657 pkg-file 666 pkg-file
658 nil nil nil 'excl)) 667 nil nil nil 'excl))
659 (package-generate-autoloads file-name pkg-dir) 668 (package--make-autoloads-and-compile file-name pkg-dir))))
660 (let ((load-path (cons pkg-dir load-path)))
661 (byte-recompile-directory pkg-dir 0 t)))))
662 669
663(defmacro package--with-work-buffer (location file &rest body) 670(defmacro package--with-work-buffer (location file &rest body)
664 "Run BODY in a buffer containing the contents of FILE at LOCATION. 671 "Run BODY in a buffer containing the contents of FILE at LOCATION.