2013-03-06 13:02:14

by justin

[permalink] [raw]
Subject: Final versions of ncurses libs detection patches


Hello,

I am sorry for the long delay.
Final versions of the patches which are reduced to the usage of pkg-config. And
if unavailable we use the old code.

Thanks for all suggestions,
Justin


2013-03-06 13:02:16

by justin

[permalink] [raw]
Subject: [PATCH 1/2] menuconfig: optionally use pkg-config 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.

The ncurses pkg-config module will be used to detect the necessary libs for
linking. If not available the old heuristic for detection of the ncurses libs
will be used.

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

diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
index 8078813..782d200 100644
--- a/scripts/kconfig/lxdialog/check-lxdialog.sh
+++ b/scripts/kconfig/lxdialog/check-lxdialog.sh
@@ -4,6 +4,8 @@
# What library to link
ldflags()
{
+ pkg-config --libs ncursesw 2>/dev/null && exit
+ pkg-config --libs ncurses 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.5

2013-03-06 13:02:12

by justin

[permalink] [raw]
Subject: [PATCH 2/2] kconfig: optionally use pkg-config 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.

The ncurses pkg-config module will be used to detect the necessary libs for
linking. If not available the old way of directly specifying libs will be
used.

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

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 231b475..e76ae5d 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -219,7 +219,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 = $(shell \
+ pkg-config --libs menu panel ncurses 2>/dev/null \
+ || echo "-lmenu -lpanel -ncurses" )
$(obj)/qconf.o: $(obj)/.tmp_qtcheck

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

2013-03-06 20:47:36

by Yann E. MORIN

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

Justin, All,

On Wednesday 06 March 2013 [email protected] wrote:
> 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.
>
> The ncurses pkg-config module will be used to detect the necessary libs for
> linking. If not available the old way of directly specifying libs will be
> used.
>
> Signed-off-by: Justin Lecher <[email protected]>
> ---
> scripts/kconfig/Makefile | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
> index 231b475..e76ae5d 100644
> --- a/scripts/kconfig/Makefile
> +++ b/scripts/kconfig/Makefile
> @@ -219,7 +219,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 = $(shell \
> + pkg-config --libs menu panel ncurses 2>/dev/null \
> + || echo "-lmenu -lpanel -ncurses" )

Typo: this should be: "-lncurses" and not: "-ncurses"

I'll fix it here before queuing, no need to resend.

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-06 21:23:30

by Yann E. MORIN

[permalink] [raw]
Subject: Re: Final versions of ncurses libs detection patches

Justin, All,

On Wednesday 06 March 2013 [email protected] wrote:
> I am sorry for the long delay.
> Final versions of the patches which are reduced to the usage of pkg-config. And
> if unavailable we use the old code.

On Ubuntu Quantal, ncurses is indeed compiled with tinfo as a separate
lib, but these two patches are not needed, because libncurses has proper
(NEEDED) on libtinfo:

$ readelf -d /lib/x86_64-linux-gnu/libncurses.so.5.9 |grep tinfo
0x0000000000000001 (NEEDED) Shared library: [libtinfo.so.5]

If I just configure ncurses with:
$ ./configure --with-termlib --with-shared --without-normal && make
$ readelf -d lib/libncurses.so.5.9 |grep tinfo
0x0000000000000001 (NEEDED) Shared library: [libtinfo.so.5]

I wonder how you configured your ncurses.

But anyway, even in that cse, using pkg-config when available is better
than using our previous legacy checks.

I'm still doing a few more tests on my side before queuing.

> Thanks for all suggestions,

Thanks for staying around during the iterations.

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-07 09:47:25

by justin

[permalink] [raw]
Subject: Re: Final versions of ncurses libs detection patches

On 06/03/13 22:23, Yann E. MORIN wrote:
> On Ubuntu Quantal, ncurses is indeed compiled with tinfo as a separate
> lib, but these two patches are not needed, because libncurses has proper
> (NEEDED) on libtinfo:
>
> $ readelf -d /lib/x86_64-linux-gnu/libncurses.so.5.9 |grep tinfo
> 0x0000000000000001 (NEEDED) Shared library: [libtinfo.so.5]

Hi Yann,

Same here

$ scanelf -n /lib//libncurses.so.5.9
TYPE NEEDED FILE
ET_DYN libc.so.6,libdl.so.2,libtinfo.so.5 /lib//libncurses.so.5.9


But why it works on ubuntu and debian is that

/lib/lib/x86_64-linux-gnu/libncurses.so.5.9

is a ld script with following content

INPUT(libncurses.so.9 -ltinfo)

It instructs the linker at link time to add additionally -ltinfo.

On Gentoo, the base-system maintainers refuse to do this (I would agree
if you call it a bug on our side), but I am not allowed to touch those
packages.

Luckily ncurses provides the config scripts and the pkg-config modules
to do sane linking. This should be done if possible regardless the
situation on a single distributions.

>
> If I just configure ncurses with:
> $ ./configure --with-termlib --with-shared --without-normal && make
> $ readelf -d lib/libncurses.so.5.9 |grep tinfo
> 0x0000000000000001 (NEEDED) Shared library: [libtinfo.so.5]
>
> I wonder how you configured your ncurses.

./configure --prefix=/usr --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --mandir=/usr/share/man
--infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
--localstatedir=/var/lib --libdir=/usr/lib64
--with-terminfo-dirs=/etc/terminfo:/usr/share/terminfo --with-shared
--without-hashed-db --without-ada --with-cxx --with-cxx-binding
--without-debug --without-profile --with-gpm --disable-termcap
--enable-symlinks --with-rcs-ids --with-manpage-format=normal
--enable-const --enable-colorfgbg --enable-echo --enable-pc-files
--enable-warnings --without-assertions --disable-leaks
--without-expanded --with-macros --without-trace --with-termlib
--with-chtype=long --with-mmask-t=long --disable-ext-colors
--disable-ext-mouse --without-pthread --without-reentrant

>
> Thanks for staying around during the iterations.

No problem, this is how it works. Thanks for your suggestions,

Justin



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