You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Commands that must be implemented as shell functions
All commands and functions are implemented as shell builtins.
Read-only variables
Where possible, all variables are set to be read-only if they shouldn't be altered in the ebuild environment.
Exporting variables
No variables that are strictly ebuild-related are exported into the build environment. Currently this means only TMPDIR and HOME are exported into external processes.
External commands
No commands are available externally as all are implemented as shell builtins. It would be possible to install shims for various commands that are stated to be available externally; however, one goal of this project is to provide a singular, static binary that can be easily deployed so in order to work the shims would have to be dynamically created on execution. Due to that and the overall minimal usage of external spec commands in the tree, it has been deemed not worth supporting this feature. Additionally most tree usage can be rewritten using arguably more readable non-external command usage.
The main uses in the tree with find and xargs can be flagged via pkgcruft scan -r Builtin.
Scope-based usage restrictions
All commands have specific scopes they are allowed to run in including global, eclass, and various phases. If a command is run outside its registered scope a failure occurs. In general, the spec doesn't always specify the scope for each command so this is more strict than it allows for.
The scope restrictions also try to reflect the reality of usage patterns in the main tree rather than what is specified for commands that have restrictions. For example, the spec states that die must not be used outside of phase functions; however, it is used for eclass code run in global scope as a shorthand to provide simple error message handling.
Setting BASH_COMPAT
A modified version of bash is bundled so bash versions are already directly tied to releases. Additionally bash upstream has stated that BASH_COMPAT is more of a hack and lacks consistency.
Builtin availability
The spec states that all builtin commands in GNU bash must always be available in the ebuild environment; however, some builtins provided by bash are explicitly disabled in pkgcraft such as enable.
Die on unknown commands during phase processing (upstream bug)
The spec doesn't specify how to handle when unknown commands are run during phase processing so portage only outputs QA warnings while pkgcraft entirely bails out.
FTP URLs aren't supported in SRC_URI (upstream bug)
Distfile fetching support is internally implemented and maintaining support for FTP connections isn't desired. From a cursory check of several packages only providing FTP URLs, they all had http(s) alternatives that should be used instead so most remaining FTP links should be able to be migrated or dropped entirely when alternatives exist.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
Known deviations from the package manager specification
Commands that must be implemented as shell functions
All commands and functions are implemented as shell builtins.
Read-only variables
Where possible, all variables are set to be read-only if they shouldn't be altered in the ebuild environment.
Exporting variables
No variables that are strictly ebuild-related are exported into the build environment. Currently this means only TMPDIR and HOME are exported into external processes.
External commands
No commands are available externally as all are implemented as shell builtins. It would be possible to install shims for various commands that are stated to be available externally; however, one goal of this project is to provide a singular, static binary that can be easily deployed so in order to work the shims would have to be dynamically created on execution. Due to that and the overall minimal usage of external spec commands in the tree, it has been deemed not worth supporting this feature. Additionally most tree usage can be rewritten using arguably more readable non-external command usage.
The main uses in the tree with
find
andxargs
can be flagged viapkgcruft scan -r Builtin
.Scope-based usage restrictions
All commands have specific scopes they are allowed to run in including global, eclass, and various phases. If a command is run outside its registered scope a failure occurs. In general, the spec doesn't always specify the scope for each command so this is more strict than it allows for.
The scope restrictions also try to reflect the reality of usage patterns in the main tree rather than what is specified for commands that have restrictions. For example, the spec states that
die
must not be used outside of phase functions; however, it is used for eclass code run in global scope as a shorthand to provide simple error message handling.Setting BASH_COMPAT
A modified version of bash is bundled so bash versions are already directly tied to releases. Additionally bash upstream has stated that BASH_COMPAT is more of a hack and lacks consistency.
Builtin availability
The spec states that all builtin commands in GNU bash must always be available in the ebuild environment; however, some builtins provided by bash are explicitly disabled in pkgcraft such as
enable
.Die on unknown commands during phase processing (upstream bug)
The spec doesn't specify how to handle when unknown commands are run during phase processing so portage only outputs QA warnings while pkgcraft entirely bails out.
FTP URLs aren't supported in SRC_URI (upstream bug)
Distfile fetching support is internally implemented and maintaining support for FTP connections isn't desired. From a cursory check of several packages only providing FTP URLs, they all had http(s) alternatives that should be used instead so most remaining FTP links should be able to be migrated or dropped entirely when alternatives exist.
Beta Was this translation helpful? Give feedback.
All reactions