diff options
| -rw-r--r-- | meta/classes/multilib.bbclass | 39 | ||||
| -rw-r--r-- | meta/classes/multilib_global.bbclass | 39 | ||||
| -rw-r--r-- | meta/conf/multilib.conf | 2 |
3 files changed, 53 insertions, 27 deletions
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass index 5d975fd33e..583d76b0f3 100644 --- a/meta/classes/multilib.bbclass +++ b/meta/classes/multilib.bbclass | |||
| @@ -6,12 +6,17 @@ python multilib_virtclass_handler () { | |||
| 6 | variant = e.data.getVar("BBEXTENDVARIANT", True) | 6 | variant = e.data.getVar("BBEXTENDVARIANT", True) |
| 7 | if cls != "multilib" or not variant: | 7 | if cls != "multilib" or not variant: |
| 8 | return | 8 | return |
| 9 | |||
| 10 | # There should only be one kernel in multilib configs | ||
| 11 | 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): | ||
| 12 | raise bb.parse.SkipPackage("We shouldn't have multilib variants for the kernel") | ||
| 13 | |||
| 9 | save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME", True) or "" | 14 | save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME", True) or "" |
| 10 | for name in save_var_name.split(): | 15 | for name in save_var_name.split(): |
| 11 | val=e.data.getVar(name, True) | 16 | val=e.data.getVar(name, True) |
| 12 | if val: | 17 | if val: |
| 13 | e.data.setVar(name + "_MULTILIB_ORIGINAL", val) | 18 | e.data.setVar(name + "_MULTILIB_ORIGINAL", val) |
| 14 | 19 | ||
| 15 | override = ":virtclass-multilib-" + variant | 20 | override = ":virtclass-multilib-" + variant |
| 16 | 21 | ||
| 17 | e.data.setVar("MLPREFIX", variant + "-") | 22 | e.data.setVar("MLPREFIX", variant + "-") |
| @@ -28,16 +33,6 @@ STAGINGCC_prepend = "${BBEXTENDVARIANT}-" | |||
| 28 | python __anonymous () { | 33 | python __anonymous () { |
| 29 | variant = d.getVar("BBEXTENDVARIANT", True) | 34 | variant = d.getVar("BBEXTENDVARIANT", True) |
| 30 | 35 | ||
| 31 | def extend_name(name): | ||
| 32 | if name.startswith("virtual/"): | ||
| 33 | subs = name.split("/", 1)[1] | ||
| 34 | if not subs.startswith(variant): | ||
| 35 | return "virtual/" + variant + "-" + subs | ||
| 36 | return name | ||
| 37 | if not name.startswith(variant): | ||
| 38 | return variant + "-" + name | ||
| 39 | return name | ||
| 40 | |||
| 41 | def map_dependencies(varname, d, suffix = ""): | 36 | def map_dependencies(varname, d, suffix = ""): |
| 42 | if suffix: | 37 | if suffix: |
| 43 | varname = varname + "_" + suffix | 38 | varname = varname + "_" + suffix |
| @@ -50,25 +45,15 @@ python __anonymous () { | |||
| 50 | if dep.endswith(("-native", "-native-runtime")): | 45 | if dep.endswith(("-native", "-native-runtime")): |
| 51 | newdeps.append(dep) | 46 | newdeps.append(dep) |
| 52 | else: | 47 | else: |
| 53 | newdeps.append(extend_name(dep)) | 48 | newdeps.append(multilib_extend_name(variant, dep)) |
| 54 | d.setVar(varname, " ".join(newdeps)) | 49 | d.setVar(varname, " ".join(newdeps)) |
| 55 | 50 | ||
| 56 | def map_variable(varname, d): | ||
| 57 | var = d.getVar(varname, True) | ||
| 58 | if not var: | ||
| 59 | return | ||
| 60 | var = var.split() | ||
| 61 | newvar = [] | ||
| 62 | for v in var: | ||
| 63 | newvar.append(extend_name(v)) | ||
| 64 | d.setVar(varname, " ".join(newvar)) | ||
| 65 | |||
| 66 | pkgs_mapping = [] | 51 | pkgs_mapping = [] |
| 67 | for pkg in (d.getVar("PACKAGES", True) or "").split(): | 52 | for pkg in (d.getVar("PACKAGES", True) or "").split(): |
| 68 | if pkg.startswith(variant): | 53 | if pkg.startswith(variant): |
| 69 | pkgs_mapping.append([pkg.split(variant + "-")[1], pkg]) | 54 | pkgs_mapping.append([pkg.split(variant + "-")[1], pkg]) |
| 70 | continue | 55 | continue |
| 71 | pkgs_mapping.append([pkg, extend_name(pkg)]) | 56 | pkgs_mapping.append([pkg, multilib_extend_name(variant, pkg)]) |
| 72 | 57 | ||
| 73 | d.setVar("PACKAGES", " ".join([row[1] for row in pkgs_mapping])) | 58 | d.setVar("PACKAGES", " ".join([row[1] for row in pkgs_mapping])) |
| 74 | 59 | ||
| @@ -87,8 +72,8 @@ python __anonymous () { | |||
| 87 | map_dependencies("RCONFLICTS", d, pkg) | 72 | map_dependencies("RCONFLICTS", d, pkg) |
| 88 | map_dependencies("PKG", d, pkg) | 73 | map_dependencies("PKG", d, pkg) |
| 89 | 74 | ||
| 90 | map_variable("PROVIDES", d) | 75 | multilib_map_variable("PROVIDES", variant, d) |
| 91 | map_variable("PACKAGES_DYNAMIC", d) | 76 | multilib_map_variable("PACKAGES_DYNAMIC", variant, d) |
| 92 | map_variable("PACKAGE_INSTALL", d) | 77 | multilib_map_variable("PACKAGE_INSTALL", variant, d) |
| 93 | map_variable("INITSCRIPT_PACKAGES", d) | 78 | multilib_map_variable("INITSCRIPT_PACKAGES", variant, d) |
| 94 | } | 79 | } |
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass new file mode 100644 index 0000000000..217349b2d4 --- /dev/null +++ b/meta/classes/multilib_global.bbclass | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | python multilib_virtclass_handler_global () { | ||
| 2 | if not e.data: | ||
| 3 | return | ||
| 4 | |||
| 5 | variant = e.data.getVar("BBEXTENDVARIANT", True) | ||
| 6 | |||
| 7 | if isinstance(e, bb.event.RecipeParsed) and not variant: | ||
| 8 | 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): | ||
| 9 | origprovs = provs = e.data.getVar("PROVIDES", True) | ||
| 10 | variants = (e.data.getVar("MULTILIB_VARIANTS", True) or "").split() | ||
| 11 | for variant in variants: | ||
| 12 | provs = provs + " " + multilib_map_variable("PROVIDES", variant, e.data) | ||
| 13 | e.data.setVar("PROVIDES", origprovs) | ||
| 14 | e.data.setVar("PROVIDES", provs) | ||
| 15 | } | ||
| 16 | |||
| 17 | addhandler multilib_virtclass_handler_global | ||
| 18 | |||
| 19 | def multilib_extend_name(variant, name): | ||
| 20 | if name.startswith("virtual/"): | ||
| 21 | subs = name.split("/", 1)[1] | ||
| 22 | if not subs.startswith(variant): | ||
| 23 | return "virtual/" + variant + "-" + subs | ||
| 24 | return name | ||
| 25 | if not name.startswith(variant): | ||
| 26 | return variant + "-" + name | ||
| 27 | return name | ||
| 28 | |||
| 29 | def multilib_map_variable(varname, variant, d): | ||
| 30 | var = d.getVar(varname, True) | ||
| 31 | if not var: | ||
| 32 | return | ||
| 33 | var = var.split() | ||
| 34 | newvar = [] | ||
| 35 | for v in var: | ||
| 36 | newvar.append(multilib_extend_name(variant, v)) | ||
| 37 | newdata = " ".join(newvar) | ||
| 38 | d.setVar(varname, newdata) | ||
| 39 | return newdata | ||
diff --git a/meta/conf/multilib.conf b/meta/conf/multilib.conf index babf191669..eec1da79c9 100644 --- a/meta/conf/multilib.conf +++ b/meta/conf/multilib.conf | |||
| @@ -9,6 +9,8 @@ MULTILIBS ??= "multilib:lib32" | |||
| 9 | STAGING_DIR_HOST = "${STAGING_DIR}/${MLPREFIX}${MACHINE}" | 9 | STAGING_DIR_HOST = "${STAGING_DIR}/${MLPREFIX}${MACHINE}" |
| 10 | STAGING_DIR_TARGET = "${STAGING_DIR}/${MLPREFIX}${MACHINE}" | 10 | STAGING_DIR_TARGET = "${STAGING_DIR}/${MLPREFIX}${MACHINE}" |
| 11 | 11 | ||
| 12 | INHERIT += "multilib_global" | ||
| 13 | |||
| 12 | BBCLASSEXTEND_append_pn-acl = " ${MULTILIBS}" | 14 | BBCLASSEXTEND_append_pn-acl = " ${MULTILIBS}" |
| 13 | BBCLASSEXTEND_append_pn-alsa-lib = " ${MULTILIBS}" | 15 | BBCLASSEXTEND_append_pn-alsa-lib = " ${MULTILIBS}" |
| 14 | BBCLASSEXTEND_append_pn-alsa-utils = " ${MULTILIBS}" | 16 | BBCLASSEXTEND_append_pn-alsa-utils = " ${MULTILIBS}" |
