[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Library version thru autoconf ?
From: |
Tim Post |
Subject: |
Re: Library version thru autoconf ? |
Date: |
Mon, 16 Feb 2009 17:02:08 +0800 |
On Fri, 2009-02-13 at 11:09 -0700, Warren Young wrote:
> Sébastien Le Roux wrote:
> >
> > I wonder if there is a way (a macro ?) to obtain the version of a library.
>
> Maybe, but the Autoconf Way is to test for features, not versions.
>
> Take the simple case, only two supported versions of a library, old and
> new. You write a single autoconf test that tries to link a program
> containing a routine only available in the new library. AC_TRY_LINK If
> the new library differs only in the interface to the same set of
> functions, you'd have to use AC_TRY_COMPILE instead, with an attempt to
> call the newer interface.
>From help that I found some time ago on this list, I also recommend
AC_CHECK_MEMBER. Sometimes a change in a library adds something new to a
structure but does not change any exposed functions.
If you know that libfoo 3.1 has member 'bar' in struct 'foo' but 3.0
doesn't, you can give the user a more detailed description of what's
wrong in the error message (i.e. please upgrade foo to 3.1+).
Unfortunately, not all libraries define LIBNAME_VERSION, so trying to
get the output of:
#include <foo.h>
int main(void)
{
fprintf(stderr, "%s", FOO_VERSION)
... where FOO is the name of whatever library you are examining isn't
going to work very reliably. Moreover, some actually do define the
version but not in major / minor formats, so hard to tell if you have
3.1 or 3.5. Finally, some just say FOO_VERSION, or FOO_MAJOR instead of
LIBFOO_VERSION or LIBFOO_MAJOR, etc.
Its a little too much magic to put in any single macro :) You could
probably write one that worked 80% of the time .. but that's a 20%
chance that the build will break with linker errors that most won't
understand.
Cheers,
--Tim