summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-06-23 09:40:07 +0000
committerMichał Górny <mgorny@gentoo.org>2017-06-23 09:40:07 +0000
commite9ad396fe21e249d1168df25c7f330b3db23a18b (patch)
tree77cf4b6daff0345884926a288b5c8f2918da6f7f
parent/* Rationale */ qa checks -> context (diff)
downloadglep-e9ad396fe21e249d1168df25c7f330b3db23a18b.tar.gz
glep-e9ad396fe21e249d1168df25c7f330b3db23a18b.tar.bz2
glep-e9ad396fe21e249d1168df25c7f330b3db23a18b.zip
/* QA checks/verification */ validation rules
-rw-r--r--GLEP:73.mw10
1 files changed, 10 insertions, 0 deletions
diff --git a/GLEP:73.mw b/GLEP:73.mw
index 25b52fe..252dad8 100644
--- a/GLEP:73.mw
+++ b/GLEP:73.mw
@@ -247,6 +247,16 @@ To account for that and avoid the case where REQUIRED_USE solving would fail on
Due to the EAPI 5 [https://projects.gentoo.org/pms/6/pms.html#x1-600005.2.11 stable masking], the immutable flags have to separately be calculated for ~arch and stable keywords. The stable variant does not need to be considered unless the package is actually stable or being stabilized, to avoid unnecessarily cluttering up {{Path|package.use.stable.mask}} and/or {{Path|package.use.stable.force}} for packages that are going to stay in ~arch.
+====The requirements for REQUIRED_USE====
+The rules imposed for verification aim to cover most of the common cases of unsolvable constraints. In particular:
+
+''no valid combination of USE flags can result in the constraint requesting the same flag to be simultaneously both enabled and disabled''
+: If the effective REQUIRED_USE constraint (after collapsing all the groups) contains both ''foo'' and ''!foo'', the verification will never consider the constraint met (since logically ''x ∧ ¬x'' is always false).
+''no valid combination of USE flags (that is, not prohibited by immutable flags) can attempt to alter immutable flags''
+: This is implied by the immutability of masked/forced flags. An attempt to toggle those flags while solving should be considered a fatal error since {{Path|use.mask}}/{{Path|use.force}}/… always takes precedence over regular configuration and package-level toggles. Therefore, if such flags are enforced by an USE-conditional group, their condition should also be masked or forced appropriately.
+''no constraint in REQUIRED_USE may alter flags in such a way that any of the constraints preceding it would start to apply''
+: This is required for reliable single-pass solving. While the solving may work correctly with multiple iterations, the constraints can be reliably (and usually easily) fixed via reordering. More importantly, this also catches the constraints that can not be solved due to circular toggling between the constraints.
+
==Backwards Compatibility==
===Compliance with the PMS===
This GLEP does not break the PMS compliance in any way. The syntax used by the constraints is a subset of the [https://projects.gentoo.org/pms/6/pms.html#x1-780008.2 REQUIRED_USE syntax allowed by the PMS]. The semantic extends the one defined in the PMS in non-conflicting way.