diff mbox series

menuconfig,mconf-cfg: Allow specification of ncurses location

Message ID 20201128004505.27619-1-scott.branden@broadcom.com (mailing list archive)
State New, archived
Headers show
Series menuconfig,mconf-cfg: Allow specification of ncurses location | expand

Commit Message

Scott Branden Nov. 28, 2020, 12:45 a.m. UTC
From: Bruce Ashfield <bruce.ashfield@windriver.com>

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 <jason.wessel@windriver.com>
cc: Michal Marek <mmarek@suse.cz>
cc: linux-kbuild@vger.kernel.org
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Scott Branden <scott.branden@broadcom.com>
---
 scripts/kconfig/mconf-cfg.sh | 8 ++++++++
 1 file changed, 8 insertions(+)
 mode change 100755 => 100644 scripts/kconfig/mconf-cfg.sh

Comments

Masahiro Yamada Dec. 1, 2020, 12:25 p.m. UTC | #1
On Sat, Nov 28, 2020 at 9:45 AM Scott Branden
<scott.branden@broadcom.com> wrote:
>
> From: Bruce Ashfield <bruce.ashfield@windriver.com>
>
> 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 <jason.wessel@windriver.com>
> cc: Michal Marek <mmarek@suse.cz>
> cc: linux-kbuild@vger.kernel.org
> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
> Signed-off-by: Scott Branden <scott.branden@broadcom.com>
> ---


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


For example,

commit 067c650c456e758f933aaf87a202f841d34be269
Author: Pavel Modilaynen <pavel.modilaynen@axis.com>
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
>
Scott Branden Dec. 1, 2020, 5:19 p.m. UTC | #2
Hi Masahiro,

On 2020-12-01 4:25 a.m., Masahiro Yamada wrote:
> On Sat, Nov 28, 2020 at 9:45 AM Scott Branden
> <scott.branden@broadcom.com> wrote:
>> From: Bruce Ashfield <bruce.ashfield@windriver.com>
>>
>> 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 <jason.wessel@windriver.com>
>> cc: Michal Marek <mmarek@suse.cz>
>> cc: linux-kbuild@vger.kernel.org
>> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
>> Signed-off-by: Scott Branden <scott.branden@broadcom.com>
>> ---
>
> Some people solve the cross-compiling in Yocto
> by using pkg-config.
>
>
> For example,
>
> commit 067c650c456e758f933aaf87a202f841d34be269
> Author: Pavel Modilaynen <pavel.modilaynen@axis.com>
> 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
>>
>
Bruce Ashfield Dec. 1, 2020, 7:01 p.m. UTC | #3
On Tue, Dec 1, 2020 at 12:19 PM Scott Branden
<scott.branden@broadcom.com> 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
> > <scott.branden@broadcom.com> wrote:
> >> From: Bruce Ashfield <bruce.ashfield@windriver.com>
> >>
> >> 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 <jason.wessel@windriver.com>
> >> cc: Michal Marek <mmarek@suse.cz>
> >> cc: linux-kbuild@vger.kernel.org
> >> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
> >> Signed-off-by: Scott Branden <scott.branden@broadcom.com>
> >> ---
> >
> > Some people solve the cross-compiling in Yocto
> > by using pkg-config.
> >
> >
> > For example,
> >
> > commit 067c650c456e758f933aaf87a202f841d34be269
> > Author: Pavel Modilaynen <pavel.modilaynen@axis.com>
> > 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
> >>
> >
>
Scott Branden Dec. 2, 2020, 12:42 a.m. UTC | #4
Hi Bruce,

On 2020-12-01 11:01 a.m., Bruce Ashfield wrote:
> On Tue, Dec 1, 2020 at 12:19 PM Scott Branden
> <scott.branden@broadcom.com> 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
>>> <scott.branden@broadcom.com> wrote:
>>>> From: Bruce Ashfield <bruce.ashfield@windriver.com>
>>>>
>>>> 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 <jason.wessel@windriver.com>
>>>> cc: Michal Marek <mmarek@suse.cz>
>>>> cc: linux-kbuild@vger.kernel.org
>>>> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
>>>> Signed-off-by: Scott Branden <scott.branden@broadcom.com>
>>>> ---
>>> Some people solve the cross-compiling in Yocto
>>> by using pkg-config.
>>>
>>>
>>> For example,
>>>
>>> commit 067c650c456e758f933aaf87a202f841d34be269
>>> Author: Pavel Modilaynen <pavel.modilaynen@axis.com>
>>> 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
>>>>
>
diff mbox series

Patch

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)\"