ff7b216dcf
Because perl packages are prefixed with the perl version, it means that the `lib.getExe` heuristic will never point to the binary name. So we provide the meta.mainProgram that overrides that, using the original pname or parsed name. It's not perfect but should yield better results already.
66 lines
2.1 KiB
Nix
66 lines
2.1 KiB
Nix
{ lib, stdenv, perl, buildPerl, toPerlModule }:
|
|
|
|
{ buildInputs ? []
|
|
, nativeBuildInputs ? []
|
|
, outputs ? [ "out" "devdoc" ]
|
|
, src ? null
|
|
|
|
# enabling or disabling does nothing for perl packages so set it explicitly
|
|
# to false to not change hashes when enableParallelBuildingByDefault is enabled
|
|
, enableParallelBuilding ? false
|
|
|
|
, doCheck ? true
|
|
, checkTarget ? "test"
|
|
|
|
# Prevent CPAN downloads.
|
|
, PERL_AUTOINSTALL ? "--skipdeps"
|
|
|
|
# From http://wiki.cpantesters.org/wiki/CPANAuthorNotes: "allows
|
|
# authors to skip certain tests (or include certain tests) when
|
|
# the results are not being monitored by a human being."
|
|
, AUTOMATED_TESTING ? true
|
|
|
|
# current directory (".") is removed from @INC in Perl 5.26 but many old libs rely on it
|
|
# https://metacpan.org/pod/release/XSAWYERX/perl-5.26.0/pod/perldelta.pod#Removal-of-the-current-directory-%28%22.%22%29-from-@INC
|
|
, PERL_USE_UNSAFE_INC ? "1"
|
|
|
|
, ...
|
|
}@attrs:
|
|
|
|
assert attrs?pname -> attrs?version;
|
|
assert attrs?pname -> !(attrs?name);
|
|
|
|
lib.warnIf (attrs ? name) "builtPerlPackage: `name' (\"${attrs.name}\") is deprecated, use `pname' and `version' instead"
|
|
|
|
(let
|
|
defaultMeta = {
|
|
homepage = "https://metacpan.org/release/${lib.getName attrs}"; # TODO: phase-out `attrs.name`
|
|
mainProgram = attrs.pname or (builtins.parseDrvName attrs.name).name;
|
|
platforms = perl.meta.platforms;
|
|
};
|
|
|
|
cleanedAttrs = builtins.removeAttrs attrs [
|
|
"meta" "builder" "version" "pname" "fullperl"
|
|
"buildInputs" "nativeBuildInputs" "buildInputs"
|
|
"PERL_AUTOINSTALL" "AUTOMATED_TESTING" "PERL_USE_UNSAFE_INC"
|
|
];
|
|
|
|
package = stdenv.mkDerivation ({
|
|
pname = "perl${perl.version}-${lib.getName attrs}"; # TODO: phase-out `attrs.name`
|
|
version = lib.getVersion attrs; # TODO: phase-out `attrs.name`
|
|
|
|
builder = ./builder.sh;
|
|
|
|
buildInputs = buildInputs ++ [ perl ];
|
|
nativeBuildInputs = nativeBuildInputs ++ [ (perl.mini or perl) ];
|
|
|
|
fullperl = buildPerl;
|
|
|
|
inherit outputs src doCheck checkTarget enableParallelBuilding;
|
|
inherit PERL_AUTOINSTALL AUTOMATED_TESTING PERL_USE_UNSAFE_INC;
|
|
|
|
meta = defaultMeta // (attrs.meta or { });
|
|
} // cleanedAttrs);
|
|
|
|
in toPerlModule package)
|