New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explosion of library names and paths in subproject dependencies #671

Closed
nirbheek opened this Issue Aug 9, 2016 · 5 comments

Comments

Projects
None yet
3 participants
@nirbheek
Member

nirbheek commented Aug 9, 2016

If you have a sufficiently deeply-nested declare_dependency hierarchy with the dependencies : kwarg, you have the same library names and paths repeated over and over and over resulting in an explosive command line argument list filled with redundant paths and library names.

For example, the following code:
library(..., dependencies : [gstbase_dep, gstpbutils_dep, gstriff_dep, gstaudio_dep, gsttag_dep])

Where each of those dependencies are declared as:

declare_dependency(..., dependencies : [gst_base_dep, gst_dep, ...],... )

i.e., they refer to each other, and to a bunch of common dependencies. This yields:

cc -o gst/wavparse/libgstwavparse.so 'gst/wavparse/gstwavparse@sha/gstwavparse.c.o' '-Wl,--no-undefined' '-Wl,--as-needed' '-shared' '-fPIC' '-Wl,-soname,libgstwavparse.so' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/pbutils/libgstpbutils-1.0.so.0.901.0' 'subprojects/gst-plugins-base/gst-libs/gst/video/libgstvideo-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/audio/libgstaudio-1.0.so.0.901.0' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/video/libgstvideo-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/audio/libgstaudio-1.0.so.0.901.0' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/riff/libgstriff-1.0.so.0.901.0' 'subprojects/gst-plugins-base/gst-libs/gst/audio/libgstaudio-1.0.so.0.901.0' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/audio/libgstaudio-1.0.so.0.901.0' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/audio/libgstaudio-1.0.so.0.901.0' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gst-plugins-base/gst-libs/gst/tag/libgsttag-1.0.so.0.901.0' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/libs/gst/base/libgstbase-1.0.so.0.901.0' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' 'subprojects/gstreamer/gst/libgstreamer-1.0.so.0.901.0' 'subprojects/gstreamer/gst/printf/libgstprintf.a' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lglib-2.0' '-lgobject-2.0' '-lglib-2.0' '-Wl,--export-dynamic' '-lgmodule-2.0' '-pthread' '-lglib-2.0' '-lm'

And this is ridiculous. We should be de-duping this list of libraries while maintaining the order.

@jpakkane

This comment has been minimized.

Show comment
Hide comment
@jpakkane

jpakkane Aug 9, 2016

Member

Dedupping -I and -L is something I have been thinking for a while and can be done without any side effects. Because library symbol resolution order is pants on head stupid, we can't just dedup blindly. If it were up to me (and also supported by VS?) we would just gather up all libs and pass them as a single clump with begin group and end group.

But could we do some dedupping smarter. Suppose for example if we have an external dep foo that is used in an internal dep bar as well as a target fizz that uses both foo and bar. Could we put the extdep there only once at the end? Would something break if it is there only once? (assuming shared libraries, with static it will definitely be possible to break)?

Member

jpakkane commented Aug 9, 2016

Dedupping -I and -L is something I have been thinking for a while and can be done without any side effects. Because library symbol resolution order is pants on head stupid, we can't just dedup blindly. If it were up to me (and also supported by VS?) we would just gather up all libs and pass them as a single clump with begin group and end group.

But could we do some dedupping smarter. Suppose for example if we have an external dep foo that is used in an internal dep bar as well as a target fizz that uses both foo and bar. Could we put the extdep there only once at the end? Would something break if it is there only once? (assuming shared libraries, with static it will definitely be possible to break)?

@tp-m

This comment has been minimized.

Show comment
Hide comment
@tp-m

tp-m Aug 9, 2016

Contributor

Ignoring the main issue, I also wonder why the libgstprintf.a is repeated here everywhere, that should be private to libgstreamer-1.0.so.* and part of libgstreamer-1.0.so* and not appear in the list here imho.

Contributor

tp-m commented Aug 9, 2016

Ignoring the main issue, I also wonder why the libgstprintf.a is repeated here everywhere, that should be private to libgstreamer-1.0.so.* and part of libgstreamer-1.0.so* and not appear in the list here imho.

@jpakkane

This comment has been minimized.

Show comment
Hide comment
@jpakkane

jpakkane Aug 9, 2016

Member

It should appear for gstreamer.a but probably not for gstreamer.so

Member

jpakkane commented Aug 9, 2016

It should appear for gstreamer.a but probably not for gstreamer.so

jpakkane added a commit that referenced this issue Sep 26, 2016

jpakkane added a commit that referenced this issue Sep 28, 2016

@nirbheek

This comment has been minimized.

Show comment
Hide comment
@nirbheek

nirbheek Nov 11, 2016

Member

This is getting too close for comfort in gstreamer, with ninja failing to spawn executables when you use too many repeated recursive dependencies:

<thiblahute> got 'ninja: fatal: posix_spawn: Argument list too long' -- interesting one
Member

nirbheek commented Nov 11, 2016

This is getting too close for comfort in gstreamer, with ninja failing to spawn executables when you use too many repeated recursive dependencies:

<thiblahute> got 'ninja: fatal: posix_spawn: Argument list too long' -- interesting one

@nirbheek nirbheek added the gstreamer label Nov 11, 2016

@nirbheek nirbheek added this to the 0.37.0 milestone Nov 11, 2016

@nirbheek nirbheek modified the milestones: 0.37.0, 0.38.0 Dec 18, 2016

@nirbheek nirbheek modified the milestones: 0.38.0, 0.39.0 Feb 1, 2017

@nirbheek nirbheek modified the milestones: 0.39.0, 0.40.0 Mar 9, 2017

gnomesysadmins pushed a commit to GNOME/tracker that referenced this issue Mar 11, 2017

Meson build instructions for Tracker
See <http://mesonbuild.com/> for information about Meson.

These build instructions are close to completion.

Differences from Autotools:

  * There's no `make dist` equivalent. We currently produce release
    tarballs containing the output files of the Vala compiler. We need
    to think through whether we can stop doing that.
  * The apps and userguides miners are not built
  * The Firefox, Thunderbird, Evolution and Nautilus plugins are not
    built
  * tracker-needle is not built
  * The stopwords are not installed
  * tracker-writeback is not built
  * Perhaps some other regressions, who knows.

There are a couple of Meson bugs which make the Meson rules more
complex than they'd otherwise need to be:

  * mesonbuild/meson#671 -- means we can't
    depend on tracker_common_dep in most places and have to manually
    set link_with, include_directories and sources instead.
  * mesonbuild/meson#892 -- means we have
    to install generated Vala headers using a script
  * mesonbuild/meson#1229 -- means adding
    the #include guard to libtracker-sparql/tracker-generated-no-checks.h
    is a pain

Here's a rough speed comparison.

Meson:
        time sh -c 'meson .. --prefix=/opt/tracker-meson -D bash_completion=/opt/tracker-meson/share/bash-completion -Dsystemd_services=/opt/tracker-meson/lib/systemd/user -Ddbus_services=/opt/tracker-meson/share/dbus-1/services && ninja-build -j 4 && ninja-build install'

        real  0m59.017s
        user  2m1.208s
        sys   0m18.125s

Autotools:

        still waiting for ./configure to finish

gnomesysadmins pushed a commit to GNOME/tracker that referenced this issue Mar 11, 2017

Meson build instructions for Tracker
See <http://mesonbuild.com/> for information about Meson.

These build instructions are close to completion.

Main sticking point: how to generate the introspection data for
libtracker-sparql ??

Also: writeback, needle, that's it!

Differences from Autotools:

  * There's no `make dist` equivalent. We currently produce release
    tarballs containing the output files of the Vala compiler. We need
    to think through whether we can stop doing that.
  * The Firefox, Thunderbird, Evolution and Nautilus plugins are not
    built
  * tracker-needle is not built
  * The stopwords are not installed
  * tracker-writeback is not built
  * Perhaps some other regressions, who knows.

There are a couple of Meson bugs which make the Meson rules more
complex than they'd otherwise need to be:

  * mesonbuild/meson#671 -- means we can't
    depend on tracker_common_dep in most places and have to manually
    set link_with, include_directories and sources instead.
  * mesonbuild/meson#892 -- means we have
    to install generated Vala headers using a script
  * mesonbuild/meson#1229 -- means adding
    the #include guard to libtracker-sparql/tracker-generated-no-checks.h
    is a pain

Here's a rough speed comparison.

Meson:
        time sh -c 'meson .. --prefix=/opt/tracker-meson -D bash_completion=/opt/tracker-meson/share/bash-completion -Dsystemd_user_services=/opt/tracker-meson/lib/systemd/user -Ddbus_services=/opt/tracker-meson/share/dbus-1/services && ninja-build -j 4 && ninja-build install'

        real  1m8.194s
        user  2m16.962s
        sys   0m20.532s

Autotools:
        time sh -c './configure --prefix=/opt/tracker-autotools --with-bash-completion-dir=/opt/tracker-autotools/share/bash-completion --with-session-bus-services-dir=/opt/tracker-autotools/share/dbus-1/services --disable-nautilus-extension && make -j 4 && make install'

        real  2m37.750s
        user  4m37.214s
        sys   0m54.806s

        Plus 30+ seconds of ./autogen.sh first.

Note that Meson builds may fail if your source tree has generated
files from an Autotools build in there. If you see errors about
duplicate definitions, first try cleaning your source tree (use `git clean
-dfx`, but make sure you commit any work first!!)

gnomesysadmins pushed a commit to GNOME/tracker that referenced this issue Mar 22, 2017

Meson build instructions for Tracker
See <http://mesonbuild.com/> for information about Meson.

These build instructions are close to completion.

writeback, stopwords and it can be merged.

Differences from Autotools:

  * There's no `make dist` equivalent. We currently produce release
    tarballs containing the output files of the Vala compiler. We need
    to think through whether we can stop doing that.
  * The Firefox, Thunderbird, Evolution and Nautilus plugins are not
    built
  * The stopwords are not installed
  * tracker-writeback is not built
  * GIR may have regressions
  * Perhaps some other regressions, who knows.

There are a couple of Meson bugs which make the Meson rules more
complex than they'd otherwise need to be:

  * mesonbuild/meson#671 -- means we can't
    depend on tracker_common_dep in most places and have to manually
    set link_with, include_directories and sources instead.
  * mesonbuild/meson#892 -- means we have
    to install generated Vala headers using a script
  * mesonbuild/meson#1229 -- means adding
    the #include guard to libtracker-sparql/tracker-generated-no-checks.h
    is a pain

Here's a rough speed comparison.

Meson:
        time sh -c 'meson .. --prefix=/opt/tracker-meson -D bash_completion=/opt/tracker-meson/share/bash-completion -Dsystemd_user_services=/opt/tracker-meson/lib/systemd/user -Ddbus_services=/opt/tracker-meson/share/dbus-1/services && ninja-build -j 4 && ninja-build install'

        real  1m8.194s
        user  2m16.962s
        sys   0m20.532s

Autotools:
        time sh -c './configure --prefix=/opt/tracker-autotools --with-bash-completion-dir=/opt/tracker-autotools/share/bash-completion --with-session-bus-services-dir=/opt/tracker-autotools/share/dbus-1/services --disable-nautilus-extension && make -j 4 && make install'

        real  2m37.750s
        user  4m37.214s
        sys   0m54.806s

        Plus 30+ seconds of ./autogen.sh first.

Note that Meson builds may fail if your source tree has generated
files from an Autotools build in there. If you see errors about
duplicate definitions, first try cleaning your source tree (use `git clean
-dfx`, but make sure you commit any work first!!)

gnomesysadmins pushed a commit to GNOME/tracker that referenced this issue Mar 30, 2017

Meson build instructions for Tracker
See <http://mesonbuild.com/> for information about Meson.

These build instructions are close to completion.

Remaining issues:

  * Some Vala problem:

        ninja: error: 'src/libtracker-sparql/tracker-sparql-intermediate.vapi', needed by
        'src/libtracker-sparql-backend/tracker-sparql-1.0@sha/tracker-backend.c',
        missing and no known rule to make it

    Possibly Meson bug (is it ignoring the vapi_name parameter we pass
    for the libtracker-sparql library and assuming a different .vapi
    name?)

  * There's no `make dist` equivalent. We currently produce release
    tarballs containing the output files of the Vala compiler. We need
    to think through whether we can stop doing that. Shipping the
    generated .c files does make the Vala preprocessor useless so
    it would be good if we can stop.

  * The Firefox, Thunderbird, Evolution and Nautilus plugins are not
    built

There are a couple of Meson bugs which make the Meson rules more
complex than they'd otherwise need to be:

  * mesonbuild/meson#671 -- means we can't
    depend on tracker_common_dep in most places and have to manually
    set link_with, include_directories and sources instead.
  * mesonbuild/meson#892 -- means we have
    to install generated Vala headers using a script
  * mesonbuild/meson#1229 -- means adding
    the #include guard to libtracker-sparql/tracker-generated-no-checks.h
    is a pain

Here's a rough speed comparison.

Meson:
        time sh -c 'meson .. --prefix=/opt/tracker-meson -D bash_completion=/opt/tracker-meson/share/bash-completion -Dsystemd_user_services=/opt/tracker-meson/lib/systemd/user -Ddbus_services=/opt/tracker-meson/share/dbus-1/services && ninja-build -j 4 && ninja-build install'

        real  1m8.194s
        user  2m16.962s
        sys   0m20.532s

Autotools:
        time sh -c './configure --prefix=/opt/tracker-autotools --with-bash-completion-dir=/opt/tracker-autotools/share/bash-completion --with-session-bus-services-dir=/opt/tracker-autotools/share/dbus-1/services --disable-nautilus-extension && make -j 4 && make install'

        real  2m37.750s
        user  4m37.214s
        sys   0m54.806s

        Plus 30+ seconds of ./autogen.sh first.

Note that Meson builds may fail if your source tree has generated
files from an Autotools build in there. If you see errors about
duplicate definitions, first try cleaning your source tree (use `git clean
-dfx`, but make sure you commit any work first!!)

gnomesysadmins pushed a commit to GNOME/tracker that referenced this issue Mar 30, 2017

Meson build instructions for Tracker
See <http://mesonbuild.com/> for information about Meson.

Remaining issues:

  * There's no `make dist` equivalent. We currently produce release
    tarballs containing the output files of the Vala compiler. We need
    to think through whether we can stop doing that. Shipping the
    generated .c files does make the Vala preprocessor useless so
    it would be good if we can stop.

  * The Firefox, Thunderbird, Evolution and Nautilus plugins are not
    built

  * mesonbuild/meson#671 -- means we can't
    depend on tracker_common_dep in most places and have to manually
    set link_with, include_directories and sources instead.

  * mesonbuild/meson#1469 -- without this we
    have to install generated Vala headers using a script

  * mesonbuild/meson#1229 -- means adding
    the #include guard to libtracker-sparql/tracker-generated-no-checks.h
    is a pain

Here's a rough speed comparison.

Meson:
        time sh -c 'meson .. --prefix=/opt/tracker-meson -D bash_completion=/opt/tracker-meson/share/bash-completion -Dsystemd_user_services=/opt/tracker-meson/lib/systemd/user -Ddbus_services=/opt/tracker-meson/share/dbus-1/services && ninja-build -j 4 && ninja-build install'

        real  1m8.194s
        user  2m16.962s
        sys   0m20.532s

Autotools:
        time sh -c './configure --prefix=/opt/tracker-autotools --with-bash-completion-dir=/opt/tracker-autotools/share/bash-completion --with-session-bus-services-dir=/opt/tracker-autotools/share/dbus-1/services --disable-nautilus-extension && make -j 4 && make install'

        real  2m37.750s
        user  4m37.214s
        sys   0m54.806s

        Plus 30+ seconds of ./autogen.sh first.

Note that Meson builds may fail if your source tree has generated files
from an Autotools build in there. If you see errors about duplicate
definitions, first try cleaning your source tree (use `git clean -dfx`,
but make sure you commit any work first!!)

@nirbheek nirbheek modified the milestone: 0.40.0 Apr 22, 2017

gnomesysadmins pushed a commit to GNOME/tracker that referenced this issue May 21, 2017

Meson build instructions for Tracker
See <http://mesonbuild.com/> for information about Meson.

Remaining issues:

  * There's no `make dist` equivalent. We currently produce release
    tarballs containing the output files of the Vala compiler. We need
    to think through whether we can stop doing that. Shipping the
    generated .c files does make the Vala preprocessor useless so
    it would be good if we can stop.

  * The Firefox, Thunderbird, Evolution and Nautilus plugins are not
    built

  * mesonbuild/meson#671 -- means we can't
    depend on tracker_common_dep in most places and have to manually
    set link_with, include_directories and sources instead.

  * mesonbuild/meson#1469 -- without this we
    have to install generated Vala headers using a script

  * mesonbuild/meson#1229 -- means adding
    the #include guard to libtracker-sparql/tracker-generated-no-checks.h
    is a pain

Here's a rough speed comparison.

Meson:
        time sh -c 'meson .. --prefix=/opt/tracker-meson -D bash_completion=/opt/tracker-meson/share/bash-completion -Dsystemd_user_services=/opt/tracker-meson/lib/systemd/user -Ddbus_services=/opt/tracker-meson/share/dbus-1/services && ninja-build -j 4 && ninja-build install'

        real  1m8.194s
        user  2m16.962s
        sys   0m20.532s

Autotools:
        time sh -c './configure --prefix=/opt/tracker-autotools --with-bash-completion-dir=/opt/tracker-autotools/share/bash-completion --with-session-bus-services-dir=/opt/tracker-autotools/share/dbus-1/services --disable-nautilus-extension && make -j 4 && make install'

        real  2m37.750s
        user  4m37.214s
        sys   0m54.806s

        Plus 30+ seconds of ./autogen.sh first.

Note that Meson builds may fail if your source tree has generated files
from an Autotools build in there. If you see errors about duplicate
definitions, first try cleaning your source tree (use `git clean -dfx`,
but make sure you commit any work first!!)

gnomesysadmins pushed a commit to GNOME/tracker that referenced this issue May 22, 2017

Meson build instructions for Tracker
See <http://mesonbuild.com/> for information about Meson.

Remaining issues:

  * There's no `make dist` equivalent. We currently produce release
    tarballs containing the output files of the Vala compiler. We need
    to think through whether we can stop doing that. Shipping the
    generated .c files does make the Vala preprocessor useless so
    it would be good if we can stop.

  * The Firefox, Thunderbird, Evolution and Nautilus plugins are not
    built

  * mesonbuild/meson#671 -- means we can't
    depend on tracker_common_dep in most places and have to manually
    set link_with, include_directories and sources instead.

  * mesonbuild/meson#1469 -- without this we
    have to install generated Vala headers using a script

  * mesonbuild/meson#1229 -- means adding
    the #include guard to libtracker-sparql/tracker-generated-no-checks.h
    is a pain

  * The test suite has some spurious failures.

Here's a rough speed comparison.

Meson:
        time sh -c 'meson .. --prefix=/opt/tracker-meson -D bash_completion=/opt/tracker-meson/share/bash-completion -Dsystemd_user_services=/opt/tracker-meson/lib/systemd/user -Ddbus_services=/opt/tracker-meson/share/dbus-1/services && ninja-build -j 4 && ninja-build install'

        real  1m8.194s
        user  2m16.962s
        sys   0m20.532s

Autotools:
        time sh -c './configure --prefix=/opt/tracker-autotools --with-bash-completion-dir=/opt/tracker-autotools/share/bash-completion --with-session-bus-services-dir=/opt/tracker-autotools/share/dbus-1/services --disable-nautilus-extension && make -j 4 && make install'

        real  2m37.750s
        user  4m37.214s
        sys   0m54.806s

        Plus 30+ seconds of ./autogen.sh first.

Note that Meson builds may fail if your source tree has generated files
from an Autotools build in there. If you see errors about duplicate
definitions, first try cleaning your source tree (use `git clean -dfx`,
but make sure you commit any work first!!)
@nirbheek

This comment has been minimized.

Show comment
Hide comment
@nirbheek

nirbheek Jun 4, 2017

Member

This is fixed with #1545.

Member

nirbheek commented Jun 4, 2017

This is fixed with #1545.

@nirbheek nirbheek closed this Jun 4, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment