[gnutls-dev] Re: pkg-config support for opencdk

Simon Josefsson jas at extundo.com
Tue Aug 8 14:47:39 CEST 2006


Andreas Metzler <ametzler at downhill.at.eu.org> writes:

>> Btw, I'd recommend people to use standard autoconf-mechanisms to find
>> opencdk,
>
> I did provide this as the current *m4 tests shipped in the gnutls
> software are problematic. They use foo-config to get the needed
> dependency libs and CFLAGS and foo-config is not smart enough. For
> example libgnutls-config --libs generates this output:
>
> -L/usr/lib -lgnutls -L/usr/lib -ltasn1 -lgcrypt -lgpg-error

Right, and I recommend against using gnutls*-config for the same
reason too.

I think Bruno's AC_LIB_HAVE_LINKFLAGS is the best choice.  It works
for cross-compilations, can check for particular versions through the
gnutls.h LIBGNUTLS_VERSION* symbols, and doesn't add unnecessary
libraries to the link line, and works with and without libtool.

Using pkg-config may be simpler, and more well tested than Bruno's
macro, but it doesn't follow the test-for-feature approach.

> However on many systems (Linux, the Hurd, ...) it is not necessary to
> link indirect dependencies when doing symbolic linking. i.e. if you use
> gnutls-functions this will be enough
> gcc -lgnutls -o foo foo.c
> there is no need to link against -ltasn1 -lgcrypt -lgpg-error, the
> symbolic linker will handle these just fine at run-time.

Right.

> This unnecessary linkage hurts us (Debian), because dependency cycles
> get a lot bigger than necessary. The greater part of gnome will link
> against libtasn although only gnutls functions are used, and if tasn
> changes its soname we will need to rebuild a 100 times the packages
> than actually necessary (and until that has happened the yet
> not-rebuilt ones link against two versions of libtasn).

Oops.

> pkg-config can solve this problem because knowledge about whether
> direct linking of dependency libs is necessary is built in,
> the output of "pkg-config --libs gnutls" differs in between "broken"
> and other systems.

Ok.  I think lib-link.m4 does this too; it checks which libraries are
required to link.

> I fail to come up with such a szenario at short time however, and
> googling seems to suggest that crosscompilation of pkg-config using
> software is possible.

Pkg-config works fine for cross-compilation if you point each
configure script at the proper pkg-config script for the already
cross-compiled library.  However, things doesn't happen automatically,
and pkg-config doesn't know for which platform a particular library is
built for.  Bruno's macro uses the compiler/linker to find the
libraries, and this seems like a more reliable approach.

>> and it also breaks the standard autoconf-approach of testing for
>> features.
>
> You can use pkg-config to find the library and then use the standard
> tests.

Yup.

> I am just arguing that pkg-config might do a better job than the
> foo-config scripts.

Agreed, and the gnutls*-config scripts are even more deprecated than
the pkg-config approach.  Maybe we should remove them in 1.5.0 to make
sure people stop using them.

/Simon




More information about the Gnutls-devel mailing list