summary refs log tree commit diff
path: root/pkgs/development/perl-modules/generic/default.nix
blob: 9ff63c14e5188c7a9e7501480c2c676f3b1efb8e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{ 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`
    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)