summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)