56 lines
1.8 KiB
Nix
56 lines
1.8 KiB
Nix
{
|
|
hare,
|
|
lib,
|
|
makeSetupHook,
|
|
makeWrapper,
|
|
runCommand,
|
|
stdenv,
|
|
writeShellApplication,
|
|
}:
|
|
let
|
|
arch = stdenv.targetPlatform.uname.processor;
|
|
harePropagationInputs = builtins.attrValues { inherit (hare) harec qbe; };
|
|
hareWrappedScript = writeShellApplication {
|
|
# `name` MUST be `hare`, since its role is to replace the hare binary.
|
|
name = "hare";
|
|
runtimeInputs = [ hare ];
|
|
excludeShellChecks = [ "SC2086" ];
|
|
# ''${cmd:+"$cmd"} is used on the default case to keep the same behavior as
|
|
# the hare binary: If "$cmd" is passed directly and it's empty, the hare
|
|
# binary will treat it as an unrecognized command.
|
|
text = ''
|
|
readonly cmd="$1"
|
|
shift
|
|
case "$cmd" in
|
|
"test"|"run"|"build") exec hare "$cmd" $NIX_HAREFLAGS "$@" ;;
|
|
*) exec hare ''${cmd:+"$cmd"} "$@"
|
|
esac
|
|
'';
|
|
};
|
|
hareWrapper = runCommand "hare-wrapper" { nativeBuildInputs = [ makeWrapper ]; } ''
|
|
mkdir -p $out/bin
|
|
install ${lib.getExe hareWrappedScript} $out/bin/hare
|
|
makeWrapper ${lib.getExe hare} $out/bin/hare-native \
|
|
--inherit-argv0 \
|
|
--unset AR \
|
|
--unset LD \
|
|
--unset CC
|
|
'';
|
|
in
|
|
makeSetupHook {
|
|
name = "hare-hook";
|
|
# The propagation of `qbe` and `harec` (harePropagationInputs) is needed for
|
|
# build frameworks like `haredo`, which set the HAREC and QBE env vars to
|
|
# `harec` and `qbe` respectively. We use the derivations from the `hare`
|
|
# package to assure that there's no different behavior between the `hareHook`
|
|
# and `hare` packages.
|
|
propagatedBuildInputs = [ hareWrapper ] ++ harePropagationInputs;
|
|
substitutions = {
|
|
hare_unconditional_flags = "-q -a${arch}";
|
|
hare_stdlib = "${hare}/src/hare/stdlib";
|
|
};
|
|
meta = {
|
|
description = "Setup hook for the Hare compiler";
|
|
inherit (hare.meta) badPlatforms platforms;
|
|
};
|
|
} ./setup-hook.sh
|