Thread (4 messages) 4 messages, 2 authors, 25d ago

[PATCH 1/2] classes/setuptools: use tomllib instead of regex to parse pyproject.toml

COLD25d

From: Ross Burton <hidden>
Date: 2026-09-09 15:19:15
Subsystem: the rest · Maintainer: Linus Torvalds

BitBake now vendors in tomli[1] for when the host Python is older than
3.11 so doesn't have tomllib. Rewrite the pyproject.toml parsing from
regexs to tomllib.

Also ensure that the functions in setuptools3 and setuptools_legacy are
identical, as they had diverged.

[1] bitbake 69810e0c0a ("lib/bb/_vendor: resync to add tomli")

Signed-off-by: Ross Burton <redacted>
---
 meta/classes-recipe/setuptools3.bbclass       | 24 +++++++++++----
 .../classes-recipe/setuptools3_legacy.bbclass | 29 ++++++++++++++-----
 2 files changed, 40 insertions(+), 13 deletions(-)
diff --git a/meta/classes-recipe/setuptools3.bbclass b/meta/classes-recipe/setuptools3.bbclass
index b0e4ab5208c..8e0fdff9e9d 100644
--- a/meta/classes-recipe/setuptools3.bbclass
+++ b/meta/classes-recipe/setuptools3.bbclass
@@ -13,19 +13,31 @@ SETUPTOOLS_BUILD_ARGS ?= ""
 SETUPTOOLS_SETUP_PATH ?= "${S}"
 
 python do_check_backend() {
+    """
+    Check if this package has a pyproject.toml that specifies a PEP517 build backend, so should be
+    using a different build class.
+    """
+
     if "pep517-backend" in (d.getVar("INSANE_SKIP") or "").split():
         return
 
-    import re
+    try:
+        import tomllib
+    except ImportError:
+        import bb._vendor_tomli as tomllib
+
     filename = d.expand("${SETUPTOOLS_SETUP_PATH}/pyproject.toml")
     if os.path.exists(filename):
-        for line in open(filename):
-            match = re.match(r"build-backend\s*=\s*\W([\w.]+)\W", line)
-            if not match: continue
+        with open(filename, "rb") as f:
+            toml = tomllib.load(f)
 
-            msg = f"inherits setuptools3 but has pyproject.toml with {match[1]}, use the correct class"
+        try:
+            backend = toml["build-system"]["build-backend"]
+            msg = f"inherits setuptools3 but has pyproject.toml specifying backend {backend}, use the correct class"
             oe.qa.handle_error("pep517-backend", msg, d)
-    oe.qa.exit_if_errors(d)
+            oe.qa.exit_if_errors(d)
+        except KeyError:
+            return
 }
 addtask check_backend after do_patch before do_configure
 
diff --git a/meta/classes-recipe/setuptools3_legacy.bbclass b/meta/classes-recipe/setuptools3_legacy.bbclass
index 6b51b9796bc..102d0827538 100644
--- a/meta/classes-recipe/setuptools3_legacy.bbclass
+++ b/meta/classes-recipe/setuptools3_legacy.bbclass
@@ -31,16 +31,31 @@ SETUPTOOLS_PYTHON:class-native = "nativepython3"
 SETUPTOOLS_SETUP_PATH ?= "${S}"
 
 python do_check_backend() {
-    import re
+    """
+    Check if this package has a pyproject.toml that specifies a PEP517 build backend, so should be
+    using a different build class.
+    """
+
+    if "pep517-backend" in (d.getVar("INSANE_SKIP") or "").split():
+        return
+
+    try:
+        import tomllib
+    except ImportError:
+        import bb._vendor_tomli as tomllib
+
     filename = d.expand("${SETUPTOOLS_SETUP_PATH}/pyproject.toml")
     if os.path.exists(filename):
-        for line in open(filename):
-            match = re.match(r"build-backend\s*=\s*\W([\w.]+)\W", line)
-            if not match: continue
+        with open(filename, "rb") as f:
+            toml = tomllib.load(f)
 
-            msg = f"inherits setuptools3_legacy but has pyproject.toml with {match[1]}, use the correct class"
-            if "pep517-backend" not in (d.getVar("INSANE_SKIP") or "").split():
-                oe.qa.handle_error("pep517-backend", msg, d)
+        try:
+            backend = toml["build-system"]["build-backend"]
+            msg = f"inherits setuptools3_legacy but has pyproject.toml specifying backend {backend}, use the correct class"
+            oe.qa.handle_error("pep517-backend", msg, d)
+            oe.qa.exit_if_errors(d)
+        except KeyError:
+            return
 }
 addtask check_backend after do_patch before do_configure
 
-- 
2.43.0

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help