diff --git a/addons/cert.py b/addons/cert.py index cf98c8ef2..748cb8389 100755 --- a/addons/cert.py +++ b/addons/cert.py @@ -439,3 +439,5 @@ if __name__ == '__main__': if actual not in VERIFY_EXPECTED: print('Not expected: ' + actual) sys.exit(1) + + sys.exit(cppcheckdata.EXIT_CODE) diff --git a/addons/cppcheckdata.py b/addons/cppcheckdata.py index b9e14ef7c..736c60f36 100755 --- a/addons/cppcheckdata.py +++ b/addons/cppcheckdata.py @@ -13,6 +13,8 @@ import sys from xml.etree import ElementTree from fnmatch import fnmatch +EXIT_CODE = 0 + class Directive: """ Directive class. Contains information about each preprocessor directive in the source code. @@ -1102,3 +1104,5 @@ def reportError(location, severity, message, addon, errorId, extra=''): if len(extra) > 0: message += ' (' + extra + ')' sys.stderr.write('%s (%s) %s [%s-%s]\n' % (loc, severity, message, addon, errorId)) + global EXIT_CODE + EXIT_CODE = 1 diff --git a/addons/findcasts.py b/addons/findcasts.py index 958720607..5f7943d57 100755 --- a/addons/findcasts.py +++ b/addons/findcasts.py @@ -38,3 +38,5 @@ for arg in sys.argv[1:]: continue cppcheckdata.reportError(token, 'information', 'found a cast', 'findcasts', 'cast') + +sys.exit(cppcheckdata.EXIT_CODE) diff --git a/addons/misc.py b/addons/misc.py index 3a0205e2c..2c8c63c28 100644 --- a/addons/misc.py +++ b/addons/misc.py @@ -163,3 +163,5 @@ for arg in sys.argv[1:]: if actual not in VERIFY_EXPECTED: print('Not expected: ' + actual) sys.exit(1) + +sys.exit(cppcheckdata.EXIT_CODE) diff --git a/addons/misra.py b/addons/misra.py index 498756ccb..a220a27db 100755 --- a/addons/misra.py +++ b/addons/misra.py @@ -3126,7 +3126,6 @@ def main(): if args.severity: checker.setSeverity(args.severity) - exitCode = 0 for item in args.dumpfile: checker.parseDump(item) @@ -3134,6 +3133,7 @@ def main(): verify_expected = checker.get_verify_expected() verify_actual = checker.get_verify_actual() + exitCode = 0 for expected in verify_expected: if expected not in verify_actual: print('Expected but not seen: ' + expected) @@ -3150,41 +3150,38 @@ def main(): if exitCode != 0: sys.exit(exitCode) - # Under normal operation exit with a non-zero exit code - # if there were any violations. - if not settings.verify: - number_of_violations = len(checker.get_violations()) - if number_of_violations > 0: - exitCode = 1 + if settings.verify: + sys.exit(exitCode) - if settings.show_summary: - print("\nMISRA rules violations found:\n\t%s\n" % ( - "\n\t".join(["%s: %d" % (viol, len(checker.get_violations(viol))) for viol in - checker.get_violation_types()]))) + number_of_violations = len(checker.get_violations()) + if number_of_violations > 0: + if settings.show_summary: + print("\nMISRA rules violations found:\n\t%s\n" % ( + "\n\t".join(["%s: %d" % (viol, len(checker.get_violations(viol))) for viol in + checker.get_violation_types()]))) - rules_violated = {} - for severity, ids in checker.get_violations(): - for misra_id in ids: - rules_violated[misra_id] = rules_violated.get(misra_id, 0) + 1 - print("MISRA rules violated:") - convert = lambda text: int(text) if text.isdigit() else text - misra_sort = lambda key: [convert(c) for c in re.split(r'[\.-]([0-9]*)', key)] - for misra_id in sorted(rules_violated.keys(), key=misra_sort): - res = re.match(r'misra-c2012-([0-9]+)\\.([0-9]+)', misra_id) - if res is None: - num = 0 - else: - num = int(res.group(1)) * 100 + int(res.group(2)) - severity = '-' - if num in checker.ruleTexts: - severity = checker.ruleTexts[num].cppcheck_severity - print("\t%15s (%s): %d" % (misra_id, severity, rules_violated[misra_id])) + rules_violated = {} + for severity, ids in checker.get_violations(): + for misra_id in ids: + rules_violated[misra_id] = rules_violated.get(misra_id, 0) + 1 + print("MISRA rules violated:") + convert = lambda text: int(text) if text.isdigit() else text + misra_sort = lambda key: [convert(c) for c in re.split(r'[\.-]([0-9]*)', key)] + for misra_id in sorted(rules_violated.keys(), key=misra_sort): + res = re.match(r'misra-c2012-([0-9]+)\\.([0-9]+)', misra_id) + if res is None: + num = 0 + else: + num = int(res.group(1)) * 100 + int(res.group(2)) + severity = '-' + if num in checker.ruleTexts: + severity = checker.ruleTexts[num].cppcheck_severity + print("\t%15s (%s): %d" % (misra_id, severity, rules_violated[misra_id])) if args.show_suppressed_rules: checker.showSuppressedRules() - sys.exit(exitCode) - if __name__ == '__main__': main() + sys.exit(cppcheckdata.EXIT_CODE) diff --git a/addons/naming.py b/addons/naming.py index 8da36d7cd..faaf5327e 100755 --- a/addons/naming.py +++ b/addons/naming.py @@ -87,3 +87,5 @@ for arg in sys.argv[1:]: if not res: reportError( scope.bodyStart, 'style', 'Function ' + scope.className + ' violates naming convention', 'functionName') + +sys.exit(cppcheckdata.EXIT_CODE) diff --git a/addons/namingng.py b/addons/namingng.py index 9d78c4dab..84f5ed31b 100755 --- a/addons/namingng.py +++ b/addons/namingng.py @@ -249,4 +249,5 @@ if __name__ == "__main__": if len(errors): print('Found errors: {}'.format(len(errors))) sys.exit(1) + sys.exit(0) diff --git a/addons/threadsafety.py b/addons/threadsafety.py index 6c4ec7e90..3faacb0a3 100755 --- a/addons/threadsafety.py +++ b/addons/threadsafety.py @@ -34,3 +34,5 @@ for arg in sys.argv[1:]: for cfg in data.iterconfigurations(): print('Checking %s, config %s...' % (arg, cfg.name)) checkstatic(cfg) + + sys.exit(cppcheckdata.EXIT_CODE) diff --git a/addons/y2038.py b/addons/y2038.py index 2fffd07a2..9b8e94aef 100755 --- a/addons/y2038.py +++ b/addons/y2038.py @@ -243,17 +243,9 @@ if __name__ == '__main__': sys.exit(0) for dumpfile in args.dumpfile: - if not os.path.isfile(dumpfile): - print("Error: File not found: %s" % dumpfile) - sys.exit(127) - if not os.access(dumpfile, os.R_OK): - print("Error: Permission denied: %s" % dumpfile) - sys.exit(13) if not args.quiet: print('Checking ' + dumpfile + '...') - y2038safe = check_y2038_safe(dumpfile, quiet) - if not y2038safe and exit_code == 0: - exit_code = 1 + check_y2038_safe(dumpfile, quiet) - sys.exit(exit_code) + sys.exit(cppcheckdata.EXIT_CODE)