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.
master
timor 2020-05-20 17:04:01 +02:00 committed by John Benediktsson
parent 802bb073b0
commit 655f54af19
1 changed files with 13 additions and 1 deletions

View File

@ -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 <factor-root>" ; 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"
}
'';
})