X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=shell.nix;h=f9d896259e7b7edee0424f0a3a917aaf54234bee;hp=458964dc7ff7193b57d329bc1bc4d24d46ce205f;hb=1bf4194271bc619cbeaeda2f60bf11081a95282f;hpb=b02ae64e91d932ba7769dfb8e389a021c6290b2c diff --git a/shell.nix b/shell.nix index 458964dc7f..f9d896259e 100644 --- a/shell.nix +++ b/shell.nix @@ -1,20 +1,54 @@ { pkgs ? import {} }: -(pkgs.buildFHSUserEnv { - name = "factor"; - targetPkgs = pkgs: (with pkgs; [ - # for running factor - gtk2-x11 +with pkgs; +let + mkClangShell = mkShell.override { stdenv = clangStdenv; }; + runtimeLibs = with xorg; [ glib + pango cairo + gtk2-x11 gdk_pixbuf - gnome2.pango - cairo gnome2.gtkglext - + pcre + 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 = runtimeLibPath ; + buildInputs = runtimeLibs ++ [ # for building factor - clang git curl - binutils - ]); - runScript = "bash"; -}).env + 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 " ; 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" + } + ''; +})