* A stdenv adapter to build a package with coverage instrumentation.
svn path=/nixpkgs/trunk/; revision=16890
This commit is contained in:
parent
df5cd8776a
commit
0fd5ed507e
|
@ -121,4 +121,54 @@ rec {
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args // extraAttrs); };
|
{ mkDerivation = args: stdenv.mkDerivation (args // extraAttrs); };
|
||||||
|
|
||||||
|
|
||||||
|
/* Return a modified stdenv that builds packages with GCC's coverage
|
||||||
|
instrumentation. The coverage note files (*.gcno) are stored in
|
||||||
|
$out/.coverage, along with the source code of the package, to
|
||||||
|
enable programs like lcov to produce pretty-printed reports.
|
||||||
|
*/
|
||||||
|
addCoverageInstrumentation = stdenv:
|
||||||
|
addAttrsToDerivation
|
||||||
|
{ NIX_CFLAGS_COMPILE = "-O0 --coverage";
|
||||||
|
|
||||||
|
prePhases = "moveBuildDir";
|
||||||
|
postPhases = "cleanupBuildDir";
|
||||||
|
|
||||||
|
# Object files instrumented with coverage analysis write
|
||||||
|
# runtime coverage data to <path>/<object>.gcda, where <path>
|
||||||
|
# is the location where gcc originally created the object
|
||||||
|
# file. That would be /tmp/nix-build-<something>, which will
|
||||||
|
# be long gone by the time we run the program. Furthermore,
|
||||||
|
# the <object>.gcno files created at compile time are also
|
||||||
|
# written there. And to make nice coverage reports with lcov,
|
||||||
|
# we need the source code. So we move the whole build tree to
|
||||||
|
# $out/.coverage.
|
||||||
|
moveBuildDir =
|
||||||
|
''
|
||||||
|
ensureDir $out/.coverage
|
||||||
|
cd $out/.coverage
|
||||||
|
'';
|
||||||
|
|
||||||
|
# This is an uberhack to prevent libtool from removing gcno
|
||||||
|
# files. This has been fixed in libtool, but there are
|
||||||
|
# packages out there with old ltmain.sh scripts.
|
||||||
|
# See http://www.mail-archive.com/libtool@gnu.org/msg10725.html
|
||||||
|
postUnpack =
|
||||||
|
''
|
||||||
|
for i in $(find -name ltmain.sh); do
|
||||||
|
substituteInPlace $i --replace '*.$objext)' '*.$objext | *.gcno)'
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Get rid of everything that isn't a gcno file or a C source
|
||||||
|
# file. This also includes the gcda files; we're not
|
||||||
|
# interested in coverage resulting from the package's own test
|
||||||
|
# suite.
|
||||||
|
cleanupBuildDir =
|
||||||
|
''
|
||||||
|
find $out/.coverage/ -type f -a ! \
|
||||||
|
\( -name "*.c" -o -name "*.gcno" -o -name "*.h" \) \
|
||||||
|
| xargs rm -f --
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
stdenv;
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,7 +226,8 @@ let
|
||||||
|
|
||||||
inherit (import ../stdenv/adapters.nix {inherit (pkgs) dietlibc fetchurl runCommand;})
|
inherit (import ../stdenv/adapters.nix {inherit (pkgs) dietlibc fetchurl runCommand;})
|
||||||
overrideGCC overrideInStdenv overrideSetup
|
overrideGCC overrideInStdenv overrideSetup
|
||||||
useDietLibC useKlibc makeStaticBinaries;
|
useDietLibC useKlibc makeStaticBinaries addAttrsToDerivation
|
||||||
|
addCoverageInstrumentation;
|
||||||
|
|
||||||
|
|
||||||
### BUILD SUPPORT
|
### BUILD SUPPORT
|
||||||
|
@ -2771,11 +2772,11 @@ let
|
||||||
inherit (xlibs) libX11;
|
inherit (xlibs) libX11;
|
||||||
};
|
};
|
||||||
|
|
||||||
apr = import ../development/libraries/apr {
|
apr = makeOverridable (import ../development/libraries/apr) {
|
||||||
inherit fetchurl stdenv;
|
inherit fetchurl stdenv;
|
||||||
};
|
};
|
||||||
|
|
||||||
aprutil = import ../development/libraries/apr-util {
|
aprutil = makeOverridable (import ../development/libraries/apr-util) {
|
||||||
inherit fetchurl stdenv apr expat db4;
|
inherit fetchurl stdenv apr expat db4;
|
||||||
bdbSupport = true;
|
bdbSupport = true;
|
||||||
};
|
};
|
||||||
|
@ -2802,7 +2803,7 @@ let
|
||||||
inherit fetchurl stdenv;
|
inherit fetchurl stdenv;
|
||||||
});
|
});
|
||||||
|
|
||||||
aterm25 = import ../development/libraries/aterm/2.5.nix {
|
aterm25 = makeOverridable (import ../development/libraries/aterm/2.5.nix) {
|
||||||
inherit fetchurl stdenv;
|
inherit fetchurl stdenv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4500,7 +4501,7 @@ let
|
||||||
### SERVERS
|
### SERVERS
|
||||||
|
|
||||||
|
|
||||||
apacheHttpd = import ../servers/http/apache-httpd {
|
apacheHttpd = makeOverridable (import ../servers/http/apache-httpd) {
|
||||||
inherit fetchurl stdenv perl openssl zlib apr aprutil pcre;
|
inherit fetchurl stdenv perl openssl zlib apr aprutil pcre;
|
||||||
sslSupport = true;
|
sslSupport = true;
|
||||||
};
|
};
|
||||||
|
@ -6613,7 +6614,7 @@ let
|
||||||
inherit fetchurl stdenv Xaw3d ghostscriptX;
|
inherit fetchurl stdenv Xaw3d ghostscriptX;
|
||||||
};
|
};
|
||||||
|
|
||||||
hello = import ../applications/misc/hello/ex-2 {
|
hello = makeOverridable (import ../applications/misc/hello/ex-2) {
|
||||||
inherit fetchurl stdenv;
|
inherit fetchurl stdenv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue