diff options
| author | Chong Yidong | 2012-03-12 11:03:16 +0800 |
|---|---|---|
| committer | Chong Yidong | 2012-03-12 11:03:16 +0800 |
| commit | 292112ed3b196b6181010b0965a1df41d0cacf3a (patch) | |
| tree | b0544e40379a6f0e867d4bb85cfd742f183706bc | |
| parent | 4098f8f73cf80eee975e9fc5c4b6fd3719e384ff (diff) | |
| download | emacs-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/ChangeLog | 6 | ||||
| -rw-r--r-- | lisp/emacs-lisp/package.el | 23 |
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 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-03-12 Christopher Schmidt <christopher@ch.ristopher.com> | 7 | 2012-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. | ||
| 622 | PKG-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. |