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

