diff --git a/pkgs/development/libraries/glib/default.nix b/pkgs/development/libraries/glib/default.nix index 7fffaa236e55..22e14f308887 100644 --- a/pkgs/development/libraries/glib/default.nix +++ b/pkgs/development/libraries/glib/default.nix @@ -130,6 +130,9 @@ stdenv.mkDerivation (finalAttrs: { # and by default meson installs in to $out/share/gdb/auto-load # which does not help ./gdb_script.patch + + # glib assumes that `RTLD_LOCAL` is defined to `0`, which is true on Linux and FreeBSD but not on Darwin. + ./gmodule-rtld_local.patch ]; outputs = [ "bin" "out" "dev" "devdoc" ]; diff --git a/pkgs/development/libraries/glib/gmodule-rtld_local.patch b/pkgs/development/libraries/glib/gmodule-rtld_local.patch new file mode 100644 index 000000000000..abbf19d70b20 --- /dev/null +++ b/pkgs/development/libraries/glib/gmodule-rtld_local.patch @@ -0,0 +1,13 @@ +diff --git a/gmodule/gmodule-dl.c b/gmodule/gmodule-dl.c +index 6d1c5fab7..b21773bca 100644 +--- a/gmodule/gmodule-dl.c ++++ b/gmodule/gmodule-dl.c +@@ -136,7 +136,7 @@ _g_module_open (const gchar *file_name, + + lock_dlerror (); + handle = dlopen (file_name, +- (bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW)); ++ (bind_local ? RTLD_LOCAL : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW)); + if (!handle) + { + const gchar *message = fetch_dlerror (TRUE);