From: timor Date: Wed, 20 May 2020 15:04:01 +0000 (+0200) Subject: shell.nix: supply `wrapFactor` helper to make standalone factor binary X-Git-Tag: 0.99~3222 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=655f54af19915225a44ceba874538167515cd110 shell.nix: supply `wrapFactor` helper to make standalone factor binary This adds the shell function `wrapFactor`. This function is intended to wrap the result of calling `build.sh` in the shell environment so it can be executed outside of the nix shell. Example: ``` $ nix-shell [nix-shell] $ ./build.sh bootstrap ...build factor vm and image... [nix-shell] $ wrapFactor . exit $ ./factor ``` `wrapFactor` takes the path to the factor root dir as argument, and expects the binary `factor` and the image file `factor.image` there and uses Nixpkgs' `makeWrapper` to wrap the `factor` executable in-place with the correct `LD_LIBRARY_PATH`. Afterwards, the factor executable can be called outside of the nix-shell environment. --- diff --git a/shell.nix b/shell.nix index e1576d3cb1..b9d4a136b0 100644 --- a/shell.nix +++ b/shell.nix @@ -15,13 +15,25 @@ let udis86 # available since NixOS 19.09 openal ]; + runtimeLibPath = lib.makeLibraryPath runtimeLibs; in (mkClangShell { name = "factor-shell-env"; - LD_LIBRARY_PATH = "/run/opengl-driver/lib:${lib.makeLibraryPath runtimeLibs}" ; + LD_LIBRARY_PATH = "/run/opengl-driver/lib:${runtimeLibPath}" ; buildInputs = runtimeLibs ++ [ # for building factor git curl + makeWrapper ]; + shellHook = '' + wrapFactor () { + [ -n "$1" ] || { printf "Usage: wrapFactor " ; return; } + local root="$(realpath $1)" + local binary="''${root}/factor" + wrapProgram "$binary" --prefix LD_LIBRARY_PATH : ${runtimeLibPath} \ + --argv0 factor + ln -sf "''${root}/factor.image" "''${root}/.factor-wrapped.image" + } + ''; })