1{ 2 hello, 3 checkpointBuildTools, 4 runCommand, 5 texinfo, 6 stdenv, 7 rsync, 8}: 9let 10 baseHelloArtifacts = checkpointBuildTools.prepareCheckpointBuild hello; 11 patchedHello = hello.overrideAttrs (old: { 12 buildInputs = [ texinfo ]; 13 src = runCommand "patch-hello-src" { } '' 14 mkdir -p $out 15 cd $out 16 tar xf ${hello.src} --strip-components=1 17 patch -p1 < ${./hello.patch} 18 ''; 19 }); 20 checkpointBuiltHello = checkpointBuildTools.mkCheckpointBuild patchedHello baseHelloArtifacts; 21 22 checkpointBuiltHelloWithCheck = checkpointBuiltHello.overrideAttrs (old: { 23 doCheck = true; 24 checkPhase = '' 25 echo "checking if unchanged source file is not recompiled" 26 [ "$(stat --format="%Y" lib/exitfail.o)" = "$(stat --format="%Y" ${baseHelloArtifacts}/outputs/lib/exitfail.o)" ] 27 ''; 28 }); 29 30 baseHelloRemoveFileArtifacts = checkpointBuildTools.prepareCheckpointBuild ( 31 hello.overrideAttrs (old: { 32 patches = [ ./hello-additionalFile.patch ]; 33 }) 34 ); 35 36 preparedHelloRemoveFileSrc = runCommand "patch-hello-src" { } '' 37 mkdir -p $out 38 cd $out 39 tar xf ${hello.src} --strip-components=1 40 patch -p1 < ${./hello-additionalFile.patch} 41 ''; 42 43 patchedHelloRemoveFile = hello.overrideAttrs (old: { 44 buildInputs = [ texinfo ]; 45 src = runCommand "patch-hello-src" { } '' 46 mkdir -p $out 47 cd $out 48 ${rsync}/bin/rsync -cutU --chown=$USER:$USER --chmod=+w -r ${preparedHelloRemoveFileSrc}/* . 49 patch -p1 < ${./hello-removeFile.patch} 50 ''; 51 }); 52 53 checkpointBuiltHelloWithRemovedFile = checkpointBuildTools.mkCheckpointBuild patchedHelloRemoveFile baseHelloRemoveFileArtifacts; 54in 55stdenv.mkDerivation { 56 name = "patched-hello-returns-correct-output"; 57 buildCommand = '' 58 touch $out 59 60 echo "testing output of hello binary" 61 [ "$(${checkpointBuiltHelloWithCheck}/bin/hello)" = "Hello, incremental world!" ] 62 echo "testing output of hello with removed file" 63 [ "$(${checkpointBuiltHelloWithRemovedFile}/bin/hello)" = "Hello, incremental world!" ] 64 ''; 65}