From: Philipp Stephani Date: Thu, 17 Dec 2020 11:06:15 +0000 (+0100) Subject: Ensure that byte compilation works for relative files (Bug#45287). X-Git-Tag: emacs-28.0.90~4680 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7fad9591142f9d9d0bfce37dd8c65a847dbe8aa9;p=emacs.git 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. --- diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index e23bb9f5e6e..64f2c010824 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -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 diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index c2a3e3ba117..4a6e28f7c7c 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -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: