]> gitweb.factorcode.org Git - factor.git/commitdiff
shell.nix: Define gdk pixbuf loaders from build dependencies.
authortimor <timor.dd@googlemail.com>
Tue, 16 Mar 2021 14:55:38 +0000 (15:55 +0100)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 16 Mar 2021 15:10:08 +0000 (08:10 -0700)
This resolves a problem when the wrapped Factor binary is executed with
`GDK_PIXBUF_MODULE_FILE` set to an incompatible version.  This happens if e.g.
Factor is run from within an Emacs that uses newer gdk versions.

Related NixOS issue: https://github.com/NixOS/nixpkgs/issues/54278

In the long run, this should be replaced by a derivation which correctly runs
through all the phases correctly to set up `wrapGAppsHook` correctly.  Even
then, the correct behavior would probably be to have the surrounding
environment (e.g. Emacs) restore the default variable value in it's
sub-environments.

shell.nix

index 3ca255579c024c45a1ebbf1765690d1df94ac781..f9d896259e7b7edee0424f0a3a917aaf54234bee 100644 (file)
--- a/shell.nix
+++ b/shell.nix
@@ -31,6 +31,11 @@ in
     makeWrapper
   ];
   shellHook = ''
+    # Set Gdk pixbuf loaders file to the one from the build dependencies here
+    unset GDK_PIXBUF_MODULE_FILE
+    # Defined in gdk-pixbuf setup hook
+    findGdkPixbufLoaders "${pkgs.librsvg}"
+
     wrapFactor () {
     [ -n "$1" ] || { printf "Usage: wrapFactor <factor-root>" ; return; }
     local root="$(realpath $1)"
@@ -41,6 +46,7 @@ in
     # Restore the factor binary if it was already wrapped
     [ -e "$wrapped" ] && { mv "$wrapped" "$binary" ; }
     wrapProgram "$binary" --prefix LD_LIBRARY_PATH : ${runtimeLibPath} \
+      --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
       --argv0 factor
     ln -sf "''${root}/factor.image" "''${root}/.factor-wrapped.image"
     }