diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2022-12-19 12:33:54 +0100 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2023-01-04 09:44:32 -0800 |
commit | 3e917eba0e5aebb8e17bc210f99701f7012d1b53 (patch) | |
tree | 5baf566dc8867aed12339ce6271937e1611af9c1 | |
parent | b3fc3cd6b5193dc750843530b13358a772ffdd7d (diff) | |
download | meson-3e917eba0e5aebb8e17bc210f99701f7012d1b53.zip meson-3e917eba0e5aebb8e17bc210f99701f7012d1b53.tar.gz meson-3e917eba0e5aebb8e17bc210f99701f7012d1b53.tar.bz2 |
add testcase for declare_dependency(objects: ...)
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
4 files changed, 30 insertions, 0 deletions
diff --git a/test cases/common/260 declare_dependency objects/bar.c b/test cases/common/260 declare_dependency objects/bar.c new file mode 100644 index 0000000..f3ca85c --- /dev/null +++ b/test cases/common/260 declare_dependency objects/bar.c @@ -0,0 +1 @@ +void bar(void) {} diff --git a/test cases/common/260 declare_dependency objects/foo.c b/test cases/common/260 declare_dependency objects/foo.c new file mode 100644 index 0000000..9a39cb9 --- /dev/null +++ b/test cases/common/260 declare_dependency objects/foo.c @@ -0,0 +1,3 @@ +extern void bar(void); + +void foo(void) { bar(); } diff --git a/test cases/common/260 declare_dependency objects/meson.build b/test cases/common/260 declare_dependency objects/meson.build new file mode 100644 index 0000000..a9a0c7b --- /dev/null +++ b/test cases/common/260 declare_dependency objects/meson.build @@ -0,0 +1,23 @@ +# Test that declare_dependency(objects: ...) fixes issues with duplicated +# objects in the final link line, thanks to deduplication of dependencies. +# The commented declare_dependency() invocation using link_whole instead +# fails thusly: +# +# ar csrDT libbar.a libfoo.a.p/foo.c.o libbar.a.p/bar.c.o +# ar csrDT libfoo.a libfoo.a.p/foo.c.o +# cc -o prog prog.p/prog.c.o -Wl,--as-needed -Wl,--no-undefined -Wl,--whole-archive -Wl,--start-group libfoo.a libbar.a -Wl,--end-group -Wl,--no-whole-archive +# /usr/bin/ld: libfoo.a.p/foo.c.o: in function `foo': +# ../foo.c:3: multiple definition of `foo'; libfoo.a.p/foo.c.o:../foo.c:3: first defined here + +project('Transitive declare_dependency(objects)', 'c') + +libfoo = static_library('foo', 'foo.c') +#foo = declare_dependency(link_whole: libfoo) +foo = declare_dependency(objects: libfoo.extract_all_objects(recursive: true)) + +libbar = static_library('bar', 'bar.c', dependencies: foo) + +#bar = declare_dependency(link_whole: libbar, dependencies: foo) +bar = declare_dependency(objects: libbar.extract_all_objects(recursive: true), dependencies: foo) + +executable('prog', sources: files('prog.c'), dependencies: [foo, bar]) diff --git a/test cases/common/260 declare_dependency objects/prog.c b/test cases/common/260 declare_dependency objects/prog.c new file mode 100644 index 0000000..9311679 --- /dev/null +++ b/test cases/common/260 declare_dependency objects/prog.c @@ -0,0 +1,3 @@ +extern void foo(void); + +int main(void) { foo(); } |