Skip to contentSkip to conversation

Fix for eSDK update interaction with uninative checksum changes

PATCH New Paul Eggleton 1 participant 2 messages Apr 19, 2016

lore
Share & tools
lore
#0 lore raw

cover Fix for eSDK update interaction with uninative checksum changes

The following changes since commit e003ef038819c10f351bb8268b377626c95bb077:

toasterconf.json: Update for krogoth release (2016-04-18 16:48:58 +0100)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib paule/extsdk-uninative-update
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/extsdk-uninative-update

Paul Eggleton (1):
devtool: sdk-update: fix handling of UNINATIVE_CHECKSUM changes

 scripts/lib/devtool/sdk.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
Signature · 1 line
2.5.5
#1 lore raw

PATCH 1/1 devtool: sdk-update: fix handling of UNINATIVE_CHECKSUM changes

If UNINATIVE_CHECKSUM changes over an SDK update, bitbake within the extensible SDK will be broken because it will see that the matching uninative tarball doesn't exist and if there is a default value of UNINATIVE_URL it will attempt to download the file and will then fail because the checksums don't match up; alternatively if no UNINATIVE_URL is set then it'll also fail with an error about misconfiguration. To fix this, add some logic to devtool sdk-update to download the matching uninative tarball(s) for the checksum(s) in the newly fetched SDK configuration.

Fixes [YOCTO #9301].

---
 scripts/lib/devtool/sdk.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
scripts/lib/devtool/sdk.py +26 -0
index a22841d..46fd12b 100644
@@ -23,6 +23,7 @@ import shutil
 import errno
 import sys
 import tempfile
+import re
 from devtool import exec_build_env_command, setup_tinfoil, parse_recipe, DevtoolError
 
 logger = logging.getLogger('devtool')
@@ -209,6 +210,28 @@ def sdk_update(args, config, basepath, workspace):
                     logger.error("Updating %s failed" % changedfile)
                     return ret
 
+            # Check if UNINATIVE_CHECKSUM changed
+            uninative = False
+            if 'conf/local.conf' in changedfiles:
+                def read_uninative_checksums(fn):
+                    chksumitems = []
+                    with open(fn, 'r') as f:
+                        for line in f:
+                            if line.startswith('UNINATIVE_CHECKSUM'):
+                                splitline = re.split(r'[\[\]"\']', line)
+                                if len(splitline) > 3:
+                                    chksumitems.append((splitline[1], splitline[3]))
+                    return chksumitems
+
+                oldsums = read_uninative_checksums(os.path.join(basepath, 'conf/local.conf'))
+                newsums = read_uninative_checksums(os.path.join(tmpsdk_dir, 'conf/local.conf'))
+                if oldsums != newsums:
+                    uninative = True
+                    for buildarch, chksum in newsums:
+                        uninative_file = os.path.join('downloads', 'uninative', chksum, '%s-nativesdk-libc.tar.bz2' % buildarch)
+                        mkdir(os.path.join(tmpsdk_dir, os.path.dirname(uninative_file)))
+                        ret = subprocess.call("wget -q -O %s %s/%s" % (uninative_file, updateserver, uninative_file), shell=True, cwd=tmpsdk_dir)
+
             # Ok, all is well at this point - move everything over
             tmplayers_dir = os.path.join(tmpsdk_dir, 'layers')
             if os.path.exists(tmplayers_dir):
@@ -220,6 +243,9 @@ def sdk_update(args, config, basepath, workspace):
                 shutil.move(os.path.join(tmpsdk_dir, changedfile), destfile)
             os.remove(os.path.join(conf_dir, 'sdk-conf-manifest'))
             shutil.move(tmpmanifest, conf_dir)
+            if uninative:
+                shutil.rmtree(os.path.join(basepath, 'downloads', 'uninative'))
+                shutil.move(os.path.join(tmpsdk_dir, 'downloads', 'uninative'), os.path.join(basepath, 'downloads'))
 
             if not sstate_mirrors:
                 with open(os.path.join(conf_dir, 'site.conf'), 'a') as f:
Signature · 1 line
2.5.5