[cfe-commits] r51545 - /cfe/trunk/utils/ccc-analyzer
Ted Kremenek
kremenek at apple.com
Sat May 24 08:58:55 PDT 2008
Author: kremenek
Date: Sat May 24 10:58:54 2008
New Revision: 51545
URL: http://llvm.org/viewvc/llvm-project?rev=51545&view=rev
Log:
Cleanup indentation and remove some dead code.
Analyze files not compiled using "-c". This fixes:
<rdar://problem/5961638> invoke checker when gcc is not called with "-c"
Modified:
cfe/trunk/utils/ccc-analyzer
Modified: cfe/trunk/utils/ccc-analyzer
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/ccc-analyzer?rev=51545&r1=51544&r2=51545&view=diff
==============================================================================
--- cfe/trunk/utils/ccc-analyzer (original)
+++ cfe/trunk/utils/ccc-analyzer Sat May 24 10:58:54 2008
@@ -18,85 +18,73 @@
import os
def error(message):
- print >> sys.stderr, 'ccc: ' + message
- sys.exit(1)
+ print >> sys.stderr, 'ccc: ' + message
+ sys.exit(1)
def quote(arg):
- if '"' in arg:
- return repr(arg)
- return arg
+ if '"' in arg:
+ return repr(arg)
+ return arg
def run(args):
- # We MUST print to stderr. Some clients use the stdout output of
- # gcc for various purposes.
- #print >> sys.stderr, ' '.join(map(quote, args))
- #print >> sys.stderr
- code = subprocess.call(args)
- if code > 255:
- code = 1
- if code:
- sys.exit(code)
+ code = subprocess.call(args)
+ if code > 255:
+ code = 1
+ if code:
+ sys.exit(code)
def compile(args):
- # We MUST print to stderr. Some clients use the stdout output of
- # gcc for various purposes.
- #print >> sys.stderr, '\n'
command = 'gcc'.split()
run(command + args)
def remove_pch_extension(path):
- i = path.rfind('.gch')
- if i < 0:
- return path
- return path[:i]
+ i = path.rfind('.gch')
+ if i < 0:
+ return path
+ return path[:i]
def analyze(clang, args,language,output,files,verbose,htmldir,file,analysis_type):
- if language.find("c++") > 0:
- return
+ if language.find("c++") > 0:
+ return
+
+ print_args = []
- print_args = []
-
- if verbose:
- # We MUST print to stderr. Some clients use the stdout output of
- # gcc for various purposes.
- print >> sys.stderr, ' '.join(['\n[LOCATION]:', os.getcwd(), '\n' ])
- i = 0
- while i < len(args):
- print_args.append(''.join([ '\'', args[i], '\'' ]))
- i += 1
+ if verbose:
+ # We MUST print to stderr. Some clients use the stdout output of
+ # gcc for various purposes.
+ print >> sys.stderr, ' '.join(['\n[LOCATION]:', os.getcwd(), '\n' ])
+ i = 0
+ while i < len(args):
+ print_args.append(''.join([ '\'', args[i], '\'' ]))
+ i += 1
+ RunAnalyzer = 0;
- RunAnalyzer = 0;
+ if language.find("header") > 0:
+ target = remove_pch_extension(output)
+ command = 'cp'.split()
+ args = command + files + target.split()
+ else:
+ 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'
+
+ if RunAnalyzer and htmldir is not None:
+ args.append('-o')
+ print_args.append('-o')
+ args.append(htmldir)
+ print_args.append(htmldir)
+
+ if verbose == 1:
+ # We MUST print to stderr. Some clients use the stdout output of
+ # gcc for various purposes.
+ print >> sys.stderr, ' '.join(command+print_args)
+ print >> sys.stderr, '\n'
- if language.find("header") > 0:
- target = remove_pch_extension(output)
- command = 'cp'.split()
- args = command + files + target.split()
- else:
- 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'
-
- if RunAnalyzer and htmldir is not None:
- args.append('-o')
- print_args.append('-o')
- args.append(htmldir)
- print_args.append(htmldir)
-
- if verbose:
- # We MUST print to stderr. Some clients use the stdout output of
- # gcc for various purposes.
- print >> sys.stderr, ' '.join(command+print_args)
- print >> sys.stderr, '\n'
-
- subprocess.call(args)
-
-def link(args):
- command = 'gcc'.split()
- run(command + args)
+ subprocess.call(args)
def extension(path):
return path.split(".")[-1]
@@ -128,171 +116,162 @@
return "unknown"
def main(args):
- old_args = args
- action = 'link'
- output = ''
- compile_opts = [ ]
- link_opts = [ ]
- files = []
- save_temps = 0
- language = ''
-
- verbose = 0
- clang = "clang"
-
- # 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
+ old_args = args
+ action = 'link'
+ output = ''
+ compile_opts = [ ]
+ link_opts = [ ]
+ files = []
+ save_temps = 0
+ language = ''
+
+ verbose = 0
+ clang = "clang"
+
+ # 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
- # Get the HTML output directory.
- htmldir = None
+ if os.environ.get('CCC_ANALYZER_LOG') is not None:
+ verbose = 2
- if analysis_type == "-checker-cfref":
- htmldir = os.environ.get('CCC_ANALYZER_HTML')
+ # 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 = None
+
+ if analysis_type == "-checker-cfref":
+ htmldir = os.environ.get('CCC_ANALYZER_HTML')
- # Process the arguments.
- i = 0
- while i < len(args):
- arg = args[i]
+ # Process the arguments.
+ i = 0
+ while i < len(args):
+ arg = args[i]
+
+ # Modes ccc supports
+ if arg == '-E':
+ action = 'preprocess'
+ if arg == '-c':
+ action = 'compile'
+ if arg.startswith('-print-prog-name'):
+ action = 'print-prog-name'
+ if arg == '-save-temps':
+ save_temps = 1
+
+ # Options with no arguments that should pass through
+ if arg in ['-v']:
+ compile_opts.append(arg)
+ link_opts.append(arg)
+
+ # Options with one argument that should be ignored
+ if arg in ['--param', '-u']:
+ i += 1
- # Modes ccc supports
- if arg == '-E':
- action = 'preprocess'
- if arg == '-c':
- action = 'compile'
- if arg.startswith('-print-prog-name'):
- action = 'print-prog-name'
- if arg == '-save-temps':
- save_temps = 1
-
- # Options with no arguments that should pass through
- if arg in ['-v']:
- compile_opts.append(arg)
- link_opts.append(arg)
-
- # Options with one argument that should be ignored
- if arg in ['--param', '-u']:
+ # Prefix matches for the compile mode
+ if arg[:2] in ['-D', '-I', '-U', '-F' ]:
+ if not arg[2:]:
+ arg += args[i+1]
i += 1
+ compile_opts.append(arg)
- # Prefix matches for the compile mode
- if arg[:2] in ['-D', '-I', '-U', '-F' ]:
- if not arg[2:]:
- arg += args[i+1]
- i += 1
- compile_opts.append(arg)
-
- if arg[:5] in ['-std=']:
- compile_opts.append(arg)
-
- # Options with one argument that should pass through to compiler
- if arg in [ '-include', '-idirafter', '-iprefix',
- '-iquote', '-isystem', '-iwithprefix',
- '-iwithprefixbefore']:
- compile_opts.append(arg)
- compile_opts.append(args[i+1])
- i += 1
-
- # Options with no argument that should pass through to compiler
- if arg in [ '-nostdinc', '-fobjc-gc-only', '-fobjc-gc' ]:
- compile_opts.append(arg)
-
- # Options with one argument that should pass through to linker
- if arg == '-framework':
- link_opts.append(arg)
- link_opts.append(args[i+1])
- i += 1
+ if arg[:5] in ['-std=']:
+ compile_opts.append(arg)
- # Options with one argument that should pass through to both
- if arg in ['-isysroot', '-arch']:
- compile_opts.append(arg)
- compile_opts.append(args[i+1])
- link_opts.append(arg)
- link_opts.append(args[i+1])
- i += 1
+ # Options with one argument that should pass through to compiler
+ if arg in [ '-include', '-idirafter', '-iprefix',
+ '-iquote', '-isystem', '-iwithprefix',
+ '-iwithprefixbefore']:
+ compile_opts.append(arg)
+ compile_opts.append(args[i+1])
+ i += 1
+
+ # Options with no argument that should pass through to compiler
+ if arg in [ '-nostdinc', '-fobjc-gc-only', '-fobjc-gc' ]:
+ compile_opts.append(arg)
+
+ # Options with one argument that should pass through to linker
+ if arg == '-framework':
+ link_opts.append(arg)
+ link_opts.append(args[i+1])
+ i += 1
- # Prefix matches for the link mode
- if arg[:2] in ['-l', '-L', '-O', '-F']:
- if arg == '-O': arg = '-O1'
- if arg == '-Os': arg = '-O2'
- link_opts.append(arg)
-
- # Input files
- if arg == '-filelist':
- f = open(args[i+1])
- for line in f:
- files.append(line.strip())
- f.close()
- i += 1
- if arg == '-x':
- language = args[i+1]
- i += 1
- if arg[0] != '-':
- files.append(arg)
+ # Options with one argument that should pass through to both
+ if arg in ['-isysroot', '-arch']:
+ compile_opts.append(arg)
+ compile_opts.append(args[i+1])
+ link_opts.append(arg)
+ link_opts.append(args[i+1])
+ i += 1
- # Output file
- if arg == '-o':
- output = args[i+1]
- i += 1
+ # Prefix matches for the link mode
+ if arg[:2] in ['-l', '-L', '-O', '-F']:
+ if arg == '-O': arg = '-O1'
+ if arg == '-Os': arg = '-O2'
+ link_opts.append(arg)
+
+ # Input files
+ if arg == '-filelist':
+ f = open(args[i+1])
+ for line in f:
+ files.append(line.strip())
+ f.close()
+ i += 1
+ if arg == '-x':
+ language = args[i+1]
+ i += 1
+ if arg[0] != '-':
+ files.append(arg)
+ # Output file
+ if arg == '-o':
+ output = args[i+1]
i += 1
- if action == 'print-prog-name':
- # assume we can handle everything
- print sys.argv[0]
- return
-
- if not files:
- error('no input files')
-
- # if action == 'preprocess' or save_temps:
- # compile(args)
-
- if action == 'compile' or save_temps:
- for i, file in enumerate(files):
- if not language:
- language = inferlanguage(extension(file))
- if language == "skip":
- continue
-
- if save_temps and action != "compile":
- # Need a temporary output file
- coutput = changeextension(file, "o");
- files[i] = coutput
- elif not output:
- coutput = changeextension(file, "o")
- else:
- coutput = output
- analyze_args = [ file ]
- 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, analysis_type)
-# compile(args)
-
-
-# if action == 'link':
-# link(args)
-# # analyze(link_opts)
+ i += 1
+
+ if action == 'print-prog-name':
+ # assume we can handle everything
+ print sys.argv[0]
+ return
+
+ if not files:
+ error('no input files')
+
+ if action == 'compile' or save_temps or action == 'link':
+ for i, file in enumerate(files):
+ if not language:
+ language = inferlanguage(extension(file))
+ if language == "skip":
+ continue
+
+ if save_temps and action != "compile":
+ # Need a temporary output file
+ coutput = changeextension(file, "o");
+ files[i] = coutput
+ elif not output:
+ coutput = changeextension(file, "o")
+ else:
+ coutput = output
+ analyze_args = [ file ]
+ 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, analysis_type)
if __name__ == '__main__':
main(sys.argv[1:])
More information about the cfe-commits
mailing list