Unverified Commit 4dc008af authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

cerberus: Fix runtime path look-up (#445142)

parents 803c948e 2b489fb4
Loading
Loading
Loading
Loading
+56 −9
Original line number Diff line number Diff line
{
  lib,
  fetchpatch,
  fetchFromGitHub,
  writableTmpDirAsHomeHook,
  unstableGitUpdater,
  ocamlPackages,
  opam,
  makeBinaryWrapper,
  writableTmpDirAsHomeHook,
  unstableGitUpdater,
  testers,
  cerberus,
}:
ocamlPackages.buildDunePackage {
ocamlPackages.buildDunePackage rec {
  pname = "cerberus";
  version = "0-unstable-2025-08-18";

@@ -17,15 +21,33 @@ ocamlPackages.buildDunePackage {
    hash = "sha256-++fCZvk4ee166eciipTQ8GId6DWrG6aonAzHpK/10f0=";
  };

  patches = [
    # https://github.com/rems-project/cerberus/pull/980
    (fetchpatch {
      name = "fix-runtime-lookup";
      url = "https://github.com/rems-project/cerberus/commit/262c13331d4809dd3742069dbcd1deedee8227f2.patch";
      hash = "sha256-yPhzswMDkpjvjYyobnqoF3900l4THe0kaGme1eZXLQc=";
    })
  ];

  # Cerberus has not had a true release yet, and it parses out a git rev
  # for version info. We just patch the "didn't find git revs" to
  # our version since git is impure
  postPatch = ''
    substituteInPlace tools/gen_version.ml \
      --replace-fail '"unknown"' '"${version}"'
  '';

  minimalOCamlVersion = "4.12";

  strictDeps = true;
  depsBuildBuild = [
    ocamlPackages.menhir
    ocamlPackages.lem
  ];

  nativeBuildInputs = [
    opam
    writableTmpDirAsHomeHook
    ocamlPackages.lem
    ocamlPackages.menhir
    makeBinaryWrapper
  ];

  buildInputs = with ocamlPackages; [
@@ -42,15 +64,33 @@ ocamlPackages.buildDunePackage {
    janeStreet.ppx_sexp_conv
  ];

  # Need to set this or it complains. I don't
  # think the actual value matters much
  env.OPAM_SWITCH_PREFIX = placeholder "out";

  # Use the make file as it does some codegen
  buildPhase = ''
    runHook preBuild

    make Q= cerberus
    make DUNEFLAGS="--profile=release" Q= -j$NIX_BUILD_CORES cerberus

    runHook postBuild
  '';

  # Must install both the stdlib
  # and the executable itself
  installPhase = ''
    runHook preInstall

    dune install --prefix $out --libdir $OCAMLFIND_DESTDIR cerberus-lib --docdir $out/share/doc --mandir $out/share/man
    dune install --prefix $out --libdir $OCAMLFIND_DESTDIR cerberus --docdir $out/share/doc --mandir $out/share/man

    wrapProgram "$out/bin/cerberus" \
      --set CERB_INSTALL_PREFIX "$out/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib/"

    runHook postInstall
  '';

  doInstallCheck = true;
  installCheckPhase = ''
    runHook preInstallCheck
@@ -64,7 +104,14 @@ ocamlPackages.buildDunePackage {
    runHook postInstallCheck
  '';

  passthru.updateScript = unstableGitUpdater { branch = "master"; };
  passthru = {
    updateScript = unstableGitUpdater { branch = "master"; };

    # Ensure it still runs after outside the container
    tests.version = testers.testVersion {
      package = cerberus;
    };
  };

  meta = {
    homepage = "https://www.cl.cam.ac.uk/~pes20/cerberus/";