Changes/pkgconf as system pkg-config implementation

From FedoraProject

Jump to: navigation, search

Contents

pkgconf as system pkg-config implementation

Summary

This change switches Fedora's system-wide/default pkg-config implementation to pkgconf, a new implementation of pkg-config that provides better support for handling .pc files and a stable library ABI/API for integrating into applications.

Owner

Current status

Detailed Description

pkgconf is a newer, actively maintained implementation of pkg-config that supports more aspects of the pkg-config file specification and provides a library interface that applications can use to incorporate intelligent handling of pkg-config files into themselves (such as build file generators, IDEs, and compilers). Through its pkg-config compatibility interface (activated when it is run as "pkg-config"), it also can completely replace the original implementation. This change involves enabling the pkgconf-pkg-config subpackage that provides this compatibility interface in Rawhide, and having it obsolete+provide the pkgconfig package so that it is the system implementation of pkg-config for the distribution.

Benefit to Fedora

Fedora benefits from switching to pkgconf by utilizing a more complete implementation of pkg-config that handles aspects of .pc files that pkg-config does not. For example, Provides rules and Cflags.private rules are supported, and pkgconf has a better (and less costly) dependency resolver for .pc files. The lack of dependency on glib2 also means that bootstrapping Fedora for new system architectures will be simpler, since there won't be a cyclic dependency to break (pkgconfig -> glib2 -> pkgconfig) that is required for bootstrapping the core of Fedora. More details on the differences can be found at http://pkgconf.org/features.html

Scope

  • Proposal owners:

1. Enable pkgconfig compatibility layer in pkgconf package (which is in conflict with pkgconfig)

2. Ensure that it doesn't break major number of builds during mass-rebuild

3. Fix issues

  • Other developers:
    • Retire pkgconfig package (Matthias Clasen) if everything went well right after mass-rebuild and fixage of all broken packages due to this change
  • Release engineering: Mass rebuild is needed (to ensure that pkgconf implementation is used), owners of change will track mass-rebuild and fix issues appearing with new implementation
  • Policies and guidelines: Nothing needs to be updated, (Build)Requires will still work as expected in pkgconfig() form, paths are not changing
  • Trademark approval: N/A (not needed for this Change)

Upgrade/compatibility impact

pkgconf supports all features of pkgconfig and even more, though there are some minor changes in CLI options and changes in output which it produces. There should be no visible impact for upgrades, and no manual configuration or data migration is required.

How To Test

Before change is done:

  • pkgconf package should be installed
  • export PKG_CONFIG=/usr/bin/pkgconf (most of buildsystems respect this environment variable)
  • Try to build your favorite $package

After change is done:

  • Updated pkgconf-pkg-config package (which should be automatically replace pkgconfig)
  • Try to build your favorite $package

User Experience

This change should be largely transparent to developers and packagers, though there may be differences in how pkgconfig dependencies and compile flags are resolved at build-time.

Dependencies

None.

Contingency Plan

  • Contingency mechanism: Disable pkgconf-pkg-config compatibility layer (Igor Gnatenko/Neal Gompa will do it)
  • Contingency deadline: Mass rebuild (if main system packages / major number of packages FTBFS - revert change immediately if not possible to fix quickly)
  • Blocks release? Yes
  • Blocks product? None/All

Documentation

Release Notes

Fedora has switched its pkg-config implementation to pkgconf, a new implementation that offers more advanced support for .pc files and provides a library interface for developers to integrate pkg-config processing into their applications. (Some more descriptive and better wording should be written by Documentation team)