nixpkgs/pkgs/development/perl-modules/generic/default.nix
Jonas Chevalier ff7b216dcf
perlPackages: add default meta.mainProgram (#176398)
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.
2022-06-06 14:35:07 +02:00

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)