aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Le Cuirot <chewi@gentoo.org>2017-09-30 21:45:54 +0100
committerZac Medico <zmedico@gentoo.org>2018-05-01 01:28:43 -0700
commitd8d47bf451bb3fd6bce1cdb035a5f12253f5a167 (patch)
tree6ada4f0bafb51de8e4b3f1b611395550aff880ed
parentExport SYSROOT and ESYSROOT in ebuild env in EAPI 7 (diff)
downloadportage-d8d47bf451bb3fd6bce1cdb035a5f12253f5a167.tar.gz
portage-d8d47bf451bb3fd6bce1cdb035a5f12253f5a167.tar.bz2
portage-d8d47bf451bb3fd6bce1cdb035a5f12253f5a167.zip
Export BROOT to ebuild env in EAPI 7
Export the BROOT variable corresponding to the location where BDEPEND are installed. Bug: https://bugs.gentoo.org/317337
-rw-r--r--bin/eapi.sh4
-rwxr-xr-xbin/ebuild.sh3
-rw-r--r--bin/phase-functions.sh3
-rw-r--r--man/ebuild.56
-rw-r--r--pym/portage/eapi.py7
-rw-r--r--pym/portage/package/ebuild/_config/LocationsManager.py4
-rw-r--r--pym/portage/package/ebuild/_config/special_env_vars.py4
-rw-r--r--pym/portage/package/ebuild/config.py10
-rw-r--r--repoman/cnf/qa_data/qa_data.yaml2
-rw-r--r--repoman/man/repoman.12
-rw-r--r--repoman/pym/repoman/modules/linechecks/assignment/assignment.py9
-rw-r--r--repoman/pym/repoman/modules/linechecks/quotes/quotes.py3
12 files changed, 49 insertions, 8 deletions
diff --git a/bin/eapi.sh b/bin/eapi.sh
index b4d8c9a90..3f4c9691b 100644
--- a/bin/eapi.sh
+++ b/bin/eapi.sh
@@ -30,6 +30,10 @@ ___eapi_has_prefix_variables() {
[[ ! ${1-${EAPI-0}} =~ ^(0|1|2)$ || " ${FEATURES} " == *" force-prefix "* ]]
}
+___eapi_has_BROOT() {
+ [[ ! ${1-${EAPI-0}} =~ ^(0|1|2|3|4|4-python|4-slot-abi|5|5-hdepend|5-progress|6)$ ]]
+}
+
___eapi_has_SYSROOT() {
[[ ! ${1-${EAPI-0}} =~ ^(0|1|2|3|4|4-python|4-slot-abi|5|5-hdepend|5-progress|6)$ ]]
}
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 11441bfb2..98ed570c2 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -769,6 +769,9 @@ else
if ___eapi_has_prefix_variables; then
declare -r ED EPREFIX EROOT
fi
+ if ___eapi_has_BROOT; then
+ declare -r BROOT
+ fi
# If ${EBUILD_FORCE_TEST} == 1 and USE came from ${T}/environment
# then it might not have USE=test like it's supposed to here.
diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index 1e096cddc..1f9faaa41 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -100,6 +100,9 @@ __filter_readonly_variables() {
filtered_vars="$readonly_bash_vars $bash_misc_vars
$PORTAGE_READONLY_VARS $misc_garbage_vars"
+ if ___eapi_has_BROOT; then
+ filtered_vars+=" BROOT"
+ fi
if ___eapi_has_SYSROOT; then
filtered_vars+=" SYSROOT"
fi
diff --git a/man/ebuild.5 b/man/ebuild.5
index eb27d43bb..9f491dd73 100644
--- a/man/ebuild.5
+++ b/man/ebuild.5
@@ -527,6 +527,12 @@ Beginning with \fBEAPI 3\fR, contains
"${ROOT%/}${EPREFIX}/" for convenience
purposes. Do not modify this variable.
.TP
+.B BROOT\fR = \fI"${EPREFIX}"
+Beginning with \fBEAPI 7\fR, the absolute path to the root directory
+containing build dependencies satisfied by BDEPEND, typically
+executable build tools. This includes any applicable offset prefix. Do
+not modify this variable.
+.TP
.B DESCRIPTION\fR = \fI"A happy little package"
Should contain a short description of the package.
.TP
diff --git a/pym/portage/eapi.py b/pym/portage/eapi.py
index f34e19ac9..158d58243 100644
--- a/pym/portage/eapi.py
+++ b/pym/portage/eapi.py
@@ -123,13 +123,17 @@ def eapi_path_variables_end_with_trailing_slash(eapi):
return eapi in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi",
"5", "5-progress", "6")
+def eapi_has_broot(eapi):
+ return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi",
+ "5", "5-progress", "5-hdepend", "6")
+
def eapi_has_sysroot(eapi):
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi",
"5", "5-progress", "5-hdepend", "6")
_eapi_attrs = collections.namedtuple('_eapi_attrs',
'allows_package_provided '
- 'bdepend dots_in_PN dots_in_use_flags exports_EBUILD_PHASE_FUNC '
+ 'bdepend broot dots_in_PN dots_in_use_flags exports_EBUILD_PHASE_FUNC '
'exports_PORTDIR exports_ECLASSDIR '
'feature_flag_test feature_flag_targetroot '
'hdepend iuse_defaults iuse_effective posixish_locale '
@@ -159,6 +163,7 @@ def _get_eapi_attrs(eapi):
eapi_attrs = _eapi_attrs(
allows_package_provided=(eapi is None or eapi_allows_package_provided(eapi)),
bdepend = (eapi is not None and eapi_has_bdepend(eapi)),
+ broot = (eapi is None or eapi_has_broot(eapi)),
dots_in_PN = (eapi is None or eapi_allows_dots_in_PN(eapi)),
dots_in_use_flags = (eapi is None or eapi_allows_dots_in_use_flags(eapi)),
empty_groups_always_true = (eapi is not None and eapi_empty_groups_always_true(eapi)),
diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index 3a2697145..b57443ba7 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -73,6 +73,10 @@ class LocationsManager(object):
self.esysroot = self.sysroot.rstrip(os.sep) + self.eprefix + os.sep
+ # TODO: Set this via the constructor using
+ # PORTAGE_OVERRIDE_EPREFIX.
+ self.broot = portage.const.EPREFIX
+
def load_profiles(self, repositories, known_repository_paths):
known_repository_paths = set(os.path.realpath(x)
for x in known_repository_paths)
diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/pym/portage/package/ebuild/_config/special_env_vars.py
index 68770e237..3323ff064 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -14,7 +14,7 @@ import re
# to enter the config instance from the external environment or
# configuration files.
env_blacklist = frozenset((
- "A", "AA", "BDEPEND", "CATEGORY", "DEPEND", "DESCRIPTION",
+ "A", "AA", "BDEPEND", "BROOT", "CATEGORY", "DEPEND", "DESCRIPTION",
"DOCS", "EAPI",
"EBUILD_FORCE_TEST", "EBUILD_PHASE",
"EBUILD_PHASE_FUNC", "EBUILD_SKIP_MANIFEST",
@@ -42,7 +42,7 @@ environ_whitelist = []
# environment in order to prevent sandbox from sourcing /etc/profile
# in it's bashrc (causing major leakage).
environ_whitelist += [
- "ACCEPT_LICENSE", "BASH_ENV", "BUILD_PREFIX", "COLUMNS", "D",
+ "ACCEPT_LICENSE", "BASH_ENV", "BROOT", "BUILD_PREFIX", "COLUMNS", "D",
"DISTDIR", "DOC_SYMLINKS_DIR", "EAPI", "EBUILD",
"EBUILD_FORCE_TEST",
"EBUILD_PHASE", "EBUILD_PHASE_FUNC", "ECLASSDIR", "ECLASS_DEPTH", "ED",
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index e7a047884..f9b257b86 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -346,6 +346,7 @@ class config(object):
config_root = locations_manager.config_root
sysroot = locations_manager.sysroot
esysroot = locations_manager.esysroot
+ broot = locations_manager.broot
abs_user_config = locations_manager.abs_user_config
make_conf_paths = [
os.path.join(config_root, 'etc', 'make.conf'),
@@ -509,6 +510,7 @@ class config(object):
self["EPREFIX"] = eprefix
self["EROOT"] = eroot
self["ESYSROOT"] = esysroot
+ self["BROOT"] = broot
known_repos = []
portdir = ""
portdir_overlay = ""
@@ -680,6 +682,8 @@ class config(object):
self.backup_changes("EROOT")
self["ESYSROOT"] = esysroot
self.backup_changes("ESYSROOT")
+ self["BROOT"] = broot
+ self.backup_changes("BROOT")
# The prefix of the running portage instance is used in the
# ebuild environment to implement the --host-root option for
@@ -2758,6 +2762,9 @@ class config(object):
if not (src_phase and eapi_attrs.sysroot):
mydict.pop("ESYSROOT", None)
+ if not (src_phase and eapi_attrs.broot):
+ mydict.pop("BROOT", None)
+
# Prefix variables are supported beginning with EAPI 3, or when
# force-prefix is in FEATURES, since older EAPIs would otherwise be
# useless with prefix configurations. This brings compatibility with
@@ -2806,7 +2813,8 @@ class config(object):
mydict.pop("ECLASSDIR", None)
if not eapi_attrs.path_variables_end_with_trailing_slash:
- for v in ("D", "ED", "ROOT", "EROOT", "SYSROOT", "ESYSROOT"):
+ for v in ("D", "ED", "ROOT", "EROOT", "SYSROOT", "ESYSROOT",
+ "BROOT"):
if v in mydict:
mydict[v] = mydict[v].rstrip(os.path.sep)
diff --git a/repoman/cnf/qa_data/qa_data.yaml b/repoman/cnf/qa_data/qa_data.yaml
index 573cdb449..32994e013 100644
--- a/repoman/cnf/qa_data/qa_data.yaml
+++ b/repoman/cnf/qa_data/qa_data.yaml
@@ -128,7 +128,7 @@ qahelp:
variable:
invalidchar: "A variable contains an invalid character that is not part of the ASCII character set"
readonly: "Assigning a readonly variable"
- usedwithhelpers: "Ebuild uses D, ROOT, ED, EROOT or EPREFIX with helpers"
+ usedwithhelpers: "Ebuild uses D, ROOT, BROOT, ED, EROOT or EPREFIX with helpers"
virtual:
suspect: "Ebuild contains a package that usually should be pulled via virtual/, not directly."
wxwidgets:
diff --git a/repoman/man/repoman.1 b/repoman/man/repoman.1
index c87146b61..01f37dd99 100644
--- a/repoman/man/repoman.1
+++ b/repoman/man/repoman.1
@@ -432,7 +432,7 @@ character set.
Assigning a readonly variable
.TP
.B variable.usedwithhelpers
-Ebuild uses D, ROOT, ED, EROOT or EPREFIX with helpers
+Ebuild uses D, ROOT, BROOT, ED, EROOT or EPREFIX with helpers
.TP
.B virtual.suspect
Ebuild contains a package that usually should be pulled via virtual/,
diff --git a/repoman/pym/repoman/modules/linechecks/assignment/assignment.py b/repoman/pym/repoman/modules/linechecks/assignment/assignment.py
index 496c9d092..33bef8a08 100644
--- a/repoman/pym/repoman/modules/linechecks/assignment/assignment.py
+++ b/repoman/pym/repoman/modules/linechecks/assignment/assignment.py
@@ -1,7 +1,7 @@
import re
-from portage.eapi import eapi_supports_prefix
+from portage.eapi import eapi_supports_prefix, eapi_has_broot
from repoman.modules.linechecks.base import LineCheck
@@ -29,3 +29,10 @@ class Eapi3EbuildAssignment(EbuildAssignment):
def check_eapi(self, eapi):
return eapi_supports_prefix(eapi)
+class Eapi7EbuildAssignment(EbuildAssignment):
+ """Ensure ebuilds don't assign to readonly EAPI 7-introduced variables."""
+
+ readonly_assignment = re.compile(r'\s*(export\s+)?BROOT=')
+
+ def check_eapi(self, eapi):
+ return eapi_has_broot(eapi)
diff --git a/repoman/pym/repoman/modules/linechecks/quotes/quotes.py b/repoman/pym/repoman/modules/linechecks/quotes/quotes.py
index 68c594e23..e5ea4d0ca 100644
--- a/repoman/pym/repoman/modules/linechecks/quotes/quotes.py
+++ b/repoman/pym/repoman/modules/linechecks/quotes/quotes.py
@@ -17,7 +17,8 @@ class EbuildQuote(LineCheck):
r'(^$)|(^\s*#.*)|(^\s*\w+=.*)' +
r'|(^\s*(' + "|".join(_ignored_commands) + r')\s+)')
ignore_comment = False
- var_names = ["D", "DISTDIR", "FILESDIR", "S", "T", "ROOT", "WORKDIR"]
+ var_names = [
+ "D", "DISTDIR", "FILESDIR", "S", "T", "ROOT", "BROOT", "WORKDIR"]
# EAPI=3/Prefix vars
var_names += ["ED", "EPREFIX", "EROOT"]