|
|
[Gentoo Linux Home] [GLEP Index] [GLEP Source] |
| GLEP: | 62 |
|---|---|
| Title: | Optional runtime dependencies via runtime-switchable USE flags |
| Version: | 1.2 |
| Last-Modified: | 2012/07/11 20:24:37 |
| Author: | Michał Górny <mgorny at gentoo.org> |
| Status: | Draft |
| Type: | Standards Track |
| Content-Type: | text/x-rst |
| Created: | 17 Jun 2012 |
| Post-History: | 11 Jul 2012 |
Contents
This GLEP addresses the issue of referencing optional runtime dependencies in Gentoo packages and ebuilds. It does introduce a concept of runtime-switchable USE flags to achieve that goal.
Optional runtime dependencies are often found in packages installing various scripts (shell, python, perl). These are not strictly required for the particular package to work but installing them enables additional functionality.
Unlike in compiled programs, enabling or disabling those features (dependencies) does not affect the files installed by the package. They can be installed and uninstalled independently of the package, resulting in changes of functionality without a need to rebuild the package.
Currently such dependencies are usually expressed only through pkg_postinst() messages. This forces user to manually install the necessary dependencies, and uninstall them when they are no longer necessary.
Another solution is to use regular USE flags. Those flags do not strictly follow the principles of USE flags because they do not affect files installed by the package and are not entirely effective to the package (a disabled feature will still be available if necessary dependency is installed). Additionally, it requires unnecessary rebuilds of the package in order to change the dependencies.
The ebuilds aiming to provide features enabled through optional runtime dependencies should:
Additionally, the ebuilds must obey the following rules:
The package manager should treat flags listed in IUSE_RUNTIME as regular USE flags, except for the following:
| [1] | The package manager has to ensure that all relevant information is stored in the installed package metadata. |
| [2] | The result of this check can be cached when updating the metadata of installed package, and it is not strictly required that a package manager must ensure that the dependency graph is still consistent afterwards. |
The proposed solution tries to solve the issue of handling runtime dependencies while reusing the existing infrastructure. Most importantly, users will be able to reuse the existing tools and configuration files to enable and disable optional runtime and build-time dependencies alike.
The remaining reused features include:
Alternative proposed solution involved creating additional SDEPEND variable. That proposition had the following disadvantages:
Those disadvantages could be fixed by either extending dependency syntax alike Exherbo (grouping, annotations) or using USE flags. The latter is practically equivalent to this solution yet introduces another variable unnecessarily.
In order to support runtime-switchable USE flag changes on installed packages, a package manager should store the following information in the installed package metadata:
The package manager should be also able to update the list of effective USE flags in installed package metadata (USE) without rebuilding the package.
The following procedure should apply when a dependency atom is considered (either as a package dependency or user-requested atom):
Furthermore, after installing all dependencies introduced by the above procedure (run_rdepend resolution), if a package was queued for runtime-switchable USE update, the package manager should write a new value for USE key in installed package metadata.
Package managers not implementing this GLEP will consider the IUSE_RUNTIME variable as an irrelevant bash variable and treat runtime-switchable USE flags as regular USE flags. The dependency tree will still be consistent yet packages may be rebuilt unnecessarily.
This document has been placed in the public domain.