aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/modules/gnome.py16
-rw-r--r--test cases/frameworks/28 gir link order 2/meson-sample.c42
-rw-r--r--test cases/frameworks/28 gir link order 2/meson-sample.h17
-rw-r--r--test cases/frameworks/28 gir link order 2/meson.build35
-rw-r--r--test cases/frameworks/28 gir link order 2/samelibname/meson.build5
5 files changed, 107 insertions, 8 deletions
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index e20bae6..a223b78 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -299,6 +299,9 @@ class GnomeModule(ExtensionModule):
if isinstance(lib, build.SharedLibrary):
libdir = os.path.join(state.environment.get_build_dir(), state.backend.get_target_dir(lib))
link_command.append('-L' + libdir)
+ if include_rpath:
+ link_command.append('-Wl,-rpath,' + libdir)
+ depends.append(lib)
# Needed for the following binutils bug:
# https://github.com/mesonbuild/meson/issues/1911
# However, g-ir-scanner does not understand -Wl,-rpath
@@ -308,9 +311,6 @@ class GnomeModule(ExtensionModule):
link_command.append('-L' + d)
if include_rpath:
link_command.append('-Wl,-rpath,' + d)
- if include_rpath:
- link_command.append('-Wl,-rpath,' + libdir)
- depends.append(lib)
if gir_has_option(self.interpreter, '--extra-library') and use_gir_args:
link_command.append('--extra-library=' + lib.name)
else:
@@ -553,6 +553,11 @@ class GnomeModule(ExtensionModule):
libname = girtarget.get_basename()
else:
libname = os.path.join("@PRIVATE_OUTDIR_ABS_%s@" % girtarget.get_id(), girtarget.get_filename())
+ ret += ['--library', libname]
+ # need to put our output directory first as we need to use the
+ # generated libraries instead of any possibly installed system/prefix
+ # ones.
+ ret += ["-L@PRIVATE_OUTDIR_ABS_%s@" % girtarget.get_id()]
# Needed for the following binutils bug:
# https://github.com/mesonbuild/meson/issues/1911
# However, g-ir-scanner does not understand -Wl,-rpath
@@ -560,11 +565,6 @@ class GnomeModule(ExtensionModule):
for d in state.backend.determine_rpath_dirs(girtarget):
d = os.path.join(state.environment.get_build_dir(), d)
ret.append('-L' + d)
- ret += ['--library', libname]
- # need to put our output directory first as we need to use the
- # generated libraries instead of any possibly installed system/prefix
- # ones.
- ret += ["-L@PRIVATE_OUTDIR_ABS_%s@" % girtarget.get_id()]
return ret
diff --git a/test cases/frameworks/28 gir link order 2/meson-sample.c b/test cases/frameworks/28 gir link order 2/meson-sample.c
new file mode 100644
index 0000000..d743b2d
--- /dev/null
+++ b/test cases/frameworks/28 gir link order 2/meson-sample.c
@@ -0,0 +1,42 @@
+#include "meson-sample.h"
+
+struct _MesonSample {
+ GObject parent_instance;
+};
+
+G_DEFINE_TYPE (MesonSample, meson_sample, G_TYPE_OBJECT)
+
+/**
+ * meson_sample_new:
+ *
+ * Allocates a new #MesonSample.
+ *
+ * Returns: (transfer full): a #MesonSample.
+ */
+MesonSample *
+meson_sample_new (void)
+{
+ return g_object_new (MESON_TYPE_SAMPLE, NULL);
+}
+
+static void
+meson_sample_class_init (MesonSampleClass *klass)
+{
+}
+
+static void
+meson_sample_init (MesonSample *self)
+{
+}
+
+/**
+ * meson_sample_print_message:
+ * @self: a #MesonSample.
+ *
+ * Prints a message.
+ */
+void
+meson_sample_print_message (MesonSample *self)
+{
+ g_return_if_fail (MESON_IS_SAMPLE (self));
+}
diff --git a/test cases/frameworks/28 gir link order 2/meson-sample.h b/test cases/frameworks/28 gir link order 2/meson-sample.h
new file mode 100644
index 0000000..2c28401
--- /dev/null
+++ b/test cases/frameworks/28 gir link order 2/meson-sample.h
@@ -0,0 +1,17 @@
+#ifndef MESON_SAMPLE_H
+#define MESON_SAMPLE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define MESON_TYPE_SAMPLE (meson_sample_get_type())
+
+G_DECLARE_FINAL_TYPE (MesonSample, meson_sample, MESON, SAMPLE, GObject)
+
+MesonSample *meson_sample_new (void);
+void meson_sample_print_message (MesonSample *self);
+
+G_END_DECLS
+
+#endif /* MESON_SAMPLE_H */
diff --git a/test cases/frameworks/28 gir link order 2/meson.build b/test cases/frameworks/28 gir link order 2/meson.build
new file mode 100644
index 0000000..5465a5b
--- /dev/null
+++ b/test cases/frameworks/28 gir link order 2/meson.build
@@ -0,0 +1,35 @@
+project('gir link order 2', 'c')
+
+if not dependency('gobject-2.0', required : false).found()
+ error('MESON_SKIP_TEST gobject not found.')
+endif
+
+gnome = import('gnome')
+gobject = dependency('gobject-2.0')
+
+# This builds a dummy libsample under samelibname that's not really used
+subdir('samelibname')
+
+# This builds the real libsample
+meson_sample_sources = ['meson-sample.c', 'meson-sample.h']
+meson_sample_lib = shared_library(
+ 'sample',
+ sources : meson_sample_sources,
+ dependencies : [gobject],
+ link_with: [samelibname],
+ install : false,
+)
+
+# g-ir-scanner should get the linker paths in the right order so it links first
+# against the target libsample and not the dummy one that's just a dependency
+# https://github.com/mesonbuild/meson/pull/5423
+gnome.generate_gir(
+ meson_sample_lib,
+ sources : meson_sample_sources,
+ nsversion : '1.0',
+ namespace : 'Meson',
+ symbol_prefix : 'meson',
+ identifier_prefix : 'Meson',
+ install : false,
+ build_by_default: true,
+)
diff --git a/test cases/frameworks/28 gir link order 2/samelibname/meson.build b/test cases/frameworks/28 gir link order 2/samelibname/meson.build
new file mode 100644
index 0000000..8850372
--- /dev/null
+++ b/test cases/frameworks/28 gir link order 2/samelibname/meson.build
@@ -0,0 +1,5 @@
+samelibname = shared_library(
+ 'sample',
+ sources : [],
+ install : false,
+)