From Fedora Project Wiki

< PackagingDrafts

Revision as of 20:22, 23 July 2013 by Dwmw2 (talk | contribs) (Created page with "== BuildRequires: pkgconfig(foo) vs. foo-devel == === Proposal === Fedora packages which use <code>pkg-config</code> to build against a library (e.g. 'foo') on which they dep...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

BuildRequires: pkgconfig(foo) vs. foo-devel

Proposal

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

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, it is common for packagers to hard-code in a BuildRequires tag 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.

Example

Packages which build against libproxy should contain the following:

BuildRequires: pkgconfig(libproxy-1.0)

... 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.