Files
nixpkgs/pkgs/by-name/qu/quint/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

120 lines
2.9 KiB
Nix

{
lib,
stdenv,
rustPlatform,
fetchFromGitHub,
nodejs,
nodejs_20,
makeWrapper,
jre,
fetchzip,
buildNpmPackage,
}:
let
version = "0.25.1";
apalacheVersion = "0.47.2";
evaluatorVersion = "0.2.0";
metaCommon = {
description = "Formal specification language with TLA+ semantics";
homepage = "https://quint-lang.org";
license = lib.licenses.asl20;
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [ bugarela ];
};
src = fetchFromGitHub {
owner = "informalsystems";
repo = "quint";
tag = "v${version}";
hash = "sha256-CYQesIoDlIGCKXIJ/hpZqOZBVd19Or5VEKVERchJz68=";
};
# Build the Quint CLI from source
quint-cli = buildNpmPackage {
pname = "quint-cli";
inherit version src;
nativeBuildInputs = [ nodejs_20 ];
sourceRoot = "${src.name}/quint";
npmDepsHash = "sha256-FYNSr5B0/oJ4PbU/HUVqSdPG8kFvq4vRFnYwwdMf+jQ=";
npmBuildScript = "compile";
dontNpmPrune = true;
installPhase = ''
runHook preInstall
mkdir -p $out/share/quint
cp -r node_modules $out/share/quint
cp -r dist $out/share/quint
runHook postInstall
'';
meta = metaCommon // {
description = "CLI for the Quint formal specification language";
};
};
# Build the Rust evaluator from source
quint-evaluator = rustPlatform.buildRustPackage {
pname = "quint-evaluator";
version = evaluatorVersion;
inherit src;
sourceRoot = "${src.name}/evaluator";
# Skip tests during build, as many rust tests rely on the Quint CLI
doCheck = false;
cargoHash = "sha256-beWqUDaWWCbGL+V1LNtf35wZrIqWCCbFLYo5HCZF7FI=";
meta = metaCommon // {
description = "Evaluator for the Quint formal specification language";
};
};
# Download Apalache. It runs on the JVM, so no need to build it from source.
apalacheDist = fetchzip {
url = "https://github.com/apalache-mc/apalache/releases/download/v${apalacheVersion}/apalache.tgz";
hash = "sha256-P0QOxB14OSlphqBALR1YL9WJ0XYaUYE/R52yZytVzds=";
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "quint";
inherit version src;
nativeBuildInputs = [ makeWrapper ];
dontBuild = true;
dontConfigure = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
makeWrapper ${nodejs}/bin/node $out/bin/quint \
--add-flags "${quint-cli}/share/quint/dist/src/cli.js" \
--set QUINT_HOME "$out/share/quint" \
--prefix PATH : ${lib.makeBinPath [ jre ]}
install -Dm755 ${quint-evaluator}/bin/quint_evaluator -t $out/share/quint/rust-evaluator-v${evaluatorVersion}/
mkdir -p $out/share/quint/apalache-dist-${apalacheVersion}
cp -r ${apalacheDist} $out/share/quint/apalache-dist-${apalacheVersion}/apalache
chmod +x $out/share/quint/apalache-dist-${apalacheVersion}/apalache/bin/apalache-mc
runHook postInstall
'';
meta = metaCommon // {
mainProgram = "quint";
};
})