]> gitweb.factorcode.org Git - factor.git/blobdiff - shell.nix
sequences.extras: Add a couple words for prepending spaces to lines
[factor.git] / shell.nix
index e1576d3cb12102e8967a62ebfe9f1922e51d559c..f9d896259e7b7edee0424f0a3a917aaf54234bee 100644 (file)
--- a/shell.nix
+++ b/shell.nix
@@ -9,19 +9,46 @@ let
     gdk_pixbuf
     gnome2.gtkglext
     pcre
-    mesa_glu
+    libGL
+    libGLU
     freealut
     openssl
     udis86 # available since NixOS 19.09
     openal
+    libogg
+    libvorbis
+    zlib
   ];
+  runtimeLibPath = "/run/opengl-driver/lib:" + lib.makeLibraryPath runtimeLibs;
 in
 (mkClangShell {
   name = "factor-shell-env";
-  LD_LIBRARY_PATH = "/run/opengl-driver/lib:${lib.makeLibraryPath runtimeLibs}" ;
+  LD_LIBRARY_PATH = runtimeLibPath ;
   buildInputs = runtimeLibs ++ [
     # for building factor
     git
     curl
+    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)"
+    local binary="''${root}/factor"
+    local wrapped="''${root}/.factor-wrapped"
+    # Remove the wrapped binary if a new VM has been compiled
+    ${lib.getBin file}/bin/file "$binary" |grep ELF >/dev/null && rm -f "$wrapped"
+    # 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"
+    }
+  '';
 })