diff options
Diffstat (limited to 'meta/classes/multilib_global.bbclass')
-rw-r--r-- | meta/classes/multilib_global.bbclass | 93 |
1 files changed, 56 insertions, 37 deletions
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass index 98f65c8aae..6095d278dd 100644 --- a/meta/classes/multilib_global.bbclass +++ b/meta/classes/multilib_global.bbclass | |||
@@ -1,6 +1,13 @@ | |||
1 | # | ||
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
4 | # SPDX-License-Identifier: MIT | ||
5 | # | ||
6 | |||
1 | def preferred_ml_updates(d): | 7 | def preferred_ml_updates(d): |
2 | # If any PREFERRED_PROVIDER or PREFERRED_VERSION are set, | 8 | # If any of PREFERRED_PROVIDER, PREFERRED_RPROVIDER, REQUIRED_VERSION |
3 | # we need to mirror these variables in the multilib case; | 9 | # or PREFERRED_VERSION are set, we need to mirror these variables in |
10 | # the multilib case; | ||
4 | multilibs = d.getVar('MULTILIBS') or "" | 11 | multilibs = d.getVar('MULTILIBS') or "" |
5 | if not multilibs: | 12 | if not multilibs: |
6 | return | 13 | return |
@@ -11,43 +18,54 @@ def preferred_ml_updates(d): | |||
11 | if len(eext) > 1 and eext[0] == 'multilib': | 18 | if len(eext) > 1 and eext[0] == 'multilib': |
12 | prefixes.append(eext[1]) | 19 | prefixes.append(eext[1]) |
13 | 20 | ||
14 | versions = [] | 21 | required_versions = [] |
22 | preferred_versions = [] | ||
15 | providers = [] | 23 | providers = [] |
16 | rproviders = [] | 24 | rproviders = [] |
17 | for v in d.keys(): | 25 | for v in d.keys(): |
26 | if v.startswith("REQUIRED_VERSION_"): | ||
27 | required_versions.append(v) | ||
18 | if v.startswith("PREFERRED_VERSION_"): | 28 | if v.startswith("PREFERRED_VERSION_"): |
19 | versions.append(v) | 29 | preferred_versions.append(v) |
20 | if v.startswith("PREFERRED_PROVIDER_"): | 30 | if v.startswith("PREFERRED_PROVIDER_"): |
21 | providers.append(v) | 31 | providers.append(v) |
22 | if v.startswith("PREFERRED_RPROVIDER_"): | 32 | if v.startswith("PREFERRED_RPROVIDER_"): |
23 | rproviders.append(v) | 33 | rproviders.append(v) |
24 | 34 | ||
25 | for v in versions: | 35 | def sort_versions(versions, keyword): |
26 | val = d.getVar(v, False) | 36 | version_str = "_".join([keyword, "VERSION", ""]) |
27 | pkg = v.replace("PREFERRED_VERSION_", "") | 37 | for v in versions: |
28 | if pkg.endswith("-native") or "-crosssdk-" in pkg or pkg.startswith(("nativesdk-", "virtual/nativesdk-")): | 38 | val = d.getVar(v, False) |
29 | continue | 39 | pkg = v.replace(version_str, "") |
30 | if '-cross-' in pkg and '${' in pkg: | 40 | if pkg.endswith("-native") or "-crosssdk-" in pkg or pkg.startswith(("nativesdk-", "virtual/nativesdk-")): |
41 | continue | ||
42 | if '-cross-' in pkg and '${' in pkg: | ||
43 | for p in prefixes: | ||
44 | localdata = bb.data.createCopy(d) | ||
45 | override = ":virtclass-multilib-" + p | ||
46 | localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override) | ||
47 | if "-canadian-" in pkg: | ||
48 | newtune = localdata.getVar("DEFAULTTUNE:" + "virtclass-multilib-" + p, False) | ||
49 | if newtune: | ||
50 | localdata.setVar("DEFAULTTUNE", newtune) | ||
51 | newname = localdata.expand(v) | ||
52 | else: | ||
53 | newname = localdata.expand(v).replace(version_str, version_str + p + '-') | ||
54 | if newname != v: | ||
55 | newval = localdata.expand(val) | ||
56 | d.setVar(newname, newval) | ||
57 | # Avoid future variable key expansion | ||
58 | vexp = d.expand(v) | ||
59 | if v != vexp and d.getVar(v, False): | ||
60 | d.renameVar(v, vexp) | ||
61 | continue | ||
31 | for p in prefixes: | 62 | for p in prefixes: |
32 | localdata = bb.data.createCopy(d) | 63 | newname = version_str + p + "-" + pkg |
33 | override = ":virtclass-multilib-" + p | 64 | if not d.getVar(newname, False): |
34 | localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override) | 65 | d.setVar(newname, val) |
35 | if "-canadian-" in pkg: | 66 | |
36 | newname = localdata.expand(v) | 67 | sort_versions(required_versions, "REQUIRED") |
37 | else: | 68 | sort_versions(preferred_versions, "PREFERRED") |
38 | newname = localdata.expand(v).replace("PREFERRED_VERSION_", "PREFERRED_VERSION_" + p + '-') | ||
39 | if newname != v: | ||
40 | newval = localdata.expand(val) | ||
41 | d.setVar(newname, newval) | ||
42 | # Avoid future variable key expansion | ||
43 | vexp = d.expand(v) | ||
44 | if v != vexp and d.getVar(v, False): | ||
45 | d.renameVar(v, vexp) | ||
46 | continue | ||
47 | for p in prefixes: | ||
48 | newname = "PREFERRED_VERSION_" + p + "-" + pkg | ||
49 | if not d.getVar(newname, False): | ||
50 | d.setVar(newname, val) | ||
51 | 69 | ||
52 | for prov in providers: | 70 | for prov in providers: |
53 | val = d.getVar(prov, False) | 71 | val = d.getVar(prov, False) |
@@ -128,14 +146,14 @@ def preferred_ml_updates(d): | |||
128 | prov = prov.replace("virtual/", "") | 146 | prov = prov.replace("virtual/", "") |
129 | return "virtual/" + prefix + "-" + prov | 147 | return "virtual/" + prefix + "-" + prov |
130 | 148 | ||
131 | mp = (d.getVar("MULTI_PROVIDER_WHITELIST") or "").split() | 149 | mp = (d.getVar("BB_MULTI_PROVIDER_ALLOWED") or "").split() |
132 | extramp = [] | 150 | extramp = [] |
133 | for p in mp: | 151 | for p in mp: |
134 | if p.endswith("-native") or "-crosssdk-" in p or p.startswith(("nativesdk-", "virtual/nativesdk-")) or 'cross-canadian' in p: | 152 | if p.endswith("-native") or "-crosssdk-" in p or p.startswith(("nativesdk-", "virtual/nativesdk-")) or 'cross-canadian' in p: |
135 | continue | 153 | continue |
136 | for pref in prefixes: | 154 | for pref in prefixes: |
137 | extramp.append(translate_provide(pref, p)) | 155 | extramp.append(translate_provide(pref, p)) |
138 | d.setVar("MULTI_PROVIDER_WHITELIST", " ".join(mp + extramp)) | 156 | d.setVar("BB_MULTI_PROVIDER_ALLOWED", " ".join(mp + extramp)) |
139 | 157 | ||
140 | abisafe = (d.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE") or "").split() | 158 | abisafe = (d.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE") or "").split() |
141 | extras = [] | 159 | extras = [] |
@@ -155,8 +173,8 @@ def preferred_ml_updates(d): | |||
155 | python multilib_virtclass_handler_vendor () { | 173 | python multilib_virtclass_handler_vendor () { |
156 | if isinstance(e, bb.event.ConfigParsed): | 174 | if isinstance(e, bb.event.ConfigParsed): |
157 | for v in e.data.getVar("MULTILIB_VARIANTS").split(): | 175 | for v in e.data.getVar("MULTILIB_VARIANTS").split(): |
158 | if e.data.getVar("TARGET_VENDOR_virtclass-multilib-" + v, False) is None: | 176 | if e.data.getVar("TARGET_VENDOR:virtclass-multilib-" + v, False) is None: |
159 | e.data.setVar("TARGET_VENDOR_virtclass-multilib-" + v, e.data.getVar("TARGET_VENDOR", False) + "ml" + v) | 177 | e.data.setVar("TARGET_VENDOR:virtclass-multilib-" + v, e.data.getVar("TARGET_VENDOR", False) + "ml" + v) |
160 | preferred_ml_updates(e.data) | 178 | preferred_ml_updates(e.data) |
161 | } | 179 | } |
162 | addhandler multilib_virtclass_handler_vendor | 180 | addhandler multilib_virtclass_handler_vendor |
@@ -177,6 +195,7 @@ python multilib_virtclass_handler_global () { | |||
177 | # from a copy of the datastore | 195 | # from a copy of the datastore |
178 | localdata = bb.data.createCopy(d) | 196 | localdata = bb.data.createCopy(d) |
179 | localdata.delVar("KERNEL_VERSION") | 197 | localdata.delVar("KERNEL_VERSION") |
198 | localdata.delVar("KERNEL_VERSION_PKG_NAME") | ||
180 | 199 | ||
181 | variants = (e.data.getVar("MULTILIB_VARIANTS") or "").split() | 200 | variants = (e.data.getVar("MULTILIB_VARIANTS") or "").split() |
182 | 201 | ||
@@ -198,13 +217,13 @@ python multilib_virtclass_handler_global () { | |||
198 | if rprovs.strip(): | 217 | if rprovs.strip(): |
199 | e.data.setVar("RPROVIDES", rprovs) | 218 | e.data.setVar("RPROVIDES", rprovs) |
200 | 219 | ||
201 | # Process RPROVIDES_${PN}... | 220 | # Process RPROVIDES:${PN}... |
202 | for pkg in (e.data.getVar("PACKAGES") or "").split(): | 221 | for pkg in (e.data.getVar("PACKAGES") or "").split(): |
203 | origrprovs = rprovs = localdata.getVar("RPROVIDES_%s" % pkg) or "" | 222 | origrprovs = rprovs = localdata.getVar("RPROVIDES:%s" % pkg) or "" |
204 | for clsextend in clsextends: | 223 | for clsextend in clsextends: |
205 | rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES_%s" % pkg, setvar=False) | 224 | rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES:%s" % pkg, setvar=False) |
206 | rprovs = rprovs + " " + clsextend.extname + "-" + pkg | 225 | rprovs = rprovs + " " + clsextend.extname + "-" + pkg |
207 | e.data.setVar("RPROVIDES_%s" % pkg, rprovs) | 226 | e.data.setVar("RPROVIDES:%s" % pkg, rprovs) |
208 | } | 227 | } |
209 | 228 | ||
210 | addhandler multilib_virtclass_handler_global | 229 | addhandler multilib_virtclass_handler_global |