[U-Boot] [PATCH] buildman: crash when fetching i386 toolchain from kernel.org

Currently buildman crashes when fetching i386 toolchain from kernel.org.
solution: - first check, if the directory in which buildman will search exists - second, pass a string not a list of strings when instantiating a Toolchain object
Signed-off-by: Heiko Schocher hs@denx.de
---
Tried to fetch toolchain for i386 with buildman, and get this error:
$ ./tools/buildman/buildman sandbox --fetch-arch i386 Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ Downloading: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/x86_64-gcc... Unpacking to: /home/hs/.buildman-toolchains Testing - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/.' - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin' - found '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin/i386-linux-gcc' - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/usr/bin' Traceback (most recent call last): File "./tools/buildman/buildman", line 64, in <module> ret_code = control.DoBuildman(options, args) File "/home/hs/zug/u-boot/tools/buildman/control.py", line 132, in DoBuildman ret = toolchains.FetchAndInstall(arch) File "/home/hs/zug/u-boot/tools/buildman/toolchain.py", line 472, in FetchAndInstall toolchain = Toolchain(compiler_fname, True, True) File "/home/hs/zug/u-boot/tools/buildman/toolchain.py", line 62, in __init__ self.path = os.path.dirname(fname) File "/usr/lib64/python2.7/posixpath.py", line 129, in dirname i = p.rfind('/') + 1 AttributeError: 'list' object has no attribute 'rfind' $
with this patch I see:
$ ./tools/buildman/buildman sandbox --fetch-arch i386 Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ Downloading: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/x86_64-gcc... Unpacking to: /home/hs/.buildman-toolchains Testing - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/.' - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin' - found '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin/i386-linux-gcc' Tool chain test: OK $
tools/buildman/toolchain.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/tools/buildman/toolchain.py b/tools/buildman/toolchain.py index 537797a..93811ea 100644 --- a/tools/buildman/toolchain.py +++ b/tools/buildman/toolchain.py @@ -200,10 +200,11 @@ class Toolchains: fnames = [] for subdir in ['.', 'bin', 'usr/bin']: dirname = os.path.join(path, subdir) - if verbose: print " - looking in '%s'" % dirname - for fname in glob.glob(dirname + '/*gcc'): - if verbose: print " - found '%s'" % fname - fnames.append(fname) + if os.path.exists(dirname): + if verbose: print " - looking in '%s'" % dirname + for fname in glob.glob(dirname + '/*gcc'): + if verbose: print " - found '%s'" % fname + fnames.append(fname) return fnames
@@ -469,7 +470,7 @@ class Toolchains: if not compiler_fname: print 'Could not locate C compiler - fetch failed.' return 1 - toolchain = Toolchain(compiler_fname, True, True) + toolchain = Toolchain(compiler_fname[0], True, True)
# Make sure that it will be found by buildman if not self.TestSettingsHasPath(dirpath):

Hi Heiko,
On 4 March 2015 at 02:19, Heiko Schocher hs@denx.de wrote:
Currently buildman crashes when fetching i386 toolchain from kernel.org.
solution:
- first check, if the directory in which buildman will search exists
- second, pass a string not a list of strings when instantiating a Toolchain object
Signed-off-by: Heiko Schocher hs@denx.de
Yes this was broken by a recent change - please see here:
http://patchwork.ozlabs.org/patch/445496/
Tried to fetch toolchain for i386 with buildman, and get this error:
$ ./tools/buildman/buildman sandbox --fetch-arch i386 Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ Downloading: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/x86_64-gcc... Unpacking to: /home/hs/.buildman-toolchains Testing - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/.' - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin' - found '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin/i386-linux-gcc' - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/usr/bin' Traceback (most recent call last): File "./tools/buildman/buildman", line 64, in <module> ret_code = control.DoBuildman(options, args) File "/home/hs/zug/u-boot/tools/buildman/control.py", line 132, in DoBuildman ret = toolchains.FetchAndInstall(arch) File "/home/hs/zug/u-boot/tools/buildman/toolchain.py", line 472, in FetchAndInstall toolchain = Toolchain(compiler_fname, True, True) File "/home/hs/zug/u-boot/tools/buildman/toolchain.py", line 62, in __init__ self.path = os.path.dirname(fname) File "/usr/lib64/python2.7/posixpath.py", line 129, in dirname i = p.rfind('/') + 1 AttributeError: 'list' object has no attribute 'rfind' $
with this patch I see:
$ ./tools/buildman/buildman sandbox --fetch-arch i386 Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ Downloading: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/x86_64-gcc... Unpacking to: /home/hs/.buildman-toolchains Testing - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/.' - looking in '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin' - found '/home/hs/.buildman-toolchains/gcc-4.6.3-nolibc/i386-linux/bin/i386-linux-gcc' Tool chain test: OK $
tools/buildman/toolchain.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/tools/buildman/toolchain.py b/tools/buildman/toolchain.py index 537797a..93811ea 100644 --- a/tools/buildman/toolchain.py +++ b/tools/buildman/toolchain.py @@ -200,10 +200,11 @@ class Toolchains: fnames = [] for subdir in ['.', 'bin', 'usr/bin']: dirname = os.path.join(path, subdir)
if verbose: print " - looking in '%s'" % dirname
for fname in glob.glob(dirname + '/*gcc'):
if verbose: print " - found '%s'" % fname
fnames.append(fname)
if os.path.exists(dirname):
if verbose: print " - looking in '%s'" % dirname
for fname in glob.glob(dirname + '/*gcc'):
if verbose: print " - found '%s'" % fname
fnames.append(fname) return fnames
@@ -469,7 +470,7 @@ class Toolchains: if not compiler_fname: print 'Could not locate C compiler - fetch failed.' return 1
toolchain = Toolchain(compiler_fname, True, True)
toolchain = Toolchain(compiler_fname[0], True, True) # Make sure that it will be found by buildman if not self.TestSettingsHasPath(dirpath):
-- 2.1.0
Regards, Simon
participants (2)
-
Heiko Schocher
-
Simon Glass