commit: 153324136107543ef07b1378f08bce81199a9022 Author: Ulrich Müller <ulm <AT> gentoo <DOT> org> AuthorDate: Mon Aug 30 19:32:16 2021 +0000 Commit: Ulrich Müller <ulm <AT> gentoo <DOT> org> CommitDate: Tue Aug 31 16:05:50 2021 +0000 URL: https://gitweb.gentoo.org/proj/pms.git/commit/?id=15332413
pkg-mgr-commands.tex: Clarify which commands are allowed in global scope For most commands this is already implied by the combination of the statements "When an ebuild is being sourced for metadata querying rather than for a build [...], no external command may be executed." in chapter 12 ("Available Commands") and "Except where otherwise noted, they may be internal [...] or external commands available in PATH; where this is not specified, ebuilds may not rely upon either behaviour." in section 12.3 ("Ebuild-specific Commands"). For output commands (einfo etc.) and debug commands (debug-print etc.) to be allowed in global scope, they must be implemented as shell functions. Specify this, which follows the implementation in all three package managers. Closes: https://bugs.gentoo.org/520528 Signed-off-by: Ulrich Müller <ulm <AT> gentoo.org> pkg-mgr-commands.tex | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/pkg-mgr-commands.tex b/pkg-mgr-commands.tex index 331cd33..ebb4b7e 100644 --- a/pkg-mgr-commands.tex +++ b/pkg-mgr-commands.tex @@ -4,7 +4,8 @@ The following commands will always be available in the ebuild environment, provided by the package manager. Except where otherwise noted, they may be internal (shell functions or aliases) or external commands available in \t{PATH}; where this is not specified, ebuilds may not rely upon either -behaviour. +behaviour. Unless otherwise specified, it is an error if an ebuild calls any of these commands in +global scope. Unless otherwise noted, any output of these commands ends with a newline. @@ -142,8 +143,9 @@ are given, \t{-r} is assumed. These commands display messages to the user. Unless otherwise stated, the entire argument list is used as a message, with backslash-escaped characters interpreted as for the \t{echo -e} command of bash, notably \t{\textbackslash t} for a horizontal tab, \t{\textbackslash n} for a new line, and -\t{\textbackslash\textbackslash} for a literal backslash. Ebuilds must not run any of these commands -once the current phase function has returned. +\t{\textbackslash\textbackslash} for a literal backslash. These commands must be implemented +internally as shell functions and may be called in global scope. Ebuilds must not run any of these +commands once the current phase function has returned. \featurelabel{output-no-stdout} Unless otherwise noted, output may be sent to stderr or some other appropriate facility. In EAPIs listed in table~\ref{tab:output-commands} as not allowing stdout @@ -927,8 +929,7 @@ any of these functions from any other phase. \subsection{USE list functions} These functions provide behaviour based upon set or unset use flags. Ebuilds must not run any of -these commands once the current phase function has returned. It is an error if an ebuild calls any -of these functions in global scope. +these commands once the current phase function has returned. Unless otherwise noted, if any of these functions is called with a flag value that is not included in \t{IUSE_EFFECTIVE}, either behaviour is undefined or it is an error as decided by @@ -1016,7 +1017,8 @@ table~\ref{tab:use-list-strictness}. \end{centertable} \subsection{Text list functions} -These functions check a list of arguments for a particular value. +These functions check a list of arguments for a particular value. They must be implemented +internally as shell functions and may be called in global scope. \nobreakpar \begin{description} \item[has] Returns shell true (0) if the first argument (a word) is found in the list of subsequent @@ -1261,8 +1263,9 @@ has returned. \end{algorithm} \item[get_libdir] \featurelabel{get-libdir} Prints the libdir name obtained according to - algorithm~\ref{alg:get-libdir}. Must be implemented internally as a shell function. - Only available in EAPIs listed in table~\ref{tab:misc-commands} as supporting \t{get_libdir}. + algorithm~\ref{alg:get-libdir}. Must be implemented internally as a shell function and may be + called in global scope. Only available in EAPIs listed in table~\ref{tab:misc-commands} as + supporting \t{get_libdir}. \begin{algorithm} \caption{\t{get_libdir} logic} \label{alg:get-libdir} @@ -1300,6 +1303,7 @@ has returned. \subsection{Debug commands} The following commands are available for debugging. Normally all of these commands should be no ops; a package manager may provide a special debug mode where these commands instead do something. +These commands must be implemented internally as shell functions and may be called in global scope. Ebuilds must not run any of these commands once the current phase function has returned. \begin{description}