diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2015-10-21 20:35:50 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2015-10-22 09:43:31 -0400 |
commit | 234210135f07cf29f8fbee687ef7bd8adcf566ef (patch) | |
tree | 4afdf30867b49fb00fca7ce589fff658c754479c | |
parent | 06316c9d1b83b1e28292b5a1fdd9c345b87763a1 (diff) | |
download | seabios-234210135f07cf29f8fbee687ef7bd8adcf566ef.zip seabios-234210135f07cf29f8fbee687ef7bd8adcf566ef.tar.gz seabios-234210135f07cf29f8fbee687ef7bd8adcf566ef.tar.bz2 |
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>
-rwxr-xr-x | scripts/buildversion.py | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/scripts/buildversion.py b/scripts/buildversion.py index c3a83b0..bceae63 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: |