clang-analyzer: respect $NIX_CFLAGS_COMPILE

When using scan-build, you're often going to want to use it in the
context of a Nix expression with buildInputs, and the default wrapper
scripts will put things like include locations for those inputs
$NIX_CFLAGS_COMPILE. Thus, scan-build also needs to pass them to the
analyzer - while the link flags aren't relevant, the include flags are.

This is because the analyzer executable that gets run by scan-build is
*not* clang-wrapper, but the actual clang executable, so it doesn't
implicitly add such arguments. The build is two-stage - it runs the real
clang wrapper once, and then the analyzer once.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
This commit is contained in:
Austin Seipp
2014-05-02 14:07:37 -05:00
parent 27a0d56514
commit 59528d9f0e
2 changed files with 39 additions and 2 deletions
@@ -9,6 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "06rb4j1ifbznl3gfhl98s7ilj0ns01p7y7zap4p7ynmqnc6pia92";
};
patches = [ ./0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch ];
buildInputs = [ clang llvmPackages.clang perl makeWrapper ];
buildPhase = "true";
@@ -18,7 +19,10 @@ stdenv.mkDerivation rec {
cp -R tools/scan-build $out/libexec
makeWrapper $out/libexec/scan-view/scan-view $out/bin/scan-view
makeWrapper $out/libexec/scan-build/scan-build $out/bin/scan-build --add-flags "--use-cc=${clang}/bin/clang" --add-flags "--use-c++=${clang}/bin/clang++" --add-flags "--use-analyzer=${llvmPackages.clang}/bin/clang"
makeWrapper $out/libexec/scan-build/scan-build $out/bin/scan-build \
--add-flags "--use-cc=${clang}/bin/clang" \
--add-flags "--use-c++=${clang}/bin/clang++" \
--add-flags "--use-analyzer='${llvmPackages.clang}/bin/clang'"
'';
meta = {
@@ -28,4 +32,4 @@ stdenv.mkDerivation rec {
platforms = stdenv.lib.platforms.unix;
maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
};
}
}