]> granicus.if.org Git - clang/commitdiff
[analyzer] [tests] Allow the tested project to specify it's own analyzer wrapper
authorGeorge Karpenkov <ekarpenkov@apple.com>
Fri, 29 Jun 2018 22:05:32 +0000 (22:05 +0000)
committerGeorge Karpenkov <ekarpenkov@apple.com>
Fri, 29 Jun 2018 22:05:32 +0000 (22:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@336023 91177308-0d34-0410-b5e6-96231b3b80d8

utils/analyzer/SATestBuild.py

index 00f3bd853d3e981efae6636c342f741a7969be78..882c5ce7fcad02946ae0b04177c26a4652f23c47 100755 (executable)
@@ -136,6 +136,9 @@ CleanupScript = "cleanup_run_static_analyzer.sh"
 # This is a file containing commands for scan-build.
 BuildScript = "run_static_analyzer.cmd"
 
+# A comment in a build script which disables wrapping.
+NoPrefixCmd = "#NOPREFIX"
+
 # The log file name.
 LogFolderName = "Logs"
 BuildLogName = "run_static_analyzer.log"
@@ -285,6 +288,7 @@ def runScanBuild(Dir, SBOutputDir, PBuildLogFile):
     # Always use ccc-analyze to ensure that we can locate the failures
     # directory.
     SBOptions += "--override-compiler "
+    ExtraEnv = {}
     try:
         SBCommandFile = open(BuildScriptPath, "r")
         SBPrefix = "scan-build " + SBOptions + " "
@@ -292,6 +296,15 @@ def runScanBuild(Dir, SBOutputDir, PBuildLogFile):
             Command = Command.strip()
             if len(Command) == 0:
                 continue
+
+            # Custom analyzer invocation specified by project.
+            # Communicate required information using environment variables
+            # instead.
+            if Command == NoPrefixCmd:
+                SBPrefix = ""
+                ExtraEnv['OUTPUT'] = SBOutputDir
+                continue
+
             # If using 'make', auto imply a -jX argument
             # to speed up analysis.  xcodebuild will
             # automatically use the maximum number of cores.
@@ -305,6 +318,7 @@ def runScanBuild(Dir, SBOutputDir, PBuildLogFile):
             check_call(SBCommand, cwd=SBCwd,
                        stderr=PBuildLogFile,
                        stdout=PBuildLogFile,
+                       env=dict(os.environ, **ExtraEnv),
                        shell=True)
     except CalledProcessError:
         Local.stderr.write("Error: scan-build failed. Its output was: \n")