diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py index a0db544e4e7e..9e081cbc0701 100644 --- a/mesonbuild/compilers/rust.py +++ b/mesonbuild/compilers/rust.py @@ -451,7 +451,9 @@ def get_allow_undefined_link_args(self) -> T.List[str]: return rustc_link_args(super().get_allow_undefined_link_args()) def get_build_link_args(self, target: BuildTarget, build: build.Build) -> T.List[str]: - return rustc_link_args(super().get_build_link_args(target, build)) + return rustc_link_args(build.get_project_link_args(self, target) + + build.get_global_link_args(self, self.for_machine)) \ + + self.environment.coredata.get_external_link_args(self.for_machine, self.get_language()) def get_target_link_args(self, target: 'BuildTarget') -> T.List[str]: return rustc_link_args(super().get_target_link_args(target)) diff --git a/test cases/rust/37 rustflags env/clippy.toml b/test cases/rust/37 rustflags env/clippy.toml new file mode 100644 index 000000000000..e9ac31b6974e --- /dev/null +++ b/test cases/rust/37 rustflags env/clippy.toml @@ -0,0 +1 @@ +blacklisted-names = ["foo"] diff --git a/test cases/rust/37 rustflags env/meson.build b/test cases/rust/37 rustflags env/meson.build new file mode 100644 index 000000000000..c8cef9250a55 --- /dev/null +++ b/test cases/rust/37 rustflags env/meson.build @@ -0,0 +1,28 @@ +project('rustprog', 'rust', default_options : ['b_ndebug=true']) + +e = executable('rust-program', 'prog.rs', + install : true +) +test('rusttest', e) + +e = executable('rust-dynamic', 'prog.rs', + override_options: {'rust_dynamic_std': true}, + install : true +) +test('rusttest-dynamic', e) + +subdir('subdir') + +# this should fail due to debug_assert +test( + 'debug_assert_on', + executable( + 'rust-program2', + 'prog.rs', + override_options : ['b_ndebug=false'], + ), + should_fail : true, +) + +rustc = meson.get_compiler('rust') +assert(rustc.run('fn main(){}').returncode() == 0) diff --git a/test cases/rust/37 rustflags env/prog.rs b/test cases/rust/37 rustflags env/prog.rs new file mode 100644 index 000000000000..69d29359c959 --- /dev/null +++ b/test cases/rust/37 rustflags env/prog.rs @@ -0,0 +1,5 @@ +fn main() { + let foo = "rust compiler is working"; + debug_assert!(false, "debug_asserts on!"); + println!("{}", foo); +} diff --git a/test cases/rust/37 rustflags env/subdir/meson.build b/test cases/rust/37 rustflags env/subdir/meson.build new file mode 100644 index 000000000000..36a3d4acc1fc --- /dev/null +++ b/test cases/rust/37 rustflags env/subdir/meson.build @@ -0,0 +1,2 @@ +e = executable('rust-program2', 'prog.rs', install : true) +test('rusttest2', e) diff --git a/test cases/rust/37 rustflags env/subdir/prog.rs b/test cases/rust/37 rustflags env/subdir/prog.rs new file mode 100644 index 000000000000..b171a80c263e --- /dev/null +++ b/test cases/rust/37 rustflags env/subdir/prog.rs @@ -0,0 +1,3 @@ +fn main() { + println!("rust compiler is working"); +} diff --git a/test cases/rust/37 rustflags env/test.json b/test cases/rust/37 rustflags env/test.json new file mode 100644 index 000000000000..2eca00a3db85 --- /dev/null +++ b/test cases/rust/37 rustflags env/test.json @@ -0,0 +1,13 @@ +{ + "env": { + "RUSTFLAGS": "-C force-frame-pointers=yes" + }, + "installed": [ + {"type": "exe", "file": "usr/bin/rust-program"}, + {"type": "pdb", "file": "usr/bin/rust-program"}, + {"type": "exe", "file": "usr/bin/rust-program2"}, + {"type": "pdb", "file": "usr/bin/rust-program2"}, + {"type": "exe", "file": "usr/bin/rust-dynamic"}, + {"type": "pdb", "file": "usr/bin/rust-dynamic"} + ] +}