summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@suse.com>2014-09-14 06:05:29 -0700
committerHauke Mehrtens <hauke@hauke-m.de>2014-10-25 15:20:14 +0200
commit36f33cbcb7b2652850f76a7413adf17f12fdf5e8 (patch)
tree6b2b51e85348e7dcd89aea01233845bbaf93b2bc
parentfa8c97a23760f92052c495f2fa9fe5a6e7702173 (diff)
backports: fix mconf compilation library assumptions
Upstream commit: de427857852e7194b9ae80571425ba0d2c29ef55 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@suse.com> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-rw-r--r--backport/kconf/Makefile2
1 files changed, 1 insertions, 1 deletions
diff --git a/backport/kconf/Makefile b/backport/kconf/Makefile
index dfd793ae..b307c657 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)