From Fedora Project Wiki
m (style fixes)
No edit summary
Line 35: Line 35:
== Benefit to Fedora ==
== Benefit to Fedora ==
<!-- What is the benefit to the platform?  If this is a major capability update, what has changed?  If this is a new functionality, what capabilities does it bring? Why will Fedora become a better distribution or project because of this proposal?-->
<!-- What is the benefit to the platform?  If this is a major capability update, what has changed?  If this is a new functionality, what capabilities does it bring? Why will Fedora become a better distribution or project because of this proposal?-->
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 new architectures will be simpler, since there won't be a cyclic dependency to break (glib2 -> pkgconfig -> glib2) that is required for bootstrapping the core of Fedora. More details on the differences can be found at http://pkgconf.org/features.html
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 (glib2 -> pkgconfig -> glib2) that is required for bootstrapping the core of Fedora. More details on the differences can be found at http://pkgconf.org/features.html


== Scope ==
== Scope ==
Line 53: Line 53:
<!-- Does this feature require coordination with release engineering (e.g. changes to installer image generation or update package delivery)?  Is a mass rebuid required?  If a rel-eng ticket exists, add a link here.  
<!-- Does this feature require coordination with release engineering (e.g. changes to installer image generation or update package delivery)?  Is a mass rebuid required?  If a rel-eng ticket exists, add a link here.  
Please work with releng prior to feature submission, and ensure that someone is on board to do any process development work and testing; don't just assume that a bullet point in a change puts someone else on the hook.-->
Please work with releng prior to feature submission, and ensure that someone is on board to do any process development work and testing; don't just assume that a bullet point in a change puts someone else on the hook.-->
** [[Fedora_Program_Management/ReleaseBlocking/Fedora{{FedoraVersionNumber|next}}|List of deliverables]]: N/A (not a System Wide Change) <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
** [[Fedora_Program_Management/ReleaseBlocking/Fedora{{FedoraVersionNumber|next}}|List of deliverables]]: All <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- Please check the list of Fedora release deliverables and list all the differences the feature brings -->
<!-- Please check the list of Fedora release deliverables and list all the differences the feature brings -->


* Policies and guidelines: N/A (not a System Wide Change) <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Policies and guidelines: Nothing needs to be updated, (Build)Requires will still work as expected in pkgconfig() form, paths are not changing <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- Do the packaging guidelines or other documents need to be updated for this feature?  If so, does it need to happen before or after the implementation is done?  If a FPC ticket exists, add a link here. -->
<!-- Do the packaging guidelines or other documents need to be updated for this feature?  If so, does it need to happen before or after the implementation is done?  If a FPC ticket exists, add a link here. -->


Line 66: Line 66:


<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
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.
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 ==
== How To Test ==
Line 84: Line 84:


<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
Before change is done, try export PKG_CONFIG=/usr/bin/pkgconf and try to build your favorite $package (most of buildsystems respect this environment variable).
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 ==
== User Experience ==
Line 102: Line 112:
* Contingency mechanism: Disable pkgconf-pkg-config compatibility layer (Igor Gnatenko/Neal Gompa will do it) <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Contingency mechanism: Disable pkgconf-pkg-config compatibility layer (Igor Gnatenko/Neal Gompa will do it) <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- When is the last time the contingency mechanism can be put in place?  This will typically be the beta freeze. -->
<!-- When is the last time the contingency mechanism can be put in place?  This will typically be the beta freeze. -->
* Contingency deadline: Mass rebuild (if main system packages / most of packages FTBFS - revert change immediately) <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Contingency deadline: Mass rebuild (if main system packages / major number of packages FTBFS - revert change immediately if not possible to fix within 30 minutes) <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- Does finishing this feature block the release, or can we ship with the feature in incomplete state? -->
<!-- Does finishing this feature block the release, or can we ship with the feature in incomplete state? -->
* Blocks release? Yes <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Blocks release? Yes <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
Line 111: Line 121:


<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
N/A (not a System Wide Change)
* http://pkgconf.org/features.html


== Release Notes ==
== Release Notes ==

Revision as of 16:17, 3 January 2017

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 a stable library ABI/API for integrating into applications and better support for handling .pc files.

Owner

Current status

  • Targeted release: Fedora 26
  • Last updated: 2017-01-03
  • Tracker bug: <will be assigned by the Wrangler>

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 (glib2 -> pkgconfig -> glib2) 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)
  • 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

N/A (not a System Wide Change)

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 within 30 minutes)
  • Blocks release? Yes
  • Blocks product? None

Documentation

Release Notes