nixpkgs/pkgs/development/tools/misc/arcanist/default.nix
Bjørn Forsman ce8e9df4d7 arcanist: add python3 to fix 'arc anoid'
Patch out the requirement from 'arc' that it needs 'python3' in
$PATH at runtime, because once built the python script will have
a fixed absolute path shebang to python3. (The check makes sense
outside of Nix though.)

Not injecting python3 in PATH prevents leaking python3 into the
environment in which arc runs linters etc.
2022-04-01 12:33:12 +02:00

85 lines
2.6 KiB
Nix
Raw 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.

{ bison
, cacert
, fetchFromGitHub
, flex
, php
, lib, stdenv
, installShellFiles
, which
, python3
}:
# Make a custom wrapper. If `wrapProgram` is used, arcanist thinks .arc-wrapped is being
# invoked and complains about it being an unknown toolset. We could use `makeWrapper`, but
# then wed need to still craft a script that does the `php libexec/arcanist/bin/...` dance
# anyway... So just do everything at once.
let makeArcWrapper = toolset: ''
cat << WRAPPER > $out/bin/${toolset}
#!$shell -e
export PATH='${php}/bin:${which}/bin'\''${PATH:+':'}\$PATH
exec ${php}/bin/php $out/libexec/arcanist/bin/${toolset} "\$@"
WRAPPER
chmod +x $out/bin/${toolset}
'';
in
stdenv.mkDerivation {
pname = "arcanist";
version = "20200711";
src = fetchFromGitHub {
owner = "phacility";
repo = "arcanist";
rev = "2565cc7b4d1dbce6bc7a5b3c4e72ae94be4712fe";
sha256 = "0jiv4aj4m5750dqw9r8hizjkwiyxk4cg4grkr63sllsa2dpiibxw";
};
patches = [ ./dont-require-python3-in-path.patch ];
buildInputs = [ php python3 ];
nativeBuildInputs = [ bison flex installShellFiles ];
postPatch = lib.optionalString stdenv.isAarch64 ''
substituteInPlace support/xhpast/Makefile \
--replace "-minline-all-stringops" ""
'';
buildPhase = ''
runHook preBuild
make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
make xhpast -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/libexec
make install -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
cp -R . $out/libexec/arcanist
ln -sf ${cacert}/etc/ssl/certs/ca-bundle.crt $out/libexec/arcanist/resources/ssl/default.pem
${makeArcWrapper "arc"}
${makeArcWrapper "phage"}
$out/bin/arc shell-complete --generate --
installShellCompletion --cmd arc --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh
installShellCompletion --cmd phage --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh
runHook postInstall
'';
doInstallCheck = true;
installCheckPhase = ''
$out/bin/arc help diff -- > /dev/null
$out/bin/phage help alias -- > /dev/null
'';
meta = {
description = "Command line interface to Phabricator";
homepage = "http://phabricator.org";
license = lib.licenses.asl20;
platforms = lib.platforms.unix;
maintainers = [ lib.maintainers.thoughtpolice ];
};
}