make.conf
*********

Available make.conf settings for portage

SYNOPSIS
========

/etc/make.conf

DESCRIPTION
===========

This file contains various variables that are used by Portage.
Portage will check the currently-defined environment variables
first for any settings.  If no environment settings are found,
Portage then checks /etc/make.conf.  If no setting is found
in /etc/make.conf, Portage checks the profile's default setting
from /etc/make.profile/make.defaults. If no setting is found there, 
it finally checks make.globals.
Please note that all user
settings should be made in the environment or in /etc/make.conf,
which is intended to be customized by the user.

VARIABLES
=========

ACCEPT_KEYWORDS
---------------

:suggest: |accept_keywords|
:valdesc: space delimited list of KEYWORDS

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.

CCACHE_DIR
----------

:suggest: ${PORTAGE_TMPDIR}/ccache
:valdesc: path

Defines the location of the ccache working directory. See the ccache(1) man 
page for more information.

CCACHE_SIZE
-----------

:valdesc: size

This controls the space use limitations for ccache.  The default is 2 gigabytes 
('2G').  Sizes are specified with 'G', 'M', or 'K'.

CFLAGS
------

:suggest: |cflags|
:valdesc: valid gcc flags, see gcc manual

Use these variables to set the desired optimization/CPU instruction settings
for applications that you compile.  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.

CXXFLAGS
--------

:suggest: ${CFLAGS}
:valdesc: valid gcc flags, see gcc manual

`CFLAGS`_

CHOST
-----

:suggest: |chost|

This variable is passed by the ebuild scripts to the configure step as 
--host=${CHOST}.  This way you can force the build-host.

CLEAN_DELAY
-----------

:default: 5
:valdesc: integer

Determines how long the countdown delay will be for unmerge operations (including 
autoclean).

COLLISION_IGNORE
----------------

:valdesc: space delimited list of files and/or directories

This variable allows the user to disable `collision-protect`_ for specific files 
and/or directories.

CONFIG_PROTECT
--------------

:default: /etc
:valdesc: space delimited list of files and/or directories

All  files  and/or  directories  that are defined here will have "config file 
protection" enabled for them (unless overridden by _`CONFIG_PROTECT_MASK`).

CONFIG_PROTECT_MASK
-------------------

:default: /etc/env.d
:valdesc: space delimited list of files and/or directories

All  files  and/or  directories  that are defined here will have "config file 
protection" disabled for them.

DISTCC_DIR
----------

:suggest: ${PORTAGE_TMPDIR}/.distcc
:valdesc: path

Defines the location of the distcc working directory. See the distcc(1) man 
page for more information.

DISTDIR
-------

:default: |portdir|/distfiles
:valdesc: path

Defines the location of your local source file repository.

EBEEP_IGNORE
------------

Defines whether or not to ignore audible beeps when displaying important 
informational messages.  This variable is unset by default.

EMERGE_DEFAULT_OPTS
-------------------

:valdesc: emerge options

Options  to append to the end of the emerge(1) command line on every invocation.
These options will not be appended to the command line if --ignore-default-opts 
is specified.

EPAUSE_IGNORE
-------------

Defines whether or not to ignore short pauses that occur when displaying 
important informational messages.  This variable is unset by default.

FEATURES
--------

:default: sandbox distlocks metadata-transfer
:suggest: userpriv usersandbox
:valdesc: space separated list of feature flags

Various settings affecting portage behavior. Don't disable the defaults without
a good reason. This is an incremental variable. It can take a combination of the
following flags:

_`assume-digests`
	When commiting work to cvs with repoman(1), assume that all existing SRC_URI 
	digests are correct.  This feature also affects digest generation via 
	ebuild(1) and emerge(1) (emerge generates digests only when the digest 
	feature is enabled).

_`buildpkg`
	Binary packages will be created for all packages that are merged.

_`buildsyspkg`
	Build binary packages for just packages in the system set.

_`ccache`
	Enable portage support for the ccache package.  If ${CCACHE_DIR} is not set 
	in the users environment, then  portage will default to ${PORTAGE_TMPDIR}/ccache 
	(with userpriv) and to /root/.ccache otherwise.

_`collision-protect`
	A QA-feature to ensure that a package doesn't overwrite files it doesn't own.
	The `COLLISION_IGNORE`_ variable can be used to selectively disable this feature.

_`digest`
	Autogenerate digests for packages when running the emerge(1) command. If
	the `assume-digests`_ feature is also enabled then existing SRC_URI digests
	will be reused whenever they are available.

_`distcc`
	Enable portage support for the distcc package.

_`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).

_`fixpackages`
	Updates dependencies in binary packages to match the current tree, for 
	example after package moves. This can take a ot of time if you have many
	binary packages in `PKGDIR`_.

_`getbinpkg`
	Force emerges to always try to fetch files from the `PORTAGE_BINHOST`_.

_`installsources`
	Install source code into /usr/src/debug/${CATEGORY}/${PF} (also see
	`splitdebug`_). This feature works only if debugedit is installed.

_`keeptemp`
	Do not delete the temporary ebuild directory ${T} after the merge process.

_`keepwork`
	Do not delete the build directory ${WORKDIR} after the merge process. This
	may occupy a lot of diskspace.

_`metadata-transfer`
	Automatically perform a metadata transfer when emerge --sync is run.

_`mirror`
	This will cause `FETCHCOMMAND`_ to always be run even if the file already 
	exists in `DISTDIR`_.

_`noauto`
	When utilizing ebuild(1), only run the requested function.

_`noclean`
	Do no delete the source and temporary files after the merge process.

_`nodoc`
	Do not install documentation files in /usr/share/doc.

_`noinfo`
	Do not install info pages.

_`noman`
	Do not install manpages.

_`nostrip`
	Prevents the stripping of binaries that are merged to the live filesystem.

_`notitles`
	Disables xterm titlebar updates (which contains status info).

_`parallel-fetch`
	Fetch in the background while compiling.

_`sandbox`
	Use sys-apps/sandbox when building packages to protect the live filesystem.

_`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 `suidctl`_ below.

_`sign`
	When commiting work to cvs with repoman(1), sign the Manifest with 
	a GPG key. Read about the `PORTAGE_GPG_KEY`_ variable.

_`splitdebug`
	Prior to stripping ELF etdyn and etexec files, the debugging info is 
	stored for later use by debuggers. This feature is disabled by
	`nostrip`_. For installation of source code, see `installsources`_.

_`strict`
	Have portage react strongly to conditions that have the potential to be 
	dangerous (like missing or incorrect Manifests entries).

_`stricter`
	Have portage react strongly to conditions that may conflict with system
	security provisions (for example textrels, executable stack). Read about
	the `QA_STRICT`_ variables below.

_`suidctl`
	Before merging packages to the live filesystem, automatically strip setuid 
	bits from any file that is not listed in /etc/portage/suidctl.conf.

_`test`
	Run package-specific tests during each merge to help make sure 
	the package compiled properly.  See *test* in ebuild(1) 
	and *src_test()* in ebuild(5).

_`userfetch`
	When portage is run as root, drop privileges to portage:portage during the
	fetching of package sources.

_`userpriv`
	Allow portage to drop root privileges and compile packages as 
	portage:portage without `sandbox`_ (unless `usersandbox`_ is also used).

_`usersandbox`
	Enable the sandbox in the compile phase, when running without root privs 
	(`userpriv`_).

FETCHCOMMAND
------------

:default: /usr/bin/wget -t 5 -T 60 --passive-ftp -P \${DISTDIR} \${URI}
:suggest: /usr/bin/wget -t 5 -T 60 --passive-ftp --limit-rate=200k \${URI} -P \${DISTDIR}

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} and \${URI}.

GENTOO_MIRRORS
--------------

:default: http://distfiles.gentoo.org http://distro.ibiblio.org/pub/linux/distributions/gentoo
:valdesc: space separated list of mirror locations

Insert your space-seperated list of local mirrors here. These locations are 
used to download files before the ones listed in the ebuild scripts. Merging 
'app-portage/mirrorselect' can help to select an appropriate mirror.

INSTALL_MASK
------------

:valdesc: space delimited list of file names

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.  Useful if you wish to filter out files like HACKING.gz and
TODO.gz.

MAKEOPTS
--------

:suggest: -j2
:valdesc: make options

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 CPUs+1 and 2*CPUs+1. For more information, see make(1).

NOCOLOR
-------

:default: false
:valdesc: true | false

Defines if color should be disabled (this is overridden by CLI options).

PKGDIR
------

:default: |portdir|/packages
:valdesc: path

Defines the location where created .tbz2 binary packages will be stored.

PORT_LOGDIR
-----------

:suggest: /var/log/portage
:valdesc: path

This variable defines the directory in which per-ebuild logs are kept.
Logs are created only when this is set and writable.

PORTAGE_BINHOST
---------------

:suggest: ftp://login:pass@grp.mirror.site/pub/grp/i686/athlon-xp
:valdesc: URI to a binary package server

This is the host from which portage will grab prebuilt-binary packages.
The list is a single entry specifying the full address of the directory 
serving the tbz2's for your system.  This is only used when running with 
the get binary pkg options are given to emerge.  Review emerge(1) 
for more information.  Note that it should point to the 'All' directory on 
the host that creates the binary packages and not to the root of the `PKGDIR`_.

PORTAGE_ELOG_CLASSES
--------------------

:default: log warn error
:valdesc: space separated list of logging levels

This variable defines which ebuild messages should be logged by the elog 
subsystem. Possible values are info, log, warn and error.

PORTAGE_ELOG_SYSTEM
-------------------

:suggest: save mail
:valdesc: space separated list of elog handlers

Selects which elog message handlers are invoked by portage to deliver messages
captured by elog. If no handler is specified logging is effectively disabled.
Default handlers (other packages may contain additional handlers) are:

save
	saves one logfile per package in ${PORT_LOGDIR}/elog, /var/log/portage/elog 
	if `PORT_LOGDIR`_ is unset

custom
	passes all messages to `PORTAGE_ELOG_COMMAND`_

syslog
	sends all messages to syslog

mail
	sends all messages to the address configured in `PORTAGE_ELOG_MAILURI`_

PORTAGE_ELOG_COMMAND
--------------------

:suggest: /path/to/logprocessor -p '\${PACKAGE}' -f '\${LOGFILE}'

Only used with the "custom" logging module. Specifies a command
to process log messages. Two variables are expanded:

${PACKAGE}
	expands to the cpv entry of the processed package (see PVR in ebuild(5))

${LOGFILE}
	absolute path to the logfile

Both variables have to be quoted with single quotes

PORTAGE_ELOG_MAILURI
--------------------

:default: root
:suggest: user@some.domain mail.some.domain

This variable holds all important settings for the mail module. In most cases 
listing the recipient address andthe receiving mailserver should be sufficient,
but you can also use advanced settings like authentication or TLS. The full 
syntax is:
``address [[user:passwd@]mailserver[:port]]``
where

address
	recipient address

user
	username for smtp auth (defaults to none)

passwd
	password for smtp auth (defaults to none)

mailserver
	SMTP server that should be used to deliver the mail (defaults to localhost).
	Alternatively this can also be a the path to a sendmail binary if you don't
	want to use SMTP (e.g. if you only need local delivery to a mbox).

port
	port to use on the given SMTP server (defaults to 25, values > 100000 
	indicate that starttls should be used on (port-100000))

PORTAGE_ELOG_MAILFROM
---------------------

:default: portage
:suggest: portage@some.domain
:valdesc: sender address

You can set the from-address of logmails with this variable, if unset mails 
are sent by "portage" (this default may fail in some environments).

PORTAGE_ELOG_MAILSUBJECT
------------------------

:default: [portage] ebuild log for \${PACKAGE} on \${HOST}
:suggest: package \${PACKAGE} merged on \${HOST} with notice
:valdesc: mail subject template

Template string to be used as subject for logmails. The following variables 
are exanded:

${PACKAGE}
	see description of `PORTAGE_ELOG_COMMAND`_

${HOST}
	FQDN of the host portage is running on

PORTAGE_GPG_KEY
---------------

:valdesc: GPG key id

This variable tells repoman which GPG key to use for signing Manifests.

PORTAGE_NICENESS
----------------

:suggest: 3
:valdesc: integer

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 nice(1).

PORTAGE_RSYNC_EXTRA_OPTS
------------------------

:suggest: --exclude=/etc/portage/rsync_exclude
:valdesc: rsync options

Additional rsync options to be used by emerge --sync.

PORTAGE_RSYNC_OPTS
------------------

:default: --recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages
:valdesc: rsync options

Default rsync options to be used by emerge --sync. **Don't change this unless
you know exactly what you're doing!**

PORTAGE_RSYNC_RETRIES
---------------------

:default: 3
:valdesc: integer

The number of times rsync should retry on failed connections before giving up.

PORTAGE_TMPDIR
--------------

:default: /var/tmp
:valdesc: path

Defines the location of the temporary build directories.

PORTDIR
-------

:default: |portdir|
:valdesc: path

Defines the location of your Portage tree.

PORTDIR_OVERLAY
---------------

:suggest: |portdir|/local
:valdesc: space separated list of overlay paths

Defines the directories in which user made ebuilds are be stored.

RESUMECOMMAND
-------------

:default: /usr/bin/wget -c -t 5 -T 60 --passive-ftp -P \${DISTDIR} \${URI}
:suggest: /usr/bin/wget -c -t 5 -T 60 --passive-ftp --limit-rate=200k \${URI} -P \${DISTDIR}

This variable contains the command used for resuming package sources that
have been partially downloaded. It should be defined using the same format
as `FETCHCOMMAND`_.

.. _QA_STRICT:

QA_STRICT_EXECSTACK
-------------------

:suggest: set

Set this to instruct portage to ignore any QA_EXECSTACK override settings from
ebuilds. See also ebuild(5).

QA_STRICT_WX_LOAD
-----------------

:suggest: set

Set this to instruct portage to ignore any QA_WX_LOAD override settings from
ebuilds. See also ebuild(5).

QA_STRICT_TEXTRELS
------------------

:suggest: set

Set this to instruct portage to ignore any QA_TEXTRELS override settings from
ebuilds. See also ebuild(5).

ROOT
----

:default: /
:valdesc: path

Use this variable to specify the target root filesystem to be used for merging 
packages or ebuilds. All RDEPEND and PDEPEND will be installed 
into ROOT while all DEPEND will be still be installed into /.  
Typically, you should set this setting in the environment rather than in 
/etc/make.conf itself. It's commonly used for creating new build 
images. Make sure you use an absolute path.

RPMDIR
------

:default: |portdir|/rpm
:valdesc: path

Defines the location where created RPM packages will be stored. Note that RPM 
support in portage is experimental at best.

SYNC
----

:default: rsync://rsync.gentoo.org/gentoo-portage
:valdesc: URI to a portage tree server (rsync or cvs)

Insert your preferred rsync mirror here.  This rsync server is used to sync 
the local portage tree when emerge --sync is run. Only one server can be 
specified.

USE
---

:suggest: X gtk gnome -alsa
:valdesc: space delimited list of USE items

This variable contains options that control the build behavior of several
packages.  More information in ebuild(5).  Possible USE values
can be found in |portdir|/profiles/use.desc and |portdir|/profiles/use.local.desc.

USE_EXPAND
----------

:suggest: LINGUAS VIDEO_CARDS
:valdesc: space separated list of variable names

Any variable listed here will be used to augment `USE`_ by inserting a new flag
for every value in that variable, so USE_EXPAND="FOO" and FOO="bar bla" results
in USE="foo_bar foo_bla".

USE_EXPAND_HIDDEN
-----------------

:valdesc: space separated list of variable names

Names of `USE_EXPAND`_ variables that should not be shown in the verbose merge
list output of the emerge(1) command.

USE_ORDER
---------

:default: env:pkg:conf:defaults:pkginternal
:valdesc: colon separated list of portage config layers

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. *Don't change this unless you know what 
you're doing!* Available layers are:

env
	USE from the current USE environment variable if it exists

pkg
	Per-package USE from /etc/portage/package.use (see portage(5))

conf
	USE from make.conf

defaults
	USE from make.defaults and package.use in the profile (see portage(5))

pkginternal
	USE from ebuild IUSE defaults (flags enabled via a + prefix; see ebuild(5))

REPORTING BUGS
==============

Please report bugs via http://bugs.gentoo.org/

AUTHORS
=======

- Daniel Robbins <drobbins@gentoo.org>
- Nicholas Jones <carpaski@gentoo.org>
- Mike Frysinger <vapier@gentoo.org>
- Saleem Abdulrasool <compnerd@gentoo.org>
- Marius Mauch <genone@gentoo.org>

FILES
=====

/etc/make.conf
	Contains user-supplied variables and overwrites those in make.defaults.

/usr/share/portage/config/make.globals
	Contains portage defaults for many variables listed here. Don't change this,
	edit /etc/make.conf instead.

|portdir|/profiles/use.desc
	Contains a list of all global USE flags with brief descriptions.

|portdir|/profiles/use.local.desc
	Contains a list of all local USE variables with brief descriptions.

SEE ALSO
========

- emerge(1)
- portage(5)
- ebuild(1)
- ebuild(5)

.. Substitutions:
.. |accept_keywords| replace:: ~x86
.. |cflags| replace:: -march=i686 -O2 -pipe
.. |chost| replace:: i686-gentoo-linux-gnu
.. |portdir| replace:: /usr/portage

