[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-14 Thread Ulrich Müller
commit: f4927680a3dc75db0d7ff5669622548e7667da76
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Dec 14 19:20:12 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Dec 14 19:20:12 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f4927680

Cheat sheet: EAPI 9 approval date

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 920557c..57f64f5 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -577,7 +577,7 @@ differences between these EAPIs.
 and LHA archives. See \featureref{unpack-extensions}.
 \end{description}
 
-\section{EAPI 9}
+\section{EAPI 9 (2025-12-14)}
 \label{sec:cs:eapi9}
 \subsection{Additions/changes}
 \label{sec:cs:eapi9-additions}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: 62ba262306fc4fc2eade40854c629c9b1786c3bb
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:24 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=62ba2623

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 20 ++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 99a3526..f07d0b4 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -195,6 +195,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{edo} & \compactfeatureref{edo} &
 No & No & No & Yes \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -388,6 +391,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
 \item \t{edo}, \featureref{edo}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..f588d54 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,24 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link target starts with \t{D} must be 
rewritten with the
+leading \t{D} removed. The package manager should issue a notice when 
encountering such a symlink.
+In all other EAPIs, symlinks must be merged with their targets unmodified.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks in EAPIs}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: 15e4834617b9d9144460f4d3461e8d663bfce9ca
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:14:14 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:23 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=15e48346

EAPI 9 has edo

Bug: https://bugs.gentoo.org/744880
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 22 +-
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index a411352..99a3526 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -192,6 +192,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+\t{edo} & \compactfeatureref{edo} &
+No & No & No & Yes \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -384,6 +387,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item \t{edo}, \featureref{edo}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 48c341d..3f5592b 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1302,21 +1302,33 @@ has returned.
 \end{algorithmic}
 \end{algorithm}
 
+\item[edo] \featurelabel{edo} Takes a command line, prints it to stderr and 
executes the command.
+Specifically, the entire list of (one or more) arguments is output as an 
informational message
+to stderr; individual tokens may be reformatted to avoid ambiguity. The first 
argument is then
+executed as a command, with the remaining arguments passed to it. If the 
command fails, \t{edo}
+aborts the build process using \t{die}, unless it was called under 
\t{nonfatal}, in which case it
+returns a non-zero exit status.
+
+\t{edo} must be implemented internally as a shell function. Only available in 
EAPIs listed in
+table~\ref{tab:misc-commands} as supporting \t{edo}.
+
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Misc commands for EAPIs}
 \label{tab:misc-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \toprule
   \multicolumn{1}{c}{\textbf{EAPI}} &
   \multicolumn{1}{c}{\textbf{\t{default}?}} &
   \multicolumn{1}{c}{\textbf{\t{einstalldocs}?}} &
-  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} &
+  \multicolumn{1}{c}{\textbf{\t{edo}?}} \\
   \midrule
-  0, 1  & No  & No  & No  \\
-  2, 3, 4, 5& Yes & No  & No  \\
-  6, 7, 8, 9& Yes & Yes & Yes \\
+  0, 1  & No  & No  & No  & No  \\
+  2, 3, 4, 5& Yes & No  & No  & No  \\
+  6, 7, 8   & Yes & Yes & Yes & No  \\
+  9 & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: ef2c813cba5812475426562cc8080581e94e090f
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 16:41:33 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:25 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=ef2c813c

Cheat sheet: Update for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 48 +++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 60bea45..920557c 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -15,7 +15,7 @@
 \usepackage[local]{gitinfo2}
 \newcommand{\code}[1]{\texttt{#1}}
 % This should reflect the latest approved EAPI version
-\newcommand{\version}{8.0}
+\newcommand{\version}{9.0}
 \newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
 \renewcommand{\familydefault}{\sfdefault}
 \urlstyle{sf}
@@ -577,6 +577,52 @@ differences between these EAPIs.
 and LHA archives. See \featureref{unpack-extensions}.
 \end{description}
 
+\section{EAPI 9}
+\label{sec:cs:eapi9}
+\subsection{Additions/changes}
+\label{sec:cs:eapi9-additions}
+\begin{description}
+\item[Default EAPI for profiles] Profile directories without their
+own \code{eapi} file no longer default to EAPI 0, but to the EAPI
+specified in the top-level \code{profiles} directory.
+See \featureref{profile-eapi-default}.
+\item[\code{use.stable} and \code{package.use.stable}]
+Profile dirs may contain two new files. They can be used to
+override the USE flags specified by \code{make.defaults}, but act
+only on packages that would be merged due to a stable keyword.
+See \featureref{use-stable}.
+\item[Bash version] Ebuilds can use features of Bash version 5.3
+(was 5.0 before). See \featureref{bash-version}.
+\item[Variables are no longer exported] The package manager no
+longer exports its defined shell variables (exceptions are
+\code{TMPDIR} and \code{HOME}) to the environment. The same
+applies to variables defined in \code{make.defaults} that have
+specific meanings. See \featureref{export-vars}.
+\item[\code{pipestatus}] Checks if all commands in the last
+executed pipeline have returned an exit status of zero. When the
+\code{-v} option is specified, also prints the shell's pipe status
+array. See \featureref{pipestatus}.
+\item[\code{ver_replacing} \emph{op v2}] Checks if the relation
+\emph{v1 op v2} is true for any element \emph{v1} of
+\code{REPLACING_VERSIONS}\@. \emph{op} can be any operator that is
+accepted by \code{ver_test}. See \featureref{ver-replacing}.
+\item[\code{edo}] Outputs its entire argument list as an
+informational message, then executes it as a simple shell command,
+with standard failure behaviour. See \featureref{edo}.
+\item[Merging of symlinks] When merging \code{D} to \code{ROOT},
+absolute symlinks are now merged as-is. The package manager will
+no longer strip a leading \code{D} from their link targets.
+See \featureref{symlink-rewrite}.
+\end{description}
+\subsection{Removals/bans}
+\label{sec:cs:eapi9-removalsbans}
+\begin{description}
+\item[\code{assert}] No longer allowed. Use \code{pipestatus}
+instead. See \featureref{banned-commands}.
+\item[\code{domo}] No longer allowed. Use \code{insinto} and
+\code{newins} as replacement. See \featureref{banned-commands}.
+\end{description}
+
 \end{document}
 
 % vim: set filetype=tex fileencoding=utf8 et tw=70 spell spelllang=en :



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: a7deee9559fd97309d432dca8e0f5d8f4baa946d
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 14:57:50 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:24 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=a7deee95

Cheat sheet: Remove EAPI 6 to make room for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 156 ++--
 1 file changed, 78 insertions(+), 78 deletions(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 438f189..60bea45 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -77,10 +77,10 @@
 \footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}
 \end{abstract}
 
-\section{EAPIs 0, 1, 2, 3, 4, and 5}
+\section{EAPIs 0 to 6}
 \label{sec:cs:eapi0-2}
-Omitted for lack of space. See version~5.0 of this document for
-differences between these previous EAPIs.
+Omitted for lack of space. See previous versions of this document for
+differences between these EAPIs.
 
 % \section{EAPI 0}
 % \label{sec:cs:eapi0}
@@ -327,81 +327,81 @@ differences between these previous EAPIs.
 % See \featureref{stablemask}.
 % \end{description}
 
-\section{EAPI 6 (2015-11-13)}
-\label{sec:cs:eapi6}
-\subsection{Additions/changes}
-\label{sec:cs:eapi6-additions}
-\begin{description}
-\item[Bash version] Ebuilds can use features of Bash version 4.2
-(was 3.2 before).
-See \featureref{bash-version}.
-\item[\code{failglob}] The \code{failglob} option of Bash is set
-in global scope, so that unintentional pattern expansion will be
-caught as an error.
-See \featureref{failglob}.
-\item[Locale settings] It is ensured that the behaviour of case
-modification and collation order for ASCII characters
-(\code{LC_CTYPE} and \code{LC_COLLATE}) are the same as in the
-POSIX locale.
-See \featureref{locale-settings}.
-\item[\code{src_prepare}] This phase function has a default now,
-which applies patches from the \code{PATCHES} variable with the
-new \code{eapply} command, and user-provided patches with
-\code{eapply_user}.
-See \featureref{src-prepare}.
-\item[\code{src_install}] The default implementation uses the new
-\code{einstalldocs} function for installing documentation.
-See \featureref{src-install}.
-\item[\code{nonfatal die}] When \code{die} or \code{assert} are
-called under the \code{nonfatal} command and with the \code{-n}
-option, they will not abort the build process but return with an
-error.
-See \featureref{nonfatal-die}.
-\item[\code{unpack} changes] \code{unpack} has been extended:
-\begin{description}
-\item[Pathnames] Both absolute paths and paths relative to the
-working directory are accepted as arguments.
-See \featureref{unpack-absolute}.
-\item[\code{.txz} files] Suffix \code{.txz} for xz compressed
-tarballs is recognised.
-See \featureref{unpack-extensions}.
-\item[Filename case] Character case of filename extensions is
-ignored.
-See \featureref{unpack-ignore-case}.
-\end{description}
-\item[\code{econf} changes] Options \code{-{}-docdir} and
-\code{-{}-htmldir} are passed to \code{configure}, in addition to
-the existing options.
-See \featureref{econf-options}.
-\item[\code{eapply}] The \code{eapply} command is a simplified
-substitute for \code{epatch}, implemented in the package manager.
-The patches from its file or directory arguments are applied using
-\code{patch -p1}.
-See \featureref{eapply}.
-\item[\code{eapply_user}] The \code{eapply_user} command permits
-the package manager to apply user-provided patches. It must be
-called from every \code{src_prepare} function.
-See \featureref{eapply-user}.
-\item[\code{einstalldocs}] The \code{einstalldocs} function will
-install the files specified by the \code{DOCS} variable (or a
-default set of files if \code{DOCS} is unset) and by the
-\code{HTML_DOCS} variable.
-See \featureref{einstalldocs}.
-\item[\code{in_iuse}] The \code{in_iuse} function returns
-true if the USE flag given as its argument is available in the
-ebuild for USE queries.
-See \featureref{in-iuse}.
-\item[\code{get_libdir}] The \code{get_libdir} command outputs
-the \code{lib*} directory basename suitable for the current ABI\@.
-See \featureref{get-libdir}.
-\end{description}
-\subsection{Removals/bans}
-\label{sec:cs:eapi6-removalsbans}
-\begin{description}
-\item[\code{einstall}] No longer allowed. Use \code{emake install}
-as replacement.
-See \featureref{banned-commands}.
-\end{description}
+% \section{EAPI 6 (2015-11-13)}
+% \label{sec:cs:eapi6}
+% \subsection{Additions/changes}
+% \label{sec:cs:eapi6-additions}
+% \begin{description}
+% \item[Bash version] Ebuilds can use features of Bash version 4.2
+

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: 869ca3bbb012be600cd3033174eff3951c310a89
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:23 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=869ca3bb

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 21 +
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index e18d5ca..a411352 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -180,6 +180,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -380,6 +383,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a2a1935..48c341d 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1101,20 +1101,33 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element 
against the version
+string. Returns shell true (0) if the specified relation holds for at 
least one element,
+shell false (1) otherwise. In particular, shell false is returned when 
\t{REPLACING_VERSIONS}
+is empty.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: c9407ad31d510cde9cfe9fd69186f21d8eead1a1
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:06:26 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:22 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=c9407ad3

EAPI 9 has pipestatus

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 19 +++
 2 files changed, 23 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 6b24b6e..e18d5ca 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -144,6 +144,9 @@ Output commands use stdout & 
\compactfeatureref{output-no-stdout} &
 \t{die} in subshell & \compactfeatureref{subshell-die} &
 No & Yes & Yes & Yes \\
 
+\t{pipestatus} & \compactfeatureref{pipestatus} &
+No & No & No & Yes \\
+
 \t{econf -{}-datarootdir} & \compactfeatureref{econf-options} &
 No & No & Yes & Yes \\
 
@@ -376,6 +379,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
+\item \t{pipestatus}, \featureref{pipestatus}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index c977d00..a2a1935 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -206,6 +206,11 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 failure), calls \t{die}, passing any parameters to it.
 In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
 section~\ref{sec:banned-commands}.
+\item[pipestatus] \featurelabel{pipestatus} Checks the shell's pipe status 
array, i.\,e.\ the exit
+status of the command(s) in the most recently executed foreground 
pipeline. Returns shell true
+(0) if all elements are zero, or the last non-zero element otherwise. If 
called with \t{-v}
+as the first argument, also outputs the pipe status array as a 
space-separated list.
+Only available in EAPIs listed in table~\ref{tab:pipestatus} as supporting 
\t{pipestatus}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
@@ -224,6 +229,20 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 \end{tabular}
 \end{centertable}
 
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{pipestatus}}
+\label{tab:pipestatus}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{pipestatus}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  \\
+  9 & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \subsection{Patch commands}
 These commands are used during the \t{src_prepare} phase to apply patches to 
the package's sources.
 Ebuilds must not run any of these commands once the current phase function has 
returned.



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: b687ab901b72347b9f89c51e405578ec1ea37921
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:13:01 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:22 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=b687ab90

EAPI 9 bans domo

Bug: https://bugs.gentoo.org/951502
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index b48b9fb..6b24b6e 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -129,6 +129,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{assert} & \compactfeatureref{banned-commands} &
 Yes & Yes & Yes & Banned \\
 
+\t{domo} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -372,6 +375,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Bash version is 5.3, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
+\item \t{domo} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3dfc3e1..c977d00 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -81,11 +81,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
   \multicolumn{1}{c}{\textbf{\t{hasq}}} &
-  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
+  \multicolumn{1}{c}{\textbf{\t{assert}}} &
+  \multicolumn{1}{c}{\textbf{\t{domo}}} & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
-  8   & Yes & Yes & Yes & No  & & \\
-  9   & Yes & Yes & Yes & Yes & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & No  & \\
+  8   & Yes & Yes & Yes & No  & No  & \\
+  9   & Yes & Yes & Yes & Yes & Yes & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -589,6 +590,8 @@ the current phase function has returned.
 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}.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 
 \item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: 2992d696f94178613f99a2e2c91ba720707be1b7
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:02:56 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:21 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=2992d696

EAPI 9 bans assert

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 10 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index bd621e2..b48b9fb 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -126,6 +126,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{hasq} & \compactfeatureref{banned-commands} &
 Yes & Yes & Banned & Banned \\
 
+\t{assert} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -368,6 +371,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.3, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
+\item \t{assert} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 878d1eb..3dfc3e1 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -80,10 +80,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{} &
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
-  \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+  \multicolumn{1}{c}{\textbf{\t{hasq}}} &
+  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & & & \\
-  8, 9& Yes & Yes & Yes & & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
+  8   & Yes & Yes & Yes & No  & & \\
+  9   & Yes & Yes & Yes & Yes & & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -201,6 +203,8 @@ completing. Ebuilds must not run any of these commands once 
the current phase fu
 environment.
 \item[assert] Checks the shell's pipe status array, and if any element is 
non-zero (indicating
 failure), calls \t{die}, passing any parameters to it.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-12-02 Thread Ulrich Müller
commit: 4f5225a94cf3207a3857efe009f18283f142f148
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 13 21:14:36 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Tue Dec  2 19:05:21 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=4f5225a9

EAPI 9: Special profile variables are no longer exported

Bug: https://bugs.gentoo.org/948001
Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex   | 12 
 profile-variables.tex |  2 ++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 434cef9..5a59590 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -18,6 +18,12 @@ unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars
 the package manager must pass those that are required by ebuild-specific 
external commands
 (see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined manner.
 
+Variables listed in section~\ref{sec:specific-profile-vars} as having specific 
meanings or special
+handling, and that are set in the active profiles' \t{make.defaults} files, 
obey the same export
+rules specified for EAPIs in table~\ref{tab:export-vars}. This behaviour is 
governed by the EAPI
+of the ebuild, not that of the profile. Except where otherwise noted, all 
other variables set in
+the active profiles' \t{make.defaults} files must be exported to the 
environment.
+
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs with variables exported to the environment}
 \label{tab:export-vars}
@@ -354,10 +360,8 @@ the package manager must pass those that are required by 
ebuild-specific externa
 \end{tabular}
 \end{centertable}
 
-Except where otherwise noted, all variables set in the active profiles' 
\t{make.defaults} files must
-be exported to the ebuild environment. \t{CHOST}, \t{CBUILD} and \t{CTARGET}, 
if not set by
-profiles, must contain either an appropriate machine tuple (the definition of 
appropriate is beyond
-the scope of this specification) or be unset.
+\t{CHOST}, \t{CBUILD} and \t{CTARGET}, if not set by profiles, must contain 
either an appropriate
+machine tuple (the definition of appropriate is beyond the scope of this 
specification) or be unset.
 
 \t{PATH} must be initialized by the package manager to a ``usable'' default.  
The exact value here
 is left up to interpretation, but it should include the equivalent ``sbin'' 
and ``bin'' and any

diff --git a/profile-variables.tex b/profile-variables.tex
index f20fde4..ddcbd3a 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -69,6 +69,8 @@ completely override those in parent profiles.
 \end{centertable}
 
 \subsection{Specific variables and their meanings}
+\label{sec:specific-profile-vars}
+
 The following variables have specific meanings when set in profiles.
 \begin{description}
 \item[ARCH] The system's architecture. Must be a value listed in 
\t{profiles/arch.list}; see



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 97bf88ff8da97e441f21a7108650f9a5dd50da70
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 14:57:50 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:21 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=97bf88ff

Cheat sheet: Remove EAPI 6 to make room for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 156 ++--
 1 file changed, 78 insertions(+), 78 deletions(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 438f189..60bea45 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -77,10 +77,10 @@
 \footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}
 \end{abstract}
 
-\section{EAPIs 0, 1, 2, 3, 4, and 5}
+\section{EAPIs 0 to 6}
 \label{sec:cs:eapi0-2}
-Omitted for lack of space. See version~5.0 of this document for
-differences between these previous EAPIs.
+Omitted for lack of space. See previous versions of this document for
+differences between these EAPIs.
 
 % \section{EAPI 0}
 % \label{sec:cs:eapi0}
@@ -327,81 +327,81 @@ differences between these previous EAPIs.
 % See \featureref{stablemask}.
 % \end{description}
 
-\section{EAPI 6 (2015-11-13)}
-\label{sec:cs:eapi6}
-\subsection{Additions/changes}
-\label{sec:cs:eapi6-additions}
-\begin{description}
-\item[Bash version] Ebuilds can use features of Bash version 4.2
-(was 3.2 before).
-See \featureref{bash-version}.
-\item[\code{failglob}] The \code{failglob} option of Bash is set
-in global scope, so that unintentional pattern expansion will be
-caught as an error.
-See \featureref{failglob}.
-\item[Locale settings] It is ensured that the behaviour of case
-modification and collation order for ASCII characters
-(\code{LC_CTYPE} and \code{LC_COLLATE}) are the same as in the
-POSIX locale.
-See \featureref{locale-settings}.
-\item[\code{src_prepare}] This phase function has a default now,
-which applies patches from the \code{PATCHES} variable with the
-new \code{eapply} command, and user-provided patches with
-\code{eapply_user}.
-See \featureref{src-prepare}.
-\item[\code{src_install}] The default implementation uses the new
-\code{einstalldocs} function for installing documentation.
-See \featureref{src-install}.
-\item[\code{nonfatal die}] When \code{die} or \code{assert} are
-called under the \code{nonfatal} command and with the \code{-n}
-option, they will not abort the build process but return with an
-error.
-See \featureref{nonfatal-die}.
-\item[\code{unpack} changes] \code{unpack} has been extended:
-\begin{description}
-\item[Pathnames] Both absolute paths and paths relative to the
-working directory are accepted as arguments.
-See \featureref{unpack-absolute}.
-\item[\code{.txz} files] Suffix \code{.txz} for xz compressed
-tarballs is recognised.
-See \featureref{unpack-extensions}.
-\item[Filename case] Character case of filename extensions is
-ignored.
-See \featureref{unpack-ignore-case}.
-\end{description}
-\item[\code{econf} changes] Options \code{-{}-docdir} and
-\code{-{}-htmldir} are passed to \code{configure}, in addition to
-the existing options.
-See \featureref{econf-options}.
-\item[\code{eapply}] The \code{eapply} command is a simplified
-substitute for \code{epatch}, implemented in the package manager.
-The patches from its file or directory arguments are applied using
-\code{patch -p1}.
-See \featureref{eapply}.
-\item[\code{eapply_user}] The \code{eapply_user} command permits
-the package manager to apply user-provided patches. It must be
-called from every \code{src_prepare} function.
-See \featureref{eapply-user}.
-\item[\code{einstalldocs}] The \code{einstalldocs} function will
-install the files specified by the \code{DOCS} variable (or a
-default set of files if \code{DOCS} is unset) and by the
-\code{HTML_DOCS} variable.
-See \featureref{einstalldocs}.
-\item[\code{in_iuse}] The \code{in_iuse} function returns
-true if the USE flag given as its argument is available in the
-ebuild for USE queries.
-See \featureref{in-iuse}.
-\item[\code{get_libdir}] The \code{get_libdir} command outputs
-the \code{lib*} directory basename suitable for the current ABI\@.
-See \featureref{get-libdir}.
-\end{description}
-\subsection{Removals/bans}
-\label{sec:cs:eapi6-removalsbans}
-\begin{description}
-\item[\code{einstall}] No longer allowed. Use \code{emake install}
-as replacement.
-See \featureref{banned-commands}.
-\end{description}
+% \section{EAPI 6 (2015-11-13)}
+% \label{sec:cs:eapi6}
+% \subsection{Additions/changes}
+% \label{sec:cs:eapi6-additions}
+% \begin{description}
+% \item[Bash version] Ebuilds can use features of Bash version 4.2
+

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: f2c7dc2c1e82aac7a4acb75e753b063fc001d130
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:06:26 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:19 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f2c7dc2c

EAPI 9 has pipestatus

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 19 +++
 2 files changed, 23 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 6b24b6e..e18d5ca 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -144,6 +144,9 @@ Output commands use stdout & 
\compactfeatureref{output-no-stdout} &
 \t{die} in subshell & \compactfeatureref{subshell-die} &
 No & Yes & Yes & Yes \\
 
+\t{pipestatus} & \compactfeatureref{pipestatus} &
+No & No & No & Yes \\
+
 \t{econf -{}-datarootdir} & \compactfeatureref{econf-options} &
 No & No & Yes & Yes \\
 
@@ -376,6 +379,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
+\item \t{pipestatus}, \featureref{pipestatus}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index c977d00..a2a1935 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -206,6 +206,11 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 failure), calls \t{die}, passing any parameters to it.
 In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
 section~\ref{sec:banned-commands}.
+\item[pipestatus] \featurelabel{pipestatus} Checks the shell's pipe status 
array, i.\,e.\ the exit
+status of the command(s) in the most recently executed foreground 
pipeline. Returns shell true
+(0) if all elements are zero, or the last non-zero element otherwise. If 
called with \t{-v}
+as the first argument, also outputs the pipe status array as a 
space-separated list.
+Only available in EAPIs listed in table~\ref{tab:pipestatus} as supporting 
\t{pipestatus}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
@@ -224,6 +229,20 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 \end{tabular}
 \end{centertable}
 
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{pipestatus}}
+\label{tab:pipestatus}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{pipestatus}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  \\
+  9 & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \subsection{Patch commands}
 These commands are used during the \t{src_prepare} phase to apply patches to 
the package's sources.
 Ebuilds must not run any of these commands once the current phase function has 
returned.



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 6331fade0c2dae6fd9895d98092e1da281d2b76c
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 16:41:33 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:21 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=6331fade

Cheat sheet: Update for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 48 +++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 60bea45..920557c 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -15,7 +15,7 @@
 \usepackage[local]{gitinfo2}
 \newcommand{\code}[1]{\texttt{#1}}
 % This should reflect the latest approved EAPI version
-\newcommand{\version}{8.0}
+\newcommand{\version}{9.0}
 \newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
 \renewcommand{\familydefault}{\sfdefault}
 \urlstyle{sf}
@@ -577,6 +577,52 @@ differences between these EAPIs.
 and LHA archives. See \featureref{unpack-extensions}.
 \end{description}
 
+\section{EAPI 9}
+\label{sec:cs:eapi9}
+\subsection{Additions/changes}
+\label{sec:cs:eapi9-additions}
+\begin{description}
+\item[Default EAPI for profiles] Profile directories without their
+own \code{eapi} file no longer default to EAPI 0, but to the EAPI
+specified in the top-level \code{profiles} directory.
+See \featureref{profile-eapi-default}.
+\item[\code{use.stable} and \code{package.use.stable}]
+Profile dirs may contain two new files. They can be used to
+override the USE flags specified by \code{make.defaults}, but act
+only on packages that would be merged due to a stable keyword.
+See \featureref{use-stable}.
+\item[Bash version] Ebuilds can use features of Bash version 5.3
+(was 5.0 before). See \featureref{bash-version}.
+\item[Variables are no longer exported] The package manager no
+longer exports its defined shell variables (exceptions are
+\code{TMPDIR} and \code{HOME}) to the environment. The same
+applies to variables defined in \code{make.defaults} that have
+specific meanings. See \featureref{export-vars}.
+\item[\code{pipestatus}] Checks if all commands in the last
+executed pipeline have returned an exit status of zero. When the
+\code{-v} option is specified, also prints the shell's pipe status
+array. See \featureref{pipestatus}.
+\item[\code{ver_replacing} \emph{op v2}] Checks if the relation
+\emph{v1 op v2} is true for any element \emph{v1} of
+\code{REPLACING_VERSIONS}\@. \emph{op} can be any operator that is
+accepted by \code{ver_test}. See \featureref{ver-replacing}.
+\item[\code{edo}] Outputs its entire argument list as an
+informational message, then executes it as a simple shell command,
+with standard failure behaviour. See \featureref{edo}.
+\item[Merging of symlinks] When merging \code{D} to \code{ROOT},
+absolute symlinks are now merged as-is. The package manager will
+no longer strip a leading \code{D} from their link targets.
+See \featureref{symlink-rewrite}.
+\end{description}
+\subsection{Removals/bans}
+\label{sec:cs:eapi9-removalsbans}
+\begin{description}
+\item[\code{assert}] No longer allowed. Use \code{pipestatus}
+instead. See \featureref{banned-commands}.
+\item[\code{domo}] No longer allowed. Use \code{insinto} and
+\code{newins} as replacement. See \featureref{banned-commands}.
+\end{description}
+
 \end{document}
 
 % vim: set filetype=tex fileencoding=utf8 et tw=70 spell spelllang=en :



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 2d0b66480962486057acfbbc79e7b580b23d7cf2
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:14:14 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:20 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=2d0b6648

EAPI 9 has edo

Bug: https://bugs.gentoo.org/744880
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 21 -
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index a411352..99a3526 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -192,6 +192,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+\t{edo} & \compactfeatureref{edo} &
+No & No & No & Yes \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -384,6 +387,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item \t{edo}, \featureref{edo}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 6944c6e..a4f4b8e 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1301,21 +1301,32 @@ has returned.
 \end{algorithmic}
 \end{algorithm}
 
+\item[edo] \featurelabel{edo} Takes one or more arguments. The entire argument 
list is output
+as an informational message to stderr; individual tokens may be reformatted to 
avoid ambiguity.
+The first argument is then executed as a command, with the remaining arguments 
passed to it.
+If the command fails, \t{edo} aborts the build process using \t{die}, unless 
it was called under
+\t{nonfatal}, in which case it returns a non-zero exit status.
+
+\t{edo} must be implemented internally as a shell function. Only available in 
EAPIs listed in
+table~\ref{tab:misc-commands} as supporting \t{edo}.
+
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Misc commands for EAPIs}
 \label{tab:misc-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \toprule
   \multicolumn{1}{c}{\textbf{EAPI}} &
   \multicolumn{1}{c}{\textbf{\t{default}?}} &
   \multicolumn{1}{c}{\textbf{\t{einstalldocs}?}} &
-  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} &
+  \multicolumn{1}{c}{\textbf{\t{edo}?}} \\
   \midrule
-  0, 1  & No  & No  & No  \\
-  2, 3, 4, 5& Yes & No  & No  \\
-  6, 7, 8, 9& Yes & Yes & Yes \\
+  0, 1  & No  & No  & No  & No  \\
+  2, 3, 4, 5& Yes & No  & No  & No  \\
+  6, 7, 8   & Yes & Yes & Yes & No  \\
+  9 & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: f2060906a4daa5c378fe06048732f4f968a72f84
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:20 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f2060906

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 20 ++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 99a3526..f07d0b4 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -195,6 +195,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{edo} & \compactfeatureref{edo} &
 No & No & No & Yes \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -388,6 +391,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
 \item \t{edo}, \featureref{edo}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..f588d54 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,24 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link target starts with \t{D} must be 
rewritten with the
+leading \t{D} removed. The package manager should issue a notice when 
encountering such a symlink.
+In all other EAPIs, symlinks must be merged with their targets unmodified.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks in EAPIs}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 95634efb96e182c539e45e02be0531bea1822fcf
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:19 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=95634efb

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 20 
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index e18d5ca..a411352 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -180,6 +180,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -380,6 +383,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a2a1935..6944c6e 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1101,20 +1101,32 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element 
against the version
+string. Returns shell true (0) if the specified relation holds for any 
element, shell false (1)
+otherwise. Note that if \t{REPLACING_VERSIONS} is empty, shell false is 
returned.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: a5078391294268801caafda8002286fa1fb12f12
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:13:01 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:18 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=a5078391

EAPI 9 bans domo

Bug: https://bugs.gentoo.org/951502
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index b48b9fb..6b24b6e 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -129,6 +129,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{assert} & \compactfeatureref{banned-commands} &
 Yes & Yes & Yes & Banned \\
 
+\t{domo} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -372,6 +375,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Bash version is 5.3, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
+\item \t{domo} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3dfc3e1..c977d00 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -81,11 +81,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
   \multicolumn{1}{c}{\textbf{\t{hasq}}} &
-  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
+  \multicolumn{1}{c}{\textbf{\t{assert}}} &
+  \multicolumn{1}{c}{\textbf{\t{domo}}} & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
-  8   & Yes & Yes & Yes & No  & & \\
-  9   & Yes & Yes & Yes & Yes & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & No  & \\
+  8   & Yes & Yes & Yes & No  & No  & \\
+  9   & Yes & Yes & Yes & Yes & Yes & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -589,6 +590,8 @@ the current phase function has returned.
 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}.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 
 \item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 944bde4b19783aa456afc53c4ffa1934b661aceb
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:02:56 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:18 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=944bde4b

EAPI 9 bans assert

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 10 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index bd621e2..b48b9fb 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -126,6 +126,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{hasq} & \compactfeatureref{banned-commands} &
 Yes & Yes & Banned & Banned \\
 
+\t{assert} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -368,6 +371,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.3, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
+\item \t{assert} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 878d1eb..3dfc3e1 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -80,10 +80,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{} &
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
-  \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+  \multicolumn{1}{c}{\textbf{\t{hasq}}} &
+  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & & & \\
-  8, 9& Yes & Yes & Yes & & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
+  8   & Yes & Yes & Yes & No  & & \\
+  9   & Yes & Yes & Yes & Yes & & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -201,6 +203,8 @@ completing. Ebuilds must not run any of these commands once 
the current phase fu
 environment.
 \item[assert] Checks the shell's pipe status array, and if any element is 
non-zero (indicating
 failure), calls \t{die}, passing any parameters to it.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: d984a0f9ac4506b5995be68ce074425ef337f320
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:13:28 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:17 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=d984a0f9

EAPI 9: Defined variables are no longer exported

Bug: https://bugs.gentoo.org/721088
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 ebuild-env-vars.tex  | 36 +---
 ebuild-vars.tex  |  4 
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 870f325..bd621e2 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -75,6 +75,9 @@ Accumulate \t{PROPERTIES} & 
\compactfeatureref{accumulate-vars} &
 Accumulate \t{RESTRICT} & \compactfeatureref{accumulate-vars} &
 No & No & Yes & Yes \\
 
+Export variables & \compactfeatureref{export-vars} &
+Yes & Yes & Yes & No \\
+
 \t{PORTDIR} & \compactfeatureref{portdir} &
 Yes & No & No & No \\
 
@@ -364,6 +367,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.3, \featureref{bash-version}.
+\item Variables no longer exported, \featureref{export-vars}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 268fa36..434cef9 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -1,10 +1,10 @@
 \section{Defined variables}
 \label{sec:ebuild-env-vars}
 
-The package manager must define the following environment variables. Not all 
variables are
-universally meaningful; variables that are not meaningful in a given phase or 
in global scope may
-be unset or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless
-otherwise specified.
+The package manager must define the following variables. Not all variables are 
universally
+meaningful; variables that are not meaningful in a given phase or in global 
scope may be unset
+or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless otherwise
+specified.
 
 Because of their special meanings, these variables may not be preserved 
consistently across all
 phases as would normally happen due to environment saving (see 
section~\ref{sec:ebuild-env-state}).
@@ -12,6 +12,26 @@ For example, \t{EBUILD_PHASE} is different for every phase, 
and \t{ROOT} may hav
 the various different \t{pkg_*} phases. Ebuilds must recalculate any variable 
they derive from an
 inconsistent variable.
 
+\featurelabel{export-vars} These variables are either exported to the 
environment or kept as
+unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars}; exceptions are
+\t{TMPDIR} and \t{HOME} which are always exported. In EAPIs where variables 
are not exported,
+the package manager must pass those that are required by ebuild-specific 
external commands
+(see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined manner.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs with variables exported to the environment}
+\label{tab:export-vars}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Variables exported?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \begin{landscape}
 % Reduce width of text area to make room for margin notes
 \addtolength{\hsize}{-25mm}
@@ -168,13 +188,15 @@ inconsistent variable.
 \t{TMPDIR} &
 All &
 Partially\footnotemark[\value{footnote}] &
-Must be set to the location of a usable temporary directory, for any 
applications
-called by an ebuild. Must not be used by ebuilds directly; see \t{T} 
above. \\
+Must be set to the location of a usable temporary directory, for any 
applications called
+by an ebuild. Must not be used by ebuilds directly; see \t{T} above. 
\t{TMPDIR} is always
+exported to the environment. \\
 \t{HOME} &
 All &
 Partially\footnotemark[\value{footnote}] &
 The full path to an appropriate temporary directory for use by any 
programs invoked by the
-ebuild that may read or modify the home directory. \\
+ebuild that may read or modify the home directory. \t{HOME} is always 
exported to the
+environment. \\
 \t{EPREFIX} &
 All &
 Yes &

diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index b030943..9979ce9 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -335,6 +335,10 @@ defined based upon any variant condition.}
 \end{tabular}
 \end{centertable}
 
+For EAPIs listed in table~\ref{tab:export-vars} with the property that 
variables are not exported,
+the package manager must not export any of the v

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: d58dfc973eeb38cb0c5b517859d427b5b373d11b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 13 21:14:36 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:17 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=d58dfc97

EAPI 9: Special profile variables are no longer exported

Bug: https://bugs.gentoo.org/948001
Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex   | 12 
 profile-variables.tex |  2 ++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 434cef9..5d0bc9b 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -18,6 +18,12 @@ unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars
 the package manager must pass those that are required by ebuild-specific 
external commands
 (see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined manner.
 
+Variables listed in section~\ref{sec:specific-profile-vars} as having specific 
meanings or special
+handling, and that are set in the active profiles' \t{make.defaults} files, 
obey the same export
+rules specified for EAPIs in table~\ref{tab:export-vars}. To clarify, this 
behaviour is governed
+by the EAPI of the ebuild, not that of the profile. Except where otherwise 
noted, all other
+variables set in the active profiles' \t{make.defaults} files must be exported 
to the environment.
+
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs with variables exported to the environment}
 \label{tab:export-vars}
@@ -354,10 +360,8 @@ the package manager must pass those that are required by 
ebuild-specific externa
 \end{tabular}
 \end{centertable}
 
-Except where otherwise noted, all variables set in the active profiles' 
\t{make.defaults} files must
-be exported to the ebuild environment. \t{CHOST}, \t{CBUILD} and \t{CTARGET}, 
if not set by
-profiles, must contain either an appropriate machine tuple (the definition of 
appropriate is beyond
-the scope of this specification) or be unset.
+\t{CHOST}, \t{CBUILD} and \t{CTARGET}, if not set by profiles, must contain 
either an appropriate
+machine tuple (the definition of appropriate is beyond the scope of this 
specification) or be unset.
 
 \t{PATH} must be initialized by the package manager to a ``usable'' default.  
The exact value here
 is left up to interpretation, but it should include the equivalent ``sbin'' 
and ``bin'' and any

diff --git a/profile-variables.tex b/profile-variables.tex
index f20fde4..ddcbd3a 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -69,6 +69,8 @@ completely override those in parent profiles.
 \end{centertable}
 
 \subsection{Specific variables and their meanings}
+\label{sec:specific-profile-vars}
+
 The following variables have specific meanings when set in profiles.
 \begin{description}
 \item[ARCH] The system's architecture. Must be a value listed in 
\t{profiles/arch.list}; see



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 61efb00e5d6db4f4bf9fef037071bc7e63d75ec1
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat Jan 11 09:47:19 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:16 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=61efb00e

EAPI 9: Bash version is 5.3

Bug: https://bugs.gentoo.org/946193
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex | 3 ++-
 ebuild-format.tex| 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 88be303..870f325 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -48,7 +48,7 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 No & No & No & Yes \\
 
 Bash version & \compactfeatureref{bash-version} &
-4.2 & 4.2 & 5.0 & 5.0 \\
+4.2 & 4.2 & 5.0 & 5.3 \\
 
 Selective URI restrictions & \compactfeatureref{uri-restrict} &
 No & No & Yes & Yes \\
@@ -363,6 +363,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
+\item Bash version is 5.3, \featureref{bash-version}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-format.tex b/ebuild-format.tex
index 844f01a..0c39b36 100644
--- a/ebuild-format.tex
+++ b/ebuild-format.tex
@@ -32,7 +32,8 @@ output or standard error, or modify the state of the system 
in any way.
   \midrule
   0, 1, 2, 3, 4, 5  & 3.2 & No  \\
   6, 7  & 4.2 & Yes \\
-  8, 9  & 5.0 & Yes \\
+  8 & 5.0 & Yes \\
+  9 & 5.3 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: af8e7fb602e4a0ef62b477cbd6a001504f4b59b3
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:09:52 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:16 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=af8e7fb6

Clarify use of the terms "export" and "environment variable"

Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex  | 12 ++--
 ebuild-functions.tex | 22 +++---
 ebuild-vars.tex  |  4 ++--
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 861dd48..268fa36 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -211,14 +211,14 @@ inconsistent variable.
 No &
 \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. \\
+as supporting \t{DESTTREE}\@. In all other EAPIs, this is retained as a 
conceptual variable
+inaccessible from the ebuild environment. \\
 \t{INSDESTTREE} &
 \t{src_install} &
 No &
 \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. \\
+EAPIs, this is retained as a conceptual variable inaccessible from the 
ebuild environment. \\
 \t{USE} &
 All &
 Yes &
@@ -373,11 +373,11 @@ This section discusses the handling of four variables:
 \begin{description}
 \item[IUSE] is the variable calculated from the \t{IUSE} values defined in 
ebuilds and eclasses.
 \item[IUSE_REFERENCEABLE] is a variable calculated from \t{IUSE} and a variety 
of other sources
-described below. It is purely a conceptual variable; it is not exported to 
the ebuild
+described below. It is purely a conceptual variable; it is inaccessible 
from the ebuild
 environment. Values in \t{IUSE_REFERENCEABLE} may legally be used in 
queries from other
 packages about an ebuild's state (for example, for use dependencies).
-\item[IUSE_EFFECTIVE] is another conceptual, unexported variable. Values in 
\t{IUSE_EFFECTIVE} are
-those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
+\item[IUSE_EFFECTIVE] is another conceptual, inaccessible variable. Values in 
\t{IUSE_EFFECTIVE}
+are those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
 function, and for use in dependency specification conditional blocks).
 \item[USE] is a variable calculated by the package manager and exported to the 
ebuild environment.
 \end{description}

diff --git a/ebuild-functions.tex b/ebuild-functions.tex
index 4308ea4..8f8668a 100644
--- a/ebuild-functions.tex
+++ b/ebuild-functions.tex
@@ -8,10 +8,10 @@ by the package manager as part of the build and/or install 
process. In all cases
 must provide a default implementation of these functions; unless otherwise 
stated this must be a
 no-op. All functions may assume that they have read access to all system 
libraries, binaries and
 configuration files that are accessible to normal users, as well as write 
access to the temporary
-directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} environment 
variables
+directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} variables
 (see section~\ref{sec:ebuild-env-vars}). Most functions must assume only that 
they have additional
-write access to the package's working directory (the \t{WORKDIR} environment 
variable); exceptions
-are noted below.
+write access to the package's working directory (the \t{WORKDIR} variable); 
exceptions are noted
+below.
 
 The environment for functions run outside of the build sequence (that is, 
\t{pkg_config},
 \t{pkg_info}, \t{pkg_prerm} and \t{pkg_postrm}) must be the environment used 
for the build of the
@@ -400,37 +400,37 @@ src_install() {
 
 The \t{pkg_preinst} function performs any special tasks that are required 
immediately before
 merging the package to the live filesystem. It must not write outside of the 
directories specified
-by the \t{ROOT} and \t{D} environment variables.
+by the \t{ROOT} and \t{D} variables.
 
 \t{pkg_preinst} must be run with full access to all files and directories 
below that specified by
-the \t{ROOT} and \t{D} environment variables.
+the \t{ROOT} and \t{D} variables.
 
 \subsection{pkg_postinst}
 
 The \t{pkg_postinst} function performs any special tasks that are required 
immediately after
 merging the package to the live filesystem. It must not write outside of the 
directory specified
-in the \t{ROOT} environment variable.
+in the \t{ROOT} variable.
 
 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: f27af0e6ac48361c02b8e909231ea81f4aadaa54
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Aug  3 16:32:47 2021 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:14 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f27af0e6

Add an EAPI 9 identical to EAPI 8

Signed-off-by: Ulrich Müller  gentoo.org>

 commands.tex  |   4 +-
 dependencies.tex  |  26 -
 eapi-differences.tex  | 153 +++---
 eapis.tex |   4 +-
 ebuild-env-vars.tex   |  26 -
 ebuild-format.tex |   4 +-
 ebuild-functions.tex  |  46 +++
 ebuild-vars.tex   |  22 
 eclasses.tex  |   4 +-
 merge.tex |   6 +-
 pkg-mgr-commands.tex  | 100 -
 pms.tex   |   4 +-
 profile-variables.tex |   8 +--
 profiles.tex  |  12 ++--
 tree-layout.tex   |   8 +--
 15 files changed, 195 insertions(+), 232 deletions(-)

diff --git a/commands.tex b/commands.tex
index 2c9e594..81fd204 100644
--- a/commands.tex
+++ b/commands.tex
@@ -33,7 +33,7 @@ The following commands must always be available in the ebuild 
environment:
 table~\ref{tab:system-commands-table} as requiring GNU find.
 \end{compactitem}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{System commands for EAPIs}
 \label{tab:system-commands-table}
 \begin{tabular}{lll}
@@ -44,7 +44,7 @@ The following commands must always be available in the ebuild 
environment:
   \midrule
   0, 1, 2, 3, 4 & Undefined & Any \\
   5, 6  & Yes   & Any \\
-  7, 8  & Yes   & 2.7 \\
+  7, 8, 9   & Yes   & 2.7 \\
   \bottomrule
 \end{tabular}
 \end{centertable}

diff --git a/dependencies.tex b/dependencies.tex
index c1f7d6a..ce6e670 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -88,7 +88,7 @@ with the native build system (\t{CBUILD}). Ebuilds are 
allowed to call them in \
 \t{pkg_postinst}. Ebuilds may also call them in \t{pkg_prerm} and 
\t{pkg_postrm} but must not rely
 on them being available.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting additional dependency types}
 \label{tab:depend-table}
 \begin{tabular}{lll}
@@ -99,7 +99,7 @@ on them being available.
   \midrule
   0, 1, 2, 3, 4, 5, 6 & No  & No  \\
   7   & Yes & No  \\
-  8   & Yes & Yes \\
+  8, 9& Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -155,7 +155,7 @@ be surrounded on both sides by whitespace, except at the 
start and end of the st
 
 In particular, note that whitespace is not optional.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
 \label{tab:at-most-one-of-table}
 \begin{tabular}{ll}
@@ -164,7 +164,7 @@ In particular, note that whitespace is not optional.
   \multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} \\
   \midrule
   0, 1, 2, 3, 4 & No  \\
-  5, 6, 7, 8& Yes \\
+  5, 6, 7, 8, 9 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -204,7 +204,7 @@ In an exactly-one-of group, exactly one immediate child 
element must be matched.
 In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty 
exactly-one-of group counts as
 being matched.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Matching of empty dependency groups in EAPIs}
 \label{tab:empty-dep-groups}
 \begin{tabular}{ll}
@@ -214,7 +214,7 @@ being matched.
 are matched?}} \\
   \midrule
   0, 1, 2, 3, 4, 5, 6 & Yes \\
-  7, 8& No  \\
+  7, 8, 9 & No  \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -250,7 +250,7 @@ manager must warn or error if this feature is used with an 
EAPI not supporting u
 
 \note{Order is important. The slot restriction must come before use 
dependencies.}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Support for \t{SLOT} dependencies and sub-slots in EAPIs}
 \label{tab:slot-deps-table}
 \begin{tabular}{lll}
@@ -261,12 +261,12 @@ manager must warn or error if this feature is used with 
an EAPI not supporting u
   \midrule
   0 & No & No  \\
   1, 2, 3, 4& Named only & No  \\
-  5, 6, 7, 8& Named and operator & Yes \\
+  5, 6, 7, 8, 9 & Named and operator & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{USE} dependencies}
 \label{tab:use-deps-table}
 \begin{tabular}{ll}
@@ -276,7 +276,7 @@ manager must warn or error if this feature is used with an 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 45982b7c96e60bcb5b033b592125a8e16cce4073
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat May 17 06:33:24 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:15 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=45982b7c

EAPI 9 has use.stable and package.use.stable

Bug: https://bugs.gentoo.org/955833
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  7 +++
 profiles.tex | 34 ++
 2 files changed, 41 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index f6aafe7..88be303 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -41,6 +41,12 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 \t{package.provided} & \compactfeatureref{package-provided} &
 Optional & No & No & No \\
 
+\t{use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
+\t{package.use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
 Bash version & \compactfeatureref{bash-version} &
 4.2 & 4.2 & 5.0 & 5.0 \\
 
@@ -356,6 +362,7 @@ EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
+\item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index d814c31..864fa05 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -165,6 +165,40 @@ specification, and then a space delimited list of USE 
flags to enable. A USE fla
 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.stable and package.use.stable}
+\featurelabel{use-stable} The \t{use.stable} and \t{package.use.stable} files 
may be used to
+override the default USE flags specified by \t{make.defaults}. They only apply 
to packages that
+are merged due to a stable keyword in the sense of section~\ref{sec:keywords}. 
Each line in
+\t{use.stable} contains a USE flag to enable; the \t{-flag} syntax indicates 
that the flag should
+be disabled. The \t{package.use.stable} file uses the same format as 
\t{package.use}.
+\t{USE_EXPAND} values may be enabled or disabled by using 
\t{expand_name_value}.
+
+Stable restrictions are applied exactly when the following condition holds: If 
every stable keyword
+in \t{KEYWORDS} were replaced with its tilde-prefixed counterpart (see 
section~\ref{sec:keywords}),
+then the resulting \t{KEYWORDS} setting would prevent installation of the 
package.
+
+If a flag appears in more than one of \t{package.use}, \t{use.stable} and 
\t{package.use.stable},
+then \t{package.use.stable} takes precedence over \t{package.use}, which in 
turn takes precedence
+over \t{use.stable}.
+
+These files are supported in EAPIs as per table~\ref{tab:profile-use-stable}. 
They can be
+directories instead of regular files as per section~\ref{sec:line-stacking}.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{use.stable} and \t{package.use.stable} 
in profiles}
+\label{tab:profile-use-stable}
+\begin{tabular}{lll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{use.stable}?}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{package.use.stable}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  & No  \\
+  9 & Yes & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \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},



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: 1b3865e56318b4b0a877ac09a0b78ad845f4d811
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Feb 21 18:32:43 2022 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Nov 16 19:33:14 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=1b3865e5

EAPI 9 profile EAPI defaults to top-level

Bug: https://bugs.gentoo.org/806181
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  5 -
 profiles.tex | 23 +--
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 9617dc4..f6aafe7 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -32,6 +32,9 @@ have identical entries for all listed EAPIs.}
 Less strict \t{updates} syntax & \compactfeatureref{updates-filenames} &
 No & No & Yes & Yes \\
 
+Default EAPI for profiles & \compactfeatureref{profile-eapi-default} &
+0 & 0 & 0 & Top-level \\
+
 Profile files as directories & \compactfeatureref{profile-file-dirs} &
 No & Yes & Yes & Yes \\
 
@@ -352,7 +355,7 @@ EAPI 8 is EAPI 7 with the following changes:
 EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
-\item None
+\item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index fbe375e..d814c31 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -33,8 +33,27 @@ are discarded.
 A profile directory may contain an \t{eapi} file. This file, if it exists, 
must contain a single
 line with the name of an EAPI\@. This specifies the EAPI to use when handling 
the directory in
 question; a package manager must not attempt to use any profile using a 
directory which requires an
-EAPI it does not support. If no \t{eapi} file is present, EAPI 0 shall be 
used. The EAPI is neither
-inherited via the \t{parent} file nor in subdirectories.
+EAPI it does not support.
+
+\featurelabel{profile-eapi-default} If no \t{eapi} file is present, the 
default depends on the EAPI
+of the top-level profiles directory (see section~\ref{sec:profiles-dir}). That 
EAPI shall be used
+if table~\ref{tab:profile-eapi-default} lists it as ``top-level''. Otherwise, 
EAPI 0 shall be used.
+
+The EAPI is neither inherited via the \t{parent} file nor in subdirectories.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Default EAPI for profiles}
+\label{tab:profile-eapi-default}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Default EAPI?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & 0 \\
+  9 & Top-level \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \subsection{deprecated}
 If a profile contains a file named \t{deprecated}, it is treated as such. The 
first line of this



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: fd2708540291b36f86566a4aa4babbe3f1ca8b2e
Author: Ulrich Müller  gentoo  org>
AuthorDate: Wed Oct  1 18:47:45 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Thu Oct  2 21:39:19 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=fd270854

Makefile: New "check-html" target

Signed-off-by: Ulrich Müller  gentoo.org>

 Makefile | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 1850adf..5084e82 100644
--- a/Makefile
+++ b/Makefile
@@ -74,6 +74,9 @@ $(COMMITINFO): $(SOURCES)
  reltag={$${reltag}}%n]{gitexinfo}%n" > $@; \
fi
 
+check-html: pms.html
+   xmllint --noout --nonet --valid $^
+
 dist: $(SOURCES) $(COMMITINFO) pms.pdf pms.html
PV='$(PV)'; \
if test -z "$${PV}"; then \
@@ -100,7 +103,7 @@ clean:
 maintainer-clean: clean
rm -f $(COMMITINFO)
 
-.PHONY: all html dist upload clean maintainer-clean
+.PHONY: all html check-html dist upload clean maintainer-clean
 
 .DELETE_ON_ERROR:
 .NOTPARALLEL:



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-11-22 Thread Ulrich Müller
commit: c8bef70af0223ec814c9a16fec0a1d8895c71336
Author: Ulrich Müller  gentoo  org>
AuthorDate: Wed Oct  1 18:44:07 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Wed Oct  1 18:44:07 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=c8bef70a

Makefile: Replace mk4ht with make4ht

Use the modern interface recommended by upstream. As a welcome
side-effect, postprocessing with sed is no longer necessary.

Signed-off-by: Ulrich Müller  gentoo.org>

 Makefile | 13 +
 1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/Makefile b/Makefile
index 422dac9..1850adf 100644
--- a/Makefile
+++ b/Makefile
@@ -50,21 +50,10 @@ pms.dvi: $(LATEXFILES) pms.bbl $(COMMITINFO)
 pms.html: $(LATEXFILES) pms.bbl $(COMMITINFO)
set -e; sum=''; \
while true; do \
- mk4ht xhlatex pms 'xhtml,fn-in,charset=utf-8' ' -cunihtf -utf8'; \
+ make4ht -f xhtml pms fn-in; \
  oldsum=$${sum}; sum=$$(cksum $@); \
  test "$${sum}" != "$${oldsum}" || break; \
done
-   @# replace ligatures by their component letters
-   LC_ALL=C sed -i "$$(printf 's/\\xef\\xac\\x8%s/%s/g;' \
- 0 ff 1 fi 2 fl 3 ffi 4 ffl)" $@
-   @# remove redundant span elements
-   LC_ALL=C sed -Ei ':x;/]*)?$$/{N;bx;};'\
-   ':y;s,(]*>)([^<]*)\1,\1\2,;ty' $@
-   @# guessable names for sections
-   LC_ALL=C sed -Ei \
- -e 's/("#?)x1-[0-9]*00+([1-9][0-9]?")/\1chapter-\2/g' \
- -e 's/("#?)x1-[0-9]*00+([1-9][0-9]?(\.[0-9]+)+")/\1section-\2/g' \
- -e 's/("#?)x1-[0-9]*00+([A-Z](\.[0-9]+)*")/\1appendix-\2/g' $@
 
 pms.bbl: pms.bib $(LATEXFILES) $(COMMITINFO)
$(aux-clean)



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: f056aff905a29e9a5066c4138dc9c0a3e33df99b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 14:57:50 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:51 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f056aff9

Cheat sheet: Remove EAPI 6 to make room for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 156 ++--
 1 file changed, 78 insertions(+), 78 deletions(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 438f189..60bea45 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -77,10 +77,10 @@
 \footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}
 \end{abstract}
 
-\section{EAPIs 0, 1, 2, 3, 4, and 5}
+\section{EAPIs 0 to 6}
 \label{sec:cs:eapi0-2}
-Omitted for lack of space. See version~5.0 of this document for
-differences between these previous EAPIs.
+Omitted for lack of space. See previous versions of this document for
+differences between these EAPIs.
 
 % \section{EAPI 0}
 % \label{sec:cs:eapi0}
@@ -327,81 +327,81 @@ differences between these previous EAPIs.
 % See \featureref{stablemask}.
 % \end{description}
 
-\section{EAPI 6 (2015-11-13)}
-\label{sec:cs:eapi6}
-\subsection{Additions/changes}
-\label{sec:cs:eapi6-additions}
-\begin{description}
-\item[Bash version] Ebuilds can use features of Bash version 4.2
-(was 3.2 before).
-See \featureref{bash-version}.
-\item[\code{failglob}] The \code{failglob} option of Bash is set
-in global scope, so that unintentional pattern expansion will be
-caught as an error.
-See \featureref{failglob}.
-\item[Locale settings] It is ensured that the behaviour of case
-modification and collation order for ASCII characters
-(\code{LC_CTYPE} and \code{LC_COLLATE}) are the same as in the
-POSIX locale.
-See \featureref{locale-settings}.
-\item[\code{src_prepare}] This phase function has a default now,
-which applies patches from the \code{PATCHES} variable with the
-new \code{eapply} command, and user-provided patches with
-\code{eapply_user}.
-See \featureref{src-prepare}.
-\item[\code{src_install}] The default implementation uses the new
-\code{einstalldocs} function for installing documentation.
-See \featureref{src-install}.
-\item[\code{nonfatal die}] When \code{die} or \code{assert} are
-called under the \code{nonfatal} command and with the \code{-n}
-option, they will not abort the build process but return with an
-error.
-See \featureref{nonfatal-die}.
-\item[\code{unpack} changes] \code{unpack} has been extended:
-\begin{description}
-\item[Pathnames] Both absolute paths and paths relative to the
-working directory are accepted as arguments.
-See \featureref{unpack-absolute}.
-\item[\code{.txz} files] Suffix \code{.txz} for xz compressed
-tarballs is recognised.
-See \featureref{unpack-extensions}.
-\item[Filename case] Character case of filename extensions is
-ignored.
-See \featureref{unpack-ignore-case}.
-\end{description}
-\item[\code{econf} changes] Options \code{-{}-docdir} and
-\code{-{}-htmldir} are passed to \code{configure}, in addition to
-the existing options.
-See \featureref{econf-options}.
-\item[\code{eapply}] The \code{eapply} command is a simplified
-substitute for \code{epatch}, implemented in the package manager.
-The patches from its file or directory arguments are applied using
-\code{patch -p1}.
-See \featureref{eapply}.
-\item[\code{eapply_user}] The \code{eapply_user} command permits
-the package manager to apply user-provided patches. It must be
-called from every \code{src_prepare} function.
-See \featureref{eapply-user}.
-\item[\code{einstalldocs}] The \code{einstalldocs} function will
-install the files specified by the \code{DOCS} variable (or a
-default set of files if \code{DOCS} is unset) and by the
-\code{HTML_DOCS} variable.
-See \featureref{einstalldocs}.
-\item[\code{in_iuse}] The \code{in_iuse} function returns
-true if the USE flag given as its argument is available in the
-ebuild for USE queries.
-See \featureref{in-iuse}.
-\item[\code{get_libdir}] The \code{get_libdir} command outputs
-the \code{lib*} directory basename suitable for the current ABI\@.
-See \featureref{get-libdir}.
-\end{description}
-\subsection{Removals/bans}
-\label{sec:cs:eapi6-removalsbans}
-\begin{description}
-\item[\code{einstall}] No longer allowed. Use \code{emake install}
-as replacement.
-See \featureref{banned-commands}.
-\end{description}
+% \section{EAPI 6 (2015-11-13)}
+% \label{sec:cs:eapi6}
+% \subsection{Additions/changes}
+% \label{sec:cs:eapi6-additions}
+% \begin{description}
+% \item[Bash version] Ebuilds can use features of Bash version 4.2
+

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 81f1d2a00e4a12971a53f21da8ce642975cd6473
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 13 21:14:36 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:47 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=81f1d2a0

EAPI 9: Special profile variables are no longer exported

Bug: https://bugs.gentoo.org/948001
Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex   | 12 
 profile-variables.tex |  2 ++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 434cef9..5d0bc9b 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -18,6 +18,12 @@ unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars
 the package manager must pass those that are required by ebuild-specific 
external commands
 (see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined manner.
 
+Variables listed in section~\ref{sec:specific-profile-vars} as having specific 
meanings or special
+handling, and that are set in the active profiles' \t{make.defaults} files, 
obey the same export
+rules specified for EAPIs in table~\ref{tab:export-vars}. To clarify, this 
behaviour is governed
+by the EAPI of the ebuild, not that of the profile. Except where otherwise 
noted, all other
+variables set in the active profiles' \t{make.defaults} files must be exported 
to the environment.
+
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs with variables exported to the environment}
 \label{tab:export-vars}
@@ -354,10 +360,8 @@ the package manager must pass those that are required by 
ebuild-specific externa
 \end{tabular}
 \end{centertable}
 
-Except where otherwise noted, all variables set in the active profiles' 
\t{make.defaults} files must
-be exported to the ebuild environment. \t{CHOST}, \t{CBUILD} and \t{CTARGET}, 
if not set by
-profiles, must contain either an appropriate machine tuple (the definition of 
appropriate is beyond
-the scope of this specification) or be unset.
+\t{CHOST}, \t{CBUILD} and \t{CTARGET}, if not set by profiles, must contain 
either an appropriate
+machine tuple (the definition of appropriate is beyond the scope of this 
specification) or be unset.
 
 \t{PATH} must be initialized by the package manager to a ``usable'' default.  
The exact value here
 is left up to interpretation, but it should include the equivalent ``sbin'' 
and ``bin'' and any

diff --git a/profile-variables.tex b/profile-variables.tex
index f20fde4..ddcbd3a 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -69,6 +69,8 @@ completely override those in parent profiles.
 \end{centertable}
 
 \subsection{Specific variables and their meanings}
+\label{sec:specific-profile-vars}
+
 The following variables have specific meanings when set in profiles.
 \begin{description}
 \item[ARCH] The system's architecture. Must be a value listed in 
\t{profiles/arch.list}; see



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 8c6fde0659bb899e5aa2aca4ef1c22800ff471c1
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:49 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=8c6fde06

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 20 
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7cfffd4..d303322 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -180,6 +180,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -380,6 +383,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a2a1935..6944c6e 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1101,20 +1101,32 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element 
against the version
+string. Returns shell true (0) if the specified relation holds for any 
element, shell false (1)
+otherwise. Note that if \t{REPLACING_VERSIONS} is empty, shell false is 
returned.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 8185cb0ee7642d859d746559363bdaed6f2fd9c6
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:14:14 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:50 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=8185cb0e

EAPI 9 has edo

Bug: https://bugs.gentoo.org/744880
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 21 -
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index d303322..be95fbe 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -192,6 +192,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+\t{edo} & \compactfeatureref{edo} &
+No & No & No & Yes \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -384,6 +387,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item \t{edo}, \featureref{edo}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 6944c6e..a4f4b8e 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1301,21 +1301,32 @@ has returned.
 \end{algorithmic}
 \end{algorithm}
 
+\item[edo] \featurelabel{edo} Takes one or more arguments. The entire argument 
list is output
+as an informational message to stderr; individual tokens may be reformatted to 
avoid ambiguity.
+The first argument is then executed as a command, with the remaining arguments 
passed to it.
+If the command fails, \t{edo} aborts the build process using \t{die}, unless 
it was called under
+\t{nonfatal}, in which case it returns a non-zero exit status.
+
+\t{edo} must be implemented internally as a shell function. Only available in 
EAPIs listed in
+table~\ref{tab:misc-commands} as supporting \t{edo}.
+
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Misc commands for EAPIs}
 \label{tab:misc-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \toprule
   \multicolumn{1}{c}{\textbf{EAPI}} &
   \multicolumn{1}{c}{\textbf{\t{default}?}} &
   \multicolumn{1}{c}{\textbf{\t{einstalldocs}?}} &
-  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} &
+  \multicolumn{1}{c}{\textbf{\t{edo}?}} \\
   \midrule
-  0, 1  & No  & No  & No  \\
-  2, 3, 4, 5& Yes & No  & No  \\
-  6, 7, 8, 9& Yes & Yes & Yes \\
+  0, 1  & No  & No  & No  & No  \\
+  2, 3, 4, 5& Yes & No  & No  & No  \\
+  6, 7, 8   & Yes & Yes & Yes & No  \\
+  9 & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: fd096b853b4dae0834e6e899c345ec11711e0bce
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:13:01 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:48 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=fd096b85

EAPI 9 bans domo

Bug: https://bugs.gentoo.org/951502
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index abaaf52..dd3d03e 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -129,6 +129,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{assert} & \compactfeatureref{banned-commands} &
 Yes & Yes & Yes & Banned \\
 
+\t{domo} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -372,6 +375,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
+\item \t{domo} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3dfc3e1..c977d00 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -81,11 +81,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
   \multicolumn{1}{c}{\textbf{\t{hasq}}} &
-  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
+  \multicolumn{1}{c}{\textbf{\t{assert}}} &
+  \multicolumn{1}{c}{\textbf{\t{domo}}} & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
-  8   & Yes & Yes & Yes & No  & & \\
-  9   & Yes & Yes & Yes & Yes & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & No  & \\
+  8   & Yes & Yes & Yes & No  & No  & \\
+  9   & Yes & Yes & Yes & Yes & Yes & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -589,6 +590,8 @@ the current phase function has returned.
 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}.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 
 \item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: e4269e8d4f2a3f9e77693f9c454403b3b38c022b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 16:41:33 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:51 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=e4269e8d

Cheat sheet: Update for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 48 +++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 60bea45..e3e29da 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -15,7 +15,7 @@
 \usepackage[local]{gitinfo2}
 \newcommand{\code}[1]{\texttt{#1}}
 % This should reflect the latest approved EAPI version
-\newcommand{\version}{8.0}
+\newcommand{\version}{9.0}
 \newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
 \renewcommand{\familydefault}{\sfdefault}
 \urlstyle{sf}
@@ -577,6 +577,52 @@ differences between these EAPIs.
 and LHA archives. See \featureref{unpack-extensions}.
 \end{description}
 
+\section{EAPI 9}
+\label{sec:cs:eapi9}
+\subsection{Additions/changes}
+\label{sec:cs:eapi9-additions}
+\begin{description}
+\item[Default EAPI for profiles] Profile directories without their
+own \code{eapi} file no longer default to EAPI 0, but to the EAPI
+specified in the top-level \code{profiles} directory.
+See \featureref{profile-eapi-default}.
+\item[\code{use.stable} and \code{package.use.stable}]
+Profile dirs may contain two new files. They can be used to
+override the USE flags specified by \code{make.defaults}, but act
+only on packages that would be merged due to a stable keyword.
+See \featureref{use-stable}.
+\item[Bash version] Ebuilds can use features of Bash version 5.2
+(was 5.0 before). See \featureref{bash-version}.
+\item[Variables are no longer exported] The package manager no
+longer exports its defined shell variables (exceptions are
+\code{TMPDIR} and \code{HOME}) to the environment. The same
+applies to variables defined in \code{make.defaults} that have
+specific meanings. See \featureref{export-vars}.
+\item[\code{pipestatus}] Checks if all commands in the last
+executed pipeline have returned an exit status of zero. When the
+\code{-v} option is specified, also prints the shell's pipe status
+array. See \featureref{pipestatus}.
+\item[\code{ver_replacing} \emph{op v2}] Checks if the relation
+\emph{v1 op v2} is true for any element \emph{v1} of
+\code{REPLACING_VERSIONS}\@. \emph{op} can be any operator that is
+accepted by \code{ver_test}. See \featureref{ver-replacing}.
+\item[\code{edo}] Outputs its entire argument list as an
+informational message, then executes it as a simple shell command,
+with standard failure behaviour. See \featureref{edo}.
+\item[Merging of symlinks] When merging \code{D} to \code{ROOT},
+absolute symlinks are now merged as-is. The package manager will
+no longer strip a leading \code{D} from their link targets.
+See \featureref{symlink-rewrite}.
+\end{description}
+\subsection{Removals/bans}
+\label{sec:cs:eapi9-removalsbans}
+\begin{description}
+\item[\code{assert}] No longer allowed. Use \code{pipestatus}
+instead. See \featureref{banned-commands}.
+\item[\code{domo}] No longer allowed. Use \code{insinto} and
+\code{newins} as replacement. See \featureref{banned-commands}.
+\end{description}
+
 \end{document}
 
 % vim: set filetype=tex fileencoding=utf8 et tw=70 spell spelllang=en :



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 711785439b5b2c693ac6db5c8d9981d21a04653b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:50 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=71178543

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 20 ++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index be95fbe..13c1c38 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -195,6 +195,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{edo} & \compactfeatureref{edo} &
 No & No & No & Yes \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -388,6 +391,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
 \item \t{edo}, \featureref{edo}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..f588d54 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,24 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link target starts with \t{D} must be 
rewritten with the
+leading \t{D} removed. The package manager should issue a notice when 
encountering such a symlink.
+In all other EAPIs, symlinks must be merged with their targets unmodified.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks in EAPIs}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 7ad9f38745b17484190e4892040afc6458399f02
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:06:26 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:49 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=7ad9f387

EAPI 9 has pipestatus

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 19 +++
 2 files changed, 23 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index dd3d03e..7cfffd4 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -144,6 +144,9 @@ Output commands use stdout & 
\compactfeatureref{output-no-stdout} &
 \t{die} in subshell & \compactfeatureref{subshell-die} &
 No & Yes & Yes & Yes \\
 
+\t{pipestatus} & \compactfeatureref{pipestatus} &
+No & No & No & Yes \\
+
 \t{econf -{}-datarootdir} & \compactfeatureref{econf-options} &
 No & No & Yes & Yes \\
 
@@ -376,6 +379,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
+\item \t{pipestatus}, \featureref{pipestatus}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index c977d00..a2a1935 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -206,6 +206,11 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 failure), calls \t{die}, passing any parameters to it.
 In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
 section~\ref{sec:banned-commands}.
+\item[pipestatus] \featurelabel{pipestatus} Checks the shell's pipe status 
array, i.\,e.\ the exit
+status of the command(s) in the most recently executed foreground 
pipeline. Returns shell true
+(0) if all elements are zero, or the last non-zero element otherwise. If 
called with \t{-v}
+as the first argument, also outputs the pipe status array as a 
space-separated list.
+Only available in EAPIs listed in table~\ref{tab:pipestatus} as supporting 
\t{pipestatus}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
@@ -224,6 +229,20 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 \end{tabular}
 \end{centertable}
 
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{pipestatus}}
+\label{tab:pipestatus}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{pipestatus}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  \\
+  9 & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \subsection{Patch commands}
 These commands are used during the \t{src_prepare} phase to apply patches to 
the package's sources.
 Ebuilds must not run any of these commands once the current phase function has 
returned.



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 864a7d33f65388bb67560ab50447145be9873533
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:02:56 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:48 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=864a7d33

EAPI 9 bans assert

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 10 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 91c09a2..abaaf52 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -126,6 +126,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{hasq} & \compactfeatureref{banned-commands} &
 Yes & Yes & Banned & Banned \\
 
+\t{assert} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -368,6 +371,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
+\item \t{assert} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 878d1eb..3dfc3e1 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -80,10 +80,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{} &
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
-  \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+  \multicolumn{1}{c}{\textbf{\t{hasq}}} &
+  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & & & \\
-  8, 9& Yes & Yes & Yes & & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
+  8   & Yes & Yes & Yes & No  & & \\
+  9   & Yes & Yes & Yes & Yes & & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -201,6 +203,8 @@ completing. Ebuilds must not run any of these commands once 
the current phase fu
 environment.
 \item[assert] Checks the shell's pipe status array, and if any element is 
non-zero (indicating
 failure), calls \t{die}, passing any parameters to it.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: eb8cd5655298c13f8794de6efb5e02150afeeb37
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:09:52 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:46 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=eb8cd565

Clarify use of the terms "export" and "environment variable"

Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex  | 12 ++--
 ebuild-functions.tex | 22 +++---
 ebuild-vars.tex  |  4 ++--
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 861dd48..268fa36 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -211,14 +211,14 @@ inconsistent variable.
 No &
 \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. \\
+as supporting \t{DESTTREE}\@. In all other EAPIs, this is retained as a 
conceptual variable
+inaccessible from the ebuild environment. \\
 \t{INSDESTTREE} &
 \t{src_install} &
 No &
 \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. \\
+EAPIs, this is retained as a conceptual variable inaccessible from the 
ebuild environment. \\
 \t{USE} &
 All &
 Yes &
@@ -373,11 +373,11 @@ This section discusses the handling of four variables:
 \begin{description}
 \item[IUSE] is the variable calculated from the \t{IUSE} values defined in 
ebuilds and eclasses.
 \item[IUSE_REFERENCEABLE] is a variable calculated from \t{IUSE} and a variety 
of other sources
-described below. It is purely a conceptual variable; it is not exported to 
the ebuild
+described below. It is purely a conceptual variable; it is inaccessible 
from the ebuild
 environment. Values in \t{IUSE_REFERENCEABLE} may legally be used in 
queries from other
 packages about an ebuild's state (for example, for use dependencies).
-\item[IUSE_EFFECTIVE] is another conceptual, unexported variable. Values in 
\t{IUSE_EFFECTIVE} are
-those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
+\item[IUSE_EFFECTIVE] is another conceptual, inaccessible variable. Values in 
\t{IUSE_EFFECTIVE}
+are those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
 function, and for use in dependency specification conditional blocks).
 \item[USE] is a variable calculated by the package manager and exported to the 
ebuild environment.
 \end{description}

diff --git a/ebuild-functions.tex b/ebuild-functions.tex
index 4308ea4..8f8668a 100644
--- a/ebuild-functions.tex
+++ b/ebuild-functions.tex
@@ -8,10 +8,10 @@ by the package manager as part of the build and/or install 
process. In all cases
 must provide a default implementation of these functions; unless otherwise 
stated this must be a
 no-op. All functions may assume that they have read access to all system 
libraries, binaries and
 configuration files that are accessible to normal users, as well as write 
access to the temporary
-directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} environment 
variables
+directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} variables
 (see section~\ref{sec:ebuild-env-vars}). Most functions must assume only that 
they have additional
-write access to the package's working directory (the \t{WORKDIR} environment 
variable); exceptions
-are noted below.
+write access to the package's working directory (the \t{WORKDIR} variable); 
exceptions are noted
+below.
 
 The environment for functions run outside of the build sequence (that is, 
\t{pkg_config},
 \t{pkg_info}, \t{pkg_prerm} and \t{pkg_postrm}) must be the environment used 
for the build of the
@@ -400,37 +400,37 @@ src_install() {
 
 The \t{pkg_preinst} function performs any special tasks that are required 
immediately before
 merging the package to the live filesystem. It must not write outside of the 
directories specified
-by the \t{ROOT} and \t{D} environment variables.
+by the \t{ROOT} and \t{D} variables.
 
 \t{pkg_preinst} must be run with full access to all files and directories 
below that specified by
-the \t{ROOT} and \t{D} environment variables.
+the \t{ROOT} and \t{D} variables.
 
 \subsection{pkg_postinst}
 
 The \t{pkg_postinst} function performs any special tasks that are required 
immediately after
 merging the package to the live filesystem. It must not write outside of the 
directory specified
-in the \t{ROOT} environment variable.
+in the \t{ROOT} variable.
 
 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 8148f1da9336a1c6d7eadb89b90aebd35d6718a1
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:13:28 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:47 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=8148f1da

EAPI 9: Defined variables are no longer exported

Bug: https://bugs.gentoo.org/721088
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 ebuild-env-vars.tex  | 36 +---
 ebuild-vars.tex  |  4 
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7243e1f..91c09a2 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -75,6 +75,9 @@ Accumulate \t{PROPERTIES} & 
\compactfeatureref{accumulate-vars} &
 Accumulate \t{RESTRICT} & \compactfeatureref{accumulate-vars} &
 No & No & Yes & Yes \\
 
+Export variables & \compactfeatureref{export-vars} &
+Yes & Yes & Yes & No \\
+
 \t{PORTDIR} & \compactfeatureref{portdir} &
 Yes & No & No & No \\
 
@@ -364,6 +367,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
+\item Variables no longer exported, \featureref{export-vars}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 268fa36..434cef9 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -1,10 +1,10 @@
 \section{Defined variables}
 \label{sec:ebuild-env-vars}
 
-The package manager must define the following environment variables. Not all 
variables are
-universally meaningful; variables that are not meaningful in a given phase or 
in global scope may
-be unset or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless
-otherwise specified.
+The package manager must define the following variables. Not all variables are 
universally
+meaningful; variables that are not meaningful in a given phase or in global 
scope may be unset
+or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless otherwise
+specified.
 
 Because of their special meanings, these variables may not be preserved 
consistently across all
 phases as would normally happen due to environment saving (see 
section~\ref{sec:ebuild-env-state}).
@@ -12,6 +12,26 @@ For example, \t{EBUILD_PHASE} is different for every phase, 
and \t{ROOT} may hav
 the various different \t{pkg_*} phases. Ebuilds must recalculate any variable 
they derive from an
 inconsistent variable.
 
+\featurelabel{export-vars} These variables are either exported to the 
environment or kept as
+unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars}; exceptions are
+\t{TMPDIR} and \t{HOME} which are always exported. In EAPIs where variables 
are not exported,
+the package manager must pass those that are required by ebuild-specific 
external commands
+(see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined manner.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs with variables exported to the environment}
+\label{tab:export-vars}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Variables exported?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \begin{landscape}
 % Reduce width of text area to make room for margin notes
 \addtolength{\hsize}{-25mm}
@@ -168,13 +188,15 @@ inconsistent variable.
 \t{TMPDIR} &
 All &
 Partially\footnotemark[\value{footnote}] &
-Must be set to the location of a usable temporary directory, for any 
applications
-called by an ebuild. Must not be used by ebuilds directly; see \t{T} 
above. \\
+Must be set to the location of a usable temporary directory, for any 
applications called
+by an ebuild. Must not be used by ebuilds directly; see \t{T} above. 
\t{TMPDIR} is always
+exported to the environment. \\
 \t{HOME} &
 All &
 Partially\footnotemark[\value{footnote}] &
 The full path to an appropriate temporary directory for use by any 
programs invoked by the
-ebuild that may read or modify the home directory. \\
+ebuild that may read or modify the home directory. \t{HOME} is always 
exported to the
+environment. \\
 \t{EPREFIX} &
 All &
 Yes &

diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index b030943..9979ce9 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -335,6 +335,10 @@ defined based upon any variant condition.}
 \end{tabular}
 \end{centertable}
 
+For EAPIs listed in table~\ref{tab:export-vars} with the property that 
variables are not exported,
+the package manager must not export any of the v

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: fa8ad1081bbd5a76ddde237c66b972d0dc10b9d4
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat Jan 11 09:47:19 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:46 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=fa8ad108

EAPI 9: Bash version is 5.2

Bug: https://bugs.gentoo.org/946193
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex | 3 ++-
 ebuild-format.tex| 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 88be303..7243e1f 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -48,7 +48,7 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 No & No & No & Yes \\
 
 Bash version & \compactfeatureref{bash-version} &
-4.2 & 4.2 & 5.0 & 5.0 \\
+4.2 & 4.2 & 5.0 & 5.2 \\
 
 Selective URI restrictions & \compactfeatureref{uri-restrict} &
 No & No & Yes & Yes \\
@@ -363,6 +363,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
+\item Bash version is 5.2, \featureref{bash-version}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-format.tex b/ebuild-format.tex
index 844f01a..a543013 100644
--- a/ebuild-format.tex
+++ b/ebuild-format.tex
@@ -32,7 +32,8 @@ output or standard error, or modify the state of the system 
in any way.
   \midrule
   0, 1, 2, 3, 4, 5  & 3.2 & No  \\
   6, 7  & 4.2 & Yes \\
-  8, 9  & 5.0 & Yes \\
+  8 & 5.0 & Yes \\
+  9 & 5.2 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 9e0e015cdc1557f5c1718b475cc0cb6dbea45ea1
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Aug  3 16:32:47 2021 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:44 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=9e0e015c

Add an EAPI 9 identical to EAPI 8

Signed-off-by: Ulrich Müller  gentoo.org>

 commands.tex  |   4 +-
 dependencies.tex  |  26 -
 eapi-differences.tex  | 153 +++---
 eapis.tex |   4 +-
 ebuild-env-vars.tex   |  26 -
 ebuild-format.tex |   4 +-
 ebuild-functions.tex  |  46 +++
 ebuild-vars.tex   |  22 
 eclasses.tex  |   4 +-
 merge.tex |   6 +-
 pkg-mgr-commands.tex  | 100 -
 pms.tex   |   4 +-
 profile-variables.tex |   8 +--
 profiles.tex  |  12 ++--
 tree-layout.tex   |   8 +--
 15 files changed, 195 insertions(+), 232 deletions(-)

diff --git a/commands.tex b/commands.tex
index 2c9e594..81fd204 100644
--- a/commands.tex
+++ b/commands.tex
@@ -33,7 +33,7 @@ The following commands must always be available in the ebuild 
environment:
 table~\ref{tab:system-commands-table} as requiring GNU find.
 \end{compactitem}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{System commands for EAPIs}
 \label{tab:system-commands-table}
 \begin{tabular}{lll}
@@ -44,7 +44,7 @@ The following commands must always be available in the ebuild 
environment:
   \midrule
   0, 1, 2, 3, 4 & Undefined & Any \\
   5, 6  & Yes   & Any \\
-  7, 8  & Yes   & 2.7 \\
+  7, 8, 9   & Yes   & 2.7 \\
   \bottomrule
 \end{tabular}
 \end{centertable}

diff --git a/dependencies.tex b/dependencies.tex
index c1f7d6a..ce6e670 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -88,7 +88,7 @@ with the native build system (\t{CBUILD}). Ebuilds are 
allowed to call them in \
 \t{pkg_postinst}. Ebuilds may also call them in \t{pkg_prerm} and 
\t{pkg_postrm} but must not rely
 on them being available.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting additional dependency types}
 \label{tab:depend-table}
 \begin{tabular}{lll}
@@ -99,7 +99,7 @@ on them being available.
   \midrule
   0, 1, 2, 3, 4, 5, 6 & No  & No  \\
   7   & Yes & No  \\
-  8   & Yes & Yes \\
+  8, 9& Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -155,7 +155,7 @@ be surrounded on both sides by whitespace, except at the 
start and end of the st
 
 In particular, note that whitespace is not optional.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
 \label{tab:at-most-one-of-table}
 \begin{tabular}{ll}
@@ -164,7 +164,7 @@ In particular, note that whitespace is not optional.
   \multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} \\
   \midrule
   0, 1, 2, 3, 4 & No  \\
-  5, 6, 7, 8& Yes \\
+  5, 6, 7, 8, 9 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -204,7 +204,7 @@ In an exactly-one-of group, exactly one immediate child 
element must be matched.
 In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty 
exactly-one-of group counts as
 being matched.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Matching of empty dependency groups in EAPIs}
 \label{tab:empty-dep-groups}
 \begin{tabular}{ll}
@@ -214,7 +214,7 @@ being matched.
 are matched?}} \\
   \midrule
   0, 1, 2, 3, 4, 5, 6 & Yes \\
-  7, 8& No  \\
+  7, 8, 9 & No  \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -250,7 +250,7 @@ manager must warn or error if this feature is used with an 
EAPI not supporting u
 
 \note{Order is important. The slot restriction must come before use 
dependencies.}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Support for \t{SLOT} dependencies and sub-slots in EAPIs}
 \label{tab:slot-deps-table}
 \begin{tabular}{lll}
@@ -261,12 +261,12 @@ manager must warn or error if this feature is used with 
an EAPI not supporting u
   \midrule
   0 & No & No  \\
   1, 2, 3, 4& Named only & No  \\
-  5, 6, 7, 8& Named and operator & Yes \\
+  5, 6, 7, 8, 9 & Named and operator & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{USE} dependencies}
 \label{tab:use-deps-table}
 \begin{tabular}{ll}
@@ -276,7 +276,7 @@ manager must warn or error if this feature is used with an 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 99ab9ba8c9aed707479751d23e5a8ba46604217e
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat May 17 06:33:24 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:45 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=99ab9ba8

EAPI 9 has use.stable and package.use.stable

Bug: https://bugs.gentoo.org/955833
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  7 +++
 profiles.tex | 34 ++
 2 files changed, 41 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index f6aafe7..88be303 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -41,6 +41,12 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 \t{package.provided} & \compactfeatureref{package-provided} &
 Optional & No & No & No \\
 
+\t{use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
+\t{package.use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
 Bash version & \compactfeatureref{bash-version} &
 4.2 & 4.2 & 5.0 & 5.0 \\
 
@@ -356,6 +362,7 @@ EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
+\item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index d814c31..864fa05 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -165,6 +165,40 @@ specification, and then a space delimited list of USE 
flags to enable. A USE fla
 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.stable and package.use.stable}
+\featurelabel{use-stable} The \t{use.stable} and \t{package.use.stable} files 
may be used to
+override the default USE flags specified by \t{make.defaults}. They only apply 
to packages that
+are merged due to a stable keyword in the sense of section~\ref{sec:keywords}. 
Each line in
+\t{use.stable} contains a USE flag to enable; the \t{-flag} syntax indicates 
that the flag should
+be disabled. The \t{package.use.stable} file uses the same format as 
\t{package.use}.
+\t{USE_EXPAND} values may be enabled or disabled by using 
\t{expand_name_value}.
+
+Stable restrictions are applied exactly when the following condition holds: If 
every stable keyword
+in \t{KEYWORDS} were replaced with its tilde-prefixed counterpart (see 
section~\ref{sec:keywords}),
+then the resulting \t{KEYWORDS} setting would prevent installation of the 
package.
+
+If a flag appears in more than one of \t{package.use}, \t{use.stable} and 
\t{package.use.stable},
+then \t{package.use.stable} takes precedence over \t{package.use}, which in 
turn takes precedence
+over \t{use.stable}.
+
+These files are supported in EAPIs as per table~\ref{tab:profile-use-stable}. 
They can be
+directories instead of regular files as per section~\ref{sec:line-stacking}.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{use.stable} and \t{package.use.stable} 
in profiles}
+\label{tab:profile-use-stable}
+\begin{tabular}{lll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{use.stable}?}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{package.use.stable}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  & No  \\
+  9 & Yes & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \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},



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-21 Thread Ulrich Müller
commit: 398a94c8aa6ce9e03b68ff8847d4bd108b7e8675
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Feb 21 18:32:43 2022 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sat Jun 21 09:23:44 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=398a94c8

EAPI 9 profile EAPI defaults to top-level

Bug: https://bugs.gentoo.org/806181
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  5 -
 profiles.tex | 23 +--
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 9617dc4..f6aafe7 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -32,6 +32,9 @@ have identical entries for all listed EAPIs.}
 Less strict \t{updates} syntax & \compactfeatureref{updates-filenames} &
 No & No & Yes & Yes \\
 
+Default EAPI for profiles & \compactfeatureref{profile-eapi-default} &
+0 & 0 & 0 & Top-level \\
+
 Profile files as directories & \compactfeatureref{profile-file-dirs} &
 No & Yes & Yes & Yes \\
 
@@ -352,7 +355,7 @@ EAPI 8 is EAPI 7 with the following changes:
 EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
-\item None
+\item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index fbe375e..d814c31 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -33,8 +33,27 @@ are discarded.
 A profile directory may contain an \t{eapi} file. This file, if it exists, 
must contain a single
 line with the name of an EAPI\@. This specifies the EAPI to use when handling 
the directory in
 question; a package manager must not attempt to use any profile using a 
directory which requires an
-EAPI it does not support. If no \t{eapi} file is present, EAPI 0 shall be 
used. The EAPI is neither
-inherited via the \t{parent} file nor in subdirectories.
+EAPI it does not support.
+
+\featurelabel{profile-eapi-default} If no \t{eapi} file is present, the 
default depends on the EAPI
+of the top-level profiles directory (see section~\ref{sec:profiles-dir}). That 
EAPI shall be used
+if table~\ref{tab:profile-eapi-default} lists it as ``top-level''. Otherwise, 
EAPI 0 shall be used.
+
+The EAPI is neither inherited via the \t{parent} file nor in subdirectories.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Default EAPI for profiles}
+\label{tab:profile-eapi-default}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Default EAPI?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & 0 \\
+  9 & Top-level \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \subsection{deprecated}
 If a profile contains a file named \t{deprecated}, it is treated as such. The 
first line of this



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: 85362425f2847d38d86bbd318dbc4d198020431b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:13:28 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:48 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=85362425

EAPI 9: Defined variables are no longer exported

Bug: https://bugs.gentoo.org/721088
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 ebuild-env-vars.tex  | 36 +---
 ebuild-vars.tex  |  4 
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7243e1f..91c09a2 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -75,6 +75,9 @@ Accumulate \t{PROPERTIES} & 
\compactfeatureref{accumulate-vars} &
 Accumulate \t{RESTRICT} & \compactfeatureref{accumulate-vars} &
 No & No & Yes & Yes \\
 
+Export variables & \compactfeatureref{export-vars} &
+Yes & Yes & Yes & No \\
+
 \t{PORTDIR} & \compactfeatureref{portdir} &
 Yes & No & No & No \\
 
@@ -364,6 +367,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
+\item Variables no longer exported, \featureref{export-vars}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 268fa36..434cef9 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -1,10 +1,10 @@
 \section{Defined variables}
 \label{sec:ebuild-env-vars}
 
-The package manager must define the following environment variables. Not all 
variables are
-universally meaningful; variables that are not meaningful in a given phase or 
in global scope may
-be unset or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless
-otherwise specified.
+The package manager must define the following variables. Not all variables are 
universally
+meaningful; variables that are not meaningful in a given phase or in global 
scope may be unset
+or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless otherwise
+specified.
 
 Because of their special meanings, these variables may not be preserved 
consistently across all
 phases as would normally happen due to environment saving (see 
section~\ref{sec:ebuild-env-state}).
@@ -12,6 +12,26 @@ For example, \t{EBUILD_PHASE} is different for every phase, 
and \t{ROOT} may hav
 the various different \t{pkg_*} phases. Ebuilds must recalculate any variable 
they derive from an
 inconsistent variable.
 
+\featurelabel{export-vars} These variables are either exported to the 
environment or kept as
+unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars}; exceptions are
+\t{TMPDIR} and \t{HOME} which are always exported. In EAPIs where variables 
are not exported,
+the package manager must pass those that are required by ebuild-specific 
external commands
+(see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined manner.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs with variables exported to the environment}
+\label{tab:export-vars}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Variables exported?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \begin{landscape}
 % Reduce width of text area to make room for margin notes
 \addtolength{\hsize}{-25mm}
@@ -168,13 +188,15 @@ inconsistent variable.
 \t{TMPDIR} &
 All &
 Partially\footnotemark[\value{footnote}] &
-Must be set to the location of a usable temporary directory, for any 
applications
-called by an ebuild. Must not be used by ebuilds directly; see \t{T} 
above. \\
+Must be set to the location of a usable temporary directory, for any 
applications called
+by an ebuild. Must not be used by ebuilds directly; see \t{T} above. 
\t{TMPDIR} is always
+exported to the environment. \\
 \t{HOME} &
 All &
 Partially\footnotemark[\value{footnote}] &
 The full path to an appropriate temporary directory for use by any 
programs invoked by the
-ebuild that may read or modify the home directory. \\
+ebuild that may read or modify the home directory. \t{HOME} is always 
exported to the
+environment. \\
 \t{EPREFIX} &
 All &
 Yes &

diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index b030943..9979ce9 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -335,6 +335,10 @@ defined based upon any variant condition.}
 \end{tabular}
 \end{centertable}
 
+For EAPIs listed in table~\ref{tab:export-vars} with the property that 
variables are not exported,
+the package manager must not export any of the v

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: 77c4d8a11c2d06054fa7721d25bfbaeaf981e92b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:02:56 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:49 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=77c4d8a1

EAPI 9 bans assert

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 10 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 91c09a2..abaaf52 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -126,6 +126,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{hasq} & \compactfeatureref{banned-commands} &
 Yes & Yes & Banned & Banned \\
 
+\t{assert} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -368,6 +371,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
+\item \t{assert} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 878d1eb..3dfc3e1 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -80,10 +80,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{} &
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
-  \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+  \multicolumn{1}{c}{\textbf{\t{hasq}}} &
+  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & & & \\
-  8, 9& Yes & Yes & Yes & & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
+  8   & Yes & Yes & Yes & No  & & \\
+  9   & Yes & Yes & Yes & Yes & & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -201,6 +203,8 @@ completing. Ebuilds must not run any of these commands once 
the current phase fu
 environment.
 \item[assert] Checks the shell's pipe status array, and if any element is 
non-zero (indicating
 failure), calls \t{die}, passing any parameters to it.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: ba0272b2f4390fd1d4eba0079889633781554dc3
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 14:57:50 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:52 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=ba0272b2

Cheat sheet: Remove EAPI 6 to make room for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 156 ++--
 1 file changed, 78 insertions(+), 78 deletions(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 438f189..60bea45 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -77,10 +77,10 @@
 \footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}
 \end{abstract}
 
-\section{EAPIs 0, 1, 2, 3, 4, and 5}
+\section{EAPIs 0 to 6}
 \label{sec:cs:eapi0-2}
-Omitted for lack of space. See version~5.0 of this document for
-differences between these previous EAPIs.
+Omitted for lack of space. See previous versions of this document for
+differences between these EAPIs.
 
 % \section{EAPI 0}
 % \label{sec:cs:eapi0}
@@ -327,81 +327,81 @@ differences between these previous EAPIs.
 % See \featureref{stablemask}.
 % \end{description}
 
-\section{EAPI 6 (2015-11-13)}
-\label{sec:cs:eapi6}
-\subsection{Additions/changes}
-\label{sec:cs:eapi6-additions}
-\begin{description}
-\item[Bash version] Ebuilds can use features of Bash version 4.2
-(was 3.2 before).
-See \featureref{bash-version}.
-\item[\code{failglob}] The \code{failglob} option of Bash is set
-in global scope, so that unintentional pattern expansion will be
-caught as an error.
-See \featureref{failglob}.
-\item[Locale settings] It is ensured that the behaviour of case
-modification and collation order for ASCII characters
-(\code{LC_CTYPE} and \code{LC_COLLATE}) are the same as in the
-POSIX locale.
-See \featureref{locale-settings}.
-\item[\code{src_prepare}] This phase function has a default now,
-which applies patches from the \code{PATCHES} variable with the
-new \code{eapply} command, and user-provided patches with
-\code{eapply_user}.
-See \featureref{src-prepare}.
-\item[\code{src_install}] The default implementation uses the new
-\code{einstalldocs} function for installing documentation.
-See \featureref{src-install}.
-\item[\code{nonfatal die}] When \code{die} or \code{assert} are
-called under the \code{nonfatal} command and with the \code{-n}
-option, they will not abort the build process but return with an
-error.
-See \featureref{nonfatal-die}.
-\item[\code{unpack} changes] \code{unpack} has been extended:
-\begin{description}
-\item[Pathnames] Both absolute paths and paths relative to the
-working directory are accepted as arguments.
-See \featureref{unpack-absolute}.
-\item[\code{.txz} files] Suffix \code{.txz} for xz compressed
-tarballs is recognised.
-See \featureref{unpack-extensions}.
-\item[Filename case] Character case of filename extensions is
-ignored.
-See \featureref{unpack-ignore-case}.
-\end{description}
-\item[\code{econf} changes] Options \code{-{}-docdir} and
-\code{-{}-htmldir} are passed to \code{configure}, in addition to
-the existing options.
-See \featureref{econf-options}.
-\item[\code{eapply}] The \code{eapply} command is a simplified
-substitute for \code{epatch}, implemented in the package manager.
-The patches from its file or directory arguments are applied using
-\code{patch -p1}.
-See \featureref{eapply}.
-\item[\code{eapply_user}] The \code{eapply_user} command permits
-the package manager to apply user-provided patches. It must be
-called from every \code{src_prepare} function.
-See \featureref{eapply-user}.
-\item[\code{einstalldocs}] The \code{einstalldocs} function will
-install the files specified by the \code{DOCS} variable (or a
-default set of files if \code{DOCS} is unset) and by the
-\code{HTML_DOCS} variable.
-See \featureref{einstalldocs}.
-\item[\code{in_iuse}] The \code{in_iuse} function returns
-true if the USE flag given as its argument is available in the
-ebuild for USE queries.
-See \featureref{in-iuse}.
-\item[\code{get_libdir}] The \code{get_libdir} command outputs
-the \code{lib*} directory basename suitable for the current ABI\@.
-See \featureref{get-libdir}.
-\end{description}
-\subsection{Removals/bans}
-\label{sec:cs:eapi6-removalsbans}
-\begin{description}
-\item[\code{einstall}] No longer allowed. Use \code{emake install}
-as replacement.
-See \featureref{banned-commands}.
-\end{description}
+% \section{EAPI 6 (2015-11-13)}
+% \label{sec:cs:eapi6}
+% \subsection{Additions/changes}
+% \label{sec:cs:eapi6-additions}
+% \begin{description}
+% \item[Bash version] Ebuilds can use features of Bash version 4.2
+

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: b238f500a6e814ffbdfb9b88b176964d06250b2f
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:06:26 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:50 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=b238f500

EAPI 9 has pipestatus

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 19 +++
 2 files changed, 23 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index dd3d03e..7cfffd4 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -144,6 +144,9 @@ Output commands use stdout & 
\compactfeatureref{output-no-stdout} &
 \t{die} in subshell & \compactfeatureref{subshell-die} &
 No & Yes & Yes & Yes \\
 
+\t{pipestatus} & \compactfeatureref{pipestatus} &
+No & No & No & Yes \\
+
 \t{econf -{}-datarootdir} & \compactfeatureref{econf-options} &
 No & No & Yes & Yes \\
 
@@ -376,6 +379,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
+\item \t{pipestatus}, \featureref{pipestatus}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index c977d00..a2a1935 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -206,6 +206,11 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 failure), calls \t{die}, passing any parameters to it.
 In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
 section~\ref{sec:banned-commands}.
+\item[pipestatus] \featurelabel{pipestatus} Checks the shell's pipe status 
array, i.\,e.\ the exit
+status of the command(s) in the most recently executed foreground 
pipeline. Returns shell true
+(0) if all elements are zero, or the last non-zero element otherwise. If 
called with \t{-v}
+as the first argument, also outputs the pipe status array as a 
space-separated list.
+Only available in EAPIs listed in table~\ref{tab:pipestatus} as supporting 
\t{pipestatus}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
@@ -224,6 +229,20 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 \end{tabular}
 \end{centertable}
 
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{pipestatus}}
+\label{tab:pipestatus}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{pipestatus}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  \\
+  9 & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \subsection{Patch commands}
 These commands are used during the \t{src_prepare} phase to apply patches to 
the package's sources.
 Ebuilds must not run any of these commands once the current phase function has 
returned.



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: 5cfb92502744ad862c7c4b863eb9bca191fefe27
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:52 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=5cfb9250

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 20 ++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index be95fbe..13c1c38 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -195,6 +195,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{edo} & \compactfeatureref{edo} &
 No & No & No & Yes \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -388,6 +391,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
 \item \t{edo}, \featureref{edo}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..bef2c0c 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,24 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link target starts with \t{D} must be 
rewritten with the
+leading \t{D} removed. The package manager should issue a notice when 
encountering such a symlink.
+In all other EAPIs, symlinks must be merged with their targets unmodified.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: 140b1eb3b7438c1b2b4ec159fe55b4affbd59925
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:51 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=140b1eb3

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 20 
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7cfffd4..d303322 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -180,6 +180,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -380,6 +383,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a2a1935..6944c6e 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1101,20 +1101,32 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element 
against the version
+string. Returns shell true (0) if the specified relation holds for any 
element, shell false (1)
+otherwise. Note that if \t{REPLACING_VERSIONS} is empty, shell false is 
returned.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: 5394dd73d075e4dcf0ac193c19081a38d1f5e75f
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 16:41:33 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:53 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=5394dd73

Cheat sheet: Update for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 49 -
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 60bea45..639d3f3 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -15,7 +15,7 @@
 \usepackage[local]{gitinfo2}
 \newcommand{\code}[1]{\texttt{#1}}
 % This should reflect the latest approved EAPI version
-\newcommand{\version}{8.0}
+\newcommand{\version}{9.0}
 \newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
 \renewcommand{\familydefault}{\sfdefault}
 \urlstyle{sf}
@@ -577,6 +577,53 @@ differences between these EAPIs.
 and LHA archives. See \featureref{unpack-extensions}.
 \end{description}
 
+\section{EAPI 9}
+\label{sec:cs:eapi9}
+\subsection{Additions/changes}
+\label{sec:cs:eapi9-additions}
+\begin{description}
+\item[Default EAPI for profiles] Profile directories without their
+own \code{eapi} file no longer default to EAPI 0, but to the EAPI
+specified in the top-level \code{profiles} directory.
+See \featureref{profile-eapi-default}.
+\item[\code{use.stable} and \code{package.use.stable}] These are
+new files supported in profile directories. They may be used to
+override the default USE flags specified by \code{make.defaults},
+but act only on packages that would be merged due to a stable
+keyword. See \featureref{use-stable}.
+\item[Bash version] Ebuilds can use features of Bash version 5.2
+(was 5.0 before). See \featureref{bash-version}.
+\item[Variables are no longer exported] The package manager no
+longer exports its defined shell variables (exceptions are
+\code{TMPDIR} and \code{HOME}) to the environment. The same
+applies to variables defined in \code{make.defaults} that have
+specific meanings. See \featureref{export-vars}.
+\item[\code{pipestatus}] Checks the shell's pipe status array,
+i.\,e.\ the exit status of the command(s) in the last executed
+pipeline, and returns true if all elements are zero. It also
+prints the pipe status array when the \code{-v} option is given.
+See \featureref{pipestatus}.
+\item[\code{ver_replacing} \emph{op v2}] Checks if the relation
+\emph{v1 op v2} is true for any element \emph{v1} of
+\code{REPLACING_VERSIONS}\@. \emph{op} can be any operator that is
+accepted by \code{ver_test}. See \featureref{ver-replacing}.
+\item[\code{edo}] Outputs its entire argument list as an
+informational message, then executes it as a simple shell command,
+with standard failure behaviour. See \featureref{edo}.
+\item[Merging of symlinks] When merging \code{D} to \code{ROOT},
+absolute symlinks are now merged as-is. The package manager will
+no longer strip a leading \code{D} from their link targets.
+See \featureref{symlink-rewrite}.
+\end{description}
+\subsection{Removals/bans}
+\label{sec:cs:eapi9-removalsbans}
+\begin{description}
+\item[\code{assert}] No longer allowed. Use \code{pipestatus}
+instead. See \featureref{banned-commands}.
+\item[\code{domo}] No longer allowed. Use \code{insinto} and
+\code{newins} as replacement. See \featureref{banned-commands}.
+\end{description}
+
 \end{document}
 
 % vim: set filetype=tex fileencoding=utf8 et tw=70 spell spelllang=en :



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: 81eeecf51c08fd5470297a8519bda5c3a7bb33e9
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:13:01 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:50 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=81eeecf5

EAPI 9 bans domo

Bug: https://bugs.gentoo.org/951502
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index abaaf52..dd3d03e 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -129,6 +129,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{assert} & \compactfeatureref{banned-commands} &
 Yes & Yes & Yes & Banned \\
 
+\t{domo} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -372,6 +375,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
+\item \t{domo} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3dfc3e1..c977d00 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -81,11 +81,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
   \multicolumn{1}{c}{\textbf{\t{hasq}}} &
-  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
+  \multicolumn{1}{c}{\textbf{\t{assert}}} &
+  \multicolumn{1}{c}{\textbf{\t{domo}}} & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
-  8   & Yes & Yes & Yes & No  & & \\
-  9   & Yes & Yes & Yes & Yes & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & No  & \\
+  8   & Yes & Yes & Yes & No  & No  & \\
+  9   & Yes & Yes & Yes & Yes & Yes & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -589,6 +590,8 @@ the current phase function has returned.
 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}.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 
 \item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: b4ed642f622f4171a5edcfcd9dbe667ee4bb1cd4
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:14:14 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:51 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=b4ed642f

EAPI 9 has edo

Bug: https://bugs.gentoo.org/744880
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 21 -
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index d303322..be95fbe 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -192,6 +192,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+\t{edo} & \compactfeatureref{edo} &
+No & No & No & Yes \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -384,6 +387,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item \t{edo}, \featureref{edo}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 6944c6e..a4f4b8e 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1301,21 +1301,32 @@ has returned.
 \end{algorithmic}
 \end{algorithm}
 
+\item[edo] \featurelabel{edo} Takes one or more arguments. The entire argument 
list is output
+as an informational message to stderr; individual tokens may be reformatted to 
avoid ambiguity.
+The first argument is then executed as a command, with the remaining arguments 
passed to it.
+If the command fails, \t{edo} aborts the build process using \t{die}, unless 
it was called under
+\t{nonfatal}, in which case it returns a non-zero exit status.
+
+\t{edo} must be implemented internally as a shell function. Only available in 
EAPIs listed in
+table~\ref{tab:misc-commands} as supporting \t{edo}.
+
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Misc commands for EAPIs}
 \label{tab:misc-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \toprule
   \multicolumn{1}{c}{\textbf{EAPI}} &
   \multicolumn{1}{c}{\textbf{\t{default}?}} &
   \multicolumn{1}{c}{\textbf{\t{einstalldocs}?}} &
-  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} &
+  \multicolumn{1}{c}{\textbf{\t{edo}?}} \\
   \midrule
-  0, 1  & No  & No  & No  \\
-  2, 3, 4, 5& Yes & No  & No  \\
-  6, 7, 8, 9& Yes & Yes & Yes \\
+  0, 1  & No  & No  & No  & No  \\
+  2, 3, 4, 5& Yes & No  & No  & No  \\
+  6, 7, 8   & Yes & Yes & Yes & No  \\
+  9 & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-16 Thread Ulrich Müller
commit: 6d511317807706d101dc29a172d59cf6c7bd9e71
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 13 21:14:36 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Mon Jun 16 17:14:49 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=6d511317

EAPI 9: Special profile variables are no longer exported

Bug: https://bugs.gentoo.org/948001
Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex   | 12 
 profile-variables.tex |  2 ++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 434cef9..5d0bc9b 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -18,6 +18,12 @@ unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars
 the package manager must pass those that are required by ebuild-specific 
external commands
 (see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined manner.
 
+Variables listed in section~\ref{sec:specific-profile-vars} as having specific 
meanings or special
+handling, and that are set in the active profiles' \t{make.defaults} files, 
obey the same export
+rules specified for EAPIs in table~\ref{tab:export-vars}. To clarify, this 
behaviour is governed
+by the EAPI of the ebuild, not that of the profile. Except where otherwise 
noted, all other
+variables set in the active profiles' \t{make.defaults} files must be exported 
to the environment.
+
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs with variables exported to the environment}
 \label{tab:export-vars}
@@ -354,10 +360,8 @@ the package manager must pass those that are required by 
ebuild-specific externa
 \end{tabular}
 \end{centertable}
 
-Except where otherwise noted, all variables set in the active profiles' 
\t{make.defaults} files must
-be exported to the ebuild environment. \t{CHOST}, \t{CBUILD} and \t{CTARGET}, 
if not set by
-profiles, must contain either an appropriate machine tuple (the definition of 
appropriate is beyond
-the scope of this specification) or be unset.
+\t{CHOST}, \t{CBUILD} and \t{CTARGET}, if not set by profiles, must contain 
either an appropriate
+machine tuple (the definition of appropriate is beyond the scope of this 
specification) or be unset.
 
 \t{PATH} must be initialized by the package manager to a ``usable'' default.  
The exact value here
 is left up to interpretation, but it should include the equivalent ``sbin'' 
and ``bin'' and any

diff --git a/profile-variables.tex b/profile-variables.tex
index f20fde4..ddcbd3a 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -69,6 +69,8 @@ completely override those in parent profiles.
 \end{centertable}
 
 \subsection{Specific variables and their meanings}
+\label{sec:specific-profile-vars}
+
 The following variables have specific meanings when set in profiles.
 \begin{description}
 \item[ARCH] The system's architecture. Must be a value listed in 
\t{profiles/arch.list}; see



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 3ce3ba2d686a08caf15daa70e40d9dfec4c101bb
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:39 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=3ce3ba2d

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 19 +--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index be95fbe..13c1c38 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -195,6 +195,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{edo} & \compactfeatureref{edo} &
 No & No & No & Yes \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -388,6 +391,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
 \item \t{edo}, \featureref{edo}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..e51c1b8 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,23 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link starts with \t{D} must be rewritten 
with the leading
+\t{D} removed. The package manager should issue a notice when encountering 
such a symlink.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 35ac46a5a6fcd44c68971b92a1daaf2ad51a43e2
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 16:41:33 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:40 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=35ac46a5

Cheat sheet: Update for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 49 -
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 60bea45..639d3f3 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -15,7 +15,7 @@
 \usepackage[local]{gitinfo2}
 \newcommand{\code}[1]{\texttt{#1}}
 % This should reflect the latest approved EAPI version
-\newcommand{\version}{8.0}
+\newcommand{\version}{9.0}
 \newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
 \renewcommand{\familydefault}{\sfdefault}
 \urlstyle{sf}
@@ -577,6 +577,53 @@ differences between these EAPIs.
 and LHA archives. See \featureref{unpack-extensions}.
 \end{description}
 
+\section{EAPI 9}
+\label{sec:cs:eapi9}
+\subsection{Additions/changes}
+\label{sec:cs:eapi9-additions}
+\begin{description}
+\item[Default EAPI for profiles] Profile directories without their
+own \code{eapi} file no longer default to EAPI 0, but to the EAPI
+specified in the top-level \code{profiles} directory.
+See \featureref{profile-eapi-default}.
+\item[\code{use.stable} and \code{package.use.stable}] These are
+new files supported in profile directories. They may be used to
+override the default USE flags specified by \code{make.defaults},
+but act only on packages that would be merged due to a stable
+keyword. See \featureref{use-stable}.
+\item[Bash version] Ebuilds can use features of Bash version 5.2
+(was 5.0 before). See \featureref{bash-version}.
+\item[Variables are no longer exported] The package manager no
+longer exports its defined shell variables (exceptions are
+\code{TMPDIR} and \code{HOME}) to the environment. The same
+applies to variables defined in \code{make.defaults} that have
+specific meanings. See \featureref{export-vars}.
+\item[\code{pipestatus}] Checks the shell's pipe status array,
+i.\,e.\ the exit status of the command(s) in the last executed
+pipeline, and returns true if all elements are zero. It also
+prints the pipe status array when the \code{-v} option is given.
+See \featureref{pipestatus}.
+\item[\code{ver_replacing} \emph{op v2}] Checks if the relation
+\emph{v1 op v2} is true for any element \emph{v1} of
+\code{REPLACING_VERSIONS}\@. \emph{op} can be any operator that is
+accepted by \code{ver_test}. See \featureref{ver-replacing}.
+\item[\code{edo}] Outputs its entire argument list as an
+informational message, then executes it as a simple shell command,
+with standard failure behaviour. See \featureref{edo}.
+\item[Merging of symlinks] When merging \code{D} to \code{ROOT},
+absolute symlinks are now merged as-is. The package manager will
+no longer strip a leading \code{D} from their link targets.
+See \featureref{symlink-rewrite}.
+\end{description}
+\subsection{Removals/bans}
+\label{sec:cs:eapi9-removalsbans}
+\begin{description}
+\item[\code{assert}] No longer allowed. Use \code{pipestatus}
+instead. See \featureref{banned-commands}.
+\item[\code{domo}] No longer allowed. Use \code{insinto} and
+\code{newins} as replacement. See \featureref{banned-commands}.
+\end{description}
+
 \end{document}
 
 % vim: set filetype=tex fileencoding=utf8 et tw=70 spell spelllang=en :



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: efc2e2dec63eec71999591f0d33323102dd2176e
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:14:14 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:38 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=efc2e2de

EAPI 9 has edo

Bug: https://bugs.gentoo.org/744880
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 21 -
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index d303322..be95fbe 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -192,6 +192,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+\t{edo} & \compactfeatureref{edo} &
+No & No & No & Yes \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -384,6 +387,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item \t{edo}, \featureref{edo}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a49ab98..a4c59fa 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1301,21 +1301,32 @@ has returned.
 \end{algorithmic}
 \end{algorithm}
 
+\item[edo] \featurelabel{edo} Takes one or more arguments. The entire argument 
list is output
+as an informational message to stderr; individual tokens may be reformatted to 
avoid ambiguity.
+The first argument is then executed as a command, with the remaining arguments 
passed to it.
+If the command fails, \t{edo} aborts the build process using \t{die}, unless 
it was called under
+\t{nonfatal}, in which case it returns a non-zero exit status.
+
+\t{edo} must be implemented internally as a shell function. Only available in 
EAPIs listed in
+table~\ref{tab:misc-commands} as supporting \t{edo}.
+
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Misc commands for EAPIs}
 \label{tab:misc-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \toprule
   \multicolumn{1}{c}{\textbf{EAPI}} &
   \multicolumn{1}{c}{\textbf{\t{default}?}} &
   \multicolumn{1}{c}{\textbf{\t{einstalldocs}?}} &
-  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} &
+  \multicolumn{1}{c}{\textbf{\t{edo}?}} \\
   \midrule
-  0, 1  & No  & No  & No  \\
-  2, 3, 4, 5& Yes & No  & No  \\
-  6, 7, 8, 9& Yes & Yes & Yes \\
+  0, 1  & No  & No  & No  & No  \\
+  2, 3, 4, 5& Yes & No  & No  & No  \\
+  6, 7, 8   & Yes & Yes & Yes & No  \\
+  9 & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: ca02f1e4b3240b5b95bdb78f0a5a07564b87b1ea
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 14:57:50 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:39 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=ca02f1e4

Cheat sheet: Remove EAPI 6 to make room for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 156 ++--
 1 file changed, 78 insertions(+), 78 deletions(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 438f189..60bea45 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -77,10 +77,10 @@
 \footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}
 \end{abstract}
 
-\section{EAPIs 0, 1, 2, 3, 4, and 5}
+\section{EAPIs 0 to 6}
 \label{sec:cs:eapi0-2}
-Omitted for lack of space. See version~5.0 of this document for
-differences between these previous EAPIs.
+Omitted for lack of space. See previous versions of this document for
+differences between these EAPIs.
 
 % \section{EAPI 0}
 % \label{sec:cs:eapi0}
@@ -327,81 +327,81 @@ differences between these previous EAPIs.
 % See \featureref{stablemask}.
 % \end{description}
 
-\section{EAPI 6 (2015-11-13)}
-\label{sec:cs:eapi6}
-\subsection{Additions/changes}
-\label{sec:cs:eapi6-additions}
-\begin{description}
-\item[Bash version] Ebuilds can use features of Bash version 4.2
-(was 3.2 before).
-See \featureref{bash-version}.
-\item[\code{failglob}] The \code{failglob} option of Bash is set
-in global scope, so that unintentional pattern expansion will be
-caught as an error.
-See \featureref{failglob}.
-\item[Locale settings] It is ensured that the behaviour of case
-modification and collation order for ASCII characters
-(\code{LC_CTYPE} and \code{LC_COLLATE}) are the same as in the
-POSIX locale.
-See \featureref{locale-settings}.
-\item[\code{src_prepare}] This phase function has a default now,
-which applies patches from the \code{PATCHES} variable with the
-new \code{eapply} command, and user-provided patches with
-\code{eapply_user}.
-See \featureref{src-prepare}.
-\item[\code{src_install}] The default implementation uses the new
-\code{einstalldocs} function for installing documentation.
-See \featureref{src-install}.
-\item[\code{nonfatal die}] When \code{die} or \code{assert} are
-called under the \code{nonfatal} command and with the \code{-n}
-option, they will not abort the build process but return with an
-error.
-See \featureref{nonfatal-die}.
-\item[\code{unpack} changes] \code{unpack} has been extended:
-\begin{description}
-\item[Pathnames] Both absolute paths and paths relative to the
-working directory are accepted as arguments.
-See \featureref{unpack-absolute}.
-\item[\code{.txz} files] Suffix \code{.txz} for xz compressed
-tarballs is recognised.
-See \featureref{unpack-extensions}.
-\item[Filename case] Character case of filename extensions is
-ignored.
-See \featureref{unpack-ignore-case}.
-\end{description}
-\item[\code{econf} changes] Options \code{-{}-docdir} and
-\code{-{}-htmldir} are passed to \code{configure}, in addition to
-the existing options.
-See \featureref{econf-options}.
-\item[\code{eapply}] The \code{eapply} command is a simplified
-substitute for \code{epatch}, implemented in the package manager.
-The patches from its file or directory arguments are applied using
-\code{patch -p1}.
-See \featureref{eapply}.
-\item[\code{eapply_user}] The \code{eapply_user} command permits
-the package manager to apply user-provided patches. It must be
-called from every \code{src_prepare} function.
-See \featureref{eapply-user}.
-\item[\code{einstalldocs}] The \code{einstalldocs} function will
-install the files specified by the \code{DOCS} variable (or a
-default set of files if \code{DOCS} is unset) and by the
-\code{HTML_DOCS} variable.
-See \featureref{einstalldocs}.
-\item[\code{in_iuse}] The \code{in_iuse} function returns
-true if the USE flag given as its argument is available in the
-ebuild for USE queries.
-See \featureref{in-iuse}.
-\item[\code{get_libdir}] The \code{get_libdir} command outputs
-the \code{lib*} directory basename suitable for the current ABI\@.
-See \featureref{get-libdir}.
-\end{description}
-\subsection{Removals/bans}
-\label{sec:cs:eapi6-removalsbans}
-\begin{description}
-\item[\code{einstall}] No longer allowed. Use \code{emake install}
-as replacement.
-See \featureref{banned-commands}.
-\end{description}
+% \section{EAPI 6 (2015-11-13)}
+% \label{sec:cs:eapi6}
+% \subsection{Additions/changes}
+% \label{sec:cs:eapi6-additions}
+% \begin{description}
+% \item[Bash version] Ebuilds can use features of Bash version 4.2
+

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: cb832dbf6ada8622f1fcff9388b43bfbf742c0c9
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:38 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=cb832dbf

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 20 
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7cfffd4..d303322 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -180,6 +180,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -380,6 +383,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a2a1935..a49ab98 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1101,20 +1101,32 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element with 
the version string.
+Returns shell true (0) if the specified relation is fulfilled for any 
element. Note that if
+\t{REPLACING_VERSIONS} is empty, shell false (1) is returned.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: a58386383ca7ad632d45dfcd9526eb18fcce1026
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:06:26 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:37 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=a5838638

EAPI 9 has pipestatus

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 19 +++
 2 files changed, 23 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index dd3d03e..7cfffd4 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -144,6 +144,9 @@ Output commands use stdout & 
\compactfeatureref{output-no-stdout} &
 \t{die} in subshell & \compactfeatureref{subshell-die} &
 No & Yes & Yes & Yes \\
 
+\t{pipestatus} & \compactfeatureref{pipestatus} &
+No & No & No & Yes \\
+
 \t{econf -{}-datarootdir} & \compactfeatureref{econf-options} &
 No & No & Yes & Yes \\
 
@@ -376,6 +379,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
+\item \t{pipestatus}, \featureref{pipestatus}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index c977d00..a2a1935 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -206,6 +206,11 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 failure), calls \t{die}, passing any parameters to it.
 In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
 section~\ref{sec:banned-commands}.
+\item[pipestatus] \featurelabel{pipestatus} Checks the shell's pipe status 
array, i.\,e.\ the exit
+status of the command(s) in the most recently executed foreground 
pipeline. Returns shell true
+(0) if all elements are zero, or the last non-zero element otherwise. If 
called with \t{-v}
+as the first argument, also outputs the pipe status array as a 
space-separated list.
+Only available in EAPIs listed in table~\ref{tab:pipestatus} as supporting 
\t{pipestatus}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
@@ -224,6 +229,20 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 \end{tabular}
 \end{centertable}
 
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{pipestatus}}
+\label{tab:pipestatus}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{pipestatus}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  \\
+  9 & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \subsection{Patch commands}
 These commands are used during the \t{src_prepare} phase to apply patches to 
the package's sources.
 Ebuilds must not run any of these commands once the current phase function has 
returned.



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: d00eee853440b9a509e19158d6a7f5379eb5c377
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:02:56 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:36 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=d00eee85

EAPI 9 bans assert

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 10 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 91c09a2..abaaf52 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -126,6 +126,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{hasq} & \compactfeatureref{banned-commands} &
 Yes & Yes & Banned & Banned \\
 
+\t{assert} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -368,6 +371,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
+\item \t{assert} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 878d1eb..3dfc3e1 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -80,10 +80,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{} &
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
-  \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+  \multicolumn{1}{c}{\textbf{\t{hasq}}} &
+  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & & & \\
-  8, 9& Yes & Yes & Yes & & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
+  8   & Yes & Yes & Yes & No  & & \\
+  9   & Yes & Yes & Yes & Yes & & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -201,6 +203,8 @@ completing. Ebuilds must not run any of these commands once 
the current phase fu
 environment.
 \item[assert] Checks the shell's pipe status array, and if any element is 
non-zero (indicating
 failure), calls \t{die}, passing any parameters to it.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 66a6830aea68f7856b289feb9a8d0a5c9a7850c0
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat Jan 11 09:47:19 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:34 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=66a6830a

EAPI 9: Bash version is 5.2

Bug: https://bugs.gentoo.org/946193
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex | 3 ++-
 ebuild-format.tex| 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 88be303..7243e1f 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -48,7 +48,7 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 No & No & No & Yes \\
 
 Bash version & \compactfeatureref{bash-version} &
-4.2 & 4.2 & 5.0 & 5.0 \\
+4.2 & 4.2 & 5.0 & 5.2 \\
 
 Selective URI restrictions & \compactfeatureref{uri-restrict} &
 No & No & Yes & Yes \\
@@ -363,6 +363,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
+\item Bash version is 5.2, \featureref{bash-version}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-format.tex b/ebuild-format.tex
index 844f01a..a543013 100644
--- a/ebuild-format.tex
+++ b/ebuild-format.tex
@@ -32,7 +32,8 @@ output or standard error, or modify the state of the system 
in any way.
   \midrule
   0, 1, 2, 3, 4, 5  & 3.2 & No  \\
   6, 7  & 4.2 & Yes \\
-  8, 9  & 5.0 & Yes \\
+  8 & 5.0 & Yes \\
+  9 & 5.2 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: e22ff93f7768ed70f8f75e00a1ad2bc1ff12cdf3
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:13:28 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:35 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=e22ff93f

EAPI 9: Defined variables are no longer exported

Bug: https://bugs.gentoo.org/721088
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 ebuild-env-vars.tex  | 36 +---
 ebuild-vars.tex  |  4 
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7243e1f..91c09a2 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -75,6 +75,9 @@ Accumulate \t{PROPERTIES} & 
\compactfeatureref{accumulate-vars} &
 Accumulate \t{RESTRICT} & \compactfeatureref{accumulate-vars} &
 No & No & Yes & Yes \\
 
+Export variables & \compactfeatureref{export-vars} &
+Yes & Yes & Yes & No \\
+
 \t{PORTDIR} & \compactfeatureref{portdir} &
 Yes & No & No & No \\
 
@@ -364,6 +367,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
+\item Variables no longer exported, \featureref{export-vars}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 268fa36..4f19d70 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -1,10 +1,10 @@
 \section{Defined variables}
 \label{sec:ebuild-env-vars}
 
-The package manager must define the following environment variables. Not all 
variables are
-universally meaningful; variables that are not meaningful in a given phase or 
in global scope may
-be unset or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless
-otherwise specified.
+The package manager must define the following variables. Not all variables are 
universally
+meaningful; variables that are not meaningful in a given phase or in global 
scope may be unset
+or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless otherwise
+specified.
 
 Because of their special meanings, these variables may not be preserved 
consistently across all
 phases as would normally happen due to environment saving (see 
section~\ref{sec:ebuild-env-state}).
@@ -12,6 +12,26 @@ For example, \t{EBUILD_PHASE} is different for every phase, 
and \t{ROOT} may hav
 the various different \t{pkg_*} phases. Ebuilds must recalculate any variable 
they derive from an
 inconsistent variable.
 
+\featurelabel{export-vars} These variables are either exported to the 
environment or kept as
+unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars}; exceptions are
+\t{TMPDIR} and \t{HOME} which are always exported to the environment. In EAPIs 
where variables are
+not exported, the package manager must pass those that are required by 
ebuild-specific external
+commands (see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined 
manner.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs with variables exported to the environment}
+\label{tab:export-vars}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Variables exported?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \begin{landscape}
 % Reduce width of text area to make room for margin notes
 \addtolength{\hsize}{-25mm}
@@ -168,13 +188,15 @@ inconsistent variable.
 \t{TMPDIR} &
 All &
 Partially\footnotemark[\value{footnote}] &
-Must be set to the location of a usable temporary directory, for any 
applications
-called by an ebuild. Must not be used by ebuilds directly; see \t{T} 
above. \\
+Must be set to the location of a usable temporary directory, for any 
applications called
+by an ebuild. Must not be used by ebuilds directly; see \t{T} above. 
\t{TMPDIR} is always
+exported to the environment. \\
 \t{HOME} &
 All &
 Partially\footnotemark[\value{footnote}] &
 The full path to an appropriate temporary directory for use by any 
programs invoked by the
-ebuild that may read or modify the home directory. \\
+ebuild that may read or modify the home directory. \t{HOME} is always 
exported to the
+environment. \\
 \t{EPREFIX} &
 All &
 Yes &

diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index b030943..9979ce9 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -335,6 +335,10 @@ defined based upon any variant condition.}
 \end{tabular}
 \end{centertable}
 
+For EAPIs listed in table~\ref{tab:export-vars} with the property that 
variables are not exported,
+the package manager must not

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 32da3a86406c9657f0825e6772118220c41dc881
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:13:01 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:37 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=32da3a86

EAPI 9 bans domo

Bug: https://bugs.gentoo.org/951502
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index abaaf52..dd3d03e 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -129,6 +129,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{assert} & \compactfeatureref{banned-commands} &
 Yes & Yes & Yes & Banned \\
 
+\t{domo} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -372,6 +375,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
+\item \t{domo} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3dfc3e1..c977d00 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -81,11 +81,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
   \multicolumn{1}{c}{\textbf{\t{hasq}}} &
-  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
+  \multicolumn{1}{c}{\textbf{\t{assert}}} &
+  \multicolumn{1}{c}{\textbf{\t{domo}}} & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
-  8   & Yes & Yes & Yes & No  & & \\
-  9   & Yes & Yes & Yes & Yes & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & No  & \\
+  8   & Yes & Yes & Yes & No  & No  & \\
+  9   & Yes & Yes & Yes & Yes & Yes & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -589,6 +590,8 @@ the current phase function has returned.
 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}.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 
 \item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 353c44479add6b473a12a9a0ee41c755e593d8bf
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 13 21:14:36 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:36 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=353c4447

EAPI 9: Special profile variables are no longer exported

Bug: https://bugs.gentoo.org/948001
Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex   | 10 --
 profile-variables.tex |  2 ++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 4f19d70..1e2623b 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -354,8 +354,14 @@ commands (see section~\ref{sec:pkg-mgr-commands}) in an 
implementation-defined m
 \end{tabular}
 \end{centertable}
 
-Except where otherwise noted, all variables set in the active profiles' 
\t{make.defaults} files must
-be exported to the ebuild environment. \t{CHOST}, \t{CBUILD} and \t{CTARGET}, 
if not set by
+Variables listed in section~\ref{sec:specific-profile-vars} as having specific 
meanings or special
+handling, and that are set in the active profiles' \t{make.defaults} files, 
are either exported
+to the environment or kept as unexported shell variables, as specified for 
EAPIs in
+table~\ref{tab:export-vars}. To clarify, this behaviour is governed by the 
EAPI of the ebuild,
+not that of the profile.
+
+Except where otherwise noted, all other variables set in the active profiles' 
\t{make.defaults}
+files must be exported to the environment. \t{CHOST}, \t{CBUILD} and 
\t{CTARGET}, if not set by
 profiles, must contain either an appropriate machine tuple (the definition of 
appropriate is beyond
 the scope of this specification) or be unset.
 

diff --git a/profile-variables.tex b/profile-variables.tex
index f20fde4..ddcbd3a 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -69,6 +69,8 @@ completely override those in parent profiles.
 \end{centertable}
 
 \subsection{Specific variables and their meanings}
+\label{sec:specific-profile-vars}
+
 The following variables have specific meanings when set in profiles.
 \begin{description}
 \item[ARCH] The system's architecture. Must be a value listed in 
\t{profiles/arch.list}; see



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: d25f31534f93b826bfc9c8460798109c3981eed3
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Feb 21 18:32:43 2022 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:33 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=d25f3153

EAPI 9 profile EAPI defaults to top-level

Bug: https://bugs.gentoo.org/806181
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  5 -
 profiles.tex | 23 +--
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 9617dc4..f6aafe7 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -32,6 +32,9 @@ have identical entries for all listed EAPIs.}
 Less strict \t{updates} syntax & \compactfeatureref{updates-filenames} &
 No & No & Yes & Yes \\
 
+Default EAPI for profiles & \compactfeatureref{profile-eapi-default} &
+0 & 0 & 0 & Top-level \\
+
 Profile files as directories & \compactfeatureref{profile-file-dirs} &
 No & Yes & Yes & Yes \\
 
@@ -352,7 +355,7 @@ EAPI 8 is EAPI 7 with the following changes:
 EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
-\item None
+\item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index fbe375e..d814c31 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -33,8 +33,27 @@ are discarded.
 A profile directory may contain an \t{eapi} file. This file, if it exists, 
must contain a single
 line with the name of an EAPI\@. This specifies the EAPI to use when handling 
the directory in
 question; a package manager must not attempt to use any profile using a 
directory which requires an
-EAPI it does not support. If no \t{eapi} file is present, EAPI 0 shall be 
used. The EAPI is neither
-inherited via the \t{parent} file nor in subdirectories.
+EAPI it does not support.
+
+\featurelabel{profile-eapi-default} If no \t{eapi} file is present, the 
default depends on the EAPI
+of the top-level profiles directory (see section~\ref{sec:profiles-dir}). That 
EAPI shall be used
+if table~\ref{tab:profile-eapi-default} lists it as ``top-level''. Otherwise, 
EAPI 0 shall be used.
+
+The EAPI is neither inherited via the \t{parent} file nor in subdirectories.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Default EAPI for profiles}
+\label{tab:profile-eapi-default}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Default EAPI?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & 0 \\
+  9 & Top-level \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \subsection{deprecated}
 If a profile contains a file named \t{deprecated}, it is treated as such. The 
first line of this



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 51aa4611911193f11777891196b08435b601a958
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:09:52 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:35 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=51aa4611

Clarify use of the terms "export" and "environment variable"

Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex  | 12 ++--
 ebuild-functions.tex | 22 +++---
 ebuild-vars.tex  |  4 ++--
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 861dd48..268fa36 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -211,14 +211,14 @@ inconsistent variable.
 No &
 \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. \\
+as supporting \t{DESTTREE}\@. In all other EAPIs, this is retained as a 
conceptual variable
+inaccessible from the ebuild environment. \\
 \t{INSDESTTREE} &
 \t{src_install} &
 No &
 \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. \\
+EAPIs, this is retained as a conceptual variable inaccessible from the 
ebuild environment. \\
 \t{USE} &
 All &
 Yes &
@@ -373,11 +373,11 @@ This section discusses the handling of four variables:
 \begin{description}
 \item[IUSE] is the variable calculated from the \t{IUSE} values defined in 
ebuilds and eclasses.
 \item[IUSE_REFERENCEABLE] is a variable calculated from \t{IUSE} and a variety 
of other sources
-described below. It is purely a conceptual variable; it is not exported to 
the ebuild
+described below. It is purely a conceptual variable; it is inaccessible 
from the ebuild
 environment. Values in \t{IUSE_REFERENCEABLE} may legally be used in 
queries from other
 packages about an ebuild's state (for example, for use dependencies).
-\item[IUSE_EFFECTIVE] is another conceptual, unexported variable. Values in 
\t{IUSE_EFFECTIVE} are
-those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
+\item[IUSE_EFFECTIVE] is another conceptual, inaccessible variable. Values in 
\t{IUSE_EFFECTIVE}
+are those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
 function, and for use in dependency specification conditional blocks).
 \item[USE] is a variable calculated by the package manager and exported to the 
ebuild environment.
 \end{description}

diff --git a/ebuild-functions.tex b/ebuild-functions.tex
index 4308ea4..8f8668a 100644
--- a/ebuild-functions.tex
+++ b/ebuild-functions.tex
@@ -8,10 +8,10 @@ by the package manager as part of the build and/or install 
process. In all cases
 must provide a default implementation of these functions; unless otherwise 
stated this must be a
 no-op. All functions may assume that they have read access to all system 
libraries, binaries and
 configuration files that are accessible to normal users, as well as write 
access to the temporary
-directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} environment 
variables
+directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} variables
 (see section~\ref{sec:ebuild-env-vars}). Most functions must assume only that 
they have additional
-write access to the package's working directory (the \t{WORKDIR} environment 
variable); exceptions
-are noted below.
+write access to the package's working directory (the \t{WORKDIR} variable); 
exceptions are noted
+below.
 
 The environment for functions run outside of the build sequence (that is, 
\t{pkg_config},
 \t{pkg_info}, \t{pkg_prerm} and \t{pkg_postrm}) must be the environment used 
for the build of the
@@ -400,37 +400,37 @@ src_install() {
 
 The \t{pkg_preinst} function performs any special tasks that are required 
immediately before
 merging the package to the live filesystem. It must not write outside of the 
directories specified
-by the \t{ROOT} and \t{D} environment variables.
+by the \t{ROOT} and \t{D} variables.
 
 \t{pkg_preinst} must be run with full access to all files and directories 
below that specified by
-the \t{ROOT} and \t{D} environment variables.
+the \t{ROOT} and \t{D} variables.
 
 \subsection{pkg_postinst}
 
 The \t{pkg_postinst} function performs any special tasks that are required 
immediately after
 merging the package to the live filesystem. It must not write outside of the 
directory specified
-in the \t{ROOT} environment variable.
+in the \t{ROOT} variable.
 
 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 6a40faf91064e969dde1e038fc98de25b96841af
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Aug  3 16:32:47 2021 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:32 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=6a40faf9

Add an EAPI 9 identical to EAPI 8

Signed-off-by: Ulrich Müller  gentoo.org>

 commands.tex  |   4 +-
 dependencies.tex  |  26 -
 eapi-differences.tex  | 153 +++---
 eapis.tex |   4 +-
 ebuild-env-vars.tex   |  26 -
 ebuild-format.tex |   4 +-
 ebuild-functions.tex  |  46 +++
 ebuild-vars.tex   |  22 
 eclasses.tex  |   4 +-
 merge.tex |   6 +-
 pkg-mgr-commands.tex  | 100 -
 pms.tex   |   4 +-
 profile-variables.tex |   8 +--
 profiles.tex  |  12 ++--
 tree-layout.tex   |   8 +--
 15 files changed, 195 insertions(+), 232 deletions(-)

diff --git a/commands.tex b/commands.tex
index 2c9e594..81fd204 100644
--- a/commands.tex
+++ b/commands.tex
@@ -33,7 +33,7 @@ The following commands must always be available in the ebuild 
environment:
 table~\ref{tab:system-commands-table} as requiring GNU find.
 \end{compactitem}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{System commands for EAPIs}
 \label{tab:system-commands-table}
 \begin{tabular}{lll}
@@ -44,7 +44,7 @@ The following commands must always be available in the ebuild 
environment:
   \midrule
   0, 1, 2, 3, 4 & Undefined & Any \\
   5, 6  & Yes   & Any \\
-  7, 8  & Yes   & 2.7 \\
+  7, 8, 9   & Yes   & 2.7 \\
   \bottomrule
 \end{tabular}
 \end{centertable}

diff --git a/dependencies.tex b/dependencies.tex
index c1f7d6a..ce6e670 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -88,7 +88,7 @@ with the native build system (\t{CBUILD}). Ebuilds are 
allowed to call them in \
 \t{pkg_postinst}. Ebuilds may also call them in \t{pkg_prerm} and 
\t{pkg_postrm} but must not rely
 on them being available.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting additional dependency types}
 \label{tab:depend-table}
 \begin{tabular}{lll}
@@ -99,7 +99,7 @@ on them being available.
   \midrule
   0, 1, 2, 3, 4, 5, 6 & No  & No  \\
   7   & Yes & No  \\
-  8   & Yes & Yes \\
+  8, 9& Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -155,7 +155,7 @@ be surrounded on both sides by whitespace, except at the 
start and end of the st
 
 In particular, note that whitespace is not optional.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
 \label{tab:at-most-one-of-table}
 \begin{tabular}{ll}
@@ -164,7 +164,7 @@ In particular, note that whitespace is not optional.
   \multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} \\
   \midrule
   0, 1, 2, 3, 4 & No  \\
-  5, 6, 7, 8& Yes \\
+  5, 6, 7, 8, 9 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -204,7 +204,7 @@ In an exactly-one-of group, exactly one immediate child 
element must be matched.
 In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty 
exactly-one-of group counts as
 being matched.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Matching of empty dependency groups in EAPIs}
 \label{tab:empty-dep-groups}
 \begin{tabular}{ll}
@@ -214,7 +214,7 @@ being matched.
 are matched?}} \\
   \midrule
   0, 1, 2, 3, 4, 5, 6 & Yes \\
-  7, 8& No  \\
+  7, 8, 9 & No  \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -250,7 +250,7 @@ manager must warn or error if this feature is used with an 
EAPI not supporting u
 
 \note{Order is important. The slot restriction must come before use 
dependencies.}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Support for \t{SLOT} dependencies and sub-slots in EAPIs}
 \label{tab:slot-deps-table}
 \begin{tabular}{lll}
@@ -261,12 +261,12 @@ manager must warn or error if this feature is used with 
an EAPI not supporting u
   \midrule
   0 & No & No  \\
   1, 2, 3, 4& Named only & No  \\
-  5, 6, 7, 8& Named and operator & Yes \\
+  5, 6, 7, 8, 9 & Named and operator & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{USE} dependencies}
 \label{tab:use-deps-table}
 \begin{tabular}{ll}
@@ -276,7 +276,7 @@ manager must warn or error if this feature is used with an 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 98d739d1d5e50a279a318320de6209c455238204
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat May 17 06:33:24 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:33:34 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=98d739d1

EAPI 9 has use.stable and package.use.stable

Bug: https://bugs.gentoo.org/955833
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  7 +++
 profiles.tex | 34 ++
 2 files changed, 41 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index f6aafe7..88be303 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -41,6 +41,12 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 \t{package.provided} & \compactfeatureref{package-provided} &
 Optional & No & No & No \\
 
+\t{use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
+\t{package.use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
 Bash version & \compactfeatureref{bash-version} &
 4.2 & 4.2 & 5.0 & 5.0 \\
 
@@ -356,6 +362,7 @@ EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
+\item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index d814c31..43b8763 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -165,6 +165,40 @@ specification, and then a space delimited list of USE 
flags to enable. A USE fla
 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.stable and package.use.stable}
+\featurelabel{use-stable} The \t{use.stable} and \t{package.use.stable} files 
may be used to
+override the default USE flags specified by \t{make.defaults}. They only apply 
to packages that
+are merged due to a stable keyword in the sense of section~\ref{sec:keywords}. 
Each line in
+\t{use.stable} contains a USE flag to enable; the \t{-flag} syntax indicates 
that the flag should
+be disabled. The \t{package.use.stable} file uses the same format as 
\t{package.use}.
+\t{USE_EXPAND} values may be enabled or disabled by using 
\t{expand_name_value}.
+
+Stable restrictions are applied exactly when the following condition holds: If 
every stable keyword
+in \t{KEYWORDS} were replaced with its tilde-prefixed counterpart (see 
section~\ref{sec:keywords}),
+then the resulting \t{KEYWORDS} setting would prevent installation of the 
package.
+
+If a flag appears in more than one of \t{package.use}, \t{use.stable} and 
\t{package.use.stable},
+then \t{package.use.stable} takes precedence over \t{package.use}, which in 
turn takes precedence
+over \t{use.stable}.
+
+These files are supported in EAPIs as per table~\ref{tab:profile-use-stable}. 
They can be
+directories instead of regular files as per section~\ref{sec:line-stacking}.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Profile directory support for \t{use.stable} and 
\t{package.use.stable}}
+\label{tab:profile-use-stable}
+\begin{tabular}{lll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{use.stable}?}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{package.use.stable}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  & No  \\
+  9 & Yes & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \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},



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: 404efa97cacae79622134c15cdc8715b7464b39b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun 15 11:18:03 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:18:03 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=404efa97

Appendix: Use description lists for historical curiosities

This is more consistent with the rest of the document where individual
features rarely have their own subsections. Besides, it saves one page
in the PDF version.

Signed-off-by: Ulrich Müller  gentoo.org>

 appendices.tex | 28 +---
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/appendices.tex b/appendices.tex
index fd6ba34..8607608 100644
--- a/appendices.tex
+++ b/appendices.tex
@@ -32,7 +32,8 @@ The items described in this section are included for 
information only. Unless ot
 were deprecated or abandoned long before EAPI was introduced. Ebuilds must not 
use these features,
 and package managers should not be changed to support them.
 
-\subsection{If-else USE blocks}
+\begin{description}
+\item[If-else USE blocks]
 Historically, Portage supported if-else use conditionals, as shown by
 listing~\ref{lst:if-else-use-listing}. The block before the colon would be 
taken if the condition
 was met, and the block after the colon would be taken if the condition was not 
met.
@@ -50,27 +51,30 @@ DEPEND="
 \end{verbatim}
 \end{listing}
 
-\subsection{CVS versions}
+\item[CVS versions]
 Portage has very crude support for CVS packages. The package \t{foo} could 
contain a file named
 \t{foo-cvs.1.2.3.ebuild}. This version would order \emph{higher} than any 
non-CVS version (including
 \t{foo-2.ebuild}). This feature has not seen real world use and breaks 
versioned dependencies, so
 it must not be used.
 
-\subsection{use.defaults}
+\item[use.defaults]
 The \t{use.defaults} file in the profile directory was used to implement 
`autouse'---switching USE
 flags on or off depending upon which packages are installed. It was deprecated 
long ago and finally
 removed in 2009.
 
+\end{description}
+
 \section{Retroactive changes}
 
 In some exceptional cases, changes to the specification have been approved by 
the Gentoo Council
 without introducing a new EAPI\@. This section lists such retroactive changes.
 
-\subsection{Bash version}
+\begin{description}
+\item[Bash version]
 EAPIs 0, 1 and~2 originally specified GNU Bash version 3.0. This was 
retroactively updated to
 version 3.2 (see table~\ref{tab:bash-version}) in November 2009.
 
-\subsection{Old-style virtuals}
+\item[Old-style virtuals]
 Historically, virtuals were special packages rather than regular ebuilds. An 
ebuild could specify in
 the \t{PROVIDE} metadata that it supplied certain virtuals, and the package 
manager had to bear this
 in mind when handling dependencies.
@@ -82,7 +86,7 @@ GLEP~37~\cite{glep37} and finally removed in 2011.
 requirements to pull in a `provider'. This does not require any special 
handling from the package
 manager.}
 
-\subsection{EAPI parsing}
+\item[EAPI parsing]
 The method to specify the EAPI of an ebuild used to be a shell variable 
assignment, and the package
 manager had to source the ebuild in order to determine the EAPI\@. Therefore 
any ebuild using
 a future EAPI would still have to be sourceable by old package managers, which 
imposed restrictions
@@ -94,12 +98,12 @@ The current syntax of the \t{EAPI} assignment statement 
(see section~\ref{sec:ea
 the package manager to obtain the EAPI from the ebuild by a regular expression 
match and without
 sourcing it, was introduced in May 2012.
 
-\subsection{Package names}
+\item[Package names]
 Previously, package names were only required not to end in a hyphen followed 
by one or more digits.
 In October 2012 this was tightened to the specification in 
section~\ref{sec:package-names}, namely
 that they must not end in a hyphen followed by anything resembling a package 
version.
 
-\subsection{Asterisk in dependency specification}
+\item[Asterisk in dependency specification]
 In the \t{=} dependency operator specified in section~\ref{sec:dep-operator}, 
an asterisk used to
 induce string prefix comparison instead of the normal version comparison 
logic. That could lead to
 surprising results, e.\,g.\ \t{=dev-lang/perl-5.2*} matching 
\t{dev-lang/perl-5.22.0}. Moreover,
@@ -108,13 +112,13 @@ implementation in package managers deviated from what was 
specified.
 String prefix matching was effective in EAPIs 0, 1, 2, 3, 4 and~5. It was 
retroactively dropped
 in favour of the current behaviour in October 2015.
 
-\subsection{Empty dependency groups}
+\item[Empty dependency groups]
 The dependency specification format (see section~\ref{sec:dependency-spec}) 
originally permitted
 all-of, any-of, exactly-one-of, at-most-one-of and use-conditional groups with 
zero sub-elements.
 However, such empty groups were neither supported by all package managers nor 
used in ebuilds.
 They were dropped 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-15 Thread Ulrich Müller
commit: ba0b51f70f2f45039633daddbd47cec18030aced
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun 15 11:16:40 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun 15 11:16:40 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=ba0b51f7

Appendix: Tweak wording in "Retroactive changes" section

Signed-off-by: Ulrich Müller  gentoo.org>

 appendices.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appendices.tex b/appendices.tex
index 8249ab3..fd6ba34 100644
--- a/appendices.tex
+++ b/appendices.tex
@@ -88,7 +88,7 @@ manager had to source the ebuild in order to determine the 
EAPI\@. Therefore any
 a future EAPI would still have to be sourceable by old package managers, which 
imposed restrictions
 e.\,g.\ on updating the Bash version or on possible changes of global scope 
functions. Several
 approaches to overcome this limitation were discussed, notably 
GLEP~55~\cite{glep55}, which was
-rejected though.
+ultimately rejected.
 
 The current syntax of the \t{EAPI} assignment statement (see 
section~\ref{sec:eapi}), allowing
 the package manager to obtain the EAPI from the ebuild by a regular expression 
match and without



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 1d903d17ce058c78c8562807a2afaf5e885bd38a
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 16:41:33 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:19 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=1d903d17

Cheat sheet: Update for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 49 -
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 60bea45..639d3f3 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -15,7 +15,7 @@
 \usepackage[local]{gitinfo2}
 \newcommand{\code}[1]{\texttt{#1}}
 % This should reflect the latest approved EAPI version
-\newcommand{\version}{8.0}
+\newcommand{\version}{9.0}
 \newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
 \renewcommand{\familydefault}{\sfdefault}
 \urlstyle{sf}
@@ -577,6 +577,53 @@ differences between these EAPIs.
 and LHA archives. See \featureref{unpack-extensions}.
 \end{description}
 
+\section{EAPI 9}
+\label{sec:cs:eapi9}
+\subsection{Additions/changes}
+\label{sec:cs:eapi9-additions}
+\begin{description}
+\item[Default EAPI for profiles] Profile directories without their
+own \code{eapi} file no longer default to EAPI 0, but to the EAPI
+specified in the top-level \code{profiles} directory.
+See \featureref{profile-eapi-default}.
+\item[\code{use.stable} and \code{package.use.stable}] These are
+new files supported in profile directories. They may be used to
+override the default USE flags specified by \code{make.defaults},
+but act only on packages that would be merged due to a stable
+keyword. See \featureref{use-stable}.
+\item[Bash version] Ebuilds can use features of Bash version 5.2
+(was 5.0 before). See \featureref{bash-version}.
+\item[Variables are no longer exported] The package manager no
+longer exports its defined shell variables (exceptions are
+\code{TMPDIR} and \code{HOME}) to the environment. The same
+applies to variables defined in \code{make.defaults} that have
+specific meanings. See \featureref{export-vars}.
+\item[\code{pipestatus}] Checks the shell's pipe status array,
+i.\,e.\ the exit status of the command(s) in the last executed
+pipeline, and returns true if all elements are zero. It also
+prints the pipe status array when the \code{-v} option is given.
+See \featureref{pipestatus}.
+\item[\code{ver_replacing} \emph{op v2}] Checks if the relation
+\emph{v1 op v2} is true for any element \emph{v1} of
+\code{REPLACING_VERSIONS}\@. \emph{op} can be any operator that is
+accepted by \code{ver_test}. See \featureref{ver-replacing}.
+\item[\code{edo}] Outputs its entire argument list as an
+informational message, then executes it as a simple shell command,
+with standard failure behaviour. See \featureref{edo}.
+\item[Merging of symlinks] When merging \code{D} to \code{ROOT},
+absolute symlinks are now merged as-is. The package manager will
+no longer strip a leading \code{D} from their link targets.
+See \featureref{symlink-rewrite}.
+\end{description}
+\subsection{Removals/bans}
+\label{sec:cs:eapi9-removalsbans}
+\begin{description}
+\item[\code{assert}] No longer allowed. Use \code{pipestatus}
+instead. See \featureref{banned-commands}.
+\item[\code{domo}] No longer allowed. Use \code{insinto} and
+\code{newins} as replacement. See \featureref{banned-commands}.
+\end{description}
+
 \end{document}
 
 % vim: set filetype=tex fileencoding=utf8 et tw=70 spell spelllang=en :



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 434e4fcfffba6fe53de8659db8a299414afa8f1a
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Aug  3 16:32:47 2021 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:12 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=434e4fcf

Add an EAPI 9 identical to EAPI 8

Signed-off-by: Ulrich Müller  gentoo.org>

 commands.tex  |   4 +-
 dependencies.tex  |  26 -
 eapi-differences.tex  | 153 +++---
 eapis.tex |   4 +-
 ebuild-env-vars.tex   |  26 -
 ebuild-format.tex |   4 +-
 ebuild-functions.tex  |  46 +++
 ebuild-vars.tex   |  22 
 eclasses.tex  |   4 +-
 merge.tex |   6 +-
 pkg-mgr-commands.tex  | 100 -
 pms.tex   |   4 +-
 profile-variables.tex |   8 +--
 profiles.tex  |  12 ++--
 tree-layout.tex   |   8 +--
 15 files changed, 195 insertions(+), 232 deletions(-)

diff --git a/commands.tex b/commands.tex
index 2c9e594..81fd204 100644
--- a/commands.tex
+++ b/commands.tex
@@ -33,7 +33,7 @@ The following commands must always be available in the ebuild 
environment:
 table~\ref{tab:system-commands-table} as requiring GNU find.
 \end{compactitem}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{System commands for EAPIs}
 \label{tab:system-commands-table}
 \begin{tabular}{lll}
@@ -44,7 +44,7 @@ The following commands must always be available in the ebuild 
environment:
   \midrule
   0, 1, 2, 3, 4 & Undefined & Any \\
   5, 6  & Yes   & Any \\
-  7, 8  & Yes   & 2.7 \\
+  7, 8, 9   & Yes   & 2.7 \\
   \bottomrule
 \end{tabular}
 \end{centertable}

diff --git a/dependencies.tex b/dependencies.tex
index c1f7d6a..a826355 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -88,7 +88,7 @@ with the native build system (\t{CBUILD}). Ebuilds are 
allowed to call them in \
 \t{pkg_postinst}. Ebuilds may also call them in \t{pkg_prerm} and 
\t{pkg_postrm} but must not rely
 on them being available.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting additional dependency types}
 \label{tab:depend-table}
 \begin{tabular}{lll}
@@ -99,7 +99,7 @@ on them being available.
   \midrule
   0, 1, 2, 3, 4, 5, 6 & No  & No  \\
   7   & Yes & No  \\
-  8   & Yes & Yes \\
+  8, 9& Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -155,7 +155,7 @@ be surrounded on both sides by whitespace, except at the 
start and end of the st
 
 In particular, note that whitespace is not optional.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
 \label{tab:at-most-one-of-table}
 \begin{tabular}{ll}
@@ -164,7 +164,7 @@ In particular, note that whitespace is not optional.
   \multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} \\
   \midrule
   0, 1, 2, 3, 4 & No  \\
-  5, 6, 7, 8& Yes \\
+  5, 6, 7, 8, 9 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -204,7 +204,7 @@ In an exactly-one-of group, exactly one immediate child 
element must be matched.
 In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty 
exactly-one-of group counts as
 being matched.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Matching of empty dependency groups in EAPIs}
 \label{tab:empty-dep-groups}
 \begin{tabular}{ll}
@@ -214,7 +214,7 @@ being matched.
 are matched?}} \\
   \midrule
   0, 1, 2, 3, 4, 5, 6 & Yes \\
-  7, 8& No  \\
+  7, 8, 9 & No  \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -250,7 +250,7 @@ manager must warn or error if this feature is used with an 
EAPI not supporting u
 
 \note{Order is important. The slot restriction must come before use 
dependencies.}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Support for \t{SLOT} dependencies and sub-slots in EAPIs}
 \label{tab:slot-deps-table}
 \begin{tabular}{lll}
@@ -261,12 +261,12 @@ manager must warn or error if this feature is used with 
an EAPI not supporting u
   \midrule
   0 & No & No  \\
   1, 2, 3, 4& Named only & No  \\
-  5, 6, 7, 8& Named and operator & Yes \\
+  5, 6, 7, 8, 9 & Named and operator & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{USE} dependencies}
 \label{tab:use-deps-table}
 \begin{tabular}{ll}
@@ -276,7 +276,7 @@ manager must warn or error if this feature is used with an 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 14121322cf86146d5cb0e773f8f7d21ed456b0ac
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:13:01 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:16 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=14121322

EAPI 9 bans domo

Bug: https://bugs.gentoo.org/951502
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index abaaf52..dd3d03e 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -129,6 +129,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{assert} & \compactfeatureref{banned-commands} &
 Yes & Yes & Yes & Banned \\
 
+\t{domo} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -372,6 +375,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
+\item \t{domo} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3dfc3e1..c977d00 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -81,11 +81,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
   \multicolumn{1}{c}{\textbf{\t{hasq}}} &
-  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
+  \multicolumn{1}{c}{\textbf{\t{assert}}} &
+  \multicolumn{1}{c}{\textbf{\t{domo}}} & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
-  8   & Yes & Yes & Yes & No  & & \\
-  9   & Yes & Yes & Yes & Yes & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & No  & \\
+  8   & Yes & Yes & Yes & No  & No  & \\
+  9   & Yes & Yes & Yes & Yes & Yes & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -589,6 +590,8 @@ the current phase function has returned.
 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}.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 
 \item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: e53cb201a1aff65a2682ee36d8423acbccf84b02
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sun Jun  8 14:57:50 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:19 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=e53cb201

Cheat sheet: Remove EAPI 6 to make room for EAPI 9

Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-cheatsheet.tex | 156 ++--
 1 file changed, 78 insertions(+), 78 deletions(-)

diff --git a/eapi-cheatsheet.tex b/eapi-cheatsheet.tex
index 438f189..60bea45 100644
--- a/eapi-cheatsheet.tex
+++ b/eapi-cheatsheet.tex
@@ -77,10 +77,10 @@
 \footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}
 \end{abstract}
 
-\section{EAPIs 0, 1, 2, 3, 4, and 5}
+\section{EAPIs 0 to 6}
 \label{sec:cs:eapi0-2}
-Omitted for lack of space. See version~5.0 of this document for
-differences between these previous EAPIs.
+Omitted for lack of space. See previous versions of this document for
+differences between these EAPIs.
 
 % \section{EAPI 0}
 % \label{sec:cs:eapi0}
@@ -327,81 +327,81 @@ differences between these previous EAPIs.
 % See \featureref{stablemask}.
 % \end{description}
 
-\section{EAPI 6 (2015-11-13)}
-\label{sec:cs:eapi6}
-\subsection{Additions/changes}
-\label{sec:cs:eapi6-additions}
-\begin{description}
-\item[Bash version] Ebuilds can use features of Bash version 4.2
-(was 3.2 before).
-See \featureref{bash-version}.
-\item[\code{failglob}] The \code{failglob} option of Bash is set
-in global scope, so that unintentional pattern expansion will be
-caught as an error.
-See \featureref{failglob}.
-\item[Locale settings] It is ensured that the behaviour of case
-modification and collation order for ASCII characters
-(\code{LC_CTYPE} and \code{LC_COLLATE}) are the same as in the
-POSIX locale.
-See \featureref{locale-settings}.
-\item[\code{src_prepare}] This phase function has a default now,
-which applies patches from the \code{PATCHES} variable with the
-new \code{eapply} command, and user-provided patches with
-\code{eapply_user}.
-See \featureref{src-prepare}.
-\item[\code{src_install}] The default implementation uses the new
-\code{einstalldocs} function for installing documentation.
-See \featureref{src-install}.
-\item[\code{nonfatal die}] When \code{die} or \code{assert} are
-called under the \code{nonfatal} command and with the \code{-n}
-option, they will not abort the build process but return with an
-error.
-See \featureref{nonfatal-die}.
-\item[\code{unpack} changes] \code{unpack} has been extended:
-\begin{description}
-\item[Pathnames] Both absolute paths and paths relative to the
-working directory are accepted as arguments.
-See \featureref{unpack-absolute}.
-\item[\code{.txz} files] Suffix \code{.txz} for xz compressed
-tarballs is recognised.
-See \featureref{unpack-extensions}.
-\item[Filename case] Character case of filename extensions is
-ignored.
-See \featureref{unpack-ignore-case}.
-\end{description}
-\item[\code{econf} changes] Options \code{-{}-docdir} and
-\code{-{}-htmldir} are passed to \code{configure}, in addition to
-the existing options.
-See \featureref{econf-options}.
-\item[\code{eapply}] The \code{eapply} command is a simplified
-substitute for \code{epatch}, implemented in the package manager.
-The patches from its file or directory arguments are applied using
-\code{patch -p1}.
-See \featureref{eapply}.
-\item[\code{eapply_user}] The \code{eapply_user} command permits
-the package manager to apply user-provided patches. It must be
-called from every \code{src_prepare} function.
-See \featureref{eapply-user}.
-\item[\code{einstalldocs}] The \code{einstalldocs} function will
-install the files specified by the \code{DOCS} variable (or a
-default set of files if \code{DOCS} is unset) and by the
-\code{HTML_DOCS} variable.
-See \featureref{einstalldocs}.
-\item[\code{in_iuse}] The \code{in_iuse} function returns
-true if the USE flag given as its argument is available in the
-ebuild for USE queries.
-See \featureref{in-iuse}.
-\item[\code{get_libdir}] The \code{get_libdir} command outputs
-the \code{lib*} directory basename suitable for the current ABI\@.
-See \featureref{get-libdir}.
-\end{description}
-\subsection{Removals/bans}
-\label{sec:cs:eapi6-removalsbans}
-\begin{description}
-\item[\code{einstall}] No longer allowed. Use \code{emake install}
-as replacement.
-See \featureref{banned-commands}.
-\end{description}
+% \section{EAPI 6 (2015-11-13)}
+% \label{sec:cs:eapi6}
+% \subsection{Additions/changes}
+% \label{sec:cs:eapi6-additions}
+% \begin{description}
+% \item[Bash version] Ebuilds can use features of Bash version 4.2
+

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 71c8dd85b6df8d6f17d1f927c133fc786345b50b
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:14:14 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:18 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=71c8dd85

EAPI 9 has edo

Bug: https://bugs.gentoo.org/744880
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 21 -
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index d303322..be95fbe 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -192,6 +192,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+\t{edo} & \compactfeatureref{edo} &
+No & No & No & Yes \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -384,6 +387,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item \t{edo}, \featureref{edo}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a49ab98..a4c59fa 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1301,21 +1301,32 @@ has returned.
 \end{algorithmic}
 \end{algorithm}
 
+\item[edo] \featurelabel{edo} Takes one or more arguments. The entire argument 
list is output
+as an informational message to stderr; individual tokens may be reformatted to 
avoid ambiguity.
+The first argument is then executed as a command, with the remaining arguments 
passed to it.
+If the command fails, \t{edo} aborts the build process using \t{die}, unless 
it was called under
+\t{nonfatal}, in which case it returns a non-zero exit status.
+
+\t{edo} must be implemented internally as a shell function. Only available in 
EAPIs listed in
+table~\ref{tab:misc-commands} as supporting \t{edo}.
+
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Misc commands for EAPIs}
 \label{tab:misc-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \toprule
   \multicolumn{1}{c}{\textbf{EAPI}} &
   \multicolumn{1}{c}{\textbf{\t{default}?}} &
   \multicolumn{1}{c}{\textbf{\t{einstalldocs}?}} &
-  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} &
+  \multicolumn{1}{c}{\textbf{\t{edo}?}} \\
   \midrule
-  0, 1  & No  & No  & No  \\
-  2, 3, 4, 5& Yes & No  & No  \\
-  6, 7, 8, 9& Yes & Yes & Yes \\
+  0, 1  & No  & No  & No  & No  \\
+  2, 3, 4, 5& Yes & No  & No  & No  \\
+  6, 7, 8   & Yes & Yes & Yes & No  \\
+  9 & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 7fcb8f896262ec45a93cbe738f97f82b963d7912
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat Jan 11 09:47:19 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:14 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=7fcb8f89

EAPI 9: Bash version is 5.2

Bug: https://bugs.gentoo.org/946193
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex | 3 ++-
 ebuild-format.tex| 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 88be303..7243e1f 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -48,7 +48,7 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 No & No & No & Yes \\
 
 Bash version & \compactfeatureref{bash-version} &
-4.2 & 4.2 & 5.0 & 5.0 \\
+4.2 & 4.2 & 5.0 & 5.2 \\
 
 Selective URI restrictions & \compactfeatureref{uri-restrict} &
 No & No & Yes & Yes \\
@@ -363,6 +363,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
+\item Bash version is 5.2, \featureref{bash-version}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-format.tex b/ebuild-format.tex
index 844f01a..a543013 100644
--- a/ebuild-format.tex
+++ b/ebuild-format.tex
@@ -32,7 +32,8 @@ output or standard error, or modify the state of the system 
in any way.
   \midrule
   0, 1, 2, 3, 4, 5  & 3.2 & No  \\
   6, 7  & 4.2 & Yes \\
-  8, 9  & 5.0 & Yes \\
+  8 & 5.0 & Yes \\
+  9 & 5.2 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 56fd215fa18c325bc2a02f325ac631054d2d41e7
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:18 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=56fd215f

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 19 +--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index be95fbe..13c1c38 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -195,6 +195,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{edo} & \compactfeatureref{edo} &
 No & No & No & Yes \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -388,6 +391,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
 \item \t{edo}, \featureref{edo}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..e51c1b8 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,23 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link starts with \t{D} must be rewritten 
with the leading
+\t{D} removed. The package manager should issue a notice when encountering 
such a symlink.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 884397cdf414cb7d968b6a6a8fd08bd1e3578429
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:02:56 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:15 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=884397cd

EAPI 9 bans assert

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 10 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 91c09a2..abaaf52 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -126,6 +126,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{hasq} & \compactfeatureref{banned-commands} &
 Yes & Yes & Banned & Banned \\
 
+\t{assert} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -368,6 +371,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Variables no longer exported, \featureref{export-vars}.
+\item \t{assert} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 878d1eb..3dfc3e1 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -80,10 +80,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{} &
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
-  \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+  \multicolumn{1}{c}{\textbf{\t{hasq}}} &
+  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & & & \\
-  8, 9& Yes & Yes & Yes & & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
+  8   & Yes & Yes & Yes & No  & & \\
+  9   & Yes & Yes & Yes & Yes & & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -201,6 +203,8 @@ completing. Ebuilds must not run any of these commands once 
the current phase fu
 environment.
 \item[assert] Checks the shell's pipe status array, and if any element is 
non-zero (indicating
 failure), calls \t{die}, passing any parameters to it.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 768dcd28c7554c2a3dc0958c66ef916fa378ff0d
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:09:52 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:14 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=768dcd28

Clarify use of the terms "export" and "environment variable"

Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex  | 12 ++--
 ebuild-functions.tex | 22 +++---
 ebuild-vars.tex  |  4 ++--
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 861dd48..268fa36 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -211,14 +211,14 @@ inconsistent variable.
 No &
 \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. \\
+as supporting \t{DESTTREE}\@. In all other EAPIs, this is retained as a 
conceptual variable
+inaccessible from the ebuild environment. \\
 \t{INSDESTTREE} &
 \t{src_install} &
 No &
 \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. \\
+EAPIs, this is retained as a conceptual variable inaccessible from the 
ebuild environment. \\
 \t{USE} &
 All &
 Yes &
@@ -373,11 +373,11 @@ This section discusses the handling of four variables:
 \begin{description}
 \item[IUSE] is the variable calculated from the \t{IUSE} values defined in 
ebuilds and eclasses.
 \item[IUSE_REFERENCEABLE] is a variable calculated from \t{IUSE} and a variety 
of other sources
-described below. It is purely a conceptual variable; it is not exported to 
the ebuild
+described below. It is purely a conceptual variable; it is inaccessible 
from the ebuild
 environment. Values in \t{IUSE_REFERENCEABLE} may legally be used in 
queries from other
 packages about an ebuild's state (for example, for use dependencies).
-\item[IUSE_EFFECTIVE] is another conceptual, unexported variable. Values in 
\t{IUSE_EFFECTIVE} are
-those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
+\item[IUSE_EFFECTIVE] is another conceptual, inaccessible variable. Values in 
\t{IUSE_EFFECTIVE}
+are those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
 function, and for use in dependency specification conditional blocks).
 \item[USE] is a variable calculated by the package manager and exported to the 
ebuild environment.
 \end{description}

diff --git a/ebuild-functions.tex b/ebuild-functions.tex
index 046a0a7..bf6b774 100644
--- a/ebuild-functions.tex
+++ b/ebuild-functions.tex
@@ -8,10 +8,10 @@ by the package manager as part of the build and/or install 
process. In all cases
 must provide a default implementation of these functions; unless otherwise 
stated this must be a
 no-op. All functions may assume that they have read access to all system 
libraries, binaries and
 configuration files that are accessible to normal users, as well as write 
access to the temporary
-directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} environment 
variables
+directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} variables
 (see section~\ref{sec:ebuild-env-vars}). Most functions must assume only that 
they have additional
-write access to the package's working directory (the \t{WORKDIR} environment 
variable); exceptions
-are noted below.
+write access to the package's working directory (the \t{WORKDIR} variable); 
exceptions are noted
+below.
 
 The environment for functions run outside of the build sequence (that is, 
\t{pkg_config},
 \t{pkg_info}, \t{pkg_prerm} and \t{pkg_postrm}) must be the environment used 
for the build of the
@@ -400,37 +400,37 @@ src_install() {
 
 The \t{pkg_preinst} function performs any special tasks that are required 
immediately before
 merging the package to the live filesystem. It must not write outside of the 
directories specified
-by the \t{ROOT} and \t{D} environment variables.
+by the \t{ROOT} and \t{D} variables.
 
 \t{pkg_preinst} must be run with full access to all files and directories 
below that specified by
-the \t{ROOT} and \t{D} environment variables.
+the \t{ROOT} and \t{D} variables.
 
 \subsection{pkg_postinst}
 
 The \t{pkg_postinst} function performs any special tasks that are required 
immediately after
 merging the package to the live filesystem. It must not write outside of the 
directory specified
-in the \t{ROOT} environment variable.
+in the \t{ROOT} variable.
 
 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 055403924457cdd7d168fb7a98d670d10376a20e
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:17 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=05540392

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 20 
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7cfffd4..d303322 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -180,6 +180,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -380,6 +383,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a2a1935..a49ab98 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1101,20 +1101,32 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element with 
the version string.
+Returns shell true (0) if the specified relation is fulfilled for any 
element. Note that if
+\t{REPLACING_VERSIONS} is empty, shell false (1) is returned.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 0c0bb972c0fa7dfa027e3e7c4a8276134fcefbaf
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:06:26 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:16 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=0c0bb972

EAPI 9 has pipestatus

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 19 +++
 2 files changed, 23 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index dd3d03e..7cfffd4 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -144,6 +144,9 @@ Output commands use stdout & 
\compactfeatureref{output-no-stdout} &
 \t{die} in subshell & \compactfeatureref{subshell-die} &
 No & Yes & Yes & Yes \\
 
+\t{pipestatus} & \compactfeatureref{pipestatus} &
+No & No & No & Yes \\
+
 \t{econf -{}-datarootdir} & \compactfeatureref{econf-options} &
 No & No & Yes & Yes \\
 
@@ -376,6 +379,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
+\item \t{pipestatus}, \featureref{pipestatus}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index c977d00..a2a1935 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -206,6 +206,11 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 failure), calls \t{die}, passing any parameters to it.
 In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
 section~\ref{sec:banned-commands}.
+\item[pipestatus] \featurelabel{pipestatus} Checks the shell's pipe status 
array, i.\,e.\ the exit
+status of the command(s) in the most recently executed foreground 
pipeline. Returns shell true
+(0) if all elements are zero, or the last non-zero element otherwise. If 
called with \t{-v}
+as the first argument, also outputs the pipe status array as a 
space-separated list.
+Only available in EAPIs listed in table~\ref{tab:pipestatus} as supporting 
\t{pipestatus}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
@@ -224,6 +229,20 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 \end{tabular}
 \end{centertable}
 
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{pipestatus}}
+\label{tab:pipestatus}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{pipestatus}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  \\
+  9 & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \subsection{Patch commands}
 These commands are used during the \t{src_prepare} phase to apply patches to 
the package's sources.
 Ebuilds must not run any of these commands once the current phase function has 
returned.



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: dfef5c9b3719b8fabc19486a0b5348d824f268f4
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:13:28 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:14 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=dfef5c9b

EAPI 9: Defined variables are no longer exported

Bug: https://bugs.gentoo.org/721088
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 ebuild-env-vars.tex  | 36 +---
 ebuild-vars.tex  |  4 
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7243e1f..91c09a2 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -75,6 +75,9 @@ Accumulate \t{PROPERTIES} & 
\compactfeatureref{accumulate-vars} &
 Accumulate \t{RESTRICT} & \compactfeatureref{accumulate-vars} &
 No & No & Yes & Yes \\
 
+Export variables & \compactfeatureref{export-vars} &
+Yes & Yes & Yes & No \\
+
 \t{PORTDIR} & \compactfeatureref{portdir} &
 Yes & No & No & No \\
 
@@ -364,6 +367,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Bash version is 5.2, \featureref{bash-version}.
+\item Variables no longer exported, \featureref{export-vars}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 268fa36..4f19d70 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -1,10 +1,10 @@
 \section{Defined variables}
 \label{sec:ebuild-env-vars}
 
-The package manager must define the following environment variables. Not all 
variables are
-universally meaningful; variables that are not meaningful in a given phase or 
in global scope may
-be unset or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless
-otherwise specified.
+The package manager must define the following variables. Not all variables are 
universally
+meaningful; variables that are not meaningful in a given phase or in global 
scope may be unset
+or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless otherwise
+specified.
 
 Because of their special meanings, these variables may not be preserved 
consistently across all
 phases as would normally happen due to environment saving (see 
section~\ref{sec:ebuild-env-state}).
@@ -12,6 +12,26 @@ For example, \t{EBUILD_PHASE} is different for every phase, 
and \t{ROOT} may hav
 the various different \t{pkg_*} phases. Ebuilds must recalculate any variable 
they derive from an
 inconsistent variable.
 
+\featurelabel{export-vars} These variables are either exported to the 
environment or kept as
+unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars}; exceptions are
+\t{TMPDIR} and \t{HOME} which are always exported to the environment. In EAPIs 
where variables are
+not exported, the package manager must pass those that are required by 
ebuild-specific external
+commands (see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined 
manner.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs with variables exported to the environment}
+\label{tab:export-vars}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Variables exported?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \begin{landscape}
 % Reduce width of text area to make room for margin notes
 \addtolength{\hsize}{-25mm}
@@ -168,13 +188,15 @@ inconsistent variable.
 \t{TMPDIR} &
 All &
 Partially\footnotemark[\value{footnote}] &
-Must be set to the location of a usable temporary directory, for any 
applications
-called by an ebuild. Must not be used by ebuilds directly; see \t{T} 
above. \\
+Must be set to the location of a usable temporary directory, for any 
applications called
+by an ebuild. Must not be used by ebuilds directly; see \t{T} above. 
\t{TMPDIR} is always
+exported to the environment. \\
 \t{HOME} &
 All &
 Partially\footnotemark[\value{footnote}] &
 The full path to an appropriate temporary directory for use by any 
programs invoked by the
-ebuild that may read or modify the home directory. \\
+ebuild that may read or modify the home directory. \t{HOME} is always 
exported to the
+environment. \\
 \t{EPREFIX} &
 All &
 Yes &

diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index b030943..9979ce9 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -335,6 +335,10 @@ defined based upon any variant condition.}
 \end{tabular}
 \end{centertable}
 
+For EAPIs listed in table~\ref{tab:export-vars} with the property that 
variables are not exported,
+the package manager must not

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 394c4d8755331c02dc66d0a67c18875c4c0463ca
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 13 21:14:36 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:15 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=394c4d87

EAPI 9: Special profile variables are no longer exported

Bug: https://bugs.gentoo.org/948001
Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex   | 10 --
 profile-variables.tex |  2 ++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 4f19d70..1e2623b 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -354,8 +354,14 @@ commands (see section~\ref{sec:pkg-mgr-commands}) in an 
implementation-defined m
 \end{tabular}
 \end{centertable}
 
-Except where otherwise noted, all variables set in the active profiles' 
\t{make.defaults} files must
-be exported to the ebuild environment. \t{CHOST}, \t{CBUILD} and \t{CTARGET}, 
if not set by
+Variables listed in section~\ref{sec:specific-profile-vars} as having specific 
meanings or special
+handling, and that are set in the active profiles' \t{make.defaults} files, 
are either exported
+to the environment or kept as unexported shell variables, as specified for 
EAPIs in
+table~\ref{tab:export-vars}. To clarify, this behaviour is governed by the 
EAPI of the ebuild,
+not that of the profile.
+
+Except where otherwise noted, all other variables set in the active profiles' 
\t{make.defaults}
+files must be exported to the environment. \t{CHOST}, \t{CBUILD} and 
\t{CTARGET}, if not set by
 profiles, must contain either an appropriate machine tuple (the definition of 
appropriate is beyond
 the scope of this specification) or be unset.
 

diff --git a/profile-variables.tex b/profile-variables.tex
index f20fde4..ddcbd3a 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -69,6 +69,8 @@ completely override those in parent profiles.
 \end{centertable}
 
 \subsection{Specific variables and their meanings}
+\label{sec:specific-profile-vars}
+
 The following variables have specific meanings when set in profiles.
 \begin{description}
 \item[ARCH] The system's architecture. Must be a value listed in 
\t{profiles/arch.list}; see



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: e7279cf516eb94a07bfb1fa99c9bd0f161bd865e
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat May 17 06:33:24 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:13 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=e7279cf5

EAPI 9 has use.stable and package.use.stable

Bug: https://bugs.gentoo.org/955833
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  7 +++
 profiles.tex | 34 ++
 2 files changed, 41 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index f6aafe7..88be303 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -41,6 +41,12 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 \t{package.provided} & \compactfeatureref{package-provided} &
 Optional & No & No & No \\
 
+\t{use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
+\t{package.use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
 Bash version & \compactfeatureref{bash-version} &
 4.2 & 4.2 & 5.0 & 5.0 \\
 
@@ -356,6 +362,7 @@ EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
+\item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index d814c31..43b8763 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -165,6 +165,40 @@ specification, and then a space delimited list of USE 
flags to enable. A USE fla
 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.stable and package.use.stable}
+\featurelabel{use-stable} The \t{use.stable} and \t{package.use.stable} files 
may be used to
+override the default USE flags specified by \t{make.defaults}. They only apply 
to packages that
+are merged due to a stable keyword in the sense of section~\ref{sec:keywords}. 
Each line in
+\t{use.stable} contains a USE flag to enable; the \t{-flag} syntax indicates 
that the flag should
+be disabled. The \t{package.use.stable} file uses the same format as 
\t{package.use}.
+\t{USE_EXPAND} values may be enabled or disabled by using 
\t{expand_name_value}.
+
+Stable restrictions are applied exactly when the following condition holds: If 
every stable keyword
+in \t{KEYWORDS} were replaced with its tilde-prefixed counterpart (see 
section~\ref{sec:keywords}),
+then the resulting \t{KEYWORDS} setting would prevent installation of the 
package.
+
+If a flag appears in more than one of \t{package.use}, \t{use.stable} and 
\t{package.use.stable},
+then \t{package.use.stable} takes precedence over \t{package.use}, which in 
turn takes precedence
+over \t{use.stable}.
+
+These files are supported in EAPIs as per table~\ref{tab:profile-use-stable}. 
They can be
+directories instead of regular files as per section~\ref{sec:line-stacking}.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Profile directory support for \t{use.stable} and 
\t{package.use.stable}}
+\label{tab:profile-use-stable}
+\begin{tabular}{lll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{use.stable}?}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{package.use.stable}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  & No  \\
+  9 & Yes & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \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},



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-06-08 Thread Ulrich Müller
commit: 1bbeccce36669683750301c733727400f9bfc059
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Feb 21 18:32:43 2022 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Jun  8 20:36:13 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=1bbeccce

EAPI 9 profile EAPI defaults to top-level

Bug: https://bugs.gentoo.org/806181
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  5 -
 profiles.tex | 23 +--
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 9617dc4..f6aafe7 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -32,6 +32,9 @@ have identical entries for all listed EAPIs.}
 Less strict \t{updates} syntax & \compactfeatureref{updates-filenames} &
 No & No & Yes & Yes \\
 
+Default EAPI for profiles & \compactfeatureref{profile-eapi-default} &
+0 & 0 & 0 & Top-level \\
+
 Profile files as directories & \compactfeatureref{profile-file-dirs} &
 No & Yes & Yes & Yes \\
 
@@ -352,7 +355,7 @@ EAPI 8 is EAPI 7 with the following changes:
 EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
-\item None
+\item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index fbe375e..d814c31 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -33,8 +33,27 @@ are discarded.
 A profile directory may contain an \t{eapi} file. This file, if it exists, 
must contain a single
 line with the name of an EAPI\@. This specifies the EAPI to use when handling 
the directory in
 question; a package manager must not attempt to use any profile using a 
directory which requires an
-EAPI it does not support. If no \t{eapi} file is present, EAPI 0 shall be 
used. The EAPI is neither
-inherited via the \t{parent} file nor in subdirectories.
+EAPI it does not support.
+
+\featurelabel{profile-eapi-default} If no \t{eapi} file is present, the 
default depends on the EAPI
+of the top-level profiles directory (see section~\ref{sec:profiles-dir}). That 
EAPI shall be used
+if table~\ref{tab:profile-eapi-default} lists it as ``top-level''. Otherwise, 
EAPI 0 shall be used.
+
+The EAPI is neither inherited via the \t{parent} file nor in subdirectories.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Default EAPI for profiles}
+\label{tab:profile-eapi-default}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Default EAPI?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & 0 \\
+  9 & Top-level \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \subsection{deprecated}
 If a profile contains a file named \t{deprecated}, it is treated as such. The 
first line of this



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: c09112f688157123de2ec5da99b31e0a0e81
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Feb 21 18:32:43 2022 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:11 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=c09112f6

EAPI 9 profile EAPI defaults to top-level

Bug: https://bugs.gentoo.org/806181
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 profiles.tex | 23 +--
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 4b0a0ff..0564ab4 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -32,6 +32,9 @@ have identical entries for all listed EAPIs.}
 Less strict \t{updates} syntax & \compactfeatureref{updates-filenames} &
 No & No & Yes & Yes \\
 
+Default EAPI for profiles & \compactfeatureref{profile-eapi-default} &
+0 & 0 & 0 & Top-level \\
+
 Profile files as directories & \compactfeatureref{profile-file-dirs} &
 No & Yes & Yes & Yes \\
 
@@ -353,6 +356,7 @@ EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
 \item Bash version is 5.2, \featureref{bash-version}.
+\item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/profiles.tex b/profiles.tex
index fbe375e..d814c31 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -33,8 +33,27 @@ are discarded.
 A profile directory may contain an \t{eapi} file. This file, if it exists, 
must contain a single
 line with the name of an EAPI\@. This specifies the EAPI to use when handling 
the directory in
 question; a package manager must not attempt to use any profile using a 
directory which requires an
-EAPI it does not support. If no \t{eapi} file is present, EAPI 0 shall be 
used. The EAPI is neither
-inherited via the \t{parent} file nor in subdirectories.
+EAPI it does not support.
+
+\featurelabel{profile-eapi-default} If no \t{eapi} file is present, the 
default depends on the EAPI
+of the top-level profiles directory (see section~\ref{sec:profiles-dir}). That 
EAPI shall be used
+if table~\ref{tab:profile-eapi-default} lists it as ``top-level''. Otherwise, 
EAPI 0 shall be used.
+
+The EAPI is neither inherited via the \t{parent} file nor in subdirectories.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Default EAPI for profiles}
+\label{tab:profile-eapi-default}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Default EAPI?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & 0 \\
+  9 & Top-level \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \subsection{deprecated}
 If a profile contains a file named \t{deprecated}, it is treated as such. The 
first line of this



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: 691aa893d6483d30c7f87e1fec879366e261ca8f
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:14:14 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:16 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=691aa893

EAPI 9 has edo

Bug: https://bugs.gentoo.org/744880
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 21 -
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 4f9ea29..dbd9b71 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -186,6 +186,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+\t{edo} & \compactfeatureref{edo} &
+No & No & No & Yes \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -377,6 +380,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item \t{edo}, \featureref{edo}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a49ab98..a4c59fa 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1301,21 +1301,32 @@ has returned.
 \end{algorithmic}
 \end{algorithm}
 
+\item[edo] \featurelabel{edo} Takes one or more arguments. The entire argument 
list is output
+as an informational message to stderr; individual tokens may be reformatted to 
avoid ambiguity.
+The first argument is then executed as a command, with the remaining arguments 
passed to it.
+If the command fails, \t{edo} aborts the build process using \t{die}, unless 
it was called under
+\t{nonfatal}, in which case it returns a non-zero exit status.
+
+\t{edo} must be implemented internally as a shell function. Only available in 
EAPIs listed in
+table~\ref{tab:misc-commands} as supporting \t{edo}.
+
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Misc commands for EAPIs}
 \label{tab:misc-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \toprule
   \multicolumn{1}{c}{\textbf{EAPI}} &
   \multicolumn{1}{c}{\textbf{\t{default}?}} &
   \multicolumn{1}{c}{\textbf{\t{einstalldocs}?}} &
-  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{get_libdir}?}} &
+  \multicolumn{1}{c}{\textbf{\t{edo}?}} \\
   \midrule
-  0, 1  & No  & No  & No  \\
-  2, 3, 4, 5& Yes & No  & No  \\
-  6, 7, 8, 9& Yes & Yes & Yes \\
+  0, 1  & No  & No  & No  & No  \\
+  2, 3, 4, 5& Yes & No  & No  & No  \\
+  6, 7, 8   & Yes & Yes & Yes & No  \\
+  9 & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: 89af810629ec15b741bb43bc20a26f95b6373f68
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 13 21:14:36 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:13 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=89af8106

EAPI 9: Special profile variables are no longer exported

Bug: https://bugs.gentoo.org/948001
Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex   | 10 --
 profile-variables.tex |  2 ++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 4f19d70..1e2623b 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -354,8 +354,14 @@ commands (see section~\ref{sec:pkg-mgr-commands}) in an 
implementation-defined m
 \end{tabular}
 \end{centertable}
 
-Except where otherwise noted, all variables set in the active profiles' 
\t{make.defaults} files must
-be exported to the ebuild environment. \t{CHOST}, \t{CBUILD} and \t{CTARGET}, 
if not set by
+Variables listed in section~\ref{sec:specific-profile-vars} as having specific 
meanings or special
+handling, and that are set in the active profiles' \t{make.defaults} files, 
are either exported
+to the environment or kept as unexported shell variables, as specified for 
EAPIs in
+table~\ref{tab:export-vars}. To clarify, this behaviour is governed by the 
EAPI of the ebuild,
+not that of the profile.
+
+Except where otherwise noted, all other variables set in the active profiles' 
\t{make.defaults}
+files must be exported to the environment. \t{CHOST}, \t{CBUILD} and 
\t{CTARGET}, if not set by
 profiles, must contain either an appropriate machine tuple (the definition of 
appropriate is beyond
 the scope of this specification) or be unset.
 

diff --git a/profile-variables.tex b/profile-variables.tex
index f20fde4..ddcbd3a 100644
--- a/profile-variables.tex
+++ b/profile-variables.tex
@@ -69,6 +69,8 @@ completely override those in parent profiles.
 \end{centertable}
 
 \subsection{Specific variables and their meanings}
+\label{sec:specific-profile-vars}
+
 The following variables have specific meanings when set in profiles.
 \begin{description}
 \item[ARCH] The system's architecture. Must be a value listed in 
\t{profiles/arch.list}; see



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: 71b2763075b09c2939ac385d5bf099a7c7317f18
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon May 12 18:13:01 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:14 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=71b27630

EAPI 9 bans domo

Bug: https://bugs.gentoo.org/951502
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index dadda01..36d5462 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -123,6 +123,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{assert} & \compactfeatureref{banned-commands} &
 Yes & Yes & Yes & Banned \\
 
+\t{domo} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -365,6 +368,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
+\item \t{domo} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3dfc3e1..c977d00 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -81,11 +81,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
   \multicolumn{1}{c}{\textbf{\t{hasq}}} &
-  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
+  \multicolumn{1}{c}{\textbf{\t{assert}}} &
+  \multicolumn{1}{c}{\textbf{\t{domo}}} & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
-  8   & Yes & Yes & Yes & No  & & \\
-  9   & Yes & Yes & Yes & Yes & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & No  & \\
+  8   & Yes & Yes & Yes & No  & No  & \\
+  9   & Yes & Yes & Yes & Yes & Yes & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -589,6 +590,8 @@ the current phase function has returned.
 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}.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 
 \item[dosbin] As \t{dobin}, but installs to \t{DESTTREE/sbin}.
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: 4ab9ad258c6bd38dcdcb1749f15ce7dd086a1ffd
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:13:28 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:12 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=4ab9ad25

EAPI 9: Defined variables are no longer exported

Bug: https://bugs.gentoo.org/721088
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 ebuild-env-vars.tex  | 36 +---
 ebuild-vars.tex  |  4 
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 0564ab4..75c53a0 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -69,6 +69,9 @@ Accumulate \t{PROPERTIES} & 
\compactfeatureref{accumulate-vars} &
 Accumulate \t{RESTRICT} & \compactfeatureref{accumulate-vars} &
 No & No & Yes & Yes \\
 
+Export variables & \compactfeatureref{export-vars} &
+Yes & Yes & Yes & No \\
+
 \t{PORTDIR} & \compactfeatureref{portdir} &
 Yes & No & No & No \\
 
@@ -357,6 +360,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \begin{compactitem}
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
+\item Variables no longer exported, \featureref{export-vars}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 268fa36..4f19d70 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -1,10 +1,10 @@
 \section{Defined variables}
 \label{sec:ebuild-env-vars}
 
-The package manager must define the following environment variables. Not all 
variables are
-universally meaningful; variables that are not meaningful in a given phase or 
in global scope may
-be unset or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless
-otherwise specified.
+The package manager must define the following variables. Not all variables are 
universally
+meaningful; variables that are not meaningful in a given phase or in global 
scope may be unset
+or set to any value. Ebuilds must not attempt to modify any of these 
variables, unless otherwise
+specified.
 
 Because of their special meanings, these variables may not be preserved 
consistently across all
 phases as would normally happen due to environment saving (see 
section~\ref{sec:ebuild-env-state}).
@@ -12,6 +12,26 @@ For example, \t{EBUILD_PHASE} is different for every phase, 
and \t{ROOT} may hav
 the various different \t{pkg_*} phases. Ebuilds must recalculate any variable 
they derive from an
 inconsistent variable.
 
+\featurelabel{export-vars} These variables are either exported to the 
environment or kept as
+unexported shell variables, as specified for EAPIs in 
table~\ref{tab:export-vars}; exceptions are
+\t{TMPDIR} and \t{HOME} which are always exported to the environment. In EAPIs 
where variables are
+not exported, the package manager must pass those that are required by 
ebuild-specific external
+commands (see section~\ref{sec:pkg-mgr-commands}) in an implementation-defined 
manner.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs with variables exported to the environment}
+\label{tab:export-vars}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Variables exported?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \begin{landscape}
 % Reduce width of text area to make room for margin notes
 \addtolength{\hsize}{-25mm}
@@ -168,13 +188,15 @@ inconsistent variable.
 \t{TMPDIR} &
 All &
 Partially\footnotemark[\value{footnote}] &
-Must be set to the location of a usable temporary directory, for any 
applications
-called by an ebuild. Must not be used by ebuilds directly; see \t{T} 
above. \\
+Must be set to the location of a usable temporary directory, for any 
applications called
+by an ebuild. Must not be used by ebuilds directly; see \t{T} above. 
\t{TMPDIR} is always
+exported to the environment. \\
 \t{HOME} &
 All &
 Partially\footnotemark[\value{footnote}] &
 The full path to an appropriate temporary directory for use by any 
programs invoked by the
-ebuild that may read or modify the home directory. \\
+ebuild that may read or modify the home directory. \t{HOME} is always 
exported to the
+environment. \\
 \t{EPREFIX} &
 All &
 Yes &

diff --git a/ebuild-vars.tex b/ebuild-vars.tex
index b030943..9979ce9 100644
--- a/ebuild-vars.tex
+++ b/ebuild-vars.tex
@@ -335,6 +335,10 @@ defined based upon any variant condition.}
 \end{tabular}
 \end{centertable}
 
+For EAPIs listed in table~\ref{tab:export-vars} with the property that 
variables are not exported,
+the package manager must not export any of the variables specified in this 
sectio

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: aa35851260ef7e91c0e694bab76722adab14d78f
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Jan  7 17:09:52 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:12 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=aa358512

Clarify use of the terms "export" and "environment variable"

Signed-off-by: Ulrich Müller  gentoo.org>

 ebuild-env-vars.tex  | 12 ++--
 ebuild-functions.tex | 22 +++---
 ebuild-vars.tex  |  4 ++--
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex
index 861dd48..268fa36 100644
--- a/ebuild-env-vars.tex
+++ b/ebuild-env-vars.tex
@@ -211,14 +211,14 @@ inconsistent variable.
 No &
 \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. \\
+as supporting \t{DESTTREE}\@. In all other EAPIs, this is retained as a 
conceptual variable
+inaccessible from the ebuild environment. \\
 \t{INSDESTTREE} &
 \t{src_install} &
 No &
 \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. \\
+EAPIs, this is retained as a conceptual variable inaccessible from the 
ebuild environment. \\
 \t{USE} &
 All &
 Yes &
@@ -373,11 +373,11 @@ This section discusses the handling of four variables:
 \begin{description}
 \item[IUSE] is the variable calculated from the \t{IUSE} values defined in 
ebuilds and eclasses.
 \item[IUSE_REFERENCEABLE] is a variable calculated from \t{IUSE} and a variety 
of other sources
-described below. It is purely a conceptual variable; it is not exported to 
the ebuild
+described below. It is purely a conceptual variable; it is inaccessible 
from the ebuild
 environment. Values in \t{IUSE_REFERENCEABLE} may legally be used in 
queries from other
 packages about an ebuild's state (for example, for use dependencies).
-\item[IUSE_EFFECTIVE] is another conceptual, unexported variable. Values in 
\t{IUSE_EFFECTIVE} are
-those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
+\item[IUSE_EFFECTIVE] is another conceptual, inaccessible variable. Values in 
\t{IUSE_EFFECTIVE}
+are those which an ebuild may legally use in queries about itself (for 
example, for the \t{use}
 function, and for use in dependency specification conditional blocks).
 \item[USE] is a variable calculated by the package manager and exported to the 
ebuild environment.
 \end{description}

diff --git a/ebuild-functions.tex b/ebuild-functions.tex
index 046a0a7..bf6b774 100644
--- a/ebuild-functions.tex
+++ b/ebuild-functions.tex
@@ -8,10 +8,10 @@ by the package manager as part of the build and/or install 
process. In all cases
 must provide a default implementation of these functions; unless otherwise 
stated this must be a
 no-op. All functions may assume that they have read access to all system 
libraries, binaries and
 configuration files that are accessible to normal users, as well as write 
access to the temporary
-directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} environment 
variables
+directories specified by the \t{T}, \t{TMPDIR} and \t{HOME} variables
 (see section~\ref{sec:ebuild-env-vars}). Most functions must assume only that 
they have additional
-write access to the package's working directory (the \t{WORKDIR} environment 
variable); exceptions
-are noted below.
+write access to the package's working directory (the \t{WORKDIR} variable); 
exceptions are noted
+below.
 
 The environment for functions run outside of the build sequence (that is, 
\t{pkg_config},
 \t{pkg_info}, \t{pkg_prerm} and \t{pkg_postrm}) must be the environment used 
for the build of the
@@ -400,37 +400,37 @@ src_install() {
 
 The \t{pkg_preinst} function performs any special tasks that are required 
immediately before
 merging the package to the live filesystem. It must not write outside of the 
directories specified
-by the \t{ROOT} and \t{D} environment variables.
+by the \t{ROOT} and \t{D} variables.
 
 \t{pkg_preinst} must be run with full access to all files and directories 
below that specified by
-the \t{ROOT} and \t{D} environment variables.
+the \t{ROOT} and \t{D} variables.
 
 \subsection{pkg_postinst}
 
 The \t{pkg_postinst} function performs any special tasks that are required 
immediately after
 merging the package to the live filesystem. It must not write outside of the 
directory specified
-in the \t{ROOT} environment variable.
+in the \t{ROOT} variable.
 
 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: f6df176742725c3cdfe02b08efcea109dd05053a
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:16 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f6df1767

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 19 +--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index dbd9b71..0134657 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -189,6 +189,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{edo} & \compactfeatureref{edo} &
 No & No & No & Yes \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -381,6 +384,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
 \item \t{edo}, \featureref{edo}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..e51c1b8 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,23 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link starts with \t{D} must be rewritten 
with the leading
+\t{D} removed. The package manager should issue a notice when encountering 
such a symlink.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: 729a6bda7b298d14f6d26638d0610aac43ea2317
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat May 17 06:33:24 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:17 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=729a6bda

EAPI 9 has use.stable and package.use.stable

Bug: https://bugs.gentoo.org/955833
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  7 +++
 profiles.tex | 34 ++
 2 files changed, 41 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 0134657..1099a5c 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -41,6 +41,12 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 \t{package.provided} & \compactfeatureref{package-provided} &
 Optional & No & No & No \\
 
+\t{use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
+\t{package.use.stable} & \compactfeatureref{use-stable} &
+No & No & No & Yes \\
+
 Bash version & \compactfeatureref{bash-version} &
 4.2 & 4.2 & 5.0 & 5.2 \\
 
@@ -378,6 +384,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \begin{compactitem}
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
+\item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.

diff --git a/profiles.tex b/profiles.tex
index d814c31..43b8763 100644
--- a/profiles.tex
+++ b/profiles.tex
@@ -165,6 +165,40 @@ specification, and then a space delimited list of USE 
flags to enable. A USE fla
 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.stable and package.use.stable}
+\featurelabel{use-stable} The \t{use.stable} and \t{package.use.stable} files 
may be used to
+override the default USE flags specified by \t{make.defaults}. They only apply 
to packages that
+are merged due to a stable keyword in the sense of section~\ref{sec:keywords}. 
Each line in
+\t{use.stable} contains a USE flag to enable; the \t{-flag} syntax indicates 
that the flag should
+be disabled. The \t{package.use.stable} file uses the same format as 
\t{package.use}.
+\t{USE_EXPAND} values may be enabled or disabled by using 
\t{expand_name_value}.
+
+Stable restrictions are applied exactly when the following condition holds: If 
every stable keyword
+in \t{KEYWORDS} were replaced with its tilde-prefixed counterpart (see 
section~\ref{sec:keywords}),
+then the resulting \t{KEYWORDS} setting would prevent installation of the 
package.
+
+If a flag appears in more than one of \t{package.use}, \t{use.stable} and 
\t{package.use.stable},
+then \t{package.use.stable} takes precedence over \t{package.use}, which in 
turn takes precedence
+over \t{use.stable}.
+
+These files are supported in EAPIs as per table~\ref{tab:profile-use-stable}. 
They can be
+directories instead of regular files as per section~\ref{sec:line-stacking}.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Profile directory support for \t{use.stable} and 
\t{package.use.stable}}
+\label{tab:profile-use-stable}
+\begin{tabular}{lll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{use.stable}?}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{package.use.stable}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  & No  \\
+  9 & Yes & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \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},



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: f73b0482a7b1e41049704a374550d9160e028971
Author: Ulrich Müller  gentoo  org>
AuthorDate: Tue Aug  3 16:32:47 2021 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:10 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f73b0482

Add an EAPI 9 identical to EAPI 8

Signed-off-by: Ulrich Müller  gentoo.org>

 commands.tex  |   4 +-
 dependencies.tex  |  26 -
 eapi-differences.tex  | 153 +++---
 eapis.tex |   4 +-
 ebuild-env-vars.tex   |  26 -
 ebuild-format.tex |   4 +-
 ebuild-functions.tex  |  46 +++
 ebuild-vars.tex   |  22 
 eclasses.tex  |   4 +-
 merge.tex |   6 +-
 pkg-mgr-commands.tex  | 100 -
 pms.tex   |   4 +-
 profile-variables.tex |   8 +--
 profiles.tex  |  12 ++--
 tree-layout.tex   |   8 +--
 15 files changed, 195 insertions(+), 232 deletions(-)

diff --git a/commands.tex b/commands.tex
index 2c9e594..81fd204 100644
--- a/commands.tex
+++ b/commands.tex
@@ -33,7 +33,7 @@ The following commands must always be available in the ebuild 
environment:
 table~\ref{tab:system-commands-table} as requiring GNU find.
 \end{compactitem}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{System commands for EAPIs}
 \label{tab:system-commands-table}
 \begin{tabular}{lll}
@@ -44,7 +44,7 @@ The following commands must always be available in the ebuild 
environment:
   \midrule
   0, 1, 2, 3, 4 & Undefined & Any \\
   5, 6  & Yes   & Any \\
-  7, 8  & Yes   & 2.7 \\
+  7, 8, 9   & Yes   & 2.7 \\
   \bottomrule
 \end{tabular}
 \end{centertable}

diff --git a/dependencies.tex b/dependencies.tex
index c1f7d6a..a826355 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -88,7 +88,7 @@ with the native build system (\t{CBUILD}). Ebuilds are 
allowed to call them in \
 \t{pkg_postinst}. Ebuilds may also call them in \t{pkg_prerm} and 
\t{pkg_postrm} but must not rely
 on them being available.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting additional dependency types}
 \label{tab:depend-table}
 \begin{tabular}{lll}
@@ -99,7 +99,7 @@ on them being available.
   \midrule
   0, 1, 2, 3, 4, 5, 6 & No  & No  \\
   7   & Yes & No  \\
-  8   & Yes & Yes \\
+  8, 9& Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -155,7 +155,7 @@ be surrounded on both sides by whitespace, except at the 
start and end of the st
 
 In particular, note that whitespace is not optional.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
 \label{tab:at-most-one-of-table}
 \begin{tabular}{ll}
@@ -164,7 +164,7 @@ In particular, note that whitespace is not optional.
   \multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} \\
   \midrule
   0, 1, 2, 3, 4 & No  \\
-  5, 6, 7, 8& Yes \\
+  5, 6, 7, 8, 9 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -204,7 +204,7 @@ In an exactly-one-of group, exactly one immediate child 
element must be matched.
 In EAPIs specified in table~\ref{tab:empty-dep-groups}, an empty 
exactly-one-of group counts as
 being matched.
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Matching of empty dependency groups in EAPIs}
 \label{tab:empty-dep-groups}
 \begin{tabular}{ll}
@@ -214,7 +214,7 @@ being matched.
 are matched?}} \\
   \midrule
   0, 1, 2, 3, 4, 5, 6 & Yes \\
-  7, 8& No  \\
+  7, 8, 9 & No  \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -250,7 +250,7 @@ manager must warn or error if this feature is used with an 
EAPI not supporting u
 
 \note{Order is important. The slot restriction must come before use 
dependencies.}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{Support for \t{SLOT} dependencies and sub-slots in EAPIs}
 \label{tab:slot-deps-table}
 \begin{tabular}{lll}
@@ -261,12 +261,12 @@ manager must warn or error if this feature is used with 
an EAPI not supporting u
   \midrule
   0 & No & No  \\
   1, 2, 3, 4& Named only & No  \\
-  5, 6, 7, 8& Named and operator & Yes \\
+  5, 6, 7, 8, 9 & Named and operator & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}
 
-\ChangeWhenAddingAnEAPI{8}
+\ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting \t{USE} dependencies}
 \label{tab:use-deps-table}
 \begin{tabular}{ll}
@@ -276,7 +276,7 @@ manager must warn or error if this feature is used with an 

[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: bbed4e814a4d45711598424a597f7ecb61e80ffa
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:15 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=bbed4e81

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 20 
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7ed588e..4f9ea29 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -174,6 +174,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -373,6 +376,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index a2a1935..a49ab98 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1101,20 +1101,32 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element with 
the version string.
+Returns shell true (0) if the specified relation is fulfilled for any 
element. Note that if
+\t{REPLACING_VERSIONS} is empty, shell false (1) is returned.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: 3e6ea5b25374ea8cd603c4300eabb9869033b68f
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:06:26 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:15 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=3e6ea5b2

EAPI 9 has pipestatus

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 19 +++
 2 files changed, 23 insertions(+)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 36d5462..7ed588e 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -138,6 +138,9 @@ Output commands use stdout & 
\compactfeatureref{output-no-stdout} &
 \t{die} in subshell & \compactfeatureref{subshell-die} &
 No & Yes & Yes & Yes \\
 
+\t{pipestatus} & \compactfeatureref{pipestatus} &
+No & No & No & Yes \\
+
 \t{econf -{}-datarootdir} & \compactfeatureref{econf-options} &
 No & No & Yes & Yes \\
 
@@ -369,6 +372,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{domo} banned, \featureref{banned-commands}.
+\item \t{pipestatus}, \featureref{pipestatus}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index c977d00..a2a1935 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -206,6 +206,11 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 failure), calls \t{die}, passing any parameters to it.
 In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
 section~\ref{sec:banned-commands}.
+\item[pipestatus] \featurelabel{pipestatus} Checks the shell's pipe status 
array, i.\,e.\ the exit
+status of the command(s) in the most recently executed foreground 
pipeline. Returns shell true
+(0) if all elements are zero, or the last non-zero element otherwise. If 
called with \t{-v}
+as the first argument, also outputs the pipe status array as a 
space-separated list.
+Only available in EAPIs listed in table~\ref{tab:pipestatus} as supporting 
\t{pipestatus}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
@@ -224,6 +229,20 @@ completing. Ebuilds must not run any of these commands 
once the current phase fu
 \end{tabular}
 \end{centertable}
 
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{EAPIs supporting \t{pipestatus}}
+\label{tab:pipestatus}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Supports \t{pipestatus}?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & No  \\
+  9 & Yes \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
+
 \subsection{Patch commands}
 These commands are used during the \t{src_prepare} phase to apply patches to 
the package's sources.
 Ebuilds must not run any of these commands once the current phase function has 
returned.



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: a2a026d77fd34d33311b408e175d7fe46865674c
Author: Ulrich Müller  gentoo  org>
AuthorDate: Fri Nov 29 16:02:56 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:13 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=a2a026d7

EAPI 9 bans assert

Bug: https://bugs.gentoo.org/566342
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 10 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 75c53a0..dadda01 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -120,6 +120,9 @@ GNU \t{patch} version & \compactfeatureref{gnu-patch} &
 \t{hasq} & \compactfeatureref{banned-commands} &
 Yes & Yes & Banned & Banned \\
 
+\t{assert} & \compactfeatureref{banned-commands} &
+Yes & Yes & Yes & Banned \\
+
 Query command options & \compactfeatureref{pm-query-options} &
 \t{-{}-host-root} & \t{-b}, \t{-d}, \t{-r} & \t{-b}, \t{-d}, \t{-r} & 
\t{-b}, \t{-d}, \t{-r} \\
 
@@ -361,6 +364,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Bash version is 5.2, \featureref{bash-version}.
 \item Different default EAPI for profiles, \featureref{profile-eapi-default}.
 \item Variables no longer exported, \featureref{export-vars}.
+\item \t{assert} banned, \featureref{banned-commands}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 878d1eb..3dfc3e1 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -80,10 +80,12 @@ called, the package manager must abort the build process 
indicating an error.
   \multicolumn{1}{c}{} &
   \multicolumn{1}{c}{\textbf{\t{useq}}} &
   \multicolumn{1}{c}{\textbf{\t{hasv}}} &
-  \multicolumn{1}{c}{\textbf{\t{hasq}}} & & & \\
+  \multicolumn{1}{c}{\textbf{\t{hasq}}} &
+  \multicolumn{1}{c}{\textbf{\t{assert}}} & & \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & & & \\
-  8, 9& Yes & Yes & Yes & & & \\
+  0, 1, 2, 3, 4, 5, 6, 7  & No  & No  & No  & No  & & \\
+  8   & Yes & Yes & Yes & No  & & \\
+  9   & Yes & Yes & Yes & Yes & & \\
   \bottomrule
 \end{tabular}
 \end{centertable}
@@ -201,6 +203,8 @@ completing. Ebuilds must not run any of these commands once 
the current phase fu
 environment.
 \item[assert] Checks the shell's pipe status array, and if any element is 
non-zero (indicating
 failure), calls \t{die}, passing any parameters to it.
+In EAPIs listed in table~\ref{tab:banned-commands-table}, this command is 
banned as per
+section~\ref{sec:banned-commands}.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-05-25 Thread Ulrich Müller
commit: 780b628d548ab66703c99ff15288a52d2866d3c5
Author: Ulrich Müller  gentoo  org>
AuthorDate: Sat Jan 11 09:47:19 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun May 25 16:46:11 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=780b628d

EAPI 9: Bash version is 5.2

Bug: https://bugs.gentoo.org/946193
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex | 4 ++--
 ebuild-format.tex| 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 9617dc4..4b0a0ff 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -39,7 +39,7 @@ Profile files as directories & 
\compactfeatureref{profile-file-dirs} &
 Optional & No & No & No \\
 
 Bash version & \compactfeatureref{bash-version} &
-4.2 & 4.2 & 5.0 & 5.0 \\
+4.2 & 4.2 & 5.0 & 5.2 \\
 
 Selective URI restrictions & \compactfeatureref{uri-restrict} &
 No & No & Yes & Yes \\
@@ -352,7 +352,7 @@ EAPI 8 is EAPI 7 with the following changes:
 EAPI 9 is EAPI 8 with the following changes:
 
 \begin{compactitem}
-\item None
+\item Bash version is 5.2, \featureref{bash-version}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/ebuild-format.tex b/ebuild-format.tex
index 844f01a..a543013 100644
--- a/ebuild-format.tex
+++ b/ebuild-format.tex
@@ -32,7 +32,8 @@ output or standard error, or modify the state of the system 
in any way.
   \midrule
   0, 1, 2, 3, 4, 5  & 3.2 & No  \\
   6, 7  & 4.2 & Yes \\
-  8, 9  & 5.0 & Yes \\
+  8 & 5.0 & Yes \\
+  9 & 5.2 & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-02-09 Thread Ulrich Müller
commit: 4239e994451721a394c375d68aca1dc04756ca2d
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Feb  9 20:34:12 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=4239e994

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 19 +--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 75e80f0..1f08e66 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -183,6 +183,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -373,6 +376,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
 \item \t{ver_replacing}, \featureref{ver-replacing}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..e51c1b8 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,23 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link starts with \t{D} must be rewritten 
with the leading
+\t{D} removed. The package manager should issue a notice when encountering 
such a symlink.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-02-09 Thread Ulrich Müller
commit: 1f6b1818a65d83ab6703ff2be6751ab4beaaf8df
Author: Ulrich Müller  gentoo  org>
AuthorDate: Mon Jan 20 13:21:44 2025 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Sun Feb  9 20:33:54 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=1f6b1818

EAPI 9 has ver_replacing

Bug: https://bugs.gentoo.org/947530
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 pkg-mgr-commands.tex | 20 
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7b978ea..75e80f0 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -171,6 +171,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{ver_*} commands & \compactfeatureref{ver-commands} &
 No & Yes & Yes & Yes \\
 
+\t{ver_replacing} & \compactfeatureref{ver-replacing} &
+No & No & No & Yes \\
+
 \t{unpack} support for \t{7z} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
@@ -369,6 +372,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item \t{ver_replacing}, \featureref{ver-replacing}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex
index 3c03f0b..bff6346 100644
--- a/pkg-mgr-commands.tex
+++ b/pkg-mgr-commands.tex
@@ -1098,20 +1098,32 @@ the second, inclusively.
 
 Both version strings must conform to the version specification in
 section~\ref{sec:version-spec}. Comparison is done using 
algorithm~\ref{alg:version-comparison}.
+
+\item[ver_replacing] \featurelabel{ver-replacing} Takes an operator and a 
version string as
+arguments, which follow the same specification as in \t{ver_test}. 
Iterates over the elements
+of \t{REPLACING_VERSIONS}, using \t{ver_test} to compare each element with 
the version string.
+Returns shell true (0) if the specified relation is fulfilled for any 
element. Note that if
+\t{REPLACING_VERSIONS} is empty, shell false (1) is returned.
+
+Only available in EAPIs listed in table~\ref{tab:version-commands} as 
supporting
+\t{ver_replacing}. The command is only meaningful in phases where 
\t{REPLACING_VERSIONS} is
+defined.
 \end{description}
 
 \ChangeWhenAddingAnEAPI{9}
 \begin{centertable}{EAPIs supporting version manipulation commands}
 \label{tab:version-commands}
-\begin{tabular}{}
+\begin{tabular}{l}
   \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}?}} \\
+  \multicolumn{1}{c}{\textbf{\t{ver_test}?}} &
+  \multicolumn{1}{c}{\textbf{\t{ver_replacing}?}} \\
   \midrule
-  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  \\
-  7, 8, 9 & Yes & Yes & Yes \\
+  0, 1, 2, 3, 4, 5, 6 & No  & No  & No  & No  \\
+  7, 8& Yes & Yes & Yes & No  \\
+  9   & Yes & Yes & Yes & Yes \\
   \bottomrule
 \end{tabular}
 \end{centertable}



[gentoo-commits] proj/pms:eapi-9 commit in: /

2025-01-18 Thread Ulrich Müller
commit: 401b761224ed47d1930b0776af6fe05abe385239
Author: Ulrich Müller  gentoo  org>
AuthorDate: Thu Jun 20 18:16:12 2024 +
Commit: Ulrich Müller  gentoo  org>
CommitDate: Fri Jan 17 18:40:42 2025 +
URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=401b7612

EAPI 9 no longer rewrites absolute symlinks

Bug: https://bugs.gentoo.org/934514
Signed-off-by: Ulrich Müller  gentoo.org>

 eapi-differences.tex |  4 
 merge.tex| 19 +--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/eapi-differences.tex b/eapi-differences.tex
index 7b978ea..96ca568 100644
--- a/eapi-differences.tex
+++ b/eapi-differences.tex
@@ -180,6 +180,9 @@ Controllable stripping & \compactfeatureref{dostrip} &
 \t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
 Yes & Yes & No & No \\
 
+Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
+Yes & Yes & Yes & No \\
+
 \end{longtable}
 
 \chapter{Differences between EAPIs}
@@ -369,6 +372,7 @@ EAPI 9 is EAPI 8 with the following changes:
 \item Variables no longer exported, \featureref{export-vars}.
 \item \t{assert} banned, \featureref{banned-commands}.
 \item \t{pipestatus}, \featureref{pipestatus}.
+\item Absolute symlinks no longer rewritten, \featureref{symlink-rewrite}.
 \end{compactitem}
 
 \ChangeWhenAddingAnEAPI{9}

diff --git a/merge.tex b/merge.tex
index 27b0ba8..e51c1b8 100644
--- a/merge.tex
+++ b/merge.tex
@@ -138,8 +138,23 @@ Ebuilds must not attempt to merge a symlink on top of a 
directory.
 
 \subsection{Rewriting}
 
-Any absolute symlink whose link starts with \t{D} must be rewritten with the 
leading \t{D} removed.
-The package manager should issue a notice when doing this.
+\featurelabel{symlink-rewrite} In EAPIs listed in 
table~\ref{tab:symlink-rewrite} as rewriting
+symlinks, any absolute symlink whose link starts with \t{D} must be rewritten 
with the leading
+\t{D} removed. The package manager should issue a notice when encountering 
such a symlink.
+
+\ChangeWhenAddingAnEAPI{9}
+\begin{centertable}{Rewriting of absolute symlinks}
+\label{tab:symlink-rewrite}
+\begin{tabular}{ll}
+  \toprule
+  \multicolumn{1}{c}{\textbf{EAPI}} &
+  \multicolumn{1}{c}{\textbf{Rewrite symlinks?}} \\
+  \midrule
+  0, 1, 2, 3, 4, 5, 6, 7, 8 & Yes \\
+  9 & No  \\
+  \bottomrule
+\end{tabular}
+\end{centertable}
 
 \section{Hard links}
 



  1   2   3   >