at 22.05-pre 52 lines 1.5 kB view raw
1{ lib, perl, buildEnv, makeWrapper 2, extraLibs ? [] 3, extraOutputsToInstall ? [] 4, postBuild ? "" 5, ignoreCollisions ? false 6, requiredPerlModules 7}: 8 9# Create a perl executable that knows about additional packages. 10let 11 env = let 12 paths = requiredPerlModules (extraLibs ++ [ perl ] ); 13 in buildEnv { 14 name = "${perl.name}-env"; 15 16 inherit paths; 17 inherit ignoreCollisions; 18 extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall; 19 20 nativeBuildInputs = [ makeWrapper ]; 21 22 # we create wrapper for the binaries in the different packages 23 postBuild = '' 24 if [ -L "$out/bin" ]; then 25 unlink "$out/bin" 26 fi 27 mkdir -p "$out/bin" 28 29 # take every binary from perl packages and put them into the env 30 for path in ${lib.concatStringsSep " " paths}; do 31 if [ -d "$path/bin" ]; then 32 cd "$path/bin" 33 for prg in *; do 34 if [ -f "$prg" ]; then 35 rm -f "$out/bin/$prg" 36 if [ -x "$prg" ]; then 37 makeWrapper "$path/bin/$prg" "$out/bin/$prg" --suffix PERL5LIB ':' "$out/${perl.libPrefix}" 38 fi 39 fi 40 done 41 fi 42 done 43 '' + postBuild; 44 45 meta = perl.meta // { outputsToInstall = ["out"]; }; # remove "man" from meta.outputsToInstall. pkgs.buildEnv produces no "man", it puts everything to "out" 46 47 passthru = perl.passthru // { 48 interpreter = "${env}/bin/perl"; 49 inherit perl; 50 }; 51 }; 52in env