Re: Broken /usr/bin/env (invalid option)

From: Krzysztof Kozlowski
Date: Wed Dec 09 2020 - 08:57:54 EST


On Wed, 9 Dec 2020 at 14:13, Dominique Martinet <asmadeus@xxxxxxxxxxxxx> wrote:
>
> Krzysztof Kozlowski wrote on Wed, Dec 09, 2020:
> > Your commit ece075366294 ("ld-version: use /usr/bin/env awk for
> > shebank") breaks current linux-next on Ubuntu 16.04:
> >
> > $ make defconfig
> >
> > make[1]: Entering directory '/mnt/data2/linux/linux-upstream/out'
> > GEN Makefile
> > *** Default configuration is based on 'multi_v7_defconfig'
> > /usr/bin/env: invalid option -- 'S'
> > Try '/usr/bin/env --help' for more information.
> > init/Kconfig:39: syntax error
> > init/Kconfig:38: invalid statement
> > ../scripts/kconfig/Makefile:80: recipe for target 'defconfig' failed
> > make[2]: *** [defconfig] Error 1
> > /mnt/data2/linux/linux-upstream/Makefile:602: recipe for target 'defconfig' failed
> > make[1]: *** [defconfig] Error 2
> > make[1]: Leaving directory '/mnt/data2/linux/linux-upstream/out'
> > Makefile:185: recipe for target '__sub-make' failed
> > make: *** [__sub-make] Error 2
> >
> > https://krzk.eu/#/builders/12/builds/1170/steps/4/logs/stdio
> >
> > It's not possible to build anything...
>
> Hm, what version of env is that?
> I only checked on a couple of systems that env -S exists, but it might
> not be available (e.g. now I'm looking, at least busybox env does not
> provide -S)

$ env --version
env (GNU coreutils) 8.25

> OTOH, we need -S to split arguments because the kernel splits the
> shebang as [binary, single argument], so without it awk wouldn't work.

None of the other scripts use 'env -S', maybe for the reason.

> Apparently gawk can work without an explicit -f is invoked as gawk (so
> could be used without -S), but that won't be much better wrt
> compatibility in my opinion.
>
>
> I don't see any way to make this work out of the box for me (awk not in
> /usr/bin) and you (env not supporting -S), but I guess I can keep that
> patch around locally...

You could add a wrapper which uses PATH or searches for the awk...
kind of reimplement other tools. Another solution is to clearly
document the requirements for the build system and explicitly say that
older systems like four-year Ubuntu are not supported.

Best regards,
Krzysztof