aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/buildversion.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2015-10-21 20:35:50 -0400
committerKevin O'Connor <kevin@koconnor.net>2015-10-22 09:43:31 -0400
commit234210135f07cf29f8fbee687ef7bd8adcf566ef (patch)
tree4afdf30867b49fb00fca7ce589fff658c754479c /scripts/buildversion.py
parent06316c9d1b83b1e28292b5a1fdd9c345b87763a1 (diff)
downloadseabios-234210135f07cf29f8fbee687ef7bd8adcf566ef.tar.gz
build: Be more permissive in buildversion.py tool version scan
There is some variation in version strings between various tool chain builds. Make the version tool scan more permissive to attempt to handle these variations. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'scripts/buildversion.py')
-rwxr-xr-xscripts/buildversion.py48
1 files changed, 23 insertions, 25 deletions
diff --git a/scripts/buildversion.py b/scripts/buildversion.py
index c3a83b01..bceae63d 100755
--- a/scripts/buildversion.py
+++ b/scripts/buildversion.py
@@ -4,7 +4,7 @@
# Copyright (C) 2015 Kevin O'Connor <kevin@koconnor.net>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
-import sys, os, subprocess, time, socket, optparse, re
+import sys, os, subprocess, time, socket, optparse
VERSION_FORMAT = """
/* DO NOT EDIT! This is an autogenerated file. See scripts/buildversion.py. */
@@ -42,39 +42,37 @@ def write_version(outfile, version, toolstr):
f.write(VERSION_FORMAT % (version, toolstr))
f.close()
-re_gcc = re.compile(r'^(?P<prog>.*) \(GCC\) (?P<version>.*)$')
-re_binutils = re.compile(r'^GNU (?P<prog>.*) version (?P<version>.*)$')
-
# Run "tool --version" for each specified tool and extract versions
def tool_versions(tools):
tools = [t.strip() for t in tools.split(';')]
- gcc = binutils = ""
+ versions = ['', '']
success = 0
for tool in tools:
+ # Extract first line from "tool --version" output
try:
ver = subprocess.check_output([tool, '--version']).decode()
except:
continue
- ver = ver.split('\n')[0]
- m = re_gcc.match(ver)
- if m:
- ver = m.group('version')
- if gcc and gcc != ver:
- gcc = "mixed"
- continue
- gcc = ver
- success += 1
+ verstr = ver.split('\n')[0]
+ # Check if this tool looks like a binutils program
+ isbinutils = 0
+ if verstr.startswith('GNU '):
+ isbinutils = 1
+ verstr = verstr[4:]
+ # Extract version information and exclude program name
+ if ' ' not in verstr:
+ continue
+ prog, ver = verstr.split(' ', 1)
+ if not prog or not ver:
+ continue
+ # Check for any version conflicts
+ if versions[isbinutils] and versions[isbinutils] != ver:
+ vers[isbinutils] = "mixed"
continue
- m = re_binutils.match(ver)
- if m:
- ver = m.group('version')
- if binutils and binutils != ver:
- binutils = "mixed"
- continue
- binutils = ver
- success += 1
- cleanbuild = binutils and gcc and success == len(tools)
- return cleanbuild, "gcc: %s binutils: %s" % (gcc, binutils)
+ versions[isbinutils] = ver
+ success += 1
+ cleanbuild = versions[0] and versions[1] and success == len(tools)
+ return cleanbuild, "gcc: %s binutils: %s" % (versions[0], versions[1])
def main():
usage = "%prog [options] <outputheader.h>"
@@ -82,7 +80,7 @@ def main():
opts.add_option("-e", "--extra", dest="extra", default="",
help="extra version string to append to version")
opts.add_option("-t", "--tools", dest="tools", default="",
- help="list of build programs to extra version from")
+ help="list of build programs to extract version from")
options, args = opts.parse_args()
if len(args) != 1: