\section{The state of the system between functions}
\label{sec:ebuild-env-invariancy}

For the sake of this section:

\begin{compactitem}
\item Variancy is any package manager action that modifies either
    \t{ROOT} or \t{/} in any way that isn't merely a simple addition of
    something that doesn't alter other packages. This includes any
    non-default call to any \t{pkg} phase function except \t{pkg\_setup},
    a merge of any package or an unmerge of any package.
\item As an exception, changes to \t{DISTDIR} do not count as variancy.
\item The \t{pkg\_setup} function may be assumed not to introduce variancy.
    Thus, ebuilds must not perform variant actions in this phase.
\end{compactitem}

The following exclusivity and invariancy requirements are mandated:

\begin{compactitem}
\item No variancy shall be introduced at any point between a package's
    \t{pkg\_setup} being started up to the point that that package is
    merged, except for any variancy introduced by that package.
\item There must be no variancy between a package's \t{pkg\_setup} and
    a package's \t{pkg\_postinst}, except for any variancy introduced
    by that package.
\item Any non-default \t{pkg} phase function must be run exclusively.
\item Each phase function must be called at most once during the build
    process for any given package.
\end{compactitem}

% vim: set filetype=tex fileencoding=utf8 et tw=100 spell spelllang=en :

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "pms"
%%% LaTeX-indent-level: 4
%%% LaTeX-item-indent: 0
%%% TeX-brace-indent-level: 4
%%% fill-column: 100
%%% End:
