\chapter{Feature availability by EAPI}

\note{This chapter is informative and for convenience only. Refer to the main text for specifics.
For lack of space, EAPIs 0 to~5 have been omitted from the table below, as well as items that would
have identical entries for all listed EAPIs.}

\ChangeWhenAddingAnEAPI{9}
\begin{longtable}{llllll}
\caption{Features in EAPIs}\\
\toprule
\multicolumn{1}{c}{\textbf{Feature}} &
\multicolumn{1}{c}{\textbf{Ref.}} &
\multicolumn{4}{c}{\textbf{EAPIs}} \\
& & 6 & 7 & 8 & 9 \\
\midrule
\endfirsthead
\midrule
\multicolumn{1}{c}{\textbf{Feature}} &
\multicolumn{1}{c}{\textbf{Ref.}} &
\multicolumn{4}{c}{\textbf{EAPIs}} \\
& & 6 & 7 & 8 & 9 \\
\midrule
\endhead
\midrule
\endfoot
\bottomrule
\endlastfoot

\t{package.mask} directory & \compactfeatureref{package-mask-dir} &
    No & Yes & Yes & Yes \\

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 \\

\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.3 \\

Selective URI restrictions & \compactfeatureref{uri-restrict} &
    No & No & Yes & Yes \\

\t{BDEPEND} & \compactfeatureref{bdepend} &
    No & Yes & Yes & Yes \\

\t{IDEPEND} & \compactfeatureref{idepend} &
    No & No & Yes & Yes \\

Empty \t{||}, \t{\textasciicircum\textasciicircum} groups match &
    \compactfeatureref{empty-dep-groups} &
    Yes & No & No & No \\

Working dir in \t{pkg_*} phases & \compactfeatureref{phase-function-dir} &
    Any & Any & Empty & Empty \\

\t{src_prepare} style & \compactfeatureref{src-prepare} &
    6 & 6 & 8 & 8 \\

Accumulate \t{PROPERTIES} & \compactfeatureref{accumulate-vars} &
    No & No & Yes & Yes \\

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 \\

\t{ECLASSDIR} & \compactfeatureref{eclassdir} &
    Yes & No & No & No \\

\t{SYSROOT}, \t{ESYSROOT} & \compactfeatureref{sysroot} &
    No & Yes & Yes & Yes \\

\t{BROOT} & \compactfeatureref{broot} &
    No & Yes & Yes & Yes \\

\t{DESTTREE} & \compactfeatureref{desttree} &
    Yes & No & No & No \\

\t{INSDESTTREE} & \compactfeatureref{insdesttree} &
    Yes & No & No & No \\

\t{ENV_UNSET} & \compactfeatureref{env-unset} &
    No & Yes & Yes & Yes \\

Trailing slash in \t{D} etc. & \compactfeatureref{trailing-slash} &
    Yes & No & No & No \\

GNU \t{patch} version & \compactfeatureref{gnu-patch} &
    Any & 2.7 & 2.7 & 2.7 \\

\t{nonfatal} function / external & \compactfeatureref{nonfatal} &
    No & Yes & Yes & Yes \\

\t{dohtml} & \compactfeatureref{banned-commands} &
    Yes & Banned & Banned & Banned \\

\t{dolib} & \compactfeatureref{banned-commands} &
    Yes & Banned & Banned & Banned \\

\t{libopts} & \compactfeatureref{banned-commands} &
    Yes & Banned & Banned & Banned \\

\t{useq} & \compactfeatureref{banned-commands} &
    Yes & Yes & Banned & Banned \\

\t{hasv} & \compactfeatureref{banned-commands} &
    Yes & Yes & Banned & Banned \\

\t{hasq} & \compactfeatureref{banned-commands} &
    Yes & Yes & Banned & Banned \\

\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} \\

Output commands use stdout & \compactfeatureref{output-no-stdout} &
    Yes & No & No & No \\

\t{eqawarn} & \compactfeatureref{eqawarn} &
    No & Yes & Yes & Yes \\

\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 \\

\t{econf -{}-with-sysroot} & \compactfeatureref{econf-options} &
    No & Yes & Yes & Yes \\

\t{econf -{}-disable-static} & \compactfeatureref{econf-options} &
    No & No & Yes & Yes \\

\t{domo} destination path & \compactfeatureref{domo-path} &
    \t{\$\{DESTTREE\}} & \t{/usr} & \t{/usr} & \t{/usr} \\

\t{dosym -r} & \compactfeatureref{dosym-relative} &
    No & No & Yes & Yes \\

\t{insopts} affects misc.\ cmds & \compactfeatureref{insopts} &
    Yes & Yes & No & No \\

\t{exeopts} affects \t{doinitd} & \compactfeatureref{exeopts} &
    Yes & Yes & No & No \\

Controllable stripping & \compactfeatureref{dostrip} &
    No & Yes & Yes & Yes \\

\t{dostrip} & \compactfeatureref{dostrip} &
    No & Yes & Yes & Yes \\

\t{usev} second arg & \compactfeatureref{usev} &
    No & No & Yes & Yes \\

\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 \\

\t{unpack} support for \t{lha} & \compactfeatureref{unpack-extensions} &
    Yes & Yes & No & No \\

\t{unpack} support for \t{rar} & \compactfeatureref{unpack-extensions} &
    Yes & Yes & No & No \\

\t{edo} & \compactfeatureref{edo} &
    No & No & No & Yes \\

Absolute symlink rewriting & \compactfeatureref{symlink-rewrite} &
    Yes & Yes & Yes & No \\

\end{longtable}

\chapter{Differences between EAPIs}

\note{This chapter is informative and for convenience only. Refer to the main text for specifics.}

\section*{EAPI 0}

EAPI 0 is the base EAPI.

\section*{EAPI 1}

EAPI 1 is EAPI 0 with the following changes:

\begin{compactitem}
\item \t{IUSE} defaults, \featureref{iuse-defaults}.
\item Slot dependencies, \featureref{slot-deps}.
\item Different \t{src_compile} implementation, \featureref{src-compile}.
\end{compactitem}

\section*{EAPI 2}

EAPI 2 is EAPI 1 with the following changes:

\begin{compactitem}
\item \t{SRC_URI} arrows, \featureref{src-uri-arrows}.
\item Use dependencies, \featureref{use-deps}.
\item \t{!}\ and \t{!!}\ blockers, \featureref{bang-strength}.
\item \t{src_prepare}, \featureref{src-prepare}.
\item \t{src_configure}, \featureref{src-configure}.
\item Different \t{src_compile} implementation, \featureref{src-compile}.
\item \t{default_} phase functions for phases \t{pkg_nofetch}, \t{src_unpack}, \t{src_prepare},
    \t{src_configure}, \t{src_compile} and \t{src_test}; \featureref{default-phase-funcs}.
\item \t{doman} language detection by filename, \featureref{doman-langs}.
\item \t{default} function, \featureref{default-func}.
\end{compactitem}

\section*{EAPI 3}

EAPI 3 is EAPI 2 with the following changes:
\begin{compactitem}
\item Offset-prefix support by definition of \t{EPREFIX}, \t{ED} and \t{EROOT},
    \featureref{offset-prefix-vars}.
\item \t{unpack} supports \t{.xz} and \t{.tar.xz}, \featureref{unpack-extensions}.
\item File modification times are preserved, \featureref{mtime-preserve}.
\end{compactitem}

\section*{EAPI 4}

EAPI 4 is EAPI 3 with the following changes:

\begin{compactitem}
\item \t{REQUIRED_USE}, \featureref{required-use}.
\item \t{PROPERTIES} support is mandatory, \featureref{properties}.
\item \t{RDEPEND=DEPEND} no longer done, \featureref{rdepend-depend}.
\item \t{DEFINED_PHASES} support is mandatory, \featureref{defined-phases}.
\item Use dependency defaults, \featureref{use-dep-defaults}.
\item \t{S} to \t{WORKDIR} fallback restricted, \featureref{s-workdir-fallback}.
\item \t{pkg_pretend}, \featureref{pkg-pretend}.
\item Default \t{src_install} no longer a no-op, \featureref{src-install}.
\item \t{pkg_info} can run on non-installed packages, \featureref{pkg-info}.
\item \t{AA} is gone, \featureref{aa}.
\item \t{KV} is gone, \featureref{kv}.
\item \t{MERGE_TYPE}, \featureref{merge-type}.
\item \t{REPLACING_VERSIONS} and \t{REPLACED_BY_VERSION}, \featureref{replace-version-vars}.
\item Utilities now die on failure, \featureref{die-on-failure}, unless called under \t{nonfatal},
    \featureref{nonfatal}
\item \t{dohard}, \t{dosed} banned, \featureref{banned-commands}.
\item \t{econf} adds \t{-{}-disable-dependency-tracking}, \featureref{econf-options}.
\item \t{dodoc -r} support, \featureref{dodoc}.
\item \t{doins} supports symlinks, \featureref{doins}.
\item \t{doman -i18n} option takes precedence, \featureref{doman-langs}.
\item Controllable compression and \t{docompress}, \featureref{docompress}.
\item \t{use_with} and \t{use_enable} support empty third argument, \featureref{use-with}.
\end{compactitem}

\section*{EAPI 5}

EAPI 5 is EAPI 4 with the following changes:

\begin{compactitem}
\item Stable use masking and forcing, \featureref{stablemask}.
\item \t{REQUIRED_USE} now supports \t{??}\ groups, \featureref{at-most-one-of}.
\item Slot operator dependencies, \featureref{slot-operator-deps}.
\item \t{SLOT} now supports an optional sub-slot part, \featureref{sub-slot}.
\item \t{src_test} supports parallel tests, \featureref{parallel-tests}.
\item \t{EBUILD_PHASE_FUNC}, \featureref{ebuild-phase-func}.
\item \t{USE} is calculated differently, \featureref{profile-iuse-inject}.
\item \t{find} is guaranteed to be GNU, \featureref{gnu-find}.
\item \t{best_version} and \t{has_version} support the \t{-{}-host-root} option,
    \featureref{pm-query-options}.
\item \t{econf} adds \t{-{}-disable-silent-rules}, \featureref{econf-options}.
\item \t{doheader} and \t{newheader} support, \featureref{doheader}.
\item \t{new*} can read from standard input, \featureref{newfoo-stdin}.
\item \t{usex} support, \featureref{usex}.
\end{compactitem}

\section*{EAPI 6}

EAPI 6 is EAPI 5 with the following changes:

\begin{compactitem}
\item Bash version is 4.2, \featureref{bash-version}.
\item \t{failglob} is enabled in global scope, \featureref{failglob}.
\item Default \t{src_prepare} no longer a no-op, \featureref{src-prepare}.
\item Different \t{src_install} implementation, \featureref{src-install}.
\item \t{LC_CTYPE} and \t{LC_COLLATE} compatible with POSIX locale, \featureref{locale-settings}.
\item \t{einstall} banned, \featureref{banned-commands}.
\item \t{die} and \t{assert} called with \t{-n} respect \t{nonfatal}, \featureref{nonfatal-die}.
\item \t{eapply} support, \featureref{eapply}.
\item \t{eapply_user} support, \featureref{eapply-user}.
\item \t{econf} adds \t{-{}-docdir} and \t{-{}-htmldir}, \featureref{econf-options}.
\item \t{in_iuse} support, \featureref{in-iuse}.
\item \t{unpack} supports absolute and relative paths, \featureref{unpack-absolute}.
\item \t{unpack} supports \t{.txz}, \featureref{unpack-extensions}.
\item \t{unpack} matches filename extensions case-insensitively, \featureref{unpack-ignore-case}.
\item \t{einstalldocs} support, \featureref{einstalldocs}.
\item \t{get_libdir} support, \featureref{get-libdir}.
\end{compactitem}

\section*{EAPI 7}

EAPI 7 is EAPI 6 with the following changes:

\begin{compactitem}
\item \t{profiles/package.mask} can be a directory, \featureref{package-mask-dir}.
\item \t{package.mask}, \t{package.use}, \t{use.*} and \t{package.use.*} in a profile can be
    directories, \featureref{profile-file-dirs}.
\item \t{package.provided} in profiles banned, \featureref{package-provided}.
\item Empty \t{||} and \t{\textasciicircum\textasciicircum} dependency groups no longer count as
    being matched, \featureref{empty-dep-groups}.
\item \t{PORTDIR} is gone, \featureref{portdir}.
\item \t{ECLASSDIR} is gone, \featureref{eclassdir}.
\item \t{DESTTREE} is gone, \featureref{desttree}.
\item \t{INSDESTTREE} is gone, \featureref{insdesttree}.
\item \t{ROOT}, \t{EROOT}, \t{D}, \t{ED} no longer end with a trailing slash,
    \featureref{trailing-slash}.
\item \t{SYSROOT} and \t{ESYSROOT}, \featureref{sysroot}.
\item \t{econf} adds \t{-{}-with-sysroot}, \featureref{econf-options}.
\item \t{BDEPEND}, \featureref{bdepend}.
\item \t{BROOT}, \featureref{broot}.
\item \t{best_version} and \t{has_version} support \t{-b}, \t{-d} and \t{-r} options instead of
    \t{-{}-host-root}, \featureref{pm-query-options}.
\item \t{ENV_UNSET}, \featureref{env-unset}.
\item \t{patch} is compatible with GNU patch 2.7, \featureref{gnu-patch}.
\item \t{nonfatal} is both a shell function and an external command, \featureref{nonfatal}.
\item \t{dohtml} banned, \featureref{banned-commands}.
\item \t{dolib} and \t{libopts} banned, \featureref{banned-commands}.
\item Output commands no longer use stdout, \featureref{output-no-stdout}.
\item \t{eqawarn}, \featureref{eqawarn}.
\item \t{die} is guaranteed to work in a subshell, \featureref{subshell-die}.
\item \t{domo} installs to \t{/usr}, \featureref{domo-path}.
\item Controllable stripping and \t{dostrip}, \featureref{dostrip}.
\item Version manipulation and comparison commands, \featureref{ver-commands}.
\end{compactitem}

\section*{EAPI 8}

EAPI 8 is EAPI 7 with the following changes:

\begin{compactitem}
\item Less strict naming rules for files in \t{updates} directory, \featureref{updates-filenames}.
\item Bash version is 5.0, \featureref{bash-version}.
\item Selective fetch/mirror restriction, \featureref{uri-restrict}.
\item \t{IDEPEND}, \featureref{idepend}.
\item Empty working directory in \t{pkg_*} phase functions, \featureref{phase-function-dir}.
\item Different \t{src_prepare} implementation, \featureref{src-prepare}.
\item \t{PROPERTIES} and \t{RESTRICT} accumulated across eclasses, \featureref{accumulate-vars}.
\item \t{useq} banned, \featureref{banned-commands}.
\item \t{hasv} and \t{hasq} banned, \featureref{banned-commands}.
\item \t{econf} adds \t{-{}-datarootdir}, \featureref{econf-options}.
\item \t{econf} adds \t{-{}-disable-static}, \featureref{econf-options}.
\item \t{dosym} can create relative paths, \featureref{dosym-relative}.
\item \t{insopts} no longer affects \t{doconfd}, \t{doenvd} and \t{doheader}, \featureref{insopts}.
\item \t{exeopts} no longer affects \t{doinitd}, \featureref{exeopts}.
\item \t{usev} supports an optional second argument, \featureref{usev}.
\item \t{unpack} no longer supports \t{.7z}, \t{.rar}, \t{.lha}, \featureref{unpack-extensions}.
\end{compactitem}

\section*{EAPI 9}

EAPI 9 is EAPI 8 with the following changes:

\begin{compactitem}
\item Different default EAPI for profiles, \featureref{profile-eapi-default}.
\item \t{use.stable} and \t{package.use.stable}, \featureref{use-stable}.
\item Bash version is 5.3, \featureref{bash-version}.
\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}.
\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}

% 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:
