aboutsummaryrefslogtreecommitdiff
path: root/test cases
diff options
context:
space:
mode:
Diffstat (limited to 'test cases')
-rw-r--r--test cases/rust/5 polyglot static/meson.build2
-rw-r--r--test cases/unit/113 complex link cases/meson.build51
2 files changed, 52 insertions, 1 deletions
diff --git a/test cases/rust/5 polyglot static/meson.build b/test cases/rust/5 polyglot static/meson.build
index 5d1f023..54f383c 100644
--- a/test cases/rust/5 polyglot static/meson.build
+++ b/test cases/rust/5 polyglot static/meson.build
@@ -7,7 +7,7 @@ r = static_library('stuff', 'stuff.rs', rust_crate_type : 'staticlib')
# as it would do with C libraries, but then cannot extract objects from stuff and
# thus should error out.
# FIXME: We should support this use-case in the future.
-testcase expect_error('Cannot link_whole a custom or Rust target into a static library')
+testcase expect_error('Cannot link_whole a custom or Rust target \'stuff\' into a static library \'clib\'. Instead, pass individual object files with the "objects:" keyword argument if possible. Meson had to promote link to link_whole because \'clib\' is installed but not \'stuff\', and thus has to include objects from \'stuff\' to be usable.')
l = static_library('clib', 'clib.c', link_with : r, install : true)
endtestcase
diff --git a/test cases/unit/113 complex link cases/meson.build b/test cases/unit/113 complex link cases/meson.build
index 04e6281..3b4b898 100644
--- a/test cases/unit/113 complex link cases/meson.build
+++ b/test cases/unit/113 complex link cases/meson.build
@@ -1,5 +1,7 @@
project('complex link cases', 'c')
+cc = meson.get_compiler('c')
+
# In all tests, e1 uses s3 which uses s2 which uses s1.
# Executable links with s3 and s1 but not s2 because it is included in s3.
@@ -58,3 +60,52 @@ e = executable('t8-e1', 'main.c',
link_with: [s1, s2],
dependencies: declare_dependency(link_with: s3),
)
+
+if cc.get_argument_syntax() == 'gcc'
+ # s1 is an internal static library, using custom target.
+ s1_o = custom_target(
+ input: 's1.c',
+ output: 's1.c.o',
+ command: [cc.cmd_array(), '-c', '-o', '@OUTPUT@', '@INPUT@']
+ )
+ s1 = custom_target(
+ output: 'libt9-s1.a',
+ command: ['ar', 'rcs', '@OUTPUT@', s1_o],
+ )
+
+ # Executable needs to link with s1, s2 and s3.
+ s2 = static_library('t9-s2', 's2.c', link_with: s1)
+ s3 = static_library('t9-s3', 's3.c', link_with: s2)
+ e = executable('t9-e1', 'main.c', link_with: s3)
+
+ # s2 cannot be installed because s1 is not being installed and Meson cannot
+ # extract object files from the custom target.
+ testcase expect_error('Cannot link_whole a custom or Rust target \'libt9-s1.a\' into a static library \'t10-s2\'. Instead, pass individual object files with the "objects:" keyword argument if possible. Meson had to promote link to link_whole because \'t10-s2\' is installed but not \'libt9-s1.a\', and thus has to include objects from \'libt9-s1.a\' to be usable.')
+ s2 = static_library('t10-s2', 's2.c', link_with: s1, install: true)
+ endtestcase
+
+ # s3 cannot be installed because s1 is not being installed and Meson cannot
+ # extract object files from the custom target.
+ testcase expect_error('Cannot link_whole a custom or Rust target \'libt9-s1.a\' into a static library \'t11-s3\'. Instead, pass individual object files with the "objects:" keyword argument if possible. Meson had to promote link to link_whole because \'t11-s3\' is installed but not \'libt9-s1.a\', and thus has to include objects from \'libt9-s1.a\' to be usable.')
+ s2 = static_library('t11-s2', 's2.c', link_with: s1)
+ s3 = static_library('t11-s3', 's3.c', link_with: s2, install: true)
+ endtestcase
+
+ # s1 is an installed static library, using custom target.
+ s1 = custom_target(
+ output: 'libt12-s1.a',
+ command: ['ar', 'rcs', '@OUTPUT@', s1_o],
+ install: true,
+ install_dir: get_option('libdir'),
+ )
+
+ # Executable needs to link with s1, s2 and s3.
+ s2 = static_library('t12-s2', 's2.c', link_with: s1, install: true)
+ s3 = static_library('t12-s3', 's3.c', link_with: s2)
+ e = executable('t12-e1', 'main.c', link_with: s3)
+
+ # Executable links with s3 and s1 but not s2 because it is included in s3.
+ s2 = static_library('t13-s2', 's2.c', link_with: s1)
+ s3 = static_library('t13-s3', 's3.c', link_with: s2, install: true)
+ e = executable('t13-e1', 'main.c', link_with: s3)
+endif