{
  lib,
  stdenv,
  mkMesonDerivation,
  perl,
  perlPackages,
  meson,
  ninja,
  pkg-config,
  nix-store,
  darwin,
  version,
  curl,
  bzip2,
  libsodium,
}:

let
  inherit (lib) fileset;
in

perl.pkgs.toPerlModule (
  mkMesonDerivation (finalAttrs: {
    pname = "nix-perl";
    inherit version;

    workDir = ./.;
    fileset = fileset.unions (
      [
        ./.version
        ../../.version
        ./MANIFEST
        ./lib
        ./meson.build
        ./meson.options
      ]
      ++ lib.optionals finalAttrs.doCheck [
        ./.yath.rc.in
        ./t
      ]
    );

    nativeBuildInputs = [
      meson
      ninja
      pkg-config
      perl
      curl
    ];

    buildInputs = [
      nix-store
      bzip2
      libsodium
    ];

    # `perlPackages.Test2Harness` is marked broken for Darwin
    doCheck = !stdenv.isDarwin;

    nativeCheckInputs = [
      perlPackages.Test2Harness
    ];

    preConfigure =
      # "Inline" .version so its not a symlink, and includes the suffix
      ''
        chmod u+w .version
        echo ${finalAttrs.version} > .version
      '';

    mesonFlags = [
      (lib.mesonOption "dbi_path" "${perlPackages.DBI}/${perl.libPrefix}")
      (lib.mesonOption "dbd_sqlite_path" "${perlPackages.DBDSQLite}/${perl.libPrefix}")
      (lib.mesonEnable "tests" finalAttrs.doCheck)
    ];

    mesonCheckFlags = [
      "--print-errorlogs"
    ];

    strictDeps = false;
  })
)
