summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Müller <ulm@gentoo.org>2021-06-13 21:15:30 +0200
committerUlrich Müller <ulm@gentoo.org>2021-06-13 21:15:30 +0200
commit06af57dc10ba883707b8841c4ddd9817437c650d (patch)
tree345f8582b1db2cba05e3985a559af7b7c23a3d87
parentRecognise "test_network" as token in PROPERTIES (diff)
parentCheat sheet: EAPI 8 approval date (diff)
downloadpms-06af57dc10ba883707b8841c4ddd9817437c650d.tar.gz
pms-06af57dc10ba883707b8841c4ddd9817437c650d.tar.bz2
pms-06af57dc10ba883707b8841c4ddd9817437c650d.zip
Merge branch 'eapi-8'eapi-8-approved-2021-06-13
Signed-off-by: Ulrich Müller <ulm@gentoo.org>
-rw-r--r--commands.tex4
-rw-r--r--dependencies.tex49
-rw-r--r--eapi-cheatsheet.tex210
-rw-r--r--eapi-differences.tex239
-rw-r--r--eapis.tex22
-rw-r--r--ebuild-env-vars.tex29
-rw-r--r--ebuild-format.tex5
-rw-r--r--ebuild-functions.tex233
-rw-r--r--ebuild-vars.tex39
-rw-r--r--eclasses.tex27
-rw-r--r--merge.tex4
-rw-r--r--metadata-cache.tex2
-rw-r--r--pkg-mgr-commands.tex271
-rw-r--r--pms.tex9
-rw-r--r--profile-variables.tex8
-rw-r--r--profiles.tex12
-rw-r--r--tree-layout.tex29
17 files changed, 753 insertions, 439 deletions
diff --git a/commands.tex b/commands.tex
index 799a20c..d0ad87d 100644
--- a/commands.tex
+++ b/commands.tex
@@ -33,7 +33,7 @@ The following commands must always be available in the ebuild environment:
table~\ref{tab:system-commands-table} as requiring GNU find.
\end{compactitem}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{System commands for EAPIs}
\label{tab:system-commands-table}
\begin{tabular}{lll}
@@ -44,7 +44,7 @@ The following commands must always be available in the ebuild environment:
\midrule
0, 1, 2, 3, 4 & Undefined & Any \\
5, 6 & Yes & Any \\
- 7 & Yes & 2.7 \\
+ 7, 8 & Yes & 2.7 \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/dependencies.tex b/dependencies.tex
index 67855f5..f14a08c 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -21,7 +21,7 @@
\t{src_install} & \t{DEPEND}, \t{BDEPEND} \\
\addlinespace
\t{pkg_preinst}, \t{pkg_postinst}, \t{pkg_prerm}, \t{pkg_postrm} &
- \t{RDEPEND} \\
+ \t{RDEPEND}, \t{IDEPEND} \\
\addlinespace
\t{pkg_config} & \t{RDEPEND}, \t{PDEPEND} \\
\bottomrule
@@ -32,7 +32,7 @@
\label{tab:dep-class-api}
\begin{tabular}{llll}
\toprule
- & \t{BDEPEND} & \t{DEPEND} & \t{RDEPEND}, \t{PDEPEND} \\
+ & \t{BDEPEND}, \t{IDEPEND} & \t{DEPEND} & \t{RDEPEND}, \t{PDEPEND} \\
\midrule
Binary compatible with & \t{CBUILD} & \t{CHOST} & \t{CHOST} \\
Base unprefixed path & \t{/} & \t{\$\{SYSROOT\}} & \t{\$\{ROOT\}} \\
@@ -82,16 +82,24 @@ as supporting \t{BDEPEND}, the build dependencies are split into two subclasses:
dependency.
\end{compactitem}
-\ChangeWhenAddingAnEAPI{7}
+\featurelabel{idepend} Additionally, in EAPIs listed in table~\ref{tab:depend-table} as supporting
+\t{IDEPEND}, install-time dependencies can be specified. These dependencies are binary compatible
+with the native build system (\t{CBUILD}). Ebuilds are allowed to call them in \t{pkg_preinst} and
+\t{pkg_postinst}. Ebuilds may also call them in \t{pkg_prerm} and \t{pkg_postrm} but must not rely
+on them being available.
+
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting additional dependency types}
\label{tab:depend-table}
- \begin{tabular}{ll}
+ \begin{tabular}{lll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{Supports \t{BDEPEND}?}} \\
+ \multicolumn{1}{c}{\textbf{Supports \t{BDEPEND}?}} &
+ \multicolumn{1}{c}{\textbf{Supports \t{IDEPEND}?}} \\
\midrule
- 0, 1, 2, 3, 4, 5, 6 & No \\
- 7 & Yes \\
+ 0, 1, 2, 3, 4, 5, 6 & No & No \\
+ 7 & Yes & No \\
+ 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -111,7 +119,7 @@ be surrounded on both sides by whitespace, except at the start and end of the st
\begin{compactitem}
\item A package dependency specification. Permitted in \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND},
- \t{PDEPEND}.
+ \t{PDEPEND}, \t{IDEPEND}.
\item A URI, in the form \t{proto://host/path}. Permitted in \t{HOMEPAGE} and \t{SRC_URI}\@.
In EAPIs listed in table~\ref{tab:uri-arrows-table} as supporting \t{SRC_URI} arrows, may
optionally be followed by whitespace, then \t{->}, then whitespace, then a simple filename when
@@ -129,7 +137,8 @@ be surrounded on both sides by whitespace, except at the start and end of the st
followed by an open parenthesis, followed by whitespace, followed by one or more
of (a dependency item of any kind followed by whitespace), followed by a close parenthesis.
More formally: \t{any-of} \t{::=} \t{'||' whitespace '(' whitespace (item whitespace)+ ')'}.
- Permitted in \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND}, \t{PDEPEND}, \t{LICENSE}, \t{REQUIRED_USE}.
+ Permitted in \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND}, \t{PDEPEND}, \t{IDEPEND}, \t{LICENSE},
+ \t{REQUIRED_USE}.
\item An exactly-one-of group, which has the same format as the any-of group, but begins with the
string \t{\textasciicircum\textasciicircum} instead. Permitted in \t{REQUIRED_USE}.
\item \featurelabel{at-most-one-of} An at-most-one-of group, which has the same format as the
@@ -146,7 +155,7 @@ be surrounded on both sides by whitespace, except at the start and end of the st
In particular, note that whitespace is not optional.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
\label{tab:at-most-one-of-table}
\begin{tabular}{ll}
@@ -155,7 +164,7 @@ In particular, note that whitespace is not optional.
\multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} \\
\midrule
0, 1, 2, 3, 4 & No \\
- 5, 6, 7 & Yes \\
+ 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -195,7 +204,7 @@ In an exactly-one-of group, exactly one immediate child element must be matched.
In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty exactly-one-of group counts as
being matched.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Matching of empty dependency groups in EAPIs}
\label{tab:empty-dep-groups}
\begin{tabular}{ll}
@@ -205,7 +214,7 @@ being matched.
are matched?}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & Yes \\
- 7 & No \\
+ 7, 8 & No \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -241,7 +250,7 @@ manager must warn or error if this feature is used with an EAPI not supporting u
\note{Order is important. The slot restriction must come before use dependencies.}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Support for \t{SLOT} dependencies and sub-slots in EAPIs}
\label{tab:slot-deps-table}
\begin{tabular}{lll}
@@ -252,12 +261,12 @@ manager must warn or error if this feature is used with an EAPI not supporting u
\midrule
0 & No & No \\
1, 2, 3, 4 & Named only & No \\
- 5, 6, 7 & Named and operator & Yes \\
+ 5, 6, 7, 8 & Named and operator & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{USE} dependencies}
\label{tab:use-deps-table}
\begin{tabular}{ll}
@@ -267,7 +276,7 @@ manager must warn or error if this feature is used with an EAPI not supporting u
\midrule
0, 1 & No \\
2, 3 & 2-style \\
- 4, 5, 6, 7 & 4-style \\
+ 4, 5, 6, 7, 8 & 4-style \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -301,7 +310,7 @@ ignored by the package manager, so long as any blocked package will be uninstall
strong block must not be ignored. The mapping from one or two exclamation marks to strength is
described in table~\ref{tab:bang-strength-table}.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Exclamation mark strengths for EAPIs}
\label{tab:bang-strength-table}
\begin{tabular}{lll}
@@ -310,8 +319,8 @@ described in table~\ref{tab:bang-strength-table}.
\multicolumn{1}{c}{\textbf{\t{!}}} &
\multicolumn{1}{c}{\textbf{\t{!!}}} \\
\midrule
- 0, 1 & Unspecified & Forbidden \\
- 2, 3, 4, 5, 6, 7 & Weak & Strong \\
+ 0, 1 & Unspecified & Forbidden \\
+ 2, 3, 4, 5, 6, 7, 8 & Weak & Strong \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index d4abb1a..0d28251 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -15,7 +15,7 @@
\usepackage[local]{gitinfo2}
\newcommand{\code}[1]{\texttt{#1}}
% This should reflect the latest approved EAPI version
-\newcommand{\version}{7.0}
+\newcommand{\version}{8.0}
\newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
\renewcommand{\familydefault}{\sfdefault}
\urlstyle{sf}
@@ -73,11 +73,11 @@
% to the original author or the PMS team.
This work is released under the Creative Commons
- Attribution-Share Alike 3.0 Licence.%
- \footnote{\url{https://creativecommons.org/licenses/by-sa/3.0/}}
+ Attribution-ShareAlike 4.0 International Licence.%
+ \footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}
\end{abstract}
-\section{EAPIs 0, 1, 2, 3, and 4}
+\section{EAPIs 0, 1, 2, 3, 4, and 5}
\label{sec:cs:eapi0-2}
Omitted for lack of space. See version~5.0 of this document for
differences between these previous EAPIs.
@@ -257,75 +257,75 @@ differences between these previous EAPIs.
% any more. See \featureref{aa} and \featureref{kv}.
% \end{description}
-\section{EAPI 5 (2012-09-20)}
-\label{sec:cs:eapi5}
-\subsection{Additions/Changes}
-\label{sec:cs:eapi5-additions}
-\begin{description}
- \item[Sub-slots] The \code{SLOT} variable and slot dependencies
- may contain an optional sub-slot part that follows the regular
- slot, delimited by a \code{/} character; for example
- \code{2/2.30}. The sub-slot is used to represent cases in which
- an upgrade to a new version of a package with a different sub-slot
- may require dependent packages to be rebuilt. If the sub-slot is
- not specified in \code{SLOT}, it defaults to the regular slot.
- See \featureref{sub-slot}.
- \item[Slot operator dependencies] Package dependencies can specify
- one of the following operators as a suffix, which will affect
- updates of runtime dependencies:
- \begin{description}
- \item[\code{:*}] Any slot value is acceptable. The package
- will not break when its dependency is updated.
- \item[\code{:=}] Any slot value is acceptable, but the package
- can break when its dependency is updated to a different slot
- (or sub-slot).
- \end{description}
- See \featureref{slot-operator-deps}.
- \item[Profile \code{IUSE} injection] Apart from the USE flags
- explicitly listed in \code{IUSE}, additional flags can be
- implicitly provided by profiles.
- See \featureref{profile-iuse-inject}.
- \item[At-most-one-of groups] In \code{REQUIRED_USE} you can use
- "\code{??\ ( flag1 flag2 \dots\ )}" to allow zero or one USE flag
- out of many.
- See \featureref{at-most-one-of}.
- \item[Parallel tests] The default for \code{src_test} runs
- \code{emake} without \code{-j1} now.
- See \featureref{parallel-tests}.
- \item[\code{econf} changes] The \code{econf} function now always
- passes \code{-{}-disable-silent-rules} to \code{configure}.
- See \featureref{econf-options}.
- \item[\code{has_version} and \code{best_version} changes]
- The two helpers support a \code{-{}-host-root} option that causes
- the query to apply to the host root instead of \code{ROOT}.
- See~\featureref{pm-query-options}.
- \item[\code{usex}] Usage for this helper function is
- \code{usex} \emph{<USE flag> [true1] [false1] [true2] [false2]}.
- If the USE flag is set, outputs \emph{[true1][true2]}
- (defaults to \code{yes}), otherwise outputs
- \emph{[false1][false2]} (defaults to \code{no}).
- See \featureref{usex}.
- \item[\code{doheader} and \code{newheader}] These new helper
- functions install the given header file(s) into
- \code{/usr/include}. The \code{-r} option enables recursion for
- \code{doheader}, similar to \code{doins}.
- See \featureref{doheader}.
- \item[\code{new*} standard input] The \code{newins} etc.\ commands
- read from standard input if the first argument is \code{-}
- (a hyphen).
- See \featureref{newfoo-stdin}.
- \item[\code{EBUILD_PHASE_FUNC}] This variable is very similar to
- \code{EBUILD_PHASE}, but contains the name of the current ebuild
- function.
- See \featureref{ebuild-phase-func}.
- \item[Stable use masking/forcing] New files
- \code{use.stable.\allowbreak\{mask,force\}} and
- \code{package.use.stable.\allowbreak\{mask,force\}}
- are supported in profile directories. They are similar to their
- non-\code{stable} counterparts, but act only on packages that
- would be merged due to a stable keyword.
- See \featureref{stablemask}.
-\end{description}
+% \section{EAPI 5 (2012-09-20)}
+% \label{sec:cs:eapi5}
+% \subsection{Additions/Changes}
+% \label{sec:cs:eapi5-additions}
+% \begin{description}
+% \item[Sub-slots] The \code{SLOT} variable and slot dependencies
+% may contain an optional sub-slot part that follows the regular
+% slot, delimited by a \code{/} character; for example
+% \code{2/2.30}. The sub-slot is used to represent cases in which
+% an upgrade to a new version of a package with a different sub-slot
+% may require dependent packages to be rebuilt. If the sub-slot is
+% not specified in \code{SLOT}, it defaults to the regular slot.
+% See \featureref{sub-slot}.
+% \item[Slot operator dependencies] Package dependencies can specify
+% one of the following operators as a suffix, which will affect
+% updates of runtime dependencies:
+% \begin{description}
+% \item[\code{:*}] Any slot value is acceptable. The package
+% will not break when its dependency is updated.
+% \item[\code{:=}] Any slot value is acceptable, but the package
+% can break when its dependency is updated to a different slot
+% (or sub-slot).
+% \end{description}
+% See \featureref{slot-operator-deps}.
+% \item[Profile \code{IUSE} injection] Apart from the USE flags
+% explicitly listed in \code{IUSE}, additional flags can be
+% implicitly provided by profiles.
+% See \featureref{profile-iuse-inject}.
+% \item[At-most-one-of groups] In \code{REQUIRED_USE} you can use
+% "\code{??\ ( flag1 flag2 \dots\ )}" to allow zero or one USE flag
+% out of many.
+% See \featureref{at-most-one-of}.
+% \item[Parallel tests] The default for \code{src_test} runs
+% \code{emake} without \code{-j1} now.
+% See \featureref{parallel-tests}.
+% \item[\code{econf} changes] The \code{econf} function now always
+% passes \code{-{}-disable-silent-rules} to \code{configure}.
+% See \featureref{econf-options}.
+% \item[\code{has_version} and \code{best_version} changes]
+% The two helpers support a \code{-{}-host-root} option that causes
+% the query to apply to the host root instead of \code{ROOT}.
+% See~\featureref{pm-query-options}.
+% \item[\code{usex}] Usage for this helper function is
+% \code{usex} \emph{<USE flag> [true1] [false1] [true2] [false2]}.
+% If the USE flag is set, outputs \emph{[true1][true2]}
+% (defaults to \code{yes}), otherwise outputs
+% \emph{[false1][false2]} (defaults to \code{no}).
+% See \featureref{usex}.
+% \item[\code{doheader} and \code{newheader}] These new helper
+% functions install the given header file(s) into
+% \code{/usr/include}. The \code{-r} option enables recursion for
+% \code{doheader}, similar to \code{doins}.
+% See \featureref{doheader}.
+% \item[\code{new*} standard input] The \code{newins} etc.\ commands
+% read from standard input if the first argument is \code{-}
+% (a hyphen).
+% See \featureref{newfoo-stdin}.
+% \item[\code{EBUILD_PHASE_FUNC}] This variable is very similar to
+% \code{EBUILD_PHASE}, but contains the name of the current ebuild
+% function.
+% See \featureref{ebuild-phase-func}.
+% \item[Stable use masking/forcing] New files
+% \code{use.stable.\allowbreak\{mask,force\}} and
+% \code{package.use.stable.\allowbreak\{mask,force\}}
+% are supported in profile directories. They are similar to their
+% non-\code{stable} counterparts, but act only on packages that
+% would be merged due to a stable keyword.
+% See \featureref{stablemask}.
+% \end{description}
\section{EAPI 6 (2015-11-13)}
\label{sec:cs:eapi6}
@@ -348,10 +348,10 @@ differences between these previous EAPIs.
which applies patches from the \code{PATCHES} variable with the
new \code{eapply} command, and user-provided patches with
\code{eapply_user}.
- See \featureref{src-prepare-6}.
+ See \featureref{src-prepare}.
\item[\code{src_install}] The default implementation uses the new
\code{einstalldocs} function for installing documentation.
- See \featureref{src-install-6}.
+ See \featureref{src-install}.
\item[\code{nonfatal die}] When \code{die} or \code{assert} are
called under the \code{nonfatal} command and with the \code{-n}
option, they will not abort the build process but return with an
@@ -517,6 +517,66 @@ differences between these previous EAPIs.
used as replacement.
See \featureref{banned-commands}.
\end{description}
+
+\section{EAPI 8 (2021-06-13)}
+\label{sec:cs:eapi8}
+\subsection{Additions/Changes}
+\label{sec:cs:eapi8-additions}
+\begin{description}
+ \item[\code{profiles/updates} directory] Arbitrary filenames
+ are now allowed, instead of strict naming by quarters
+ (like \code{2Q-2021}). See \featureref{updates-filenames}.
+ \item[Bash version] Ebuilds can use features of Bash version 5.0
+ (was 4.2 before). See \featureref{bash-version}.
+ \item[Selective fetch/mirror restriction] In \code{SRC_URI},
+ adding a \code{fetch+} or \code{mirror+} prefix to an individual
+ URI means that the file may be fetched or mirrored. This overrides
+ the corresponding global settings in the \code{RESTRICT} variable.
+ See \featureref{uri-restrict}.
+ \item[\code{IDEPEND}] This variable specifies install-time
+ dependencies on packages used in (e.\,g.) \code{pkg_postinst}.
+ In a cross-compilation environment, these are dependencies for
+ native tools (\code{CBUILD}). See \featureref{idepend}.
+ \item[\code{pkg_*} phases] The initial working directory is
+ guaranteed to be empty. See \featureref{phase-function-dir}.
+ \item[\code{src_prepare}] Items in the \code{PATCHES} variable are
+ interpreted as files, even if their name begins with a hyphen.
+ See \featureref{src-prepare}.
+ \item[\code{PROPERTIES} and \code{RESTRICT}] These variables are
+ accumulated across the ebuild and inherited eclasses, like
+ \code{IUSE}, \code{REQUIRED\_USE}, and \code{*DEPEND} were before.
+ See \featureref{accumulate-vars}.
+ \item[\code{econf}] If supported, options
+ \code{-{}-disable-static} and
+ \code{-{}-datarootdir=\$\{EPREFIX\}/usr/share} are passed
+ to configure, respectively. See \featureref{econf-options}.
+ \item[\code{dosym}] With the new option \code{-r}, an absolute
+ path specified for the link target will be converted to a path
+ relative to the link location. See \featureref{dosym-relative}.
+ \item[\code{insopts}] Commands \code{doconfd}, \code{doenvd},
+ \code{doheader} install files with fixed mode 0644, i.\,e.,
+ they are no longer affected by \code{insopts}.
+ See \featureref{insopts}.
+ \item[\code{exeopts}] Command \code{doinitd} installs files
+ with fixed mode 0755, i.\,e., it is no longer affected by
+ \code{exeopts}. See \featureref{exeopts}.
+ \item[\code{usev}] This helper has an optional second argument
+ now: \code{usev} \emph{<flag> [true]}. If the flag is set,
+ outputs \emph{[true]}, or the flag's name if called with only one
+ argument. Otherwise outputs nothing. See \featureref{usev}.
+\end{description}
+\subsection{Removals/Bans}
+\label{sec:cs:eapi8-removalsbans}
+\begin{description}
+ \item[\code{useq}] No longer allowed. Use regular \code{use} as
+ a drop-in replacement. See \featureref{banned-commands}.
+ \item[\code{hasv} and \code{hasq}] No longer allowed. Regular
+ \code{has} should be used instead.
+ See \featureref{banned-commands}.
+ \item[\code{unpack}] No longer supports unpacking of 7-Zip, RAR,
+ and LHA archives. See \featureref{unpack-extensions}.
+\end{description}
+
\end{document}
% vim: set filetype=tex fileencoding=utf8 et tw=70 spell spelllang=en :
diff --git a/eapi-differences.tex b/eapi-differences.tex
index bc49a33..900f415 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -1,12 +1,12 @@
\chapter{Feature Availability by EAPI}
\note{This chapter is informative and for convenience only. Refer to the main text for specifics.
-For lack of space, EAPIs 0, 1, 2, and~3 have been consolidated into a single column in the table
+For lack of space, EAPIs 0, 1, 2, 3, and~4 have been consolidated into a single column in the table
below; entries marked with an asterisk differ between these EAPIs. See the 2012-09-20 edition
of this document for a complete table of previous EAPIs.}
% 2012-09-20 (EAPI 5) edition has a table of EAPIs 0 to 5
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{landscape}
\begin{longtable}{llP{7.5em}P{7.5em}P{7.5em}P{7.5em}P{7.5em}}
\caption{Features in EAPIs}\\
@@ -16,11 +16,11 @@ of this document for a complete table of previous EAPIs.}
\multicolumn{5}{c}{\textbf{EAPIs}} \\
\multicolumn{1}{c}{} &
\multicolumn{1}{c}{} &
-\multicolumn{1}{c}{0, 1, 2, 3} &
-\multicolumn{1}{c}{4} &
+\multicolumn{1}{c}{0, 1, 2, 3, 4} &
\multicolumn{1}{c}{5} &
\multicolumn{1}{c}{6} &
-\multicolumn{1}{c}{7} \\
+\multicolumn{1}{c}{7} &
+\multicolumn{1}{c}{8} \\
\midrule
\endfirsthead
\midrule
@@ -29,11 +29,11 @@ of this document for a complete table of previous EAPIs.}
\multicolumn{5}{c}{\textbf{EAPIs}} \\
\multicolumn{1}{c}{} &
\multicolumn{1}{c}{} &
-\multicolumn{1}{c}{0, 1, 2, 3} &
-\multicolumn{1}{c}{4} &
+\multicolumn{1}{c}{0, 1, 2, 3, 4} &
\multicolumn{1}{c}{5} &
\multicolumn{1}{c}{6} &
-\multicolumn{1}{c}{7} \\
+\multicolumn{1}{c}{7} &
+\multicolumn{1}{c}{8} \\
\midrule
\endhead
\midrule
@@ -42,56 +42,65 @@ of this document for a complete table of previous EAPIs.}
\endlastfoot
\t{package.mask} directory & \compactfeatureref{package-mask-dir} &
+ No & No & No & Yes & Yes \\
+
+Less strict filenames in \t{updates} & \compactfeatureref{updates-filenames} &
No & No & No & No & Yes \\
Profile files as directories & \compactfeatureref{profile-file-dirs} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{package.provided} & \compactfeatureref{package-provided} &
- Optional & Optional & Optional & Optional & No \\
+ Optional & Optional & Optional & No & No \\
Stable use masking/forcing & \compactfeatureref{stablemask} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
Bash version & \compactfeatureref{bash-version} &
- 3.2 & 3.2 & 3.2 & 4.2 & 4.2 \\
+ 3.2 & 3.2 & 4.2 & 4.2 & 5.0 \\
\t{failglob} in global scope & \compactfeatureref{failglob} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{IUSE} defaults & \compactfeatureref{iuse-defaults} &
* & Yes & Yes & Yes & Yes \\
\t{REQUIRED_USE} & \compactfeatureref{required-use} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{PROPERTIES} & \compactfeatureref{properties} &
- Optionally & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{SRC_URI} arrows & \compactfeatureref{src-uri-arrows} &
* & Yes & Yes & Yes & Yes \\
+Selective URI restrictions & \compactfeatureref{uri-restrict} &
+ No & No & No & No & Yes \\
+
\t{RDEPEND=DEPEND} & \compactfeatureref{rdepend-depend} &
- Yes & No & No & No & No \\
+ * & No & No & No & No \\
\t{DEFINED_PHASES} & \compactfeatureref{defined-phases} &
- Optionally & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{BDEPEND} & \compactfeatureref{bdepend} &
+ No & No & No & Yes & Yes \\
+
+\t{IDEPEND} & \compactfeatureref{idepend} &
No & No & No & No & Yes \\
\t{??\ ( )} groups & \compactfeatureref{at-most-one-of} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
Empty \t{||}, \t{\textasciicircum\textasciicircum} groups match &
\compactfeatureref{empty-dep-groups} &
- Yes & Yes & Yes & Yes & No \\
+ Yes & Yes & Yes & No & No \\
Slot dependencies & \compactfeatureref{slot-deps} &
- * & Named & Named and Operator & Named and Operator & Named and Operator \\
+ * & Named and Operator & Named and Operator & Named and Operator & Named and Operator \\
Sub-slots & \compactfeatureref{sub-slot} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
Use dependencies & \compactfeatureref{use-deps} &
* & 4-style & 4-style & 4-style & 4-style \\
@@ -102,17 +111,20 @@ Use dependencies & \compactfeatureref{use-deps} &
\t{!!}\ blockers & \compactfeatureref{bang-strength} &
* & Strong & Strong & Strong & Strong \\
+Working directory in \t{pkg_*} phases & \compactfeatureref{phase-function-dir} &
+ Any & Any & Any & Any & Empty \\
+
\t{S} to \t{WORKDIR} fallback & \compactfeatureref{s-workdir-fallback} &
- Always & Conditional & Conditional & Conditional & Conditional \\
+ * & Conditional & Conditional & Conditional & Conditional \\
\t{pkg_pretend} & \compactfeatureref{pkg-pretend} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{src_prepare} & \compactfeatureref{src-prepare} &
* & Yes & Yes & Yes & Yes \\
\t{src_prepare} style & \compactfeatureref{src-prepare} &
- * & no-op & no-op & 6 & 6 \\
+ * & no-op & 6 & 6 & 8 \\
\t{src_configure} & \compactfeatureref{src-configure} &
* & Yes & Yes & Yes & Yes \\
@@ -121,13 +133,13 @@ Use dependencies & \compactfeatureref{use-deps} &
* & 2 & 2 & 2 & 2 \\
Parallel tests & \compactfeatureref{parallel-tests} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{src_install} style & \compactfeatureref{src-install} &
- no-op & 4 & 4 & 6 & 6 \\
+ * & 4 & 6 & 6 & 6 \\
\t{pkg_info} & \compactfeatureref{pkg-info} &
- Installed & Both & Both & Both & Both \\
+ * & Both & Both & Both & Both \\
\t{default_} phase functions & \compactfeatureref{default-phase-funcs} &
* &
@@ -140,122 +152,137 @@ Parallel tests & \compactfeatureref{parallel-tests} &
\t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
\t{src_compile}, \t{src_test}, \t{src_install} \\
+Accumulate \t{RESTRICT} etc. & \compactfeatureref{accumulate-vars} &
+ No & No & No & No & Yes \\
+
\t{AA} & \compactfeatureref{aa} &
- Yes & No & No & No & No \\
+ * & No & No & No & No \\
\t{PORTDIR} & \compactfeatureref{portdir} &
- Yes & Yes & Yes & Yes & No \\
+ Yes & Yes & Yes & No & No \\
\t{ECLASSDIR} & \compactfeatureref{eclassdir} &
- Yes & Yes & Yes & Yes & No \\
+ Yes & Yes & Yes & No & No \\
\t{SYSROOT}, \t{ESYSROOT} & \compactfeatureref{sysroot} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{BROOT} & \compactfeatureref{broot} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{DESTTREE} & \compactfeatureref{desttree} &
- Yes & Yes & Yes & Yes & No \\
+ Yes & Yes & Yes & No & No \\
\t{INSDESTTREE} & \compactfeatureref{insdesttree} &
- Yes & Yes & Yes & Yes & No \\
+ Yes & Yes & Yes & No & No \\
\t{KV} & \compactfeatureref{kv} &
- Yes & No & No & No & No \\
+ * & No & No & No & No \\
\t{EBUILD_PHASE_FUNC} & \compactfeatureref{ebuild-phase-func} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{MERGE_TYPE} & \compactfeatureref{merge-type} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{ENV_UNSET} & \compactfeatureref{env-unset} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
Sane locale settings & \compactfeatureref{locale-settings} &
- Undefined & Undefined & Undefined & Yes & Yes \\
+ Undefined & Undefined & Yes & Yes & Yes \\
Profile \t{IUSE} injection & \compactfeatureref{profile-iuse-inject} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{REPLACING_VERSIONS} & \compactfeatureref{replace-version-vars} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{REPLACED_BY_VERSION} & \compactfeatureref{replace-version-vars} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{EPREFIX}, \t{ED}, \t{EROOT} & \compactfeatureref{offset-prefix-vars} &
* & Yes & Yes & Yes & Yes \\
Trailing slash in \t{D} etc. & \compactfeatureref{trailing-slash} &
- Yes & Yes & Yes & Yes & No \\
+ Yes & Yes & Yes & No & No \\
GNU \t{patch} version & \compactfeatureref{gnu-patch} &
- Any & Any & Any & Any & 2.7 \\
+ Any & Any & Any & 2.7 & 2.7 \\
\t{find} is GNU? & \compactfeatureref{gnu-find} &
- Undefined & Undefined & Yes & Yes & Yes \\
+ Undefined & Yes & Yes & Yes & Yes \\
Most utilities die & \compactfeatureref{die-on-failure} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{nonfatal} & \compactfeatureref{nonfatal} &
- No & Yes & Yes & Yes & Function / external \\
+ * & Yes & Yes & Function / external & Function / external \\
\t{dohard} & \compactfeatureref{banned-commands} &
- Yes & Banned & Banned & Banned & Banned \\
+ * & Banned & Banned & Banned & Banned \\
\t{dosed} & \compactfeatureref{banned-commands} &
- Yes & Banned & Banned & Banned & Banned \\
+ * & Banned & Banned & Banned & Banned \\
\t{einstall} & \compactfeatureref{banned-commands} &
- Yes & Yes & Yes & Banned & Banned \\
+ Yes & Yes & Banned & Banned & Banned \\
\t{dohtml} & \compactfeatureref{banned-commands} &
- Yes & Yes & Yes & Yes & Banned \\
+ Yes & Yes & Yes & Banned & Banned \\
\t{dolib} & \compactfeatureref{banned-commands} &
- Yes & Yes & Yes & Yes & Banned \\
+ Yes & Yes & Yes & Banned & Banned \\
\t{libopts} & \compactfeatureref{banned-commands} &
+ Yes & Yes & Yes & Banned & Banned \\
+
+\t{useq} & \compactfeatureref{banned-commands} &
+ Yes & Yes & Yes & Yes & Banned \\
+
+\t{hasv} & \compactfeatureref{banned-commands} &
+ Yes & Yes & Yes & Yes & Banned \\
+
+\t{hasq} & \compactfeatureref{banned-commands} &
Yes & Yes & Yes & Yes & Banned \\
Query command options & \compactfeatureref{pm-query-options} &
- None & None & \t{-{}-host-root} & \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} \\
+ None & \t{-{}-host-root} & \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} &
+ \t{-b}, \t{-d}, \t{-r} \\
Output commands use stdout & \compactfeatureref{output-no-stdout} &
- Yes & Yes & Yes & Yes & No \\
+ Yes & Yes & Yes & No & No \\
\t{eqawarn} & \compactfeatureref{eqawarn} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{die -n} & \compactfeatureref{nonfatal-die} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{die} in subshell & \compactfeatureref{subshell-die} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{eapply} & \compactfeatureref{eapply} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{eapply_user} & \compactfeatureref{eapply-user} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{econf} arguments & \compactfeatureref{econf-options} &
- None & disable dependency tracking &
+ * &
disable dependency tracking, disable silent rules &
disable dependency tracking, disable silent rules, docdir, htmldir &
- disable dependency tracking, disable silent rules, docdir, htmldir, with sysroot \\
+ disable dependency tracking, disable silent rules, docdir, htmldir, with sysroot &
+ disable dependency tracking, disable silent rules, disable static,
+ datarootdir, docdir, htmldir, with sysroot \\
\t{dodoc -r} & \compactfeatureref{dodoc} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{doheader} & \compactfeatureref{doheader} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{doins} handles symlinks & \compactfeatureref{doins} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{doman} languages & \compactfeatureref{doman-langs} &
* & Yes & Yes & Yes & Yes \\
@@ -264,55 +291,76 @@ Output commands use stdout & \compactfeatureref{output-no-stdout} &
* & Yes & Yes & Yes & Yes \\
\t{domo} destination path & \compactfeatureref{domo-path} &
- \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{/usr} \\
+ \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{/usr} & \t{/usr} \\
+
+\t{dosym -r} & \compactfeatureref{dosym-relative} &
+ No & No & No & No & Yes \\
\t{new*} support stdin & \compactfeatureref{newfoo-stdin} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
+
+\t{insopts} affects misc.\ commands & \compactfeatureref{insopts} &
+ Yes & Yes & Yes & Yes & No \\
+
+\t{exeopts} affects \t{doinitd} & \compactfeatureref{exeopts} &
+ Yes & Yes & Yes & Yes & No \\
Controllable compression & \compactfeatureref{docompress} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{docompress} & \compactfeatureref{docompress} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
Controllable stripping & \compactfeatureref{dostrip} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{dostrip} & \compactfeatureref{dostrip} &
+ No & No & No & Yes & Yes \\
+
+\t{usev} second arg & \compactfeatureref{usev} &
No & No & No & No & Yes \\
\t{use_with} empty third arg & \compactfeatureref{use-with} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{usex} & \compactfeatureref{usex} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{in_iuse} & \compactfeatureref{in-iuse} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{ver_*} commands & \compactfeatureref{ver-commands} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{unpack} absolute paths & \compactfeatureref{unpack-absolute} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{unpack} support for \t{xz} & \compactfeatureref{unpack-extensions} &
* & Yes & Yes & Yes & Yes \\
\t{unpack} support for \t{txz} & \compactfeatureref{unpack-extensions} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
+
+\t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
+ Yes & Yes & Yes & Yes & No \\
+
+\t{unpack} support for \t{lha} & \compactfeatureref{unpack-extensions} &
+ Yes & Yes & Yes & Yes & No \\
+
+\t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
+ Yes & Yes & Yes & Yes & No \\
\t{unpack} case-insensitive & \compactfeatureref{unpack-ignore-case} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{default} function & \compactfeatureref{default-func} &
* & Yes & Yes & Yes & Yes \\
\t{einstalldocs} & \compactfeatureref{einstalldocs} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{get_libdir} & \compactfeatureref{get-libdir} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
File mtimes preserved & \compactfeatureref{mtime-preserve} &
* & Yes & Yes & Yes & Yes \\
@@ -335,7 +383,7 @@ EAPI 1 is EAPI 0 with the following changes:
\begin{compactitem}
\item \t{IUSE} defaults, \featureref{iuse-defaults}.
\item Slot dependencies, \featureref{slot-deps}.
-\item Different \t{src_compile} implementation, \featureref{src-compile-1}.
+\item Different \t{src_compile} implementation, \featureref{src-compile}.
\end{compactitem}
\section{EAPI 2}
@@ -348,7 +396,7 @@ EAPI 2 is EAPI 1 with the following changes:
\item \t{!}\ and \t{!!}\ blockers, \featureref{bang-strength}.
\item \t{src_prepare}, \featureref{src-prepare}.
\item \t{src_configure}, \featureref{src-configure}.
-\item Different \t{src_compile} implementation, \featureref{src-compile-2}.
+\item Different \t{src_compile} implementation, \featureref{src-compile}.
\item \t{default_} phase functions for phases \t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare},
\t{src_configure}, \t{src_compile} and \t{src_test}; \featureref{default-phase-funcs}.
\item \t{doman} language detection by filename, \featureref{doman-langs}.
@@ -377,7 +425,7 @@ EAPI 4 is EAPI 3 with the following changes:
\item Use dependency defaults, \featureref{use-dep-defaults}.
\item \t{S} to \t{WORKDIR} fallback restricted, \featureref{s-workdir-fallback}.
\item \t{pkg_pretend}, \featureref{pkg-pretend}.
-\item Default \t{src_install} no longer a no-op, \featureref{src-install-4}.
+\item Default \t{src_install} no longer a no-op, \featureref{src-install}.
\item \t{pkg_info} can run on non-installed packages, \featureref{pkg-info}.
\item \t{AA} is gone, \featureref{aa}.
\item \t{KV} is gone, \featureref{kv}.
@@ -422,8 +470,8 @@ EAPI 6 is EAPI 5 with the following changes:
\begin{compactitem}
\item Bash version is 4.2, \featureref{bash-version}.
\item \t{failglob} is enabled in global scope, \featureref{failglob}.
-\item Default \t{src_prepare} no longer a no-op, \featureref{src-prepare-6}.
-\item Different \t{src_install} implementation, \featureref{src-install-6}.
+\item Default \t{src_prepare} no longer a no-op, \featureref{src-prepare}.
+\item Different \t{src_install} implementation, \featureref{src-install}.
\item \t{LC_CTYPE} and \t{LC_COLLATE} compatible with POSIX locale, \featureref{locale-settings}.
\item \t{einstall} banned, \featureref{banned-commands}.
\item \t{die} and \t{assert} called with \t{-n} respect \t{nonfatal}, \featureref{nonfatal-die}.
@@ -474,7 +522,30 @@ EAPI 7 is EAPI 6 with the following changes:
\item Version manipulation and comparison commands, \featureref{ver-commands}.
\end{compactitem}
-\ChangeWhenAddingAnEAPI{7}
+\section{EAPI 8}
+
+EAPI 8 is EAPI 7 with the following changes:
+
+\begin{compactitem}
+\item Less strict naming rules for files in \t{updates} directory, \featureref{updates-filenames}.
+\item Bash version is 5.0, \featureref{bash-version}.
+\item Selective fetch/mirror restriction, \featureref{uri-restrict}.
+\item \t{IDEPEND}, \featureref{idepend}.
+\item Empty working directory in \t{pkg_*} phase functions, \featureref{phase-function-dir}.
+\item Different \t{src_prepare} implementation, \featureref{src-prepare}.
+\item \t{PROPERTIES} and \t{RESTRICT} accumulated across eclasses, \featureref{accumulate-vars}.
+\item \t{useq} banned, \featureref{banned-commands}.
+\item \t{hasv} and \t{hasq} banned, \featureref{banned-commands}.
+\item \t{econf} adds \t{-{}-datarootdir}, \featureref{econf-options}.
+\item \t{econf} adds \t{-{}-disable-static}, \featureref{econf-options}.
+\item \t{dosym} can create relative paths, \featureref{dosym-relative}.
+\item \t{insopts} no longer affects \t{doconfd}, \t{doenvd} and \t{doheader}, \featureref{insopts}.
+\item \t{exeopts} no longer affects \t{doinitd}, \featureref{exeopts}.
+\item \t{usev} supports an optional second argument, \featureref{usev}.
+\item \t{unpack} no longer supports \t{.7z}, \t{.rar}, \t{.lha}, \featureref{unpack-extensions}.
+\end{compactitem}
+
+\ChangeWhenAddingAnEAPI{8}
% vim: set filetype=tex fileencoding=utf8 et tw=100 spell spelllang=en :
diff --git a/eapis.tex b/eapis.tex
index 6c015a2..a6c8109 100644
--- a/eapis.tex
+++ b/eapis.tex
@@ -17,25 +17,13 @@ EAPIs are also used for profile directories, as described in section~\ref{sec:pr
\section{Defined EAPIs}
-The following EAPIs are defined by this specification:
-
-\ChangeWhenAddingAnEAPI{7}
-\begin{compactdesc}
-\item[0] The `original' base EAPI.
-\item[1] EAPI `1' contains a number of extensions to EAPI `0'.
-\item[2] EAPI `2' contains a number of extensions to EAPI `1'.
-\item[3] EAPI `3' contains a number of extensions to EAPI `2'.
-\item[4] EAPI `4' contains a number of extensions to EAPI `3'.
-\item[5] EAPI `5' contains a number of extensions to EAPI `4'.
-\item[6] EAPI `6' contains a number of extensions to EAPI `5'.
-\item[7] EAPI `7' contains a number of extensions to EAPI `6'.
-\end{compactdesc}
+\ChangeWhenAddingAnEAPI{8}
+This specification defines EAPIs `0', `1', `2', `3', `4', `5', `6', `7', and~`8'.
+EAPI~`0' is the `original' base EAPI\@. Each of the later EAPIs contains a number of extensions
+to its predecessor.
Except where explicitly noted, everything in this specification
-applies to all of the above EAPIs.%
-\footnote{Another unofficial EAPI `kdebuild-1' was a series of
- extensions to EAPI `1' formerly used by the Gentoo KDE project.
- Some of its features have been included in EAPI `2' or later.}
+applies to all of the above EAPIs.
\section{Reserved EAPIs}
diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 006b8e4..ddea935 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -148,8 +148,9 @@ variable.
Ditto &
No &
\featurelabel{broot} The absolute path to the root directory containing build dependencies
- satisfied by \t{BDEPEND}, typically executable build tools. This includes any applicable offset
- prefix. Only for EAPIs listed in table~\ref{tab:offset-env-vars-table} as supporting \t{BROOT}.
+ satisfied by \t{BDEPEND} and \t{IDEPEND}, typically executable build tools. This includes any
+ applicable offset prefix. Only for EAPIs listed in table~\ref{tab:offset-env-vars-table} as
+ supporting \t{BROOT}.
\\
\t{T} &
All &
@@ -262,7 +263,7 @@ variable.
\end{longtable}
\end{landscape}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting various added env variables}
\label{tab:added-env-vars-table}
\begin{tabular}{lllllll}
@@ -278,12 +279,12 @@ variable.
0, 1, 2, 3 & No & No & No & No & No & No \\
4 & Yes & Yes & Yes & No & No & No \\
5, 6 & Yes & Yes & Yes & Yes & No & No \\
- 7 & Yes & Yes & Yes & Yes & Yes & Yes \\
+ 7, 8 & Yes & Yes & Yes & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting various removed env variables}
\label{tab:removed-env-vars-table}
\begin{tabular}{lllllll}
@@ -298,12 +299,12 @@ variable.
\midrule
0, 1, 2, 3 & Yes & Yes & Yes & Yes & Yes & Yes \\
4, 5, 6 & No & No & Yes & Yes & Yes & Yes \\
- 7 & No & No & No & No & No & No \\
+ 7, 8 & No & No & No & No & No & No \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting offset-prefix env variables}
\label{tab:offset-env-vars-table}
\begin{tabular}{lllll}
@@ -316,7 +317,7 @@ variable.
\midrule
0, 1, 2 & No & No & No & No \\
3, 4, 5, 6 & Yes & Yes & Yes & No \\
- 7 & Yes & Yes & Yes & Yes \\
+ 7, 8 & Yes & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -340,7 +341,7 @@ must be unset, for EAPIs listed in table~\ref{tab:profile-env-unset} as supporti
ASCII range (U+0000 to U+007F) are concerned. Only for EAPIs listed in such a manner in
table~\ref{tab:locale-settings}.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Locale settings for EAPIs}
\label{tab:locale-settings}
\begin{tabular}{ll}
@@ -349,7 +350,7 @@ table~\ref{tab:locale-settings}.
\multicolumn{1}{c}{\textbf{Sane \t{LC_CTYPE} and \t{LC_COLLATE}?}} \\
\midrule
0, 1, 2, 3, 4, 5 & Undefined \\
- 6, 7 & Yes \\
+ 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -435,7 +436,7 @@ contain at most one value.
\subsection{Offset-prefix variables}
\label{sec:offset-vars}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting offset-prefix}
\label{tab:offset-support-table}
\begin{tabular}{ll}
@@ -444,7 +445,7 @@ contain at most one value.
\multicolumn{1}{c}{\textbf{Supports offset-prefix?}}\\
\midrule
0, 1, 2 & No \\
- 3, 4, 5, 6, 7 & Yes \\
+ 3, 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -475,7 +476,7 @@ specifies the system root directory, it will consist of a single slash (\t{/}).
a trailing slash, the package manager guarantees that a trailing slash will never be present.
If the path specifies the system root directory, it will be empty.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Variables that always or never end with a trailing slash}
\label{tab:trailing-slash}
\begin{tabular}{lll}
@@ -487,7 +488,7 @@ If the path specifies the system root directory, it will be empty.
\t{D}, \t{ED} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & always & always \\
- 7 & never & never \\
+ 7, 8 & never & never \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/ebuild-format.tex b/ebuild-format.tex
index d53d773..25ba28e 100644
--- a/ebuild-format.tex
+++ b/ebuild-format.tex
@@ -11,12 +11,14 @@ compatibility settings (e.\,g.\ the \t{BASH_COMPAT} variable) are not exported t
option of bash is set in the global scope of ebuilds. If set, failed pattern matches during
filename expansion result in an error when the ebuild is being sourced.
+Name reference variables (introduced in bash version~4.3) must not be used, except in local scope.
+
The file encoding must be UTF-8 with Unix-style newlines. When sourced, the ebuild must define
certain variables and functions (see chapters~\ref{ch:ebuild-vars} and~\ref{ch:ebuild-functions}
for specific information), and must not call any external programs, write anything to standard
output or standard error, or modify the state of the system in any way.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Bash version and options}
\label{tab:bash-version}
\begin{tabular}{lll}
@@ -27,6 +29,7 @@ output or standard error, or modify the state of the system in any way.
\midrule
0, 1, 2, 3, 4, 5 & 3.2 & No \\
6, 7 & 4.2 & Yes \\
+ 8 & 5.0 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/ebuild-functions.tex b/ebuild-functions.tex
index 4e691c5..0c745c3 100644
--- a/ebuild-functions.tex
+++ b/ebuild-functions.tex
@@ -22,11 +22,13 @@ Ebuilds must not call nor assume the existence of any phase functions.
\subsection{Initial working directories}
\label{sec:s-to-workdir-fallback}
-Some functions may assume that their initial working directory is set to a particular location;
-these are noted below. If no initial working directory is mandated, it may be set to anything and
-the ebuild must not rely upon a particular location for it. The ebuild \emph{may} assume that the
-initial working directory for any phase is a trusted location that may only be written to by a
-privileged user and group.
+\featurelabel{phase-function-dir} Some functions may assume that their initial working directory is
+set to a particular location; these are noted below. If no initial working directory is mandated,
+then for EAPIs listed in table~\ref{tab:function-dirs} as having an empty directory, it must be set
+to a dedicated directory that is empty at the start of the function and may be read-only. For other
+EAPIs, it may be set to anything. The ebuild must not rely upon a particular location for it.
+The ebuild \emph{may} assume that the initial working directory for any phase is a trusted location
+that may only be written to by a privileged user and group.
\featurelabel{s-workdir-fallback} Some functions are described as having an initial working
directory of \t{S} with an error or fallback to \t{WORKDIR}\@. For EAPIs listed in
@@ -44,7 +46,21 @@ fallback to \t{WORKDIR} is used:
executed, are in \t{DEFINED_PHASES}.
\end{compactitem}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{Initial working directory in \t{pkg_*} phase functions for EAPIs}
+ \label{tab:function-dirs}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Initial working directory?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6, 7 & Any \\
+ 8 & Empty \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs with \t{S} to \t{WORKDIR} fallbacks}
\label{tab:s-fallback-table}
\begin{tabular}{ll}
@@ -53,7 +69,7 @@ fallback to \t{WORKDIR} is used:
\multicolumn{1}{c}{\textbf{Fallback to \t{WORKDIR} permitted?}} \\
\midrule
0, 1, 2, 3 & Always \\
- 4, 5, 6, 7 & Conditional error \\
+ 4, 5, 6, 7, 8 & Conditional error \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -75,7 +91,7 @@ before the next phase is executed.
\t{pkg_pretend} must not write to the filesystem.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{pkg_pretend}}
\label{tab:pkg-pretend-table}
\begin{tabular}{ll}
@@ -84,7 +100,7 @@ before the next phase is executed.
\multicolumn{1}{c}{\textbf{Supports \t{pkg_pretend}?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6, 7 & Yes \\
+ 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -104,10 +120,10 @@ The \t{src_unpack} function extracts all of the package's sources. In EAPIs lack
\t{src_prepare}, it may also apply patches and set up the package's build system for further use.
The initial working directory must be \t{WORKDIR}, and the default implementation used when
-the ebuild lacks the \t{src_unpack} function shall behave as:
+the ebuild lacks the \t{src_unpack} function shall behave as in listing~\ref{lst:src-unpack-0}.
\begin{listing}[H]
-\caption{\t{src_unpack}}
+\caption{\t{src_unpack}} \label{lst:src-unpack-0}
\begin{verbatim}
src_unpack() {
if [[ -n ${A} ]]; then
@@ -126,28 +142,14 @@ post-unpack source preparation.
The initial working directory is \t{S}, with an error or fallback to \t{WORKDIR} as discussed in
section~\ref{sec:s-to-workdir-fallback}.
-\featurelabel{src-prepare-6} For EAPIs listed in table~\ref{tab:src-prepare-table} as using format
-6, the default implementation used when the ebuild lacks the \t{src_prepare} function shall behave
-as:
-
-\begin{listing}[H]
-\caption{\t{src_prepare}, format~6}
-\begin{verbatim}
-src_prepare() {
- if [[ $(declare -p PATCHES 2>/dev/null) == "declare -a"* ]]; then
- [[ -n ${PATCHES[@]} ]] && eapply "${PATCHES[@]}"
- else
- [[ -n ${PATCHES} ]] && eapply ${PATCHES}
- fi
- eapply_user
-}
-\end{verbatim}
-\end{listing}
+For EAPIs listed in table~\ref{tab:src-prepare-table} as using format 6 or~8, the default
+implementation used when the ebuild lacks the \t{src_prepare} function shall behave as in
+listing~\ref{lst:src-prepare-6} or listing~\ref{lst:src-prepare-8}, respectively.
For other EAPIs supporting \t{src_prepare}, the default implementation used when the ebuild lacks
the \t{src_prepare} function is a no-op.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{\t{src_prepare} support and behaviour for EAPIs}
\label{tab:src-prepare-table}
\begin{tabular}{lll}
@@ -159,10 +161,39 @@ the \t{src_prepare} function is a no-op.
0, 1 & No & Not applicable \\
2, 3, 4, 5 & Yes & no-op \\
6, 7 & Yes & 6 \\
+ 8 & Yes & 8 \\
\bottomrule
\end{tabular}
\end{centertable}
+\begin{listing}[H]
+\caption{\t{src_prepare}, format~6} \label{lst:src-prepare-6}
+\begin{verbatim}
+src_prepare() {
+ if [[ $(declare -p PATCHES 2>/dev/null) == "declare -a"* ]]; then
+ [[ -n ${PATCHES[@]} ]] && eapply "${PATCHES[@]}"
+ else
+ [[ -n ${PATCHES} ]] && eapply ${PATCHES}
+ fi
+ eapply_user
+}
+\end{verbatim}
+\end{listing}
+
+\begin{listing}[H]
+\caption{\t{src_prepare}, format~8} \label{lst:src-prepare-8}
+\begin{verbatim}
+src_prepare() {
+ if [[ ${PATCHES@a} == *a* ]]; then
+ [[ -n ${PATCHES[@]} ]] && eapply -- "${PATCHES[@]}"
+ else
+ [[ -n ${PATCHES} ]] && eapply -- ${PATCHES}
+ fi
+ eapply_user
+}
+\end{verbatim}
+\end{listing}
+
\subsection{src_configure}
\featurelabel{src-configure} The \t{src_configure} function is only called for EAPIs listed in
@@ -172,20 +203,10 @@ The initial working directory is \t{S}, with an error or fallback to \t{WORKDIR}
section~\ref{sec:s-to-workdir-fallback}.
The \t{src_configure} function configures the package's build environment. The default
-implementation used when the ebuild lacks the \t{src_configure} function shall behave as:
-
-\begin{listing}[H]
-\caption{\t{src_configure}}
-\begin{verbatim}
-src_configure() {
- if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then
- econf
- fi
-}
-\end{verbatim}
-\end{listing}
+implementation used when the ebuild lacks the \t{src_configure} function shall behave as in
+listing~\ref{lst:src-configure-2}.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{src_configure}}
\label{tab:src-configure-table}
\begin{tabular}{ll}
@@ -193,12 +214,23 @@ src_configure() {
\multicolumn{1}{c}{\textbf{EAPI}} &
\multicolumn{1}{c}{\textbf{Supports \t{src_configure}?}} \\
\midrule
- 0, 1 & No \\
- 2, 3, 4, 5, 6, 7 & Yes \\
+ 0, 1 & No \\
+ 2, 3, 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
+\begin{listing}[H]
+\caption{\t{src_configure}} \label{lst:src-configure-2}
+\begin{verbatim}
+src_configure() {
+ if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then
+ econf
+ fi
+}
+\end{verbatim}
+\end{listing}
+
\subsection{src_compile}
\featurelabel{src-compile} The \t{src_compile} function configures the package's build environment
@@ -207,12 +239,28 @@ in EAPIs lacking \t{src_configure}, and builds the package in all EAPIs.
The initial working directory is \t{S}, with an error or fallback to \t{WORKDIR} as discussed in
section~\ref{sec:s-to-workdir-fallback}.
-\featurelabel{src-compile-0} For EAPIs listed in table~\ref{tab:src-compile-table} as using format
-0, the default implementation used when the ebuild lacks the \t{src_compile} function shall behave
-as:
+For EAPIs listed in table~\ref{tab:src-compile-table} as using format 0, 1 or~2, the default
+implementation used when the ebuild lacks the \t{src_prepare} function shall behave as in
+listing~\ref{lst:src-compile-0}, listing~\ref{lst:src-compile-1} or listing~\ref{lst:src-compile-2},
+respectively.
+
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{\t{src_compile} behaviour for EAPIs}
+ \label{tab:src-compile-table}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Format}} \\
+ \midrule
+ 0 & 0 \\
+ 1 & 1 \\
+ 2, 3, 4, 5, 6, 7, 8 & 2 \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
\begin{listing}[H]
-\caption{\t{src_compile}, format~0}
+\caption{\t{src_compile}, format~0} \label{lst:src-compile-0}
\begin{verbatim}
src_compile() {
if [[ -x ./configure ]]; then
@@ -225,12 +273,8 @@ src_compile() {
\end{verbatim}
\end{listing}
-\featurelabel{src-compile-1} For EAPIs listed in table~\ref{tab:src-compile-table} as using format
-1, the default implementation used when the ebuild lacks the \t{src_compile} function shall behave
-as:
-
\begin{listing}[H]
-\caption{\t{src_compile}, format~1}
+\caption{\t{src_compile}, format~1} \label{lst:src-compile-1}
\begin{verbatim}
src_compile() {
if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then
@@ -243,12 +287,8 @@ src_compile() {
\end{verbatim}
\end{listing}
-\featurelabel{src-compile-2} For EAPIs listed in table~\ref{tab:src-compile-table} as using format
-2, the default implementation used when the ebuild lacks the \t{src_compile} function shall behave
-as:
-
\begin{listing}[H]
-\caption{\t{src_compile}, format~2}
+\caption{\t{src_compile}, format~2} \label{lst:src-compile-2}
\begin{verbatim}
src_compile() {
if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]]; then
@@ -258,21 +298,6 @@ src_compile() {
\end{verbatim}
\end{listing}
-\ChangeWhenAddingAnEAPI{7}
-\begin{centertable}{\t{src_compile} behaviour for EAPIs}
- \label{tab:src-compile-table}
- \begin{tabular}{ll}
- \toprule
- \multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{Format}} \\
- \midrule
- 0 & 0 \\
- 1 & 1 \\
- 2, 3, 4, 5, 6, 7 & 2 \\
- \bottomrule
- \end{tabular}
-\end{centertable}
-
\subsection{src_test}
The \t{src_test} function runs unit tests for the newly built but not yet installed package as
@@ -292,7 +317,7 @@ parallel tests, the \t{emake} command must be called with option \t{-j1}.
The \t{src_test} function may be disabled by \t{RESTRICT}\@. See section~\ref{sec:restrict}. It may
be disabled by user too, using a PM-specific mechanism.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{\t{src_test} behaviour for EAPIs}
\label{tab:src-test-table}
\begin{tabular}{ll}
@@ -301,7 +326,7 @@ be disabled by user too, using a PM-specific mechanism.
\multicolumn{1}{c}{\textbf{Supports parallel tests?}} \\
\midrule
0, 1, 2, 3, 4 & No \\
- 5, 6, 7 & Yes \\
+ 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -314,12 +339,30 @@ directory specified in \t{D}.
The initial working directory is \t{S}, with an error or fallback to \t{WORKDIR} as discussed in
section~\ref{sec:s-to-workdir-fallback}.
-\featurelabel{src-install-4} For EAPIs listed in table~\ref{tab:src-install-table} as using format
-4, the default implementation used when the ebuild lacks the \t{src_install} function shall behave
-as:
+For EAPIs listed in table~\ref{tab:src-install-table} as using format 4 or~6, the default
+implementation used when the ebuild lacks the \t{src_prepare} function shall behave as in
+listing~\ref{lst:src-install-4} or listing~\ref{lst:src-install-6}, respectively.
+
+For other EAPIs, the default implementation used when the ebuild lacks the \t{src_install} function
+is a no-op.
+
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{\t{src_install} behaviour for EAPIs}
+ \label{tab:src-install-table}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Format}} \\
+ \midrule
+ 0, 1, 2, 3 & no-op \\
+ 4, 5 & 4 \\
+ 6, 7, 8 & 6 \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
\begin{listing}[H]
-\caption{\t{src_install}, format~4}
+\caption{\t{src_install}, format~4} \label{lst:src-install-4}
\begin{verbatim}
src_install() {
if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]]; then
@@ -341,12 +384,8 @@ src_install() {
\end{verbatim}
\end{listing}
-\featurelabel{src-install-6} For EAPIs listed in table~\ref{tab:src-install-table} as using format
-6, the default implementation used when the ebuild lacks the \t{src_install} function shall behave
-as:
-
\begin{listing}[H]
-\caption{\t{src_install}, format~6}
+\caption{\t{src_install}, format~6} \label{lst:src-install-6}
\begin{verbatim}
src_install() {
if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]]; then
@@ -357,24 +396,6 @@ src_install() {
\end{verbatim}
\end{listing}
-For other EAPIs, the default implementation used when the ebuild lacks the \t{src_install} function
-is a no-op.
-
-\ChangeWhenAddingAnEAPI{7}
-\begin{centertable}{\t{src_install} behaviour for EAPIs}
- \label{tab:src-install-table}
- \begin{tabular}{ll}
- \toprule
- \multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{Format}} \\
- \midrule
- 0, 1, 2, 3 & no-op \\
- 4, 5 & 4 \\
- 6, 7 & 6 \\
- \bottomrule
- \end{tabular}
-\end{centertable}
-
\subsection{pkg_preinst}
The \t{pkg_preinst} function performs any special tasks that are required immediately before
@@ -428,7 +449,7 @@ that dependencies may not be installed.
\t{pkg_info} must not write to the filesystem.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{pkg_info} on non-installed packages}
\label{tab:pkg-info-table}
\begin{tabular}{ll}
@@ -437,7 +458,7 @@ that dependencies may not be installed.
\multicolumn{1}{c}{\textbf{Supports \t{pkg_info} on non-installed packages?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6, 7 & Yes \\
+ 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -459,7 +480,7 @@ named \t{default_}(phase) that behaves as the default implementation for that EA
when executing any ebuild phase listed in the table. Ebuilds must not call these functions except
when in the phase in question.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{default_} phase functions}
\label{tab:default-phase-function-table}
\begin{tabular}{l P{26em}}
@@ -470,7 +491,7 @@ when in the phase in question.
0, 1 & None \\
2, 3 & \t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
\t{src_compile}, \t{src_test} \\
- 4, 5, 6, 7 & \t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
+ 4, 5, 6, 7, 8 & \t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
\t{src_compile}, \t{src_test}, \t{src_install} \\
\bottomrule
\end{tabular}
diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index bbd286f..d07cca4 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -86,9 +86,10 @@ Ebuilds may define any of the following variables:
for its value if unset and when used with an eclass. See section~\ref{sec:rdepend-depend} for
details.
\item[PDEPEND] See chapter~\ref{ch:dependencies}.
+\item[IDEPEND] See chapter~\ref{ch:dependencies}.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{IUSE} defaults}
\label{tab:iuse-defaults-table}
\begin{tabular}{ll}
@@ -96,13 +97,13 @@ Ebuilds may define any of the following variables:
\multicolumn{1}{c}{\textbf{EAPI}} &
\multicolumn{1}{c}{\textbf{Supports \t{IUSE} defaults?}} \\
\midrule
- 0 & No \\
- 1, 2, 3, 4, 5, 6, 7 & Yes \\
+ 0 & No \\
+ 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting various ebuild-defined variables}
\label{tab:optional-vars-table}
\begin{tabular}{lll}
@@ -112,7 +113,7 @@ Ebuilds may define any of the following variables:
\multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE}?}} \\
\midrule
0, 1, 2, 3 & Optionally & No \\
- 4, 5, 6, 7 & Yes & Yes \\
+ 4, 5, 6, 7, 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -169,16 +170,24 @@ on the right of the arrow. When consulting mirrors (except for those explicitly
of the arrow, if \t{mirror://} is used), the filename to the right of the arrow shall be requested
instead of the filename in the URI.
-\ChangeWhenAddingAnEAPI{7}
-\begin{centertable}{EAPIs supporting \t{SRC_URI} arrows}
+\featurelabel{uri-restrict} In EAPIs listed in table~\ref{tab:uri-arrows-table} as supporting
+selective URI restrictions, the URI protocol can be prefixed by an additional \t{fetch+} or
+\t{mirror+} term. If the ebuild is fetch restricted, the \t{fetch+} prefix undoes the fetch
+restriction for the URI (but not the implied mirror restriction). If the ebuild is fetch or mirror
+restricted, the \t{mirror+} prefix undoes both fetch and mirror restrictions for the URI.
+
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{EAPIs supporting \t{SRC_URI} arrows and selective URI restrictions}
\label{tab:uri-arrows-table}
- \begin{tabular}{ll}
+ \begin{tabular}{lll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{Supports \t{SRC_URI} arrows?}} \\
+ \multicolumn{1}{c}{\textbf{Supports \t{SRC_URI} arrows?}} &
+ \multicolumn{1}{c}{\textbf{Supports selective URI restrictions?}} \\
\midrule
- 0, 1 & No \\
- 2, 3, 4, 5, 6, 7 & Yes \\
+ 0, 1 & No & No \\
+ 2, 3, 4, 5, 6, 7 & Yes & No \\
+ 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -263,7 +272,7 @@ any \t{DEPEND} or \t{RDEPEND} set in an eclass does not change the implicit \t{R
the ebuild portion, and any \t{DEPEND} value set in an eclass does not get treated as being part of
\t{RDEPEND}.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs with \t{RDEPEND=DEPEND} default}
\label{tab:rdepend-depend-table}
\begin{tabular}{ll}
@@ -272,7 +281,7 @@ the ebuild portion, and any \t{DEPEND} value set in an eclass does not get treat
\multicolumn{1}{c}{\textbf{\t{RDEPEND=DEPEND}?}} \\
\midrule
0, 1, 2, 3 & Yes \\
- 4, 5, 6, 7 & No \\
+ 4, 5, 6, 7, 8 & No \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -307,7 +316,7 @@ not be exported to the ebuild environment:
\note{Thus, by extension of section~\ref{sec:metadata-invariance}, phase functions must not be
defined based upon any variant condition.}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{DEFINED_PHASES}}
\label{tab:defined-phases-table}
\begin{tabular}{ll}
@@ -316,7 +325,7 @@ defined based upon any variant condition.}
\multicolumn{1}{c}{\textbf{Supports \t{DEFINED_PHASES}?}} \\
\midrule
0, 1, 2, 3 & Optionally \\
- 4, 5, 6, 7 & Yes \\
+ 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/eclasses.tex b/eclasses.tex
index bf0007b..a92ce1f 100644
--- a/eclasses.tex
+++ b/eclasses.tex
@@ -34,11 +34,28 @@ The \t{inherit} command must also ensure that:
\section{Eclass-defined Metadata Keys}
-The \t{IUSE}, \t{REQUIRED_USE}, \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND} and \t{PDEPEND} variables
-are handled specially when set by an eclass. They must be accumulated across eclasses, appending
-the value set by each eclass to the resulting value after the previous one is loaded. Then the
-eclass-defined value is appended to that defined by the ebuild. In the case of \t{RDEPEND}, this
-is done after the implicit \t{RDEPEND} rules in section~\ref{sec:rdepend-depend} are applied.
+\featurelabel{accumulate-vars} The \t{IUSE}, \t{REQUIRED_USE}, \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND},
+\t{PDEPEND} and \t{IDEPEND} variables are handled specially when set by an eclass. They must be
+accumulated across eclasses, appending the value set by each eclass to the resulting value after
+the previous one is loaded. For EAPIs listed in table~\ref{tab:accumulate-vars} as accumulating
+\t{PROPERTIES} and \t{RESTRICT}, the same is true for these variables. Then the eclass-defined
+value is appended to that defined by the ebuild. In the case of \t{RDEPEND}, this is done after
+the implicit \t{RDEPEND} rules in section~\ref{sec:rdepend-depend} are applied.
+
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{EAPIs accumulating \t{PROPERTIES} and \t{RESTRICT} across eclasses}
+ \label{tab:accumulate-vars}
+ \begin{tabular}{lll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Accumulates \t{PROPERTIES}?}} &
+ \multicolumn{1}{c}{\textbf{Accumulates \t{RESTRICT}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6, 7 & No & No \\
+ 8 & Yes & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
\section{EXPORT_FUNCTIONS}
diff --git a/merge.tex b/merge.tex
index 6649d35..0e6738d 100644
--- a/merge.tex
+++ b/merge.tex
@@ -86,7 +86,7 @@ held under the original image directory.
In other EAPIs, the behaviour with respect to file modification times
is undefined.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Preservation of file modification times (mtimes)}
\label{tab:mtime-preserve}
\begin{tabular}{ll}
@@ -95,7 +95,7 @@ is undefined.
\multicolumn{1}{c}{\textbf{mtimes preserved?}} \\
\midrule
0, 1, 2 & Undefined \\
- 3, 4, 5, 6, 7 & Yes \\
+ 3, 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/metadata-cache.tex b/metadata-cache.tex
index 33574c4..d69ecdd 100644
--- a/metadata-cache.tex
+++ b/metadata-cache.tex
@@ -36,6 +36,8 @@ order. Other lines may be present following these; their meanings are not define
metadata; see table~\ref{tab:optional-vars-table}.
\item Defined phases (\t{DEFINED_PHASES}). In some EAPIs, may optionally be blank, regardless of
ebuild metadata; see table~\ref{tab:defined-phases-table}.
+\item Install-time dependencies (\t{IDEPEND}).
+ Blank in some EAPIs; see table~\ref{tab:depend-table}.
\item Blank lines to pad the file to 22 lines long
\end{compactenum}
diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index bc6d1ac..04a8ac4 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -31,7 +31,7 @@ The following commands affect this behaviour:
option and in EAPIs supporting this option, see table~\ref{tab:die-properties}.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPI command failure behaviour}
\label{tab:commands-die-table}
\begin{tabular}{llll}
@@ -43,7 +43,7 @@ The following commands affect this behaviour:
\midrule
0, 1, 2, 3 & Non-zero exit & No & n/a \\
4, 5, 6 & Aborts & Yes & No \\
- 7 & Aborts & Yes & Yes \\
+ 7, 8 & Aborts & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -54,7 +54,7 @@ The following commands affect this behaviour:
\featurelabel{banned-commands} Some commands are banned in some EAPIs. If a banned command is
called, the package manager must abort the build process indicating an error.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Banned commands}
\label{tab:banned-commands-table}
\begin{tabular}{lllllll}
@@ -72,7 +72,17 @@ called, the package manager must abort the build process indicating an error.
0, 1, 2, 3 & No & No & No & No & No & No \\
4, 5 & Yes & Yes & No & No & No & No \\
6 & Yes & Yes & Yes & No & No & No \\
- 7 & Yes & Yes & Yes & Yes & Yes & Yes \\
+ 7, 8 & Yes & Yes & Yes & Yes & Yes & Yes \\
+ \midrule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{6}{c}{\textbf{Command banned?}} \\
+ \multicolumn{1}{c}{} &
+ \multicolumn{1}{c}{\textbf{\t{useq}}} &
+ \multicolumn{1}{c}{\textbf{\t{hasv}}} &
+ \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6, 7 & No & No & No & & & \\
+ 8 & Yes & Yes & Yes & & & \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -110,7 +120,7 @@ are given, \t{-r} is assumed.
otherwise, prints an empty string. The exit code is unspecified.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Package manager query command options supported by EAPIs}
\label{tab:pm-query-options}
\begin{tabular}{lllll}
@@ -123,7 +133,7 @@ are given, \t{-r} is assumed.
\midrule
0, 1, 2, 3, 4 & No & No & No & No \\
5, 6 & Yes & No & No & No \\
- 7 & No & Yes & Yes & Yes \\
+ 7, 8 & No & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -159,7 +169,7 @@ output, using stdout as an output facility is forbidden.
message followed by a failure indicator. Returns its first argument as exit status.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Output commands for EAPIs}
\label{tab:output-commands}
\begin{tabular}{lll}
@@ -169,7 +179,7 @@ output, using stdout as an output facility is forbidden.
\multicolumn{1}{c}{\textbf{Supports \t{eqawarn}?}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & Yes & No \\
- 7 & No & Yes \\
+ 7, 8 & No & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -191,7 +201,7 @@ completing. Ebuilds must not run any of these commands once the current phase fu
(indicating failure), calls \t{die}, passing any parameters to it.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Properties of \t{die} and \t{assert} commands in EAPIs}
\label{tab:die-properties}
\begin{tabular}{lll}
@@ -204,7 +214,7 @@ completing. Ebuilds must not run any of these commands once the current phase fu
\midrule
0, 1, 2, 3, 4, 5 & No & No \\
6 & Yes & No \\
- 7 & Yes & Yes \\
+ 7, 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -268,7 +278,7 @@ Ebuilds must not run any of these commands once the current phase function has r
subsequent calls, the command will do nothing and return~0.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Patch commands for EAPIs}
\label{tab:patch-commands}
\begin{tabular}{lll}
@@ -278,7 +288,7 @@ Ebuilds must not run any of these commands once the current phase function has r
\multicolumn{1}{c}{\textbf{\t{eapply_user}?}} \\
\midrule
0, 1, 2, 3, 4, 5 & No & No \\
- 6, 7 & Yes & Yes \\
+ 6, 7, 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -302,6 +312,9 @@ commands once the current phase function has returned.
\item \t{-{}-mandir} must be \t{\$\{EPREFIX\}/usr/share/man}
\item \t{-{}-infodir} must be \t{\$\{EPREFIX\}/usr/share/info}
\item \t{-{}-datadir} must be \t{\$\{EPREFIX\}/usr/share}
+ \item \t{-{}-datarootdir} must be \t{\$\{EPREFIX\}/usr/share}, if the EAPI is listed in
+ table~\ref{tab:econf-options-table} as using it. This option will only be passed if the
+ string \t{-{}-datarootdir} occurs in the output of \t{configure -{}-help}.
\item \t{-{}-sysconfdir} must be \t{\$\{EPREFIX\}/etc}
\item \t{-{}-localstatedir} must be \t{\$\{EPREFIX\}/var/lib}
\item \t{-{}-docdir} must be \t{\$\{EPREFIX\}/usr/share/doc/\$\{PF\}}, if the EAPI is listed in
@@ -325,25 +338,36 @@ commands once the current phase function has returned.
\item \t{-{}-disable-silent-rules}, if the EAPI is listed in table~\ref{tab:econf-options-table}
as using it. This option will only be passed if the string \t{-{}-disable-silent-rules}
occurs in the output of \t{configure -{}-help}.
+ \item \t{-{}-disable-static}, if the EAPI is listed in table~\ref{tab:econf-options-table}
+ as using it. This option will only be passed if the string \t{-{}-disable-static} occurs
+ in the output of \t{configure -{}-help}.
\end{itemize}
- \ChangeWhenAddingAnEAPI{7}
+ \ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Extra \t{econf} arguments for EAPIs}
\label{tab:econf-options-table}
- \begin{tabular}{llllll}
+ \begin{tabular}{lllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{P{9em}}{\textbf{-{}-disable-dependency-tracking}} &
- \multicolumn{1}{P{5em}}{\textbf{-{}-disable-silent-rules}} &
+ \multicolumn{1}{c}{\textbf{-{}-datarootdir}} &
\multicolumn{1}{c}{\textbf{-{}-docdir}} &
\multicolumn{1}{c}{\textbf{-{}-htmldir}} &
\multicolumn{1}{c}{\textbf{-{}-with-sysroot}} \\
\midrule
- 0, 1, 2, 3 & No & No & No & No & No \\
- 4 & Yes & No & No & No & No \\
- 5 & Yes & Yes & No & No & No \\
- 6 & Yes & Yes & Yes & Yes & No \\
- 7 & Yes & Yes & Yes & Yes & Yes \\
+ 0, 1, 2, 3, 4, 5 & No & No & No & No \\
+ 6 & No & Yes & Yes & No \\
+ 7 & No & Yes & Yes & Yes \\
+ 8 & Yes & Yes & Yes & Yes \\
+ \midrule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{P{5.5em}}{\textbf{-{}-disable-dependency-tracking}} &
+ \multicolumn{1}{P{5em}}{\textbf{-{}-disable-silent-rules}} &
+ \multicolumn{1}{c}{\textbf{-{}-disable-static}} & \\
+ \midrule
+ 0, 1, 2, 3 & No & No & No & \\
+ 4 & Yes & No & No & \\
+ 5, 6, 7 & Yes & Yes & No & \\
+ 8 & Yes & Yes & Yes & \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -436,8 +460,9 @@ the current phase function has returned.
\t{joe:users}. Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
\item[doconfd] Installs the given config files into \t{/etc/conf.d/}, by default with file mode
- \t{0644}, or with the \t{install} options set by the most recent \t{insopts} call.
- Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
+ \t{0644}. For EAPIs listed in table~\ref{tab:insopts-commands} as respecting \t{insopts}
+ in \t{doconfd}, the \t{install} options set by the most recent \t{insopts} call override
+ the default. Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
\item[dodir] Creates the given directories, by default with file mode \t{0755}, or with the
\t{install} options set by the most recent \t{diropts} call. Failure behaviour is EAPI
@@ -454,8 +479,9 @@ the current phase function has returned.
section~\ref{sec:failure-behaviour}.
\item[doenvd] Installs the given environment files into \t{/etc/env.d/}, by default with file mode
- \t{0644}, or with the \t{install} options set by the most recent \t{insopts} call.
- Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
+ \t{0644}. For EAPIs listed in table~\ref{tab:insopts-commands} as respecting \t{insopts}
+ in \t{doenvd}, the \t{install} options set by the most recent \t{insopts} call override
+ the default. Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
\item[doexe] Installs the given files into the directory specified by the most recent \t{exeinto}
call. If \t{exeinto} has not yet been called, behaviour is undefined. Files are installed by
@@ -470,9 +496,10 @@ the current phase function has returned.
section~\ref{sec:banned-commands}.
\item[doheader] \featurelabel{doheader} Installs the given header files into \t{/usr/include/},
- by default with file mode \t{0644}, or with the \t{install} options set by the most recent
- \t{insopts} call. If the first argument is \t{-r}, then operates recursively, descending
- into any directories given.
+ by default with file mode \t{0644}. For EAPIs listed in table~\ref{tab:insopts-commands}
+ as respecting \t{insopts} in \t{doheader}, the \t{install} options set by the most recent
+ \t{insopts} call override the default. If the first argument is \t{-r}, then operates
+ recursively, descending into any directories given.
Only available in EAPIs listed in table~\ref{tab:doheader-table} as supporting \t{doheader}.
Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
@@ -505,8 +532,9 @@ the current phase function has returned.
\t{0644}. Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
\item[doinitd] Installs the given initscript files into \t{/etc/init.d}, by default with file mode
- \t{0755}, or with the \t{install} options set by the most recent \t{exeopts} call.
- Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
+ \t{0755}. For EAPIs listed in table~\ref{tab:insopts-commands} as respecting \t{insopts}
+ in \t{doinitd}, the \t{install} options set by the most recent \t{exeopts} call override
+ the default. Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
\item[doins] \featurelabel{doins} Takes one or more files as arguments and installs them into
\t{INSDESTTREE}, by default with file mode \t{0644}, or with the \t{install} options set by
@@ -575,9 +603,28 @@ the current phase function has returned.
\item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
-\item[dosym] Creates a symbolic link named as for its second parameter, pointing to the first. If
- the directory containing the new link does not exist, creates it. Failure behaviour is EAPI
- dependent as per section~\ref{sec:failure-behaviour}.
+\item[dosym] Creates a symbolic link named as for its second parameter, pointing to the first.
+ If the directory containing the new link does not exist, creates it.
+
+ \featurelabel{dosym-relative} In EAPIs listed in table~\ref{tab:dosym-r} as supporting creation
+ of relative paths, when called with option \t{-r}, the first parameter (the link target) is
+ converted from an absolute path to a path relative to the the second parameter (the link name).
+ The algorithm must return a result identical to the one returned by the function in
+ listing~\ref{lst:dosym-r}, with \t{realpath} and \t{dirname} from GNU coreutils version~8.32.
+ Specifying option \t{-r} together with a relative path as first (target) parameter is an error.
+
+ Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
+
+\begin{listing}[h]
+\caption{Create a relative path for \t{dosym -r}} \label{lst:dosym-r}
+\begin{verbatim}
+dosym_relative_path() {
+ local link=$(realpath -m -s "/${2#/}")
+ local linkdir=$(dirname "${link}")
+ realpath -m -s --relative-to="${linkdir}" "$1"
+}
+\end{verbatim}
+\end{listing}
\item[fowners] Acts as for \t{chown}, but takes paths relative to the image directory. Failure
behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
@@ -619,7 +666,7 @@ the current phase function has returned.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{dodoc -r}}
\label{tab:dodoc-table}
\begin{tabular}{ll}
@@ -628,12 +675,12 @@ the current phase function has returned.
\multicolumn{1}{c}{\textbf{Supports \t{dodoc -r}?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6, 7 & Yes \\
+ 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{doheader} and \t{newheader}}
\label{tab:doheader-table}
\begin{tabular}{ll}
@@ -642,12 +689,12 @@ the current phase function has returned.
\multicolumn{1}{c}{\textbf{Supports \t{doheader} and \t{newheader}?}} \\
\midrule
0, 1, 2, 3, 4 & No \\
- 5, 6, 7 & Yes \\
+ 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting symlinks for \t{doins}}
\label{tab:doins-table}
\begin{tabular}{ll}
@@ -656,12 +703,12 @@ the current phase function has returned.
\multicolumn{1}{c}{\textbf{\t{doins} supports symlinks?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6, 7 & Yes \\
+ 4, 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{\t{doman} language support options for EAPIs}
\label{tab:doman-table}
\begin{tabular}{lll}
@@ -672,12 +719,12 @@ the current phase function has returned.
\midrule
0, 1 & No & Not applicable \\
2, 3 & Yes & No \\
- 4, 5, 6, 7 & Yes & Yes \\
+ 4, 5, 6, 7, 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting stdin for \t{new*} commands}
\label{tab:newfoo-stdin-table}
\begin{tabular}{ll}
@@ -686,12 +733,12 @@ the current phase function has returned.
\multicolumn{1}{c}{\textbf{\t{new*} can read from stdin?}} \\
\midrule
0, 1, 2, 3, 4 & No \\
- 5, 6, 7 & Yes \\
+ 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{\t{domo} destination path in EAPIs}
\label{tab:domo-path}
\begin{tabular}{ll}
@@ -700,7 +747,21 @@ the current phase function has returned.
\multicolumn{1}{c}{\textbf{Destination path}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & \t{\$\{DESTTREE\}/share/locale} \\
- 7 & \t{/usr/share/locale} \\
+ 7, 8 & \t{/usr/share/locale} \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{EAPIs supporting \t{dosym -r}}
+ \label{tab:dosym-r}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{\t{dosym} supports creation of relative paths?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6, 7 & No \\
+ 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -725,12 +786,16 @@ function has returned.
\item[docinto] As \t{into}, for install subdirectory of \t{dodoc} et al.
-\item[insopts] Takes one or more arguments, and sets the options passed by \t{doins} et al.\
- to the \t{install} command to them. Behaviour upon encountering empty arguments is undefined.
+\item[insopts] \featurelabel{insopts} Takes one or more arguments, and sets the options passed by
+ \t{doins} et al.\ to the \t{install} command to them. Behaviour upon encountering empty
+ arguments is undefined. Depending on EAPI, affects only those commands that are specified
+ by table~\ref{tab:insopts-commands} as respecting \t{insopts}.
\item[diropts] As \t{insopts}, for \t{dodir} et al.
-\item[exeopts] As \t{insopts}, for \t{doexe} et al.
+\item[exeopts] \featurelabel{exeopts} As \t{insopts}, for \t{doexe} et al. Depending on EAPI,
+ affects only those commands that are specified by table~\ref{tab:exeopts-commands}
+ as respecting \t{exeopts}.
\item[libopts] As \t{insopts}, for \t{dolib} et al.
In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is banned as
@@ -738,6 +803,38 @@ function has returned.
\end{description}
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{Commands respecting \t{insopts} for EAPIs}
+ \label{tab:insopts-commands}
+ \begin{tabular}{lllll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{\t{doins}?}} &
+ \multicolumn{1}{c}{\textbf{\t{doconfd}?}} &
+ \multicolumn{1}{c}{\textbf{\t{doenvd}?}} &
+ \multicolumn{1}{c}{\textbf{\t{doheader}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6, 7 & Yes & Yes & Yes & Yes \\
+ 8 & Yes & No & No & No \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{Commands respecting \t{exeopts} for EAPIs}
+ \label{tab:exeopts-commands}
+ \begin{tabular}{lll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{\t{doexe}?}} &
+ \multicolumn{1}{c}{\textbf{\t{doinitd}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6, 7 & Yes & Yes \\
+ 8 & Yes & No \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
\subsection{Commands controlling manipulation of files in the staging area}
These commands are used to control optional manipulations that the package manager may perform on
files in the staging directory \t{ED}, like compressing files or stripping symbols from object
@@ -810,7 +907,7 @@ any of these functions from any other phase.
supporting \t{dostrip}.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Commands controlling manipulation of files in the staging area in EAPIs}
\label{tab:staging-area-commands}
\begin{tabular}{lll}
@@ -821,7 +918,7 @@ any of these functions from any other phase.
\midrule
0, 1, 2, 3 & No & No \\
4, 5, 6 & Yes & No \\
- 7 & Yes & Yes \\
+ 7, 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -839,13 +936,17 @@ table~\ref{tab:use-list-strictness}.
\item[use] Returns shell true (0) if the first argument (a \t{USE} flag name) is enabled, false
otherwise. If the flag name is prefixed with \t{!}, returns true if the flag is disabled, and
false if it is enabled. It is guaranteed that this command is quiet.
-\item[usev] The same as \t{use}, but also prints the flag name if the condition
- is met.
+\item[usev] \featurelabel{usev} The same as \t{use}, but also prints the flag name if the condition
+ is met. In EAPIs listed in table~\ref{tab:use-list-args} as supporting an optional second
+ argument for \t{usev}, prints the second argument instead, if it is specified and if the
+ condition is met.
\item[useq] Deprecated synonym for \t{use}.
+ In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is banned as per
+ section~\ref{sec:banned-commands}.
\item[use_with] \featurelabel{use-with} Has one-, two-, and three-argument forms. The first
argument is a USE flag name, the second a \t{configure} option name (\t{\$\{opt\}}), defaulting
to the same as the first argument if not provided, and the third is a string value
- (\t{\$\{value\}}). For EAPIs listed in table~\ref{tab:use-with-third-arg} as not supporting it,
+ (\t{\$\{value\}}). For EAPIs listed in table~\ref{tab:use-list-args} as not supporting it,
an empty third argument is treated as if it weren't provided. If the USE flag is set, outputs
\t{-{}-with-\$\{opt\}=\$\{value\}} if the third argument was provided, and
\t{-{}-with-\$\{opt\}} otherwise. If the flag is not set, then it outputs
@@ -865,7 +966,7 @@ table~\ref{tab:use-list-strictness}.
table~\ref{tab:use-list-functions} as supporting \t{in_iuse}.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPI behaviour for use queries not in \t{IUSE_EFFECTIVE}}
\label{tab:use-list-strictness}
\begin{tabular}{ll}
@@ -874,26 +975,29 @@ table~\ref{tab:use-list-strictness}.
\multicolumn{1}{c}{\textbf{Behaviour}} \\
\midrule
0, 1, 2, 3 & Undefined \\
- 4, 5, 6, 7 & Error \\
+ 4, 5, 6, 7, 8 & Error \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
-\begin{centertable}{EAPIs supporting empty third argument in \t{use_with} and \t{use_enable}}
- \label{tab:use-with-third-arg}
- \begin{tabular}{ll}
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{\t{usev}, \t{use_with} and \t{use_enable} arguments for EAPIs}
+ \label{tab:use-list-args}
+ \begin{tabular}{lll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{Supports empty third argument?}} \\
+ \multicolumn{1}{P{8em}}{\textbf{\t{usev} has optional second argument?}} &
+ \multicolumn{1}{P{14em}}{\textbf{\t{use_with} and \t{use_enable} support empty third
+ argument?}} \\
\midrule
- 0, 1, 2, 3 & No \\
- 4, 5, 6, 7 & Yes \\
+ 0, 1, 2, 3 & No & No \\
+ 4, 5, 6, 7 & No & Yes \\
+ 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{usex} and \t{in_iuse}}
\label{tab:use-list-functions}
\begin{tabular}{lll}
@@ -904,7 +1008,7 @@ table~\ref{tab:use-list-strictness}.
\midrule
0, 1, 2, 3, 4 & No & No \\
5 & Yes & No \\
- 6, 7 & Yes & Yes \\
+ 6, 7, 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -916,7 +1020,11 @@ These functions check whitespace-separated lists for a particular value.
\item[has] Returns shell true (0) if the first argument (a word) is found in the list of subsequent
arguments, false otherwise. Guaranteed quiet.
\item[hasv] The same as \t{has}, but also prints the first argument if found.
+ In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is banned as per
+ section~\ref{sec:banned-commands}.
\item[hasq] Deprecated synonym for \t{has}.
+ In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is banned as per
+ section~\ref{sec:banned-commands}.
\end{description}
\subsection{Version manipulation and comparison commands}
@@ -984,7 +1092,7 @@ the second, inclusively.
section~\ref{sec:version-spec}. Comparison is done using algorithm~\ref{alg:version-comparison}.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting version manipulation commands}
\label{tab:version-commands}
\begin{tabular}{llll}
@@ -995,7 +1103,7 @@ the second, inclusively.
\multicolumn{1}{c}{\textbf{\t{ver_test}?}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & No & No & No \\
- 7 & Yes & Yes & Yes \\
+ 7, 8 & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -1045,10 +1153,13 @@ has returned.
\item bzip2-compressed tar files (\t{*.tar.bz2, *.tbz2, *.tar.bz, *.tbz}). Ebuilds must ensure
that bzip2 and GNU tar are installed.
\item zip files (\t{*.zip, *.ZIP, *.jar}). Ebuilds must ensure that Info-ZIP Unzip is installed.
- \item 7zip files (\t{*.7z, *.7Z}). Ebuilds must ensure that P7ZIP is installed.
+ \item 7zip files (\t{*.7z, *.7Z}). Ebuilds must ensure that P7ZIP is installed. Only for EAPIs
+ listed in table~\ref{tab:unpack-extensions-table} as supporting \t{.7z}.
\item rar files (\t{*.rar, *.RAR}). Ebuilds must ensure that RARLAB's unrar is installed.
+ Only for EAPIs listed in table~\ref{tab:unpack-extensions-table} as supporting \t{.rar}.
\item LHA archives (\t{*.LHA, *.LHa, *.lha, *.lzh}). Ebuilds must ensure that the lha program is
- installed.
+ installed. Only for EAPIs listed in table~\ref{tab:unpack-extensions-table} as supporting
+ \t{.lha}.
\item ar archives (\t{*.a}). Ebuilds must ensure that GNU binutils is installed.
\item deb packages (\t{*.deb}). Ebuilds must ensure that the deb2targz program is installed on
those platforms where the GNU binutils ar program is not available and the installed ar
@@ -1069,7 +1180,7 @@ has returned.
\featurelabel{unpack-ignore-case} \t{unpack} matches filename extensions in a case-insensitive
manner, for EAPIs listed such in table~\ref{tab:unpack-behaviour}.
- \ChangeWhenAddingAnEAPI{7}
+ \ChangeWhenAddingAnEAPI{8}
\begin{centertable}{\t{unpack} behaviour for EAPIs}
\label{tab:unpack-behaviour}
\begin{tabular}{lll}
@@ -1079,24 +1190,28 @@ has returned.
\multicolumn{1}{c}{\textbf{Case-insensitive matching?}} \\
\midrule
0, 1, 2, 3, 4, 5 & No & No \\
- 6, 7 & Yes & Yes \\
+ 6, 7, 8 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
- \ChangeWhenAddingAnEAPI{7}
+ \ChangeWhenAddingAnEAPI{8}
\begin{centertable}{\t{unpack} extensions for EAPIs}
\label{tab:unpack-extensions-table}
- \begin{tabular}{llll}
+ \begin{tabular}{llllllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
\multicolumn{1}{c}{\textbf{\t{.xz}?}} &
\multicolumn{1}{c}{\textbf{\t{.tar.xz}?}} &
- \multicolumn{1}{c}{\textbf{\t{.txz}?}} \\
+ \multicolumn{1}{c}{\textbf{\t{.txz}?}} &
+ \multicolumn{1}{c}{\textbf{\t{.7z}?}} &
+ \multicolumn{1}{c}{\textbf{\t{.rar}?}} &
+ \multicolumn{1}{c}{\textbf{\t{.lha}?}} \\
\midrule
- 0, 1, 2 & No & No & No \\
- 3, 4, 5 & Yes & Yes & No \\
- 6, 7 & Yes & Yes & Yes \\
+ 0, 1, 2 & No & No & No & Yes & Yes & Yes \\
+ 3, 4, 5 & Yes & Yes & No & Yes & Yes & Yes \\
+ 6, 7 & Yes & Yes & Yes & Yes & Yes & Yes \\
+ 8 & Yes & Yes & Yes & No & No & No \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -1163,7 +1278,7 @@ has returned.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Misc commands for EAPIs}
\label{tab:misc-commands}
\begin{tabular}{llll}
@@ -1175,7 +1290,7 @@ has returned.
\midrule
0, 1 & No & No & No \\
2, 3, 4, 5 & Yes & No & No \\
- 6, 7 & Yes & Yes & Yes \\
+ 6, 7, 8 & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/pms.tex b/pms.tex
index 7840252..8bbd037 100644
--- a/pms.tex
+++ b/pms.tex
@@ -21,8 +21,8 @@
pdfkeywords={Gentoo, package manager, specification},
}
-\CurrentEAPIIs{7}
-\ChangeWhenAddingAnEAPI{7}
+\CurrentEAPIIs{8}
+\ChangeWhenAddingAnEAPI{8}
\begin{document}
\maketitle
@@ -34,8 +34,9 @@
\textcopyright{} 2007--2021 Stephen Bennett, Ciaran McCreesh and others. Contributions are owned
by their respective authors, and may have been changed substantially before inclusion.
- This document is released under the Creative Commons Attribution-ShareAlike 3.0 Licence. The
- full text of this licence can be found at \url{https://creativecommons.org/licenses/by-sa/3.0/}.
+ This work is released under the Creative Commons Attribution-ShareAlike 4.0 International
+ Licence. To~view a copy of this licence, visit
+ \url{https://creativecommons.org/licenses/by-sa/4.0/}.
\commitinfo
}
diff --git a/profile-variables.tex b/profile-variables.tex
index f34c7c5..ba40bf4 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -40,7 +40,7 @@ Other variables, except where they affect only package-manager-specific function
Portage's \t{FEATURES} variable), must not be treated incrementally---later definitions shall
completely override those in parent profiles.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Profile-defined \t{IUSE} injection for EAPIs}
\label{tab:profile-iuse-injection-table}
\begin{tabular}{ll}
@@ -49,12 +49,12 @@ completely override those in parent profiles.
\multicolumn{1}{c}{\textbf{Supports profile-defined \t{IUSE} injection?}} \\
\midrule
0, 1, 2, 3, 4 & No \\
- 5, 6, 7 & Yes \\
+ 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Profile-defined unsetting of variables in EAPIs}
\label{tab:profile-env-unset}
\begin{tabular}{ll}
@@ -63,7 +63,7 @@ completely override those in parent profiles.
\multicolumn{1}{c}{\textbf{Supports \t{ENV_UNSET}?}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & No \\
- 7 & Yes \\
+ 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/profiles.tex b/profiles.tex
index a3e666e..d6e8649 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -78,7 +78,7 @@ in that directory, unless their name begins with a dot, will be concatenated in
filename in the POSIX locale and the result will be processed as if it were a single file.
Any subdirectories will be ignored.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting directories for profile files}
\label{tab:profile-file-dirs}
\begin{tabular}{ll}
@@ -87,7 +87,7 @@ Any subdirectories will be ignored.
\multicolumn{1}{c}{\textbf{Supports directories for profile files?}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & No \\
- 7 & Yes \\
+ 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -123,7 +123,7 @@ it is actually installed. Because it has severe adverse effects on USE-based and
dependencies, its use is strongly deprecated and package manager support must be regarded as purely
optional. Supported in EAPIs as per table~\ref{tab:package-provided}.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting \t{package.provided} in profiles}
\label{tab:package-provided}
\begin{tabular}{ll}
@@ -132,7 +132,7 @@ optional. Supported in EAPIs as per table~\ref{tab:package-provided}.
\multicolumn{1}{c}{\textbf{Supports \t{package.provided}?}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & Optionally \\
- 7 & No \\
+ 7, 8 & No \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -165,7 +165,7 @@ only act on packages that are merged due to a stable keyword in the sense of
subsection~\ref{sec:keywords}. Thus, these files can be used to restrict the feature set deemed
stable in a package.
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{Profile directory support for masking/forcing use flags in stable versions only}
\label{tab:profile-stablemask}
\begin{tabular}{ll}
@@ -174,7 +174,7 @@ stable in a package.
\multicolumn{1}{c}{\textbf{Supports masking/forcing use flags in stable versions?}} \\
\midrule
0, 1, 2, 3, 4 & No \\
- 5, 6, 7 & Yes \\
+ 5, 6, 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/tree-layout.tex b/tree-layout.tex
index fdf4b65..aa04d3d 100644
--- a/tree-layout.tex
+++ b/tree-layout.tex
@@ -127,7 +127,7 @@ manager must ignore any files in this directory that it does not recognise.
\item[updates/] This directory is described in section~\ref{sec:updates-dir}.
\end{description}
-\ChangeWhenAddingAnEAPI{7}
+\ChangeWhenAddingAnEAPI{8}
\begin{centertable}{EAPIs supporting a directory for \t{package.mask}}
\label{tab:package-mask-dir}
\begin{tabular}{ll}
@@ -136,7 +136,7 @@ manager must ignore any files in this directory that it does not recognise.
\multicolumn{1}{c}{\textbf{\t{package.mask} can be a directory?}} \\
\midrule
0, 1, 2, 3, 4, 5, 6 & No \\
- 7 & Yes \\
+ 7, 8 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -207,11 +207,14 @@ differs from that described in \t{use.desc}.
\subsection{The updates directory}
\label{sec:updates-dir}
-The \t{updates} directory is used to inform the package manager that a package has moved categories,
-names, or that a version has changed SLOT\@. It contains one file per quarter year, named
+\featurelabel{updates-filenames} The \t{updates} directory is used to inform the package manager
+that a package has moved categories, names, or that a version has changed SLOT\@. For EAPIs
+so specified by table~\ref{tab:updates-filenames}, it contains one file per quarter year, named
\t{[1-4]Q-[YYYY]} for the first to fourth quarter of a given year, for example \t{1Q-2004} or
-\t{3Q-2006}. The format of each file is again line-based, with each line having one of the following
-formats:
+\t{3Q-2006}. For other EAPIs, all regular files in this directory will be processed, unless their
+name begins with a dot.
+
+The format of each file is again line-based, with each line having one of the following formats:
\begin{verbatim}
move <qpn1> <qpn2>
slotmove <spec> <slot1> <slot2>
@@ -230,6 +233,20 @@ Any name that has appeared as the origin of a move must not be reused in the fut
that has appeared as the origin of a slot move may not be used by packages matching the spec of
that slot move in the future.
+\ChangeWhenAddingAnEAPI{8}
+\begin{centertable}{Naming rules for files in \t{updates} directory for EAPIs}
+ \label{tab:updates-filenames}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Files per quarter year?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6, 7 & Yes \\
+ 8 & No \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
\section{The Licenses Directory}
\label{sec:licenses-dir}