2013-03-01 15:50:52

by justin

[permalink] [raw]
Subject: ncurses detection for nconfig/menuconfig patches revised


Hello,

After the discussion I modified the patches to respect following things

1. Don't remove the legacy detection
2. use helpers in following order:
pkg-config, ncurses5-config, ncurses6-config, old heuristic
3. only support the wide char implementation for menuconfig


Regards,
justin


2013-03-01 15:50:51

by justin

[permalink] [raw]
Subject: [PATCH 2/2] kconfig: use config scripts to detect ncurses libs

From: Justin Lecher <[email protected]>

When building ncurses with --with-termlib several symbols get moved from
libncurses.so to libtinfo.so. Thus when linking with libncurses.so, one
additionally needs to link with libtinfo.so. Ncurses provides a config script
(ncurses5-config) or in very recent version even a pkg-config module to assist
finding ncurses.

This patch makes use of it to detect the necessary libs for linking of the
ncurses nconfig dialog

Signed-off-by: Justin Lecher <[email protected]>
---
scripts/kconfig/Makefile | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 231b475..cc81db5 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -219,7 +219,11 @@ HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \

HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))

-HOSTLOADLIBES_nconf = -lmenu -lpanel -lncurses
+HOSTLOADLIBES_nconf = -lmenu -lpanel
+HOSTLOADLIBES_nconf += $(shell \
+ pkg-config --libs ncurses 2>/dev/null \
+ || ncurses5-config --libs 2>/dev/null \
+ || ncurses6-config --libs 2>/dev/null )
$(obj)/qconf.o: $(obj)/.tmp_qtcheck

ifeq ($(qconf-target),1)
--
1.8.1.4

2013-03-01 15:50:50

by justin

[permalink] [raw]
Subject: [PATCH 1/2] menuconfig: use config scripts to detect ncurses libs

From: Justin Lecher <[email protected]>

When building ncurses with --with-termlib several symbols get moved from
libncurses.so to libtinfo.so. Thus when linking with libncurses.so, one
additionally needs to link with libtinfo.so. Ncurses provides a config script
(ncurses5-config) or in very recent version even a pkg-config module to assist
finding ncurses.

The old heuristic for detection of ncurses libs will be extended to the
pkg-config and the config scripts.

Signed-off-by: Justin Lecher <[email protected]>
---
scripts/kconfig/lxdialog/check-lxdialog.sh | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
index 8078813..8086874 100644
--- a/scripts/kconfig/lxdialog/check-lxdialog.sh
+++ b/scripts/kconfig/lxdialog/check-lxdialog.sh
@@ -4,6 +4,12 @@
# What library to link
ldflags()
{
+ pkg-config --libs ncursesw 2>/dev/null && exit
+ pkg-config --libs ncurses 2>/dev/null && exit
+ ncursesw5-config --libs 2>/dev/null && exit
+ ncurses5-config --libs 2>/dev/null && exit
+ ncursesw6-config --libs 2>/dev/null && exit
+ ncurses6-config --libs 2>/dev/null && exit
for ext in so a dll.a dylib ; do
for lib in ncursesw ncurses curses ; do
$cc -print-file-name=lib${lib}.${ext} | grep -q /
--
1.8.1.4

2013-03-03 20:23:40

by Yann E. MORIN

[permalink] [raw]
Subject: Re: [PATCH 2/2] kconfig: use config scripts to detect ncurses libs

Sven, Justin, All,

Sorry for the delay...

On Thursday 28 February 2013 Sven Joachim wrote:
> On 2013-02-28 10:59 +0100, [email protected] wrote:
>
> > Ncurses provides a config script (ncurses5-config) to assist finding ncurses.
> > This patch makes use of it to detect the necessary libs for linking of the
> > ncurses nconfig dialog.
>
> That script is not necessarily called ncurses5-config, it might also be
> called ncurses6-config is ncurses is configured for a different ABI
> (--enable-ext-colors, --enable-ext-mouse). Although I would suspect
> that any distribution who does that provides a compatibility symlink.

Cygwin does provide nurses{,w}{5,6}-config.

> > scripts/kconfig/Makefile | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
> > index 3091794..c372976 100644
> > --- a/scripts/kconfig/Makefile
> > +++ b/scripts/kconfig/Makefile
> > @@ -216,7 +216,9 @@ HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
> >
> > HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
> >
> > -HOSTLOADLIBES_nconf = -lmenu -lpanel -lncurses
> > +HOSTLOADLIBES_nconf = -lmenu -lpanel
> > +HOSTLOADLIBES_nconf += $(shell ncursesw5-config --libs 2>/dev/null \
> > + || ncurses5-config --libs 2>/dev/null )
>
> This will link with ncursesw, not ncurses. Probably not what you want,
> since nconf.h does not #include the right headers for that.
>
> On Debian/Ubuntu, there's also the problem that ncursesw5-config exists
> even if the libncursesw5-dev package is not installed, so this patch
> makes the build fail in such cases.

The same goes for ncurses5-config, which is provided by ncurses-bin, and
so is present even if the devel package is not installed, and the build
will break, too.

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. |
'------------------------------^-------^------------------^--------------------'

2013-03-03 20:36:32

by Yann E. MORIN

[permalink] [raw]
Subject: Re: [PATCH 1/2] menuconfig: use config scripts to detect ncurses libs

Justin, All,

On Friday 01 March 2013 [email protected] wrote:
> When building ncurses with --with-termlib several symbols get moved from
> libncurses.so to libtinfo.so. Thus when linking with libncurses.so, one
> additionally needs to link with libtinfo.so. Ncurses provides a config script
> (ncurses5-config) or in very recent version even a pkg-config module to assist
> finding ncurses.
>
> The old heuristic for detection of ncurses libs will be extended to the
> pkg-config and the config scripts.
>
> Signed-off-by: Justin Lecher <[email protected]>
> ---
> scripts/kconfig/lxdialog/check-lxdialog.sh | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
> index 8078813..8086874 100644
> --- a/scripts/kconfig/lxdialog/check-lxdialog.sh
> +++ b/scripts/kconfig/lxdialog/check-lxdialog.sh
> @@ -4,6 +4,12 @@
> # What library to link
> ldflags()
> {
> + pkg-config --libs ncursesw 2>/dev/null && exit
> + pkg-config --libs ncurses 2>/dev/null && exit
> + ncursesw5-config --libs 2>/dev/null && exit
> + ncurses5-config --libs 2>/dev/null && exit
> + ncursesw6-config --libs 2>/dev/null && exit
> + ncurses6-config --libs 2>/dev/null && exit

In the light of the different mails on the subject, it appears that the
ncurses*-config script are unreliable: at least one major distribution
(Debian) is broken and, for various reasons, is not gonna fix it, and
all its derivatives (eg. Ubuntu) do suffer from the same deficiency.

I think we should stick to:
- try with pkg-config;
- fallback to the legacy heuristic.

Does using pkg-config fix your use-case?

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. |
'------------------------------^-------^------------------^--------------------'

2013-03-03 20:38:34

by Yann E. MORIN

[permalink] [raw]
Subject: Re: [PATCH 2/2] kconfig: use config scripts to detect ncurses libs

Justin, All,

On Friday 01 March 2013 [email protected] wrote:
> When building ncurses with --with-termlib several symbols get moved from
> libncurses.so to libtinfo.so. Thus when linking with libncurses.so, one
> additionally needs to link with libtinfo.so. Ncurses provides a config script
> (ncurses5-config) or in very recent version even a pkg-config module to assist
> finding ncurses.
>
> This patch makes use of it to detect the necessary libs for linking of the
> ncurses nconfig dialog
>
> Signed-off-by: Justin Lecher <[email protected]>
> ---
> scripts/kconfig/Makefile | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
> index 231b475..cc81db5 100644
> --- a/scripts/kconfig/Makefile
> +++ b/scripts/kconfig/Makefile
> @@ -219,7 +219,11 @@ HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
>
> HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
>
> -HOSTLOADLIBES_nconf = -lmenu -lpanel -lncurses
> +HOSTLOADLIBES_nconf = -lmenu -lpanel
> +HOSTLOADLIBES_nconf += $(shell \
> + pkg-config --libs ncurses 2>/dev/null \
> + || ncurses5-config --libs 2>/dev/null \
> + || ncurses6-config --libs 2>/dev/null )

Ditto as for menuconfig: drop the ncurses*-config scripts, and:
- try pkg-config;
- fallback to -lncurses.

HOSTLOADLIBES_nconf += $(shell \
pkg-config --libs ncurses 2>/dev/null \
|| echo -lncurses )

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. |
'------------------------------^-------^------------------^--------------------'

2013-03-03 21:20:56

by justin

[permalink] [raw]
Subject: Re: [PATCH 1/2] menuconfig: use config scripts to detect ncurses libs

On 03.03.2013 21:36, Yann E. MORIN wrote:
Hello,
>
> In the light of the different mails on the subject, it appears that the
> ncurses*-config script are unreliable: at least one major distribution
> (Debian) is broken and, for various reasons, is not gonna fix it, and
> all its derivatives (eg. Ubuntu) do suffer from the same deficiency.

Indeed the config scripts come without the necessary build time deps.
But it ends in the same situation as current version of the Makefile.
The user will be asked to install the devel package.
So I don't see any problem here.

>
> I think we should stick to:
> - try with pkg-config;
> - fallback to the legacy heuristic.
>
> Does using pkg-config fix your use-case?

It does, nevertheless I would prefer to include the ncurses*-config
script as well to cover most situation we will find on users system.

Justin


Attachments:
signature.asc (263.00 B)
OpenPGP digital signature

2013-03-03 21:42:26

by Sven Joachim

[permalink] [raw]
Subject: Re: [PATCH 2/2] kconfig: use config scripts to detect ncurses libs

On 2013-03-03 21:23 +0100, Yann E. MORIN wrote:

> On Thursday 28 February 2013 Sven Joachim wrote:
>> On 2013-02-28 10:59 +0100, [email protected] wrote:
>
>> > scripts/kconfig/Makefile | 4 +++-
>> > 1 file changed, 3 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
>> > index 3091794..c372976 100644
>> > --- a/scripts/kconfig/Makefile
>> > +++ b/scripts/kconfig/Makefile
>> > @@ -216,7 +216,9 @@ HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
>> >
>> > HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
>> >
>> > -HOSTLOADLIBES_nconf = -lmenu -lpanel -lncurses
>> > +HOSTLOADLIBES_nconf = -lmenu -lpanel
>> > +HOSTLOADLIBES_nconf += $(shell ncursesw5-config --libs 2>/dev/null \
>> > + || ncurses5-config --libs 2>/dev/null )
>>
>> This will link with ncursesw, not ncurses. Probably not what you want,
>> since nconf.h does not #include the right headers for that.
>>
>> On Debian/Ubuntu, there's also the problem that ncursesw5-config exists
>> even if the libncursesw5-dev package is not installed, so this patch
>> makes the build fail in such cases.
>
> The same goes for ncurses5-config, which is provided by ncurses-bin, and
> so is present even if the devel package is not installed, and the build
> will break, too.

This is not the same: if libncurses5-dev is not installed, the build is
going to fail anyway, since there is no -lmenu or -lpanel then.

I second the proposal to try pkg-config and fall back to -lncurses, BTW.

Cheers,
Sven