]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
classes-recipe/multilib_script: Expand before splitting
authorJoshua Watt <JPEWhacker@gmail.com>
Mon, 15 Jul 2024 21:52:12 +0000 (15:52 -0600)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 18 Jul 2024 16:19:03 +0000 (17:19 +0100)
multilib_script.bbclass was unable to work correctly in the case where
e.g. a PACKAGECONFIG removed the script that it was intended to rename
(as an example, the "trace" PACKAGECONFIG in cairo). The way to fix this
would be to do something like:

 MULTILIB_SCRIPTS = "${@bb.utils.contains('PACKAGECONFIG', 'trace', '${PN}-perf-utils:${bindir}/cairo-trace', '', d)}"

but this is not possible because the variable is not expanded before
being split.

To fix this, change the class to expand the variable before splitting.
There are two cases to be considered that could possibly break:
 1) If the RHS of the ":" contains a ":", which is accounted for by
    limiting the splitting to 1 split, which will leave the ":" in the
    RHS in tact. Of note, this works because ":" isn't valid in a
    package name
 2) If the RHS of the ":" contained whitespace, however this would have
    broken the mv command written to multilibscript_rename(), so this
    isn't occurring in practice.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes-recipe/multilib_script.bbclass

index e6f0249529ccd038b174796f349354fc680ba9c3..a7a08930b7e3ae1441c58a76735d3a15407055e5 100644 (file)
@@ -28,14 +28,12 @@ python () {
     if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d):
         return
 
-    for entry in (d.getVar("MULTILIB_SCRIPTS", False) or "").split():
-        pkg, script = entry.split(":")
-        epkg = d.expand(pkg)
-        escript = d.expand(script)
-        scriptname = os.path.basename(escript)
-        d.appendVar("ALTERNATIVE:" + epkg, " " + scriptname + " ")
-        d.setVarFlag("ALTERNATIVE_LINK_NAME", scriptname, escript)
-        d.setVarFlag("ALTERNATIVE_TARGET", scriptname, escript + "-${MULTILIB_SUFFIX}")
-        d.appendVar("multilibscript_rename",  "\n      mv ${PKGD}" + escript + " ${PKGD}" + escript + "-${MULTILIB_SUFFIX}")
-        d.appendVar("FILES:" + epkg, " " + escript + "-${MULTILIB_SUFFIX}")
+    for entry in (d.getVar("MULTILIB_SCRIPTS") or "").split():
+        pkg, script = entry.split(":", 1)
+        scriptname = os.path.basename(script)
+        d.appendVar("ALTERNATIVE:" + pkg, " " + scriptname + " ")
+        d.setVarFlag("ALTERNATIVE_LINK_NAME", scriptname, script)
+        d.setVarFlag("ALTERNATIVE_TARGET", scriptname, script + "-${MULTILIB_SUFFIX}")
+        d.appendVar("multilibscript_rename",  "\n      mv ${PKGD}" + script + " ${PKGD}" + script + "-${MULTILIB_SUFFIX}")
+        d.appendVar("FILES:" + pkg, " " + script + "-${MULTILIB_SUFFIX}")
 }