aboutsummaryrefslogtreecommitdiff
path: root/test cases/rust
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2023-11-02 11:28:57 -0400
committerXavier Claessens <xclaesse@gmail.com>2023-11-02 14:15:09 -0400
commit06b9d1e75a142bb54282042a993bef5f9aa57138 (patch)
tree9ef6e95c33f43e5f5c6d0f0fa9472db2fc442ace /test cases/rust
parentde03bf51d8fc704728d4bf0e8feb90e545f964c5 (diff)
downloadmeson-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')
-rw-r--r--test cases/rust/20 transitive dependencies/foo.c8
-rw-r--r--test cases/rust/20 transitive dependencies/foo.rs9
-rw-r--r--test cases/rust/20 transitive dependencies/meson.build17
-rw-r--r--test cases/rust/20 transitive dependencies/proc.rs7
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()
+}