forked from OSchip/llvm-project
[utils] Improvements to check_cfc.py to work better with some build systems.
Recognise options to output dependency files and don't perform checks. Report input file name when reporting a check failure so it is more obvious in large build logs. Differential Revision: http://reviews.llvm.org/D10183 llvm-svn: 238928
This commit is contained in:
parent
224b162280
commit
14c4dab603
|
@ -213,16 +213,18 @@ def set_input_file(args, input_file):
|
|||
|
||||
def is_normal_compile(args):
|
||||
"""Check if this is a normal compile which will output an object file rather
|
||||
than a preprocess or link."""
|
||||
than a preprocess or link. args is a list of command line arguments."""
|
||||
compile_step = '-c' in args
|
||||
# Bitcode cannot be disassembled in the same way
|
||||
bitcode = '-flto' in args or '-emit-llvm' in args
|
||||
# Version and help are queries of the compiler and override -c if specified
|
||||
query = '--version' in args or '--help' in args
|
||||
# Options to output dependency files for make
|
||||
dependency = '-M' in args or '-MM' in args
|
||||
# Check if the input is recognised as a source file (this may be too
|
||||
# strong a restriction)
|
||||
input_is_valid = bool(get_input_file(args))
|
||||
return compile_step and not bitcode and not query and input_is_valid
|
||||
return compile_step and not bitcode and not query and not dependency and input_is_valid
|
||||
|
||||
def run_step(command, my_env, error_on_failure):
|
||||
"""Runs a step of the compilation. Reports failure as exception."""
|
||||
|
@ -379,7 +381,7 @@ if __name__ == '__main__':
|
|||
checker.perform_check(arguments_a, my_env)
|
||||
except WrapperCheckException as e:
|
||||
# Check failure
|
||||
print(e.msg, file=sys.stderr)
|
||||
print("{} {}".format(get_input_file(arguments_a), e.msg), file=sys.stderr)
|
||||
|
||||
# Remove file to comply with build system expectations (no
|
||||
# output file if failed)
|
||||
|
|
|
@ -103,6 +103,16 @@ class TestCheckCFC(unittest.TestCase):
|
|||
check_cfc.is_normal_compile(['clang', '-c', 'test.cpp', '--version']))
|
||||
self.assertFalse(
|
||||
check_cfc.is_normal_compile(['clang', '-c', 'test.cpp', '--help']))
|
||||
# Outputting dependency files is not a normal compile
|
||||
self.assertFalse(
|
||||
check_cfc.is_normal_compile(['clang', '-c', '-M', 'test.cpp']))
|
||||
self.assertFalse(
|
||||
check_cfc.is_normal_compile(['clang', '-c', '-MM', 'test.cpp']))
|
||||
# Creating a dependency file as a side effect still outputs an object file
|
||||
self.assertTrue(
|
||||
check_cfc.is_normal_compile(['clang', '-c', '-MD', 'test.cpp']))
|
||||
self.assertTrue(
|
||||
check_cfc.is_normal_compile(['clang', '-c', '-MMD', 'test.cpp']))
|
||||
|
||||
def test_replace_output_file(self):
|
||||
self.assertEqual(check_cfc.replace_output_file(
|
||||
|
|
Loading…
Reference in New Issue