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
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')
# 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
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)
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
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();
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;
$ENV{'CCC_ANALYZER_LOG'} = 1;
}
+$ENV{'CCC_ANALYZER_ANALYSIS'} = $Analysis;
+
# Run the build.
RunBuildCommand(\@ARGV, $IgnoreErrors);