diff options
Diffstat (limited to 'pkgs/build-support/release')
-rw-r--r-- | pkgs/build-support/release/default.nix | 6 | ||||
-rw-r--r-- | pkgs/build-support/release/gcov-report.nix | 49 | ||||
-rw-r--r-- | pkgs/build-support/release/nix-build.nix | 2 |
3 files changed, 55 insertions, 2 deletions
diff --git a/pkgs/build-support/release/default.nix b/pkgs/build-support/release/default.nix index acad3487dad2..6288935ec2a5 100644 --- a/pkgs/build-support/release/default.nix +++ b/pkgs/build-support/release/default.nix @@ -27,10 +27,14 @@ rec { } // args); coverageAnalysis = args: nixBuild ( - { inherit lcov enableCoverageInstrumentation makeCoverageAnalysisReport; + { inherit lcov enableGCOVInstrumentation makeGCOVReport; doCoverageAnalysis = true; } // args); + gcovReport = args: import ./gcov-report.nix ( + { inherit runCommand lcov rsync; + } // args); + rpmBuild = args: import ./rpm-build.nix ( { inherit vmTools; } // args); diff --git a/pkgs/build-support/release/gcov-report.nix b/pkgs/build-support/release/gcov-report.nix new file mode 100644 index 000000000000..8ce5c0488a7d --- /dev/null +++ b/pkgs/build-support/release/gcov-report.nix @@ -0,0 +1,49 @@ +{ runCommand, lcov, rsync, coverageRuns, lcovFilter ? [ "/nix/store/*" ], baseDirHack ? false }: + +runCommand "coverage" + { buildInputs = [ lcov rsync ]; + inherit lcovFilter baseDirHack; + } + '' + mkdir -p $TMPDIR/gcov $out/nix-support $out/coverage + info=$out/coverage/full.info + + for p in ${toString coverageRuns}; do + if [ -f $p/nix-support/hydra-build-products ]; then + cat $p/nix-support/hydra-build-products >> $out/nix-support/hydra-build-products + fi + + [ ! -e $p/nix-support/failed ] || touch $out/nix-support/failed + + opts= + for d in $p/coverage-data/*; do + for i in $(cd $d/nix/store && ls); do + if ! [ -e /nix/store/$i/.build ]; then continue; fi + if [ -e $TMPDIR/gcov/nix/store/$i ]; then continue; fi + echo "copying $i..." + rsync -a /nix/store/$i/.build/* $TMPDIR/gcov/ + if [ -n "$baseDirHack" ]; then + opts="-b $TMPDIR/gcov/$(cd /nix/store/$i/.build && ls)" + fi + done + + for i in $(cd $d/nix/store && ls); do + rsync -a $d/nix/store/$i/.build/* $TMPDIR/gcov/ --include '*/' --include '*.gcda' --exclude '*' + done + done + + chmod -R u+w $TMPDIR/gcov + + echo "producing info..." + geninfo --ignore-errors source,gcov $TMPDIR/gcov --output-file $TMPDIR/app.info $opts + cat $TMPDIR/app.info >> $info + done + + echo "making report..." + set -o noglob + lcov --remove $info ''$lcovFilter > $info.tmp + set +o noglob + mv $info.tmp $info + genhtml --show-details $info -o $out/coverage + echo "report coverage $out/coverage" >> $out/nix-support/hydra-build-products + '' diff --git a/pkgs/build-support/release/nix-build.nix b/pkgs/build-support/release/nix-build.nix index 993f12bc3002..8ebae24c6733 100644 --- a/pkgs/build-support/release/nix-build.nix +++ b/pkgs/build-support/release/nix-build.nix @@ -79,7 +79,7 @@ stdenv.mkDerivation ( prePhases = ["initPhase"] ++ prePhases; - buildInputs = buildInputs ++ stdenv.lib.optional doCoverageAnalysis args.makeCoverageAnalysisReport; + buildInputs = buildInputs ++ stdenv.lib.optional doCoverageAnalysis args.makeGCOVReport; lcovFilter = ["/nix/store/*"] ++ lcovFilter; |