make localmodconfig doesn't work for thunderbolt

From: Jiri Slaby
Date: Wed May 10 2023 - 07:01:10 EST


if I use localmodconfig for example like this:
mkdir /tmp/tb/
echo thunderbolt >/tmp/tb/lsmod
make O=/tmp/tb LSMOD=/tmp/tb/lsmod localmodconfig

I get:
using config: '.config'
thunderbolt config not found!!

$ grep 'USB4\>' /tmp/tb/.config
# CONFIG_USB4 is not set

I believe it's due to:
obj-${CONFIG_USB4} := thunderbolt.o
in drivers/thunderbolt/Makefile. I.e. ${} used instead of more common $().

But even if I change the parser:

--- a/scripts/kconfig/
+++ b/scripts/kconfig/
@@ -317,7 +317,7 @@ foreach my $makefile (@makefiles) {
$_ = convert_vars($_, %make_vars);

# collect objects after obj-$(CONFIG_FOO_BAR)
- if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
+ if (/obj-\$[({](CONFIG_[^})]*)[)}]\s*[+:]?=\s*(.*)/) {
$var = $1;
$objs = $2;

I see:
module thunderbolt did not have configs CONFIG_USB4

$ grep 'USB4\>' /tmp/tb/.config
# CONFIG_USB4 is not set

So two questions:
1) is ${} supported and should be the above change sent as a patch? Or should be drivers/thunderbolt/Makefile fixed to use $(). (And maybe other Makefiles too.)

2) how to fix that 'thunderbolt did not have configs'?

suse labs