> From: Paul Smith <psm...@gnu.org>
> Date: Mon, 30 Jul 2018 06:47:38 -0400
> 
> I can't find a way to exercise this code path.
> 
> If the command being invoked doesn't have the executable bit set (e.g.,
> I use "touch ./foo" with the above) then exec() fails with errno set to
> EPERM not ENOEXEC, and if I make the script executable but without a #!
> line at the top then exec() runs it in a shell without returning
> ENOEXEC.
> 
> The GNU/Linux man page doesn't appear to allow this (a script that
> doesn't start with #!) or at least doesn't document it as valid, but it
> does work.  It lists ENOEXEC errno code as meaning:
> 
>   ENOEXEC
>          An  executable  is  not in a recognized format, is for the wrong
>          architecture, or has some other format error that means it  can‐
>          not be executed.
> 
> Which doesn't sound like something that would be helped by re-running
> as a shell script.  Maybe this is a feature of GNU/Linux and other
> systems use ENOEXEC when there's no #! line?

But in GNU Make, SHELL can be set to anything, including a command
that runs some executables which the Unix kernel and the Unix shell
don't recognize.  Maybe that code tries to cater to this situation?
AFAIU, such a situation will not be resolved by execvp's fallback to
the shell, because I presume execvp will call the standard shell,
right?

_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to