]> git.eshelyaron.com Git - emacs.git/commitdiff
Ensure that byte compilation works for relative files (Bug#45287).
authorPhilipp Stephani <phst@google.com>
Thu, 17 Dec 2020 11:06:15 +0000 (12:06 +0100)
committerPhilipp Stephani <phst@google.com>
Thu, 17 Dec 2020 11:19:27 +0000 (12:19 +0100)
* 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.

lisp/emacs-lisp/bytecomp.el
test/lisp/emacs-lisp/bytecomp-tests.el

index e23bb9f5e6e29e0db4fe5e75a892056ed1776236..64f2c010824ed5a7fa0cbda4557c28ec9269847b 100644 (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
index c2a3e3ba117257fe906765818c9b92751cef16fc..4a6e28f7c7cd9687d853af746079b58ff7739105 100644 (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: