mesonbuild / meson

The Meson Build System
http://mesonbuild.com
Apache License 2.0
5.58k stars 1.62k forks source link

gnome.generate_gir() uses -lfoo while generating girs which can pick up system libraries #2182

Closed nirbheek closed 5 years ago

nirbheek commented 7 years ago

It also seems to ignore -Lbar?

/usr/bin/g-ir-scanner [...] --symbol-prefix=ide --identifier-prefix=Ide --cflags-begin [...] --cflags-end [lots of --extra-library] -L/home/foser/work/gnome-builder/builddir/subprojects/libgd/libgd -lgd --extra-library=m -L/home/foser/work/gnome-builder/builddir/libide -L/home/foser/work/gnome-builder/builddir/subprojects/libgd/libgd --library ide-1.0

This picks up /usr/lib64/libgd.so instead of builddir/subprojects/libgd/libgd/libgd.so, and causes the following error:

libide/libide-1.0.so: undefined reference to `gd_tagged_entry_tag_set_style'
libide/libide-1.0.so: undefined reference to `gd_tagged_entry_tag_set_label'
libide/libide-1.0.so: undefined reference to `gd_tagged_entry_add_tag'
libide/libide-1.0.so: undefined reference to `gd_tagged_entry_tag_new'
libide/libide-1.0.so: undefined reference to `gd_tagged_entry_get_type'
libide/libide-1.0.so: undefined reference to `gd_tagged_entry_remove_tag'
collect2: error: ld returned 1 exit status
nirbheek commented 7 years ago

For completeness, this is the full commandline:

/usr/bin/g-ir-scanner libide/ide-build-ident.h libide/ide-resources.h libide/ide-icons-resources.h libide/ide-enums.h libide/ide-debug.h libide/ide-version.h ../libide/ide-context.h ../libide/ide-global.h ../libide/ide-macros.h ../libide/ide-object.h ../libide/ide-service.h ../libide/ide-types.h ../libide/ide.h ../libide/application/ide-application-addin.h ../libide/application/ide-application-credits.h ../libide/application/ide-application-tool.h ../libide/application/ide-application.h ../libide/buffers/ide-buffer-change-monitor.h ../libide/buffers/ide-buffer-manager.h ../libide/buffers/ide-buffer.h ../libide/buffers/ide-unsaved-file.h ../libide/buffers/ide-unsaved-files.h ../libide/buildconfig/ide-buildconfig-configuration.h ../libide/buildconfig/ide-buildconfig-configuration-provider.h ../libide/buildsystem/ide-build-log.h ../libide/buildsystem/ide-build-manager.h ../libide/buildsystem/ide-build-pipeline.h ../libide/buildsystem/ide-build-pipeline-addin.h ../libide/buildsystem/ide-build-stage.h ../libide/buildsystem/ide-build-stage-launcher.h ../libide/buildsystem/ide-build-stage-mkdirs.h ../libide/buildsystem/ide-build-stage-transfer.h ../libide/buildsystem/ide-build-system.h ../libide/buildsystem/ide-build-system-discovery.h ../libide/buildsystem/ide-build-target.h ../libide/buildsystem/ide-build-utils.h ../libide/buildsystem/ide-configuration-manager.h ../libide/buildsystem/ide-configuration.h ../libide/buildsystem/ide-configuration-provider.h ../libide/buildsystem/ide-environment-variable.h ../libide/buildsystem/ide-environment.h ../libide/devices/ide-device-manager.h ../libide/devices/ide-device-provider.h ../libide/devices/ide-device.h ../libide/diagnostics/ide-diagnostic-provider.h ../libide/diagnostics/ide-diagnostic.h ../libide/diagnostics/ide-diagnostics-manager.h ../libide/diagnostics/ide-diagnostics.h ../libide/diagnostics/ide-fixit.h ../libide/diagnostics/ide-source-location.h ../libide/diagnostics/ide-source-range.h ../libide/directory/ide-directory-build-system.h ../libide/directory/ide-directory-vcs.h ../libide/doap/ide-doap-person.h ../libide/doap/ide-doap.h ../libide/editor/ide-editor-perspective.h ../libide/editor/ide-editor-view-addin.h ../libide/editor/ide-editor-view.h ../libide/files/ide-file-settings.h ../libide/files/ide-file.h ../libide/files/ide-indent-style.h ../libide/formatting/ide-formatter.h ../libide/formatting/ide-formatter-options.h ../libide/genesis/ide-genesis-addin.h ../libide/highlighting/ide-highlight-engine.h ../libide/highlighting/ide-highlight-index.h ../libide/highlighting/ide-highlighter.h ../libide/history/ide-back-forward-item.h ../libide/history/ide-back-forward-list.h ../libide/langserv/ide-langserv-client.h ../libide/langserv/ide-langserv-completion-provider.h ../libide/langserv/ide-langserv-diagnostic-provider.h ../libide/langserv/ide-langserv-formatter.h ../libide/langserv/ide-langserv-highlighter.h ../libide/langserv/ide-langserv-rename-provider.h ../libide/langserv/ide-langserv-symbol-node.h ../libide/langserv/ide-langserv-symbol-resolver.h ../libide/langserv/ide-langserv-symbol-tree.h ../libide/langserv/ide-langserv-util.h ../libide/local/ide-local-device.h ../libide/logging/ide-log.h ../libide/plugins/ide-extension-adapter.h ../libide/plugins/ide-extension-set-adapter.h ../libide/preferences/ide-preferences-addin.h ../libide/preferences/ide-preferences-perspective.h ../libide/projects/ide-project-edit.h ../libide/projects/ide-project-file.h ../libide/projects/ide-project-files.h ../libide/projects/ide-project-info.h ../libide/projects/ide-project-item.h ../libide/projects/ide-project-miner.h ../libide/projects/ide-project.h ../libide/projects/ide-recent-projects.h ../libide/rename/ide-rename-provider.h ../libide/runner/ide-run-button.h ../libide/runner/ide-run-manager.h ../libide/runner/ide-runner.h ../libide/runner/ide-runner-addin.h ../libide/runtimes/ide-runtime-manager.h ../libide/runtimes/ide-runtime-provider.h ../libide/runtimes/ide-runtime.h ../libide/search/ide-search-engine.h ../libide/search/ide-search-entry.h ../libide/search/ide-search-provider.h ../libide/search/ide-search-result.h ../libide/snippets/ide-source-snippet-chunk.h ../libide/snippets/ide-source-snippet-context.h ../libide/snippets/ide-source-snippet.h ../libide/snippets/ide-source-snippets-manager.h ../libide/snippets/ide-source-snippets.h ../libide/sourceview/ide-completion-item.h ../libide/sourceview/ide-completion-provider.h ../libide/sourceview/ide-completion-results.h ../libide/sourceview/ide-completion-words.h ../libide/sourceview/ide-cursor.h ../libide/sourceview/ide-indenter.h ../libide/sourceview/ide-language.h ../libide/sourceview/ide-source-map.h ../libide/sourceview/ide-source-style-scheme.h ../libide/sourceview/ide-source-view-mode.h ../libide/sourceview/ide-source-view.h ../libide/subprocess/ide-subprocess.h ../libide/subprocess/ide-subprocess-launcher.h ../libide/subprocess/ide-subprocess-supervisor.h ../libide/symbols/ide-symbol-node.h ../libide/symbols/ide-symbol-resolver.h ../libide/symbols/ide-symbol-tree.h ../libide/symbols/ide-symbol.h ../libide/symbols/ide-tags-builder.h ../libide/template/ide-project-template.h ../libide/template/ide-template-base.h ../libide/template/ide-template-provider.h ../libide/threading/ide-thread-pool.h ../libide/transfers/ide-pkcon-transfer.h ../libide/transfers/ide-transfer-manager.h ../libide/transfers/ide-transfer-row.h ../libide/transfers/ide-transfer.h ../libide/transfers/ide-transfer-button.h ../libide/transfers/ide-transfers-button.h ../libide/transfers/ide-transfers-progress-icon.h ../libide/util/ide-flatpak.h ../libide/util/ide-glib.h ../libide/util/ide-gtk.h ../libide/util/ide-line-reader.h ../libide/util/ide-list-inline.h ../libide/util/ide-posix.h ../libide/util/ide-progress.h ../libide/util/ide-settings.h ../libide/util/ide-uri.h ../libide/vcs/ide-vcs-config.h ../libide/vcs/ide-vcs-initializer.h ../libide/vcs/ide-vcs-uri.h ../libide/vcs/ide-vcs.h ../libide/workbench/ide-layout-grid.h ../libide/workbench/ide-layout-pane.h ../libide/workbench/ide-layout-stack-split.h ../libide/workbench/ide-layout-stack.h ../libide/workbench/ide-layout-stack-addin.h ../libide/workbench/ide-layout-view.h ../libide/workbench/ide-layout.h ../libide/workbench/ide-omni-bar.h ../libide/workbench/ide-perspective.h ../libide/workbench/ide-workbench-addin.h ../libide/workbench/ide-workbench-message.h ../libide/workbench/ide-workbench-header-bar.h ../libide/workbench/ide-workbench.h ../libide/workers/ide-worker.h ../libide/application/ide-application-addin.c ../libide/application/ide-application-tool.c ../libide/application/ide-application.c ../libide/application/ide-application-open.c ../libide/buffers/ide-buffer-change-monitor.c ../libide/buffers/ide-buffer-manager.c ../libide/buffers/ide-buffer.c ../libide/buffers/ide-unsaved-file.c ../libide/buffers/ide-unsaved-files.c ../libide/buildconfig/ide-buildconfig-configuration.c ../libide/buildconfig/ide-buildconfig-configuration-provider.c ../libide/buildsystem/ide-build-manager.c ../libide/buildsystem/ide-build-pipeline.c ../libide/buildsystem/ide-build-pipeline-addin.c ../libide/buildsystem/ide-build-stage.c ../libide/buildsystem/ide-build-stage-launcher.c ../libide/buildsystem/ide-build-stage-mkdirs.c ../libide/buildsystem/ide-build-stage-transfer.c ../libide/buildsystem/ide-build-system.c ../libide/buildsystem/ide-build-system-discovery.c ../libide/buildsystem/ide-build-target.c ../libide/buildsystem/ide-build-utils.c ../libide/buildsystem/ide-configuration-manager.c ../libide/buildsystem/ide-configuration.c ../libide/buildsystem/ide-configuration-provider.c ../libide/buildsystem/ide-environment-variable.c ../libide/buildsystem/ide-environment.c ../libide/devices/ide-device-manager.c ../libide/devices/ide-device-provider.c ../libide/devices/ide-device.c ../libide/diagnostics/ide-diagnostic-provider.c ../libide/diagnostics/ide-diagnostic.c ../libide/diagnostics/ide-diagnostics-manager.c ../libide/diagnostics/ide-diagnostics.c ../libide/diagnostics/ide-fixit.c ../libide/diagnostics/ide-source-location.c ../libide/diagnostics/ide-source-range.c ../libide/directory/ide-directory-build-system.c ../libide/directory/ide-directory-plugin.c ../libide/directory/ide-directory-vcs.c ../libide/doap/ide-doap-person.c ../libide/doap/ide-doap.c ../libide/editor/ide-editor-perspective.c ../libide/editor/ide-editor-view-addin.c ../libide/editor/ide-editor-view.c ../libide/files/ide-file-settings.c ../libide/files/ide-file.c ../libide/formatting/ide-formatter.c ../libide/formatting/ide-formatter-options.c ../libide/genesis/ide-genesis-addin.c ../libide/highlighting/ide-highlight-engine.c ../libide/highlighting/ide-highlight-index.c ../libide/highlighting/ide-highlighter.c ../libide/history/ide-back-forward-item.c ../libide/history/ide-back-forward-list-load.c ../libide/history/ide-back-forward-list-save.c ../libide/history/ide-back-forward-list.c ../libide/ide-context.c ../libide/ide-object.c ../libide/ide-service.c ../libide/ide.c ../libide/langserv/ide-langserv-client.c ../libide/langserv/ide-langserv-completion-provider.c ../libide/langserv/ide-langserv-diagnostic-provider.c ../libide/langserv/ide-langserv-formatter.c ../libide/langserv/ide-langserv-highlighter.c ../libide/langserv/ide-langserv-rename-provider.c ../libide/langserv/ide-langserv-symbol-node.c ../libide/langserv/ide-langserv-symbol-node-private.h ../libide/langserv/ide-langserv-symbol-resolver.c ../libide/langserv/ide-langserv-symbol-tree.c ../libide/langserv/ide-langserv-symbol-tree-private.h ../libide/langserv/ide-langserv-util.c ../libide/local/ide-local-device.c ../libide/logging/ide-log.c ../libide/plugins/ide-extension-adapter.c ../libide/plugins/ide-extension-set-adapter.c ../libide/preferences/ide-preferences-addin.c ../libide/preferences/ide-preferences-perspective.c ../libide/projects/ide-project-edit.c ../libide/projects/ide-project-file.c ../libide/projects/ide-project-files.c ../libide/projects/ide-project-info.c ../libide/projects/ide-project-item.c ../libide/projects/ide-project-miner.c ../libide/projects/ide-project.c ../libide/projects/ide-recent-projects.c ../libide/rename/ide-rename-provider.c ../libide/runner/ide-run-button.c ../libide/runner/ide-run-manager.c ../libide/runner/ide-runner.c ../libide/runner/ide-runner-addin.c ../libide/runtimes/ide-runtime-manager.c ../libide/runtimes/ide-runtime-provider.c ../libide/runtimes/ide-runtime.c ../libide/search/ide-search-engine.c ../libide/search/ide-search-entry.c ../libide/search/ide-search-provider.c ../libide/search/ide-search-result.c ../libide/snippets/ide-source-snippet-chunk.c ../libide/snippets/ide-source-snippet-context.c ../libide/snippets/ide-source-snippet.c ../libide/snippets/ide-source-snippets-manager.c ../libide/snippets/ide-source-snippets.c ../libide/sourceview/ide-completion-item.c ../libide/sourceview/ide-completion-provider.c ../libide/sourceview/ide-completion-results.c ../libide/sourceview/ide-completion-words.c ../libide/sourceview/ide-cursor.c ../libide/sourceview/ide-indenter.c ../libide/sourceview/ide-language.c ../libide/sourceview/ide-source-map.c ../libide/sourceview/ide-source-style-scheme.c ../libide/sourceview/ide-source-view-mode.c ../libide/sourceview/ide-source-view.c ../libide/subprocess/ide-subprocess.c ../libide/subprocess/ide-subprocess-launcher.c ../libide/subprocess/ide-subprocess-supervisor.c ../libide/symbols/ide-symbol-node.c ../libide/symbols/ide-symbol-resolver.c ../libide/symbols/ide-symbol-tree.c ../libide/symbols/ide-symbol.c ../libide/symbols/ide-tags-builder.c ../libide/template/ide-project-template.c ../libide/template/ide-template-base.c ../libide/template/ide-template-provider.c ../libide/threading/ide-thread-pool.c ../libide/transfers/ide-pkcon-transfer.c ../libide/transfers/ide-transfer-manager.c ../libide/transfers/ide-transfer-row.c ../libide/transfers/ide-transfer.c ../libide/transfers/ide-transfer-button.c ../libide/transfers/ide-transfers-button.c ../libide/transfers/ide-transfers-progress-icon.c ../libide/util/ide-flatpak.c ../libide/util/ide-glib.c ../libide/util/ide-gtk.c ../libide/util/ide-line-reader.c ../libide/util/ide-posix.c ../libide/util/ide-progress.c ../libide/util/ide-settings.c ../libide/util/ide-uri.c ../libide/vcs/ide-vcs-config.c ../libide/vcs/ide-vcs-initializer.c ../libide/vcs/ide-vcs-uri.c ../libide/vcs/ide-vcs.c ../libide/workbench/ide-layout-grid.c ../libide/workbench/ide-layout-pane.c ../libide/workbench/ide-layout-stack.c ../libide/workbench/ide-layout-stack-addin.c ../libide/workbench/ide-layout-view.c ../libide/workbench/ide-layout.c ../libide/workbench/ide-omni-bar.c ../libide/workbench/ide-perspective.c ../libide/workbench/ide-workbench-addin.c ../libide/workbench/ide-workbench-message.c ../libide/workbench/ide-workbench-header-bar.c ../libide/workbench/ide-workbench-open.c ../libide/workbench/ide-workbench.c ../libide/workers/ide-worker.c libide/ide-enums.c -pthread -I/usr/include/gobject-introspection-1.0 -I/usr/lib64/libffi-3.2.1/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include --no-libtool --namespace=Ide --nsversion=1.0 --warn-all --output libide/Ide-1.0.gir --c-include=ide.h -I/home/foser/work/gnome-builder/libide -I/home/foser/work/gnome-builder/builddir/libide -I./contrib/xml/. -I../contrib/xml/. -I./subprojects/libgd/. -I../subprojects/libgd/. -I./contrib/nautilus/. -I../contrib/nautilus/. -I./contrib/libeditorconfig/. -I../contrib/libeditorconfig/. --include=Gio-2.0 --include=GtkSource-3.0 --include=Peas-1.0 --include=Dazzle-1.0 --include=Json-1.0 --include=Template-1.0 --symbol-prefix=ide --identifier-prefix=Ide --cflags-begin -DHAVE_CONFIG_H -I/home/foser/work/gnome-builder/builddir -D_GNU_SOURCE -DIDE_COMPILATION -Wcast-align -Wdeclaration-after-statement -Werror=format-security -Werror=format=2 -Wformat-nonliteral -Wformat-security -Wmissing-include-dirs -Wnested-externs -Wno-missing-field-initializers -Wno-sign-compare -Wno-strict-aliasing -Wno-uninitialized -Wno-unused-parameter -Wpointer-arith -Wredundant-decls -Wshadow -Wswitch-default -Wswitch-enum -Wundef -fstack-protector-strong -I. -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread -I/usr/include/gspell-1 -I/usr/include/enchant -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/atk-1.0 -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/gtksourceview-3.0 -I/usr/include/libxml2 -I/usr/include/libpeas-1.0 -I/usr/include/gobject-introspection-1.0 -I/usr/lib64/libffi-3.2.1/include -I/usr/include/libdazzle-1.0 -I/usr/include/template-glib-1.0 -I/usr/include/json-glib-1.0 -I/usr/include/jsonrpc-glib-1.0 -I/usr/include/webkitgtk-4.0 -I/usr/include/libsoup-2.4 -I./subprojects/libgd/. -I../subprojects/libgd/. --cflags-end -L/home/foser/work/gnome-builder/builddir/libide --extra-library=pangoft2-1.0 --extra-library=pango-1.0 --extra-library=gobject-2.0 --extra-library=glib-2.0 --extra-library=fontconfig --extra-library=freetype --extra-library=gspell-1 --extra-library=gtk-3 --extra-library=gdk-3 --extra-library=pangocairo-1.0 --extra-library=atk-1.0 --extra-library=cairo-gobject --extra-library=cairo --extra-library=gdk_pixbuf-2.0 --extra-library=gio-2.0 --extra-library=enchant --extra-library=gmodule-2.0 -pthread --extra-library=gtksourceview-3.0 --extra-library=peas-1.0 --extra-library=girepository-1.0 --extra-library=dazzle-1.0 -L/usr/lib64/ --extra-library=template_glib-1.0 --extra-library=xml2 --extra-library=json-glib-1.0 --extra-library=jsonrpc_glib-1.0 --extra-library=webkit2gtk-4.0 --extra-library=soup-2.4 --extra-library=javascriptcoregtk-4.0 -L/home/foser/work/gnome-builder/builddir/subprojects/libgd/libgd -lgd --extra-library=m -L/home/foser/work/gnome-builder/builddir/libide -L/home/foser/work/gnome-builder/builddir/subprojects/libgd/libgd --library ide-1.0

QuLogic commented 7 years ago

Also see #2179 which might be affecting the search path a bit.

ajacoutot commented 6 years ago

FWIW we see the same issue on BSD systems. For e.g. building gnome-builder while the libgd graphic library is installed on te system yields to the same error (meson 0.43.0).

tp-m commented 5 years ago

This might be fixed/helped by https://gitlab.gnome.org/GNOME/gobject-introspection/merge_requests/72

xclaesse commented 5 years ago

Yes, I've looked at this with @ocrete and we came to the conclusion the is nothing meson can do as workaround, it must be fixed in g-i. Note that when the are rpath it seems to work, but maybe not always.