summaryrefslogtreecommitdiffstats
path: root/pkgs/development/interpreters/perl/default.nix
blob: 6cc6f5755ac4dc24ef2334ca8abf42ba29099a16 (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
{ callPackage }:

let
  # Common passthru for all perl interpreters.
  # copied from lua
  passthruFun =
    {
      overrides,
      perlOnBuildForBuild,
      perlOnBuildForHost,
      perlOnBuildForTarget,
      perlOnHostForHost,
      perlOnTargetForTarget,
      perlAttr ? null,
      tests ? { },
      self, # is perlOnHostForTarget
    }:
    let
      perlPackages =
        callPackage
          # Function that when called
          # - imports perl-packages.nix
          # - adds spliced package sets to the package set
          (
            {
              stdenv,
              pkgs,
              perl,
              callPackage,
              makeScopeWithSplicing',
            }:
            let
              perlPackagesFun = callPackage ../../../top-level/perl-packages.nix {
                inherit stdenv pkgs;
                perl = self;
              };

              otherSplices = {
                selfBuildBuild = perlOnBuildForBuild.pkgs;
                selfBuildHost = perlOnBuildForHost.pkgs;
                selfBuildTarget = perlOnBuildForTarget.pkgs;
                selfHostHost = perlOnHostForHost.pkgs;
                selfTargetTarget = perlOnTargetForTarget.pkgs or { };
              };
            in
            makeScopeWithSplicing' {
              inherit otherSplices;
              f = perlPackagesFun;
            }
          )
          {
            perl = self;
          };
    in
    rec {
      buildEnv = callPackage ./wrapper.nix {
        perl = self;
        inherit (pkgs) requiredPerlModules;
      };
      withPackages = f: buildEnv.override { extraLibs = f pkgs; };
      pkgs = perlPackages // (overrides pkgs);
      interpreter = "${self}/bin/perl";
      libPrefix = "lib/perl5/site_perl";
      perlOnBuild = perlOnBuildForHost.override {
        inherit overrides;
        self = perlOnBuild;
      };

      inherit tests;
    };

in
rec {
  perl5 = callPackage ./interpreter.nix {
    self = perl5;
    version = "5.42.3";
    sha256 = "sha256-ETd0CYWDe1zfFfDPq5Miedy0NS+RL+1vwUTotPCCNic=";
    inherit passthruFun;
  };
}