Re: [PATCH] backports: fix mconf compilation on OpenSUSE factory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 11, 2014 at 08:47:27AM +0200, Johannes Berg wrote:
> On Mon, 2014-08-11 at 08:38 +0200, Johannes Berg wrote:
> 
> > I have a vague feeling that we used to have this and it broke somewhere
> > else, and it was supposed to get added via check-lxdialog.sh...
> 
> commit d58be321df286371d50ed54e835efeea087a9fac
> Author: Johannes Berg <johannes.berg@xxxxxxxxx>
> Date:   Mon Jun 3 17:54:33 2013 +0200
> 
>     backports: use check-lxdialog.sh

I've narrowed this down a bit further. The upstream check-lxdialog.sh
has not changed but I noticed we also used a bit different strategy for
linking and it seems there are some shortcomings with that that I guess
could be a bug. This fixes it at least for me.

Thoughts?

>From 3d8941817e410a546ad6f3f71c1a1d09926c246e Mon Sep 17 00:00:00 2001
From: "Luis R. Rodriguez" <mcgrof@xxxxxxxx>
Date: Sun, 14 Sep 2014 06:05:29 -0700
Subject: [PATCH] backports: fix mconf compilation library assumptions

On OpenSUSE factory 'make menuconfig' fails to compile with:

cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2
-fomit-frame-pointer -DCURSES_LOC="<ncurses.h>" -DLOCALE   -c -o
lxdialog/yesno.o lxdialog/yesno.c
cc -Wl,--no-as-needed -lncursesw  mconf.o zconf.tab.o
lxdialog/checklist.o lxdialog/inputbox.o lxdialog/menubox.o
lxdialog/textbox.o lxdialog/util.o lxdialog/yesno.o   -o mconf
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld:
/lib64/libncursesw.so.5: undefined reference to symbol 'acs_map'
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/libtinfo.so:
error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Although this can be fixed by linking with -ltinfo after a bit
further investigation I've traced this issue down to how we speak
to the linker and ask it to link and when. For instance if one
were to compile and link mconf by specifying the linker requirements
before the final object file things fail and if we ask for it after
things work. For instance if we ask for the libraries before:

gcc  -lncursesw -o
	kconf/mconf
	kconf/mconf.o
	kconf/zconf.tab.o
	kconf/lxdialog/checklist.o
	kconf/lxdialog/util.o
	kconf/lxdialog/inputbox.o
	kconf/lxdialog/textbox.o
	kconf/lxdialog/yesno.o
	kconf/lxdialog/menubox.o  -lncursesw

Passing the linker requirements at the end makes the gcc happy:

gcc  -o kconf/mconf
	kconf/mconf.o
	kconf/zconf.tab.o
	kconf/lxdialog/checklist.o
	kconf/lxdialog/util.o
	kconf/lxdialog/inputbox.o
	kconf/lxdialog/textbox.o
	kconf/lxdialog/yesno.o
	kconf/lxdialog/menubox.o  -lncursesw

It seems that using -Wl,--no-as-needed does not do what we wish with regards
to the above requirements, this could be a bug but the kernel treats things
a bit differently so we need to adopt, fix this by being explicit by
using -Wl,--add-needed and letting it figure things out automagically.

This has been tested on Debian and OpenSUSE factory.

Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxx>
---
 backport/kconf/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/backport/kconf/Makefile b/backport/kconf/Makefile
index dfd793a..b307c65 100644
--- a/backport/kconf/Makefile
+++ b/backport/kconf/Makefile
@@ -3,7 +3,7 @@ CFLAGS=-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
 LXDIALOG := lxdialog/checklist.o lxdialog/inputbox.o lxdialog/menubox.o lxdialog/textbox.o lxdialog/util.o lxdialog/yesno.o
 
 conf: conf.o zconf.tab.o
-mconf: LDFLAGS = -Wl,--no-as-needed $(shell ./lxdialog/check-lxdialog.sh -ldflags $(CC))
+mconf: LDFLAGS = -Wl,--add-needed $(shell ./lxdialog/check-lxdialog.sh -ldflags $(CC))
 mconf: CFLAGS += -DCURSES_LOC="<ncurses.h>" -DLOCALE
 mconf: mconf.o zconf.tab.o $(LXDIALOG)
 
-- 
2.0.3

--
To unsubscribe from this list: send the line "unsubscribe backports" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux