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