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 _______________________________________________ Autoconf mailing list Autoconf@gnu.org http://lists.gnu.org/mailman/listinfo/autoconf