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 found.
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
gtk+[#300232, fd.o bug #2987 -- fixed in pkg-config-0.17].
pkg.m4autoconf 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). [#300151]
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 [#300435, #300436, #300449]
pkg-configscript can go into an infinite loop when expanding the link flags if a package name is repeated [fd.o bug #3006, workarounds for some Gnome modules: #300450, #300452]
(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 --atleast-pkgconfig-version=0.17.1 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.