]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
ptest-cargo.bbclass: Support of cargo workspaces
authorFrederic Martinsons <frederic.martinsons@gmail.com>
Sat, 29 Jul 2023 05:09:21 +0000 (07:09 +0200)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sun, 30 Jul 2023 06:48:33 +0000 (07:48 +0100)
For complex project, it is very common to have multiple
sub artifacts and so use workspaces, sometimes it has
even no root artifacts (but several bin or lib) and
virtual manifest is used for that.

Long story short, support this case in ptest-cargo class
to look for all test binaries in the current project
and no more those generated by the root Cargo.toml

Signed-off-by: Frederic Martinsons <frederic.martinsons@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes-recipe/ptest-cargo.bbclass

index 5d53abe9691f076d672b9a2f3d8b76d7f7441d72..ff57be852508ea8e52d660d5c1e1b1703c6530ea 100644 (file)
@@ -16,6 +16,8 @@ python do_compile_ptest_cargo() {
     cargo_build_flags = d.getVar("CARGO_BUILD_FLAGS", True)
     rust_flags = d.getVar("RUSTFLAGS", True)
     manifest_path = d.getVar("MANIFEST_PATH", True)
+    project_manifest_path = os.path.normpath(manifest_path)
+    manifest_dir = os.path.dirname(manifest_path)
 
     env = os.environ.copy()
     env['RUSTFLAGS'] = rust_flags
@@ -46,13 +48,15 @@ python do_compile_ptest_cargo() {
             pass
         else:
             try:
-                # Filter the test packages coming from the current manifest
+                # Filter the test packages coming from the current project:
+                #    - test binaries from the root manifest
+                #    - test binaries from sub manifest of the current project if any
                 current_manifest_path = os.path.normpath(data['manifest_path'])
-                project_manifest_path = os.path.normpath(manifest_path)
-                if current_manifest_path == project_manifest_path:
+                common_path = os.path.commonpath([current_manifest_path, project_manifest_path])
+                if common_path in [manifest_dir, current_manifest_path]:
                     if (data['target']['test'] or data['target']['doctest']) and data['executable']:
                         test_bins.append(data['executable'])
-            except KeyError as e:
+            except (KeyError, ValueError) as e:
                 # skip lines that do not meet the requirements
                 pass