I recently pointed jhbuild's bootstrap module-set at the new releases
of pkg-config, which seems to
have triggered some problems for some people.
In some ways, it isn't too surprising that some problems appeared,
since there were two years between the 0.15 and 0.16 releases. When you
go that long without testing from packages that depend on you, some
incompatibilities are bound to turn up. However, Tollef has been doing a
good job fixing the bugs and 0.17.1 fixes most of the problems I've
So far, I've run into the following problems (some reported to me as
jhbuild bug reports):
PKG_CHECK_MODULES() stopped evaluating its second argument in
0.16.0. This caused problems for modules like
fd.o bug #2987
-- fixed in pkg-config-0.17].
pkg.m4 autoconf macros now blacklist words matching
_PKG_* in the resulting configure script (with the exception of
PKG_CONFIG_PATH). This is to try and detect
unexpanded macros, but managed to trip up ORBit2 (ORBit2 has since
been fixed in CVS though).
PKG_CHECK_MODULES() macro now uses the autoconf result caching
mechanism, based on the variable prefix passed as the first
argument. This means that multiple
PKG_CHECK_MODULES() calls using
the same variable prefix will give the same result, even if they
specifiy a different list of modules
pkg-config script can go into an infinite loop when expanding
the link flags if a package name is repeated [fd.o bug
workarounds for some Gnome modules:
(note that only the last problem is likely to affect people building
existing packages from tarballs)
Appart from these problems, there are some new features that people
might find useful:
Unknown headers are ignored in
.pc files. This will make future
extensions possible. Previously, if you wanted to make use of a feature
in a newer version of
pkg-config in your
.pc, you'd probably end up
making the file incompatible with older versions. This essentially meant
that a new feature could not be used until the entire userbase upgraded,
even if the feature was non-critical.
Url header can be used in a
.pc file. If
pkg-config finds a
version of a required package, but it is too old, then the old
file can print a URL telling people where to find a newer version.
Unfortunately, if you use this feature your
.pc file won't work with
pkg-config <= 0.15.
A virtual "
pkg-config" package is provided by
doesn't provide any
libs, but does include the version
number. So the following are equivalent:
pkg-config --exists pkg-config '>=' 0.17.1
This may not sound useful at first, but you can also list the module
Requires line of another
.pc file. As an example, if you
used some weird link flags that
pkg-config used to mangle but has
since been fixed, you can encode that requirement in the
Of course, this is only useful for checking for
greater than 0.16.