{ lib, stdenv, fetchFromGitHub, openmp ? null }:

stdenv.mkDerivation (finalAttrs: {
  pname = "b2sum";
  version = "20190724";

  src = fetchFromGitHub {
    owner = "BLAKE2";
    repo = "BLAKE2";
    rev = finalAttrs.version;
    sha256 = "sha256-6BVl3Rh+CRPQq3QxcUlk5ArvjIj/IcPCA2/Ok0Zu7UI=";
  };

  # Use the generic C implementation rather than the SSE optimised version on non-x86 platforms
  postPatch = lib.optionalString (!stdenv.hostPlatform.isx86) ''
    substituteInPlace makefile \
      --replace "#FILES=b2sum.c ../ref/" "FILES=b2sum.c ../ref/" \
      --replace "FILES=b2sum.c ../sse/" "#FILES=b2sum.c ../sse/"
  '';

  sourceRoot = "${finalAttrs.src.name}/b2sum";

  buildInputs = [ openmp ];

  buildFlags = [ (lib.optional (openmp == null) "NO_OPENMP=1") ];

  # clang builds require at least C99 or the build fails with:
  # error: unknown type name 'inline'
  env.NIX_CFLAGS_COMPILE = "-std=c99";

  installFlags = [ "PREFIX=$(out)" ];

  meta = with lib; {
    description = "B2sum utility is similar to the md5sum or shasum utilities but for BLAKE2";
    mainProgram = "b2sum";
    homepage = "https://blake2.net";
    license = with licenses; [ asl20 cc0 openssl ];
    maintainers = with maintainers; [ kirelagin ];
    platforms = platforms.unix;
  };
})
