Gentoo Archives: gentoo-pms

From: "Michał Górny" <mgorny@g.o>
To: gentoo-pms@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: [gentoo-pms] [PATCH 26/28] EAPI 7 has binding leftmost-of dep groups (||=).
Date: Wed, 04 Oct 2017 20:48:06
Message-Id: 20171004204712.10391-27-mgorny@gentoo.org
In Reply to: [gentoo-pms] [PATCHES] EAPI 7, first draft for review by "Michał Górny"
1 Bug: https://bugs.gentoo.org/489458
2 ---
3 dependencies.tex | 45 ++++++++++++++++++++++++++++++++++++++-------
4 eapi-differences.tex | 4 ++++
5 2 files changed, 42 insertions(+), 7 deletions(-)
6
7 diff --git a/dependencies.tex b/dependencies.tex
8 index 5773aef..d9592d9 100644
9 --- a/dependencies.tex
10 +++ b/dependencies.tex
11 @@ -98,6 +98,12 @@ be surrounded on both sides by whitespace, except at the start and end of the st
12 of (a dependency item of any kind followed by whitespace), followed by a close parenthesis.
13 More formally: \t{any-of} \t{::=} \t{'||' whitespace '(' whitespace (item whitespace)* ')'}.
14 Permitted in \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND}, \t{PDEPEND}, \t{LICENSE}, \t{REQUIRED_USE}.
15 +\item \featurelabel{binding-leftmost-of} A binding leftmost-of group, which consists of the string
16 + \t{||=}, followed by whitespace, followed by an open parenthesis, followed by whitespace,
17 + followed by zero or more of (a dependency item of any kind followed by whitespace), followed by
18 + a close parenthesis. More formally: \t{any-of} \t{::=} \t{'||=' whitespace '(' whitespace (item
19 + whitespace)* ')'}. Permitted in \t{DEPEND}, \t{BDEPEND}, \t{RDEPEND}, \t{PDEPEND} in EAPIs
20 + listed in table~\ref{tab:dep-group-table} as supporting \t{||=}\ groups.
21 \item An exactly-one-of group, which consists of the string \t{\textasciicircum\textasciicircum},
22 followed by whitespace, followed by an open parenthesis, followed by whitespace, followed by
23 zero or more of (a dependency item of any kind followed by whitespace), followed by a close
24 @@ -109,7 +115,7 @@ be surrounded on both sides by whitespace, except at the start and end of the st
25 zero or more of (a dependency item of any kind followed by whitespace), followed by a close
26 parenthesis. More formally: \t{at-most-one-of} \t{::=} \t{'??'\ whitespace '(' whitespace
27 (item whitespace)* ')'}. Permitted in \t{REQUIRED_USE} in EAPIs listed in
28 - table~\ref{tab:at-most-one-of-table} as supporting \t{REQUIRED_USE ??}\ groups.
29 + table~\ref{tab:dep-group-table} as supporting \t{REQUIRED_USE ??}\ groups.
30 \item A use-conditional group, which consists of an optional exclamation mark, followed by
31 a use flag name, followed by a question mark, followed by whitespace, followed by
32 an open parenthesis, followed by whitespace, followed by zero or more of (a dependency item
33 @@ -150,15 +156,17 @@ In particular, note that whitespace is not optional.
34 \end{centertable}
35
36 \ChangeWhenAddingAnEAPI{7}
37 -\begin{centertable}{EAPIs supporting \t{REQUIRED_USE ??}\ groups}
38 - \label{tab:at-most-one-of-table}
39 - \begin{tabular}{ll}
40 +\begin{centertable}{EAPIs supporting additional group types}
41 + \label{tab:dep-group-table}
42 + \begin{tabular}{lll}
43 \toprule
44 \multicolumn{1}{c}{\textbf{EAPI}} &
45 - \multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} \\
46 + \multicolumn{1}{c}{\textbf{Supports \t{REQUIRED_USE ??}\ groups?}} &
47 + \multicolumn{1}{c}{\textbf{Supports \t{||=}\ groups?}} \\
48 \midrule
49 - 0, 1, 2, 3, 4 & No \\
50 - 5, 6, 7 & Yes \\
51 + 0, 1, 2, 3, 4 & No & No \\
52 + 5, 6 & Yes & No \\
53 + 7 & Yes & Yes \\
54 \bottomrule
55 \end{tabular}
56 \end{centertable}
57 @@ -186,6 +194,29 @@ considered to be matched if its associated package dependency specification is n
58
59 An empty any-of group counts as being matched.
60
61 +\subsection{Binding leftmost-of dependency specifications}
62 +
63 +Any use-conditional group that is an immediate child of a binding leftmost-of group, if not enabled
64 +(disabled for an exclamation mark prefixed use flag name), is not considered a member of the binding
65 +leftmost-of group for match purposes.
66 +
67 +In a binding leftmost-of group, at least one immediate child element must be matched. A blocker is
68 +considered to be matched if its associated package dependency specification is not matched.
69 +In addition, for runtime dependencies, indicates that the package will break unless the dependency
70 +corresponding to the first immediate child (in order of listing) matched in \t{ESYSROOT} at the time
71 +the package was built is satisfied.
72 +
73 +An empty binding leftmost-of group counts as being matched.
74 +
75 +To implement the binding leftmost-of operator, the package manager will need to store which of
76 +the immediate child elements were matched. This syntax is only for package manager use and must not
77 +be used by ebuilds. Only the first matched child element needs to be indicated.
78 +
79 +Whenever the binding leftmost-of group is used in an enabled dependency group, the dependencies
80 +(\t{DEPEND}) must ensure that at least one of the immediate child elements is also matched at build
81 +time. It is invalid to use the binding leftmost-of group inside PDEPEND or inside any-of dependency
82 +specifications.
83 +
84 \subsection{Exactly-one-of dependency specifications}
85
86 Any use-conditional group that is an immediate child of an exactly-one-of group, if not enabled
87 diff --git a/eapi-differences.tex b/eapi-differences.tex
88 index 87ce708..a89f5f8 100644
89 --- a/eapi-differences.tex
90 +++ b/eapi-differences.tex
91 @@ -41,6 +41,9 @@ of this document for a complete table of previous EAPIs.
92 \bottomrule
93 \endlastfoot
94
95 +\t{||=} dependency group & \compactfeatureref{binding-leftmost-of} &
96 + No & No & No & No & Yes \\
97 +
98 \t{REQUIRED_USE} autoenforced & \compactfeatureref{auto-req-use} &
99 No & No & No & No & Yes \\
100
101 @@ -467,6 +470,7 @@ EAPI 7 is EAPI 6 with the following changes:
102 \featureref{nonfatal-fallback}.
103 \item \t{die} guaranteed to work in a subshell environment, \featureref{subshell-die}.
104 \item automatic enforcing of \t{REQUIRED_USE} is supported, \featureref{auto-req-use}.
105 +\item binding leftmost-of (\t{||=}) dependency group is supported, \featureref{binding-leftmost-of}.
106 \end{compactitem}
107
108 \ChangeWhenAddingAnEAPI{7}
109 --
110 2.14.2