Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at flake-libs 68 lines 1.8 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 '' 36 if [ -L "$out/bin" ]; then 37 unlink "$out/bin" 38 fi 39 mkdir -p "$out/bin" 40 41 # take every binary from perl packages and put them into the env 42 for path in ${lib.concatStringsSep " " paths}; do 43 if [ -d "$path/bin" ]; then 44 cd "$path/bin" 45 for prg in *; do 46 if [ -f "$prg" ]; then 47 rm -f "$out/bin/$prg" 48 if [ -x "$prg" ]; then 49 makeWrapper "$path/bin/$prg" "$out/bin/$prg" --suffix PERL5LIB ':' "$out/${perl.libPrefix}" 50 fi 51 fi 52 done 53 fi 54 done 55 '' 56 + postBuild; 57 58 meta = perl.meta // { 59 outputsToInstall = [ "out" ]; 60 }; # remove "man" from meta.outputsToInstall. pkgs.buildEnv produces no "man", it puts everything to "out" 61 62 passthru = perl.passthru // { 63 interpreter = "${env}/bin/perl"; 64 inherit perl; 65 }; 66 }; 67in 68env