summaryrefslogtreecommitdiff
path: root/mesonbuild/cargo/interpreter.py
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-08-01 19:00:04 +0200
committerXavier Claessens <xclaesse@gmail.com>2025-10-17 12:48:29 -0400
commit18b6ed9ebbe352d11c07b432ba0b88138dfd77e6 (patch)
treebcf99fc8c6da1926b1f1d6c22d773a0fcdb66bcd /mesonbuild/cargo/interpreter.py
parent58b5d1b09583eb83f0a934e05cbd4686ede7165c (diff)
downloadmeson-18b6ed9ebbe352d11c07b432ba0b88138dfd77e6.tar.gz
cargo: split interpret_package() and _create_package()
Extracted from a patch by Xavier Claessens <xclaessens@netflix.com>
Diffstat (limited to 'mesonbuild/cargo/interpreter.py')
-rw-r--r--mesonbuild/cargo/interpreter.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py
index 1a2330084..08ee3575e 100644
--- a/mesonbuild/cargo/interpreter.py
+++ b/mesonbuild/cargo/interpreter.py
@@ -88,6 +88,11 @@ class Interpreter:
def interpret(self, subdir: str) -> mparser.CodeBlockNode:
manifest = self._load_manifest(subdir)
+ filename = os.path.join(self.environment.source_dir, subdir, 'Cargo.toml')
+ build = builder.Builder(filename)
+ return self.interpret_package(manifest, build, subdir)
+
+ def interpret_package(self, manifest: Manifest, build: builder.Builder, subdir: str) -> mparser.CodeBlockNode:
pkg, cached = self._fetch_package(manifest.package.name, manifest.package.api)
if not cached:
# This is an entry point, always enable the 'default' feature.
@@ -95,11 +100,14 @@ class Interpreter:
self._enable_feature(pkg, 'default')
# Build an AST for this package
- filename = os.path.join(self.environment.source_dir, subdir, 'Cargo.toml')
- build = builder.Builder(filename)
- ast = self._create_project(pkg, build)
- ast += [
- build.assign(build.function('import', [build.string('rust')]), 'rust'),
+ ast: T.List[mparser.BaseNode] = []
+ ast += self._create_project(pkg, build)
+ ast.append(build.assign(build.function('import', [build.string('rust')]), 'rust'))
+ ast += self._create_package(pkg, build, subdir)
+ return build.block(ast)
+
+ def _create_package(self, pkg: PackageState, build: builder.Builder, subdir: str) -> T.List[mparser.BaseNode]:
+ ast: T.List[mparser.BaseNode] = [
build.function('message', [
build.string('Enabled features:'),
build.array([build.string(f) for f in pkg.features]),
@@ -112,7 +120,7 @@ class Interpreter:
for crate_type in pkg.manifest.lib.crate_type:
ast.extend(self._create_lib(pkg, build, crate_type))
- return build.block(ast)
+ return ast
def _fetch_package(self, package_name: str, api: str) -> T.Tuple[PackageState, bool]:
key = PackageKey(package_name, api)