Subject: Re: linux-next: build failure after merge of the kbuild tree

From: Kris Van Hees <[email-masked]>
Date: Wed, 11 Sep 2024 09:20:52 -0400

On Wed, Sep 11, 2024 at 06:38:19PM +0900, Masahiro Yamada wrote:
> On Wed, Sep 11, 2024 at 9:18???AM Stephen Rothwell <[email-masked]> wrote:
> >
> > Hi all,
> >
> > After merging the kbuild tree, today's linux-next build (x86_64
> > allmodconfig) failed like this:
> >
> > make[3]: *** Deleting file 'modules.builtin.ranges'
> > /bin/sh: 1: scripts/generate_builtin_ranges.awk: not found
> > make[3]: *** [scripts/Makefile.vmlinux:47: modules.builtin.ranges] Error 127
> > make[2]: *** [Makefile:1157: vmlinux] Error 2
> > make[2]: *** Waiting for unfinished jobs....
> > make[1]: *** [Makefile:224: __sub-make] Error 2
> > make: *** [Makefile:224: __sub-make] Error 2
> > Command exited with non-zero status 2
> >
> > Caused by commit
> >
> >   04b15cdd611a ("kbuild: generate offset range data for builtin modules")
> >
> > I do not have gawk installed - I do have mawk installed (as awk).  Does
> > this script actually need gawk, or will just plain awk suffice?

The scripts does need gawk because other flavours like mawk do not have the
features that the scripts depend on.

> >
> > I have installed gawk.
> >
> 
> 
> This is what I was worried about.
> 
> As Documentation/process/changes.rst was modified in that commit,
> it specifically requires GNU AWK.
> 
> Anyway, you were able to fix the build error
> by installing /usr/bin/gawk.
> 
> If a distro installs gawk somewhere else,
> (/usr/local/bin/gawk, for example), it is a problem.
> The shebang "#!/usr/bin/gawk -f" will not work.
> "#!/usr/bin/env gawk -f" will not work either.
> 
> More people may start complaining about it.

For the generator script, passing it as a script explicitly to gawk would
work because then the regular PATH search will apply, i.e.

	gawk -f scripts/generate_builtin_ranges.awk <args>

The scripts/verify_builtin_ranges.awk script can be invoked the same way,
or simply as an executable script if gawk is installed in the standard place.

Other utilities that are executed during the kernel build seem to depend
on being found using the PATH, so perhaps changing the recipe in the makefile
to use gawk -f <script> <args> would be an acceptable solution?

	Kris