diff options
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 15 | ||||
-rw-r--r-- | test cases/rust/18 structured sources/main-gen-copy.rs | 5 | ||||
-rw-r--r-- | test cases/rust/18 structured sources/meson.build | 19 | ||||
-rw-r--r-- | test cases/rust/18 structured sources/priv.rs | 3 | ||||
-rw-r--r-- | test cases/rust/18 structured sources/src2/meson.build | 4 |
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'}, +) |