Re: linux-next: Tree for May 1 (media/usb/stk1160)

Yann E. MORIN
2013-05-01T20:54:01Z

Randy, All,

On Wed, May 01, 2013 at 01:23:25PM -0700, Randy Dunlap wrote:
> On 05/01/13 12:58, David Rientjes wrote:
> > On Wed, 1 May 2013, Yann E. MORIN wrote:
> >
> >>> When CONFIG_SND=m and CONFIG_SND_AC97_CODEC=m and
> >>> CONFIG_VIDEO_STK1160=y
> >>> CONFIG_VIDEO_STK1160_AC97=y
> >>>
> >>> drivers/built-in.o: In function `stk1160_ac97_register':
> >>> (.text+0x122706): undefined reference to `snd_card_create'
> >>> drivers/built-in.o: In function `stk1160_ac97_register':
> >>> (.text+0x1227b2): undefined reference to `snd_ac97_bus'
> >>> drivers/built-in.o: In function `stk1160_ac97_register':
> >>> (.text+0x1227cd): undefined reference to `snd_card_free'
> >>> drivers/built-in.o: In function `stk1160_ac97_register':
> >>> (.text+0x12281b): undefined reference to `snd_ac97_mixer'
> >>> drivers/built-in.o: In function `stk1160_ac97_register':
> >>> (.text+0x122832): undefined reference to `snd_card_register'
> >>> drivers/built-in.o: In function `stk1160_ac97_unregister':
> >>> (.text+0x12285e): undefined reference to `snd_card_free'
> >>>
> >>>
> >>> This kconfig fragment:
> >>> config VIDEO_STK1160_AC97
> >>> bool "STK1160 AC97 codec support"
> >>> depends on VIDEO_STK1160 && SND

BTW, can you check that:
make silentoldconfig
does not warn about unmet dependencies for those symbols?

> > This doesn't depend on SND, it depends on SND=y.
>
> Maybe this option *should* depend on SND=y, but that's not what the
> kconfig syntax says.

I'd say Documentation/kbuild/kconfig-language.txt is not complete wrt
the current syntax, grammar and semantics of the language. :-(

> The kconfig language does not care if the variable is
> a bool or a tristate when evaluating a depends expression AFAICT (but I am
> only reading Documentation/kbuild/kconfig-language.txt, not the source code).

Yes, it does, I've just tried with the following snippet:

config MODULES
bool "modules"

config A
tristate "A"

config B
tristate "B"
depends on A

config C
tristate "C"

config D
bool "D"
depends on C
select B

config E
bool "E"
depends on C=y
select B

As you can test, E will not be visible if C is not =y, while D will be
visible if C is =m or =y.

Also, if A=m (and C=n), then B can only be =n or =m.

But with the test-case above, if C=y and ( D=y or E=y ), then B will be
forced to =y, even though A might be unset, which means silentoldconfig
would warn abount unmet dependencies:
warning: (D && E) selects B which has unmet direct dependencies (A)

Worse! With: A=m, C=y, D=y -> B is forced to =y, which is wrong because
it can only be =n or =m (see above), but silentoldconfig will not warn
about this situation.

Sigh... :-(

Regards,
Yann E. MORIN.

--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'