# portage: Constants # Copyright 1998-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 import os from portage import installation # =========================================================================== # START OF CONSTANTS -- START OF CONSTANTS -- START OF CONSTANTS -- START OF # =========================================================================== # There are two types of variables here which can easily be confused, # resulting in arbitrary bugs, mainly exposed with an offset # installation (Prefix). The two types relate to the usage of # config_root or target_root. # The first, config_root (PORTAGE_CONFIGROOT), can be a path somewhere, # from which all derived paths need to be relative (e.g. # USER_CONFIG_PATH) without EPREFIX prepended in Prefix. This means # config_root can for instance be set to "$HOME/my/config". Obviously, # in such case it is not appropriate to prepend EPREFIX to derived # constants. The default value of config_root is EPREFIX (in non-Prefix # the empty string) -- overriding the value loses the EPREFIX as one # would expect. # Second there is target_root (ROOT) which is used to install somewhere # completely else, in Prefix of limited use. Because this is an offset # always given, the EPREFIX should always be applied in it, hence the # code always prefixes them with EROOT. # The variables in this file are grouped by config_root, target_root. # variables used with config_root (these need to be relative) USER_CONFIG_PATH = "etc/portage" BINREPOS_CONF_FILE = f"{USER_CONFIG_PATH}/binrepos.conf" MAKE_CONF_FILE = f"{USER_CONFIG_PATH}/make.conf" MODULES_FILE_PATH = f"{USER_CONFIG_PATH}/modules" CUSTOM_PROFILE_PATH = f"{USER_CONFIG_PATH}/profile" USER_VIRTUALS_FILE = f"{USER_CONFIG_PATH}/virtuals" EBUILD_SH_ENV_FILE = f"{USER_CONFIG_PATH}/bashrc" EBUILD_SH_ENV_DIR = f"{USER_CONFIG_PATH}/env" CUSTOM_MIRRORS_FILE = f"{USER_CONFIG_PATH}/mirrors" COLOR_MAP_FILE = f"{USER_CONFIG_PATH}/color.map" PROFILE_PATH = f"{USER_CONFIG_PATH}/make.profile" MAKE_DEFAULTS_FILE = f"{PROFILE_PATH}/make.defaults" # FIXME: not used DEPRECATED_PROFILE_FILE = f"{PROFILE_PATH}/deprecated" # variables used with targetroot (these need to be absolute, but not # have a leading '/' since they are used directly with os.path.join on EROOT) VDB_PATH = "var/db/pkg" CACHE_PATH = "var/cache/edb" PRIVATE_PATH = "var/lib/portage" WORLD_FILE = f"{PRIVATE_PATH}/world" WORLD_SETS_FILE = f"{PRIVATE_PATH}/world_sets" CONFIG_MEMORY_FILE = f"{PRIVATE_PATH}/config" REPO_REVISIONS = f"{PRIVATE_PATH}/repo_revisions" NEWS_LIB_PATH = "var/lib/gentoo" # these variables get EPREFIX prepended automagically when they are # translated into their lowercase variants DEPCACHE_PATH = f"/{CACHE_PATH}/dep" if installation.TYPE == installation.TYPES.MODULE: GLOBAL_CONFIG_PATH = "/share/portage/config" else: GLOBAL_CONFIG_PATH = "/usr/share/portage/config" # these variables are not used with target_root or config_root # NOTE: Use realpath(__file__) so that python module symlinks in site-packages # are followed back to the real location of the whole portage installation. if installation.TYPE == installation.TYPES.SYSTEM: PORTAGE_BASE_PATH = """@PORTAGE_BASE_PATH@""" elif installation.TYPE == installation.TYPES.MODULE: PORTAGE_BASE_PATH = os.path.join( os.path.realpath(__import__("sys").prefix), "lib/portage" ) else: PORTAGE_BASE_PATH = os.path.join( os.sep, *os.path.realpath(__file__).split(os.sep)[:-3] ) if installation.TYPE == installation.TYPES.SYSTEM: PORTAGE_BIN_PATH = """@PORTAGE_BIN_PATH@""" else: PORTAGE_BIN_PATH = f"{PORTAGE_BASE_PATH}/bin" # The EPREFIX for the current install is hardcoded here, but access to this # constant should be minimal, in favor of access via the EPREFIX setting of # a config instance (since it's possible to contruct a config instance with # a different EPREFIX). Therefore, the EPREFIX constant should *NOT* be used # in the definition of any other constants within this file. if installation.TYPE == installation.TYPES.SYSTEM: EPREFIX = BINARY_PREFIX = "@EPREFIX@" elif installation.TYPE == installation.TYPES.MODULE: EPREFIX = __import__("sys").prefix BINARY_PREFIX = "" else: EPREFIX = BINARY_PREFIX = "" PORTAGE_PYM_PATH = os.path.realpath(os.path.join(__file__, "../..")) LOCALE_DATA_PATH = f"{PORTAGE_BASE_PATH}/locale" # FIXME: not used EBUILD_SH_BINARY = f"{PORTAGE_BIN_PATH}/ebuild.sh" MISC_SH_BINARY = f"{PORTAGE_BIN_PATH}/misc-functions.sh" SANDBOX_BINARY = f"{BINARY_PREFIX}/usr/bin/sandbox" FAKEROOT_BINARY = f"{BINARY_PREFIX}/usr/bin/fakeroot" BASH_BINARY = f"{BINARY_PREFIX}/bin/bash" MOVE_BINARY = f"{BINARY_PREFIX}/bin/mv" PRELINK_BINARY = f"{BINARY_PREFIX}/usr/sbin/prelink" INVALID_ENV_FILE = "/etc/spork/is/not/valid/profile.env" MERGING_IDENTIFIER = "-MERGING-" REPO_NAME_FILE = "repo_name" REPO_NAME_LOC = f"profiles/{REPO_NAME_FILE}" PORTAGE_PACKAGE_ATOM = "sys-apps/portage" LIBC_PACKAGE_ATOM = "virtual/libc" OS_HEADERS_PACKAGE_ATOM = "virtual/os-headers" CVS_PACKAGE_ATOM = "dev-vcs/cvs" GIT_PACKAGE_ATOM = "dev-vcs/git" HG_PACKAGE_ATOM = "dev-vcs/mercurial" RSYNC_PACKAGE_ATOM = "net-misc/rsync" INCREMENTALS = ( "ACCEPT_KEYWORDS", "CONFIG_PROTECT", "CONFIG_PROTECT_MASK", "ENV_UNSET", "FEATURES", "IUSE_IMPLICIT", "PRELINK_PATH", "PRELINK_PATH_MASK", "PROFILE_ONLY_VARIABLES", "USE", "USE_EXPAND", "USE_EXPAND_HIDDEN", "USE_EXPAND_IMPLICIT", "USE_EXPAND_UNPREFIXED", ) EBUILD_PHASES = ( "pretend", "setup", "unpack", "prepare", "configure", "compile", "test", "install", "package", "instprep", "preinst", "postinst", "prerm", "postrm", "nofetch", "config", "info", "other", ) SUPPORTED_FEATURES = frozenset( ( "assume-digests", "binpkg-docompress", "binpkg-dostrip", "binpkg-ignore-signature", "binpkg-logs", "binpkg-multi-instance", "binpkg-request-signature", "binpkg-signing", "buildpkg", "buildpkg-live", "buildsyspkg", "candy", "case-insensitive-fs", "ccache", "chflags", "clean-logs", "collision-protect", "compress-build-logs", "compressdebug", "compress-index", "config-protect-if-modified", "dedupdebug", "digest", "distcc", "distlocks", "downgrade-backup", "ebuild-locks", "fail-clean", "fakeroot", "fixlafiles", "force-mirror", "getbinpkg", "gpg-keepalive", "icecream", "installsources", "ipc-sandbox", "keeptemp", "keepwork", "lmirror", "merge-sync", "merge-wait", "metadata-transfer", "mirror", "mount-sandbox", "multilib-strict", "network-sandbox", "network-sandbox-proxy", "news", "noauto", "noclean", "nodoc", "noinfo", "noman", "nostrip", "notitles", "parallel-fetch", "parallel-install", "pid-sandbox", "pkgdir-index-trusted", "prelink-checksums", "preserve-libs", "protect-owned", "python-trace", "qa-unresolved-soname-deps", "sandbox", "selinux", "sesandbox", "sfperms", "sign", "skiprocheck", "splitdebug", "split-elog", "split-log", "strict", "strict-keepdir", "stricter", "suidctl", "test", "test-fail-continue", "unknown-features-filter", "unknown-features-warn", "unmerge-backup", "unmerge-logs", "unmerge-orphans", "unprivileged", "userfetch", "userpriv", "usersandbox", "usersync", "warn-on-large-env", "webrsync-gpg", "xattr", ) ) EAPI = 8 HASHING_BLOCKSIZE = 32768 MANIFEST2_HASH_DEFAULTS = frozenset(("BLAKE2B", "SHA512")) MANIFEST2_HASH_DEFAULT = "BLAKE2B" MANIFEST2_IDENTIFIERS = ("AUX", "MISC", "DIST", "EBUILD") # Redefine EPREFIX from the environment if set if "PORTAGE_OVERRIDE_EPREFIX" in os.environ: EPREFIX = os.environ["PORTAGE_OVERRIDE_EPREFIX"] if EPREFIX: EPREFIX = os.path.normpath(EPREFIX) if EPREFIX == os.sep: EPREFIX = "" VCS_DIRS = ("CVS", "RCS", "SCCS", ".bzr", ".git", ".hg", ".svn") # List of known live eclasses. Keep it in sync with cnf/sets/portage.conf LIVE_ECLASSES = frozenset( ( "bzr", "cvs", "darcs", "git-2", "git-r3", "golang-vcs", "mercurial", "subversion", ) ) SUPPORTED_BINPKG_FORMATS = ("tar", "rpm") SUPPORTED_GENTOO_BINPKG_FORMATS = ("xpak", "gpkg") SUPPORTED_XPAK_EXTENSIONS = (".tbz2", ".xpak") SUPPORTED_GPKG_EXTENSIONS = (".gpkg.tar",) # Time formats used in various places like metadata.chk. TIMESTAMP_FORMAT = "%a, %d %b %Y %H:%M:%S +0000" # to be used with time.gmtime() # Top-level names of Python packages installed by Portage. PORTAGE_PYM_PACKAGES = ("_emerge", "portage") RETURNCODE_POSTINST_FAILURE = 5 # =========================================================================== # END OF CONSTANTS -- END OF CONSTANTS -- END OF CONSTANTS -- END OF CONSTANT # =========================================================================== # Private constants for use in conditional code in order to minimize the diff # between branches. _DEPCLEAN_LIB_CHECK_DEFAULT = True _ENABLE_SET_CONFIG = True