Skip to Content.
Sympa Menu

freetds - Re: [freetds] FreeTDS 0.61 Compile Problem

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Steve Langasek <vorlon AT netexpress.net>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] FreeTDS 0.61 Compile Problem
  • Date: Mon, 14 Jul 2003 23:41:59 -0500

On Sun, Jul 13, 2003 at 04:22:24PM -0400, James K. Lowden wrote:
> I'll do some more checking. Below is the configure.in test for readline.
> Freddy added it a year ago, and I imagine he found it elsewhere. I'm not
> sure what to change; afaict we're doing as you suggest, unless tputs(3) is
> intrinsically different from tgetent(3).

> dnl readline test
> dnl Readline is needed by the tty session. Set up a special RL_LIBS
> dnl substitution for it.
> OLDLIBS="$LIBS"
> dnl Readline is linked with curses, and on some systems termcap must be
> dnl linked in. Others (inc debian) have termcap built into ncurses.
> LIBS=""
> AC_SEARCH_LIBS(tgetent, [readline ncurses curses termcap])
> ^^^^^^^ ^^^^^^^^ Good, no?
> AC_CHECK_LIB([readline], [readline], [LIBS="$LIBS -lreadline"
> AC_DEFINE(HAVE_READLINE, 1, [Define to 1 if you have the GNU Readline
> library.])] )
> READLINE_LIBS="$LIBS"
> AC_SUBST(READLINE_LIBS)
> LIBS="$OLDLIBS"

This adds -lreadline after the other libs that have been detected, which
is incorrect on many platforms; the linker is not required to keep track
of symbols that have not been requested, so every library must have its
dependencies listed *after* it on the link line (on platforms where they
must be specified at all).

LIBS="-lreadline $LIBS" is probably what's wanted above.

> > I find it frustrating. It makes me wonder if the world of
> > Linux is starting to look like the world of M$. :-(

> In this way: management of shared library dependency information is a
> thankless task that no one wants to do. We create one itsy bitsy teewny
> weeny yellow polka dot library here (OK, four), and have a dickens of a
> time keeping straight what major/minor numbers to bump when. Multiply our
> problem by (something like) the square of the number of libraries on a
> typical system, and you have a fair proxy for the size of the problem.

With the apparent exception of Slackware, this is not a Linux problem;
by and large, it's a problem caused by proprietary Unices with crufty or
incomplete shared library handling. The GNU linker provides mature,
scalable handling of interlibrary dependencies:

$ objdump -p /usr/lib/libreadline.so|grep NEEDED
NEEDED libtermcap.so.2
NEEDED libc.so.6
$

On a good platform, you specify only the libraries that *you* need, not
the ones that *they* need. Unfortunately, there's a tendency for Open
Source developers to be willing to sink countless hours into their build
scripts, to work around the limitations of stagnant, dead-end platforms
in the name of "portability".

Not forgiving libtool any time soon,
--
Steve Langasek
postmodern programmer





Archive powered by MHonArc 2.6.24.

Top of Page