On Fri, Apr 24, 2020 at 1:05 AM Nicolas Pitre <nico@xxxxxxxxxxx> wrote: > > On Thu, 23 Apr 2020, Jani Nikula wrote: > > > On Thu, 23 Apr 2020, Nicolas Pitre <nico@xxxxxxxxxxx> wrote: > > > This might appear to be a strange concept, but sometimes we want > > > a dependency to be conditionally applied. One such case is currently > > > expressed with: > > > > > > depends on FOO || !FOO > > > > > > This pattern is strange enough to give one's pause. Given that it is > > > also frequent, let's make the intent more obvious with some syntaxic > > > sugar by effectively making dependencies optionally conditional. > > > > > > This also makes the kconfig language more uniform. > > > > Thanks, I prefer this over all the previous proposals. Versatile yet > > self-explanatory. > > > > > Signed-off-by: Nicolas Pitre <nico@xxxxxxxxxxx> > > > > > > diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst > > > index d0111dd264..0f841e0037 100644 > > > --- a/Documentation/kbuild/kconfig-language.rst > > > +++ b/Documentation/kbuild/kconfig-language.rst > > > @@ -114,7 +114,7 @@ applicable everywhere (see syntax). > > > This is a shorthand notation for a type definition plus a value. > > > Optionally dependencies for this default value can be added with "if". > > > > > > -- dependencies: "depends on" <expr> > > > +- dependencies: "depends on" <expr> ["if" <expr>] > > > > > > This defines a dependency for this menu entry. If multiple > > > dependencies are defined, they are connected with '&&'. Dependencies > > > @@ -130,6 +130,16 @@ applicable everywhere (see syntax). > > > bool "foo" > > > default y > > > > > > + The dependency definition itself may be conditional by appending "if" > > > + followed by an expression. If such expression is false (n) then this > > > + dependency is ignored. One possible use case is: > > > + > > > + config FOO > > > + tristate > > > + depends on BAZ if BAZ != n > > > > I presume this is the same as > > > > depends on BAZ if BAZ > > > > which makes me wonder if that should be the example. At least current > > usage for select is predominantly > > > > select FOO if BAR > > > > without "!= n". > > Yes, it is the same thing. I prefer making the documentation a little > more explicit than necessary so the explanation is really obvious. For the case of 'select', select FOO if BAR != n is NOT equivalent to: select FOO if BAR I do not think "if <expr>" in Kconfig is so easy to understand. I tend to hesitate to extend it. Sometimes, it means "the property is visible if <expr> != n". Sometimes, not. For the case of 'depends on', the 'depends on' is effective if <expr> != n because Nicolas implemented it in this way. We can do: depends on X || X = n instead of: depends on X || !X or depends on X if X I guess the source of the complaint is !X is difficult to understand when X is tristate. But, is there any confusion in 'X = n' ? I think not. -- Best Regards Masahiro Yamada