meson: Deduplicate files in compiler & linker command lines
There are two reasons I think this would be useful
One is for Vala. Vala breaks if you pass the same .vapi file twice on the commandline, complaining that every symbol was already defined somewhere else. This is as much a Vala bug as much as it’s a Meson bug, but either way it’s preventing me from using Meson right now.
Second is for every program & library, where currently the linker commandlines become impossibly long. For example, here’s a random error taken from my terminal, which unrelated to this bug but useful to demonstrate the crazy length of Meson’s generated linker commandlines:
[14/69] Linking target examples/libtracker-sparql/async-connection
FAILED: examples/libtracker-sparql/async-connection
ccache cc -o examples/libtracker-sparql/async-connection 'examples/libtracker-sparql/async-connection@exe/async-connection.c.o' '-Wl,--no-undefined' '-Wl,--as-needed' 'src/libtracker-sparql-backend/libtracker-sparql-1.0.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-bus/libtracker-bus.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-direct/libtracker-direct.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-data/libtracker-data.so' 'src/libtracker-data/libtracker-data-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/gvdb/libgvdb.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-data/libtracker-data.so' 'src/libtracker-data/libtracker-data-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/gvdb/libgvdb.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-1.0.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-sparql/libtracker-sparql-vala.a' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' 'src/libtracker-common/libtracker-1.0/libtracker-common.so' '-lgio-2.0' '-lgobject-2.0' '-lglib-2.0' '-lglib-2.0' '-lm' '-Wl,-rpath,/home/shared/gnome/src/tracker/build/src/libtracker-sparql-backend:/home/shared/gnome/src/tracker/build/src/libtracker-common:/home/shared/gnome/src/tracker/build/src/libtracker-data'
/usr/bin/ld: src/libtracker-data/libtracker-data-vala.a(src_libtracker-data_tracker-data-vala@sta_tracker-sparql-query.c.o): undefined reference to symbol 'uuid_generate@@UUID_1.0'
/usr/lib64/libuuid.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Comments: 17 (17 by maintainers)
Meson has been designed from the ground up so that express circular dependencies is impossible. That is not and will not be ever be supported. If you have a circular dependency you need to break it up yourself.