aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/ninjabackend.py15
-rw-r--r--test cases/rust/18 structured sources/main-gen-copy.rs5
-rw-r--r--test cases/rust/18 structured sources/meson.build19
-rw-r--r--test cases/rust/18 structured sources/priv.rs3
-rw-r--r--test cases/rust/18 structured sources/src2/meson.build4
5 files changed, 42 insertions, 4 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 691f844..614e864 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1709,17 +1709,24 @@ class NinjaBackend(backends.Backend):
_ods, main_rust_file = self.__generate_compile_structure(target)
orderdeps.extend(_ods)
else:
+ # The only way to get here is to have only files in the "root"
+ # positional argument, which are all generated into the same
+ # directory
g = target.structured_sources.first_file()
if isinstance(g, File):
main_rust_file = g.rel_to_builddir(self.build_to_src)
elif isinstance(g, GeneratedList):
- main_rust_file = os.path.join(self.get_target_private_dir(target), i)
+ main_rust_file = os.path.join(self.get_target_private_dir(target), g.get_outputs()[0])
else:
- main_rust_file = os.path.join(g.get_subdir(), i)
- orderdeps.extend([os.path.join(self.build_to_src, target.subdir, s)
- for s in target.structured_sources.as_list()])
+ main_rust_file = os.path.join(g.get_subdir(), g.get_outputs()[0])
+ for f in target.structured_sources.as_list():
+ if isinstance(f, File):
+ orderdeps.append(f.rel_to_builddir(self.build_to_src))
+ else:
+ orderdeps.extend([os.path.join(self.build_to_src, f.subdir, s)
+ for s in f.get_outputs()])
for i in target.get_sources():
if not rustc.can_compile(i):
diff --git a/test cases/rust/18 structured sources/main-gen-copy.rs b/test cases/rust/18 structured sources/main-gen-copy.rs
new file mode 100644
index 0000000..db66a51
--- /dev/null
+++ b/test cases/rust/18 structured sources/main-gen-copy.rs
@@ -0,0 +1,5 @@
+include!(r#"@dir@/include.rs"#);
+
+pub fn main() {
+ priv_func();
+}
diff --git a/test cases/rust/18 structured sources/meson.build b/test cases/rust/18 structured sources/meson.build
index 8fa0443..d84e83f 100644
--- a/test cases/rust/18 structured sources/meson.build
+++ b/test cases/rust/18 structured sources/meson.build
@@ -37,3 +37,22 @@ executable(
)
test('no-copy', find_program('no_copy_test.py'), args : meson.current_build_dir())
+
+subdir('src2')
+
+executable('copy-no-gen', srcs2)
+
+m_src = configure_file(
+ input : 'main-gen-copy.rs',
+ output : 'main-gen-copy.rs',
+ configuration : {'dir' : meson.current_build_dir().replace('\\', '/')},
+)
+
+m_src2 = configure_file(
+ input : 'priv.rs',
+ output : 'include.rs',
+ copy : true
+)
+
+executable('gen-no-copy', structured_sources([m_src, m_src2]))
+
diff --git a/test cases/rust/18 structured sources/priv.rs b/test cases/rust/18 structured sources/priv.rs
new file mode 100644
index 0000000..aad196b
--- /dev/null
+++ b/test cases/rust/18 structured sources/priv.rs
@@ -0,0 +1,3 @@
+fn priv_func() {
+ std::process::exit(0);
+}
diff --git a/test cases/rust/18 structured sources/src2/meson.build b/test cases/rust/18 structured sources/src2/meson.build
new file mode 100644
index 0000000..b4844d2
--- /dev/null
+++ b/test cases/rust/18 structured sources/src2/meson.build
@@ -0,0 +1,4 @@
+srcs2 = structured_sources(
+ ['main-unique.rs'],
+ {'foo': 'foo/mod.rs'},
+)