diff options
author | volth <volth@volth.com> | 2019-04-09 14:49:47 +0000 |
---|---|---|
committer | volth <volth@volth.com> | 2019-04-12 09:09:06 +0000 |
commit | 03eaa480bd7a649e0cfc4f8479fc6deba279eb48 (patch) | |
tree | e2f50d4f7565a7a399a40f2b5013332ac6b79d2f /pkgs/development/interpreters | |
parent | 68f7f25706225aef65bcac95dc28c51ccd116941 (diff) | |
download | nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.gz nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.bz2 nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.lz nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.xz nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.zst nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.zip |
perl: add .withPackages
Diffstat (limited to 'pkgs/development/interpreters')
-rw-r--r-- | pkgs/development/interpreters/perl/default.nix | 21 | ||||
-rw-r--r-- | pkgs/development/interpreters/perl/wrapper.nix | 55 |
2 files changed, 73 insertions, 3 deletions
diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl/default.nix index 9adc72f941a2..e03777b0fb35 100644 --- a/pkgs/development/interpreters/perl/default.nix +++ b/pkgs/development/interpreters/perl/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, fetchurl, buildPackages +{ config, lib, stdenv, fetchurl, buildPackages, callPackage , enableThreading ? stdenv ? glibc, makeWrapper }: @@ -22,7 +22,8 @@ let libcInc = lib.getDev libc; libcLib = lib.getLib libc; crossCompiling = stdenv.buildPlatform != stdenv.hostPlatform; - common = { version, sha256 }: stdenv.mkDerivation (rec { + + common = { self, version, sha256 }: stdenv.mkDerivation (rec { inherit version; name = "perl-${version}"; @@ -104,7 +105,19 @@ let setupHook = ./setup-hook.sh; - passthru.libPrefix = "lib/perl5/site_perl"; + passthru = rec { + interpreter = "${self}/bin/perl"; + libPrefix = "lib/perl5/site_perl"; + pkgs = callPackage ../../../top-level/perl-packages.nix { + perl = self; + overrides = config.perlPackageOverrides or (p: {}); # TODO: (self: super: {}) like in python + }; + buildEnv = callPackage ./wrapper.nix { + perl = self; + inherit (pkgs) requiredPerlModules; + }; + withPackages = f: buildEnv.override { extraLibs = f pkgs; }; + }; doCheck = false; # some tests fail, expensive @@ -179,12 +192,14 @@ let in rec { # the latest Maint version perl528 = common { + self = perl528; version = "5.28.1"; sha256 = "0iy3as4hnbjfyws4in3j9d6zhhjxgl5m95i5n9jy2bnzcpz8bgry"; }; # the latest Devel version perldevel = common { + self = perldevel; version = "5.29.9"; sha256 = "017x3nghyc5m8q1yqnrdma96b3d5rlfx87vv5mi64jq0r8k6zppm"; }; diff --git a/pkgs/development/interpreters/perl/wrapper.nix b/pkgs/development/interpreters/perl/wrapper.nix new file mode 100644 index 000000000000..9142a1f4fc36 --- /dev/null +++ b/pkgs/development/interpreters/perl/wrapper.nix @@ -0,0 +1,55 @@ +{ stdenv, perl, buildEnv, makeWrapper +, extraLibs ? [] +, extraOutputsToInstall ? [] +, postBuild ? "" +, ignoreCollisions ? false +, lib +, requiredPerlModules +, makeWrapperArgs ? [] +}: + +# Create a perl executable that knows about additional packages. +let + env = let + paths = requiredPerlModules (extraLibs ++ [ perl ] ); + in buildEnv { + name = "${perl.name}-env"; + + inherit paths; + inherit ignoreCollisions; + extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall; + + # we create wrapper for the binaries in the different packages + postBuild = '' + + . "${makeWrapper}/nix-support/setup-hook" + + if [ -L "$out/bin" ]; then + unlink "$out/bin" + fi + mkdir -p "$out/bin" + + # take every binary from perl packages and put them into the env + for path in ${stdenv.lib.concatStringsSep " " paths}; do + if [ -d "$path/bin" ]; then + cd "$path/bin" + for prg in *; do + if [ -f "$prg" ]; then + rm -f "$out/bin/$prg" + if [ -x "$prg" ]; then + makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set PERL5LIB "$out/${perl.libPrefix}" + fi + fi + done + fi + done + '' + postBuild; + + meta = perl.meta // { outputsToInstall = ["out"]; }; # remove "man" from meta.outputsToInstall. pkgs.buildEnv produces no "man", it puts everything to "out" + + passthru = perl.passthru // { + interpreter = "${env}/bin/perl"; + inherit perl; + }; + }; +in env |