easy-dhall-nix/build.nix
David Baynard dbc7891754 Update dhall to 1.38
The issue in https://github.com/dhall-lang/dhall-haskell/issues/2161
requires a workaround for the misplaced manpages.
2021-03-12 23:48:29 +01:00

80 lines
2.3 KiB
Nix
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ pkgs, release }:
{ simpleName, binNames, attrName, manPages ? [] }:
let
release = import ./release.nix;
in
pkgs.stdenv.mkDerivation rec {
name = simpleName;
src = if pkgs.stdenv.isDarwin
then pkgs.fetchurl {
url = release.${"${attrName}-darwin"}.url;
sha256 = release.${"${attrName}-darwin"}.hash;
}
else pkgs.fetchurl {
url = release.${"${attrName}-linux"}.url;
sha256 = release.${"${attrName}-linux"}.hash;
};
nativeBuildInputs = [ pkgs.installShellFiles ];
passthru.binNames = binNames;
sourceRoot = ".";
installPhase = ''
mkdir -p $out/bin
${pkgs.lib.concatMapStringsSep "\n" (binName: ''
binPath="$out/bin/${binName}"
install -D -m555 -T "bin/${binName}" "$binPath"
rm "bin/${binName}"
"$binPath" --bash-completion-script "$binPath" > "${binName}.bash"
installShellCompletion --bash "${binName}.bash"
rm "${binName}.bash"
"$binPath" --zsh-completion-script "$binPath" > "${binName}.zsh"
installShellCompletion --zsh "${binName}.zsh"
rm "${binName}.zsh"
"$binPath" --fish-completion-script "$binPath" > "${binName}.fish"
installShellCompletion --fish "${binName}.fish"
rm "${binName}.fish"
'') binNames}
rmdir bin
# https://github.com/dhall-lang/dhall-haskell/issues/2161
rm share/man/dhall-docs.1 \
share/man/dhall-docs.md \
share/man/gen-manpage.sh \
&& rmdir share/man && rmdir share \
|| true
rm share/man/dhall.1 \
share/man/dhall.md \
&& rmdir share/man && rmdir share \
|| true
${pkgs.lib.optionalString (manPages != []) ''
${pkgs.lib.concatMapStringsSep "\n" (manPage: ''
# TODO: split into $man output
manPagePath="$out/share/man/man1/${manPage}"
install -D -m644 -T "share/man/man1/${manPage}" "$manPagePath"
rm "share/man/man1/${manPage}"
'') manPages}
rmdir --parent share/man/man1
''}
# a bit hacky, but sourceRoot unfortunately unpacks to the runtime build dir
rm env-vars .sandbox.sb || true
# check that we didnt forget any files (maybe a new binary was added)
if [ ! -z "$(${pkgs.lr}/bin/lr -1 -t 'depth == 1' .)" ]; then
echo "still some files remaining!" >&2
${pkgs.lr}/bin/lr .
exit 1
fi
'';
}