summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/ebuild14
-rwxr-xr-xbin/ebuild.sh3
-rwxr-xr-xbin/isolated-functions.sh2
-rw-r--r--pym/portage/__init__.py36
4 files changed, 35 insertions, 20 deletions
diff --git a/bin/ebuild b/bin/ebuild
index d5e09dd97..7aebd8a36 100755
--- a/bin/ebuild
+++ b/bin/ebuild
@@ -130,13 +130,17 @@ def discard_digests(myebuild, mysettings, mydbapi):
portage._doebuild_manifest_exempt_depend -= 1
tmpsettings = portage.config(clone=portage.settings)
-if "test" in pargs and "test" not in tmpsettings.features:
- print "Forcing test."
+if "test" in pargs:
+ # This variable is a signal to config.regenerate() to
+ # indicate that the test phase should be enabled regardless
+ # of problems such as masked "test" USE flag.
tmpsettings["EBUILD_FORCE_TEST"] = "1"
tmpsettings.backup_changes("EBUILD_FORCE_TEST")
- tmpsettings.features.append("test")
- tmpsettings["FEATURES"] = " ".join(tmpsettings.features)
- tmpsettings.backup_changes("FEATURES")
+ if "test" not in tmpsettings.features:
+ tmpsettings.features.append("test")
+ tmpsettings.features.sort()
+ tmpsettings["FEATURES"] = " ".join(tmpsettings.features)
+ tmpsettings.backup_changes("FEATURES")
build_dir_phases = set(["setup", "unpack", "compile",
"test", "install", "package", "rpm"])
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 62a271752..d65ff69e9 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -919,9 +919,6 @@ dyn_test() {
fi
if ! hasq test $FEATURES && [ "${EBUILD_FORCE_TEST}" != "1" ]; then
vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
- elif ! hasq test ${USE} && [ "${EBUILD_FORCE_TEST}" != "1" ]; then
- ewarn "Skipping make test/check since USE=test is masked."
- vecho ">>> Test phase [explicitly disabled]: ${CATEGORY}/${PF}"
elif hasq test $RESTRICT; then
ewarn "Skipping make test/check due to ebuild restriction."
vecho ">>> Test phase [explicitly disabled]: ${CATEGORY}/${PF}"
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index a7e8433ad..e06fbb826 100755
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -434,7 +434,7 @@ save_ebuild_env() {
# portage config variables and variables set directly by portage
unset BAD BRACKET BUILD_PREFIX COLS \
DISTCC_DIR DISTDIR DOC_SYMLINKS_DIR \
- EBUILD_EXIT_STATUS_FILE EBUILD_MASTER_PID \
+ EBUILD_EXIT_STATUS_FILE EBUILD_FORCE_TEST EBUILD_MASTER_PID \
ECLASSDIR ECLASS_DEPTH ENDCOL FAKEROOTKEY \
GOOD HILITE HOME IMAGE \
LAST_E_CMD LAST_E_LEN LD_PRELOAD MISC_FUNCTIONS_ARGS MOPREFIX \
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 54c22326f..2c826a58a 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -870,8 +870,9 @@ class config(object):
# in it's bashrc (causing major leakage).
_environ_whitelist += [
"BASH_ENV", "BUILD_PREFIX", "D",
- "DISTDIR", "DOC_SYMLINKS_DIR", "EBUILD_EXIT_STATUS_FILE",
- "EBUILD", "EBUILD_PHASE", "ECLASSDIR", "ECLASS_DEPTH", "EMERGE_FROM",
+ "DISTDIR", "DOC_SYMLINKS_DIR", "EBUILD",
+ "EBUILD_EXIT_STATUS_FILE", "EBUILD_FORCE_TEST",
+ "EBUILD_PHASE", "ECLASSDIR", "ECLASS_DEPTH", "EMERGE_FROM",
"FEATURES", "FILESDIR", "HOME", "PATH",
"PKGUSE", "PKG_LOGDIR", "PKG_TMPDIR",
"PORTAGE_ACTUAL_DISTDIR", "PORTAGE_ARCHLIST",
@@ -1535,8 +1536,8 @@ class config(object):
self[var] = "0"
self.backup_changes(var)
+ # initialize self.features
self.regenerate()
- self.features = portage.util.unique_array(self["FEATURES"].split())
if local_config:
self._accept_license = \
@@ -2316,19 +2317,34 @@ class config(object):
myflags.update(self.useforce)
+ iuse = self.configdict["pkg"].get("IUSE","").split()
+ iuse = [ x.lstrip("+-") for x in iuse ]
# FEATURES=test should imply USE=test
- if "test" in self.configlist[-1].get("FEATURES","").split():
- myflags.add("test")
- if self.get("EBUILD_FORCE_TEST") == "1":
- self.usemask.discard("test")
+ if not hasattr(self, "features"):
+ self.features = list(sorted(set(
+ self.configlist[-1].get("FEATURES","").split())))
+ self["FEATURES"] = " ".join(self.features)
+ if "test" in self.features and "test" in iuse:
+ ebuild_force_test = self.get("EBUILD_FORCE_TEST") == "1"
+ if ebuild_force_test and self.get("EBUILD_PHASE") == "test":
+ writemsg("Forcing test.\n", noiselevel=-1)
+ if "test" in self.usemask and not ebuild_force_test:
+ # "test" is in IUSE and USE=test is masked, so execution
+ # of src_test() probably is not reliable. Therefore,
+ # temporarily disable FEATURES=test just for this package.
+ self["FEATURES"] = " ".join(x for x in self.features \
+ if x != "test")
+ myflags.discard("test")
+ else:
+ myflags.add("test")
+ if ebuild_force_test:
+ self.usemask.discard("test")
usesplit = [ x for x in myflags if \
x not in self.usemask]
# Use the calculated USE flags to regenerate the USE_EXPAND flags so
# that they are consistent.
- iuse = self.configdict["pkg"].get("IUSE","").split()
- iuse = [ x.lstrip("+-") for x in iuse ]
for var in use_expand:
prefix = var.lower() + "_"
prefix_len = len(prefix)
@@ -2396,7 +2412,6 @@ class config(object):
# * Masked flags, such as those from {,package}use.mask
# * Forced flags, such as those from {,package}use.force
# * build and bootstrap flags used by bootstrap.sh
- # * The "test" flag that's enabled by FEATURES=test
# Do this even when there's no package since setcpv() can
# optimize away regenerate() calls.
@@ -2425,7 +2440,6 @@ class config(object):
# build and bootstrap flags used by bootstrap.sh
iuse_implicit.add("build")
iuse_implicit.add("bootstrap")
- iuse_implicit.add("test")
iuse_grep = iuse_implicit.copy()
if use_expand_hidden_raw: