[gentoo-commits] proj/pms:eapi-9 commit in: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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: /
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}
[gentoo-commits] proj/pms:eapi-9 commit in: /
commit: f51660247b5209b70fcd00dc3802568baeb7b56e Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:02:56 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Fri Jan 17 18:40:41 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f5166024 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: /
commit: 5f8cb251f4955880cafc0b0d844bf913a395a4e6 Author: Ulrich Müller gentoo org> AuthorDate: Tue Aug 3 16:32:47 2021 + Commit: Ulrich Müller gentoo org> CommitDate: Fri Jan 17 18:40:38 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=5f8cb251 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: /
commit: 8596541988b19918c9279c99217dc876a8f73d02 Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:06:26 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=85965419 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 dadda01..7b978ea 100644 --- a/eapi-differences.tex +++ b/eapi-differences.tex @@ -135,6 +135,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 \\ @@ -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{pipestatus}, \featureref{pipestatus}. \end{compactitem} \ChangeWhenAddingAnEAPI{9} diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex index 3dfc3e1..3c03f0b 100644 --- a/pkg-mgr-commands.tex +++ b/pkg-mgr-commands.tex @@ -205,6 +205,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} @@ -223,6 +228,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: /
commit: acea2cfd7dafb779efab56de0bbf09343c512c91 Author: Ulrich Müller gentoo org> AuthorDate: Sat Jan 11 09:47:19 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Fri Jan 17 18:40:39 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=acea2cfd 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: /
commit: 8fe34da2ffaebeebd9ae679b92e352e66ba01553 Author: Ulrich Müller gentoo org> AuthorDate: Mon Feb 21 18:32:43 2022 + Commit: Ulrich Müller gentoo org> CommitDate: Fri Jan 17 18:40:39 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=8fe34da2 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 c836f08..9d00c14 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: /
commit: 11ec011abe0ef7b2dbc9f0fe77a03abcc6e4664a Author: Ulrich Müller gentoo org> AuthorDate: Mon Jan 13 21:14:36 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Fri Jan 17 18:40:41 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=11ec011a 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: /
commit: 826681e69791946e9dd7c8e3b669c6c89db5fb45 Author: Ulrich Müller gentoo org> AuthorDate: Tue Jan 7 17:09:52 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Fri Jan 17 18:40:40 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=826681e6 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: /
commit: c930e83595b6e9dc05341418e92efaf8b82a5020 Author: Ulrich Müller gentoo org> AuthorDate: Tue Jan 7 17:13:28 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Fri Jan 17 18:40:40 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=c930e835 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: /
commit: eea42d4a949e0ea378c79fc27334604438e9d21a Author: Ulrich Müller gentoo org> AuthorDate: Tue Jan 7 17:09:52 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:44 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=eea42d4a 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: /
commit: 57a22fdc8e3acb701e5a4aa4a95d6f04c5de1c5a Author: Ulrich Müller gentoo org> AuthorDate: Thu Jun 20 18:16:12 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:46 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=57a22fdc 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 b0fac03..a9e8285 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 Defined 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}
[gentoo-commits] proj/pms:eapi-9 commit in: /
commit: 6766b4068f60f97f0d2e937bc8dc0574e9d4d19f Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:02:56 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:45 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=6766b406 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 df04ff9..4624259 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 Defined 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: /
commit: d6ab2a1bb6972b81669c45ce1d6b6536c16cada4 Author: Ulrich Müller gentoo org> AuthorDate: Mon Feb 21 18:32:43 2022 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:43 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=d6ab2a1b 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 c836f08..9d00c14 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: /
commit: 9019f2f6434aa7ed21f653324e0613d20b957926 Author: Ulrich Müller gentoo org> AuthorDate: Sat Jan 11 09:47:19 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:43 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=9019f2f6 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: /
commit: 95ee9439b7b04f802ffdd39255d0a854ac50f0f0 Author: Ulrich Müller gentoo org> AuthorDate: Tue Jan 7 17:13:28 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:44 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=95ee9439 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..df04ff9 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 Defined 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
[gentoo-commits] proj/pms:eapi-9 commit in: /
commit: bffede0edfd863a932c9f15bb0fe14fe3e63c9fa Author: Ulrich Müller gentoo org> AuthorDate: Tue Aug 3 16:32:47 2021 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:42 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=bffede0e 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: /
commit: 6da1edc1478571c766387385280db8fc7baf3053 Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:06:26 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Mon Jan 13 17:21:45 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=6da1edc1 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 4624259..b0fac03 100644 --- a/eapi-differences.tex +++ b/eapi-differences.tex @@ -135,6 +135,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 \\ @@ -365,6 +368,7 @@ EAPI 9 is EAPI 8 with the following changes: \item Different default EAPI for profiles, \featureref{profile-eapi-default}. \item Defined variables no longer exported, \featureref{export-vars}. \item \t{assert} 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 3dfc3e1..3c03f0b 100644 --- a/pkg-mgr-commands.tex +++ b/pkg-mgr-commands.tex @@ -205,6 +205,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} @@ -223,6 +228,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: /
commit: 056d5a841967d32a1019c07f467cedbfab2ef591 Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:06:26 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Sun Jan 12 20:09:48 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=056d5a84 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 4624259..b0fac03 100644 --- a/eapi-differences.tex +++ b/eapi-differences.tex @@ -135,6 +135,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 \\ @@ -365,6 +368,7 @@ EAPI 9 is EAPI 8 with the following changes: \item Different default EAPI for profiles, \featureref{profile-eapi-default}. \item Defined variables no longer exported, \featureref{export-vars}. \item \t{assert} 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 3dfc3e1..3c03f0b 100644 --- a/pkg-mgr-commands.tex +++ b/pkg-mgr-commands.tex @@ -205,6 +205,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} @@ -223,6 +228,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: /
commit: b41c2378f40f13385afc080fcd10031f2eac3c8f Author: Ulrich Müller gentoo org> AuthorDate: Tue Jan 7 17:13:28 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Sun Jan 12 20:09:31 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=b41c2378 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..df04ff9 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 Defined variables no longer exported, \featureref{export-vars}. \end{compactitem} \ChangeWhenAddingAnEAPI{9} diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex index 871a0d2..14ef7bc 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
[gentoo-commits] proj/pms:eapi-9 commit in: /
commit: 2a084304f28bc0e28ee9e4e64ea089096d490f3e Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:02:56 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Sun Jan 12 20:09:46 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=2a084304 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 df04ff9..4624259 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 Defined 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: /
commit: ba6cfc89e310482fa367e9360a6b0ec3d55798fc Author: Ulrich Müller gentoo org> AuthorDate: Sat Jan 11 09:47:19 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Sun Jan 12 20:08:46 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=ba6cfc89 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: /
commit: f077230159097f648d85c8cefd06e7853417e768 Author: Ulrich Müller gentoo org> AuthorDate: Thu Jun 20 18:16:12 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Sun Jan 12 20:09:49 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=f0772301 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 b0fac03..a9e8285 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 Defined 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}
[gentoo-commits] proj/pms:eapi-9 commit in: /
commit: 5689a1da0ae6aee34d616372ce578f15c702070e Author: Ulrich Müller gentoo org> AuthorDate: Tue Jan 7 17:09:52 2025 + Commit: Ulrich Müller gentoo org> CommitDate: Sun Jan 12 20:09:10 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=5689a1da Clarify use of the terms "export" and "environment variable" Signed-off-by: Ulrich Müller gentoo.org> ebuild-env-vars.tex | 6 +++--- ebuild-functions.tex | 22 +++--- ebuild-vars.tex | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ebuild-env-vars.tex b/ebuild-env-vars.tex index 0fcf457..871a0d2 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 & 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. \t{pkg_postinst}, like, \t{pkg_preinst}, must be run with full access to all files and directories -below that specified by the \t{ROOT} environment variable. +below that specified by the \t{ROOT} variable. \subsection{pkg_prerm} The \t{pkg_prerm} function performs any special tasks that are required immediately before unmerging the package from the live filesystem. It must not write outside of the directory specified -by the \t{ROOT} environment variable. +by the \t{ROOT} variable. \t{pkg_prerm} must be run with full access to all files and directories below that specified by -the \t{ROOT} environment variable. +the \t{ROOT} variable. \subsection{pkg_postrm} The \t{pkg_postrm} function performs any special tasks that are required immediately after unmerging the package from the live filesystem. It must not write outside of the directory specified -by the \t{ROOT} environment variable. +by the \t{ROOT} variable. \t{pkg_postrm} must be run with full access to all files and directories below that specified by -the \t{ROOT} environment variable. +the \t{ROOT} variable. \subsection{pkg_config} diff --git a/ebuild-vars.tex b/ebuild-vars.tex index 561eb0c..b030943 100644 --- a/ebuild-vars.tex +++ b/ebuild-vars.t
[gentoo-commits] proj/pms:eapi-9 commit in: /
commit: 627cd45184e23a2fa42f7c694a35c7dbb6daf70d Author: Ulrich Müller gentoo org> AuthorDate: Mon Feb 21 18:32:43 2022 + Commit: Ulrich Müller gentoo org> CommitDate: Sun Jan 12 20:09:08 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=627cd451 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 c836f08..9d00c14 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: /
commit: cb58851f3e50fad7fd42e51bd2343f72f4938f49 Author: Ulrich Müller gentoo org> AuthorDate: Thu Jun 20 18:16:12 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Thu Jan 9 17:40:00 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=cb58851f 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 fcaac92..c8f8a44 100644 --- a/eapi-differences.tex +++ b/eapi-differences.tex @@ -177,6 +177,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} @@ -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{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}
[gentoo-commits] proj/pms:eapi-9 commit in: /
commit: 2952d564b17649ceebc190a3c8a20070666cf0a6 Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:02:56 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Thu Jan 9 17:39:59 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=2952d564 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 f6aafe7..22029db 100644 --- a/eapi-differences.tex +++ b/eapi-differences.tex @@ -117,6 +117,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} \\ @@ -356,6 +359,7 @@ EAPI 9 is EAPI 8 with the following changes: \begin{compactitem} \item Different default EAPI for profiles, \featureref{profile-eapi-default}. +\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: /
commit: 35c7266c696196b06977091acc67c9c630f3c390 Author: Ulrich Müller gentoo org> AuthorDate: Tue Aug 3 16:32:47 2021 + Commit: Ulrich Müller gentoo org> CommitDate: Thu Jan 9 17:39:58 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=35c7266c 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: /
commit: 5e5a33ea6b683c91be508eecd7a434062f09d703 Author: Ulrich Müller gentoo org> AuthorDate: Fri Nov 29 16:06:26 2024 + Commit: Ulrich Müller gentoo org> CommitDate: Thu Jan 9 17:40:00 2025 + URL:https://gitweb.gentoo.org/proj/pms.git/commit/?id=5e5a33ea 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 22029db..fcaac92 100644 --- a/eapi-differences.tex +++ b/eapi-differences.tex @@ -132,6 +132,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 \\ @@ -360,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{assert} 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 3dfc3e1..3c03f0b 100644 --- a/pkg-mgr-commands.tex +++ b/pkg-mgr-commands.tex @@ -205,6 +205,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} @@ -223,6 +228,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.