Ensure that byte compilation works for relative files (Bug#45287).

* lisp/emacs-lisp/bytecomp.el (byte-compile-file): Don’t fail if
target filename doesn’t contain a directory name.

* test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-tests--target-file-no-directory): New unit test.
This commit is contained in:
Philipp Stephani 2020-12-17 12:06:15 +01:00
parent 32d76c0cbc
commit 7fad959114
2 changed files with 20 additions and 1 deletions

View file

@ -1967,7 +1967,11 @@ See also `emacs-lisp-byte-compile-and-load'."
;; We attempt to create a temporary file in the
;; target directory, so the target directory must be
;; writable.
(file-writable-p (file-name-directory target-file)))
(file-writable-p
(file-name-directory
;; Need to expand in case TARGET-FILE doesn't
;; include a directory (Bug#45287).
(expand-file-name target-file))))
;; We must disable any code conversion here.
(let* ((coding-system-for-write 'no-conversion)
;; Write to a tempfile so that if another Emacs

View file

@ -1016,6 +1016,21 @@ mountpoint (Bug#44631)."
(set-file-modes directory #o700)
(delete-directory directory :recursive))))))
(ert-deftest bytecomp-tests--target-file-no-directory ()
"Check that Bug#45287 is fixed."
(let ((directory (make-temp-file "bytecomp-tests-" :directory)))
(unwind-protect
(let* ((default-directory directory)
(byte-compile-dest-file-function (lambda (_) "test.elc"))
(byte-compile-error-on-warn t))
(write-region "" nil "test.el" nil nil nil 'excl)
(should (byte-compile-file "test.el"))
(should (file-regular-p "test.elc"))
(should (cl-plusp (file-attribute-size
(file-attributes "test.elc")))))
(with-demoted-errors "Error cleaning up directory: %s"
(delete-directory directory :recursive)))))
;; Local Variables:
;; no-byte-compile: t
;; End: