2020-11-28 18:01:18

by Scott Branden

[permalink] [raw]
Subject: [PATCH] menuconfig,mconf-cfg: Allow specification of ncurses location

From: Bruce Ashfield <[email protected]>

In some cross build environments such as the Yocto Project build
environment it provides an ncurses library that is compiled
differently than the host's version. This causes display corruption
problems when the host's curses includes are used instead of the
includes from the provided compiler are overridden. There is a second
case where there is no curses libraries at all on the host system and
menuconfig will just fail entirely.

The solution is simply to allow an override variable in
check-lxdialog.sh for environments such as the Yocto Project. Adding
a CROSS_CURSES_LIB and CROSS_CURSES_INC solves the issue and allowing
compiling and linking against the right headers and libraries.

Signed-off-by: Jason Wessel <[email protected]>
cc: Michal Marek <[email protected]>
cc: [email protected]
Signed-off-by: Bruce Ashfield <[email protected]>
Signed-off-by: Scott Branden <[email protected]>
---
scripts/kconfig/mconf-cfg.sh | 8 ++++++++
1 file changed, 8 insertions(+)
mode change 100755 => 100644 scripts/kconfig/mconf-cfg.sh

diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
old mode 100755
new mode 100644
index aa68ec95620d..32448bc198a5
--- a/scripts/kconfig/mconf-cfg.sh
+++ b/scripts/kconfig/mconf-cfg.sh
@@ -4,6 +4,14 @@
PKG="ncursesw"
PKG2="ncurses"

+if [ "$CROSS_CURSES_LIB" != "" ]; then
+ echo libs=\'$CROSS_CURSES_LIB\'
+ if [ x"$CROSS_CURSES_INC" != x ]; then
+ echo cflags=\'$CROSS_CURSES_INC\'
+ fi
+ exit 0
+fi
+
if [ -n "$(command -v pkg-config)" ]; then
if pkg-config --exists $PKG; then
echo cflags=\"$(pkg-config --cflags $PKG)\"
--
2.17.1


2020-12-01 12:30:35

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] menuconfig,mconf-cfg: Allow specification of ncurses location

On Sat, Nov 28, 2020 at 9:45 AM Scott Branden
<[email protected]> wrote:
>
> From: Bruce Ashfield <[email protected]>
>
> In some cross build environments such as the Yocto Project build
> environment it provides an ncurses library that is compiled
> differently than the host's version. This causes display corruption
> problems when the host's curses includes are used instead of the
> includes from the provided compiler are overridden. There is a second
> case where there is no curses libraries at all on the host system and
> menuconfig will just fail entirely.
>
> The solution is simply to allow an override variable in
> check-lxdialog.sh for environments such as the Yocto Project. Adding
> a CROSS_CURSES_LIB and CROSS_CURSES_INC solves the issue and allowing
> compiling and linking against the right headers and libraries.
>
> Signed-off-by: Jason Wessel <[email protected]>
> cc: Michal Marek <[email protected]>
> cc: [email protected]
> Signed-off-by: Bruce Ashfield <[email protected]>
> Signed-off-by: Scott Branden <[email protected]>
> ---


Some people solve the cross-compiling in Yocto
by using pkg-config.


For example,

commit 067c650c456e758f933aaf87a202f841d34be269
Author: Pavel Modilaynen <[email protected]>
Date: Fri Jul 12 13:52:19 2019 +0200

dtc: Use pkg-config to locate libyaml

Using Makefile's wildcard with absolute path to detect
the presence of libyaml results in false-positive
detection when cross-compiling e.g. in yocto environment.



mconf-cfg.sh already allows the path flexibility with pkg-config.
Why do you want yet another hook?








> scripts/kconfig/mconf-cfg.sh | 8 ++++++++
> 1 file changed, 8 insertions(+)
> mode change 100755 => 100644 scripts/kconfig/mconf-cfg.sh
>
> diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
> old mode 100755
> new mode 100644
> index aa68ec95620d..32448bc198a5
> --- a/scripts/kconfig/mconf-cfg.sh
> +++ b/scripts/kconfig/mconf-cfg.sh
> @@ -4,6 +4,14 @@
> PKG="ncursesw"
> PKG2="ncurses"
>
> +if [ "$CROSS_CURSES_LIB" != "" ]; then
> + echo libs=\'$CROSS_CURSES_LIB\'
> + if [ x"$CROSS_CURSES_INC" != x ]; then
> + echo cflags=\'$CROSS_CURSES_INC\'
> + fi
> + exit 0
> +fi
> +
> if [ -n "$(command -v pkg-config)" ]; then
> if pkg-config --exists $PKG; then
> echo cflags=\"$(pkg-config --cflags $PKG)\"
> --
> 2.17.1
>


--
Best Regards
Masahiro Yamada

2020-12-01 17:24:42

by Scott Branden

[permalink] [raw]
Subject: Re: [PATCH] menuconfig,mconf-cfg: Allow specification of ncurses location

Hi Masahiro,

On 2020-12-01 4:25 a.m., Masahiro Yamada wrote:
> On Sat, Nov 28, 2020 at 9:45 AM Scott Branden
> <[email protected]> wrote:
>> From: Bruce Ashfield <[email protected]>
>>
>> In some cross build environments such as the Yocto Project build
>> environment it provides an ncurses library that is compiled
>> differently than the host's version. This causes display corruption
>> problems when the host's curses includes are used instead of the
>> includes from the provided compiler are overridden. There is a second
>> case where there is no curses libraries at all on the host system and
>> menuconfig will just fail entirely.
>>
>> The solution is simply to allow an override variable in
>> check-lxdialog.sh for environments such as the Yocto Project. Adding
>> a CROSS_CURSES_LIB and CROSS_CURSES_INC solves the issue and allowing
>> compiling and linking against the right headers and libraries.
>>
>> Signed-off-by: Jason Wessel <[email protected]>
>> cc: Michal Marek <[email protected]>
>> cc: [email protected]
>> Signed-off-by: Bruce Ashfield <[email protected]>
>> Signed-off-by: Scott Branden <[email protected]>
>> ---
>
> Some people solve the cross-compiling in Yocto
> by using pkg-config.
>
>
> For example,
>
> commit 067c650c456e758f933aaf87a202f841d34be269
> Author: Pavel Modilaynen <[email protected]>
> Date: Fri Jul 12 13:52:19 2019 +0200
>
> dtc: Use pkg-config to locate libyaml
>
> Using Makefile's wildcard with absolute path to detect
> the presence of libyaml results in false-positive
> detection when cross-compiling e.g. in yocto environment.
>
>
>
> mconf-cfg.sh already allows the path flexibility with pkg-config.
> Why do you want yet another hook?
I hope the yocto community can provide more details on this patch.
The yocto environment isolates the build environment from the host tools.
Running menuconfig with the upstream kernel does not work on the latest yocto without this patch.
>> scripts/kconfig/mconf-cfg.sh | 8 ++++++++
>> 1 file changed, 8 insertions(+)
>> mode change 100755 => 100644 scripts/kconfig/mconf-cfg.sh
>>
>> diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
>> old mode 100755
>> new mode 100644
>> index aa68ec95620d..32448bc198a5
>> --- a/scripts/kconfig/mconf-cfg.sh
>> +++ b/scripts/kconfig/mconf-cfg.sh
>> @@ -4,6 +4,14 @@
>> PKG="ncursesw"
>> PKG2="ncurses"
>>
>> +if [ "$CROSS_CURSES_LIB" != "" ]; then
>> + echo libs=\'$CROSS_CURSES_LIB\'
>> + if [ x"$CROSS_CURSES_INC" != x ]; then
>> + echo cflags=\'$CROSS_CURSES_INC\'
>> + fi
>> + exit 0
>> +fi
>> +
>> if [ -n "$(command -v pkg-config)" ]; then
>> if pkg-config --exists $PKG; then
>> echo cflags=\"$(pkg-config --cflags $PKG)\"
>> --
>> 2.17.1
>>
>


Attachments:
smime.p7s (4.07 kB)
S/MIME Cryptographic Signature

2020-12-01 19:07:57

by Bruce Ashfield

[permalink] [raw]
Subject: Re: [PATCH] menuconfig,mconf-cfg: Allow specification of ncurses location

On Tue, Dec 1, 2020 at 12:19 PM Scott Branden
<[email protected]> wrote:
>
> Hi Masahiro,
>
> On 2020-12-01 4:25 a.m., Masahiro Yamada wrote:
> > On Sat, Nov 28, 2020 at 9:45 AM Scott Branden
> > <[email protected]> wrote:
> >> From: Bruce Ashfield <[email protected]>
> >>
> >> In some cross build environments such as the Yocto Project build
> >> environment it provides an ncurses library that is compiled
> >> differently than the host's version. This causes display corruption
> >> problems when the host's curses includes are used instead of the
> >> includes from the provided compiler are overridden. There is a second
> >> case where there is no curses libraries at all on the host system and
> >> menuconfig will just fail entirely.
> >>
> >> The solution is simply to allow an override variable in
> >> check-lxdialog.sh for environments such as the Yocto Project. Adding
> >> a CROSS_CURSES_LIB and CROSS_CURSES_INC solves the issue and allowing
> >> compiling and linking against the right headers and libraries.
> >>
> >> Signed-off-by: Jason Wessel <[email protected]>
> >> cc: Michal Marek <[email protected]>
> >> cc: [email protected]
> >> Signed-off-by: Bruce Ashfield <[email protected]>
> >> Signed-off-by: Scott Branden <[email protected]>
> >> ---
> >
> > Some people solve the cross-compiling in Yocto
> > by using pkg-config.
> >
> >
> > For example,
> >
> > commit 067c650c456e758f933aaf87a202f841d34be269
> > Author: Pavel Modilaynen <[email protected]>
> > Date: Fri Jul 12 13:52:19 2019 +0200
> >
> > dtc: Use pkg-config to locate libyaml
> >
> > Using Makefile's wildcard with absolute path to detect
> > the presence of libyaml results in false-positive
> > detection when cross-compiling e.g. in yocto environment.
> >
> >
> >
> > mconf-cfg.sh already allows the path flexibility with pkg-config.
> > Why do you want yet another hook?
> I hope the yocto community can provide more details on this patch.
> The yocto environment isolates the build environment from the host tools.
> Running menuconfig with the upstream kernel does not work on the latest yocto without this patch.

Sorry for not commenting on the origin patch, gmail buried it within
some other threads, but luckily this one popped up.

It is true that we've been carrying this for several years to deal with
the fact that the native sysroot is not searched by the pkg-config
called by mconf-cfg.sh (since it is separate from host and target
pkg-config).

As it turns out, in the past few weeks, we have come up with a way
to inject those native sysroot components into pkg-config without
the need for any changes to the scripts.

Scott: if you try again the the latest oe-core, and are still seeing
the problem with the mainline kernel, ping me, and we can see if
the pkg-config fix isn't holding for you, at that point, yes, we may
still need a hook like this to solve the problem.

Cheers,

Bruce



> >> scripts/kconfig/mconf-cfg.sh | 8 ++++++++
> >> 1 file changed, 8 insertions(+)
> >> mode change 100755 => 100644 scripts/kconfig/mconf-cfg.sh
> >>
> >> diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
> >> old mode 100755
> >> new mode 100644
> >> index aa68ec95620d..32448bc198a5
> >> --- a/scripts/kconfig/mconf-cfg.sh
> >> +++ b/scripts/kconfig/mconf-cfg.sh
> >> @@ -4,6 +4,14 @@
> >> PKG="ncursesw"
> >> PKG2="ncurses"
> >>
> >> +if [ "$CROSS_CURSES_LIB" != "" ]; then
> >> + echo libs=\'$CROSS_CURSES_LIB\'
> >> + if [ x"$CROSS_CURSES_INC" != x ]; then
> >> + echo cflags=\'$CROSS_CURSES_INC\'
> >> + fi
> >> + exit 0
> >> +fi
> >> +
> >> if [ -n "$(command -v pkg-config)" ]; then
> >> if pkg-config --exists $PKG; then
> >> echo cflags=\"$(pkg-config --cflags $PKG)\"
> >> --
> >> 2.17.1
> >>
> >
>


--
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II

2020-12-02 00:46:04

by Scott Branden

[permalink] [raw]
Subject: Re: [PATCH] menuconfig,mconf-cfg: Allow specification of ncurses location

Hi Bruce,

On 2020-12-01 11:01 a.m., Bruce Ashfield wrote:
> On Tue, Dec 1, 2020 at 12:19 PM Scott Branden
> <[email protected]> wrote:
>> Hi Masahiro,
>>
>> On 2020-12-01 4:25 a.m., Masahiro Yamada wrote:
>>> On Sat, Nov 28, 2020 at 9:45 AM Scott Branden
>>> <[email protected]> wrote:
>>>> From: Bruce Ashfield <[email protected]>
>>>>
>>>> In some cross build environments such as the Yocto Project build
>>>> environment it provides an ncurses library that is compiled
>>>> differently than the host's version. This causes display corruption
>>>> problems when the host's curses includes are used instead of the
>>>> includes from the provided compiler are overridden. There is a second
>>>> case where there is no curses libraries at all on the host system and
>>>> menuconfig will just fail entirely.
>>>>
>>>> The solution is simply to allow an override variable in
>>>> check-lxdialog.sh for environments such as the Yocto Project. Adding
>>>> a CROSS_CURSES_LIB and CROSS_CURSES_INC solves the issue and allowing
>>>> compiling and linking against the right headers and libraries.
>>>>
>>>> Signed-off-by: Jason Wessel <[email protected]>
>>>> cc: Michal Marek <[email protected]>
>>>> cc: [email protected]
>>>> Signed-off-by: Bruce Ashfield <[email protected]>
>>>> Signed-off-by: Scott Branden <[email protected]>
>>>> ---
>>> Some people solve the cross-compiling in Yocto
>>> by using pkg-config.
>>>
>>>
>>> For example,
>>>
>>> commit 067c650c456e758f933aaf87a202f841d34be269
>>> Author: Pavel Modilaynen <[email protected]>
>>> Date: Fri Jul 12 13:52:19 2019 +0200
>>>
>>> dtc: Use pkg-config to locate libyaml
>>>
>>> Using Makefile's wildcard with absolute path to detect
>>> the presence of libyaml results in false-positive
>>> detection when cross-compiling e.g. in yocto environment.
>>>
>>>
>>>
>>> mconf-cfg.sh already allows the path flexibility with pkg-config.
>>> Why do you want yet another hook?
>> I hope the yocto community can provide more details on this patch.
>> The yocto environment isolates the build environment from the host tools.
>> Running menuconfig with the upstream kernel does not work on the latest yocto without this patch.
> Sorry for not commenting on the origin patch, gmail buried it within
> some other threads, but luckily this one popped up.
>
> It is true that we've been carrying this for several years to deal with
> the fact that the native sysroot is not searched by the pkg-config
> called by mconf-cfg.sh (since it is separate from host and target
> pkg-config).
>
> As it turns out, in the past few weeks, we have come up with a way
> to inject those native sysroot components into pkg-config without
> the need for any changes to the scripts.
>
> Scott: if you try again the the latest oe-core, and are still seeing
> the problem with the mainline kernel, ping me, and we can see if
> the pkg-config fix isn't holding for you, at that point, yes, we may
> still need a hook like this to solve the problem.
Try reverting this kernel patch from linux-yocto and menuconfig will fail.

menuconfig actually did work with the upstream kernel until the yocto change below was introduced:
"cml1.bbclass: Handle ncurses-native being available via pkg-config"
https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?h=master-next&id=ce447d70df386ca55ce1672478b245851556374e

> Cheers,
>
> Bruce
>
>
>
>>>> scripts/kconfig/mconf-cfg.sh | 8 ++++++++
>>>> 1 file changed, 8 insertions(+)
>>>> mode change 100755 => 100644 scripts/kconfig/mconf-cfg.sh
>>>>
>>>> diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
>>>> old mode 100755
>>>> new mode 100644
>>>> index aa68ec95620d..32448bc198a5
>>>> --- a/scripts/kconfig/mconf-cfg.sh
>>>> +++ b/scripts/kconfig/mconf-cfg.sh
>>>> @@ -4,6 +4,14 @@
>>>> PKG="ncursesw"
>>>> PKG2="ncurses"
>>>>
>>>> +if [ "$CROSS_CURSES_LIB" != "" ]; then
>>>> + echo libs=\'$CROSS_CURSES_LIB\'
>>>> + if [ x"$CROSS_CURSES_INC" != x ]; then
>>>> + echo cflags=\'$CROSS_CURSES_INC\'
>>>> + fi
>>>> + exit 0
>>>> +fi
>>>> +
>>>> if [ -n "$(command -v pkg-config)" ]; then
>>>> if pkg-config --exists $PKG; then
>>>> echo cflags=\"$(pkg-config --cflags $PKG)\"
>>>> --
>>>> 2.17.1
>>>>
>


Attachments:
smime.p7s (4.07 kB)
S/MIME Cryptographic Signature