X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=shell.nix;h=3a91384c87e6e7f1b4b4296b626e3fc4f3ee6bc9;hp=e1576d3cb12102e8967a62ebfe9f1922e51d559c;hb=98e31346d3ddd0f54d622e6ec489bdb48e090355;hpb=3c789cb0a7eff44a78fc4dd5de9ebe77276c65b1 diff --git a/shell.nix b/shell.nix index e1576d3cb1..3a91384c87 100644 --- a/shell.nix +++ b/shell.nix @@ -5,23 +5,51 @@ let runtimeLibs = with xorg; [ glib pango cairo - gtk2-x11 - gdk_pixbuf - gnome2.gtkglext pcre - mesa_glu + libGL + libGLU freealut openssl udis86 # available since NixOS 19.09 openal - ]; + libogg + libvorbis + zlib + ] ++ (if stdenv.isDarwin then [] else [ + gtk2-x11 + gdk_pixbuf + gnome2.gtkglext + ]); + 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 + ] ++ (if stdenv.isDarwin then [darwin.apple_sdk.frameworks.Cocoa] else []); + 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 " ; 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" + } + ''; })