Hi,

I'm porting Debian to Interix. See http://www.debian-interix.net
for details.

While porting ncurses I hit this bug.
Looking at the buildd logs for kfreebsd-i386 also shows it's appearing there:
https://buildd.debian.org/fetch.cgi?pkg=ncurses&arch=kfreebsd-i386&ver=5.7%2B20090607-1&stamp=1247016486&file=log&as=raw
says:

  dh_shlibdeps -s -Nlibncurses5 -Nlibncursesw5 \
                -Nlib32ncurses5 -Nlib32ncursesw5 -Nlib64ncurses5 \
                
-ldebian/libncurses5/lib:debian/libncurses5/usr/lib:debian/libncursesw5/usr/lib
  dpkg-shlibdeps: warning: debian/ncurses-bin/usr/bin/tic contains an
  unresolvable reference to symbol _tracef: it's probably a plugin.


Looking at debian/rules, target "install" shows the problem:

        # Install into our base directory
        GZIP='-9' $(MAKE) -C $(objdir-debug) install
        $(MAKE) -C $(wobjdir-debug) install.libs

        # Copy libraries to the debug directory
        [...]

        # Install non -DTRACE versions.
        $(MAKE) -C $(objdir) install.libs
        $(MAKE) -C $(wobjdir) install.libs

So the debug version is distributed in the standard debian package, used together with the non-debug libncurses.so. This is incorrect as tic in the debug version uses the DEBUG macro and so the _tracef() symbol:


progs/tic.c:check_termtype()
            if (check_sgr0 != exit_attribute_mode) {
                DEBUG(2,
                ("will trim sgr0\n\toriginal sgr0=%s\n\ttrimmed  sgr0=%s",
                       _nc_visbuf2(1, exit_attribute_mode),
                       _nc_visbuf2(2, check_sgr0)));
                free(check_sgr0);
            } else {
                DEBUG(2,
                      ("will not trim sgr0\n\toriginal sgr0=%s",
                       _nc_visbuf(exit_attribute_mode)));
            }


include/tic.h:
#ifdef TRACE
#define DEBUG(n, a)     if (_nc_tracing >= DEBUG_LEVEL(n)) _tracef a
#else
#define DEBUG(n, a)     /*nothing*/
#endif


but this is only available in the debug version of libncurses.so.
On Interix the dynamic loader isn't lazy, so I can't even start tic.
On Linux it is apparently lazy and so the error only occurs if tic is used with a debug level high enough to call _tracef().

So instead of
        $(MAKE) -C $(objdir) install.libs
debian/rules should read
        GZIP='-9' $(MAKE) -C $(objdir) install
so that the non-debug non-lib programs are used.


Martin



--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to