static build with curses fails if requires -ltinfo

Bug #1094786 reported by Vadim Evard
16
This bug affects 3 people
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

On my system (amd64 Debian wheezy/sid) static ncurses build requires -ltinfo:
$ pkg-config --libs --static ncurses
-lncurses -ltinfo

$ ../../configure --enable-curses --static
# Actually this fails on line
    if compile_prog "" "$curses_lib" ; then
# with
ERROR
ERROR: User requested feature curses
ERROR: configure was not able to find it
ERROR
# but if we add -ltinfo to this line check succeds
...
static build yes
...

$ make
...
...
  CC i386-softmmu/hw/i386/../kvm/pci-assign.o
  LINK i386-softmmu/qemu-system-i386
../os-posix.o: In function `change_process_uid':
/home/vadim/soft/qemu/os-posix.c:205: warning: Using 'initgroups' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking # and many alike warnings
...
../ui/curses.o: In function `curses_cursor_position':
/home/vadim/soft/qemu/ui/curses.c:137: undefined reference to `COLS'
/home/vadim/soft/qemu/ui/curses.c:137: undefined reference to `LINES'
/home/vadim/soft/qemu/ui/curses.c:138: undefined reference to `stdscr'
/home/vadim/soft/qemu/ui/curses.c:139: undefined reference to `curs_set'
../ui/curses.o: In function `curses_calc_pad':
/home/vadim/soft/qemu/ui/curses.c:68: undefined reference to `stdscr'
/home/vadim/soft/qemu/ui/curses.c:69: undefined reference to `stdscr'
... and so on

I tried to build the very minimal static qemu executable. Actual configure line I tried first was
../../configure --target-list=i386-softmmu --disable-sdl --disable-virtfs --disable-vnc --disable-xen --disable-brlapi --disable-bluez --disable-slirp --disable-kvm --disable-user --disable-vde --disable-vhost-net --disable-spice --disable-libiscsi --disable-smartcard --disable-usb-redir --disable-guest-agent --audio-drv-list= --audio-card-list= --enable-curses --static

and the errors was the same.

Revision history for this message
em (eminemix) wrote :

I can reproduce this issue.

I tried

./configure --static --target-list="x86_64-softmmu" --enable-curse

I get

ERROR
ERROR: User requested feature curses
ERROR: configure was not able to find it
ERROR

Revision history for this message
Stefan Hajnoczi (stefanha) wrote :

Please try qemu.git/master.

If the error still occurs, please attach config.log.

The problem may have to do with the way ./configure compile_prog and pkg_config interact with the --static option. The --static option is supposed to set up LDFLAGS -static and pkg-config --static.

The curses probing code tries building -lncurses, -lcurses, and finally pkg-config ncurses. Try the following change:
curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"

That will probe pkg-config ncurses first.

Ed Maste (emaste)
no longer affects: freebsd-ports-mirror
Revision history for this message
Ed Maste (emaste) wrote :

I ran into the same issue on FreeBSD, and just posted my patch to the qemu-devel list. It's the same solution stefanha describes above.

(On FreeBSD we have an additional issue; we don't ship the .pc file with the ncurses port right now. I just hacked one together to include -ltinfo in Libs.private.)

Revision history for this message
Thomas Huth (th-huth) wrote :

Patch had been included here:
http://git.qemu.org/?p=qemu.git;a=commitdiff;h=cfeda5f4b8710b6ba14
So I think we can now mark this ticket as "Fix released".

Changed in qemu:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.