summaryrefslogtreecommitdiff
path: root/pkgs/development/perl-modules/generic/default.nix
blob: 03dae50f7e9984dd14f40096765caab183d20bf4 (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
{
  lib,
  stdenv,
  perl,
  toPerlModule,
}:

{
  buildInputs ? [ ],
  nativeBuildInputs ? [ ],
  outputs ? [
    "out"
    "devdoc"
  ],

  # 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",

  env ? { },

  postPatch ? "patchShebangs .",

  ...
}@attrs:

lib.throwIf (attrs ? name)
  "buildPerlPackage: `name` (\"${attrs.name}\") is deprecated, use `pname` and `version` instead"

  (
    let
      defaultMeta = {
        homepage = "https://metacpan.org/dist/${attrs.pname}";
        inherit (perl.meta) platforms;
      };

      package = stdenv.mkDerivation (
        attrs
        // {
          name = "perl${perl.version}-${attrs.pname}-${attrs.version}";

          builder = ./builder.sh;

          buildInputs = buildInputs ++ [ perl ];
          nativeBuildInputs =
            nativeBuildInputs
            ++ (if !(stdenv.buildPlatform.canExecute stdenv.hostPlatform) then [ perl.mini ] else [ perl ]);

          inherit
            outputs
            doCheck
            checkTarget
            enableParallelBuilding
            postPatch
            ;
          env = {
            inherit PERL_AUTOINSTALL AUTOMATED_TESTING PERL_USE_UNSAFE_INC;
            fullperl = perl.__spliced.buildHost or perl;
          }
          // env;

          meta = defaultMeta // (attrs.meta or { });
        }
      );

    in
    toPerlModule package
  )