From: Frederic Martinsons Date: Sat, 29 Jul 2023 05:09:21 +0000 (+0200) Subject: ptest-cargo.bbclass: Support of cargo workspaces X-Git-Tag: lucaceresoli/bug-15201-perf-libtraceevent-missing~255 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=67644c3fa7d012ad03d0a876a281d5abd5edf7fe;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git ptest-cargo.bbclass: Support of cargo workspaces 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 Signed-off-by: Richard Purdie --- diff --git a/meta/classes-recipe/ptest-cargo.bbclass b/meta/classes-recipe/ptest-cargo.bbclass index 5d53abe9691..ff57be85250 100644 --- a/meta/classes-recipe/ptest-cargo.bbclass +++ b/meta/classes-recipe/ptest-cargo.bbclass @@ -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