.TH "MAKE.CONF" "5" "Jul 2019" "Portage VERSION" "Portage"
.SH "NAME"
make.conf \- custom settings for Portage
.SH "SYNOPSIS"
\fB/etc/make.conf\fR and \fB/etc/portage/make.conf\fR
.SH "DESCRIPTION"

This file contains various variables that are used by Portage. The file has a
newline\-delimited list of \fI<key>=<value>\fR pairs (see the default file for
examples) which are accessible from the environment of ebuilds. It supports
simple shell\-like expansion of the form \fIvar="${var}"\fR, the source
keyword and variable substitution, but not some of the more advanced BASH
features like arrays and special parameter expansions. For more details, see
the Simple lexical analysis documentation:
\fLhttps://docs.python.org/3/library/shlex.html\fR. Note that if you source
files, they need to be in the same shlex syntax for portage to read them.
If make.conf is a directory, then all the files in that directory will
be sorted in ascending alphabetical order by file name and summed
together as if it were a single file.
.br
Portage will check the currently\-defined environment variables
first for any settings.  If no environment settings are found,
Portage then checks the make.conf files. Both /etc/make.conf and
/etc/portage/make.conf are checked (if present), and settings from
/etc/portage/make.conf will override settings from /etc/make.conf.
If no setting is found in the make.conf files, Portage checks
make.globals. If no
setting is found there, the profile's default setting is grabbed
from /etc/portage/make.profile/make.defaults. Please note that all user
settings should be made in the environment or in the make.conf
files, which are intended to be customized by the user.
.br
Exceptions are incremental variables such as USE, CONFIG_PROTECT*,
and ACCEPT_KEYWORDS.  Incremental variables are propagated down from
make.defaults to make.globals to make.conf to the environment
settings.  Clearing these variables requires a clear\-all as in:
export USE="\-*"
.br
In order to create per\-package environment settings, refer to
\fBpackage.env\fR in \fBportage\fR(5).
.SH "VARIABLES"
.TP
\fBACCEPT_CHOSTS\fR = \fI[space delimited list of CHOST values]\fR
Specifies acceptable \fBCHOST\fR values. Regular
expression syntax is supported, so it is necessary to escape
\fBCHOST\fR characters if they have special meaning in regular expressions.
.br
Defaults to the value of $CHOST.
.TP
\fBACCEPT_KEYWORDS\fR = \fI[space delimited list of KEYWORDS]\fR
Enable testing of ebuilds that have not yet been deemed 'stable'.  Users
of the 'x86' architecture would set this to '~x86' while ppc users would
set this to '~ppc'.  This is an incremental variable.  Only define a
~arch.
.br
Defaults to the value of $ARCH.
.TP
\fBACCEPT_LICENSE\fR = \fI[space delimited list of licenses or groups]\fR
This variable is used to mask packages based on licensing restrictions. It
may contain both license and group names, where group names are prefixed
with the '@' symbol. License groups are defined in the \fIlicense_groups\fR
file (see \fBportage\fR(5)). In addition to license and group names, the
\fI*\fR and \fI-*\fR wildcard tokens are also supported. Refer to GLEP 23
for further information:
\fIhttps://www.gentoo.org/glep/glep-0023.html\fR.
.br
Defaults to the value defined in the profile.
.br
.I Examples:
.nf
# Only accept licenses in the FREE license group (i.e. Free Software)
ACCEPT_LICENSE="-* @FREE"
# As before, but exclude the "Artistic" license
ACCEPT_LICENSE="-* @FREE -Artistic"
# Accept any license except those in the EULA license group
ACCEPT_LICENSE="* -@EULA"
.fi
.TP
\fBACCEPT_PROPERTIES\fR = \fI[space delimited list of properties]\fR
This variable is used to mask packages based on PROPERTIES restrictions.
In addition to property names, the \fI*\fR and \fI-*\fR wildcard tokens are
also supported. This variable can be temporarily overridden using the
\fB\-\-accept\-properties\fR option of \fBemerge\fR(1).
See \fBebuild\fR(5) for more information about PROPERTIES.
.br
Defaults to the value of *.
.br
.I Examples:
.nf
# Accept any properties
ACCEPT_PROPERTIES="*"
# Accept any properties except the "interactive" property
ACCEPT_PROPERTIES="* -interactive"
.fi
.TP
\fBACCEPT_RESTRICT\fR = \fI[space delimited list of RESTRICT tokens]\fR
This variable is used to mask packages based on RESTRICT tokens.
In addition to RESTRICT tokens, the \fI*\fR and \fI-*\fR wildcard tokens are
also supported. This variable can be temporarily overridden using the
\fB\-\-accept\-restrict\fR option of \fBemerge\fR(1).
See \fBebuild\fR(5) for more information about RESTRICT.
.br
Defaults to the value of *.
.br
.I Examples:
.nf
# Accept any restrict tokens
ACCEPT_RESTRICT="*"
# Accept any tokens except "bindist"
ACCEPT_RESTRICT="* -bindist"
.fi
.TP
\fBBINPKG_COMPRESS\fR = \fI"compression"\fR
This variable is used to determine the compression used for \fIbinary
packages\fR. Supported settings and compression algorithms are: bzip2, gzip,
lz4, lzip, lzop, xz, zstd.
.br
Defaults to "bzip2".
.br
.I Example:
.nf
# Set it to use lz4:
BINPKG_COMPRESS="lz4"
.fi
.TP
\fBBINPKG_COMPRESS_FLAGS\fR = \fI"arguments for compression command"\fR
This variable is used to add additional arguments to the compression command
selected by \fBBINPKG_COMPRESS\fR.
.br
Defaults to "".
.br
.I Example:
.nf
# Set it to use compression level 9:
BINPKG_COMPRESS_FLAGS="-9"
.fi
.TP
.B CBUILD
This variable is passed by the \fIebuild scripts\fR to the \fIconfigure\fR
as \fI\-\-build=${CBUILD}\fR only if it is defined.  Do not set this yourself
unless you know what you are doing.
.TP
\fBCCACHE_DIR\fR = \fI[path]\fR
Defines the location of the ccache working directory.  See the \fBccache\fR(1)
man page for more information.
.br
Defaults to /var/tmp/ccache
.TP
\fBCCACHE_SIZE\fR = \fI"size"\fR
This controls the space use limitations for ccache.  See the \fI\-M\fR flag in
the \fBccache\fR(1) man page for more information.
.TP
.B CFLAGS CXXFLAGS
Use these variables to set the desired optimization/CPU instruction settings
for applications that you compile.  These two variables are passed to the C
and C++ compilers, respectively. (CXX is used to refer to the C++ compiler
within many buildsystems.) Nearly all ebuild files will take advantage
of your custom settings, resulting in a Gentoo Linux that is fully customized
to your specifications.  Please use sane settings as some packages will fail to
compile/run if the optimizations are too extreme.

For more information, see the \fIInvoking GCC\fR section of the gcc manual:
.br
https://gcc.gnu.org/onlinedocs/
.TP
.B CHOST
This variable is passed by the \fIebuild scripts\fR to the \fIconfigure\fR
step as \fI\-\-host=${CHOST}\fR.  This way you can force the build\-host.

For more information:
.br
https://gcc.gnu.org/onlinedocs/gcc\-6.1.0/gcc/Submodel\-Options.html
.br
https://gcc.gnu.org/onlinedocs/gcc\-5.4.0/gcc/Submodel\-Options.html
.br
https://gcc.gnu.org/onlinedocs/gcc\-4.9.3/gcc/Submodel\-Options.html
.TP
\fBCLEAN_DELAY\fR = \fIinteger\fR
Determines how long the countdown delay will be after running
`emerge --unmerge`.
.br
Defaults to 5 seconds.
.TP
\fBCOLLISION_IGNORE\fR = \fI[space delimited list of fnmatch patterns]\fR
This variable allows the user to disable \fIcollision\-protect\fR and
\fIprotect\-owned\fR for specific \fBfnmatch\fR(3) patterns. For backward
compatibility, directories that are listed without a fnmatch pattern will
automatically have /* appended to them.
.br
Defaults to "/lib/modules/* *.py[co]".
.TP
\fBCONFIG_PROTECT\fR = \fI[space delimited list of files and/or directories]\fR
All files and/or directories that are defined here will have "config file
protection" enabled for them. See the \fBCONFIGURATION FILES\fR section
of \fBemerge\fR(1) for more information.
.TP
\fBCONFIG_PROTECT_MASK\fR = \fI[space delimited list of files and/or \
directories]\fR
All files and/or directories that are defined here will have "config file
protection" disabled for them. See the \fBCONFIGURATION FILES\fR section
of \fBemerge\fR(1) for more information.
.TP
.B CTARGET
This variable is passed by the \fIebuild scripts\fR to the \fIconfigure\fR
as \fI\-\-target=${CTARGET}\fR only if it is defined.
.TP
.B DCO_SIGNED_OFF_BY
This variable may contain a name and email address which will be used by
\fBrepoman\fR(1) to add a Signed\-off\-by line to each commit message.
.TP
\fBDISTDIR\fR = \fI[path]\fR
Defines the location of your local source file repository. After packages
are built, it is safe to remove any and all files from this directory since
they will be automatically fetched on demand for a given build. If you would
like to selectively prune obsolete files from this directory, see
\fBeclean\fR(1) from the gentoolkit package.

Use the \fBPORTAGE_RO_DISTDIRS\fR variable to specify one or
more read-only directories containing distfiles.
.br
Defaults to /var/cache/distfiles.
.TP
.B DOC_SYMLINKS_DIR
If this variable contains a directory then symlinks to html documentation will
be installed into it.
.TP
.B EBEEP_IGNORE
Defines whether or not to ignore audible beeps when displaying important
informational messages.  This variable is unset by default.
.TP
.B EMERGE_DEFAULT_OPTS
Options to append to the end of the \fBemerge\fR(1) command line on every
invocation. These options will not be appended to the command line if
\-\-ignore\-default\-opts is specified.
.TP
.B EMERGE_LOG_DIR
Controls the location of emerge.log and emerge-fetch.log.
.br
Defaults to /var/log.
.TP
\fBEMERGE_WARNING_DELAY\fR = \fIinteger\fR
Determines how long the countdown delay will be after running
`emerge --unmerge` for a system package.
.br
Defaults to 10 seconds.
.TP
.B EPAUSE_IGNORE
Defines whether or not to ignore short pauses that occur when displaying
important informational messages.  This variable is unset by default.
If it is set to any value pauses are ignored.
.TP
\fBEXTRA_ECONF\fR = \fI[configure options string]\fR
Contains additional options that \fBeconf\fR will append to configure
script arguments (see \fBebuild\fR(5)).
.TP
\fBFEATURES\fR = \fI"sandbox"\fR
Defines actions portage takes by default. This is an incremental variable.
Most of these settings are for developer use, but some are available to
non-developers as well. The \fBsandbox\fR feature is very important and
should not be disabled by default.
.RS
.TP
.B assume\-digests
When commiting work to cvs with \fBrepoman\fR(1), assume that all existing
SRC_URI digests are correct.  This feature also affects digest generation via
\fBebuild\fR(1) and \fBemerge\fR(1) (emerge generates digests only when the
\fIdigest\fR feature is enabled). Existing digests for files that do not exist
in ${DISTDIR} will be automatically assumed even when \fIassume\-digests\fR is
not enabled. If a file exists in ${DISTDIR} but its size does not match the
existing digest, the digest will be regenerated regardless of whether or
not \fIassume\-digests\fR is enabled. The \fBebuild\fR(1) \fBdigest\fR command
has a \fB\-\-force\fR option that can be used to force regeneration of digests.
.TP
.B binpkg\-docompress
Perform \fBdocompress\fR (controllable file compression) before creating binary
package.  When this option is enabled (the default), documentation files are
already compressed inside binary packages.  When it is disabled, binary packages
contain uncompressed documentation and Portage compresses it before installing.
.TP
.B binpkg\-dostrip
Perform file stripping before creating binary package.  When this option is
enabled (the default), executables are already stripped inside binary packages.
When it is disabled, binary packages contain unstripped executables and Portage
strips (or splits) them before installing.

\fBbinpkg\-dostrip\fR must be enabled for \fBinstallsources\fR to work.
.TP
.B binpkg\-logs
Keep logs from successful binary package merges. This is relevant only when
\fBPORTAGE_LOGDIR\fR is set.
.TP
.B binpkg\-multi\-instance
Enable support for multiple binary package instances per ebuild.
Having multiple instances is useful for a number of purposes, such as
retaining builds that were built with different USE flags or linked
against different versions of libraries. The location of any particular
package within PKGDIR can be expressed as follows:

	${PKGDIR}/${CATEGORY}/${PN}/${PF}\-${BUILD_ID}.xpak

The build\-id starts at 1 for the first build of a particular ebuild,
and is incremented by 1 for each new build. It is possible to share a
writable PKGDIR over NFS, and locking ensures that each package added
to PKGDIR will have a unique build\-id. It is not necessary to migrate
an existing PKGDIR to the new layout, since portage is capable of
working with a mixed PKGDIR layout, where packages using the old layout
are allowed to remain in place.

The new PKGDIR layout is backward\-compatible with binhost clients
running older portage, since the file format is identical, the
per\-package PATH attribute in the 'Packages' index directs them to
download the file from the correct URI, and they automatically use
BUILD_TIME metadata to select the latest builds.

There is currently no automated way to prune old builds from PKGDIR,
although it is possible to remove packages manually, and then run
\(aqemaint \-\-fix binhost' to update the ${PKGDIR}/Packages index.
.TP
.B buildpkg
Binary packages will be created for all packages that are merged. Also see
\fBquickpkg\fR(1) and \fBemerge\fR(1) \fB\-\-buildpkg\fR and
\fB\-\-buildpkgonly\fR options.
.TP
.B buildsyspkg
Build binary packages for just packages in the system set.
.TP
.B candy
Enable a special progress indicator when \fBemerge\fR(1) is calculating
dependencies.
.TP
.B case\-insensitive\-fs
Use case\-insensitive file name comparisions when merging and unmerging
files. Most users should not enable this feature, since most filesystems
are case\-sensitive. You should only enable this feature if you are
using portage to install files to a case\-insensitive filesystem.
.TP
.B ccache
Enable portage support for the ccache package.  If the ccache dir is not
present in the user's environment, then portage will default to
${PORTAGE_TMPDIR}/ccache.

\fBWarning\fR: This feature is known to cause numerous compilation failures.
Sometimes ccache will retain stale code objects or corrupted files, which can
lead to packages that cannot be emerged. If this happens (if you receive errors
like "File not recognized: File truncated"), try recompiling the application
with ccache disabled before reporting a bug. Unless you are doing development
work, do not enable ccache.
.TP
.B cgroup
Use Linux control group to control processes spawned by ebuilds. This allows
emerge to safely kill all subprocesses when ebuild phase exits.
.TP
.B clean\-logs
Enable automatic execution of the command specified by the
PORTAGE_LOGDIR_CLEAN variable. The default PORTAGE_LOGDIR_CLEAN setting will
remove all files from PORTAGE_LOGDIR that were last modified at least 7
days ago.
.TP
.B collision\-protect
A QA\-feature to ensure that a package doesn't overwrite files it doesn't own.
The \fICOLLISION_IGNORE\fR variable can be used to selectively disable this
feature. Also see the related \fIprotect\-owned\fR feature.
.TP
.B compress\-build\-logs
The causes all build logs to be compressed while they are being written.
Log file names have an extension that is appropriate for the compression
type. Currently, only \fBgzip\fR(1) compression is supported, so build
logs will have a '.gz' extension when this feature is enabled.
.TP
.B compress\-index
If set then a compressed copy of 'Packages' index file will be written.
This feature is intended for Gentoo binhosts using certain webservers
(such as, but not limited to, Nginx with gzip_static module) to avoid
redundant on\-the\-fly compression.  The resulting file will be called
\[aq]Packages.gz' and its modification time will match that of 'Packages'.
.TP
.B compressdebug
Compress the debug sections in the split debug files with zlib to save
space.  Make sure you have built both binutils and gdb with USE=zlib
support for this to work.  See \fBsplitdebug\fR for general split debug
information (upon which this feature depends).
.TP
.B config\-protect\-if\-modified
This causes the \fBCONFIG_PROTECT\fR behavior to be skipped for files
that have not been modified since they were installed. This feature is
enabled by default.
.TP
.B digest
Autogenerate digests for packages when running the
\fBemerge\fR(1), \fBebuild\fR(1), or \fBrepoman\fR(1) commands. If
the \fIassume\-digests\fR feature is also enabled then existing SRC_URI digests
will be reused whenever they are available.
.TP
.B distcc
Enable portage support for the distcc package.
.TP
.B distcc\-pump
Enable portage support for the distcc package with pump mode.
.TP
.B distlocks
Portage uses lockfiles to ensure competing instances don't clobber
each other's files. This feature is enabled by default but may cause
heartache on less intelligent remote filesystems like NFSv2 and some
strangely configured Samba server (oplocks off, NFS re\-export). A tool
/usr/lib/portage/bin/clean_locks exists to help handle lock issues
when a problem arises (normally due to a crash or disconnect).
.TP
.B downgrade\-backup
When a package is downgraded to a lower version, call \fBquickpkg\fR(1)
in order to create a backup of the installed version before it is
unmerged (if a binary package of the same version does not already
exist). Also see the related \fIunmerge\-backup\fR feature.
.TP
.B ebuild\-locks
Use locks to ensure that unsandboxed ebuild phases never execute
concurrently. Also see \fIparallel\-install\fR.
.TP
.B fail\-clean
Clean up temporary files after a build failure. This is particularly useful
if you have \fBPORTAGE_TMPDIR\fR on tmpfs. If this feature is enabled, you
probably also want to enable \fBPORTAGE_LOGDIR\fR in order to save the build log.
Both the \fBebuild\fR(1) command and the \fInoclean\fR feature cause the
\fIfail\-clean\fR feature to be automatically disabled.
.TP
.B fakeroot
Enable fakeroot for the install and package phases when a non-root user runs
the \fBebuild\fR(1) command.
.TP
.B fixlafiles
Modifies .la files to not include other .la files and some other
fixes (order of flags, duplicated entries, ...)
.TP
.B force\-mirror
Only fetch files from configured mirrors, ignoring \fBSRC_URI\fR,
except when \fImirror\fR is in the \fBebuild\fR(5) \fBRESTRICT\fR variable.
.TP
.B force\-prefix
Enable prefix support for all ebuilds, regardless of EAPI, since older EAPIs
would otherwise be useless with prefix configurations. This brings
compatibility with the prefix branch of portage, which also supports EPREFIX
for all EAPIs (for obvious reasons).
.TP
.B getbinpkg
Force emerges to always try to fetch files from the \fIPORTAGE_BINHOST\fR.  See
\fBmake.conf\fR(5) for more information.
.TP
.B icecream
Enable portage support for the icecream package.
.TP
.B installsources
Install source code into /usr/src/debug/${CATEGORY}/${PF} (also see
\fBsplitdebug\fR). This feature works only if debugedit is installed, CFLAGS
is set to include debug information (such as with the \-ggdb flag)
and \fBbinpkg-dostrip\fR is enabled.
.TP
.B ipc\-sandbox
Isolate the ebuild phase functions from host IPC namespace. Supported
only on Linux. Requires IPC namespace support in kernel.
.TP
.B keeptemp
Do not delete the ${T} directory after the merge process.
.TP
.B keepwork
Do not delete the ${WORKDIR} directory after the merge process. ${WORKDIR} can
then be reused since this feature disables most of the clean phase that runs
prior to each build. Due to lack of proper cleanup, this feature can
interfere with normal emerge operation and therefore it should not be left
enabled for more than a short period of time.
.TP
.B lmirror
When \fImirror\fR is enabled in \fBFEATURES\fR, fetch files even
when \fImirror\fR is also in the \fBebuild\fR(5) \fBRESTRICT\fR variable.
Do \fBNOT\fR use \fIlmirror\fR for clients that need to override \fBRESTRICT\fR
when fetching from a local mirror, but instead use a "local" mirror setting
in \fI/etc/portage/mirrors\fR, as described in \fBportage\fR(5).
.TP
.B merge\-sync
After a package is merged or unmerged, sync relevant files to
disk in order to avoid data\-loss in the event of a power failure.
This feature is enabled by default.
.TP
.B metadata\-transfer
Automatically perform a metadata transfer when `emerge \-\-sync` is run.
In versions of portage >=2.1.5, this feature is disabled by
default. When metadata\-transfer is disabled, metadata cache from the
${repository_location}/metadata/md5\-cache/ directory will be used directly
(if available).
.TP
.B mirror
Fetch everything in \fBSRC_URI\fR regardless of \fBUSE\fR settings,
except do not fetch anything when \fImirror\fR is in \fBRESTRICT\fR.
.TP
.B mount\-sandbox
Isolate the ebuild phase functions from host mount namespace. This makes
it possible for ebuild to alter mountpoints without affecting the host
system. Supported only on Linux. Requires mount namespace support in kernel.
.TP
.B multilib\-strict
Many Makefiles assume that their libraries should go to /usr/lib, or
$(prefix)/lib. This assumption can cause a serious mess if /usr/lib
isn't a symlink to /usr/lib64. To find the bad packages, we have a
portage feature called \fImultilib\-strict\fR. It will prevent emerge
from putting 64bit libraries into anything other than (/usr)/lib64.
.TP
.B network\-sandbox
Isolate the ebuild phase functions from host network interfaces.
Supported only on Linux. Requires network namespace support in kernel.
.TP
.B network\-sandbox\-proxy
Enable escaping network-sandbox through SOCKSv5 proxy. Enabling distcc
feature also enables the proxy.

If asyncio Python module is available (requires Python 3.3, built-in
since Python 3.4) Portage will additionally spawn an isolated SOCKSv5
proxy on UNIX socket. The socket address will be exported
as PORTAGE_SOCKS5_PROXY and the processes running inside the sandbox
can use it to access host's network when desired. Portage automatically
configures new enough distcc to use the proxy.
.TP
.B news
Enable GLEP 42 news support. See
\fIhttps://www.gentoo.org/glep/glep-0042.html\fR.
.TP
.B noauto
When utilizing \fBebuild\fR(1), only run the function requested. Also, forces
the corresponding ebuild and eclasses to be sourced again for each phase, in
order to account for modifications.
.TP
.B noclean
Do not delete the the source and temporary files after the merge process.
.TP
.B nodoc
Do not install doc files (/usr/share/doc).
.TP
.B noinfo
Do not install info pages.
.TP
.B noman
Do not install manpages.
.TP
.B nostrip
Prevents the stripping of binaries that are merged to the live filesystem.
.TP
.B notitles
Disables xterm titlebar updates (which contains status info).
.TP
.B parallel\-fetch
Fetch in the background while compiling. Run
`tail \-f /var/log/emerge\-fetch.log` in a
terminal to view parallel-fetch progress.
.TP
.B parallel\-install
Use finer\-grained locks when installing packages, allowing for greater
parallelization. For additional parallelization, disable
\fIebuild\-locks\fR.
.TP
.B pid\-sandbox
Isolate the process space for the ebuild processes. This makes it
possible to cleanly kill all processes spawned by the ebuild.
Supported only on Linux. Requires PID and mount namespace support
in kernel. /proc is remounted inside the mount namespace to account
for new PID namespace.
.TP
.B pkgdir\-index\-trusted
Trust that the \fBPKGDIR\fR index file is valid, meaning that no packages
have been manually added or removed since the last call to
\fBemaint \-\-fix binhost\fR. This feature eliminates overhead involved
with detection of packages that have been manually added or removed,
which significantly improves performance in some cases, such as when
\fBPKGDIR\fR resides on a high\-latency network file system.
.TP
.B prelink\-checksums
If \fBprelink\fR(8) is installed then use it to undo any prelinks on files
before computing checksums for merge and unmerge. This feature is
useful only if \fBprelink\fR(8) is installed and accurate checksums (despite
prelinking) are needed for some reason such as for checking the integrity of
installed files or because the \fIunmerge\-orphans\fR feature is disabled.

Note that normal emerging of packages from source computes the
checksums before things will be prelinked, so in such cases, this
feature isn't required either. Undoing prelinking while merging is
only required when using tools like \fBquickpkg\fR(1) which can cause
already prelinked files to be merged.
.TP
.B preserve\-libs
Preserve libraries when the sonames change during upgrade or downgrade.
Libraries are preserved only if consumers of those libraries are detected.
Preserved libraries are automatically removed when there are no remaining
consumers. Run `emerge @preserved\-rebuild` in order to rebuild all
consumers of preserved libraries.
.TP
.B protect\-owned
This is identical to the \fIcollision\-protect\fR feature except that files
may be overwritten if they are not explicitly listed in the contents of a
currently installed package. This is particularly useful on systems that
have lots of orphan files that have been left behind by older versions
of portage that did not support the \fIunmerge\-orphans\fR feature. Like
\fIcollision\-protect\fR, the \fICOLLISION_IGNORE\fR variable can be used to
selectively disable this feature. It is recommended to leave either
\fIprotect\-owned\fR or \fIcollision\-protect\fR enabled at all times,
since otherwise file collisions between packages may result in files being
overwritten or uninstalled at inappropriate times.
If \fIcollision\-protect\fR is enabled then it takes precedence over
\fIprotect\-owned\fR.
.TP
.B python\-trace
Output a verbose trace of python execution to stderr when a command's
\-\-debug option is enabled.
.TP
.B sandbox
Enable sandbox\-ing when running \fBemerge\fR(1) and \fBebuild\fR(1).
.TP
.B separatedebug
When splitdebug is enabled, produces a separate tarball containing the debug
symbols in \fBPKGDIR\fR.
The debug symbols tarball has the name ${CATEGORY}/${PF}.debug.tbz2.
.TP
.B sesandbox
Enable SELinux sandbox\-ing.  Do not toggle this \fBFEATURE\fR yourself.
.TP
.B sfperms
Stands for Smart Filesystem Permissions.  Before merging packages to the
live filesystem, automatically search for and set permissions on setuid
and setgid files.  Files that are setuid have the group and other read
bits removed while files that are setgid have the other read bit removed.
See also \fIsuidctl\fR below.
.TP
.B sign
When commiting work to cvs with \fBrepoman\fR(1), sign the Manifest with
a GPG key.  Read about the \fIPORTAGE_GPG_KEY\fR variable in
\fBmake.conf\fR(5).
.TP
.B skiprocheck
Skip write access checks on \fBDISTDIR\fR when fetching files. This is
useful when \fBFETCHCOMMAND\fR and \fBRESUMECOMMAND\fR are used to
forward fetch requests to a server that exposes \fBDISTDIR\fR as
a read-only NFS share. A read-only \fBDISTDIR\fR is not compatible with the
\fIdistlocks\fR, so it is recommended to also add "-distlocks" to
\fBFEATURES\fR in order to avoid warning messages that are triggered by this
incompatibility.
.TP
.B split\-elog
Store logs created by \fBPORTAGE_ELOG_SYSTEM="save"\fR in category
subdirectories of \fBPORTAGE_LOGDIR/elog\fR, instead of using
\fBPORTAGE_LOGDIR/elog\fR directly.
.TP
.B split\-log
Store build logs in category subdirectories of \fBPORTAGE_LOGDIR/build\fR,
instead of using \fBPORTAGE_LOGDIR\fR directly.
.TP
.B splitdebug
Prior to stripping ELF etdyn and etexec files, the debugging info is
stored for later use by various debuggers.  This feature is disabled by
\fBnostrip\fR.  You should also consider setting \fBcompressdebug\fR so
the files don't suck up a lot of space.  For installation of source code,
see \fBinstallsources\fR.
.TP
.B strict
Have portage react strongly to conditions that have the potential to be
dangerous (like missing or incorrect digests for ebuilds).
.TP
.B strict-keepdir
Have portage strictly require keepdir calls in ebuilds.  Empty
directories installed without explicit keepdir will be removed.
This feature is automatically enabled for \fBEAPI 8\fR and later.
.TP
.B stricter
Have portage react strongly to conditions that may conflict with system
security provisions (for example textrels, executable stack).  Read about
the \fIQA_STRICT_*\fR variables in \fBmake.conf\fR(5).
.TP
.B suidctl
Before merging packages to the live filesystem, automatically strip setuid
bits from any file that is not listed in \fI/etc/portage/suidctl.conf\fR.
.TP
.B test
Run package\-specific tests during each merge to help make sure
the package compiled properly.  See \fItest\fR in \fBebuild\fR(1)
and \fIsrc_test()\fR in \fBebuild\fR(5). This feature implies the "test"
\fBUSE\fR flag if it is a member of \fBIUSE\fR, either explicitly or
implicitly (see \fBebuild\fR(5) for more information about \fBIUSE\fR).
The "test" \fBUSE\fR flag is also automatically disabled when the
"test" feature is disabled.
.TP
.B test\-fail\-continue
If "test" is enabled \fBFEATURES\fR and the test phase of an ebuild fails,
continue to execute the remaining phases as if the failure had not occurred.
Note that the test phase for a specific package may be disabled by masking
the "test" \fBUSE\fR flag in \fBpackage.use.mask\fR (see \fBportage\fR(5)).
.TP
.B unknown\-features\-filter
Filter out any unknown values that the FEATURES variable contains.
.TP
.B unknown\-features\-warn
Warn if FEATURES contains one or more unknown values.
.TP
.B unmerge\-backup
Call \fBquickpkg\fR(1) to create a backup of each package before it is
unmerged (if a binary package of the same version does not already exist).
Also see the related \fIdowngrade\-backup\fR feature.
.TP
.B unmerge\-logs
Keep logs from successful unmerge phases. This is relevant only when
\fBPORTAGE_LOGDIR\fR is set.
.TP
.B unmerge\-orphans
If a file is not claimed by another package in the same slot and it is not
protected by \fICONFIG_PROTECT\fR, unmerge it even if the modification time or
checksum differs from the file that was originally installed.
.TP
.B userfetch
When portage is run as root, drop privileges to portage:portage during the
fetching of package sources.
.TP
.B userpriv
Allow portage to drop root privileges and compile packages as
portage:portage without a sandbox (unless \fIusersandbox\fR is also used).
.TP
.B usersandbox
Enable the sandbox in the compile phase, when running without root privs
(\fIuserpriv\fR).
.TP
.B usersync
Drop privileges to the owner of ${repository_location} for \fBemerge\fR(1) --sync
operations. Note that this feature assumes that all subdirectories of
${repository_location} have the same ownership as ${repository_location} itself.
It is the user's responsibility to ensure correct ownership, since otherwise
Portage would have to waste time validating ownership for each and every sync
operation.
.TP
.B webrsync-gpg
Enable GPG verification when using \fIemerge\-webrsync\fR. This feature is
deprecated and has been replaced by the \fBrepos.conf\fR
\fIsync\-webrsync\-verify\-signature\fR setting, see \fBportage\fR(5).
.TP
.B xattr
Preserve extended attributes (filesystem-stored metadata) when installing
files (see \fBattr\fR(1)). The \fBPORTAGE_XATTR_EXCLUDE\fR variable may be
used to exclude specific attributes from being preserved.
.RE
.TP
.B FETCHCOMMAND
This variable contains the command used for fetching package sources from
the internet.  It must contain the full path to the executable as well as the
place\-holders \\${DISTDIR}, \\${FILE} and \\${URI}.  The command should be
written to place the fetched file at \\${DISTDIR}/\\${FILE}.
Also see \fBRESUMECOMMAND\fR.
.TP
.B FFLAGS FCFLAGS
Use these variables to set the desired optimization/CPU instruction settings
for applications that you compile with a FORTRAN compiler. FFLAGS is usually
passed to the FORTRAN 77 compiler, and FCFLAGS to any FORTRAN compiler in
more modern build systems.

For more information, see the \fIInvoking GCC\fR section of the gcc manual:
.br
https://gcc.gnu.org/onlinedocs/
.TP
\fBGENTOO_MIRRORS\fR = \fI[URIs]\fR
Insert your space\-separated list of local mirrors here.  These
locations are used to download files before the ones listed in
the \fIebuild scripts\fR. Merging 'mirrorselect' can help.  Entries in this
variable that have no protocol and simply start with a '/' path separator may
be used to specify mounted filesystem mirrors.
.TP
\fBhttp_proxy ftp_proxy RSYNC_PROXY\fR = \fI[protocol://host:port]\fR
These variables are used by network clients such as \fBwget\fR(1) and
\fBrsync\fR(1). They are only required if you use a
proxy server for internet access.
.TP
\fBINSTALL_MASK\fR = \fI[space delimited list of filename patterns (globs)]\fR
Use this variable if you want to selectively prevent certain files
from being copied into your file system tree.  This does not work on
symlinks, but only on actual files (including directories). Useful if
you wish to filter out files like HACKING.gz and TODO.gz.

Patterns are matched against both the absolute path and the bare
filename of each file (or directory) to be installed.

The \fBINSTALL_MASK\fR is processed just before a package is merged.
Also supported is a \fBPKG_INSTALL_MASK\fR variable that behaves
exactly like \fBINSTALL_MASK\fR except that it is processed just
before creation of a binary package.

\fB***warning***\fR
.br
This does not place nice with filenames containing spaces. If you
supply a pattern with a space in it, that single pattern will be
interpreted as two separate patterns.

.I Examples:

.nf
# Prevent individual files from being installed.
INSTALL_MASK="/usr/bin/zless /usr/bin/zzxorcat"

# Prevent all PDF files from being installed.
INSTALL_MASK="*.pdf"

# Block PDF files one level beneath /usr/share/doc.
INSTALL_MASK="/usr/share/doc/*/*.pdf"

# Watch out! This will be interpreted as two patterns, and
# prevent both "README" AND all PDF files from being installed.
INSTALL_MASK="README\\ *.pdf"
.fi
.TP
.B LDFLAGS
A list of flags to pass to the compiler when the linker will be called. See
\fBld\fR(1) for linker flags, but don't forget that these flags will be passed
directly to the compiler. Thus, you must use '-Wl' to escape the flags
which only the linker understands (see \fBgcc\fR(1)).

\fB***warning***\fR
.br
Setting this and other *FLAGS variables arbitrarily may cause compile or
runtime failures. Bug reports submitted when nonstandard values are
enabled for these flags may be closed as INVALID.
.TP
.B MAKEOPTS
Use this variable if you want to use parallel make.  For example, if you
have a dual\-processor system, set this variable to "\-j2" or "\-j3" for
enhanced build performance with many packages. Suggested settings are
between \fICPUs+1\fR and \fI2*CPUs+1\fR. In order to avoid
excess load, the \fB\-\-load\-average\fR option is recommended.
For more information, see \fBmake\fR(1). Also see \fBemerge\fR(1) for
information about analogous \fB\-\-jobs\fR and \fB\-\-load\-average\fR options.
.TP
\fBNOCOLOR\fR = \fI["true" | "false"]\fR
Defines if color should be disabled by default.
.br
Defaults to false.
.TP
\fBPKGDIR\fR = \fI[path]\fR
Defines the location where created .tbz2 binary packages will be
stored when the \fBemerge\fR(1) \fB\-\-buildpkg\fR option is enabled.
By default, a given package is stored in a subdirectory corresponding
to it's category. However, for backward compatibility with the layout
used by older versions of portage, if the \fI${PKGDIR}/All\fR directory
exists then all packages will be stored inside of it and symlinks to
the packages will be created in the category subdirectories.
.br
Defaults to /var/cache/binpkgs.
.TP
.B PORT_LOGDIR
See \fIPORTAGE_LOGDIR\fR below. Deprecated.
.TP
.B PORT_LOGDIR_CLEAN
See \fIPORTAGE_LOGDIR_CLEAN\fR below. Deprecated.
.TP
\fBPORTAGE_BINHOST\fR = \fI[space delimited URI list]\fR
This is a list of hosts from which portage will grab prebuilt\-binary packages.
Each entry in the list must specify the full address of a directory
serving tbz2's for your system (this directory must contain a 'Packages' index
file). This is only used when running with
the get binary pkg options are given to \fBemerge\fR.  Review \fBemerge\fR(1)
for more information.
.TP
\fBPORTAGE_BINHOST_HEADER_URI\fR = \
\fI"ftp://login:pass@grp.mirror.site/pub/grp/i686/athlon\-xp/"\fR
This variable only makes sense on a system that will serve as a binhost and
build packages for clients.  It defines the URI header field for the package
index file which is located at ${PKGDIR}/Packages. Clients that have
\fBPORTAGE_BINHOST\fR properly configured will be able to fetch the index and
use the URI header field as a base URI for fetching binary packages. If the URI
header field is not defined then the client will use it's ${PORTAGE_BINHOST}
setting as the base URI.
.TP
.B PORTAGE_BINPKG_FORMAT
This variable sets default format used for binary packages. Possible values
are tar and rpm or both.
.TP
.B PORTAGE_BINPKG_TAR_OPTS
This variable contains options to be passed to the tar command for creation
of binary packages.
.TP
\fBPORTAGE_BUNZIP2_COMMAND\fR = \fI[bunzip2 command string]\fR
This variable should contain a command that is suitable for portage to call
for bunzip2 extraction operations.
.TP
\fBPORTAGE_BZIP2_COMMAND\fR = \fI[bzip2 command string]\fR
This variable should contain a command that is suitable for portage to call
for bzip2 compression operations. \fBPORTAGE_BZIP2_COMMAND\fR will also be
called for extraction operation, with -d appended, unless the
\fBPORTAGE_BUNZIP2_COMMAND\fR variable is set.
.TP
\fBPORTAGE_CHECKSUM_FILTER\fR = \fI[space delimited list of hash names]\fR
This variable may be used to filter the hash functions that are used to
verify integrity of files. Hash function names are case\-insensitive, and
the \fI*\fR and \fI\-*\fR wildcard tokens are supported.
.br
Defaults to the value of *.
.br
.I Examples:
.nf
# Use all available hash functions
PORTAGE_CHECKSUM_FILTER="*"
# Use any function except whirlpool
PORTAGE_CHECKSUM_FILTER="* \-whirlpool"
# Only use sha256
PORTAGE_CHECKSUM_FILTER="\-* sha256"
.fi
.TP
\fBPORTAGE_COMPRESS\fR = \fI"bzip2"\fR
This variable contains the command used to compress documentation during the
install phase.
.TP
\fBPORTAGE_COMPRESS_EXCLUDE_SUFFIXES\fR = \fI"gif htm[l]? jp[e]?g pdf png"\fR
This variable contains a space delimited list of file suffixes for which
matching files are excluded when the \fBPORTAGE_COMPRESS\fR command is
called. Regular expressions are supported and the match is performed only
against the portion of the file name which follows the last period character.
.TP
\fBPORTAGE_COMPRESS_FLAGS\fR = \fI"\-9"\fR
This variable contains flags for the \fBPORTAGE_COMPRESS\fR command.
.TP
.B PORTAGE_ELOG_CLASSES
.TP
.B PORTAGE_ELOG_COMMAND
.TP
.B PORTAGE_ELOG_MAILFROM
.TP
.B PORTAGE_ELOG_MAILSUBJECT
.TP
.B PORTAGE_ELOG_MAILURI
.TP
.B PORTAGE_ELOG_SYSTEM
Please see /usr/share/portage/config/make.conf.example for elog documentation.
.TP
\fBPORTAGE_FETCH_CHECKSUM_TRY_MIRRORS\fR = \fI5\fR
Number of mirrors to try when a downloaded file has an incorrect checksum.
.TP
\fBPORTAGE_FETCH_RESUME_MIN_SIZE\fR = \fI350K\fR
Minimum size of existing file for \fBRESUMECOMMAND\fR to be called. Files
smaller than this size will be removed and \fBFETCHCOMMAND\fR will be called
to download the file from the beginning. This is useful for helping to ensure
that small garbage files such as html 404 pages are properly discarded. The
variable should contain an integer number of bytes and may have a suffix such
as K, M, or G.
.TP
.B PORTAGE_GPG_DIR
The \fBgpg\fR(1) home directory that is used by \fBrepoman\fR(1)
when \fBsign\fR is in \fBFEATURES\fR.
.br
Defaults to $HOME/.gnupg.
.TP
.B PORTAGE_GPG_KEY
The \fBgpg\fR(1) key used by \fBrepoman\fR(1) to sign manifests
when \fBsign\fR is in \fBFEATURES\fR. In order to sign commits with
\fBgit\fR(1), you will need Git >=1.7.9 and your commit key will have
to be configured by \fI`git config user.signingkey key_id`\fR.
.TP
.B PORTAGE_GPG_SIGNING_COMMAND
The command used by \fBrepoman\fR(1) to sign manifests when \fBsign\fR is
in \fBFEATURES\fR.
.TP
\fBPORTAGE_GRPNAME\fR = \fI[group]\fR
Defines the groupname to use when executing in userpriv/etc... modes (i.e.
non-root).
.br
Defaults to portage.
.TP
\fBPORTAGE_INST_GID\fR = \fI[gid]\fR
Defines the group id when installing files via dobin/dosbin.  Useful when
running ebuild as yourself.
.br
Defaults to 0.
.TP
\fBPORTAGE_INST_UID\fR = \fI[uid]\fR
Defines the user id when installing files via dobin/dosbin.  Useful when
running ebuild as yourself.
.br
Defaults to 0.
.TP
\fBPORTAGE_IONICE_COMMAND\fR = \fI[ionice command string]\fR
This variable should contain a command for portage to call in order
to adjust the io priority of portage and it's subprocesses. The command
string should contain a \\${PID} place-holder that will be substituted
with an integer pid. For example, a value of "ionice \-c 3 \-p \\${PID}"
will set idle io priority. For more information about ionice, see
\fBionice\fR(1). This variable is unset by default.
.TP
.B PORTAGE_LOGDIR
This variable defines the directory in which per\-ebuild logs are kept.
Logs are created only when this is set. They are stored as
${CATEGORY}:${PF}:YYYYMMDD\-HHMMSS.log in the directory specified. If the
directory does not exist, it will be created automatically and group
permissions will be applied to it.  If the directory already exists, portage
will not modify it's permissions.
.TP
.B PORTAGE_LOGDIR_CLEAN
This variable should contain a command for portage to call in order
to clean PORTAGE_LOGDIR. The command string should contain a
\\${PORTAGE_LOGDIR} place\-holder that will be substituted
with the value of that variable. This variable will have no effect
unless \fBclean\-logs\fR is enabled in \fBFEATURES\fR.
.TP
\fBPORTAGE_NICENESS\fR = \fI[number]\fR
The value of this variable will be added to the current nice level that
emerge is running at.  In other words, this will not set the nice level,
it will increment it.  For more information about nice levels and what
are acceptable ranges, see \fBnice\fR(1).
.TP
\fBPORTAGE_RO_DISTDIRS\fR = \fI[space delimited list of directories]\fR
When a given file does not exist in \fBDISTDIR\fR, search for the file
in this list of directories. Search order is from left to right. Note
that the current implementation works by creating a symlink inside
\fBDISTDIR\fR, but that may change in the future.
.TP
\fBPORTAGE_RSYNC_EXTRA_OPTS\fR = \fI[rsync options string]\fR
Additional rsync options to be used by \fBemerge \-\-sync\fR.
.br
Defaults to no value.
.TP
\fBPORTAGE_RSYNC_INITIAL_TIMEOUT\fR = \fIinteger\fR
Used by \fBemerge \-\-sync\fR as a timeout for the initial connection to an
rsync server.
.br
Defaults to 15 seconds.
.TP
\fBPORTAGE_RSYNC_OPTS\fR = \fI[rsync options string]\fR
Default rsync options to be used by \fBemerge \-\-sync\fR.
.br
\fBDon't change this unless you know exactly what you're doing!\fR
.br
Defaults to "\-\-recursive \-\-links \-\-safe\-links \-\-perms \-\-times
\-\-compress \-\-force \-\-whole\-file \-\-delete \-\-stats
\-\-timeout=180 \-\-exclude='/distfiles' \-\-exclude='/local'
\-\-exclude='/packages'"
.TP
\fBPORTAGE_RSYNC_RETRIES\fR = \fI[NUMBER]\fR
The number of times rsync should retry on failed connections before
giving up. If set to a negative number, then retry until all possible
addresses are exhausted.
.br
Defaults to -1.
.TP
\fBPORTAGE_SSH_OPTS\fR = \fI[list of ssh options]\fR
Additional ssh options to be used when portage executes ssh or sftp.
This variable supports use of embedded quote characters to quote
whitespace or special shell characters within arguments (embedded
quotes must be escaped in make.conf settings).
.br
Defaults to no value.
.TP
\fBPORTAGE_SYNC_STALE\fR = \fI[NUMBER]\fR
Defines the number of days after the last `emerge \-\-sync` that a warning
message should be produced. A value of 0 will disable warnings.
.br
Defaults to 30.
.TP
\fBPORTAGE_TMPDIR\fR = \fI[path]\fR
Defines the location of the temporary build directories.
.br
Defaults to /var/tmp.

This should not be set to point anywhere under location of any repository.
.TP
\fBPORTAGE_USERNAME\fR = \fI[user]\fR
Defines the username to use when executing in userpriv/etc... modes (i.e.
non-root).
.br
Defaults to portage.
.TP
\fBPORTAGE_WORKDIR_MODE\fR = \fI"0700"\fR
This variable controls permissions for \fIWORKDIR\fR (see \fBebuild\fR(5)).
.TP
\fBPORTAGE_XATTR_EXCLUDE\fR = \fI[space delimited list of fnmatch patterns]\fR
This variable may be used to exclude specific attributes from being preserved
when \fBxattr\fR is in \fBFEATURES\fR.
.br
Defaults to "security.*" (security labels are special, see bug #461868).
.TP
\fBPORTDIR\fR = \fI[path]\fR
Defines the location of main repository. This variable is deprecated in favor of
settings in \fBrepos.conf\fR. If you change this, you must update
your /etc/portage/make.profile symlink accordingly.
.br
Defaults to /var/db/repos/gentoo.
.br
\fB***Warning***\fR
.br
Data stored inside \fBPORTDIR\fR is in peril of being overwritten or deleted by
the emerge \-\-sync command. The default value of
\fBPORTAGE_RSYNC_OPTS\fR will protect the default locations of
\fBDISTDIR\fR and \fBPKGDIR\fR, but users are warned that any other locations
inside \fBPORTDIR\fR are not necessarily safe for data storage.  You should not
put other data (such as overlays) in your \fBPORTDIR\fB.  Portage will walk
directory structures and may arbitrarily add invalid categories as packages.
.TP
\fBPORTDIR_OVERLAY\fR = \fI"[path] [different\-path] [etc...]"\fR
Defines the locations of other repositories. This variable is deprecated in
favor of settings in \fBrepos.conf\fR. This variable is a space\-delimited list of
directories.
.br
Defaults to no value.
.TP
\fBQA_STRICT_EXECSTACK = \fI"set"\fR
Set this to cause portage to ignore any \fIQA_EXECSTACK\fR override
settings from ebuilds.  See also \fBebuild\fR(5).
.TP
\fBQA_STRICT_FLAGS_IGNORED = \fI"set"\fR
Set this to cause portage to ignore any \fIQA_FLAGS_IGNORED\fR override
settings from ebuilds.  See also \fBebuild\fR(5).
.TP
\fBQA_STRICT_MULTILIB_PATHS = \fI"set"\fR
Set this to cause portage to ignore any \fIQA_MULTILIB_PATHS\fR override
settings from ebuilds.  See also \fBebuild\fR(5).
.TP
\fBQA_STRICT_PRESTRIPPED = \fI"set"\fR
Set this to cause portage to ignore any \fIQA_PRESTRIPPED\fR override
settings from ebuilds.  See also \fBebuild\fR(5).
.TP
\fBQA_STRICT_TEXTRELS = \fI"set"\fR
Set this to cause portage to ignore any \fIQA_TEXTREL\fR override
settings from ebuilds.  See also \fBebuild\fR(5).
.TP
\fBQA_STRICT_WX_LOAD = \fI"set"\fR
Set this to cause portage to ignore any \fIQA_WX_LOAD\fR override
settings from ebuilds.  See also \fBebuild\fR(5).
.TP
.B RESUMECOMMAND
This variable contains the command used for resuming package sources that
have been partially downloaded.  It should be defined using the same format
as \fBFETCHCOMMAND\fR, and must include any additional option(s) that may
be necessary in order to continue a partially downloaded file located at
\\${DISTDIR}/\\${FILE}.
.TP
\fBROOT\fR = \fI[path]\fR
Use \fBROOT\fR to specify the target root filesystem to be used for merging
packages or ebuilds.
Typically, you should set this setting in the environment rather than in
\fImake.conf\fR itself. It's commonly used for creating new build
images. Make sure you use an absolute path. Refer to the
\fBCross-compilation\fR section of \fBebuild\fR(5) for information about
how dependencies are handled for \fBROOT\fR.
.br
Defaults to /.
.TP
\fBRPMDIR\fR = \fI[path]\fR
Defines the location where created RPM packages will be stored.
.br
Defaults to /var/cache/rpm.
.TP
\fBSYNC\fR = \fI[RSYNC]\fR
Insert your preferred rsync mirror here.  This rsync server
is used to sync the local ebuild repository when `emerge \-\-sync` is run.

Note that the \fBSYNC\fR variable is now deprecated, and instead the
sync\-type and sync\-uri attributes in repos.conf should be used. See
\fBportage\fR(5) for more information.

Defaults to rsync://rsync.gentoo.org/gentoo\-portage
.RS
.TP
.B Usage:
(rsync|ssh)://[username@]hostname[:port]/(module|path)
.TP
.B Examples:
rsync://private\-mirror.com/portage\-module
.br
rsync://rsync\-user@private\-mirror.com:873/gentoo\-portage
.br
ssh://ssh\-user@192.168.0.1:22/var/db/repos/gentoo
.br
ssh://ssh\-user@192.168.0.1:22/\\${HOME}/portage\-storage
.TP
Note: For the ssh:// scheme, key\-based authentication might be of interest.
.RE
.TP
\fBUNINSTALL_IGNORE\fR = \fI[space delimited list of fnmatch patterns]\fR
This variable prevents uninstallation of files that match
specific \fBfnmatch\fR(3) patterns. In order to ignore file
collisions with these files at install time, the same patterns
can be added to the \fBCOLLISION_IGNORE\fR variable.
.br
Defaults to "/lib/modules/*".
.TP
\fBUSE\fR = \fI[space delimited list of USE items]\fR
This variable contains options that control the build behavior of several
packages.  More information in \fBebuild\fR(5).  Possible USE values
can be found in \fI/var/db/repos/gentoo/profiles/use.desc\fR.
.TP
\fBUSE_ORDER\fR = \fI"env:pkg:conf:defaults:pkginternal:features:repo:env.d"\fR
Determines the precedence of layers in the incremental stacking of the USE
variable. Precedence decreases from left to right such that env overrides
pkg, pkg overrides conf, and so forth.

.B ***warning***
.br
Do not modify this value unless you're a developer and you know what
you're doing. If you change this and something breaks, we will not help
you fix it.
.br
.RS
.TP
.B env
USE from the current environment variables (USE and those listed in USE_EXPAND)
.TP
.B pkg
Per\-package USE from \fB/etc/portage/package.use\fR (see \fBportage\fR(5))
.TP
.B conf
USE from make.conf
.TP
.B defaults
USE from make.defaults and package.use in the profile
(e.g. /etc/portage/make.profile/package.use) (see \fBportage\fR(5))
.TP
.B pkginternal
USE from \fBebuild\fR(5) IUSE defaults
.TP
.B features
Flags implied by FEATURES.  Currently includes USE=\fBtest\fR
for FEATURES=\fBtest\fR.
.TP
.B repo
USE from make.defaults and package.use in the repo's profiles/ top dir
(e.g. /var/db/repos/gentoo/profiles/package.use) (see \fBportage\fR(5))
.TP
.B env.d
USE from the environment variables, such as LINGUAS, defined by files in
\fI/etc/env.d/\fR
.RE

.SH "REPORTING BUGS"
Please report bugs via https://bugs.gentoo.org/
.SH "AUTHORS"
.nf
Daniel Robbins <drobbins@gentoo.org>
Nicholas Jones <carpaski@gentoo.org>
Mike Frysinger <vapier@gentoo.org>
Saleem Abdulrasool <compnerd@gentoo.org>
Arfrever Frehtes Taifersar Arahesis <arfrever@apache.org>
.fi
.SH "FILES"
.TP
\fB/etc/make.conf\fR and \fB/etc/portage/make.conf\fR
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/portage/make.conf\fR instead.
.TP
.B /etc/portage/color.map
Contains variables customizing colors.
.TP
.B /var/db/repos/gentoo/profiles/use.desc
Contains a list of all global USE flags.
.TP
.B /var/db/repos/gentoo/profiles/use.local.desc
Contains a list of all local USE variables.
.SH "SEE ALSO"
.BR emerge (1),
.BR portage (5),
.BR ebuild (1),
.BR ebuild (5)
.TP
The \fI/usr/lib/portage/bin/ebuild.sh\fR script.
.TP
The helper apps in \fI/usr/lib/portage/bin\fR.
