diff options
author | L. E. Segovia <amy@centricular.com> | 2024-05-17 21:47:16 +0000 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2024-05-29 19:36:26 +0530 |
commit | 1ca4dd4f80cafac74e896d45ed0991e5cc79d96e (patch) | |
tree | 80e06139dba01f1f6557f69873fe0497d1825df9 | |
parent | 13414d666085b01e1c877dac288923adceba1336 (diff) |
gobject-introspection: Fix g-ir-scanner failing to run with rpath-relative libraries
Part-of: <https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/1481>
-rw-r--r-- | recipes/gobject-introspection.recipe | 3 | ||||
-rw-r--r-- | recipes/gobject-introspection/0002-dumper-Fix-introspection-binaries-missing-rpaths-for.patch | 43 |
2 files changed, 45 insertions, 1 deletions
diff --git a/recipes/gobject-introspection.recipe b/recipes/gobject-introspection.recipe index a78d1cd7..7e6b9bbe 100644 --- a/recipes/gobject-introspection.recipe +++ b/recipes/gobject-introspection.recipe @@ -15,7 +15,8 @@ class Recipe(recipe.Recipe): patches = [ # https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/448 - name + '/0001-giscanner-Allow-passing-full-paths-to-libraries-with.patch', + f'{name}/0001-giscanner-Allow-passing-full-paths-to-libraries-with.patch', + f'{name}/0002-dumper-Fix-introspection-binaries-missing-rpaths-for.patch' ] files_bins = ['g-ir-annotation-tool', 'g-ir-compiler', 'g-ir-doc-tool', 'g-ir-generate', 'g-ir-scanner'] diff --git a/recipes/gobject-introspection/0002-dumper-Fix-introspection-binaries-missing-rpaths-for.patch b/recipes/gobject-introspection/0002-dumper-Fix-introspection-binaries-missing-rpaths-for.patch new file mode 100644 index 00000000..7cec5f73 --- /dev/null +++ b/recipes/gobject-introspection/0002-dumper-Fix-introspection-binaries-missing-rpaths-for.patch @@ -0,0 +1,43 @@ +From b4d17a6a3cf4ef572818fddd52269c83fb03f63a Mon Sep 17 00:00:00 2001 +Message-ID: <b4d17a6a3cf4ef572818fddd52269c83fb03f63a.1715982305.git.amy@amyspark.me> +From: "L. E. Segovia" <amy@amyspark.me> +Date: Fri, 17 May 2024 21:39:10 +0000 +Subject: [PATCH 2/2] dumper: Fix introspection binaries missing rpaths for + relative dylibs + +Apple expects dylibs to have an ID of the form `@rpath/libyadda.dylib`. +For this convention to work, a RPATH entry pointing to the library +prefix and/or to the relative location of said prefix w.r.t the +dependent executable or library, must be inserted. + +This need previously did not arose because gobject-introspection +implicitly relied on the consumers having IDs set to their absolute +paths. This is no longer the case with GStreamer's Cerbero, which now +sanitizes RPATHs, load commands, and dylib IDs at install time. + +The simplest and most obvious fix is to ensure that, for each library +load path, the corresponding rpath entry is inserted. +--- + giscanner/dumper.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/giscanner/dumper.py b/giscanner/dumper.py +index 74a494b..cdb5400 100644 +--- a/giscanner/dumper.py ++++ b/giscanner/dumper.py +@@ -252,6 +252,12 @@ class DumpCompiler(object): + args.extend(pkg_config_libs) + self._compiler.get_external_link_flags(args, self._options.libraries) + ++ if sys.platform == 'darwin': ++ # If the libraries' ID are of the form (@rpath/libfoo.dylib), ++ # then nothing previously can have added the needed rpaths ++ rpath_entries_to_add = [lib.replace('-L/', '-Wl,-rpath,/') for lib in pkg_config_libs if lib.startswith('-L/')] ++ args.extend(rpath_entries_to_add) ++ + if not self._compiler.check_is_msvc(): + for ldflag in shlex.split(os.environ.get('LDFLAGS', '')): + args.append(ldflag) +-- +2.44.0 + |