On Mon, 2018-07-30 at 13:16 +0200, Andreas Schwab wrote:
> On Jul 30 2018, Paul Smith <psm...@gnu.org> wrote:
> > 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?
> 
> http://pubs.opengroup.org/onlinepubs/9699919799/functions/execve.html
> 
>     There are two distinct ways in which the contents of the process
>     image file may cause the execution to fail, distinguished by the
>     setting of errno to either [ENOEXEC] or [EINVAL] (see the ERRORS
>     section). In the cases where the other members of the exec family of
>     functions would fail and set errno to [ENOEXEC], the execlp() and
>     execvp() functions shall execute a command interpreter and the
>     environment of the executed command shall be as if the process
>     invoked the sh utility using execl() as follows:
> 
>     execl(<shell path>, arg0, file, arg1, ..., (char *)0);

Aha.  GNU make is using execvp() so that explains that.  Maybe the
original code was using a different form of exec().

So it sounds like this code in GNU make is redundant, assuming a POSIX-
compliant implementation of execvp().

I wasn't able to find any similar text in the posix_spawn() document
although posix_spawnp() does appear to behave the same way as execvp()
on GNU/Linux (not surprising since I believe posix_spawn() is
implemented in terms of fork/exec there).

Thanks Andreas!

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

Reply via email to