diff options
| author | Dylan Baker <dylan@pnwbakers.com> | 2022-03-18 19:46:47 -0700 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2022-03-21 11:26:52 -0700 |
| commit | 9b83fc5ece8932661ea0255e5362417fef117b15 (patch) | |
| tree | 411b767330b560b74cd54b295b758d10d6db7eb0 | |
| parent | f9445300b3015308fd6a3e0305cf8e5b7f002211 (diff) | |
| download | meson-9b83fc5ece8932661ea0255e5362417fef117b15.tar.gz | |
ninja: fix handling of rust structured_sources in rare case
In the even that all of the inputs are generated, and they're all
generated into the same folder, and there are no subfolders, we would
fail to correctly handle all of the files after the main file. Let's fix
that.t
| -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 691f8441f..614e864a2 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 000000000..db66a515a --- /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 8fa044364..d84e83f15 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 000000000..aad196b49 --- /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 000000000..b4844d272 --- /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'}, +) |
