From: Ted Kremenek Date: Wed, 14 May 2008 20:10:33 +0000 (+0000) Subject: Added "-a" option to scan-build to select the analysis (ASTConsumer) used by clang... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1262fc4d66584224234691d30d779f8ff004585c;p=clang Added "-a" option to scan-build to select the analysis (ASTConsumer) used by clang. The default is -checker-cfref. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51116 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/ccc-analyzer b/utils/ccc-analyzer index 6530303b73..a1308daa8e 100755 --- a/utils/ccc-analyzer +++ b/utils/ccc-analyzer @@ -50,7 +50,7 @@ def remove_pch_extension(path): return path return path[:i] -def analyze(clang, args,language,output,files,verbose,htmldir,file): +def analyze(clang, args,language,output,files,verbose,htmldir,file,analysis_type): if language.find("c++") > 0: return @@ -73,14 +73,12 @@ def analyze(clang, args,language,output,files,verbose,htmldir,file): command = 'cp'.split() args = command + files + target.split() else: - command = clang.split() + '-checker-cfref'.split() + command = clang.split() + analysis_type.split() args = command + args; RunAnalyzer = 1 if verbose == 2: print >> sys.stderr, '#SHELL (cd ' + os.getcwd() + ' && ' + ' '.join(command + print_args) + ')\n' - print >> sys.stderr, '#LINE (cd ' + os.getcwd() + ' && wc -l ' + file + ')\n' - if RunAnalyzer and htmldir is not None: args.append('-o') @@ -142,18 +140,29 @@ def main(args): # Forward to GCC. compile(args) - + + # Set the analyzer flag. + analysis_type = os.environ.get('CCC_ANALYZER_ANALYSIS') + + if analysis_type is not None: + analysis_type = "-" + analysis_type + else: + analysis_type = "-checker-cfref" + + # Determine the level of verbosity. if os.environ.get('CCC_ANALYZER_VERBOSE') is not None: verbose = 1 if os.environ.get('CCC_ANALYZER_LOG') is not None: verbose = 2 + # Determine what clang executable to use. clang_env = os.environ.get('CLANG') if clang_env is not None: clang = clang_env + # Get the HTML output directory. htmldir = os.environ.get('CCC_ANALYZER_HTML') i = 0 @@ -268,7 +277,7 @@ def main(args): if language != 'unknown': analyze_args = [ '-x', language ] + analyze_args analyze_args = analyze_args + compile_opts - analyze(clang, analyze_args, language, output, files, verbose, htmldir, file) + analyze(clang, analyze_args, language, output, files, verbose, htmldir, file, analysis_type) # compile(args) diff --git a/utils/scan-build b/utils/scan-build index 890f0145a5..c6647cd1b9 100755 --- a/utils/scan-build +++ b/utils/scan-build @@ -523,14 +523,17 @@ USAGE: $Prog [options] [build options] OPTIONS: + -a - The analysis to run. The default is 'checker-cfref'. + Valid options are: 'checker-cfref', 'fsyntax-only' + -o - Target directory for HTML report files. Subdirectories will be created as needed to represent separate "runs" of the analyzer. If this option is not specified, a directory is created in /tmp to store the reports. - + -h - Display this message. --help - + -k - Add a "keep on going" option to the specified build command. --keep-going This option currently supports make and xcodebuild. This is a convenience option; one can specify this @@ -565,6 +568,7 @@ ENDTEXT my $HtmlDir; # Parent directory to store HTML files. my $IgnoreErrors = 0; # Ignore build errors. my $ViewResults = 0; # View results when the build terminates. +my $Analysis = "checker-cfref"; if (!@ARGV) { DisplayHelp(); @@ -582,6 +586,22 @@ while (@ARGV) { exit 0; } + if ($arg eq "-a") { + shift @ARGV; + + if (!@ARGV) { + die "$Prog: '-a' option requires an analysis type.\n"; + } + + $Analysis = shift @ARGV; + + if (!($Analysis eq "checker-cfref" or $Analysis eq "fsyntax-only")) { + die "$Prog: Invalid argument '$Analysis' to -a.\n"; + } + + next; + } + if ($arg eq "-o") { shift @ARGV; @@ -667,6 +687,8 @@ if ($Verbose >= 3) { $ENV{'CCC_ANALYZER_LOG'} = 1; } +$ENV{'CCC_ANALYZER_ANALYSIS'} = $Analysis; + # Run the build. RunBuildCommand(\@ARGV, $IgnoreErrors);