summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Müller <ulm@gentoo.org>2018-05-01 00:13:12 +0200
committerUlrich Müller <ulm@gentoo.org>2018-05-01 00:13:12 +0200
commit78bf8ab7f65b63c91515fd8e69c9de4a2979467e (patch)
treed060e899c531feb329fa9b066154d2b00520bf20
parentCheat sheet: Small typographic fix. (diff)
parentEAPI 7 has been approved by the Council. (diff)
downloadpms-78bf8ab7f65b63c91515fd8e69c9de4a2979467e.tar.gz
pms-78bf8ab7f65b63c91515fd8e69c9de4a2979467e.tar.bz2
pms-78bf8ab7f65b63c91515fd8e69c9de4a2979467e.zip
Merge branch 'eapi-7'eapi-7-approved-2018-04-30
-rw-r--r--commands.tex15
-rw-r--r--dependencies.tex96
-rw-r--r--eapi-cheatsheet.tex322
-rw-r--r--eapi-differences.tex239
-rw-r--r--eapis.tex7
-rw-r--r--ebuild-env-vars.tex150
-rw-r--r--ebuild-format.tex4
-rw-r--r--ebuild-functions.tex36
-rw-r--r--ebuild-vars.tex19
-rw-r--r--eclasses.tex10
-rw-r--r--introduction.tex7
-rw-r--r--merge.tex4
-rw-r--r--metadata-cache.tex3
-rw-r--r--pkg-mgr-commands.tex402
-rw-r--r--pms.tex4
-rw-r--r--profile-variables.tex27
-rw-r--r--profiles.tex66
-rw-r--r--tree-layout.tex20
18 files changed, 1033 insertions, 398 deletions
diff --git a/commands.tex b/commands.tex
index 5f6fe7a..5ba9626 100644
--- a/commands.tex
+++ b/commands.tex
@@ -26,22 +26,25 @@ The following commands must always be available in the ebuild environment:
page~\pageref{tab:bash-version}.
\item \t{sed} must be available, and must support all forms of invocations valid for GNU sed
version 4 or later.
-\item \t{patch} must be available, and must support all inputs valid for GNU patch.
+\item \featurelabel{gnu-patch} \t{patch} must be available, and must support all inputs valid
+ for GNU patch, version as listed in table~\ref{tab:system-commands-table}.
\item \featurelabel{gnu-find} \t{find} and \t{xargs} must be available, and must support all forms
of invocations valid for GNU findutils version 4.4 or later. Only for EAPIs listed in
table~\ref{tab:system-commands-table} as requiring GNU find.
\end{compactitem}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{System commands for EAPIs}
\label{tab:system-commands-table}
- \begin{tabular}{ll}
+ \begin{tabular}{lll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{GNU \t{find}?}} \\
+ \multicolumn{1}{c}{\textbf{GNU \t{find}?}} &
+ \multicolumn{1}{c}{\textbf{GNU \t{patch} version}} \\
\midrule
- 0, 1, 2, 3, 4 & Undefined \\
- 5, 6 & Yes \\
+ 0, 1, 2, 3, 4 & Undefined & Any \\
+ 5, 6 & Yes & Any \\
+ 7 & Yes & 2.7 \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/dependencies.tex b/dependencies.tex
index 065034f..39b43f5 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -15,7 +15,7 @@
None (ebuilds can rely only on the packages in the system~set) \\
\addlinespace
\t{src_unpack}, \t{src_prepare}, \t{src_configure}, \t{src_compile}, \t{src_test},
- \t{src_install} & \t{DEPEND} \\
+ \t{src_install} & \t{DEPEND}, \t{BDEPEND} \\
\addlinespace
\t{pkg_preinst}, \t{pkg_postinst}, \t{pkg_prerm}, \t{pkg_postrm} &
\t{RDEPEND} (unless the particular dependency results in a circular dependency, in which
@@ -26,6 +26,21 @@
\end{tabular}
\end{centertable}
+\begin{centertable}{Summary of other interfaces related to dependency classes}
+ \label{tab:dep-class-api}
+ \begin{tabular}{llll}
+ \toprule
+ & \t{BDEPEND} & \t{DEPEND} & \t{RDEPEND}, \t{PDEPEND} \\
+ \midrule
+ Binary compatible with & \t{CBUILD} & \t{CHOST} & \t{CHOST} \\
+ Base unprefixed path & \t{/} & \t{\$\{SYSROOT\}} & \t{\$\{ROOT\}} \\
+ Relevant offset-prefix & \t{\$\{BROOT\}} & \t{\$\{EPREFIX\}} & \t{\$\{EPREFIX\}} \\
+ Path combined with prefix & \t{\$\{BROOT\}} & \t{\$\{ESYSROOT\}} & \t{\$\{EROOT\}} \\
+ PM query command option & \t{-b} & \t{-d} & \t{-r} \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
There are three classes of dependencies supported by ebuilds:
\begin{compactitem}
@@ -38,8 +53,35 @@ There are three classes of dependencies supported by ebuilds:
the package manager finishes the batch of installs.
\end{compactitem}
+\featurelabel{bdepend} Additionally, in EAPIs listed in table~\ref{tab:depend-table}
+as supporting \t{BDEPEND}, the build dependencies are split into two subclasses:
+
+\begin{compactitem}
+\item \t{BDEPEND} build dependencies that are binary compatible with the native build system
+ (\t{CBUILD}). The ebuild is allowed to call binary executables installed by this kind of
+ dependency.
+ \item \t{DEPEND} build dependencies that are binary compatible with the system being built
+ (\t{CHOST}). The ebuild must not execute binary executables installed by this kind of
+ dependency.
+\end{compactitem}
+
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{EAPIs supporting additional dependency types}
+ \label{tab:depend-table}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Supports \t{BDEPEND}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & No \\
+ 7 & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
Table~\ref{tab:phase-function-dependency-classes} lists dependencies which must be satisfied before
-a particular phase function is executed.
+a particular phase function is executed. Table~\ref{tab:dep-class-api} summarises additional
+interfaces related to the dependency classes.
In addition, \t{SRC_URI}, \t{HOMEPAGE}, \t{RESTRICT}, \t{PROPERTIES}, \t{LICENSE} and
\t{REQUIRED_USE} use dependency-style specifications to specify their values.
@@ -51,7 +93,8 @@ The following elements are recognised in at least one class of specification. Al
be surrounded on both sides by whitespace, except at the start and end of the string.
\begin{compactitem}
-\item A package dependency specification. Permitted in \t{DEPEND}, \t{RDEPEND}, \t{PDEPEND}.
+\item A package dependency specification. Permitted in \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND},
+ \t{PDEPEND}.
\item A URI, in the form \t{proto://host/path}. Permitted in \t{SRC_URI} and \t{HOMEPAGE}\@.
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
@@ -69,7 +112,7 @@ 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{RDEPEND}, \t{PDEPEND}, \t{LICENSE}, \t{REQUIRED_USE}.
+ Permitted in \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND}, \t{PDEPEND}, \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
@@ -86,7 +129,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{SRC_URI} arrows}
\label{tab:uri-arrows-table}
\begin{tabular}{ll}
@@ -95,12 +138,12 @@ In particular, note that whitespace is not optional.
\multicolumn{1}{c}{\textbf{Supports \t{SRC_URI} arrows?}} \\
\midrule
0, 1 & No \\
- 2, 3, 4, 5, 6 & Yes \\
+ 2, 3, 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
\label{tab:at-most-one-of-table}
\begin{tabular}{ll}
@@ -109,7 +152,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 & Yes \\
+ 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -135,7 +178,8 @@ for match purposes.
In an any-of group, at least one immediate child element must be matched. A blocker is
considered to be matched if its associated package dependency specification is not matched.
-An empty any-of group counts as being matched.
+\featurelabel{empty-dep-groups} In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty
+any-of group counts as being matched.
\subsection{Exactly-one-of dependency specifications}
@@ -145,7 +189,23 @@ exactly-one-of group for match purposes.
In an exactly-one-of group, exactly one immediate child element must be matched.
-An empty exactly-one-of group counts as being matched.
+In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty exactly-one-of group counts as
+being matched.
+
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{Matching of empty dependency groups in EAPIs}
+ \label{tab:empty-dep-groups}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Empty \t{||} and \t{\textasciicircum\textasciicircum} groups
+ are matched?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & Yes \\
+ 7 & No \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
\subsection{At-most-one-of dependency specifications}
@@ -178,7 +238,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Support for \t{SLOT} dependencies and sub-slots in EAPIs}
\label{tab:slot-deps-table}
\begin{tabular}{lll}
@@ -189,12 +249,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 & Named and operator & Yes \\
+ 5, 6, 7 & Named and operator & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{USE} dependencies}
\label{tab:use-deps-table}
\begin{tabular}{ll}
@@ -204,7 +264,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 & 4-style \\
+ 4, 5, 6, 7 & 4-style \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -243,7 +303,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Exclamation mark strengths for EAPIs}
\label{tab:bang-strength-table}
\begin{tabular}{lll}
@@ -253,7 +313,7 @@ described in table~\ref{tab:bang-strength-table}.
\multicolumn{1}{c}{\textbf{\t{!!}}} \\
\midrule
0, 1 & Unspecified & Forbidden \\
- 2, 3, 4, 5, 6 & Weak & Strong \\
+ 2, 3, 4, 5, 6, 7 & Weak & Strong \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -355,7 +415,9 @@ The following tokens are permitted inside \t{RESTRICT}:
be checked when fetching.
\item[fetch] The package's \t{SRC_URI} entries may not be downloaded automatically. If
entries are not available, \t{pkg_nofetch} is called. Implies \t{mirror}.
-\item[strip] No stripping of debug symbols from files to be installed may be performed.
+\item[strip] No stripping of debug symbols from files to be installed may be performed. In EAPIs
+ listed in table~\ref{tab:staging-area-commands} as supporting controllable stripping, this
+ behaviour may be altered by the \t{dostrip} command.
\item[userpriv] The package manager may not drop root privileges when building the package.
\item[test] The \t{src_test} phase must not be run.
\end{description}
diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 3eaad9a..61481d0 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -14,7 +14,7 @@
\usepackage[nohyphen]{underscore}
\newcommand{\code}[1]{\texttt{#1}}
% This should reflect the latest approved EAPI version
-\newcommand{\version}{6.0}
+\newcommand{\version}{7.0}
\newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
\renewcommand{\familydefault}{\sfdefault}
\urlstyle{sf}
@@ -76,7 +76,7 @@
\footnote{\url{http://creativecommons.org/licenses/by-sa/3.0/}}
\end{abstract}
-\section{EAPIs 0, 1, and 2}
+\section{EAPIs 0, 1, 2, 3, and 4}
\label{sec:cs:eapi0-2}
Omitted for lack of space. See version~5.0 of this document for
differences between these previous EAPIs.
@@ -154,107 +154,107 @@ differences between these previous EAPIs.
% \code{-i18n} switch with EAPI 4. See \featureref{doman-langs}.
% \end{description}
-\section{EAPI 3 (2010-01-18)}
-\label{sec:cs:eapi3}
-\subsection{Additions/Changes}
-\label{sec:cs:eapi3-additions}
-\begin{description}
- \item[Support for \code{.xz}] Unpack of \code{.xz} and
- \code{.tar.xz} files is possible without any custom
- \code{src_unpack} functions. See \featureref{unpack-extensions}.
- \item[Offset prefix] Supporting installation on Prefix-enabled
- systems will be easier with this EAPI.
-\end{description}
+% \section{EAPI 3 (2010-01-18)}
+% \label{sec:cs:eapi3}
+% \subsection{Additions/Changes}
+% \label{sec:cs:eapi3-additions}
+% \begin{description}
+% \item[Support for \code{.xz}] Unpack of \code{.xz} and
+% \code{.tar.xz} files is possible without any custom
+% \code{src_unpack} functions. See \featureref{unpack-extensions}.
+% \item[Offset prefix] Supporting installation on Prefix-enabled
+% systems will be easier with this EAPI.
+% \end{description}
-\section{EAPI 4 (2011-01-17)}
-\label{sec:cs:eapi4}
-\subsection{Additions/Changes}
-\label{sec:cs:eapi4-additions}
-\begin{description}
- \item[\code{pkg_pretend}] Some useful checks (kernel options for
- example) can be placed in this new phase to inform the user early
- (when just pretending to emerge the package). Most checks should
- usually be repeated in \code{pkg_setup}.
- See \featureref{pkg-pretend}.
- \item[\code{src_install}] The \code{src_install} phase is no
- longer empty but has a default now. This comes along with an
- accompanying \code{default} function.
- See \featureref{src-install-4}.
- \item[\code{pkg_info} on non-installed packages] The
- \code{pkg_info} phase can be called even for non-installed
- packages. Be warned that dependencies might not have been
- installed at execution time. See \featureref{pkg-info}.
- \item[\code{econf} changes] The helper function now always
- activates \code{-{}-disable-dependency-tracking}.
- See \featureref{econf-options}.
- \item[USE dependency defaults] In addition to the features offered
- in EAPI 2 for USE dependencies, a \code{(+)} or \code{(-)} can be
- added after a USE flag (mind the parentheses). The former
- specifies that flags not in IUSE should be treated as enabled; the
- latter, disabled. Cannot be used with USE_EXPAND flags. This
- mimics parts of the behaviour of \code{-{}-missing} in
- \code{built_with_use}. See \featureref{use-dep-defaults}.
- \item[Controllable compression] All items in the \code{doc},
- \code{info}, \code{man} subdirectories of \code{/usr/share/} may
- be compressed on-disk after \code{src_install}, except for
- \code{/usr/share/doc/\$\{PF\}/html}. \code{docompress path \dots}
- adds paths to the inclusion list for compression.
- \code{docompress -x path \dots} adds paths to the exclusion list.
- See \featureref{docompress}.
- \item[\code{nonfatal} for commands] If you call \code{nonfatal}
- the command given as argument will not abort the build process in
- case of a failure (as is the default) but will return non-zero on
- failure.
- See \featureref{nonfatal}.
- \item[\code{dodoc} recursion] If the \code{-r} switch is given as
- first argument and followed by directories, files from there are
- installed recursively. See \featureref{dodoc}.
- \item[\code{doins} symlink support] Symbolic links are now
- properly installed when using recursion (\code{-r} switch).
- See \featureref{doins}.
- \item[\code{PROPERTIES}] Is mandatory for all package managers now
- to support interactive installs.
- \item[\code{REQUIRED_USE}] This variable can be used similar to
- the \code{(R|P)DEPEND} variables and define sets of USE flag
- combinations that are not allowed. All elements can be further
- nested to achieve more functionality.
- \begin{description}
- \item[Illegal combination] To prevent activation of
- \code{flag1} if \code{flag2} is enabled use
- "\code{flag2?\ ( !flag1 )}".
- \item[OR] If at least one USE flag out of many must be
- activated on \code{flag1} use
- "\code{flag1?\ ( || ( flag2 flag3 \dots\ ) )}".
- \item[XOR] To allow exactly one USE flag out of many use
- "\code{\textasciicircum\textasciicircum ( flag1 flag2 \dots\ )}".
- \end{description}
- See \featureref{required-use}.
- \item[\code{MERGE_TYPE}] This variable contains one of three
- possible values to allow checks if it is normal merge with
- compilation and installation (\code{source}), installation of a
- binary package (\code{binary}), or a compilation without
- installation (\code{buildonly}). See \featureref{merge-type}.
- \item[\code{REPLACING_VERSIONS}, \code{REPLACED_BY_VERSION}]
- These variables, valid in \code{pkg_*}, contain a list of all
- versions (\code{PVR}) of this package that we are replacing, and
- the version that is replacing the current one, respectively.
- See \featureref{replace-version-vars}.
-\end{description}
-\subsection{Removals/Bans}
-\label{sec:cs:eapi4-removalsbans}
-\begin{description}
- \item[\code{dohard}, \code{dosed}] Both functions are not allowed
- any more. See \featureref{banned-commands}.
- \item[No \code{RDEPEND} fall-back] The package manager will not
- fall back to \code{RDEPEND=DEPEND} if \code{RDEPEND} is undefined.
- See \featureref{rdepend-depend}.
- \item[\code{S} fallback changes] The value of the variable
- \code{S} will not automatically be changed to \code{WORKDIR}, if
- \code{S} is not a directory, but abort. Virtual packages are the
- only exception. See \featureref{s-workdir-fallback}.
- \item[\code{AA}, \code{KV}] These variables are not defined
- any more. See \featureref{aa} and \featureref{kv}.
-\end{description}
+% \section{EAPI 4 (2011-01-17)}
+% \label{sec:cs:eapi4}
+% \subsection{Additions/Changes}
+% \label{sec:cs:eapi4-additions}
+% \begin{description}
+% \item[\code{pkg_pretend}] Some useful checks (kernel options for
+% example) can be placed in this new phase to inform the user early
+% (when just pretending to emerge the package). Most checks should
+% usually be repeated in \code{pkg_setup}.
+% See \featureref{pkg-pretend}.
+% \item[\code{src_install}] The \code{src_install} phase is no
+% longer empty but has a default now. This comes along with an
+% accompanying \code{default} function.
+% See \featureref{src-install-4}.
+% \item[\code{pkg_info} on non-installed packages] The
+% \code{pkg_info} phase can be called even for non-installed
+% packages. Be warned that dependencies might not have been
+% installed at execution time. See \featureref{pkg-info}.
+% \item[\code{econf} changes] The helper function now always
+% activates \code{-{}-disable-dependency-tracking}.
+% See \featureref{econf-options}.
+% \item[USE dependency defaults] In addition to the features offered
+% in EAPI 2 for USE dependencies, a \code{(+)} or \code{(-)} can be
+% added after a USE flag (mind the parentheses). The former
+% specifies that flags not in IUSE should be treated as enabled; the
+% latter, disabled. Cannot be used with USE_EXPAND flags. This
+% mimics parts of the behaviour of \code{-{}-missing} in
+% \code{built_with_use}. See \featureref{use-dep-defaults}.
+% \item[Controllable compression] All items in the \code{doc},
+% \code{info}, \code{man} subdirectories of \code{/usr/share/} may
+% be compressed on-disk after \code{src_install}, except for
+% \code{/usr/share/doc/\$\{PF\}/html}. \code{docompress path \dots}
+% adds paths to the inclusion list for compression.
+% \code{docompress -x path \dots} adds paths to the exclusion list.
+% See \featureref{docompress}.
+% \item[\code{nonfatal} for commands] If you call \code{nonfatal}
+% the command given as argument will not abort the build process in
+% case of a failure (as is the default) but will return non-zero on
+% failure.
+% See \featureref{nonfatal}.
+% \item[\code{dodoc} recursion] If the \code{-r} switch is given as
+% first argument and followed by directories, files from there are
+% installed recursively. See \featureref{dodoc}.
+% \item[\code{doins} symlink support] Symbolic links are now
+% properly installed when using recursion (\code{-r} switch).
+% See \featureref{doins}.
+% \item[\code{PROPERTIES}] Is mandatory for all package managers now
+% to support interactive installs.
+% \item[\code{REQUIRED_USE}] This variable can be used similar to
+% the \code{(R|P)DEPEND} variables and define sets of USE flag
+% combinations that are not allowed. All elements can be further
+% nested to achieve more functionality.
+% \begin{description}
+% \item[Illegal combination] To prevent activation of
+% \code{flag1} if \code{flag2} is enabled use
+% "\code{flag2?\ ( !flag1 )}".
+% \item[OR] If at least one USE flag out of many must be
+% activated on \code{flag1} use
+% "\code{flag1?\ ( || ( flag2 flag3 \dots\ ) )}".
+% \item[XOR] To allow exactly one USE flag out of many use
+% "\code{\textasciicircum\textasciicircum ( flag1 flag2 \dots\ )}".
+% \end{description}
+% See \featureref{required-use}.
+% \item[\code{MERGE_TYPE}] This variable contains one of three
+% possible values to allow checks if it is normal merge with
+% compilation and installation (\code{source}), installation of a
+% binary package (\code{binary}), or a compilation without
+% installation (\code{buildonly}). See \featureref{merge-type}.
+% \item[\code{REPLACING_VERSIONS}, \code{REPLACED_BY_VERSION}]
+% These variables, valid in \code{pkg_*}, contain a list of all
+% versions (\code{PVR}) of this package that we are replacing, and
+% the version that is replacing the current one, respectively.
+% See \featureref{replace-version-vars}.
+% \end{description}
+% \subsection{Removals/Bans}
+% \label{sec:cs:eapi4-removalsbans}
+% \begin{description}
+% \item[\code{dohard}, \code{dosed}] Both functions are not allowed
+% any more. See \featureref{banned-commands}.
+% \item[No \code{RDEPEND} fall-back] The package manager will not
+% fall back to \code{RDEPEND=DEPEND} if \code{RDEPEND} is undefined.
+% See \featureref{rdepend-depend}.
+% \item[\code{S} fallback changes] The value of the variable
+% \code{S} will not automatically be changed to \code{WORKDIR}, if
+% \code{S} is not a directory, but abort. Virtual packages are the
+% only exception. See \featureref{s-workdir-fallback}.
+% \item[\code{AA}, \code{KV}] These variables are not defined
+% any more. See \featureref{aa} and \featureref{kv}.
+% \end{description}
\section{EAPI 5 (2012-09-20)}
\label{sec:cs:eapi5}
@@ -297,7 +297,7 @@ differences between these previous EAPIs.
\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{host-root-option}.
+ 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]}
@@ -401,6 +401,122 @@ differences between these previous EAPIs.
as replacement.
See \featureref{banned-commands}.
\end{description}
+
+\section{EAPI 7 (2018-04-30)}
+\label{sec:cs:eapi7}
+\subsection{Additions/Changes}
+\label{sec:cs:eapi7-additions}
+\begin{description}
+ \item[\code{package.*} and \code{use.*}] These profile files can
+ be directories instead of regular files. This is intended to be
+ used in overlays only.
+ See \featureref{package-mask-dir} and \featureref{profile-file-dirs}.
+ \item[\code{||} and \code{\textasciicircum\textasciicircum}
+ dependency groups] These groups now evaluate to false when they
+ are empty (for example, if there are only unmatched use
+ dependencies inside of them).
+ See \featureref{empty-dep-groups}.
+ \item[No trailing slash] The paths specified by \code{ROOT},
+ \code{EROOT}, \code{D}, and \code{ED} no longer end with a slash.
+ Thus, default \code{ROOT} is empty now.
+ See \featureref{trailing-slash}.
+ \item[Cross compilation support] Several variables have been added
+ and some commands have been extended for better cross compilation
+ support:
+ \begin{description}
+ \item[\code{BDEPEND}] Build dependencies are divided into two
+ classes: \code{BDEPEND} for native build tools (\code{CBUILD});
+ \code{DEPEND} for dependencies compatible with the system
+ being built (\code{CHOST}).
+ See \featureref{bdepend}.
+ \item[\code{SYSROOT}] The path to the root directory for
+ \code{DEPEND} type dependencies.
+ See \featureref{sysroot}.
+ \item[\code{ESYSROOT}] The concatenation of the \code{SYSROOT}
+ and \code{EPREFIX} paths, for convenience.
+ \item[\code{BROOT}] The prefixed root directory path for
+ \code{BDEPEND} type dependencies, typically executable build
+ tools.
+ See \featureref{broot}.
+ \item[\code{econf}]
+ Option \code{-{}-with-sysroot=\$\{ESYSROOT\}} is passed to
+ configure, if this option is supported.
+ See \featureref{econf-options}.
+ \item[\code{has_version} and \code{best_version}] These
+ helpers support \code{-b}, \code{-d} or \code{-r} options,
+ causing the query to apply to \code{BDEPEND}, \code{DEPEND}
+ or \code{RDEPEND} (the default). This replaces the
+ \code{-{}-host-root} option.
+ See \featureref{pm-query-options}.
+ \end{description}
+ \item[Environment blacklist] Any environment variable listed in
+ the profile-defined \code{ENV_UNSET} variable will be unset by the
+ package manager.
+ See \featureref{env-unset}.
+ \item[\code{patch}] All inputs valid for GNU patch version 2.7
+ are supported. Especially, this includes support for git-formatted
+ patches.
+ See \featureref{gnu-patch}.
+ \item[\code{nonfatal}] In addition to its definition as a shell
+ function, the \code{nonfatal} wrapper has now a fallback
+ implementation as an external command. Thus, it can be called
+ from other commands.
+ See \featureref{nonfatal}.
+ \item[Output commands] \code{einfo} and friends no longer use
+ stdout, so inside of command substitution their output won't be
+ caught.
+ See \featureref{output-no-stdout}.
+ \item[\code{eqawarn}] The \code{eqawarn} output command is
+ supported in the package manager itself.
+ See \featureref{eqawarn}.
+ \item[\code{die} in subshell] The \code{die} command is guaranteed
+ to work in a subshell context.
+ See \featureref{subshell-die}.
+ \item[\code{domo} destination] \code{domo} installs the specified
+ files under \code{/usr/share/locale} instead of
+ \code{\$\{DESTTREE\}/\allowbreak share/locale}.
+ See \featureref{domo-path}.
+ \item[Controllable stripping] The \code{dostrip -x} command can be
+ used to add paths to an exclusion list for stripping of debug
+ symbols, to allow more fine-grained control than with
+ \code{RESTRICT="strip"}.
+ See \featureref{dostrip}.
+ \item[Version manipulation and comparison commands] \mbox{}
+ \begin{description}
+ \item[\code{ver_cut} \emph{range} {[\emph{version}]}]
+ Print the version substring specified by \emph{range}.
+ \emph{version} defaults to \code{PV}.
+ \item[\code{ver_rs} \emph{range repl} \dots\ {[\emph{version}]}]
+ Replace all version separators in \emph{range} by string
+ \emph{repl}. Multiple \emph{range repl} pairs are allowed.
+ \emph{version} defaults to \code{PV}.
+ \item[\code{ver_test} {[\emph{v1}]} \emph{op v2}]
+ Check if the relation \emph{v1 op v2} is true.
+ \emph{v1} defaults to \code{PVR}; \emph{op} can be \code{-eq},
+ \code{-ne}, \code{-gt}, \code{-ge}, \code{-lt} or \code{-le}.
+ \end{description}
+ See \featureref{ver-commands}.
+\end{description}
+\subsection{Removals/Bans}
+\label{sec:cs:eapi7-removalsbans}
+\begin{description}
+ \item[\code{package.provided}] Deprecated since a long time and
+ finally dropped.
+ See \featureref{package-provided}.
+ \item[\code{PORTDIR} and \code{ECLASSDIR}] No longer defined,
+ because ebuilds should not directly access files in the repository.
+ See \featureref{portdir} and \featureref{eclassdir}.
+ \item[\code{DESTTREE} and \code{INSDESTTREE}] Not defined any
+ more. Use the \code{into} and \code{insinto} commands instead.
+ See \featureref{desttree} and \featureref{insdesttree}.
+ \item[\code{dohtml}] No longer allowed. \code{doins -r} can be
+ used as a replacement.
+ See \featureref{banned-commands}.
+ \item[\code{dolib} and \code{libopts}] No longer allowed.
+ The specific \code{dolib.a} or \code{dolib.so} commands should be
+ used as replacement.
+ See \featureref{banned-commands}.
+\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 8a2c3af..a626b74 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -1,11 +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, and~2 have been consolidated into a single column in the table
+For lack of space, EAPIs 0, 1, 2, and~3 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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{landscape}
\begin{longtable}{llP{7.5em}P{7.5em}P{7.5em}P{7.5em}P{7.5em}}
\caption{Features in EAPIs}\\
@@ -15,11 +16,11 @@ of this document for a complete table of previous EAPIs.}
\multicolumn{5}{c}{\b{EAPIs}} \\
\multicolumn{1}{c}{} &
\multicolumn{1}{c}{} &
-\multicolumn{1}{c}{0, 1, 2} &
-\multicolumn{1}{c}{3} &
+\multicolumn{1}{c}{0, 1, 2, 3} &
\multicolumn{1}{c}{4} &
\multicolumn{1}{c}{5} &
-\multicolumn{1}{c}{6} \\
+\multicolumn{1}{c}{6} &
+\multicolumn{1}{c}{7} \\
\midrule
\endfirsthead
\midrule
@@ -28,11 +29,11 @@ of this document for a complete table of previous EAPIs.}
\multicolumn{5}{c}{\b{EAPIs}} \\
\multicolumn{1}{c}{} &
\multicolumn{1}{c}{} &
-\multicolumn{1}{c}{0, 1, 2} &
-\multicolumn{1}{c}{3} &
+\multicolumn{1}{c}{0, 1, 2, 3} &
\multicolumn{1}{c}{4} &
\multicolumn{1}{c}{5} &
-\multicolumn{1}{c}{6} \\
+\multicolumn{1}{c}{6} &
+\multicolumn{1}{c}{7} \\
\midrule
\endhead
\midrule
@@ -40,44 +41,60 @@ of this document for a complete table of previous EAPIs.}
\bottomrule
\endlastfoot
+\t{package.mask} directory & \compactfeatureref{package-mask-dir} &
+ No & No & No & No & Yes \\
+
+Profile files as directories & \compactfeatureref{profile-file-dirs} &
+ No & No & No & No & Yes \\
+
+\t{package.provided} & \compactfeatureref{package-provided} &
+ Optional & Optional & Optional & Optional & No \\
+
Stable use masking/forcing & \compactfeatureref{stablemask} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
Bash version & \compactfeatureref{bash-version} &
- 3.2 & 3.2 & 3.2 & 3.2 & 4.2 \\
+ 3.2 & 3.2 & 3.2 & 4.2 & 4.2 \\
\t{failglob} in global scope & \compactfeatureref{failglob} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{IUSE} defaults & \compactfeatureref{iuse-defaults} &
* & Yes & Yes & Yes & Yes \\
\t{REQUIRED_USE} & \compactfeatureref{required-use} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{PROPERTIES} & \compactfeatureref{properties} &
- Optionally & Optionally & Yes & Yes & Yes \\
+ Optionally & Yes & Yes & Yes & Yes \\
\t{RDEPEND=DEPEND} & \compactfeatureref{rdepend-depend} &
- Yes & Yes & No & No & No \\
+ Yes & No & No & No & No \\
\t{DEFINED_PHASES} & \compactfeatureref{defined-phases} &
- Optionally & Optionally & Yes & Yes & Yes \\
+ Optionally & Yes & Yes & Yes & Yes \\
+
+\t{BDEPEND} & \compactfeatureref{bdepend} &
+ No & No & No & No & Yes \\
\t{??\ ( )} groups & \compactfeatureref{at-most-one-of} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
+
+Empty \t{||}, \t{\textasciicircum\textasciicircum} groups match &
+ \compactfeatureref{empty-dep-groups} &
+ Yes & Yes & Yes & Yes & No \\
\t{SRC_URI} arrows & \compactfeatureref{src-uri-arrows} &
* & Yes & Yes & Yes & Yes \\
Slot dependencies & \compactfeatureref{slot-deps} &
- * & Named & Named & Named and Operator & Named and Operator \\
+ * & Named & Named and Operator & Named and Operator & Named and Operator \\
Sub-slots & \compactfeatureref{sub-slot} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
Use dependencies & \compactfeatureref{use-deps} &
- * & 2-style & 4-style & 4-style & 4-style \\
+ * & 4-style & 4-style & 4-style & 4-style \\
\t{!}\ blockers & \compactfeatureref{bang-strength} &
* & Weak & Weak & Weak & Weak \\
@@ -86,16 +103,16 @@ Use dependencies & \compactfeatureref{use-deps} &
* & Strong & Strong & Strong & Strong \\
\t{S} to \t{WORKDIR} fallback & \compactfeatureref{s-workdir-fallback} &
- Always & Always & Conditional & Conditional & Conditional \\
+ Always & Conditional & Conditional & Conditional & Conditional \\
\t{pkg_pretend} & \compactfeatureref{pkg-pretend} &
- No & No & Yes & Yes & Yes \\
+ No & 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 & no-op & 6 \\
+ * & no-op & no-op & 6 & 6 \\
\t{src_configure} & \compactfeatureref{src-configure} &
* & Yes & Yes & Yes & Yes \\
@@ -104,18 +121,18 @@ Use dependencies & \compactfeatureref{use-deps} &
* & 2 & 2 & 2 & 2 \\
Parallel tests & \compactfeatureref{parallel-tests} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{src_install} style & \compactfeatureref{src-install} &
- no-op & no-op & 4 & 4 & 6 \\
+ no-op & 4 & 4 & 6 & 6 \\
\t{pkg_info} & \compactfeatureref{pkg-info} &
- Installed & Installed & Both & Both & Both \\
+ Installed & Both & Both & Both & Both \\
\t{default_} phase functions & \compactfeatureref{default-phase-funcs} &
* &
\t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
- \t{src_compile}, \t{src_test} &
+ \t{src_compile}, \t{src_install}, \t{src_test} &
\t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
\t{src_compile}, \t{src_install}, \t{src_test} &
\t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
@@ -124,123 +141,181 @@ Parallel tests & \compactfeatureref{parallel-tests} &
\t{src_compile}, \t{src_install}, \t{src_test} \\
\t{AA} & \compactfeatureref{aa} &
- Yes & Yes & No & No & No \\
+ Yes & No & No & No & No \\
+
+\t{PORTDIR} & \compactfeatureref{portdir} &
+ Yes & Yes & Yes & Yes & No \\
+
+\t{ECLASSDIR} & \compactfeatureref{eclassdir} &
+ Yes & Yes & Yes & Yes & No \\
+
+\t{SYSROOT}, \t{ESYSROOT} & \compactfeatureref{sysroot} &
+ No & No & No & No & Yes \\
+
+\t{BROOT} & \compactfeatureref{broot} &
+ No & No & No & No & Yes \\
+
+\t{DESTTREE} & \compactfeatureref{desttree} &
+ Yes & Yes & Yes & Yes & No \\
+
+\t{INSDESTTREE} & \compactfeatureref{insdesttree} &
+ Yes & Yes & Yes & Yes & No \\
\t{KV} & \compactfeatureref{kv} &
- Yes & Yes & No & No & No \\
+ Yes & No & No & No & No \\
\t{EBUILD_PHASE_FUNC} & \compactfeatureref{ebuild-phase-func} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{MERGE_TYPE} & \compactfeatureref{merge-type} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
+
+\t{ENV_UNSET} & \compactfeatureref{env-unset} &
+ No & No & No & No & Yes \\
Sane locale settings & \compactfeatureref{locale-settings} &
- Undefined & Undefined & Undefined & Undefined & Yes \\
+ Undefined & Undefined & Undefined & Yes & Yes \\
Profile \t{IUSE} injection & \compactfeatureref{profile-iuse-inject} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{REPLACING_VERSIONS} & \compactfeatureref{replace-version-vars} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{REPLACED_BY_VERSION} & \compactfeatureref{replace-version-vars} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{EPREFIX}, \t{ED}, \t{EROOT} & \compactfeatureref{offset-prefix-vars} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
+
+Trailing slash in \t{D} etc. & \compactfeatureref{trailing-slash} &
+ Yes & Yes & Yes & Yes & No \\
+
+GNU \t{patch} version & \compactfeatureref{gnu-patch} &
+ Any & Any & Any & Any & 2.7 \\
\t{find} is GNU? & \compactfeatureref{gnu-find} &
- Undefined & Undefined & Undefined & Yes & Yes \\
+ Undefined & Undefined & Yes & Yes & Yes \\
Most utilities die & \compactfeatureref{die-on-failure} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{nonfatal} & \compactfeatureref{nonfatal} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Function / external \\
\t{dohard} & \compactfeatureref{banned-commands} &
- Yes & Yes & Banned & Banned & Banned \\
+ Yes & Banned & Banned & Banned & Banned \\
\t{dosed} & \compactfeatureref{banned-commands} &
- Yes & Yes & Banned & Banned & Banned \\
+ Yes & Banned & Banned & Banned & Banned \\
\t{einstall} & \compactfeatureref{banned-commands} &
+ Yes & Yes & Yes & Banned & Banned \\
+
+\t{dohtml} & \compactfeatureref{banned-commands} &
Yes & Yes & Yes & Yes & Banned \\
-Option \t{-{}-host-root} & \compactfeatureref{host-root-option} &
- No & No & No & Yes & Yes \\
+\t{dolib} & \compactfeatureref{banned-commands} &
+ Yes & Yes & Yes & Yes & Banned \\
+
+\t{libopts} & \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} \\
+
+Output commands use stdout & \compactfeatureref{output-no-stdout} &
+ Yes & Yes & Yes & Yes & No \\
+
+\t{eqawarn} & \compactfeatureref{eqawarn} &
+ No & No & No & No & Yes \\
\t{die -n} & \compactfeatureref{nonfatal-die} &
+ No & No & No & Yes & Yes \\
+
+\t{die} in subshell & \compactfeatureref{subshell-die} &
No & No & No & No & Yes \\
\t{eapply} & \compactfeatureref{eapply} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{eapply_user} & \compactfeatureref{eapply-user} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{econf} arguments & \compactfeatureref{econf-options} &
- & & disable dependency tracking &
+ 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 &
+ disable dependency tracking, disable silent rules, docdir, htmldir, with sysroot \\
\t{dodoc -r} & \compactfeatureref{dodoc} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{doheader} & \compactfeatureref{doheader} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{doins} handles symlinks & \compactfeatureref{doins} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{doman} languages & \compactfeatureref{doman-langs} &
* & Yes & Yes & Yes & Yes \\
\t{doman -i18n} precedence & \compactfeatureref{doman-langs} &
- * & No & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
+
+\t{domo} destination path & \compactfeatureref{domo-path} &
+ \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{\$\{DESTTREE\}} & \t{/usr} \\
\t{new*} support stdin & \compactfeatureref{newfoo-stdin} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
Controllable compression & \compactfeatureref{docompress} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{docompress} & \compactfeatureref{docompress} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
+
+Controllable stripping & \compactfeatureref{dostrip} &
+ No & No & No & No & Yes \\
+
+\t{dostrip} & \compactfeatureref{dostrip} &
+ No & No & No & No & Yes \\
\t{use_with} empty third arg & \compactfeatureref{use-with} &
- No & No & Yes & Yes & Yes \\
+ No & Yes & Yes & Yes & Yes \\
\t{usex} & \compactfeatureref{usex} &
- No & No & No & Yes & Yes \\
+ No & No & Yes & Yes & Yes \\
\t{in_iuse} & \compactfeatureref{in-iuse} &
+ No & No & No & Yes & Yes \\
+
+\t{ver_*} commands & \compactfeatureref{ver-commands} &
No & No & No & No & Yes \\
\t{unpack} absolute paths & \compactfeatureref{unpack-absolute} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{unpack} support for \t{xz} & \compactfeatureref{unpack-extensions} &
- No & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\t{unpack} support for \t{txz} & \compactfeatureref{unpack-extensions} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{unpack} case-insensitive & \compactfeatureref{unpack-ignore-case} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{default} function & \compactfeatureref{default-func} &
* & Yes & Yes & Yes & Yes \\
\t{einstalldocs} & \compactfeatureref{einstalldocs} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
\t{get_libdir} & \compactfeatureref{get-libdir} &
- No & No & No & No & Yes \\
+ No & No & No & Yes & Yes \\
File mtimes preserved & \compactfeatureref{mtime-preserve} &
- Undefined & Yes & Yes & Yes & Yes \\
+ * & Yes & Yes & Yes & Yes \\
\end{longtable}
\end{landscape}
@@ -333,7 +408,7 @@ EAPI 5 is EAPI 4 with the following changes:
\item \t{USE} is calculated differently, \featureref{profile-iuse-inject}.
\item \t{find} is guaranteed to be GNU, \featureref{gnu-find}.
\item \t{best_version} and \t{has_version} support the \t{-{}-host-root} option,
- \featureref{host-root-option}.
+ \featureref{pm-query-options}.
\item \t{econf} adds \t{-{}-disable-silent-rules}, \featureref{econf-options}.
\item \t{doheader} and \t{newheader} support, \featureref{doheader}.
\item \t{new*} can read from standard input, \featureref{newfoo-stdin}.
@@ -363,7 +438,43 @@ EAPI 6 is EAPI 5 with the following changes:
\item \t{get_libdir} support, \featureref{get-libdir}.
\end{compactitem}
-\ChangeWhenAddingAnEAPI{6}
+\section{EAPI 7}
+
+EAPI 7 is EAPI 6 with the following changes:
+
+\begin{compactitem}
+\item \t{profiles/package.mask} can be a directory, \featureref{package-mask-dir}.
+\item \t{package.mask}, \t{package.use}, \t{use.*} and \t{package.use.*} in a profile can be
+ directories, \featureref{profile-file-dirs}.
+\item \t{package.provided} in profiles banned, \featureref{package-provided}.
+\item Empty \t{||} and \t{\textasciicircum\textasciicircum} dependency groups no longer count as
+ being matched, \featureref{empty-dep-groups}.
+\item \t{PORTDIR} is gone, \featureref{portdir}.
+\item \t{ECLASSDIR} is gone, \featureref{eclassdir}.
+\item \t{DESTTREE} is gone, \featureref{desttree}.
+\item \t{INSDESTTREE} is gone, \featureref{insdesttree}.
+\item \t{ROOT}, \t{EROOT}, \t{D}, \t{ED} no longer end with a trailing slash,
+ \featureref{trailing-slash}.
+\item \t{SYSROOT} and \t{ESYSROOT}, \featureref{sysroot}.
+\item \t{econf} adds \t{-{}-with-sysroot}, \featureref{econf-options}.
+\item \t{BDEPEND}, \featureref{bdepend}.
+\item \t{BROOT}, \featureref{broot}.
+\item \t{best_version} and \t{has_version} support \t{-b}, \t{-d} and \t{-r} options instead of
+ \t{-{}-host-root}, \featureref{pm-query-options}.
+\item \t{ENV_UNSET}, \featureref{env-unset}.
+\item \t{patch} is compatible with GNU patch 2.7, \featureref{gnu-patch}.
+\item \t{nonfatal} is both a shell function and an external command, \featureref{nonfatal}.
+\item \t{dohtml} banned, \featureref{banned-commands}.
+\item \t{dolib} and \t{libopts} banned, \featureref{banned-commands}.
+\item Output commands no longer use stdout, \featureref{output-no-stdout}.
+\item \t{eqawarn}, \featureref{eqawarn}.
+\item \t{die} is guaranteed to work in a subshell, \featureref{subshell-die}.
+\item \t{domo} installs to \t{/usr}, \featureref{domo-path}.
+\item Controllable stripping and \t{dostrip}, \featureref{dostrip}.
+\item Version manipulation and comparison commands, \featureref{ver-commands}.
+\end{compactitem}
+
+\ChangeWhenAddingAnEAPI{7}
% vim: set filetype=tex fileencoding=utf8 et tw=100 spell spelllang=en :
diff --git a/eapis.tex b/eapis.tex
index 7178e5a..6c015a2 100644
--- a/eapis.tex
+++ b/eapis.tex
@@ -19,8 +19,8 @@ EAPIs are also used for profile directories, as described in section~\ref{sec:pr
The following EAPIs are defined by this specification:
-\ChangeWhenAddingAnEAPI{6}
-\begin{description}
+\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'.
@@ -28,7 +28,8 @@ The following EAPIs are defined by this specification:
\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'.
-\end{description}
+\item[7] EAPI `7' contains a number of extensions to EAPI `6'.
+\end{compactdesc}
Except where explicitly noted, everything in this specification
applies to all of the above EAPIs.%
diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 5d42cba..f84263d 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -110,25 +110,47 @@ variable.
\t{PORTDIR} &
\t{src_*} &
No &
- The full path to the master repository's base directory. \\
+ \featurelabel{portdir} The full path to the master repository's base directory. Only for EAPIs
+ listed in table~\ref{tab:removed-env-vars-table} as supporting \t{PORTDIR}. \\
\t{ECLASSDIR} &
\t{src_*} &
No &
- The full path to the master repository's eclass directory. \\
+ \featurelabel{eclassdir} The full path to the master repository's eclass directory. Only for
+ EAPIs listed in table~\ref{tab:removed-env-vars-table} as supporting \t{ECLASSDIR}. \\
\t{ROOT} &
\t{pkg_*} &
No &
The absolute path to the root directory into which the package is to be merged. Phases which run
with full filesystem access must not touch any files outside of the directory given in
\t{ROOT}\@. Also of note is that in a cross-compiling environment, binaries inside of \t{ROOT}
- will not be executable on the build machine, so ebuilds must not call them. \t{ROOT} must be
- non-empty and end in a trailing slash. \\
+ will not be executable on the build machine, so ebuilds must not call them. The presence of
+ a trailing slash is EAPI dependent as listed in table~\ref{tab:trailing-slash}. \\
\t{EROOT} &
\t{pkg_*} &
No &
- Contains the path \t{\$\{ROOT\%/\}\$\{EPREFIX\}/} for convenience. See also the
- \t{EPREFIX} variable. Only for EAPIs listed in table~\ref{tab:offset-env-vars-table} as
- supporting \t{EROOT}. \\
+ Contains the concatenation of the paths in the \t{ROOT} and \t{EPREFIX} variables,
+ for convenience. See also the \t{EPREFIX} variable. Only for EAPIs listed in
+ table~\ref{tab:offset-env-vars-table} as supporting \t{EROOT}\@. The presence of a trailing
+ slash is EAPI dependent as listed in table~\ref{tab:trailing-slash}. \\
+\t{SYSROOT} &
+ \t{src_*} &
+ No &
+ \featurelabel{sysroot} The absolute path to the root directory containing build dependencies
+ satisfied by \t{DEPEND}\@. Only for EAPIs listed in table~\ref{tab:added-env-vars-table}
+ as supporting \t{SYSROOT}. \\
+\t{ESYSROOT} &
+ \t{src_*} &
+ No &
+ Contains the concatenation of the paths in the \t{SYSROOT} and \t{EPREFIX} variables,
+ for convenience. See also the \t{EPREFIX} variable. Only for EAPIs listed
+ in table~\ref{tab:offset-env-vars-table} as supporting \t{ESYSROOT}. \\
+\t{BROOT} &
+ \t{src_*} &
+ 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}.
+ \\
\t{T} &
All &
Partially\footnote{Consistent and preserved across a single connected sequence of install or
@@ -159,26 +181,34 @@ variable.
\t{src_install} &
No &
Contains the full path to the image directory into which the package should be installed.
- Must be non-empty and end in a trailing slash. \\
+ The presence of a trailing slash is EAPI dependent as listed in table~\ref{tab:trailing-slash}.
+ \\
\t{D} (continued) &
\t{pkg_preinst}, \t{pkg_postinst} &
Yes &
- Contains the full path to the image that is about to be or has just been merged. Must be
- non-empty and end in a trailing slash. \\
+ Contains the full path to the image that is about to be or has just been merged.
+ The presence of a trailing slash is EAPI dependent as listed in table~\ref{tab:trailing-slash}.
+ \\
\t{ED} &
\t{src_install}, \t{pkg_preinst}, \t{pkg_postinst} &
See \t{D} &
- Contains the path \t{\$\{D\%/\}\$\{EPREFIX\}/} for convenience. See also the
- \t{EPREFIX} variable. Only for EAPIs listed in table~\ref{tab:offset-env-vars-table} as
- supporting \t{ED}. \\
+ Contains the concatenation of the paths in the \t{D} and \t{EPREFIX} variables,
+ for convenience. See also the \t{EPREFIX} variable. Only for EAPIs listed in
+ table~\ref{tab:offset-env-vars-table} as supporting \t{ED}\@. The presence of a trailing slash
+ is EAPI dependent as listed in table~\ref{tab:trailing-slash}. \\
\t{DESTTREE} &
\t{src_install} &
No &
- Controls the location where \t{dobin}, \t{dolib}, \t{domo}, and \t{dosbin} install things. \\
+ \featurelabel{desttree} Controls the location where \t{dobin}, \t{dolib}, \t{domo},
+ and \t{dosbin} install things. Only for EAPIs listed in table~\ref{tab:removed-env-vars-table}
+ as supporting \t{DESTTREE}. In all other EAPIs, this is retained as a conceptual variable not
+ exported to the ebuild environment. \\
\t{INSDESTTREE} &
\t{src_install} &
No &
- Controls the location where \t{doins} installs things. \\
+ \featurelabel{insdesttree} Controls the location where \t{doins} installs things. Only for EAPIs
+ listed in table~\ref{tab:removed-env-vars-table} as supporting \t{INSDESTTREE}. In all other
+ EAPIs, this is retained as a conceptual variable not exported to the ebuild environment. \\
\t{USE} &
All &
Yes &
@@ -232,51 +262,61 @@ variable.
\end{longtable}
\end{landscape}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting various added env variables}
\label{tab:added-env-vars-table}
- \begin{tabular}{lllll}
+ \begin{tabular}{lllllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{\t{MERGE_TYPE}?}} &
- \multicolumn{1}{P{6em}}{\textbf{\t{REPLACING_VERSIONS}?}} &
- \multicolumn{1}{P{6em}}{\textbf{\t{REPLACED_BY_VERSION}?}} &
- \multicolumn{1}{P{6em}}{\textbf{\t{EBUILD_PHASE_FUNC}?}} \\
+ \multicolumn{1}{P{3.25em}}{\textbf{\t{MERGE_TYPE}?}} &
+ \multicolumn{1}{P{5.25em}}{\textbf{\t{REPLACING_VERSIONS}?}} &
+ \multicolumn{1}{P{5.75em}}{\textbf{\t{REPLACED_BY_VERSION}?}} &
+ \multicolumn{1}{P{5.75em}}{\textbf{\t{EBUILD_PHASE_FUNC}?}} &
+ \multicolumn{1}{c}{\textbf{\t{SYSROOT}?}} &
+ \multicolumn{1}{c}{\textbf{\t{BROOT}?}} \\
\midrule
- 0, 1, 2, 3 & No & No & No & No \\
- 4 & Yes & Yes & Yes & No \\
- 5, 6 & Yes & Yes & Yes & Yes \\
+ 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 \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting various removed env variables}
\label{tab:removed-env-vars-table}
- \begin{tabular}{lll}
+ \begin{tabular}{lllllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
\multicolumn{1}{c}{\textbf{\t{AA}?}} &
- \multicolumn{1}{c}{\textbf{\t{KV}?}} \\
+ \multicolumn{1}{c}{\textbf{\t{KV}?}} &
+ \multicolumn{1}{c}{\textbf{\t{PORTDIR}?}} &
+ \multicolumn{1}{c}{\textbf{\t{ECLASSDIR}?}} &
+ \multicolumn{1}{c}{\textbf{\t{DESTTREE}?}} &
+ \multicolumn{1}{c}{\textbf{\t{INSDESTTREE}?}} \\
\midrule
- 0, 1, 2, 3 & Yes & Yes \\
- 4, 5, 6 & No & No \\
+ 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 \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting offset-prefix env variables}
\label{tab:offset-env-vars-table}
- \begin{tabular}{llll}
+ \begin{tabular}{lllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
\multicolumn{1}{c}{\textbf{\t{EPREFIX}?}} &
\multicolumn{1}{c}{\textbf{\t{EROOT}?}} &
- \multicolumn{1}{c}{\textbf{\t{ED}?}} \\
+ \multicolumn{1}{c}{\textbf{\t{ED}?}} &
+ \multicolumn{1}{c}{\textbf{\t{ESYSROOT}?}} \\
\midrule
- 0, 1, 2 & No & No & No \\
- 3, 4, 5, 6 & Yes & Yes & Yes \\
+ 0, 1, 2 & No & No & No & No \\
+ 3, 4, 5, 6 & Yes & Yes & Yes & No \\
+ 7 & Yes & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -292,13 +332,15 @@ package manager specific directories.
\t{GZIP}, \t{BZIP}, \t{BZIP2}, \t{CDPATH}, \t{GREP_OPTIONS}, \t{GREP_COLOR} and \t{GLOBIGNORE}
must not be set.
+\featurelabel{env-unset} In addition, any variable whose name appears in the \t{ENV_UNSET} variable
+must be unset, for EAPIs listed in table~\ref{tab:profile-env-unset} as supporting \t{ENV_UNSET}.
\featurelabel{locale-settings} The package manager must ensure that the \t{LC_CTYPE} and
\t{LC_COLLATE} locale categories are equivalent to the POSIX locale, as far as characters in the
ASCII range (U+0000 to U+007F) are concerned. Only for EAPIs listed in such a manner in
table~\ref{tab:locale-settings}.
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Locale settings for EAPIs}
\label{tab:locale-settings}
\begin{tabular}{ll}
@@ -307,7 +349,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 & Yes \\
+ 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -396,7 +438,7 @@ contain at most one value.
\subsection{Offset-prefix variables}
\label{sec:offset-vars}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting offset-prefix}
\label{tab:offset-support-table}
\begin{tabular}{ll}
@@ -405,7 +447,7 @@ contain at most one value.
\multicolumn{1}{c}{\textbf{Supports offset-prefix?}}\\
\midrule
0, 1, 2 & No \\
- 3, 4, 5, 6 & Yes \\
+ 3, 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -420,6 +462,38 @@ behaviour of offset-prefix aware and agnostic is the same when \t{EPREFIX} is se
string in offset-prefix aware EAPIs. The latter do have the variables \t{ED} and \t{EROOT} properly
set, though.
+\subsection{Path variables and trailing slash}
+\label{sec:trailing-slash}
+
+Unless specified otherwise, the paths provided through package manager variables do not end with
+a trailing slash and cannot be empty. A few exceptions to that rule are listed
+in table~\ref{tab:trailing-slash} along with applicable EAPIs.
+
+For EAPIs where those variables are defined to always end with a trailing slash, the package manager
+guarantees that a trailing slash will always be appended to the path in question. If the path
+specifies the system root directory, it will consist of a single slash (\t{/}).
+
+\featurelabel{trailing-slash} For EAPIs where those variables are defined to never end with
+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}
+\begin{centertable}{Variables that always or never end with a trailing slash}
+ \label{tab:trailing-slash}
+ \begin{tabular}{lll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{2}{c}{\textbf{Ends with a trailing slash?}} \\
+ &
+ \t{ROOT}, \t{EROOT} &
+ \t{D}, \t{ED} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & always & always \\
+ 7 & never & never \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
% vim: set filetype=tex fileencoding=utf8 et tw=100 spell spelllang=en :
%%% Local Variables:
diff --git a/ebuild-format.tex b/ebuild-format.tex
index fac5c81..e7b8133 100644
--- a/ebuild-format.tex
+++ b/ebuild-format.tex
@@ -16,7 +16,7 @@ certain variables and functions (see sections~\ref{sec:ebuild-vars} and~\ref{sec
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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Bash version and options}
\label{tab:bash-version}
\begin{tabular}{lll}
@@ -26,7 +26,7 @@ output or standard error, or modify the state of the system in any way.
\multicolumn{1}{c}{\textbf{\t{failglob} in global scope?}} \\
\midrule
0, 1, 2, 3, 4, 5 & 3.2 & No \\
- 6 & 4.2 & Yes \\
+ 6, 7 & 4.2 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/ebuild-functions.tex b/ebuild-functions.tex
index 6240cf5..a4547fa 100644
--- a/ebuild-functions.tex
+++ b/ebuild-functions.tex
@@ -43,7 +43,7 @@ fallback to \t{WORKDIR} is used:
in \t{DEFINED_PHASES}.
\end{compactitem}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs with \t{S} to \t{WORKDIR} fallbacks}
\label{tab:s-fallback-table}
\begin{tabular}{ll}
@@ -52,7 +52,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 & Conditional error \\
+ 4, 5, 6, 7 & Conditional error \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -74,7 +74,7 @@ before the next phase is executed.
\t{pkg_pretend} must not write to the filesystem.
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{pkg_pretend}}
\label{tab:pkg-pretend-table}
\begin{tabular}{ll}
@@ -83,7 +83,7 @@ before the next phase is executed.
\multicolumn{1}{c}{\textbf{Supports \t{pkg_pretend}?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6 & Yes \\
+ 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -146,7 +146,7 @@ src_prepare() {
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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{\t{src_prepare} support and behaviour for EAPIs}
\label{tab:src-prepare-table}
\begin{tabular}{lll}
@@ -157,7 +157,7 @@ the \t{src_prepare} function is a no-op.
\midrule
0, 1 & No & Not applicable \\
2, 3, 4, 5 & Yes & no-op \\
- 6 & Yes & 6 \\
+ 6, 7 & Yes & 6 \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -184,7 +184,7 @@ src_configure() {
\end{verbatim}
\end{listing}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{src_configure}}
\label{tab:src-configure-table}
\begin{tabular}{ll}
@@ -193,7 +193,7 @@ src_configure() {
\multicolumn{1}{c}{\textbf{Supports \t{src_configure}?}} \\
\midrule
0, 1 & No \\
- 2, 3, 4, 5, 6 & Yes \\
+ 2, 3, 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -257,7 +257,7 @@ src_compile() {
\end{verbatim}
\end{listing}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{\t{src_compile} behaviour for EAPIs}
\label{tab:src-compile-table}
\begin{tabular}{ll}
@@ -267,7 +267,7 @@ src_compile() {
\midrule
0 & 0 \\
1 & 1 \\
- 2, 3, 4, 5, 6 & 2 \\
+ 2, 3, 4, 5, 6, 7 & 2 \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -289,7 +289,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{\t{src_test} behaviour for EAPIs}
\label{tab:src-test-table}
\begin{tabular}{ll}
@@ -298,7 +298,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 & Yes \\
+ 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -357,7 +357,7 @@ src_install() {
For other EAPIs, the default implementation used when the ebuild lacks the \t{src_install} function
is a no-op.
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{\t{src_install} behaviour for EAPIs}
\label{tab:src-install-table}
\begin{tabular}{ll}
@@ -367,7 +367,7 @@ is a no-op.
\midrule
0, 1, 2, 3 & no-op \\
4, 5 & 4 \\
- 6 & 6 \\
+ 6, 7 & 6 \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -425,7 +425,7 @@ that dependencies may not be installed.
\t{pkg_info} must not write to the filesystem.
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{pkg_info} on non-installed packages}
\label{tab:pkg-info-table}
\begin{tabular}{ll}
@@ -434,7 +434,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 & Yes \\
+ 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -456,7 +456,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{default_} phase functions}
\label{tab:default-phase-function-table}
\begin{tabular}{l P{26em}}
@@ -467,7 +467,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 & \t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
+ 4, 5, 6, 7 & \t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare}, \t{src_configure},
\t{src_compile}, \t{src_install}, \t{src_test} \\
\bottomrule
\end{tabular}
diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index 0a3051c..faecf8f 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -84,9 +84,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 section~\ref{sec:dependencies}.
+\item[BDEPEND] See section~\ref{sec:dependencies}.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{IUSE} defaults}
\label{tab:iuse-defaults-table}
\begin{tabular}{ll}
@@ -94,13 +95,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 & Yes \\
+ 0 & No \\
+ 1, 2, 3, 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting various ebuild-defined variables}
\label{tab:optional-vars-table}
\begin{tabular}{lll}
@@ -110,7 +111,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 & Yes & Yes \\
+ 4, 5, 6, 7 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -178,7 +179,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs with \t{RDEPEND=DEPEND} default}
\label{tab:rdepend-depend-table}
\begin{tabular}{ll}
@@ -187,7 +188,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 & No \\
+ 4, 5, 6, 7 & No \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -221,7 +222,7 @@ this variable defined, and must treat an empty string as ``this information is n
\note{Thus, by extension of section~\ref{sec:metadata-invariance}, phase functions must not be
defined based upon any variant condition.}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{DEFINED_PHASES}}
\label{tab:defined-phases-table}
\begin{tabular}{ll}
@@ -230,7 +231,7 @@ defined based upon any variant condition.}
\multicolumn{1}{c}{\textbf{Supports \t{DEFINED_PHASES}?}} \\
\midrule
0, 1, 2, 3 & Optionally \\
- 4, 5, 6 & Yes \\
+ 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/eclasses.tex b/eclasses.tex
index 49c6c4e..7a8bfbd 100644
--- a/eclasses.tex
+++ b/eclasses.tex
@@ -34,11 +34,11 @@ The \t{inherit} command must also ensure that:
\section{Eclass-defined Metadata Keys}
-The \t{IUSE}, \t{REQUIRED_USE}, \t{DEPEND}, \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.
+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.
\section{EXPORT_FUNCTIONS}
diff --git a/introduction.tex b/introduction.tex
index 5990f86..afbe708 100644
--- a/introduction.tex
+++ b/introduction.tex
@@ -62,9 +62,10 @@ applicable to tools or other applications that interact with ebuilds or ebuild r
Thanks to Mike Kelly (package manager provided utilities, section~\ref{sec:pkg-mgr-commands}),
Danny van Dyk (ebuild functions, section~\ref{sec:ebuild-functions}), David Leverton (various
sections), Petteri Räty (environment state, section~\ref{sec:ebuild-env-state}), Michał Górny
-(various sections), Andreas K. Hüttel (stable use masking, section~\ref{sec:use-masking}) and
-Zac Medico (sub-slots, section~\ref{sec:mandatory-vars}) for contributions. Thanks also to
-Mike Frysinger and Brian Harring for proof-reading and suggestions for fixes and/or clarification.
+(various sections), Andreas K. Hüttel (stable use masking, section~\ref{sec:use-masking}),
+Zac Medico (sub-slots, section~\ref{sec:mandatory-vars}) and James Le Cuirot (build dependencies,
+section~\ref{sec:ebuild-env-vars}) for contributions. Thanks also to Mike Frysinger and
+Brian Harring for proof-reading and suggestions for fixes and/or clarification.
% vim: set filetype=tex fileencoding=utf8 et tw=100 spell spelllang=en :
diff --git a/merge.tex b/merge.tex
index ee40947..d23d5f0 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{6}
+\ChangeWhenAddingAnEAPI{7}
\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 & Yes \\
+ 3, 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/metadata-cache.tex b/metadata-cache.tex
index 952f03d..3ac64a6 100644
--- a/metadata-cache.tex
+++ b/metadata-cache.tex
@@ -29,7 +29,8 @@ order. Other lines may be present following these; their meanings are not define
\item Use flags that this package requires (\t{REQUIRED_USE}).
Blank in some EAPIs; see table~\ref{tab:optional-vars-table}.
\item Post dependencies (\t{PDEPEND})
-\item Unused; previously used for old-style virtual \t{PROVIDE}.
+\item Build-time dependencies for \t{CBUILD} host (\t{BDEPEND}).
+ Blank in some EAPIs; see table~\ref{tab:depend-table}.
\item The ebuild API version to which this package conforms (\t{EAPI})
\item Properties (\t{PROPERTIES}). In some EAPIs, may optionally be blank, regardless of ebuild
metadata; see table~\ref{tab:optional-vars-table}.
diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index b6d15c6..506673b 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -22,21 +22,27 @@ The following commands affect this behaviour:
the build process due to a failure, instead a non-zero exit status shall be returned. Only in
EAPIs listed in table~\ref{tab:commands-die-table} as supporting \t{nonfatal}.
+ In EAPIs listed in table~\ref{tab:commands-die-table} as having \t{nonfatal} defined both
+ as a shell function and as an external command, the package manager must provide both
+ implementations to account for calling directly in ebuild scope or through \t{xargs}.
+
Explicit \t{die} or \t{assert} commands only respect \t{nonfatal} when called with the \t{-n}
- option and in EAPIs supporting this option, see table~\ref{tab:nonfatal-die}.
+ option and in EAPIs supporting this option, see table~\ref{tab:die-properties}.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPI command failure behaviour}
\label{tab:commands-die-table}
- \begin{tabular}{lll}
+ \begin{tabular}{llll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{Command failure behaviour}} &
- \multicolumn{1}{c}{\textbf{Supports \t{nonfatal}?}} \\
+ \multicolumn{1}{P{8em}}{\textbf{Command failure behaviour}} &
+ \multicolumn{1}{P{5em}}{\textbf{Supports \t{nonfatal}?}} &
+ \multicolumn{1}{P{12em}}{\textbf{\t{nonfatal} is both a function and an external command?}} \\
\midrule
- 0, 1, 2, 3 & Non-zero exit & No \\
- 4, 5, 6 & Aborts & Yes \\
+ 0, 1, 2, 3 & Non-zero exit & No & n/a \\
+ 4, 5, 6 & Aborts & Yes & No \\
+ 7 & Aborts & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -47,21 +53,25 @@ 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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Banned commands}
\label{tab:banned-commands-table}
- \begin{tabular}{llll}
+ \begin{tabular}{lllllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{3}{c}{\textbf{Command banned?}} \\
+ \multicolumn{6}{c}{\textbf{Command banned?}} \\
\multicolumn{1}{c}{} &
\multicolumn{1}{c}{\textbf{\t{dohard}}} &
\multicolumn{1}{c}{\textbf{\t{dosed}}} &
- \multicolumn{1}{c}{\textbf{\t{einstall}}} \\
+ \multicolumn{1}{c}{\textbf{\t{einstall}}} &
+ \multicolumn{1}{c}{\textbf{\t{dohtml}}} &
+ \multicolumn{1}{c}{\textbf{\t{dolib}}} &
+ \multicolumn{1}{c}{\textbf{\t{libopts}}} \\
\midrule
- 0, 1, 2, 3 & No & No & No \\
- 4, 5 & Yes & Yes & No \\
- 6 & Yes & Yes & Yes \\
+ 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 \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -82,27 +92,37 @@ These commands are used to extract information about the system. Ebuilds must no
these commands in parallel with any other package manager command. Ebuilds must not run any of
these commands once the current phase function has returned.
-\featurelabel{host-root-option} In EAPIs listed in table~\ref{tab:foo-version-host-root-table} as
-supporting option \t{-{}-host-root}, this flag as the first argument will cause the query to apply
-to the host root instead of \t{ROOT}.
+\featurelabel{pm-query-options} In EAPIs listed in table~\ref{tab:pm-query-options} as supporting
+option \t{-{}-host-root}, this flag as the first argument will cause the query to apply to the
+host root. Otherwise, it applies to \t{ROOT}.
+
+In EAPIs listed in table~\ref{tab:pm-query-options} as supporting options \t{-b}, \t{-d} and \t{-r},
+these mutually exclusive flags as the first argument will cause the query to apply to locations
+targetted by \t{BDEPEND}, \t{DEPEND} and \t{RDEPEND}, respectively. When none of these options
+are given, \t{-r} is assumed.
+
\begin{description}
\item[has_version] Takes exactly one package dependency specification as an argument. Returns
- true if a package matching the specification is installed in \t{ROOT}, and false otherwise.
+ true if a package matching the specification is installed, and false otherwise.
\item[best_version] Takes exactly one package dependency specification as an argument. If a
matching package is installed, prints the category, package name and version of the highest
matching version; otherwise, prints an empty string. The exit code is unspecified.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
-\begin{centertable}{EAPIs supporting \t{-{}-host-root} for \t{*_version} commands}
- \label{tab:foo-version-host-root-table}
- \begin{tabular}{ll}
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{Package manager query command options supported by EAPIs}
+ \label{tab:pm-query-options}
+ \begin{tabular}{lllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{\t{*_version} supports \t{-{}-host-root}?}} \\
+ \multicolumn{1}{c}{\textbf{\t{-{}-host-root}?}} &
+ \multicolumn{1}{c}{\textbf{\t{-b}?}} &
+ \multicolumn{1}{c}{\textbf{\t{-d}?}} &
+ \multicolumn{1}{c}{\textbf{\t{-r}?}} \\
\midrule
- 0, 1, 2, 3, 4 & No \\
- 5, 6 & Yes \\
+ 0, 1, 2, 3, 4 & No & No & No & No \\
+ 5, 6 & Yes & No & No & No \\
+ 7 & No & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -112,8 +132,12 @@ These commands display messages to the user. Unless otherwise stated, the entire
used as a message, with backslash-escaped characters interpreted as for the \t{echo -e} command of
bash, notably \t{\textbackslash t} for a horizontal tab, \t{\textbackslash n} for a new line, and
\t{\textbackslash\textbackslash} for a literal backslash. Ebuilds must not run any of these commands
-once the current phase function has returned. Unless otherwise noted, output may be sent to stdout,
-stderr or some other appropriate facility.
+once the current phase function has returned.
+
+\featurelabel{output-no-stdout} Unless otherwise noted, output may be sent to stderr or some other
+appropriate facility. In EAPIs listed in table~\ref{tab:output-commands} as not allowing stdout
+output, using stdout as an output facility is forbidden.
+
\begin{description}
\item[einfo] Displays an informational message.
\item[einfon] Displays an informational message without a trailing newline.
@@ -121,6 +145,10 @@ stderr or some other appropriate facility.
manager may choose to log \t{elog} messages by default where \t{einfo} messages are not, for
example.
\item[ewarn] Displays a warning message. Must not go to stdout.
+\item[eqawarn] \featurelabel{eqawarn} Display a QA warning message intended for ebuild developers.
+ The package manager may provide appropriate mechanisms to skip those messages for normal users.
+ Must not go to stdout. Only available in EAPIs listed in table~\ref{tab:output-commands} as
+ supporting \t{eqawarn}.
\item[eerror] Displays an error message. Must not go to stdout.
\item[ebegin] Displays an informational message. Should be used when beginning a possibly
lengthy process, and followed by a call to \t{eend}.
@@ -130,6 +158,21 @@ stderr or some other appropriate facility.
message followed by a failure indicator. Returns its first argument as exit status.
\end{description}
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{Output commands for EAPIs}
+ \label{tab:output-commands}
+ \begin{tabular}{lll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Commands can output to stdout?}} &
+ \multicolumn{1}{c}{\textbf{Supports \t{eqawarn}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & Yes & No \\
+ 7 & No & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
\subsection{Error commands}
These commands are used when an error is detected that will prevent the build process from
completing. Ebuilds must not run any of these commands once the current phase function has returned.
@@ -137,23 +180,30 @@ completing. Ebuilds must not run any of these commands once the current phase fu
\item[die] \featurelabel{nonfatal-die} If called under the \t{nonfatal} command (as per
section~\ref{sec:failure-behaviour}) and with \t{-n} as its first parameter, displays a failure
message provided in its following argument and then returns a non-zero exit status. Only in
- EAPIs listed in table~\ref{tab:nonfatal-die} as supporting option~\t{-n}. Otherwise, displays
+ EAPIs listed in table~\ref{tab:die-properties} as supporting option~\t{-n}. Otherwise, displays
a failure message provided in its first and only argument, and then aborts the build process.
- \t{die} is \e{not} guaranteed to work correctly if called from a subshell environment.
+
+ \featurelabel{subshell-die} In EAPIs listed in table~\ref{tab:die-properties} as not providing
+ subshell support, \t{die} is \e{not} guaranteed to work correctly if called from a subshell
+ environment.
\item[assert] Checks the value of the shell's pipe status variable, and if any component is non-zero
(indicating failure), calls \t{die}, passing any parameters to it.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
-\begin{centertable}{EAPIs supporting \t{-n} for \t{die} and \t{assert} commands}
- \label{tab:nonfatal-die}
- \begin{tabular}{ll}
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{Properties of \t{die} and \t{assert} commands in EAPIs}
+ \label{tab:die-properties}
+ \begin{tabular}{lll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{\t{die} and \t{assert} support \t{-n}?}} \\
+ \multicolumn{2}{c}{\textbf{\t{die} and \t{assert}}} \\
+ &
+ \multicolumn{1}{c}{\textbf{support \t{-n}?}} &
+ \multicolumn{1}{c}{\textbf{work in subshell?}} \\
\midrule
- 0, 1, 2, 3, 4, 5 & No \\
- 6 & Yes \\
+ 0, 1, 2, 3, 4, 5 & No & No \\
+ 6 & Yes & No \\
+ 7 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -217,7 +267,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Patch commands for EAPIs}
\label{tab:patch-commands}
\begin{tabular}{lll}
@@ -227,7 +277,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 & Yes & Yes \\
+ 6, 7 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -259,6 +309,9 @@ current phase function has returned.
\item \t{-{}-htmldir} must be \t{\$\{EPREFIX\}/usr/share/doc/\$\{PF\}/html}, 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{-{}-htmldir} occurs in the output of \t{configure -{}-help}.
+ \item \t{-{}-with-sysroot} must be \t{\$\{ESYSROOT\}}, 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{-{}-with-sysroot} occurs in the output of \t{configure -{}-help}.
\item \t{-{}-build} must be the value of the \t{CBUILD} environment variable. This option will
only be passed if \t{CBUILD} is non-empty.
\item \t{-{}-host} must be the value of the \t{CHOST} environment variable.
@@ -273,21 +326,23 @@ current phase function has returned.
occurs in the output of \t{configure -{}-help}.
\end{itemize}
- \ChangeWhenAddingAnEAPI{6}
+ \ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Extra \t{econf} arguments for EAPIs}
\label{tab:econf-options-table}
- \begin{tabular}{lllll}
+ \begin{tabular}{llllll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{-{}-disable-dependency-tracking}} &
- \multicolumn{1}{c}{\textbf{-{}-disable-silent-rules}} &
+ \multicolumn{1}{P{9em}}{\textbf{-{}-disable-dependency-tracking}} &
+ \multicolumn{1}{P{5em}}{\textbf{-{}-disable-silent-rules}} &
\multicolumn{1}{c}{\textbf{-{}-docdir}} &
- \multicolumn{1}{c}{\textbf{-{}-htmldir}} \\
+ \multicolumn{1}{c}{\textbf{-{}-htmldir}} &
+ \multicolumn{1}{c}{\textbf{-{}-with-sysroot}} \\
\midrule
- 0, 1, 2, 3 & No & No & No & No \\
- 4 & Yes & No & No & No \\
- 5 & Yes & Yes & No & No \\
- 6 & Yes & Yes & Yes & Yes \\
+ 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 \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -427,7 +482,7 @@ the current phase function has returned.
extensions are \t{css}, \t{gif}, \t{htm}, \t{html}, \t{jpeg}, \t{jpg}, \t{js} and \t{png}.
These default extensions can be extended or reduced (see below). The options that can be passed
to \t{dohtml} are as follows:
- \begin{description}
+ \begin{compactdesc}
\item[\t{-r}] enables recursion into directories.
\item[\t{-V}] enables verbosity.
\item[\t{-A}] adds file type extensions to the default list.
@@ -437,8 +492,10 @@ the current phase function has returned.
conjunction with \t{-r}).
\item[\t{-p}] sets a document prefix for installed files, not to be confused with the global
offset-prefix.
- \end{description}
+ \end{compactdesc}
+ In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is banned as per
+ section~\ref{sec:banned-commands}.
Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
It is undefined whether a failure shall occur if \t{-r} is not specified and a directory is
@@ -459,15 +516,17 @@ the current phase function has returned.
symlink is encountered. Failure behaviour is EAPI dependent as per
section~\ref{sec:failure-behaviour}.
-\item[dolib] For each argument, installs it into the appropriate library subdirectory under
- \t{DESTTREE}, as determined by algorithm~\ref{alg:ebuild-libdir}. Files are installed by default
- with file mode \t{0644}, or with the \t{install} options set by the most recent \t{libopts}
- call. Any symlinks are installed into the same directory as relative links to their original
- target. Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
+\item[dolib.a] For each argument, installs it into the appropriate library subdirectory under
+ \t{DESTTREE}, as determined by algorithm~\ref{alg:ebuild-libdir}. Files are installed with file
+ mode \t{0644}. Any symlinks are installed into the same directory as relative links to their
+ original target. Failure behaviour is EAPI dependent as per section~\ref{sec:failure-behaviour}.
-\item[dolib.a] As for \t{dolib} except each file is installed with mode \t{0644}.
+\item[dolib.so] As for \t{dolib.a} except each file is installed with mode \t{0755}.
-\item[dolib.so] As for \t{dolib} except each file is installed with mode \t{0755}.
+\item[dolib] As for \t{dolib.a} except that the default install mode can be overriden with
+ the \t{install} options set by the most recent \t{libopts} call. In EAPIs listed
+ in table~\ref{tab:banned-commands-table}, this command is banned as per
+ section~\ref{sec:banned-commands}.
\begin{algorithm}
\caption{Determining the library directory} \label{alg:ebuild-libdir}
@@ -507,11 +566,12 @@ the current phase function has returned.
the empty string. In EAPIs specified by table~\ref{tab:doman-table}, the \t{-i18n} option takes
precedence over the language code in the filename.
-\item[domo] Installs the given \t{.mo} files with file mode \t{0644} into the appropriate
- subdirectory of \t{DESTTREE\slash share\slash locale}, generated by taking the basename of the
- file, removing the \t{.*} suffix, and appending \t{/LC_MESSAGES}\@. The name of the installed
- files is the package name with \t{.mo} appended. Failure behaviour is EAPI dependent as per
- section~\ref{sec:failure-behaviour}.
+\item[domo] \featurelabel{domo-path} Installs the given \t{.mo} files with file mode \t{0644} into
+ the appropriate subdirectory of the locale tree, generated by taking the basename of the file,
+ removing the \t{.*} suffix, and appending \t{/LC_MESSAGES}\@. The name of the installed files
+ is the package name with \t{.mo} appended. Failure behaviour is EAPI dependent as per
+ section~\ref{sec:failure-behaviour}. The locale tree location is EAPI dependent as per
+ table~\ref{tab:domo-path}.
\item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
@@ -559,7 +619,7 @@ the current phase function has returned.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{dodoc -r}}
\label{tab:dodoc-table}
\begin{tabular}{ll}
@@ -568,12 +628,12 @@ the current phase function has returned.
\multicolumn{1}{c}{\textbf{Supports \t{dodoc -r}?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6 & Yes \\
+ 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{doheader} and \t{newheader}}
\label{tab:doheader-table}
\begin{tabular}{ll}
@@ -582,12 +642,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 & Yes \\
+ 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting symlinks for \t{doins}}
\label{tab:doins-table}
\begin{tabular}{ll}
@@ -596,12 +656,12 @@ the current phase function has returned.
\multicolumn{1}{c}{\textbf{\t{doins} supports symlinks?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6 & Yes \\
+ 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{\t{doman} language support options for EAPIs}
\label{tab:doman-table}
\begin{tabular}{lll}
@@ -612,12 +672,12 @@ the current phase function has returned.
\midrule
0, 1 & No & Not applicable \\
2, 3 & Yes & No \\
- 4, 5, 6 & Yes & Yes \\
+ 4, 5, 6, 7 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting stdin for \t{new*} commands}
\label{tab:newfoo-stdin-table}
\begin{tabular}{ll}
@@ -626,7 +686,21 @@ 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 & Yes \\
+ 5, 6, 7 & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{\t{domo} destination path in EAPIs}
+ \label{tab:domo-path}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Destination path}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & \t{\$\{DESTTREE\}/share/locale} \\
+ 7 & \t{/usr/share/locale} \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -663,30 +737,30 @@ has returned.
\item[exeopts] Sets the options passed by \t{doexe} et al.\ to the \t{install} command.
\item[libopts] Sets the options passed by \t{dolib} et al.\ to the \t{install} command.
+ In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is banned as
+ per section~\ref{sec:banned-commands}.
\end{description}
-\subsection{Commands affecting install compression}
+\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
+files.
-\featurelabel{docompress} In EAPIs listed in table~\ref{tab:compression-table} as supporting
-controllable compression, the package manager may optionally compress a subset of the files under
-the \t{ED} directory. To control which directories may or may not be compressed, the package manager
-shall maintain two lists:
+For each of the operations mentioned below, the package manager shall maintain an inclusion list
+and an exclusion list, in order to control which directories and files the operation may or may not
+be performed upon. The initial contents of the two lists is specified below for each of the
+commands, respectively.
-\begin{compactitem}
-\item An inclusion list, which initially contains \t{/usr/share/doc}, \t{/usr/share/info} and
- \t{/usr/share/man}.
-\item An exclusion list, which initially contains \t{/usr/share/doc/\$\{PF\}/html}.
-\end{compactitem}
-
-The optional compression shall be carried out after \t{src_install} has completed, and before the
-execution of any subsequent phase function. For each item in the inclusion list, pretend it has the
-value of the \t{ED} variable prepended, then:
+Any of these operations shall be carried out after \t{src_install} has completed, and before the
+execution of any subsequent phase function. For each item in the inclusion list, pretend it has
+the value of the \t{ED} variable prepended, then:
\begin{compactitem}
\item If it is a directory, act as if every file or directory immediately under this directory
were in the inclusion list.
-\item If the item is a file, it may be compressed unless it has been excluded as described below.
+\item If the item is a file, the operation may be performed on it, unless it has been excluded as
+ described below.
\item If the item does not exist, it is ignored.
\end{compactitem}
@@ -696,34 +770,62 @@ pretend it has the value of the \t{ED} variable prepended, then:
\begin{compactitem}
\item If it is a directory, act as if every file or directory immediately under this directory
were in the exclusion list.
-\item If the item is a file, it shall not be compressed.
+\item If the item is a file, the operation shall not be performed on it.
\item If the item does not exist, it is ignored.
\end{compactitem}
-The package manager shall take appropriate steps to ensure that its compression mechanisms behave
-sensibly even if an item is listed in the inclusion list multiple times, if an item is a symlink,
-or if a file is already compressed.
+The package manager shall take appropriate steps to ensure that any operations that it performs on
+files in the staging area behave sensibly even if an item is listed in the inclusion list multiple
+times or if an item is a symlink.
+
+\featurelabel{docompress} In EAPIs listed in table~\ref{tab:staging-area-commands} as supporting
+controllable compression, the package manager may optionally compress a subset of the files under
+the \t{ED} directory. The package manager shall ensure that its compression mechanisms behave
+sensibly even if a file is already compressed. For compression, the initial values of the two lists
+are as follows:
+
+\begin{compactitem}
+\item The inclusion list contains \t{/usr/share/doc}, \t{/usr/share/info} and \t{/usr/share/man}.
+\item The exclusion list contains \t{/usr/share/doc/\$\{PF\}/html}.
+\end{compactitem}
+
+\featurelabel{dostrip} In EAPIs listed in table~\ref{tab:staging-area-commands} as supporting
+controllable stripping of symbols, the package manager may strip a subset of the files under the
+\t{ED} directory. For stripping of symbols, the initial values of the two lists are as follows:
+
+\begin{compactitem}
+\item If the \t{RESTRICT} variable described in section~\ref{sec:restrict} enables a \t{strip}
+ token, the inclusion list is empty; otherwise it contains \t{/} (the root path).
+\item The exclusion list is empty.
+\end{compactitem}
The following commands may be used in \t{src_install} to alter these lists. It is an error to call
any of these functions from any other phase.
\begin{description}
\item[docompress] If the first argument is \t{-x}, add each of its subsequent arguments to the
-exclusion list. Otherwise, add each argument to the inclusion list. Only available in EAPIs listed
-in table~\ref{tab:compression-table} as supporting \t{docompress}.
+ exclusion list for compression. Otherwise, add each argument to the respective inclusion list.
+ Only available in EAPIs listed in table~\ref{tab:staging-area-commands} as supporting
+ \t{docompress}.
+
+\item[dostrip] If the first argument is \t{-x}, add each of its subsequent arguments to the
+ exclusion list for stripping of symbols. Otherwise, add each argument to the respective
+ inclusion list. Only available in EAPIs listed in table~\ref{tab:staging-area-commands} as
+ supporting \t{dostrip}.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
-\begin{centertable}{EAPIs supporting controllable compression}
- \label{tab:compression-table}
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{Commands controlling manipulation of files in the staging area in EAPIs}
+ \label{tab:staging-area-commands}
\begin{tabular}{lll}
\toprule
\multicolumn{1}{c}{\textbf{EAPI}} &
- \multicolumn{1}{c}{\textbf{Supports controllable compression?}} &
- \multicolumn{1}{c}{\textbf{Supports \t{docompress}?}} \\
+ \multicolumn{1}{P{13.5em}}{\textbf{Supports controllable compression and \t{docompress}?}} &
+ \multicolumn{1}{P{10.5em}}{\textbf{Supports controllable stripping and \t{dostrip}?}} \\
\midrule
0, 1, 2, 3 & No & No \\
- 4, 5, 6 & Yes & Yes \\
+ 4, 5, 6 & Yes & No \\
+ 7 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -766,7 +868,7 @@ table~\ref{tab:use-list-strictness}.
table~\ref{tab:use-list-functions} as supporting \t{in_iuse}.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPI behaviour for use queries not in \t{IUSE_EFFECTIVE}}
\label{tab:use-list-strictness}
\begin{tabular}{ll}
@@ -775,12 +877,12 @@ table~\ref{tab:use-list-strictness}.
\multicolumn{1}{c}{\textbf{Behaviour}} \\
\midrule
0, 1, 2, 3 & Undefined \\
- 4, 5, 6 & Error \\
+ 4, 5, 6, 7 & Error \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\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}
@@ -789,12 +891,12 @@ table~\ref{tab:use-list-strictness}.
\multicolumn{1}{c}{\textbf{Supports empty third argument?}} \\
\midrule
0, 1, 2, 3 & No \\
- 4, 5, 6 & Yes \\
+ 4, 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{EAPIs supporting \t{usex} and \t{in_iuse}}
\label{tab:use-list-functions}
\begin{tabular}{lll}
@@ -805,7 +907,7 @@ table~\ref{tab:use-list-strictness}.
\midrule
0, 1, 2, 3, 4 & No & No \\
5 & Yes & No \\
- 6 & Yes & Yes \\
+ 6, 7 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -820,6 +922,86 @@ These functions check whitespace-separated lists for a particular value.
\item[hasq] Deprecated synonym for \t{has}.
\end{description}
+\subsection{Version manipulation and comparison commands}
+\featurelabel{ver-commands}
+These commands provide utilities for working with version strings. Their availability per EAPI is
+listed in table~\ref{tab:version-commands}.
+
+For the purpose of version manipulation commands, the specification provides a method for splitting
+an arbitrary version string (not necessarily conforming to section~\ref{sec:version-spec}) into
+a series of version components and version separators.
+
+A version component consists either purely of digits (\t{[0-9]+}) or purely of uppercase and
+lowercase ASCII letters (\t{[A-Za-z]+}). A version separator is either a string of any other
+characters (\t{[\textasciicircum A-Za-z0-9]}) or it occurs at the transition between a sequence
+of digits and a sequence of letters, or vice versa. In the latter case, the version separator is
+an empty string.
+
+The version string is processed left-to-right, with the successive version components being assigned
+successive indices starting with 1. The separator following a version component is assigned
+the index of the preceding version component. If the first version component is preceded by
+a non-empty string of version separator characters, this separator is assigned the index 0.
+
+The version components are presumed present if not empty. The version separators between version
+components are always presumed present, even if they are empty. The version separators preceding
+the first version component and following the last are only presumed present if they are not empty.
+
+Whenever the commands support ranges, the range is specified as an unsigned integer, optionally
+followed by a hyphen (\t{-}), which in turn is optionally followed by another unsigned integer.
+
+A single integer specifies a single component or separator index. An integer followed by a hyphen
+specifies all components or separators starting with the one at the specified index. Two integers
+separated by a hyphen specify a range of versions starting at the index specified by the first
+and ending at the second, inclusively.
+
+\begin{description}
+\item[ver_cut] Takes a range as the first argument, and optionally a version string as the second.
+ Prints a substring of the version string starting at the version component specified as start
+ of the range and ending at the version component specified as end of the range. If the version
+ string is not specified, \t{\$\{PVR\}} is used.
+
+ If the range spans outside the present version components, the missing components and separators
+ are presumed empty. In particular, the range starting at zero includes the zeroth version
+ separator if present, and the range spanning past the last version component includes the suffix
+ following it if present. A range that does not intersect with any present version components
+ yields an empty string.
+
+\item[ver_rs] Takes one or more pairs of arguments, optionally followed by a version string.
+ Every argument pair specifies a range and a replacement string. Prints a version string after
+ performing the specified separator substitutions. If the version string is not specified,
+ \t{\$\{PVR\}} is used.
+
+ For every argument pair specified, each of the version separators present at indices specified
+ by the range is replaced with the replacement string, in order. If the range spans outside
+ the range of present version separators, it is silently truncated.
+
+\item[ver_test] Takes two or three arguments. In the 3-argument form, takes an LHS version string,
+ followed by an operator, followed by an RHS version string. In the 2-argument form, the first
+ version string is omitted and \t{\$\{PVR\}} is used as LHS version string. The operator can be
+ \t{-eq} (equal to), \t{-ne} (not equal to), \t{-gt} (greater than), \t{-ge} (greater than or
+ equal to), \t{-lt} (less than) or \t{-le} (less than or equal to). Returns shell true (0) if
+ the specified relation between the LHS and RHS version strings is fulfilled.
+
+ Both version strings must conform to the version specification in
+ section~\ref{sec:version-spec}. Comparison is done using algorithm~\ref{alg:version-comparison}.
+\end{description}
+
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{EAPIs supporting version manipulation commands}
+ \label{tab:version-commands}
+ \begin{tabular}{llll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{\t{ver_cut}?}} &
+ \multicolumn{1}{c}{\textbf{\t{ver_rs}?}} &
+ \multicolumn{1}{c}{\textbf{\t{ver_test}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & No & No & No \\
+ 7 & Yes & Yes & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
\subsection{Misc commands}
The following commands are always available in the ebuild environment, but don't really fit in any
of the above categories. Ebuilds must not run any of these commands once the current phase function
@@ -888,7 +1070,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{6}
+ \ChangeWhenAddingAnEAPI{7}
\begin{centertable}{\t{unpack} behaviour for EAPIs}
\label{tab:unpack-behaviour}
\begin{tabular}{lll}
@@ -898,12 +1080,12 @@ has returned.
\multicolumn{1}{c}{\textbf{Case-insensitive matching?}} \\
\midrule
0, 1, 2, 3, 4, 5 & No & No \\
- 6 & Yes & Yes \\
+ 6, 7 & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
- \ChangeWhenAddingAnEAPI{6}
+ \ChangeWhenAddingAnEAPI{7}
\begin{centertable}{\t{unpack} extensions for EAPIs}
\label{tab:unpack-extensions-table}
\begin{tabular}{llll}
@@ -915,7 +1097,7 @@ has returned.
\midrule
0, 1, 2 & No & No & No \\
3, 4, 5 & Yes & Yes & No \\
- 6 & Yes & Yes & Yes \\
+ 6, 7 & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -982,7 +1164,7 @@ has returned.
\end{description}
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Misc commands for EAPIs}
\label{tab:misc-commands}
\begin{tabular}{llll}
@@ -994,7 +1176,7 @@ has returned.
\midrule
0, 1 & No & No & No \\
2, 3, 4, 5 & Yes & No & No \\
- 6 & Yes & Yes & Yes \\
+ 6, 7 & Yes & Yes & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/pms.tex b/pms.tex
index c4a72e9..761aade 100644
--- a/pms.tex
+++ b/pms.tex
@@ -21,8 +21,8 @@
pdfkeywords={Gentoo, package manager, specification},
}
-\CurrentEAPIIs{6}
-\ChangeWhenAddingAnEAPI{6}
+\CurrentEAPIIs{7}
+\ChangeWhenAddingAnEAPI{7}
\begin{document}
\maketitle
diff --git a/profile-variables.tex b/profile-variables.tex
index 2c199aa..6cd770c 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -29,11 +29,18 @@ incrementally; otherwise, the following variables may or may not be treated incr
\item \t{USE_EXPAND_UNPREFIXED}
\end{compactitem}
+If the package manager supports any EAPI listed in table~\ref{tab:profile-env-unset} as using
+\t{ENV_UNSET}, the following variable must also be treated incrementally; otherwise, it may or
+may not be treated incrementally:
+\begin{compactitem}
+\item \t{ENV_UNSET}
+\end{compactitem}
+
Other variables, except where they affect only package-manager-specific functionality (such as
Portage's \t{FEATURES} variable), must not be treated incrementally---later definitions shall
completely override those in parent profiles.
-\ChangeWhenAddingAnEAPI{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Profile-defined \t{IUSE} injection for EAPIs}
\label{tab:profile-iuse-injection-table}
\begin{tabular}{ll}
@@ -42,7 +49,21 @@ 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 & Yes \\
+ 5, 6, 7 & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
+\ChangeWhenAddingAnEAPI{7}
+\begin{centertable}{Profile-defined unsetting of variables in EAPIs}
+ \label{tab:profile-env-unset}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Supports \t{ENV_UNSET}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & No \\
+ 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
@@ -69,6 +90,8 @@ The following variables have specific meanings when set in profiles.
displaying uninteresting or unhelpful information to an end user.
\item[USE_EXPAND_IMPLICIT, IUSE_IMPLICIT] Used to inject implicit values into \t{IUSE}\@. See
section~\ref{sec:use-iuse-handling} for details.
+\item[ENV_UNSET] Contains a whitespace-delimited list of variables that the package manager shall
+ unset. See section~\ref{sec:ebuild-env-vars} for details.
\end{description}
In addition, for EAPIs listed in table~\ref{tab:profile-iuse-injection-table} as supporting profile
diff --git a/profiles.tex b/profiles.tex
index 9263418..58c6d3b 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -64,11 +64,33 @@ bash syntax, is allowed as follows:
\end{compactitem}
\subsection{Simple line-based files}
+\label{sec:line-stacking}
These files are a simple one-item-per-line list, which is inherited in the following manner: the
parent profile's list is taken, and the current profile's list appended. If any line begins with a
hyphen, then any lines previous to it whose contents are equal to the remainder of that line are
removed from the list. Once again, blank lines and those beginning with a \# are discarded.
+\featurelabel{profile-file-dirs} In EAPIs listed in table~\ref{tab:profile-file-dirs} as supporting
+directories for profile files, any of the files \t{package.mask}, \t{package.use}, \t{use.*} and
+\t{package.use.*} mentioned below can be a directory instead of a regular file. Files contained
+in that directory, unless their name begins with a dot, will be concatenated in order of their
+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}
+\begin{centertable}{EAPIs supporting directories for profile files}
+ \label{tab:profile-file-dirs}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Supports directories for profile files?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & No \\
+ 7 & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
\subsection{packages}
The \t{packages} file is used to define the `system set' for this profile.
After the above rules for inheritance and comments are applied, its lines must take one of two
@@ -84,7 +106,8 @@ but is mentioned here for completeness.
\subsection{package.mask}
\t{package.mask} is used to prevent packages from being installed on a given profile. Each line
contains one package dependency specification; anything matching this specification will not be
-installed unless unmasked by the user's configuration.
+installed unless unmasked by the user's configuration. In some EAPIs, \t{package.mask} can be a
+directory instead of a regular file as per section~\ref{sec:line-stacking}.
Note that the \t{-spec} syntax can be used to remove a mask in a parent profile, but not
necessarily a global mask (from \t{profiles/package.mask}, section~\ref{profiles-package.mask}).
@@ -93,24 +116,41 @@ necessarily a global mask (from \t{profiles/package.mask}, section~\ref{profiles
inherit tree when it comes to \t{-lines}. This behaviour may not be relied upon.}
\subsection{package.provided}
-\t{package.provided} is used to tell the package manager that a certain package version should be
-considered to be provided by the system regardless of whether it is actually installed. Because it
-has severe adverse effects on USE-based and slot-based dependencies, its use is strongly deprecated
-and package manager support must be regarded as purely optional.
+\featurelabel{package-provided} \t{package.provided} is used to tell the package manager that
+a certain package version should be considered to be provided by the system regardless of whether
+it is actually installed. Because it has severe adverse effects on USE-based and slot-based
+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}
+\begin{centertable}{EAPIs supporting \t{package.provided} in profiles}
+ \label{tab:package-provided}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{Supports \t{package.provided}?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & Optionally \\
+ 7 & No \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
\subsection{package.use}
-The \t{package.use} file may be used by the package manager to override the default USE flags specified
-by \t{make.defaults} on a per package basis. The format is to have a package dependency specification,
-and then a space delimited list of USE flags to enable. A USE flag in the form of \t{-flag} indicates
-that the package should have the USE flag disabled. The package dependency specification is limited to
-the forms defined by the directory's EAPI.
+The \t{package.use} file may be used by the package manager to override the default USE flags
+specified by \t{make.defaults} on a per package basis. The format is to have a package dependency
+specification, and then a space delimited list of USE flags to enable. A USE flag in the form of
+\t{-flag} indicates that the package should have the USE flag disabled. The package dependency
+specification is limited to the forms defined by the directory's EAPI\@. In some EAPIs,
+\t{package.use} can be a directory instead of a regular file as per section~\ref{sec:line-stacking}.
\subsection{USE masking and forcing}
\label{sec:use-masking}
This section covers the eight files \t{use.mask}, \t{use.force}, \t{use.stable.mask},
\t{use.stable.force}, \t{package.use.mask}, \t{package.use.force}, \t{package.use.stable.mask},
and \t{package.use.\allowbreak stable.force}. They are described together because they interact in
-a non-trivial manner.
+a non-trivial manner. In some EAPIs, these files can be directories instead of regular files as per
+section~\ref{sec:line-stacking}.
Simply speaking, \t{use.mask} and \t{use.force} are used to say that a given USE flag must never or
always, respectively, be enabled when using this profile. \t{package.use.mask} and
@@ -124,7 +164,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{6}
+\ChangeWhenAddingAnEAPI{7}
\begin{centertable}{Profile directory support for masking/forcing use flags in stable versions only}
\label{tab:profile-stablemask}
\begin{tabular}{ll}
@@ -133,7 +173,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 & Yes \\
+ 5, 6, 7 & Yes \\
\bottomrule
\end{tabular}
\end{centertable}
diff --git a/tree-layout.tex b/tree-layout.tex
index fc28c8a..9e60af4 100644
--- a/tree-layout.tex
+++ b/tree-layout.tex
@@ -107,6 +107,12 @@ manager must ignore any files in this directory that it does not recognise.
Contains a list, one entry per line, of package dependency specifications (using the directory's
EAPI). Any package version matching one of these is considered to be masked, and will not be
installed regardless of profile unless it is unmasked by the user configuration.
+
+ \featurelabel{package-mask-dir} For EAPIs listed in table~\ref{tab:package-mask-dir} as
+ supporting it, \t{package.mask} can be a directory instead of a regular file. Files contained
+ in that directory, unless their name begins with a dot, will be concatenated in order of their
+ filename in the POSIX locale and the result will be processed as if it were a single file.
+ Any subdirectories will be ignored.
\item[profiles.desc] Described below in section~\ref{sec:profiles.desc}.
\item[repo_name] Contains, on a single line, the name of this repository. The repository name must
conform to section~\ref{sec:repository-names}.
@@ -123,6 +129,20 @@ 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}
+\begin{centertable}{EAPIs supporting a directory for \t{package.mask}}
+ \label{tab:package-mask-dir}
+ \begin{tabular}{ll}
+ \toprule
+ \multicolumn{1}{c}{\textbf{EAPI}} &
+ \multicolumn{1}{c}{\textbf{\t{package.mask} can be a directory?}} \\
+ \midrule
+ 0, 1, 2, 3, 4, 5, 6 & No \\
+ 7 & Yes \\
+ \bottomrule
+ \end{tabular}
+\end{centertable}
+
\subsection{The profiles.desc file}
\label{sec:profiles.desc}
\t{profiles.desc} is a line-based file, with the standard commenting