diff options
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/multilib.bbclass | 39 | ||||
-rw-r--r-- | meta/classes/multilib_global.bbclass | 39 |
2 files changed, 51 insertions, 27 deletions
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass index 5d975fd33..583d76b0f 100644 --- a/meta/classes/multilib.bbclass +++ b/meta/classes/multilib.bbclass @@ -6,12 +6,17 @@ python multilib_virtclass_handler () { variant = e.data.getVar("BBEXTENDVARIANT", True) if cls != "multilib" or not variant: return + + # There should only be one kernel in multilib configs + if bb.data.inherits_class('kernel', e.data) or bb.data.inherits_class('module-base', e.data) or bb.data.inherits_class('allarch', e.data): + raise bb.parse.SkipPackage("We shouldn't have multilib variants for the kernel") + save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME", True) or "" for name in save_var_name.split(): val=e.data.getVar(name, True) if val: e.data.setVar(name + "_MULTILIB_ORIGINAL", val) - + override = ":virtclass-multilib-" + variant e.data.setVar("MLPREFIX", variant + "-") @@ -28,16 +33,6 @@ STAGINGCC_prepend = "${BBEXTENDVARIANT}-" python __anonymous () { variant = d.getVar("BBEXTENDVARIANT", True) - def extend_name(name): - if name.startswith("virtual/"): - subs = name.split("/", 1)[1] - if not subs.startswith(variant): - return "virtual/" + variant + "-" + subs - return name - if not name.startswith(variant): - return variant + "-" + name - return name - def map_dependencies(varname, d, suffix = ""): if suffix: varname = varname + "_" + suffix @@ -50,25 +45,15 @@ python __anonymous () { if dep.endswith(("-native", "-native-runtime")): newdeps.append(dep) else: - newdeps.append(extend_name(dep)) + newdeps.append(multilib_extend_name(variant, dep)) d.setVar(varname, " ".join(newdeps)) - def map_variable(varname, d): - var = d.getVar(varname, True) - if not var: - return - var = var.split() - newvar = [] - for v in var: - newvar.append(extend_name(v)) - d.setVar(varname, " ".join(newvar)) - pkgs_mapping = [] for pkg in (d.getVar("PACKAGES", True) or "").split(): if pkg.startswith(variant): pkgs_mapping.append([pkg.split(variant + "-")[1], pkg]) continue - pkgs_mapping.append([pkg, extend_name(pkg)]) + pkgs_mapping.append([pkg, multilib_extend_name(variant, pkg)]) d.setVar("PACKAGES", " ".join([row[1] for row in pkgs_mapping])) @@ -87,8 +72,8 @@ python __anonymous () { map_dependencies("RCONFLICTS", d, pkg) map_dependencies("PKG", d, pkg) - map_variable("PROVIDES", d) - map_variable("PACKAGES_DYNAMIC", d) - map_variable("PACKAGE_INSTALL", d) - map_variable("INITSCRIPT_PACKAGES", d) + multilib_map_variable("PROVIDES", variant, d) + multilib_map_variable("PACKAGES_DYNAMIC", variant, d) + multilib_map_variable("PACKAGE_INSTALL", variant, d) + multilib_map_variable("INITSCRIPT_PACKAGES", variant, d) } diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass new file mode 100644 index 000000000..217349b2d --- /dev/null +++ b/meta/classes/multilib_global.bbclass @@ -0,0 +1,39 @@ +python multilib_virtclass_handler_global () { + if not e.data: + return + + variant = e.data.getVar("BBEXTENDVARIANT", True) + + if isinstance(e, bb.event.RecipeParsed) and not variant: + if bb.data.inherits_class('kernel', e.data) or bb.data.inherits_class('module-base', e.data) or bb.data.inherits_class('allarch', e.data): + origprovs = provs = e.data.getVar("PROVIDES", True) + variants = (e.data.getVar("MULTILIB_VARIANTS", True) or "").split() + for variant in variants: + provs = provs + " " + multilib_map_variable("PROVIDES", variant, e.data) + e.data.setVar("PROVIDES", origprovs) + e.data.setVar("PROVIDES", provs) +} + +addhandler multilib_virtclass_handler_global + +def multilib_extend_name(variant, name): + if name.startswith("virtual/"): + subs = name.split("/", 1)[1] + if not subs.startswith(variant): + return "virtual/" + variant + "-" + subs + return name + if not name.startswith(variant): + return variant + "-" + name + return name + +def multilib_map_variable(varname, variant, d): + var = d.getVar(varname, True) + if not var: + return + var = var.split() + newvar = [] + for v in var: + newvar.append(multilib_extend_name(variant, v)) + newdata = " ".join(newvar) + d.setVar(varname, newdata) + return newdata |