diff options
| author | Siluxsept <ronny.horn.rh@gmail.com> | 2022-12-22 13:26:07 +0100 |
|---|---|---|
| committer | Siluxsept <ronny.horn.rh@gmail.com> | 2022-12-22 13:26:07 +0100 |
| commit | cbda810b6483e9c4209e5551214a4508ec4f079a (patch) | |
| tree | 9819b9d20217cb4838a40380d6ea74320fc6abc2 /scripts/gcc-wrapper.py | |
| parent | 45f978324f8edb84c68855acabd68a998e808f04 (diff) | |
redbull: import kernel source from correct branch..
Change-Id: I824424b9b3c4120d6c91dff6ac57ac09d3f63994
Diffstat (limited to 'scripts/gcc-wrapper.py')
| -rwxr-xr-x | scripts/gcc-wrapper.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/scripts/gcc-wrapper.py b/scripts/gcc-wrapper.py new file mode 100755 index 000000000000..40dc9fb9335e --- /dev/null +++ b/scripts/gcc-wrapper.py @@ -0,0 +1,75 @@ +#! /usr/bin/env python2 +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (c) 2011-2017, 2018 The Linux Foundation. All rights reserved. + +# -*- coding: utf-8 -*- + +# Invoke gcc, looking for warnings, and causing a failure if there are +# non-whitelisted warnings. + +import errno +import re +import os +import sys +import subprocess + +# Note that gcc uses unicode, which may depend on the locale. TODO: +# force LANG to be set to en_US.UTF-8 to get consistent warnings. + +allowed_warnings = set([ + "umid.c:138", + "umid.c:213", + "umid.c:388", + ]) + +# Capture the name of the object file, can find it. +ofile = None + +warning_re = re.compile(r'''(.*/|)([^/]+\.[a-z]+:\d+):(\d+:)? warning:''') +def interpret_warning(line): + """Decode the message from gcc. The messages we care about have a filename, and a warning""" + line = line.rstrip('\n') + m = warning_re.match(line) + if m and m.group(2) not in allowed_warnings: + print "error, forbidden warning:", m.group(2) + + # If there is a warning, remove any object if it exists. + if ofile: + try: + os.remove(ofile) + except OSError: + pass + sys.exit(1) + +def run_gcc(): + args = sys.argv[1:] + # Look for -o + try: + i = args.index('-o') + global ofile + ofile = args[i+1] + except (ValueError, IndexError): + pass + + compiler = sys.argv[0] + + try: + proc = subprocess.Popen(args, stderr=subprocess.PIPE) + for line in proc.stderr: + print line, + interpret_warning(line) + + result = proc.wait() + except OSError as e: + result = e.errno + if result == errno.ENOENT: + print args[0] + ':',e.strerror + print 'Is your PATH set correctly?' + else: + print ' '.join(args), str(e) + + return result + +if __name__ == '__main__': + status = run_gcc() + sys.exit(status) |
