Re: [PATCH v2 5/5] kconfig: refactor ncurses package checks for building nconf
From: Masahiro Yamada
Date: Mon May 21 2018 - 02:04:51 EST
Randy,
2018-05-21 15:24 GMT+09:00 Randy Dunlap <rdunlap@xxxxxxxxxxxxx>:
> On 05/20/2018 09:58 PM, Masahiro Yamada wrote:
>> 2018-05-21 13:51 GMT+09:00 Randy Dunlap <rdunlap@xxxxxxxxxxxxx>:
>>> On 05/20/2018 09:48 PM, Masahiro Yamada wrote:
>>>> 2018-05-21 8:41 GMT+09:00 Randy Dunlap <rdunlap@xxxxxxxxxxxxx>:
>>>>> On 05/20/2018 01:16 AM, Masahiro Yamada wrote:
>>>>>> Building nconf requires ncurses, but its presence is not checked.
>>>>>> Check and configure necessary packages by a shell script like the
>>>>>> other GUI frontends.
>>>>>>
>>>>>> Signed-off-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>
>>>>>> ---
>>>>>>
>>>>>
>>>>>> diff --git a/scripts/kconfig/nconf-cfg.sh b/scripts/kconfig/nconf-cfg.sh
>>>>>> new file mode 100644
>>>>>> index 0000000..8eb7948
>>>>>> --- /dev/null
>>>>>> +++ b/scripts/kconfig/nconf-cfg.sh
>>>>>> @@ -0,0 +1,34 @@
>>>>>> +#!/bin/sh
>>>>>> +# SPDX-License-Identifier: GPL-2.0
>>>>>> +
>>>>>> +PKG="ncursesw menuw panelw"
>>>>>> +PKG2="ncurses menu panel"
>>>>>> +
>>>>>> +if pkg-config --exists $PKG; then
>>>>>> + echo libs=\"$(pkg-config --libs $PKG)\"
>>>>>> + exit 0
>>>>>> +fi
>>>>>> +
>>>>>> +if pkg-config --exists $PKG2; then
>>>>>> + echo libs=\"$(pkg-config --libs $PKG2)\"
>>>>>> + exit 0
>>>>>> +fi
>>>>>> +
>>>>>
>>>>> I guess this one needs clags, especially -I, like the mconf patch contains...
>>>>
>>>>
>>>>
>>>> I thought so.
>>>>
>>>> But, the current scripts/kconfig/Makefile
>>>> adds 'pkg-config --libs' to nconf,
>>>> but does nothing about 'pkg-config --cflags' for nconf.
>>>> Therefore, I kept the current behavior just in case.
>>>>
>>>>
>>>> The nconfig in the current version is not working for you, right?
>>>
>>> That's correct.
>>>
>>>
>>> Info:
>>>
>>> $ make ARCH=x86_64 O=xx64 nconfig
>>> make[1]: Entering directory '/home/rdunlap/lnx/next/linux-next-20180517/xx64'
>>> GEN ./Makefile
>>> UPD scripts/kconfig/.nconf-cfg
>>> HOSTCC scripts/kconfig/nconf.o
>>> In file included from ../scripts/kconfig/nconf.c:15:0:
>>> ../scripts/kconfig/nconf.h:19:18: fatal error: menu.h: No such file or directory
>>> #include <menu.h>
>>> ^
>>> compilation terminated.
>>> scripts/Makefile.host:107: recipe for target 'scripts/kconfig/nconf.o' failed
>>> make[2]: *** [scripts/kconfig/nconf.o] Error 1
>>> /home/rdunlap/lnx/next/linux-next-20180517/Makefile:525: recipe for target 'nconfig' failed
>>> make[1]: *** [nconfig] Error 2
>>> make[1]: Leaving directory '/home/rdunlap/lnx/next/linux-next-20180517/xx64'
>>> Makefile:146: recipe for target 'sub-make' failed
>>> make: *** [sub-make] Error 2
>>>
>>>
>>> xx64/scripts/kconfig/.nconf-cfg contains:
>>> libs="-lncursesw -lmenuw -lpanelw"
>>>
>>
>> Sorry, I mean
>> the nconfig in the Linus tree is not working, right?
>
> It works just fine. In a new linux-4.17-rc6 tree:
>
> $ make ARCH=x86_64 O=xx64 V=1 nconfig
> make -C /home/rdunlap/lnx/lnx-417-rc6/xx64 KBUILD_SRC=/home/rdunlap/lnx/lnx-417-rc6 \
> -f /home/rdunlap/lnx/lnx-417-rc6/Makefile nconfig
> make[1]: Entering directory '/home/rdunlap/lnx/lnx-417-rc6/xx64'
> make -f ../scripts/Makefile.build obj=scripts/basic
> rm -f .tmp_quiet_recordmcount
> ln -fsn .. source
> /bin/sh ../scripts/mkmakefile \
> .. . 4 17
> GEN ./Makefile
> make -f ../scripts/Makefile.build obj=scripts/kconfig nconfig
> gcc -Wp,-MD,scripts/kconfig/.nconf.o.d -Iscripts/kconfig -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 -I/usr/include/ncursesw -DCURSES_LOC="<curses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE -c -o scripts/kconfig/nconf.o ../scripts/kconfig/nconf.c
> gcc -Wp,-MD,scripts/kconfig/.nconf.gui.o.d -Iscripts/kconfig -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 -I/usr/include/ncursesw -DCURSES_LOC="<curses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE -c -o scripts/kconfig/nconf.gui.o ../scripts/kconfig/nconf.gui.c
> gcc -o scripts/kconfig/nconf scripts/kconfig/nconf.o scripts/kconfig/zconf.tab.o scripts/kconfig/nconf.gui.o -lmenu -lpanel -lncurses
> scripts/kconfig/nconf Kconfig
> make[1]: Leaving directory '/home/rdunlap/lnx/lnx-417-rc6/xx64'
>
Ah, I see.
The output from check-lxdialog.sh is passed
to all objects:
# lxdialog stuff
check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
# Use recursively expanded variables so we do not call gcc unless
# we really need to do so. (Do not call gcc as part of make mrproper)
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
-DLOCALE
In fact, the ncurses options are passed even to the text-based
scripts/kconfig/conf.
masahiro@pug:~/ref/linux$ make V=1 oldconfig
make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig oldconfig
gcc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wmissing-prototypes
-Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
-D_GNU_SOURCE -I/usr/include/ncursesw -DCURSES_LOC="<ncurses.h>"
-DNCURSES_WIDECHAR=1 -DLOCALE -c -o scripts/kconfig/conf.o
scripts/kconfig/conf.c
bison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.y
flex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.l
gcc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall
-Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
-std=gnu89 -D_GNU_SOURCE -I/usr/include/ncursesw
-DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE
-Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o
scripts/kconfig/zconf.tab.c
gcc -o scripts/kconfig/conf scripts/kconfig/conf.o
scripts/kconfig/zconf.tab.o
scripts/kconfig/conf --oldconfig Kconfig
I am fixing it, but forgot to mention that in my commit log.
Thanks!
--
Best Regards
Masahiro Yamada