[SeaBIOS] [PATCH 0/3] Don't allow version override; use reproducible by default

Matt DeVillier matt.devillier at gmail.com
Fri Oct 23 00:21:49 CEST 2015


On 10/21/2015 7:41:36 PM, "Kevin O'Connor" <kevin at koconnor.net> wrote:

>On Wed, Oct 21, 2015 at 10:41:20PM +0000, Matt DeVillier wrote:
>>  Kevin,
>>
>>  what toolchain is needed to generate a clean build / without
>>  hostname/datestamp in the version string?  Can coreboots toolchain be 
>>used?
>>  I'm using Ubuntu 15.04's default apparently (I'd have to check 
>>versions),
>>  which results in cleanbuild = false.
>
>Looks like there are greater differences in the various version
>strings than I was aware of.  I think the patch below should fix it.
>
>Thanks,
>-Kevin
Kevin,

this patch, along with the one you posted on IRC just prior, both 
produce a clean version string on my Ubuntu-based build machine

thanks,
Matt

>
>
>commit f1356349b8c7b631b5c815d5d69f780fc733bcf6
>Author: Kevin O'Connor <kevin at koconnor.net>
>Date:   Wed Oct 21 20:35:50 2015 -0400
>
>     build: Be more permissive in buildversion.py 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 at koconnor.net>
>
>diff --git a/scripts/buildversion.py b/scripts/buildversion.py
>index c3a83b0..da66151 100755
>--- a/scripts/buildversion.py
>+++ b/scripts/buildversion.py
>@@ -4,7 +4,7 @@
>  # Copyright (C) 2015 Kevin O'Connor <kevin at 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,33 @@ 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:
>          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]
>+        isbinutils = 0
>+        if verstr.startswith('GNU '):
>+            isbinutils = 1
>+            verstr = verstr[4:]
>+        if ' ' not in verstr:
>+            continue
>+        prog, ver = verstr.split(' ', 1)
>+        if not prog or not ver:
>+            continue
>+        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>"




More information about the SeaBIOS mailing list