summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes-recipe/native.bbclass39
-rw-r--r--meta/classes-recipe/nativesdk.bbclass11
-rw-r--r--meta/classes-recipe/toolchain-scripts.bbclass4
-rw-r--r--meta/classes/multilib.bbclass33
-rw-r--r--meta/classes/multilib_global.bbclass19
-rw-r--r--meta/lib/oe/__init__.py2
-rw-r--r--meta/lib/oe/classextend.py255
7 files changed, 160 insertions, 203 deletions
diff --git a/meta/classes-recipe/native.bbclass b/meta/classes-recipe/native.bbclass
index 625975a694..7d1fe343fa 100644
--- a/meta/classes-recipe/native.bbclass
+++ b/meta/classes-recipe/native.bbclass
@@ -138,38 +138,18 @@ python native_virtclass_handler () {
138 if "native" not in classextend: 138 if "native" not in classextend:
139 return 139 return
140 140
141 def map_dependencies(varname, d, suffix = "", selfref=True, regex=False): 141 def map_dependencies(varname, d, suffix, selfref=True, regex=False):
142 if suffix: 142 varname = varname + ":" + suffix
143 varname = varname + ":" + suffix
144 deps = d.getVar(varname)
145 if not deps:
146 return
147 deps = bb.utils.explode_deps(deps)
148 newdeps = []
149 for dep in deps:
150 if regex and dep.startswith("^") and dep.endswith("$"):
151 newdeps.append(dep[:-1].replace(pn, bpn) + "-native$")
152 elif dep == pn:
153 if not selfref:
154 continue
155 newdeps.append(dep)
156 elif "-cross-" in dep:
157 newdeps.append(dep.replace("-cross", "-native"))
158 elif not dep.endswith("-native"):
159 # Replace ${PN} with ${BPN} in the dependency to make sure
160 # dependencies on, e.g., ${PN}-foo become ${BPN}-foo-native
161 # rather than ${BPN}-native-foo-native.
162 newdeps.append(dep.replace(pn, bpn) + "-native")
163 else:
164 newdeps.append(dep)
165 output_varname = varname
166 # Handle ${PN}-xxx -> ${BPN}-xxx-native 143 # Handle ${PN}-xxx -> ${BPN}-xxx-native
167 if suffix != "${PN}" and "${PN}" in suffix: 144 if suffix != "${PN}" and "${PN}" in suffix:
168 output_varname = varname.replace("${PN}", "${BPN}") + "-native" 145 output_varname = varname.replace("${PN}", "${BPN}") + "-native"
169 d.renameVar(varname, output_varname) 146 d.renameVar(varname, output_varname)
170 d.setVar(output_varname, " ".join(newdeps))
171 147
172 map_dependencies("DEPENDS", e.data, selfref=False) 148 d.setVarFilter("DEPENDS", "native_filter(val, '" + pn + "', '" + bpn + "', selfref=False)")
149
150 for varname in ["RDEPENDS", "RRECOMMENDS", "RSUGGESTS", "RPROVIDES", "RREPLACES"]:
151 d.setVarFilter(varname, "native_filter(val, '" + pn + "', '" + bpn + "')")
152
173 # We need to handle things like ${@bb.utils.contains('PTEST_ENABLED', '1', '${PN}-ptest', '', d)} 153 # We need to handle things like ${@bb.utils.contains('PTEST_ENABLED', '1', '${PN}-ptest', '', d)}
174 # and not pass ${PN}-test since in the native case it would be ignored. This does mean we ignore 154 # and not pass ${PN}-test since in the native case it would be ignored. This does mean we ignore
175 # anonymous python derived PACKAGES entries. 155 # anonymous python derived PACKAGES entries.
@@ -181,8 +161,9 @@ python native_virtclass_handler () {
181 map_dependencies("RSUGGESTS", e.data, pkg) 161 map_dependencies("RSUGGESTS", e.data, pkg)
182 map_dependencies("RPROVIDES", e.data, pkg) 162 map_dependencies("RPROVIDES", e.data, pkg)
183 map_dependencies("RREPLACES", e.data, pkg) 163 map_dependencies("RREPLACES", e.data, pkg)
184 map_dependencies("PACKAGES", e.data) 164
185 map_dependencies("PACKAGES_DYNAMIC", e.data, regex=True) 165 d.setVarFilter("PACKAGES", "native_filter(val, '" + pn + "', '" + bpn + "')")
166 d.setVarFilter("PACKAGES_DYNAMIC", "native_filter(val, '" + pn + "', '" + bpn + "', regex=True)")
186 167
187 provides = e.data.getVar("PROVIDES") 168 provides = e.data.getVar("PROVIDES")
188 nprovides = [] 169 nprovides = []
diff --git a/meta/classes-recipe/nativesdk.bbclass b/meta/classes-recipe/nativesdk.bbclass
index 7ecb4c12c1..9838d5a54b 100644
--- a/meta/classes-recipe/nativesdk.bbclass
+++ b/meta/classes-recipe/nativesdk.bbclass
@@ -99,15 +99,14 @@ python () {
99 99
100 import oe.classextend 100 import oe.classextend
101 101
102 clsextend = oe.classextend.NativesdkClassExtender("nativesdk", d) 102 clsextend = oe.classextend.ClassExtender("nativesdk", [], d)
103 clsextend.rename_packages()
104 clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split()) 103 clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split())
105 104
106 clsextend.map_depends_variable("DEPENDS") 105 clsextend.set_filter("DEPENDS", deps=True)
107 clsextend.map_depends_variable("PACKAGE_WRITE_DEPS") 106 clsextend.set_filter("PACKAGE_WRITE_DEPS", deps=False)
108 clsextend.map_packagevars() 107 clsextend.map_packagevars()
109 clsextend.map_variable("PROVIDES") 108 clsextend.set_filter("PROVIDES", deps=False)
110 clsextend.map_regexp_variable("PACKAGES_DYNAMIC") 109
111 d.setVar("LIBCEXTENSION", "") 110 d.setVar("LIBCEXTENSION", "")
112 d.setVar("ABIEXTENSION", "") 111 d.setVar("ABIEXTENSION", "")
113} 112}
diff --git a/meta/classes-recipe/toolchain-scripts.bbclass b/meta/classes-recipe/toolchain-scripts.bbclass
index 5874a48af8..5d28df845b 100644
--- a/meta/classes-recipe/toolchain-scripts.bbclass
+++ b/meta/classes-recipe/toolchain-scripts.bbclass
@@ -238,11 +238,11 @@ toolchain_create_sdk_siteconfig () {
238python __anonymous () { 238python __anonymous () {
239 import oe.classextend 239 import oe.classextend
240 deps = "" 240 deps = ""
241 prefixes = (d.getVar("MULTILIB_VARIANTS") or "").split()
241 for dep in (d.getVar('TOOLCHAIN_NEED_CONFIGSITE_CACHE') or "").split(): 242 for dep in (d.getVar('TOOLCHAIN_NEED_CONFIGSITE_CACHE') or "").split():
242 deps += " %s:do_populate_sysroot" % dep 243 deps += " %s:do_populate_sysroot" % dep
243 for variant in (d.getVar('MULTILIB_VARIANTS') or "").split(): 244 for variant in (d.getVar('MULTILIB_VARIANTS') or "").split():
244 clsextend = oe.classextend.ClassExtender(variant, d) 245 newdep = oe.classextend.add_suffix(dep, variant, prefixes)
245 newdep = clsextend.extend_name(dep)
246 deps += " %s:do_populate_sysroot" % newdep 246 deps += " %s:do_populate_sysroot" % newdep
247 d.appendVarFlag('do_configure', 'depends', deps) 247 d.appendVarFlag('do_configure', 'depends', deps)
248} 248}
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index b959bbd93c..677dbc854a 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -112,11 +112,11 @@ python __anonymous () {
112 variant = d.getVar("BBEXTENDVARIANT") 112 variant = d.getVar("BBEXTENDVARIANT")
113 import oe.classextend 113 import oe.classextend
114 114
115 clsextend = oe.classextend.ClassExtender(variant, d) 115 prefixes = (d.getVar("MULTILIB_VARIANTS") or "").split()
116 116 clsextend = oe.classextend.ClassExtender(variant, prefixes, d)
117 clsextend.map_depends_variable("PACKAGE_INSTALL") 117 clsextend.set_filter("PACKAGE_INSTALL", deps=False)
118 clsextend.map_depends_variable("LINGUAS_INSTALL") 118 clsextend.set_filter("LINGUAS_INSTALL", deps=False)
119 clsextend.map_depends_variable("RDEPENDS") 119 clsextend.set_filter("RDEPENDS", deps=True)
120 pinstall = d.getVar("LINGUAS_INSTALL") + " " + d.getVar("PACKAGE_INSTALL") 120 pinstall = d.getVar("LINGUAS_INSTALL") + " " + d.getVar("PACKAGE_INSTALL")
121 d.setVar("PACKAGE_INSTALL", pinstall) 121 d.setVar("PACKAGE_INSTALL", pinstall)
122 d.setVar("LINGUAS_INSTALL", "") 122 d.setVar("LINGUAS_INSTALL", "")
@@ -136,27 +136,28 @@ python multilib_virtclass_handler_postkeyexp () {
136 136
137 import oe.classextend 137 import oe.classextend
138 138
139 clsextend = oe.classextend.ClassExtender(variant, d)
140
141 if bb.data.inherits_class('image', d): 139 if bb.data.inherits_class('image', d):
142 return 140 return
143 141
144 clsextend.map_depends_variable("DEPENDS") 142 prefixes = (d.getVar("MULTILIB_VARIANTS") or "").split()
145 clsextend.map_depends_variable("PACKAGE_WRITE_DEPS") 143 clsextend = oe.classextend.ClassExtender(variant, prefixes, d)
146 clsextend.map_variable("PROVIDES") 144
145 clsextend.set_filter("DEPENDS", deps=True)
146 clsextend.set_filter("PACKAGE_WRITE_DEPS", deps=False)
147
148 clsextend.set_filter("PROVIDES", deps=False)
147 149
148 if bb.data.inherits_class('cross-canadian', d): 150 if bb.data.inherits_class('cross-canadian', d):
149 return 151 return
150 152
151 clsextend.rename_packages()
152 clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split()) 153 clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split())
153 154
154 clsextend.map_packagevars() 155 clsextend.map_packagevars()
155 clsextend.map_regexp_variable("PACKAGES_DYNAMIC") 156
156 clsextend.map_variable("INITSCRIPT_PACKAGES") 157 clsextend.set_filter("INITSCRIPT_PACKAGES", deps=False)
157 clsextend.map_variable("USERADD_PACKAGES") 158 clsextend.set_filter("USERADD_PACKAGES", deps=False)
158 clsextend.map_variable("SYSTEMD_PACKAGES") 159 clsextend.set_filter("SYSTEMD_PACKAGES", deps=False)
159 clsextend.map_variable("UPDATERCPN") 160 clsextend.set_filter("UPDATERCPN", deps=False)
160 161
161 reset_alternative_priority(d) 162 reset_alternative_priority(d)
162} 163}
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index c1d6de100c..d9372d9ed1 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -207,30 +207,25 @@ python multilib_virtclass_handler_global () {
207 207
208 variants = (d.getVar("MULTILIB_VARIANTS") or "").split() 208 variants = (d.getVar("MULTILIB_VARIANTS") or "").split()
209 209
210 import oe.classextend
211 clsextends = []
212 for variant in variants:
213 clsextends.append(oe.classextend.ClassExtender(variant, localdata))
214
215 # Process PROVIDES 210 # Process PROVIDES
216 origprovs = provs = localdata.getVar("PROVIDES") or "" 211 origprovs = provs = localdata.getVar("PROVIDES") or ""
217 for clsextend in clsextends: 212 for variant in variants:
218 provs = provs + " " + clsextend.map_variable("PROVIDES", setvar=False) 213 provs = provs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("PROVIDES") or "", variant, variants)
219 d.setVar("PROVIDES", provs) 214 d.setVar("PROVIDES", provs)
220 215
221 # Process RPROVIDES 216 # Process RPROVIDES
222 origrprovs = rprovs = localdata.getVar("RPROVIDES") or "" 217 origrprovs = rprovs = localdata.getVar("RPROVIDES") or ""
223 for clsextend in clsextends: 218 for variant in variants:
224 rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES", setvar=False) 219 rprovs = rprovs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("RPROVIDES") or "", variant, variants)
225 if rprovs.strip(): 220 if rprovs.strip():
226 d.setVar("RPROVIDES", rprovs) 221 d.setVar("RPROVIDES", rprovs)
227 222
228 # Process RPROVIDES:${PN}... 223 # Process RPROVIDES:${PN}...
229 for pkg in (d.getVar("PACKAGES") or "").split(): 224 for pkg in (d.getVar("PACKAGES") or "").split():
230 origrprovs = rprovs = localdata.getVar("RPROVIDES:%s" % pkg) or "" 225 origrprovs = rprovs = localdata.getVar("RPROVIDES:%s" % pkg) or ""
231 for clsextend in clsextends: 226 for variant in variants:
232 rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES:%s" % pkg, setvar=False) 227 rprovs = rprovs + " " + oe.classextend.suffix_filter_deps(localdata.getVar("RPROVIDES:%s" % pkg) or "", variant, variants)
233 rprovs = rprovs + " " + clsextend.extname + "-" + pkg 228 rprovs = rprovs + " " + variant + "-" + pkg
234 d.setVar("RPROVIDES:%s" % pkg, rprovs) 229 d.setVar("RPROVIDES:%s" % pkg, rprovs)
235} 230}
236 231
diff --git a/meta/lib/oe/__init__.py b/meta/lib/oe/__init__.py
index 73de774266..9e4134c483 100644
--- a/meta/lib/oe/__init__.py
+++ b/meta/lib/oe/__init__.py
@@ -12,4 +12,4 @@ __path__ = extend_path(__path__, __name__)
12BBIMPORTS = ["qa", "data", "path", "utils", "types", "package", "packagedata", \ 12BBIMPORTS = ["qa", "data", "path", "utils", "types", "package", "packagedata", \
13 "packagegroup", "sstatesig", "lsb", "cachedpath", "license", "qemu", \ 13 "packagegroup", "sstatesig", "lsb", "cachedpath", "license", "qemu", \
14 "reproducible", "rust", "buildcfg", "go", "spdx30_tasks", "spdx_common", \ 14 "reproducible", "rust", "buildcfg", "go", "spdx30_tasks", "spdx_common", \
15 "cve_check", "tune"] 15 "cve_check", "tune", "classextend"]
diff --git a/meta/lib/oe/classextend.py b/meta/lib/oe/classextend.py
index 8ae5d3b715..ddca10dee5 100644
--- a/meta/lib/oe/classextend.py
+++ b/meta/lib/oe/classextend.py
@@ -5,155 +5,136 @@
5# 5#
6 6
7import collections 7import collections
8import bb.filter
9
10@bb.filter.filter_proc()
11def native_filter(val, pn, bpn, regex=False, selfref=True):
12 deps = val
13 if not deps:
14 return
15 deps = bb.utils.explode_deps(deps)
16 newdeps = []
17 for dep in deps:
18 if regex and dep.startswith("^") and dep.endswith("$"):
19 if not dep.endswith("-native$"):
20 newdeps.append(dep[:-1].replace(pn, bpn) + "-native$")
21 else:
22 newdeps.append(dep)
23 elif dep == pn:
24 if not selfref:
25 continue
26 newdeps.append(dep)
27 elif "-cross-" in dep:
28 newdeps.append(dep.replace("-cross", "-native"))
29 elif not dep.endswith("-native"):
30 # Replace ${PN} with ${BPN} in the dependency to make sure
31 # dependencies on, e.g., ${PN}-foo become ${BPN}-foo-native
32 # rather than ${BPN}-native-foo-native.
33 newdeps.append(dep.replace(pn, bpn) + "-native")
34 else:
35 newdeps.append(dep)
36 return " ".join(newdeps)
37
38def add_suffix(val, extname, prefixes):
39 if val.startswith(extname + "-"):
40 return val
41 if val.endswith(("-native", "-native-runtime")) or ('nativesdk-' in val) or ('-cross-' in val) or ('-crosssdk-' in val):
42 return val
43 # If it starts with a known prefix (e.g. multilibs), just pass it through
44 for prefix in prefixes:
45 if val.startswith(prefix + "-"):
46 return val
47 if val.startswith("kernel-") or val == "virtual/kernel":
48 return val
49 if val.startswith("rtld"):
50 return val
51 if val.endswith("-crosssdk"):
52 return val
53 if val.endswith("-" + extname):
54 val = val.replace("-" + extname, "")
55 if val.startswith("virtual/"):
56 # Assume large numbers of dashes means a triplet is present and we don't need to convert
57 if val.count("-") >= 3 and val.endswith(("-go",)):
58 return val
59 subs = val.split("/", 1)[1]
60 if not subs.startswith(extname):
61 return "virtual/" + extname + "-" + subs
62 return val
63 if val.startswith("/") or (val.startswith("${") and val.endswith("}")):
64 return val
65 if not val.startswith(extname):
66 return extname + "-" + val
67 return val
68
69def get_package_mappings(packages, extname):
70 pkgs_mapping = []
71 for pkg in packages.split():
72 if pkg.startswith(extname):
73 pkgs_mapping.append([pkg.split(extname + "-")[1], pkg])
74 continue
75 pkgs_mapping.append([pkg, add_suffix(pkg, extname, [])])
76 return pkgs_mapping
77
78@bb.filter.filter_proc()
79def package_suffix_filter(val, extname):
80 pkgs_mapping = get_package_mappings(val, extname)
81 return " ".join([row[1] for row in pkgs_mapping])
82
83@bb.filter.filter_proc()
84def suffix_filter(val, extname, prefixes):
85 newdeps = []
86 for dep in val.split():
87 newdeps.append(add_suffix(dep, extname, prefixes))
88 return " ".join(newdeps)
89
90@bb.filter.filter_proc()
91def suffix_filter_regex(val, extname, prefixes):
92 newvar = []
93 for v in val.split():
94 if v.startswith("^" + extname):
95 newvar.append(v)
96 elif v.startswith("^"):
97 newvar.append("^" + extname + "-" + v[1:])
98 else:
99 newvar.append(add_suffix(v, extname, prefixes))
100 return " ".join(newvar)
8 101
9def get_packages(d): 102@bb.filter.filter_proc()
10 pkgs = d.getVar("PACKAGES_NONML") 103def suffix_filter_deps(val, extname, prefixes):
11 extcls = d.getVar("EXTENDERCLASS") 104 deps = bb.utils.explode_dep_versions2(val)
12 return extcls.rename_packages_internal(pkgs) 105 newdeps = collections.OrderedDict()
13 106 for dep in deps:
14def get_depends(varprefix, d): 107 newdeps[add_suffix(dep, extname, prefixes)] = deps[dep]
15 extcls = d.getVar("EXTENDERCLASS") 108 return bb.utils.join_deps(newdeps, False)
16 return extcls.map_depends_variable(varprefix + "_NONML")
17 109
18class ClassExtender(object): 110class ClassExtender(object):
19 def __init__(self, extname, d): 111 def __init__(self, extname, prefixes, d):
20 self.extname = extname 112 self.extname = extname
21 self.d = d 113 self.d = d
22 self.pkgs_mapping = [] 114 self.prefixes = prefixes
23 self.d.setVar("EXTENDERCLASS", self)
24
25 def extend_name(self, name):
26 if name.startswith("kernel-") or name == "virtual/kernel":
27 return name
28 if name.startswith("rtld"):
29 return name
30 if name.endswith("-crosssdk"):
31 return name
32 if name.endswith("-" + self.extname):
33 name = name.replace("-" + self.extname, "")
34 if name.startswith("virtual/"):
35 # Assume large numbers of dashes means a triplet is present and we don't need to convert
36 if name.count("-") >= 3 and name.endswith(("-go",)):
37 return name
38 subs = name.split("/", 1)[1]
39 if not subs.startswith(self.extname):
40 return "virtual/" + self.extname + "-" + subs
41 return name
42 if name.startswith("/") or (name.startswith("${") and name.endswith("}")):
43 return name
44 if not name.startswith(self.extname):
45 return self.extname + "-" + name
46 return name
47
48 def map_variable(self, varname, setvar = True):
49 var = self.d.getVar(varname)
50 if not var:
51 return ""
52 var = var.split()
53 newvar = []
54 for v in var:
55 newvar.append(self.extend_name(v))
56 newdata = " ".join(newvar)
57 if setvar:
58 self.d.setVar(varname, newdata)
59 return newdata
60
61 def map_regexp_variable(self, varname, setvar = True):
62 var = self.d.getVar(varname)
63 if not var:
64 return ""
65 var = var.split()
66 newvar = []
67 for v in var:
68 if v.startswith("^" + self.extname):
69 newvar.append(v)
70 elif v.startswith("^"):
71 newvar.append("^" + self.extname + "-" + v[1:])
72 else:
73 newvar.append(self.extend_name(v))
74 newdata = " ".join(newvar)
75 if setvar:
76 self.d.setVar(varname, newdata)
77 return newdata
78 115
79 def map_depends(self, dep): 116 def set_filter(self, var, deps):
80 if dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('cross-canadian' in dep) or ('-crosssdk-' in dep): 117 if deps:
81 return dep 118 self.d.setVarFilter(var, "suffix_filter_deps(val, '" + self.extname + "', " + str(self.prefixes) + ")")
82 else: 119 else:
83 # Do not extend for that already have multilib prefix 120 self.d.setVarFilter(var, "suffix_filter(val, '" + self.extname + "', " + str(self.prefixes) + ")")
84 var = self.d.getVar("MULTILIB_VARIANTS")
85 if var:
86 var = var.split()
87 for v in var:
88 if dep.startswith(v):
89 return dep
90 return self.extend_name(dep)
91
92 def map_depends_variable(self, varname, suffix = ""):
93 # We need to preserve EXTENDPKGV so it can be expanded correctly later
94 if suffix:
95 varname = varname + ":" + suffix
96 orig = self.d.getVar("EXTENDPKGV", False)
97 self.d.setVar("EXTENDPKGV", "EXTENDPKGV")
98 deps = self.d.getVar(varname)
99 if not deps:
100 self.d.setVar("EXTENDPKGV", orig)
101 return
102 deps = bb.utils.explode_dep_versions2(deps)
103 newdeps = collections.OrderedDict()
104 for dep in deps:
105 newdeps[self.map_depends(dep)] = deps[dep]
106
107 if not varname.endswith("_NONML"):
108 self.d.renameVar(varname, varname + "_NONML")
109 self.d.setVar(varname, "${@oe.classextend.get_depends('%s', d)}" % varname)
110 self.d.appendVarFlag(varname, "vardeps", " " + varname + "_NONML")
111 ret = bb.utils.join_deps(newdeps, False).replace("EXTENDPKGV", "${EXTENDPKGV}")
112 self.d.setVar("EXTENDPKGV", orig)
113 return ret
114 121
115 def map_packagevars(self): 122 def map_packagevars(self):
116 for pkg in (self.d.getVar("PACKAGES").split() + [""]): 123 self.set_filter("RDEPENDS", deps=True)
117 self.map_depends_variable("RDEPENDS", pkg) 124 self.set_filter("RRECOMMENDS", deps=True)
118 self.map_depends_variable("RRECOMMENDS", pkg) 125 self.set_filter("RSUGGESTS", deps=True)
119 self.map_depends_variable("RSUGGESTS", pkg) 126 self.set_filter("RPROVIDES", deps=True)
120 self.map_depends_variable("RPROVIDES", pkg) 127 self.set_filter("RREPLACES", deps=True)
121 self.map_depends_variable("RREPLACES", pkg) 128 self.set_filter("RCONFLICTS", deps=True)
122 self.map_depends_variable("RCONFLICTS", pkg) 129 self.set_filter("PKG", deps=True)
123 self.map_depends_variable("PKG", pkg)
124
125 def rename_packages(self):
126 for pkg in (self.d.getVar("PACKAGES") or "").split():
127 if pkg.startswith(self.extname):
128 self.pkgs_mapping.append([pkg.split(self.extname + "-")[1], pkg])
129 continue
130 self.pkgs_mapping.append([pkg, self.extend_name(pkg)])
131
132 self.d.renameVar("PACKAGES", "PACKAGES_NONML")
133 self.d.setVar("PACKAGES", "${@oe.classextend.get_packages(d)}")
134
135 def rename_packages_internal(self, pkgs):
136 self.pkgs_mapping = []
137 for pkg in (self.d.expand(pkgs) or "").split():
138 if pkg.startswith(self.extname):
139 self.pkgs_mapping.append([pkg.split(self.extname + "-")[1], pkg])
140 continue
141 self.pkgs_mapping.append([pkg, self.extend_name(pkg)])
142
143 return " ".join([row[1] for row in self.pkgs_mapping])
144 130
145 def rename_package_variables(self, variables): 131 def rename_package_variables(self, variables):
146 for pkg_mapping in self.pkgs_mapping: 132 pkgs_mapping = get_package_mappings(self.d.getVar('PACKAGES'), self.extname)
133 self.d.setVarFilter('PACKAGES', "package_suffix_filter(val, '" + self.extname + "')")
134 self.d.setVarFilter('PACKAGES_DYNAMIC', "suffix_filter_regex(val, '" + self.extname + "', " + str(self.prefixes) + ")")
135
136 for pkg_mapping in pkgs_mapping:
147 if pkg_mapping[0].startswith("${") and pkg_mapping[0].endswith("}"): 137 if pkg_mapping[0].startswith("${") and pkg_mapping[0].endswith("}"):
148 continue 138 continue
149 for subs in variables: 139 for subs in variables:
150 self.d.renameVar("%s:%s" % (subs, pkg_mapping[0]), "%s:%s" % (subs, pkg_mapping[1])) 140 self.d.renameVar("%s:%s" % (subs, pkg_mapping[0]), "%s:%s" % (subs, pkg_mapping[1]))
151
152class NativesdkClassExtender(ClassExtender):
153 def map_depends(self, dep):
154 if dep.startswith(self.extname):
155 return dep
156 if dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('-cross-' in dep) or ('-crosssdk-' in dep):
157 return dep
158 else:
159 return self.extend_name(dep)