Subject: Re: bug#64226: 30.0.50; emacs-lisp-native-compile-and-load permission error

From: Eli Zaretskii <[email-masked]>
Date: Thu, 22 Jun 2023 18:34:24 +0300

> From: No Wayman <[email-masked]>
> Date: Wed, 21 Jun 2023 12:58:40 -0400
> 
> 
> To reproduce:
> 
> 1. Find an elisp file located in $DIR which user has permission to 
> write to.
> (in the following backtrace, the file being compiled was located 
> at $HOME/.emacs.d/elpaca/builds/elpaca/elpaca.el)
> 2. M-x emacs-lisp-native-compile-and-load 
> 3. Observer the following error: 
> 
> Error: permission-denied (\"Creating file with prefix\" 
> \"Permission denied\" 
> \"/usr/lib/emacs/30.0.50/native-lisp/30.0.50-58a66af6/elpaca-0646d6fc-1256ece5\")
>   mapbacktrace(#f(compiled-function (evald func args flags) 
>   #<bytecode 0x835cf36bbae8692>))
>   debug-early-backtrace()
>   debug-early(error (permission-denied \"Creating file with 
>   prefix\" \"Permission denied\" 
>   \"/usr/lib/emacs/30.0.50/native-lisp/30.0.50-58a66af6/elpaca-0646d6fc-1256ece5\"))
>   make-temp-file(\"/usr/lib/emacs/30.0.50/native-lisp/30.0.50-58a66af6/elpaca-0646d6fc-1256ece5\" 
>   nil \".eln.tmp\" nil)
>   comp--compile-ctxt-to-file(\"/usr/lib/emacs/30.0.50/native-lisp/30.0.50-58a66af6/elpaca-0646d6fc-1256ece5.eln\")
>   comp-compile-ctxt-to-file(\"/usr/lib/emacs/30.0.50/native-lisp/30.0.50-58a66af6/elpaca-0646d6fc-1256ece5.eln\")
>   comp-final1()
>   load-with-code-conversion(\"/tmp/emacs-int-comp-elpaca-0646d6fc-1256ece5-73Dpd0.el\" 
>   \"/tmp/emacs-int-comp-elpaca-0646d6fc-1256ece5-73Dpd0.el\" nil 
>   t)
>   command-line-1((\"-l\" 
>   \"/tmp/emacs-int-comp-elpaca-0646d6fc-1256ece5-73Dpd0.el\"))
>   command-line()
>   normal-top-level()
> 
> I would expect compiling this to not signal an error for a file I 
> have permission to write.

Is this in "emacs -Q"?  If not, please see if "emacs -Q" reproduces
the problem.

I also don't understand why the backtrace above seems to imply that
you invoked Emacs like this:

  emacs -l /tmp/emacs-int-comp-elpaca-0646d6fc-1256ece5-73Dpd0.el

IOW, the backtrace doesn't show invocation of
emacs-lisp-native-compile-and-load, it shows the attempt to load an
already-compiled .eln file.  What am I missing?  I added Andrea to
this discussion.

If, in "emacs -Q", you visit the source file, that is

  $HOME/.emacs.d/elpaca/builds/elpaca/elpaca.el

and then type

  M-: (native-compile buffer-file-name) RET

what file name do you see in the echo-area after the compilation
finishes?