123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #
- # SPDX-License-Identifier: GPL-2.0-only
- #
- import collections
- class ClassExtender(object):
- def __init__(self, extname, d):
- self.extname = extname
- self.d = d
- self.pkgs_mapping = []
- def extend_name(self, name):
- if name.startswith("kernel-") or name == "virtual/kernel":
- return name
- if name.startswith("rtld"):
- return name
- if name.endswith("-crosssdk"):
- return name
- if name.endswith("-" + self.extname):
- name = name.replace("-" + self.extname, "")
- if name.startswith("virtual/"):
- subs = name.split("/", 1)[1]
- if not subs.startswith(self.extname):
- return "virtual/" + self.extname + "-" + subs
- return name
- if not name.startswith(self.extname):
- return self.extname + "-" + name
- return name
- def map_variable(self, varname, setvar = True):
- var = self.d.getVar(varname)
- if not var:
- return ""
- var = var.split()
- newvar = []
- for v in var:
- newvar.append(self.extend_name(v))
- newdata = " ".join(newvar)
- if setvar:
- self.d.setVar(varname, newdata)
- return newdata
- def map_regexp_variable(self, varname, setvar = True):
- var = self.d.getVar(varname)
- if not var:
- return ""
- var = var.split()
- newvar = []
- for v in var:
- if v.startswith("^" + self.extname):
- newvar.append(v)
- elif v.startswith("^"):
- newvar.append("^" + self.extname + "-" + v[1:])
- else:
- newvar.append(self.extend_name(v))
- newdata = " ".join(newvar)
- if setvar:
- self.d.setVar(varname, newdata)
- return newdata
- def map_depends(self, dep):
- if dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('cross-canadian' in dep) or ('-crosssdk-' in dep):
- return dep
- else:
- # Do not extend for that already have multilib prefix
- var = self.d.getVar("MULTILIB_VARIANTS")
- if var:
- var = var.split()
- for v in var:
- if dep.startswith(v):
- return dep
- return self.extend_name(dep)
- def map_depends_variable(self, varname, suffix = ""):
- # We need to preserve EXTENDPKGV so it can be expanded correctly later
- if suffix:
- varname = varname + "_" + suffix
- orig = self.d.getVar("EXTENDPKGV", False)
- self.d.setVar("EXTENDPKGV", "EXTENDPKGV")
- deps = self.d.getVar(varname)
- if not deps:
- self.d.setVar("EXTENDPKGV", orig)
- return
- deps = bb.utils.explode_dep_versions2(deps)
- newdeps = collections.OrderedDict()
- for dep in deps:
- newdeps[self.map_depends(dep)] = deps[dep]
- self.d.setVar(varname, bb.utils.join_deps(newdeps, False).replace("EXTENDPKGV", "${EXTENDPKGV}"))
- self.d.setVar("EXTENDPKGV", orig)
- def map_packagevars(self):
- for pkg in (self.d.getVar("PACKAGES").split() + [""]):
- self.map_depends_variable("RDEPENDS", pkg)
- self.map_depends_variable("RRECOMMENDS", pkg)
- self.map_depends_variable("RSUGGESTS", pkg)
- self.map_depends_variable("RPROVIDES", pkg)
- self.map_depends_variable("RREPLACES", pkg)
- self.map_depends_variable("RCONFLICTS", pkg)
- self.map_depends_variable("PKG", pkg)
- def rename_packages(self):
- for pkg in (self.d.getVar("PACKAGES") or "").split():
- if pkg.startswith(self.extname):
- self.pkgs_mapping.append([pkg.split(self.extname + "-")[1], pkg])
- continue
- self.pkgs_mapping.append([pkg, self.extend_name(pkg)])
- self.d.setVar("PACKAGES", " ".join([row[1] for row in self.pkgs_mapping]))
- def rename_package_variables(self, variables):
- for pkg_mapping in self.pkgs_mapping:
- for subs in variables:
- self.d.renameVar("%s_%s" % (subs, pkg_mapping[0]), "%s_%s" % (subs, pkg_mapping[1]))
- class NativesdkClassExtender(ClassExtender):
- def map_depends(self, dep):
- if dep.startswith(self.extname):
- return dep
- if dep.endswith(("-gcc", "-g++")):
- return dep + "-crosssdk"
- elif dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('-cross-' in dep) or ('-crosssdk-' in dep):
- return dep
- else:
- return self.extend_name(dep)
|