diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2023-11-02 11:28:57 -0400 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2023-11-02 14:15:09 -0400 |
commit | 06b9d1e75a142bb54282042a993bef5f9aa57138 (patch) | |
tree | 9ef6e95c33f43e5f5c6d0f0fa9472db2fc442ace /test cases/rust | |
parent | de03bf51d8fc704728d4bf0e8feb90e545f964c5 (diff) | |
download | meson-06b9d1e75a142bb54282042a993bef5f9aa57138.zip meson-06b9d1e75a142bb54282042a993bef5f9aa57138.tar.gz meson-06b9d1e75a142bb54282042a993bef5f9aa57138.tar.bz2 |
rust: proc-macro should be ignored in transitive dependencies
Fixes: #12459
Diffstat (limited to 'test cases/rust')
4 files changed, 40 insertions, 1 deletions
diff --git a/test cases/rust/20 transitive dependencies/foo.c b/test cases/rust/20 transitive dependencies/foo.c new file mode 100644 index 0000000..e40878a --- /dev/null +++ b/test cases/rust/20 transitive dependencies/foo.c @@ -0,0 +1,8 @@ +#include <stdint.h> + +uint32_t foo_rs(void); + +int main(void) +{ + return foo_rs() == 42 ? 0 : 1; +} diff --git a/test cases/rust/20 transitive dependencies/foo.rs b/test cases/rust/20 transitive dependencies/foo.rs new file mode 100644 index 0000000..8e38638 --- /dev/null +++ b/test cases/rust/20 transitive dependencies/foo.rs @@ -0,0 +1,9 @@ +extern crate pm; +use pm::make_answer; + +make_answer!(); + +#[no_mangle] +pub fn foo_rs() -> u32 { + answer() +} diff --git a/test cases/rust/20 transitive dependencies/meson.build b/test cases/rust/20 transitive dependencies/meson.build index 2f378f8..e5354b8 100644 --- a/test cases/rust/20 transitive dependencies/meson.build +++ b/test cases/rust/20 transitive dependencies/meson.build @@ -1,4 +1,4 @@ -project('transitive dependencies', 'rust', +project('transitive dependencies', 'rust', 'c', version : '1.0.0', meson_version : '>= 1.0.0', default_options : ['rust_std=2018'], @@ -10,3 +10,18 @@ subdir('libb') main = executable('main', 'main.rs', dependencies : [libb_dep], ) + +# Since foo-rs is a static library, its dependencies are normally added to +# footest link command. However, since pm is a proc-macro, footest should not +# link with it. In native build this is an harmless overlinking, but in cross +# building foo and pm are for different arch and it would fail to link. +rust = import('rust') +pm = rust.proc_macro('pm', 'proc.rs') +foo = static_library('foo-rs', 'foo.rs', + rust_abi: 'c', + link_with: pm, +) +exe = executable('footest', 'foo.c', + link_with: foo, +) +test('footest', exe) diff --git a/test cases/rust/20 transitive dependencies/proc.rs b/test cases/rust/20 transitive dependencies/proc.rs new file mode 100644 index 0000000..53935e4 --- /dev/null +++ b/test cases/rust/20 transitive dependencies/proc.rs @@ -0,0 +1,7 @@ +extern crate proc_macro; +use proc_macro::TokenStream; + +#[proc_macro] +pub fn make_answer(_item: TokenStream) -> TokenStream { + "fn answer() -> u32 { 42 }".parse().unwrap() +} |