# WARNING: default set configuration, DO NOT CHANGE.
# If you want to change anything redefine the relevant section in 
# /etc/portage/sets.conf. Any changes to this file will be lost on the next 
# portage update, and configuration errors here might upset portage in 
# unexpected ways.

# Not much that could be changed for world, so better leave it alone
[world]
class = portage.sets.base.DummyPackageSet
packages = @selected @system

# Not much that could be changed for world, so better leave it alone
[selected]
class = portage.sets.files.WorldSelectedSet

# Same as for world, though later portage versions might use a different class
[system]
class = portage.sets.profiles.PackagesSystemSet

# For security there are multiple classes available, but differences are 
# rather small (normally there should be no visible difference):
# - AffectedSet: include all GLSAs that cover a vulnerable package
# - NewAffectedSet: include all GLSAs that cover a vulnerable package and 
#   haven't been applied previously
# - NewGlsaSet: include all GLSAs that haven't been applied
# - SecuritySet: include all GLSAs
[security]
class = portage.sets.security.NewAffectedSet

# A superset of the classic <parameter>world</parameter> target, a set created
# by this class contains SLOT atoms to match all installed packages. Note that
# use of this set makes it impossible for emerge to solve blockers by automatic
# uninstallation of blocked packages.
[installed]
class = portage.sets.dbapi.EverythingSet

# The following treats all files in /etc/portage/sets as a package set called
# '$filename'.
[usersets]
class = portage.sets.files.StaticFileSet
multiset = true
directory =  %(PORTAGE_CONFIGROOT)setc/portage/sets
world-candidate = True

# Set to rebuild all packages that need a preserved lib that only remains due
# to FEATURES=preserve-libs
[preserved-rebuild]
class = portage.sets.libs.PreservedLibraryConsumerSet

# Installed ebuilds that inherit from known live eclasses.
[live-rebuild]
class = portage.sets.dbapi.VariableSet
variable = INHERITED
includes = bzr cvs darcs git mercurial subversion tla

# Installed packages that own files inside /lib/modules.
[module-rebuild]
class = portage.sets.dbapi.OwnerSet
files = %(ROOT)slib/modules

# Binary packages that have a different build time from a currently
# installed package of the exact same version.
[rebuilt-binaries]
class = portage.sets.dbapi.RebuiltBinaries

# Installed packages for which the highest visible ebuild
# version is lower than the currently installed version.
[downgrade]
class = portage.sets.dbapi.DowngradeSet

# Installed packages for which there are no visible ebuilds
# corresponding to the same $CATEGORY/$PN:$SLOT.
[unavailable]
class = portage.sets.dbapi.UnavailableSet
