diff options
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(); } |