.TH "EBUILD" "5" "Feb 2003" "Portage 2.0.51" "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.
.SH "EXAMPLES"
Here's a simple example ebuild:

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

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/sed/${P}.tar.gz"

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

DEPEND="virtual/libc"
RDEPEND="virtual/libc"

src_compile() {
	econf || die "could not configure"
	emake || die "emake failed"
}

src_install() {
	into /usr
	doinfo doc/sed.info
	doman doc/sed.1
	into /
	dobin sed/sed || die "dobin sed failed"
	dodir /usr/bin
	dosym /bin/sed /usr/bin/sed
	dodoc NEWS README* THANKS TODO AUTHORS BUGS ANNOUNCE
}
.fi
.SH "VARIABLES"
.TP
.B MISC USAGE NOTES
- PORTAGE* and PORTDIR* variables may be found in \fBmake.conf\fR(5).
.br
- When assigning values to variables in ebuilds, you \fBcannot have a space\fR
between the variable name and the equal sign.
.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 A
Contains all source files required for the package.  This variable must
not be defined. It is autogenerated from the \fISRC_URI\fR variables.
.TP
\fBWORKDIR\fR = \fI"${PORTAGE_TMPDIR}/portage/${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
\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/${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/${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}.  Do not modify this variable.  This will not be 
available inside of the pkg_* functions, see \fIIMAGE\fR below.
.TP
\fBIMAGE\fR = \fI"${PORTAGE_TMPDIR}/portage/${PF}/image"\fR
Contains the path to the temporary \fIimage directory\fR.  When inside of the 
\fIpkg_*\fR functions, you should access the \fIIMAGE\fR directory instead of 
the \fID\fR directory.  Do not modify this variable.
.TP
\fBDESCRIPTION\fR = \fI"A happy little package"\fR
Should contain a short description of the package.
.TP
\fBSRC_URI\fR = \fI"http://happy.com/little/${P}.tar.gz"\fR
Contains a list of URI's for the required source files.  It can contain
multiple URI's for a single source file.  The fastest location is chosen
if the file was not found at \fIGENTOO_MIRROR\fB\fR.
.TP
\fBHOMEPAGE\fR = \fI"http://happy.com/"\fR
Should contain a list of URL's 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.
.TP
\fBSLOT\fR
This sets the SLOT for packages that may need to co\-exist.  By default
you should set \fBSLOT\fR="0" unless you know what you are doing and need
to do otherwise.  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).
.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.
.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

\fI!\fR means block packages from being installed at the same time.
.br
\fI*\fR means match any version of the package so long as the specified base 
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...
.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...
.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.
.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, then it
defaults to the value of \fBDEPEND\fR.
.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 will have to be installed after
the program has been merged.
.br
You may use the same syntax to vary dependencies as seen above in \fBDEPEND\fR.
.TP
\fBRESTRICT\fR = \fI[fetch,mirror,nostrip,userpriv]\fR
This should be a space delimited list of portage features to restrict.
.PD 0
.RS
.TP
.I fetch
like \fInomirror\fR but the files will not be fetched via \fBSRC_URI\fR either.
.TP
.I mirror
files in \fBSRC_URI\fR will not be downloaded from the \fBGENTOO_MIRRORS\fR.
.TP
.I primaryuri
fetch from URL's in \fBSRC_URI\fR before \fBGENTOO_MIRRORS\fR.
.TP
.I nostrip
final binaries/libraries will not be stripped of debug symbols.
.TP
.I userpriv
Disables userpriv for specific packages.
.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 "PORTAGE DECLARATIONS"
.TP
.B inherit
Inherit is portage's maintainance 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. Inherit may only be called once in an ebuild and it may
\fBnever be wrapped within any conditionals\fR of any kind. Specification of
the eclasses contains only their name and not the \fI.eclass\fR extention.
.SH "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_compile
All necessary steps for configuration and compilation should be done in 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: 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 option]\fR
Useful for creating custom options to pass to a configure script. If
\fIUSE item\fR is in the \fBUSE\fR variable, then the string
\fI--with-[configure option]\fR will be echoed.  If \fIUSE item\fR is
not in the \fBUSE\fR variable, then the string
\fI--without-[configure option]\fR will be echoed.  If
\fIconfigure option\fR is not specified, then \fIUSE item\fR will be
used in its place.
.RS
.TP
.I Example:
.nf
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="opengl"
myconf="$(use_with opengl")
(myconf now has the value "--with-opengl")
.fi
.RE
.TP
\fBuse_enable\fR \fI<USE item>\fR \fI[configure option]\fR
Useful for creating custom options to pass to a configure script. If
\fIUSE item\fR is in the \fBUSE\fR variable, then the string
\fI--enable-[configure option]\fR will be echoed.  If \fIUSE item\fR is
not in the \fBUSE\fR variable, then the string
\fI--disable-[configure option]\fR will be echoed. If \fIconfigure option\fR
is not specified, then \fIUSE item\fR will be used in its place.
.br
See \fBuse_with\fR for an example.
.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.  The function returns 0 if there is a package that
matches \fIpackage name\fR.  Otherwise, the function will return 1.
.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: OUTPUT"
.TP
\fBeinfo\fR \fI"informative message"\fR
If you need to display an message that you wish the user to read and take 
notice of, then use \fBeinfo\fR.  It works just like \fBecho\fR(1), but 
adds a little more to the output so as to catch the user's eye.
.TP
\fBewarn\fR \fI"warning message"\fR
Same as \fBeinfo\fR, but should be used when showing a 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.
.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
configure \\
	--prefix=/usr \\
	--host=${CHOST} \\
	--mandir=/usr/share/man \\
	--infodir=/usr/share/info \\
	--datadir=/usr/share \\
	--sysconfdir=/etc \\
	--localstatedir=/var/lib \\
	\fI${EXTRA_ECONF}\fR \\
	\fIconfigure options\fR
.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 arguements to \fBeconf\fR.
.TP
\fBemake\fR \fI[make options]\fR
This is used as a replacement for make.  Performs 'make ${MAKEOPTS} 
\fImake options\fR' (as set in /etc/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.
.SH "HELPER FUNCTIONS: INSTALL"
.TP
\fBeinstall\fR \fI[make options]\fR
This is used as a replacement for make install.  Performs:
.nf
make \\
	prefix=${D}/usr \\
	datadir=${D}/usr/share \\
	infodir=${D}/usr/share/info \\
	localstatedir=${D}/var/lib \\
	mandir=${D}/usr/share/man \\
	sysconfdir=${D}/etc \\
	\fI${EXTRA_EINSTALL}\fR \\
	\fImake options\fR \\
	install
.fi
Please do \fBnot\fR use this in place of 'make 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 ${D}/usr/share/doc.
.TP
.B prepallinfo:
Compresses all info files in ${D}/usr/share/info.
.TP
.B prepallman:
Compresses all man files in ${D}/usr/share/man.
.TP
.B prepallstrip:
Strips all executable files of debugging symboles.  This includes libraries.
.RE

.TP
\fBprepinfo\fR \fI[dir]\fR
.TP
\fBpreplib\fR \fI[dir]\fR
.TP
\fBpreplib.so\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
${D}/\fIdir\fR/info.
.TP
.B preplib:
If a \fIdir\fR is not specified, then \fBpreplib\fR will assume the dir
\fIusr\fR. \fBpreplib\fR will then run 'ldconfig -n -N' on ${D}/\fIdir\fR/lib.
.TP
.B preplib.so:
All the files with '.so' in their name and are found in ${D}/\fIdir\fR will
be stripped of their debug symbols.  You may specify multiple directories.
.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
${D}/\fIdir\fR/man/*/.
.TP
.B prepstrip:
All the files found in ${D}/\fIdir\fR will be stripped.  You may specify
multiple directories.
.RE
.PD 1
.TP
\fBdopython\fR \fI<commands>\fR
Performs \fIcommands\fR with python and returns the result.
.TP
\fBdosed\fR \fI"s:orig:change:g" <filename>\fR
Performs sed (including cp/mv \fIfilename\fR) on \fIfilename\fR.
.br
.BR 'dosed\ "s:/usr/local:/usr:g"\ /usr/bin/some-script'
runs sed on ${D}/usr/bin/some-script
.TP
\fBdodir\fR \fI<path>\fR
Creates a directory inside of ${D}.
.br
.BR 'dodir\ /usr/lib/apache'
creates ${D}/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 gzipped 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].  
Creates all necessary dirs.

.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 .html, .png, .js, .jpg, 
or .css.  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\-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
\fBdojar\fR \fI<jar file> [list of more jar files]\fR
Installs jar files into /usr/share/${PN}/lib and adds them to
/usr/share/${PN}/classpath.env.
.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 root (\fIINSDESTTREE\fR) for the \fBdoins\fR function.
.br
The default root 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<file> [list of more files]\fR
Installs files into \fIINSDESTTREE\fR.  This function uses \fBinstall\fR(1).  
Creates all necessary dirs.
.TP
\fBexeinto\fR \fI[path]\fR
Sets the root (\fIEXEDESTTREE\fR) for the \fBdoexe\fR function.
.br
The default root 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 a executable or a list of executable into \fIEXEDESTTREE\fR.
This function uses \fBinstall\fR(1).  Creates all necessary dirs.
.TP
\fBdocinto\fR \fI[path]\fR
Sets the relative subdir (\fIDOCDESTTREE\fR) used by \fBdodoc\fR.
.TP
\fBdodoc\fR \fI<document> [list of more documents]\fR
Installs a document or a list of document into /usr/share/doc/${PF}/\fIDOCDESTTREE\fR.
Files are automatically gzipped.  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\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 "SEE ALSO"
.BR ebuild (1),
.BR make.conf (5)
.TP
The \fI/usr/sbin/ebuild.sh\fR script.
.TP
The helper apps in \fI/usr/lib/portage/bin\fR.
.SH "FILES"
.TP
\fB/etc/make.conf\fR 
Contains variables for the build\-process and overwrites those in make.defaults.
.TP
\fB/etc/make.globals\fR
Contains the default variables for the build\-process, you should edit
\fI/etc/make.conf\fR instead.
.SH "AUTHORS"
.nf
Achim Gottinger <achim@gentoo.org>
Mark Guertin <gerk@gentoo.org>
Nicholas Jones <carpaski@gentoo.org>
Mike Frysinger <vapier@gentoo.org>
.fi
.SH "CVS HEADER"
$Id: /var/cvsroot/gentoo-src/portage/man/ebuild.5,v 1.73.2.8 2005/05/22 09:56:55 vapier Exp $
