Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ lib 2, stdenv 3, pkgsCross 4, makeBinaryWrapper 5, writeText 6, runCommand 7, runCommandCC 8}: 9 10let 11 env = { nativeBuildInputs = [ makeBinaryWrapper ]; }; 12 envCheck = runCommandCC "envcheck" env '' 13 cc -Wall -Werror -Wpedantic -o $out ${./envcheck.c} 14 ''; 15 makeGoldenTest = testname: runCommand "make-binary-wrapper-test-${testname}" env '' 16 mkdir -p tmp/foo # for the chdir test 17 18 params=$(<"${./.}/${testname}.cmdline") 19 eval "makeCWrapper /send/me/flags $params" > wrapper.c 20 21 diff wrapper.c "${./.}/${testname}.c" 22 23 if [ -f "${./.}/${testname}.env" ]; then 24 eval "makeWrapper ${envCheck} wrapped $params" 25 env -i ./wrapped > env.txt 26 sed "s#SUBST_ARGV0#${envCheck}#;s#SUBST_CWD#$PWD#" \ 27 "${./.}/${testname}.env" > golden-env.txt 28 if ! diff env.txt golden-env.txt; then 29 echo "env/argv should be:" 30 cat golden-env.txt 31 echo "env/argv output is:" 32 cat env.txt 33 exit 1 34 fi 35 else 36 # without a golden env, we expect the wrapper compilation to fail 37 ! eval "makeWrapper ${envCheck} wrapped $params" &> error.txt 38 fi 39 40 cp wrapper.c $out 41 ''; 42 tests = lib.genAttrs [ 43 "add-flags" 44 "argv0" 45 "basic" 46 "chdir" 47 "combination" 48 "env" 49 "inherit-argv0" 50 "invalid-env" 51 "overlength-strings" 52 "prefix" 53 "suffix" 54 ] makeGoldenTest // lib.optionalAttrs (! stdenv.isDarwin) { 55 cross = pkgsCross.${if stdenv.buildPlatform.isAarch64 then "gnu64" else "aarch64-multiplatform"}.callPackage ./cross.nix { }; 56 }; 57in 58 59writeText "make-binary-wrapper-tests" '' 60 ${lib.concatStringsSep "\n" (builtins.attrValues tests)} 61'' // tests