Re: [v2] kbuild: Port silent mode detection to future gnu make.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 30, 2022 at 2:10 AM Dmitry Goncharov
<dgoncharov@xxxxxxxxxxxx> wrote:
>
> Port silent mode detection to the future (post make-4.4) versions of gnu make.
>
> Makefile contains the following piece of make code to detect if option -s is
> specified on the command line.
>
> ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
>
>
> This code is executed by make at parse time and assumes that MAKEFLAGS
> does not contain command line variable definitions.
> Currently if the user defines a=s on the command line, then at build only
> time MAKEFLAGS contains " -- a=s".
> However, starting with commit dc2d963989b96161472b2cd38cef5d1f4851ea34
> MAKEFLAGS contains command line definitions at both parse time and
> build time.
>
> This '-s' detection code then confuses a command line variable
> definition which contains letter 's' with option -s.
>
> E.g.
> $ # old make
> $ make net/wireless/ocb.o a=s
>   CALL    scripts/checksyscalls.sh
>   DESCEND objtool
> $ # this a new make which defines makeflags at parse time
> $ ~/src/gmake/make/l64/make net/wireless/ocb.o a=s
> $
>
> We can see here that the letter 's' from 'a=s' was confused with -s.
>
> This patch checks for presence of -s using a method recommended by the
> make manual here
> https://www.gnu.org/software/make/manual/make.html#Testing-Flags.




The GNU Make manual is written with the latest Make version in mind.


"Recall that MAKEFLAGS will put all single-letter options (such as ‘-t’)
into the first word, and that word will be empty if no single-letter
options were given."

This statement is not true for GNU Make 3.82, which the kbuild supports.




$ git show 6f0fa58
commit 6f0fa58e459642b16901521cc58ac474b787ec5b
Author: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>
Date:   Fri May 19 20:42:30 2017 +0900

    kbuild: simplify silent build (-s) detection


[snip]

    Test cases:

    [1] command line input:    make --silent
         -> MAKEFLAGS for Make 3.8x:    s
         -> MAKEFLAGS for Make 4.x :    s

    [2] command line input:    make -srR
         -> MAKEFLAGS for Make 3.8x:    sRr
         -> MAKEFLAGS for Make 4.x :    rRs

    [3] command line input:    make -s -rR --warn-undefined-variables
         -> MAKEFLAGS for Make 3.8x:    --warn-undefined-variables -sRr
         -> MAKEFLAGS for Make 4.x :    rRs --warn-undefined-variables








As this commit description says, Make 3.8x puts long
options before the collection of single letter options.

So, this patch does not work for Make 3.82.





-- 
Best Regards
Masahiro Yamada




[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux