.TH "EBUILD" "5" "Sep 2010" "Portage VERSION" "Portage"
.SH "NAME"
ebuild \- the internal format, variables, and functions in an ebuild script
.SH "DESCRIPTION"
The
.BR ebuild (1)
program accepts a single ebuild script as an argument.  This script
contains variables and commands that specify how to download, unpack,
patch, compile, install and merge a particular software package from
its original sources.  In addition to all of this, the ebuild script
can also contain pre/post install/remove commands, as required.  All
ebuild scripts are written in bash.
.SH "EXAMPLES"
Here's a simple example ebuild:

.DS
.nf
# Copyright 1999\-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="3"

inherit some_eclass another_eclass

DESCRIPTION="Super\-useful stream editor (sed)"
HOMEPAGE="http://www.gnu.org/software/sed/sed.html"
SRC_URI="ftp://alpha.gnu.org/pub/gnu/${PN}/${P}.tar.gz"

LICENSE="GPL\-2"
SLOT="0"
KEYWORDS="~x86"
IUSE=""

RDEPEND=""
DEPEND="nls? ( sys-devel/gettext )"

src_configure() {
	econf \\
		\-\-bindir="${EPREFIX}"/bin
}

src_install() {
	emake install DESTDIR="${D}" || die "Install failed"
	dodoc NEWS README* THANKS AUTHORS BUGS ChangeLog || die "dodoc failed"
}
.fi
.SH "VARIABLES"
.TP
.B MISC USAGE NOTES
\- All variables defined in \fBmake.conf\fR(5) are available for use in
ebuilds (such as the PORTAGE* and PORTDIR* variables)
.br
\- When assigning values to variables in ebuilds, you \fBcannot have a
space\fR between the variable name and the equal sign.
.br
\- Variable values should only contain characters that are members of the
\fBascii\fR(7) character set. This requirement is mandated by \fBGLEP 31\fR.
.TP
.B P
This variable contains the package name without the ebuild revision.
This variable must NEVER be modified.
.br
\fBxfree\-4.2.1\-r2.ebuild\fR \-\-> \fB$P\fR=='\fIxfree\-4.2.1\fR'
.TP
.B PN
Contains the name of the script without the version number.
.br
\fBxfree\-4.2.1\-r2.ebuild\fR \-\-> \fB$PN\fR=='\fIxfree\fR'
.TP
.B PV
Contains the version number without the revision.
.br
\fBxfree\-4.2.1\-r2.ebuild\fR \-\-> \fB$PV\fR=='\fI4.2.1\fR'
.TP
.B PR
Contains the revision number or 'r0' if no revision number exists.
.br
\fBxfree\-4.2.1\-r2.ebuild\fR \-\-> \fB$PR\fR=='\fIr2\fR'
.TP
.B PVR
Contains the version number with the revision.
.br
\fBxfree\-4.2.1\-r2.ebuild\fR \-\-> \fB$PVR\fR=='\fI4.2.1\-r2\fR'
.TP
.B PF
Contains the full package name \fI[PN]\-[PVR]\fR
.br
\fBxfree\-4.2.1\-r2.ebuild\fR \-\-> \fB$PF\fR=='\fIxfree\-4.2.1\-r2\fR'
.TP
.B CATEGORY
Contains the package category name.
.TP
.B A
Contains all source files required for the package.  This variable must
not be defined. It is autogenerated from the \fISRC_URI\fR variable.
.TP
\fBWORKDIR\fR = \fI"${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/work"\fR
Contains the path to the package build root.  Do not modify this variable.
.TP
\fBFILESDIR\fR = \fI"${PORTDIR}/${CATEGORY}/${PN}/files"\fR
Contains the path to the 'files' sub folder in the package specific
location in the portage tree.  Do not modify this variable.
.TP
.B EPREFIX
Beginning with \fBEAPI 3\fR, contains the offset
that this Portage was configured for during
installation.  The offset is sometimes necessary in an ebuild or eclass,
and is available in such cases as ${EPREFIX}.  EPREFIX does not contain
a trailing slash, therefore an absent offset is represented by the empty
string.  Do not modify this variable.
.TP
\fBS\fR = \fI"${WORKDIR}/${P}"\fR
Contains the path to the temporary \fIbuild directory\fR.  This variable
is used by the functions \fIsrc_compile\fR and \fIsrc_install\fR.  Both
are executed with \fIS\fR as the current directory.  This variable may
be modified to match the extraction directory of a tarball for the package.
.TP
\fBT\fR = \fI"${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/temp"\fR
Contains the path to a \fItemporary directory\fR.  You may use this for
whatever you like.
.TP
\fBD\fR = \fI"${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/image/"\fR
Contains the path to the temporary \fIinstall directory\fR.  Every write
operation that does not involve the helper tools and functions (found below)
should be prefixed with ${D}.
Beginning with \fBEAPI 3\fR, the offset prefix often needs
to be taken into account here, for which the variable
${ED} is provided (see below).
Do not modify this variable.
.TP
\fBED\fT = \fI"${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/image/${EPREFIX}/"\fR
Beginning with \fBEAPI 3\fR, contains the path
"${D%/}${EPREFIX}/" for convenience purposes.
For \fBEAPI\fR values prior to \fBEAPI 3\fR which do
not support \fB${ED}\fR, helpers use \fB${D}\fR where
they would otherwise use \fB${ED}\fR.
Do not modify this variable.
.TP
.B PORTAGE_LOG_FILE
Contains the path of the build log. If \fBPORT_LOGDIR\fR variable is unset then
\fBPORTAGE_LOG_FILE\fR=\fB"${T}/build.log"\fR.
.TP
\fBROOT\fR = \fI"/"\fR
Contains the path that portage should use as the root of the live filesystem.
When packages wish to make changes to the live filesystem, they should do so in
the tree prefixed by ${ROOT}.  Often the offset prefix needs to be taken
into account here, for which the variable ${EROOT} is provided (see
below).  Do not modify this variable.
.TP
\fBEROOT\fR = \fI"${ROOT%/}${EPREFIX}/"\fR
Beginning with \fBEAPI 3\fR, contains
"${ROOT%/}${EPREFIX}/" for convenience
purposes. Do not modify this variable.
.TP
\fBDESCRIPTION\fR = \fI"A happy little package"\fR
Should contain a short description of the package.
.TP
\fBEAPI\fR = \fI"0"\fR
Defines the ebuild API version to which this package conforms. If not
defined then it defaults to "0". If portage does not recognize the
EAPI value then it will mask the package and refuse to perform any
operations with it since this means that a newer version of portage
needs to be installed first. For maximum backward compatiblity, a
package should conform to the lowest possible EAPI. Note that anyone
who uses the \fBebuild\fR(1) and \fBrepoman\fR(1) commands with this
package will be required to have a version of portage that recognizes
the EAPI to which this package conforms.
.TP
\fBSRC_URI\fR = \fI"http://happy.com/little/${P}.tar.gz"\fR
Contains a list of URIs for the required source files.  It can contain
multiple URIs for a single source file.  The list is processed in order
if the file was not found on any of the \fIGENTOO_MIRRORS\fR.
Beginning with \fBEAPI 2\fR, the output file name of a given URI may be
customized with a "->" operator on the right hand side, followed by the
desired output file name. All tokens, including the operator and output
file name, should be separated by whitespace.
.TP
\fBHOMEPAGE\fR = \fI"http://happy.com/"\fR
Should contain a list of URIs for the sources main sites and other further
package dependent information.
.TP
\fBKEYWORDS\fR = \fI[\-~][x86,ppc,sparc,mips,alpha,arm,hppa]\fR
Should contain appropriate list of arches that the ebuild is know to
work/not work.  By default if you do not know if an ebuild runs under
a particular arch simply omit that KEYWORD.  If the ebuild will not
work on that arch include it as \-ppc for example.  If the ebuild is
being submitted for inclusion, it must have ~arch set for architectures
where it has been PROVEN TO WORK.  (Packages KEYWORDed this way may be
unmasked for testing by setting ACCEPT_KEYWORDS="~arch" on the command
line, or in \fBmake.conf\fR(5)) For an authoritative list please review
/usr/portage/profiles/arch.list.  Please keep this list in alphabetical order.
.TP
\fBSLOT\fR
This sets the SLOT for packages that may need to have multiple versions
co\-exist.  By default you should set \fBSLOT\fR="0".  If you are unsure, then
do not fiddle with this until you seek some guidance from some guru.  This
value should \fINEVER\fR be left undefined.
.TP
\fBLICENSE\fR
This should be a space delimited list of licenses that the package falls
under.  This \fB_must_\fR be set to a matching license in
/usr/portage/licenses/. If the license does not exist in portage yet, you
must add it first.
.TP
\fBIUSE\fR
This should be a list of any and all USE flags that are leveraged within
your build script.  The only USE flags that should not be listed here are
arch related flags (see \fBKEYWORDS\fR). Beginning with \fBEAPI 1\fR, it
is possible to prefix flags with + or - in order to create default settings
that respectively enable or disable the corresponding \fBUSE\fR flags. For
details about \fBUSE\fR flag stacking order, refer to the \fBUSE_ORDER\fR
variable in \fBmake.conf\fR(5). Given the default \fBUSE_ORDER\fR setting,
negative IUSE default settings are ineffective since profile and user
configuration settings override them.
.TP
\fBDEPEND\fR
This should contain a list of all packages that are required for the
program to compile.
.RS
.TP
.B DEPEND Atoms
A depend atom is simply a dependency that is used by portage when calculating
relationships between packages.  Please note that if the atom has not already
been emerged, then the latest version available is matched.
.RS
.TP
.B Atom Bases
The base atom is just a full category/packagename.  Hence, these are base atoms:

.nf
.I sys\-apps/sed
.I sys\-libs/zlib
.I net\-misc/dhcp
.fi
.TP
.B Atom Versions
It is nice to be more specific and say that only certain versions of atoms are
acceptable.  Note that versions must be combined with a prefix (see below).  
Hence you may add a version number as a postfix to the base:

.nf
sys\-apps/sed\fI\-4.0.5\fR
sys\-libs/zlib\fI\-1.1.4\-r1\fR
net\-misc/dhcp\fI\-3.0_p2\fR
.fi

Versions are normally made up of two or three numbers separated by periods, such
as 1.2 or 4.5.2.  This string may be followed by a character such as 1.2a or 
4.5.2z.  Note that this letter is \fBnot\fR meant to indicate alpha, beta, 
etc... status.  For that, use the optional suffix; either _alpha, _beta, _pre 
(pre\-release), _rc (release candidate), or _p (patch).  This means for the 
3rd pre\-release of a package, you would use something like 1.2_pre3.  The 
suffixes here can be arbitrarily chained without limitation.
.TP
.B Atom Prefix Operators [> >= = <= <]
Sometimes you want to be able to depend on general versions rather than specifying
exact versions all the time.  Hence we provide standard boolean operators:

.nf
\fI>\fRmedia\-libs/libgd\-1.6
\fI>=\fRmedia\-libs/libgd\-1.6
\fI=\fRmedia\-libs/libgd\-1.6
\fI<=\fRmedia\-libs/libgd\-1.6
\fI<\fRmedia\-libs/libgd\-1.6
.fi
.TP
.B Extended Atom Prefixes [!~] and Postfixes [*]
Now to get even fancier, we provide the ability to define blocking packages and
version range matching.  Also note that these extended prefixes/postfixes may
be combined in any way with the atom classes defined above.  Here are some common
examples you may find in the portage tree:

.nf
\fI!\fRapp\-text/dos2unix
=dev\-libs/glib\-2\fI*\fR
\fI!\fR=net\-fs/samba\-2\fI*\fR
\fI~\fRnet\-libs/libnet\-1.0.2a
\fI!!\fR<sys\-apps/portage\-2.1.4_rc1\fI\fR
.fi

\fI!\fR means block packages from being installed at the same time.
.br
\fI!!\fR means block packages from being installed at the same time
and explicitly disallow them from being temporarily installed
simultaneously during a series of upgrades. This syntax is supported
beginning with \fBEAPI 2\fR.
.br
\fI*\fR means match any version of the package so long
as the specified string prefix is matched. So with a
version of '2*', we can match '2.1', '2.2', '2.2.1',
etc... and not match version '1.0', '3.0', '4.1', etc...
Beware that, due to the string matching nature, '20'
will also be matched by '2*'. The version part
that comes before the '*' must be a valid version in the absence of the '*'.
For example, '2' is a valid version and '2.' is not. Therefore, '2*' is
allowed and '2.*' is not.
.br
\fI~\fR means match any revision of the base version specified.  So in the
above example, we would match versions '1.0.2a', '1.0.2a\-r1', '1.0.2a\-r2',
etc...
.TP
.B Atom Slots
Beginning with \fBEAPI 1\fR, any atom can be constrained to match a specific
\fBSLOT\fR. This is accomplished by appending a colon followed by a
\fBSLOT\fR:

.nf
x11\-libs/qt:3
\fI~\fRx11\-libs/qt-3.3.8:3
\fI>=\fRx11\-libs/qt-3.3.8:3
\fI=\fRx11\-libs/qt-3.3*:3
.fi
.TP
.B Atom USE
Beginning with \fBEAPI 2\fR, any atom can be constrained to match specific
\fBUSE\fR flag settings. When used together with \fBSLOT\fR dependencies,
\fBUSE\fR dependencies appear on the right hand side of \fBSLOT\fR
dependencies.

.RS
.TP
.B Unconditional USE Dependencies
.TS
l l
__
l l.
Example	Meaning

foo[bar]	foo must have bar enabled
foo[bar,baz]	foo must have both bar and baz enabled
foo[\-bar,baz]	foo must have bar disabled and baz enabled
.TE

.TP
.B Conditional USE Dependencies
.TS
l l
__
l l.
Compact Form	Equivalent Expanded Form

foo[bar?]	bar? ( foo[bar] ) !bar? ( foo )
foo[!bar?]	bar? ( foo ) !bar? ( foo[\-bar] )
foo[bar=]	bar? ( foo[bar] ) !bar? ( foo[\-bar] )
foo[!bar=]	bar? ( foo[\-bar] ) !bar? ( foo[bar] )
.TE
.RE
.RE
.TP
.B Dynamic DEPENDs
Sometimes programs may depend on different things depending on the USE
variable.  Portage offers a few options to handle this.  Note that when
using the following syntaxes, each case is considered as 1 Atom in the
scope it appears.  That means that each Atom both conditionally include
multiple Atoms and be nested to an infinite depth.
.RS
.TP
.B usevar? ( DEPEND Atom )
To include the jpeg library when the user has jpeg in \fBUSE\fR, simply use the
following syntax:
.br
.B jpeg? ( media\-libs/jpeg )
.TP
.B !usevar? ( Atom )
If you want to include a package only if the user does not have a certain option
in their \fBUSE\fR variable, then use the following syntax:
.br
.B !nophysfs? ( dev\-games/physfs )
.br
This is often useful for those times when you want to want to add optional support
for a feature and have it enabled by default.
.TP
.B usevar? ( Atom if true ) !usevar? ( Atom if false )
For functionality like the tertiary operator found in C you must use
two statements, one normal and one inverted.  If a package uses
GTK2 or GTK1, but not both, then you can handle that like this:
.br
.B gtk2? ( =x11\-libs/gtk+\-2* ) !gtk2? ( =x11\-libs/gtk+\-1* )
.br
That way the default is the superior GTK2 library.
.TP
.B || ( Atom Atom ... )
When a package can work with a few different packages but a virtual is not
appropriate, this syntax can easily be used.
.nf
.B || (
.B 	app\-games/unreal\-tournament
.B 	app\-games/unreal\-tournament\-goty
.B )
.fi
Here we see that unreal\-tournament has a normal version and it has a goty
version.  Since they provide the same base set of files, another package can
use either.  Adding a virtual is inappropriate due to the small scope of it.
.br
Another good example is when a package can be built with multiple video 
interfaces, but it can only ever have just one.
.nf
.B || (
.B 	sdl? ( media\-libs/libsdl )
.B 	svga? ( media\-libs/svgalib )
.B 	opengl? ( virtual/opengl )
.B 	ggi? ( media\-libs/libggi )
.B 	virtual/x11
.B )
.fi
Here only one of the packages will be chosen, and the order of preference is
determined by the order in which they appear.  So sdl has the best chance of
being chosen, followed by svga, then opengl, then ggi, with a default of X if
the user does not specify any of the previous choices.
.br
Note that if any of the packages listed are already merged, the package manager
will use that to consider the dependency satisfied.
.RE

.RE
.TP
\fBRDEPEND\fR
This should contain a list of all packages that are required for this
program to run (aka runtime depend). If this is not set in \fBEAPI\fR
3 or earlier, then it defaults to the value of \fBDEPEND\fR. In
EAPI 4 or later, \fBRDEPEND\fR will never be implicitly set.
.br
You may use the same syntax to vary dependencies as seen above in \fBDEPEND\fR.
.TP
\fBPDEPEND\fR
This should contain a list of all packages that should be merged after this one,
but may be merged before if need be.
.br
You may use the same syntax to vary dependencies as seen above in \fBDEPEND\fR.
.TP
\fBRESTRICT\fR = \fI[strip,mirror,fetch,userpriv]\fR
This should be a space delimited list of portage features to restrict.
You may use conditional syntax to vary restrictions as seen above in DEPEND.
.PD 0
.RS
.TP
.I binchecks
Disable all QA checks for binaries.  This should ONLY be used in packages
for which binary checks make no sense (linux\-headers and kernel\-sources, for
example, can safely be skipped since they have no binaries).  If the binary
checks need to be skipped for other reasons (such as proprietary binaries),
see the \fBQA CONTROL VARIABLES\fR section for more specific exemptions.
.TP
.I bindist
Distribution of built packages is restricted.
.TP
.I fetch
like \fImirror\fR but the files will not be fetched via \fBSRC_URI\fR either.
.TP
.I installsources
Disables installsources for specific packages. This is for packages with
binaries that are not compatible with debugedit.
.TP
.I mirror
files in \fBSRC_URI\fR will not be downloaded from the \fBGENTOO_MIRRORS\fR.
.TP
.I primaryuri
fetch from URIs in \fBSRC_URI\fR before \fBGENTOO_MIRRORS\fR.
.TP
.I strip
final binaries/libraries will not be stripped of debug symbols.
.TP
.I test
do not run src_test even if user has \fBFEATURES\fR=test.
.TP
.I userpriv
Disables userpriv for specific packages.
.RE
.PD 1
.TP
\fBPROPERTIES\fR = \fI[interactive]\fR
A space delimited list of properties, with conditional syntax support.
.PD 0
.RS
.TP
.I interactive
One or more ebuild phases will produce a prompt that requires user interaction.
.RE
.PD 1
.TP
\fBPROVIDE\fR = \fI"virtual/TARGET"\fR
This variable should only be used when a package provides a virtual target.
For example, blackdown\-jdk and sun\-jdk provide \fIvirtual/jdk\fR.  This
allows for packages to depend on \fIvirtual/jdk\fR rather than on blackdown
or sun specifically.
.SH "QA CONTROL VARIABLES"
.TP
.B USAGE NOTES
Several QA variables are provided which allow an ebuild to manipulate some
of the QA checks performed by portage.  Use of these variables in ebuilds
should be kept to an absolute minimum otherwise they defeat the purpose
of the QA checks, and their use is subject to agreement of the QA team.
They are primarily intended for use by ebuilds that install closed\-source
binary objects that cannot be altered.
.br
Note that objects that violate these rules may fail on some architectures.
.TP
\fBQA_PREBUILT\fR
This should contain a list of file paths, relative to the image
directory, of files that are pre\-built binaries. Paths
listed here will be appended to each of the QA_* variables
listed below. The paths may contain fnmatch\-like patterns
which will be internally translated to regular expressions for
the QA_* variables that support regular expressions instead
of fnmatch patterns. The translation mechanism simply replaces
'*' with '.*'.
.TP
\fBQA_TEXTRELS\fR
This variable can be set to a list of file paths, relative to the image
directory, of files that contain text relocations that cannot be eliminated.
The paths may contain fnmatch patterns.
.br
This variable is intended to be used on closed\-source binary objects that
cannot be altered.
.TP
\fBQA_EXECSTACK\fR
This should contain a list of file paths, relative to the image directory, of
objects that require executable stack in order to run.
The paths may contain fnmatch patterns.
.br
This variable is intended to be used on objects that truly need executable
stack (i.e. not those marked to need it which in fact do not).
.TP
\fBQA_WX_LOAD\fR
This should contain a list of file paths, relative to the image directory, of
files that contain writable and executable segments.  These are rare.
The paths may contain fnmatch patterns.
.TP
\fBQA_DT_HASH\fR
This should contain a list of file paths, relative to the image directory, of
files that contain .hash sections. The paths may contain regular expressions
with escape\-quoted special characters.
.br
This variable is intended to be used on files of binary packages which ignore
LDFLAGS variable.
.TP
\fBQA_PRESTRIPPED\fR
This should contain a list of file paths, relative to the image directory, of
files that contain pre-stripped binaries. The paths may contain regular
expressions with escape\-quoted special characters.
.TP
\fBQA_SONAME\fR
This should contain a list of file paths, relative to the image directory, of
shared libraries that lack SONAMEs. The paths may contain regular expressions
with escape\-quoted special characters.
.TP
\fBQA_DT_NEEDED\fR
This should contain a list of file paths, relative to the image directory, of
shared libraries that lack NEEDED entries. The paths may contain regular
expressions with escape\-quoted special characters.
.SH "PORTAGE DECLARATIONS"
.TP
.B inherit
Inherit is portage's maintenance of extra classes of functions that are
external to ebuilds and provided as inheritable capabilities and data. They
define functions and set data types as drop\-in replacements, expanded, and
simplified routines for extremely common tasks to streamline the build
process. Call to inherit cannot depend on conditions which can vary in given
ebuild. Specification of the eclasses contains only their name and not the
\fI.eclass\fR extension. Also note that the inherit statement must come
before other variable declarations unless these variables are used in global
scope of eclasses.
.SH "PHASE FUNCTIONS"
.TP
.B pkg_nofetch
If you turn on \fIfetch\fR in \fBRESTRICT\fR, then this function will be
run when the files in \fBSRC_URI\fR cannot be found.  Useful for
displaying information to the user on *how* to obtain said files.  All
you have to do is output a message and let the function return.  Do not
end the function with a call to \fBdie\fR.
.TP
.B pkg_setup
This function can be used if the package needs specific setup actions or
checks to be preformed before anything else.
.br
Initial working directory of ${PORTAGE_TMPDIR}.
.TP
.B src_unpack
This function is used to unpack all the sources in \fIA\fR to \fIWORKDIR\fR.
If not defined in the \fIebuild script\fR it calls \fIunpack ${A}\fR. Any
patches and other pre configure/compile modifications should be done here.
.br
Initial working directory of $WORKDIR.
.TP
.B src_prepare
All preparation of source code, such as application of patches, should be done
here. This function is supported beginning with \fBEAPI 2\fR.
.br
Initial working directory of $S.
.TP
.B src_configure
All necessary steps for configuration should be done here. This function is
supported beginning with \fBEAPI 2\fR.
.br
Initial working directory of $S.
.TP
.B src_compile
With less than \fBEAPI 2\fR, all necessary steps for both configuration and
compilation should be done here. Beginning with \fBEAPI 2\fR, only compilation
steps should be done here.
.br
Initial working directory of $S.
.TP
.B src_test
Run all package specific test cases.  The default is to run 'make check'
followed 'make test'.
.br
Initial working directory of $S.
.TP
.B src_install
Should contain everything required to install the package in the temporary
\fIinstall directory\fR.
.br
Initial working directory of $S.
.TP
.B pkg_preinst pkg_postinst
All modifications required on the live\-filesystem before and after the
package is merged should be placed here. Also commentary for the user
should be listed here as it will be displayed last.
.br
Initial working directory of $PWD.
.TP
.B pkg_prerm pkg_postrm
Like the pkg_*inst functions but for unmerge.
.br
Initial working directory of $PWD.
.TP
.B pkg_config
This function should contain optional basic configuration steps.
.br
Initial working directory of $PWD.
.SH "HELPER FUNCTIONS: PHASES"
.TP
.B default
Calls the default phase function implementation for the currently executing
phase. This function is supported beginning with \fBEAPI 2\fR.
.TP
.B default_*
Beginning with \fBEAPI 2\fR, the default pkg_nofetch and src_* phase
functions are accessible via a function having a name that begins with
default_ and ends with the respective phase function name. For example,
a call to a function with the name default_src_compile is equivalent to
a call to the default src_compile implementation.

.RS
.TS
l
_
l.
Default Phase Functions

default_pkg_nofetch
default_src_unpack
default_src_prepare
default_src_configure
default_src_compile
default_src_test
.TE
.RE
.SH "HELPER FUNCTIONS: GENERAL"
.TP
\fBdie\fR \fI[reason]\fR
Causes the current emerge process to be aborted. The final display will
include \fIreason\fR.
.TP
\fBuse\fR \fI<USE item>\fR
If \fIUSE item\fR is in the \fBUSE\fR variable, the function will silently
return 0 (aka shell true).  If \fIUSE item\fR is not in the \fBUSE\fR
variable, the function will silently return 1 (aka shell false).  \fBusev\fR
is a verbose version of \fBuse\fR.
.RS
.TP
.I Example:
.nf
if use gnome ; then
	guiconf="\-\-enable\-gui=gnome \-\-with\-x"
elif use gtk ; then
	guiconf="\-\-enable\-gui=gtk \-\-with\-x"
elif use X ; then
	guiconf="\-\-enable\-gui=athena \-\-with\-x"
else
	# No gui version will be built
	guiconf=""
fi
.fi
.RE
.TP
\fBuse_with\fR \fI<USE item>\fR \fI[configure name]\fR \fI[configure opt]\fR
Useful for creating custom options to pass to a configure script. If \fIUSE
item\fR is in the \fBUSE\fR variable and a \fIconfigure opt\fR is specified,
then the string \fI\-\-with\-[configure name]=[configure opt]\fR will be echoed.
If \fIconfigure opt\fR is not specified, then just \fI\-\-with\-[configure
name]\fR will be echoed.  If \fIUSE item\fR is not in the \fBUSE\fR variable,
then the string \fI\-\-without\-[configure name]\fR will be echoed. If
\fIconfigure name\fR is not specified, then \fIUSE item\fR will be used in
its place.
.RS
.TP
.I Examples:
.nf
USE="opengl"
myconf=$(use_with opengl)
(myconf now has the value "\-\-with\-opengl")

USE="jpeg"
myconf=$(use_with jpeg libjpeg)
(myconf now has the value "\-\-with\-libjpeg")

USE=""
myconf=$(use_with jpeg libjpeg)
(myconf now has the value "\-\-without\-libjpeg")

USE="sdl"
myconf=$(use_with sdl SDL all\-plugins)
(myconf now has the value "\-\-with\-SDL=all\-plugins")
.fi
.RE
.TP
\fBuse_enable\fR \fI<USE item>\fR \fI[configure name]\fR \fI[configure opt]\fR
Same as \fBuse_with\fR above, except that the configure options are
\fI\-\-enable\-\fR instead of \fI\-\-with\-\fR and \fI\-\-disable\-\fR instead of
\fI\-\-without\-\fR.
.TP
\fBhas\fR \fI<item>\fR \fI<item list>\fR
If \fIitem\fR is in \fIitem list\fR, then \fIitem\fR is echoed and \fBhas\fR
returns 0.  Otherwise, nothing is echoed and 1 is returned. As indicated with
use, there is a non\-echoing version \fBhasq\fR. Please use \fBhasq\fR in all
places where output is to be disregarded. Never use the output for calculation.
.br
The \fIitem list\fR is delimited by the \fIIFS\fR variable.  This variable
has a default value of ' ', or a space.  It is a \fBbash\fR(1) setting.
.TP
\fBhas_version\fR \fI<category/package\-version>\fR
Check to see if \fIcategory/package\-version\fR is installed on the system.
The parameter accepts all values that are acceptable in the \fBDEPEND\fR
variable.  The function returns 0 if \fIcategory/package\-version\fR is
installed, 1 otherwise.
.TP
\fBbest_version\fR \fI<package name>\fR
This function will look up \fIpackage name\fR in the database of currently
installed programs and echo the "best version" of the package that is
currently installed. 
.RS
.TP
.I Example:
VERINS="$(best_version net\-ftp/glftpd)"
.br
(VERINS now has the value "net\-ftp/glftpd\-1.27" if glftpd\-1.27 is installed)
.RE
.SH "HELPER FUNCTIONS: HOOKS"
.TP
\fBregister_die_hook\fR \fI[list of function names]\fR
Register one or more functions to call when the ebuild fails for any reason,
including file collisions with other packages.
.TP
\fBregister_success_hook\fR \fI[list of function names]\fR
Register one or more functions to call when the ebuild builds and/or installs
successfully.
.TP
.RE
.SH "HELPER FUNCTIONS: OUTPUT"
.TP
\fBeinfo\fR \fI"disposable message"\fR
Same as \fBelog\fR, but should be used when the message isn't important to the
user (like progress or status messages during the build process).
.TP
\fBelog\fR \fI"informative message"\fR
If you need to display a message that you wish the user to read and take
notice of, then use \fBelog\fR.  It works just like \fBecho\fR(1), but
adds a little more to the output so as to catch the user's eye. The message
will also be logged by portage for later review.
.TP
\fBewarn\fR \fI"warning message"\fR
Same as \fBeinfo\fR, but should be used when showing a warning to the user.
.TP
\fBeqawarn\fR \fI"QA warning message"\fR
Same as \fBeinfo\fR, but should be used when showing a QA warning to the user.
.TP
\fBeerror\fR \fI"error message"\fR
Same as \fBeinfo\fR, but should be used when showing an error to the user.
.TP
\fBebegin\fR \fI"helpful message"\fR
Like \fBeinfo\fR, we output a \fIhelpful message\fR and then hint that the
following operation may take some time to complete.  Once the task is
finished, you need to call \fBeend\fR.
.TP
\fBeend\fR \fI<status>\fR \fI["error message"]\fR
Followup the \fBebegin\fR message with an appropriate "OK" or "!!" (for
errors) marker.  If \fIstatus\fR is non\-zero, then the additional \fIerror
message\fR is displayed.
.SH "HELPER FUNCTIONS: UNPACK"
.TP
\fBunpack\fR \fI<source>\fR \fI[list of more sources]\fR
This function uncompresses and/or untars a list of sources into the current
directory. The function will append \fIsource\fR to the \fBDISTDIR\fR variable.
.SH "HELPER FUNCTIONS: COMPILE"
.TP
\fBeconf\fR \fI[configure options]\fR
This is used as a replacement for configure.  Performs:
.nf
${\fIECONF_SOURCE\fR:-.}/configure \\
	${CBUILD:+\-\-build=${CBUILD}} \\
	\-\-datadir="${EPREFIX}"/usr/share \\
	\-\-host=${CHOST} \\
	\-\-infodir="${EPREFIX}"/usr/share/info \\
	\-\-localstatedir="${EPREFIX}"/var/lib \\
	\-\-prefix="${EPREFIX}"/usr \\
	\-\-mandir="${EPREFIX}"/usr/share/man \\
	\-\-sysconfdir="${EPREFIX}"/etc \\
	${CTARGET:+\-\-target=${CTARGET}} \\
	\fI${EXTRA_ECONF}\fR \\
	\fIconfigure options\fR || die "econf failed"
.fi
Note that the \fIEXTRA_ECONF\fR is for users only, not for ebuild
writers.  If you wish to pass more options to configure, just pass the
extra arguments to \fBeconf\fR. Also note that \fBeconf\fR automatically
calls \fBdie\fR if the configure script fails.
Beginning with \fBEAPI 3\fR, \fBeconf\fR uses the \fB${EPREFIX}\fR
variable which is disregarded for prior \fBEAPI\fR values.
.TP
\fBemake\fR \fI[make options]\fR
This is used as a replacement for make.  Performs 'make ${MAKEOPTS}
\fImake options\fR' (as set in make.globals), default is MAKEOPTS="\-j2".

\fB***warning***\fR
.br
if you are going to use \fBemake\fR, make sure your build is happy with
parallel makes (make \-j2).  It should be tested thoroughly as parallel
makes are notorious for failing _sometimes_ but not always.  If you determine
that your package fails to build in parallel, and you are unable to resolve
the issue, then you should run '\fBemake\fR \-j1' instead of 'make'.
.SH "HELPER FUNCTIONS: INSTALL"
.TP
\fBeinstall\fR \fI[make options]\fR
This is used as a replacement for make install.  Performs:
.nf
make \\
	prefix=${ED}/usr \\
	datadir=${ED}/usr/share \\
	infodir=${ED}/usr/share/info \\
	localstatedir=${ED}/var/lib \\
	mandir=${ED}/usr/share/man \\
	sysconfdir=${ED}/etc \\
	\fI${EXTRA_EINSTALL}\fR \\
	\fImake options\fR \\
	install
.fi
Please do \fBnot\fR use this in place of 'emake install DESTDIR=${D}'.
That is the preferred way of installing make\-based packages.  Also, do
not utilize the \fIEXTRA_EINSTALL\fR variable since it is for users.

.PD 0
.TP
.B prepall
.TP
.B prepalldocs
.TP
.B prepallinfo
.TP
.B prepallman
.TP
.B prepallstrip
.PD 1
Useful for when a package installs into \fB${D}\fR via scripts
(i.e. makefiles).  If you want to be sure that libraries are executable,
aclocal files are installed into the right place, doc/info/man files are
all compressed, and that executables are all stripped of debugging symbols,
then use these suite of functions.
.RS
.PD 0
.TP
.B prepall:
Runs \fBprepallman\fR, \fBprepallinfo\fR, \fBprepallstrip\fR, sets
libraries +x, and then checks aclocal directories.  Please note this
does \fI*not*\fR run \fBprepalldocs\fR.
.TP
.B prepalldocs:
Compresses all doc files in ${ED}/usr/share/doc.
.TP
.B prepallinfo:
Compresses all info files in ${ED}/usr/share/info.
.TP
.B prepallman:
Compresses all man files in ${ED}/usr/share/man.
.TP
.B prepallstrip:
Strips all executable files of debugging symboles.  This includes libraries.
.RE

.TP
\fBprepinfo\fR \fI[dir]\fR
.TP
\fBprepman\fR \fI[dir]\fR
.TP
\fBprepstrip\fR \fI[dir]\fR
.PD 1
Similiar to the \fBprepall\fR functions, these are subtle in their differences.
.RS
.PD 0
.TP
.B prepinfo:
If a \fIdir\fR is not specified, then \fBprepinfo\fR will assume the dir
\fIusr\fR. \fBprepinfo\fR will then compress all the files in
${ED}/\fIdir\fR/info.
.TP
.B prepman:
If a \fIdir\fR is not specified, then \fBprepman\fR will assume the dir
\fIusr\fR. \fBprepman\fR will then compress all the files in
${ED}/\fIdir\fR/man/*/.
.TP
.B prepstrip:
All the files found in ${ED}/\fIdir\fR will be stripped.  You may specify
multiple directories.
.RE
.PD 1
.TP
\fBdosed\fR \fI"s:orig:change:g" <filename>\fR
Performs sed in place on \fIfilename\fR inside ${ED}. If no expression is
given then \fI"s:${D}::g"\fR is used as the default expression.  Note
that this expression does \fBNOT\fR use the offset prefix.
.br
.BR 'dosed\ "s:/usr/local:/usr:g"\ /usr/bin/some\-script'
runs sed on ${ED}/usr/bin/some\-script
.TP
\fBdodir\fR \fI<path>\fR
Creates a directory inside of ${ED}.
.br
.BR 'dodir\ /usr/lib/apache'
creates ${ED}/usr/lib/apache.  Note that the do* functions will run
\fBdodir\fR for you.
.TP
\fBdiropts\fR \fI[options for install(1)]\fR
Can be used to define options for the install function used in
\fBdodir\fR.  The default is \fI\-m0755\fR.
.TP
\fBinto\fR \fI<path>\fR
Sets the root (\fIDESTTREE\fR) for other functions like \fBdobin\fR,
\fBdosbin\fR, \fBdoman\fR, \fBdoinfo\fR, \fBdolib\fR.
.br
The default root is /usr.
.TP
\fBkeepdir\fR \fI<path>\fR
Tells portage to leave a directory behind even if it is empty.  Functions
the same as \fBdodir\fR.
.TP
\fBdobin\fR \fI<binary> [list of more binaries]\fR
Installs a \fIbinary\fR or a list of binaries into \fIDESTTREE\fR/bin.
Creates all necessary dirs.
.TP
\fBdosbin\fR \fI<binary> [list of more binaries]\fR
Installs a \fIbinary\fR or a list of binaries into \fIDESTTREE\fR/sbin.
Creates all necessary dirs.
.TP
\fBdoinitd\fR \fI<init.d script> [list of more init.d scripts]\fR
Install Gentoo \fIinit.d scripts\fR.  They will be installed into the
correct location for Gentoo init.d scripts (/etc/init.d/).  Creates all
necessary dirs.
.TP
\fBdoconfd\fR \fI<conf.d file> [list of more conf.d file]\fR
Install Gentoo \fIconf.d files\fR.  They will be installed into the
correct location for Gentoo conf.d files (/etc/conf.d/).  Creates all
necessary dirs.
.TP
\fBdoenvd\fR \fI<env.d entry> [list of more env.d entries]\fR
Install Gentoo \fIenv.d entries\fR.  They will be installed into the
correct location for Gentoo env.d entries (/etc/env.d/).  Creates all
necessary dirs.

.PD 0
.TP
\fBdolib\fR \fI<library>\fR \fI[list of more libraries]\fR
.TP
\fBdolib.a\fR \fI<library>\fR \fI[list of more libraries]\fR
.TP
\fBdolib.so\fR \fI<library>\fR \fI[list of more libraries]\fR
.PD 1
Installs a library or a list of libraries into \fIDESTTREE\fR/lib.
Creates all necessary dirs.
.TP
\fBlibopts\fR \fI[options for install(1)]\fR
Can be used to define options for the install function used in
the \fBdolib\fR functions.  The default is \fI\-m0644\fR.
.TP
\fBdoman\fR \fI[\-i18n=<locale>]\fR \fI<man\-page> [list of more man\-pages]\fR
Installs manual\-pages into /usr/share/man/man[0\-9n] depending on the
manual file ending.  The files are compressed if they are not already.  You
can specify locale\-specific manpages with the \fI\-i18n\fR option.  Then the
man\-page will be installed into /usr/share/man/\fI<locale>\fR/man[0\-9n].
Beginning with \fBEAPI 2\fR, a locale\-specific manpage which contains a locale
in the file name will be installed in /usr/share/man/\fI<locale>\fR/man[0\-9n],
with the locale portion of the file name removed, and the \fI\-i18n\fR option
has no effect. For example, with \fBEAPI 2\fR, a manpage named
foo.\fI<locale>\fR.1 will be installed as
/usr/share/man/\fI<locale>\fR/man1/foo.1.
.PD 0
.TP
\fBdohard\fR \fI<filename> <linkname>\fR
.TP
\fBdosym\fR \fI<filename> <linkname>\fR
.PD 1
Performs the ln command as either a hard link or symlink.
.TP
\fBdohtml\fR \fI [\-a filetypes] [\-r] [\-x list\-of\-dirs\-to\-ignore] [list\-of\-files\-and\-dirs]\fR
Installs the files in the list of files (space\-separated list) into
/usr/share/doc/${PF}/html provided the file ends in .htm, .html, .css, .js, .gif, .jpeg, .jpg, or .png.
Setting \fI\-a\fR limits what types of files will be included,
\fI\-A\fR appends to the default list, setting \fI\-x\fR sets which dirs to
exclude (CVS excluded by default), \fI\-p\fR sets a document prefix, \fI\-r\fR sets recursive.
.TP
\fBdoinfo\fR \fI<info\-file> [list of more info\-files]\fR
Installs info\-pages into \fIDESTDIR\fR/info.  Files are automatically
gzipped.  Creates all necessary dirs.
.TP
\fBdomo\fR \fI<locale\-file> [list of more locale\-files] \fR
Installs locale\-files into \fIDESTDIR\fR/usr/share/locale/[LANG]
depending on local\-file's ending.  Creates all necessary dirs.

.PD 0
.TP
\fBfowners\fR \fI<permissions> <file> [files]\fR
.TP
\fBfperms\fR \fI<permissions> <file> [files]\fR
.PD 1
Performs chown (\fBfowners\fR) or chmod (\fBfperms\fR), applying
\fIpermissions\fR to \fIfiles\fR.
.TP
\fBinsinto\fR \fI[path]\fR
Sets the destination path for the \fBdoins\fR function.
.br
The default path is /.
.TP
\fBinsopts\fR \fI[options for install(1)]\fR
Can be used to define options for the install function used in
\fBdoins\fR.  The default is \fI\-m0644\fR.
.TP
\fBdoins\fR \fI[-r] <file> [list of more files]\fR
Installs files into the path controlled by \fBinsinto\fR.  This function
uses \fBinstall\fR(1).  Creates all necessary dirs.
Setting -r sets recursive.
.TP
\fBexeinto\fR \fI[path]\fR
Sets the destination path for the \fBdoexe\fR function.
.br
The default path is /.
.TP
\fBexeopts\fR \fI[options for install(1)]\fR
Can be used to define options for the install function used in \fBdoexe\fR.
The default is \fI\-m0755\fR.
.TP
\fBdoexe\fR \fI<executable> [list of more executables]\fR
Installs executables into the path controlled by \fBexeinto\fR.  This function
uses \fBinstall\fR(1).  Creates all necessary dirs.
.TP
\fBdocinto\fR \fI[path]\fR
Sets the subdir used by \fBdodoc\fR and \fBdohtml\fR
when installing into the document tree
(based in /usr/share/doc/${PF}/).  Default is no subdir, or just "".
.TP
\fBdodoc\fR \fI<document> [list of more documents]\fR
Installs a document or a list of documents into /usr/share/doc/${PF}/\fI<docinto path>\fR.
Documents are marked for compression.  Creates all necessary dirs.

.PD 0
.TP
\fBnewbin\fR \fI<old file> <new filename>\fR
.TP
\fBnewsbin\fR \fI<old file> <new filename>\fR
.TP
\fBnewinitd\fR \fI<old file> <new filename>\fR
.TP
\fBnewconfd\fR \fI<old file> <new filename>\fR
.TP
\fBnewenvd\fR \fI<old file> <new filename>\fR
.TP
\fBnewlib.so\fR \fI<old file> <new filename>\fR
.TP
\fBnewlib.a\fR \fI<old file> <new filename>\fR
.TP
\fBnewman\fR \fI<old file> <new filename>\fR
.TP
\fBnewinfo\fR \fI<old file> <new filename>\fR
.TP
\fBnewins\fR \fI<old file> <new filename>\fR
.TP
\fBnewexe\fR \fI<old file> <new filename>\fR
.TP
\fBnewdoc\fR \fI<old file> <new filename>\fR
.PD 1
All these functions act like the do* functions, but they only work with one
file and the file is installed as \fI[new filename]\fR.
.SH "REPORTING BUGS"
Please report bugs via http://bugs.gentoo.org/
.SH "AUTHORS"
.nf
Achim Gottinger <achim@gentoo.org>
Mark Guertin <gerk@gentoo.org>
Nicholas Jones <carpaski@gentoo.org>
Mike Frysinger <vapier@gentoo.org>
Arfrever Frehtes Taifersar Arahesis <Arfrever.FTA@gmail.com>
Fabian Groffen <grobian@gentoo.org>
.fi
.SH "FILES"
.TP
The \fI/usr/sbin/ebuild.sh\fR script.
.TP
The helper apps in \fI/usr/lib/portage/bin\fR.
.TP
.B /etc/make.conf
Contains variables for the build\-process and overwrites those in make.defaults.
.TP
.B /usr/share/portage/config/make.globals
Contains the default variables for the build\-process, you should edit
\fI/etc/make.conf\fR instead.
.TP
.B /etc/portage/color.map
Contains variables customizing colors.
.SH "SEE ALSO"
.BR ebuild (1),
.BR make.conf (5),
.BR color.map (5)
