Merge from trunk.

This commit is contained in:
Paul Eggert 2011-06-30 22:20:09 -07:00
commit d0672f86c9
11 changed files with 518 additions and 69 deletions

View file

@ -141,6 +141,15 @@ See the functions `find-function' and `find-variable'."
(dolist (suffix (get-load-suffixes) (nreverse suffixes))
(unless (string-match "elc" suffix) (push suffix suffixes)))))
(defun find-library--load-name (library)
(let ((name library))
(dolist (dir load-path)
(let ((rel (file-relative-name library dir)))
(if (and (not (string-match "\\`\\.\\./" rel))
(< (length rel) (length name)))
(setq name rel))))
(unless (equal name library) name)))
(defun find-library-name (library)
"Return the absolute file name of the Emacs Lisp source of LIBRARY.
LIBRARY should be a string (the name of the library)."
@ -148,13 +157,23 @@ LIBRARY should be a string (the name of the library)."
;; the same name.
(if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
(setq library (replace-match "" t t library)))
(or
(or
(locate-file library
(or find-function-source-path load-path)
(find-library-suffixes))
(locate-file library
(or find-function-source-path load-path)
load-file-rep-suffixes)
(when (file-name-absolute-p library)
(let ((rel (find-library--load-name library)))
(when rel
(or
(locate-file rel
(or find-function-source-path load-path)
(find-library-suffixes))
(locate-file rel
(or find-function-source-path load-path)
load-file-rep-suffixes)))))
(error "Can't find library %s" library)))
(defvar find-function-C-source-directory