2025-07-24 13:55:40 +02:00

108 lines
2.2 KiB
Nix

{
stdenv,
lib,
perl,
pkg-config,
curl,
nix,
libsodium,
boost,
autoreconfHook,
autoconf-archive,
xz,
meson,
ninja,
bzip2,
libarchive,
}:
let
atLeast223 = lib.versionAtLeast nix.version "2.23";
atLeast224 = lib.versionAtLeast nix.version "2.24";
atLeast226 = lib.versionAtLeast nix.version "2.26";
mkConfigureOption =
{
mesonOption,
autoconfOption,
value,
}:
let
setFlagTo =
if atLeast223 then lib.mesonOption mesonOption else lib.withFeatureAs true autoconfOption;
in
setFlagTo value;
in
stdenv.mkDerivation (finalAttrs: {
pname = "nix-perl";
inherit (nix) version src;
postUnpack = "sourceRoot=$sourceRoot/${lib.optionalString atLeast224 "src"}/perl";
# TODO: Remove this once the nix build also uses meson
postPatch = lib.optionalString (atLeast224 && lib.versionOlder nix.version "2.27") ''
substituteInPlace lib/Nix/Store.xs \
--replace-fail 'config-util.hh' 'nix/config.h' \
--replace-fail 'config-store.hh' 'nix/config.h'
'';
buildInputs = [
boost
bzip2
curl
libsodium
nix
perl
xz
]
++ lib.optional atLeast226 libarchive;
# Not cross-safe since Nix checks for curl/perl via
# NEED_PROG/find_program, but both seem to be needed at runtime
# as well.
nativeBuildInputs = [
pkg-config
perl
curl
]
++ (
if atLeast223 then
[
meson
ninja
]
else
[
autoconf-archive
autoreconfHook
]
);
# `perlPackages.Test2Harness` is marked broken for Darwin
doCheck = !stdenv.hostPlatform.isDarwin;
nativeCheckInputs = [
perl.pkgs.Test2Harness
];
${if atLeast223 then "mesonFlags" else "configureFlags"} = [
(mkConfigureOption {
mesonOption = "dbi_path";
autoconfOption = "dbi";
value = "${perl.pkgs.DBI}/${perl.libPrefix}";
})
(mkConfigureOption {
mesonOption = "dbd_sqlite_path";
autoconfOption = "dbd-sqlite";
value = "${perl.pkgs.DBDSQLite}/${perl.libPrefix}";
})
]
++ lib.optionals atLeast223 [
(lib.mesonEnable "tests" finalAttrs.finalPackage.doCheck)
];
preConfigure = "export NIX_STATE_DIR=$TMPDIR";
passthru = { inherit perl; };
})