BuildRequires: pkgconfig(foo) vs. foo-devel

Fedora packages which use pkg-config to build against a library (e.g. 'foo') on which they depend, SHOULD express their build dependency correctly as pkgconfig(foo).

Rationale

The build infrastructure for a given package will often locate and use required libraries by using pkg-config.

Thus, pkgconfig(foo) is the true statement of the build dependency, and is how it should be expressed in the spec file.

For historical reasons, many packages seem to have a hard-coded “BuildRequires: foo-devel”, with the name of the package which currently provides the required pkgconfig module. This is fragile and less portable than simply expressing the real dependency. Where package names change, and/or a required pkgconfig module is later provided by a different package, these hard-coded dependencies break.

Note that it shall still be acceptable to require specific packages by name if they are required for some reason other than a pkg-config module that they provide.

Example

Packages which build against libproxy should contain the following:

BuildRequires: pkgconfig(libproxy-1.0)
  1. and not the following:

BuildRequires: libproxy-devel

This way, if the libproxy-1.0.pc pkgconfig module is ever provided from a differently-named package (such as by PacRunner once its integration is complete, or by a ‘libproxy1’ backward-compatibility package as has happened to a number of other libraries in the past), the dependency will continue to be correct.