()
| 276 | |
| 277 | |
| 278 | def main(): |
| 279 | # TODO: add --hang option to detect code which impacts the analysis time |
| 280 | def show_syntax(): |
| 281 | print('Syntax:') |
| 282 | print(' reduce.py --exe <cppcheck executable> --exe_args <full command> --expected <expected text output> --file <source file> [--segfault]') |
| 283 | print('') |
| 284 | print("Example. source file = foo/bar.c") |
| 285 | print( |
| 286 | ' reduce.py --exe ./cppcheck --exe_args " --enable=style" --expected "Variable \'x\' is reassigned" --file foo/bar.c') |
| 287 | sys.exit(1) |
| 288 | |
| 289 | if len(sys.argv) == 1: |
| 290 | show_syntax() |
| 291 | parser = argparse.ArgumentParser() |
| 292 | parser.add_argument('-exe', '--exe', required=True, help="cppcheck executable") |
| 293 | parser.add_argument('-exe_args', '--exe_args', required=False, default="", help="cppcheck executable commands") |
| 294 | parser.add_argument('-expected', '--expected', required=True, help="expected text output") |
| 295 | parser.add_argument('-file', '--file', required=True, help="source file") |
| 296 | parser.add_argument('-segfault', '--segfault', required=False, action='store_true') |
| 297 | args = parser.parse_args() |
| 298 | |
| 299 | arg_file = args.file |
| 300 | arg_cmd = [args.exe] + args.exe_args.split() + [arg_file] |
| 301 | arg_expected = args.expected |
| 302 | arg_segfault = args.segfault |
| 303 | try: |
| 304 | reduce = Reduce(arg_cmd, arg_expected, arg_file, arg_segfault) |
| 305 | except RuntimeError as e: |
| 306 | print(e) |
| 307 | show_syntax() |
| 308 | |
| 309 | reduce.print_info() |
| 310 | |
| 311 | # reduce.. |
| 312 | print('Make sure error can be reproduced...') |
| 313 | t = time.time() |
| 314 | if not reduce.runtool(): |
| 315 | print("Cannot reproduce") |
| 316 | sys.exit(1) |
| 317 | elapsed_time = time.time() - t |
| 318 | reduce.set_elapsed_time(elapsed_time) |
| 319 | print('elapsed_time: {}'.format(elapsed_time)) |
| 320 | |
| 321 | with open(arg_file, 'rt') as f: |
| 322 | filedata = f.readlines() |
| 323 | |
| 324 | reduce.writeorigfile(filedata) |
| 325 | |
| 326 | while True: |
| 327 | filedata1 = list(filedata) |
| 328 | |
| 329 | print('remove preprocessor directives...') |
| 330 | reduce.removedirectives(filedata) |
| 331 | |
| 332 | print('remove blocks...') |
| 333 | filedata = reduce.removeblocks(filedata) |
| 334 | |
| 335 | print('remove comments...') |
no test coverage detected