summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-06-28 08:13:22 +0000
committerMichał Górny <mgorny@gentoo.org>2017-06-28 08:13:22 +0000
commitb96265de0f59fd51989f351b42822b481f4ed2ae (patch)
tree87bc61f6eb89928007a165bb93de55ca6a992918
parent/* QA check logic */ make it clear we're not going out of single C (diff)
downloadglep-b96265de0f59fd51989f351b42822b481f4ed2ae.tar.gz
glep-b96265de0f59fd51989f351b42822b481f4ed2ae.tar.bz2
glep-b96265de0f59fd51989f351b42822b481f4ed2ae.zip
/* QA check logic */ include all logics
-rw-r--r--GLEP:73.mw11
1 files changed, 11 insertions, 0 deletions
diff --git a/GLEP:73.mw b/GLEP:73.mw
index 6b745df..7b040a8 100644
--- a/GLEP:73.mw
+++ b/GLEP:73.mw
@@ -212,6 +212,17 @@ The check for self-conflicting constraints is performed for every constraint sep
* for any ''c<sub>i</sub>'' in ''C'':
** there is at least one ''c<sub>j</sub>'' (''j ≠ i'', in the same ''C'') that is ''¬c<sub>i</sub>''.
+The check for attempting to force opposite values for a single flag is performed for every pair of constraints. Since it is symmetric, it is only necessary to perform it for unique pairs. For practical reasons, let's assume it is performed for every pair ''((C<sub>i</sub>, E<sub>i</sub>), (C<sub>j</sub>, E<sub>j</sub>))'', where ''j > i''. The pair is determined to force opposite values for a single flag if all of the following conditions are met:
+* ''E<sub>i</sub> = ¬E<sub>j</sub>'',
+* ''C<sub>i</sub>'' and ''C<sub>j</sub>'' can simultaneously evaluate to true,
+* ''C<sub>i</sub>'' can evaluate to true after applying all the constraints preceding it, with flags ''F = C<sub>i</sub> ∪ C<sub>j</sub>'',
+* ''C<sub>j</sub>'' can evaluate to true after applying all the constraints preceding it, with flags ''F = C<sub>i</sub> ∪ C<sub>j</sub>''.
+
+The check for enabling the previous constraints is performed for every pair ''((C<sub>i</sub>, E<sub>i</sub>), (C<sub>j</sub>, E<sub>j</sub>))'', where ''j > i''. The constraint ''(C<sub>j</sub>, E<sub>j</sub>)'' is determined to meaningfully enable the constraint ''(C<sub>i</sub>, E<sub>i</sub>)'' if all of the following conditions are met:
+* ''E<sub>j</sub>'' matches any of the conditions in ''C<sub>i</sub>'' (''E<sub>j</sub> = c<sub>i,k</sub>'', for any ''k''),
+* ''C<sub>i</sub>'' and ''C<sub>j</sub>'' can simultaneously evaluate to true,
+* ''E<sub>i</sub>'' is not explicitly enabled after applying all of the constraints, with flags ''F = C<sub>j</sub>''.
+
==Rationale==
===Restrictions for allowed REQUIRED_USE syntax===
The specification imposes a number of arbitrary restrictions to REQUIRED_USE syntax, in particular by restricting the possible nesting and disallowing other complex constructs. The main goal is to simplify the algorithms used and make the results more obvious. This is at cost of prohibiting constructs that are rarely used, and usually could be replaced by simpler and more readable constructs.