diff options
| author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2016-04-19 23:09:11 +1200 | 
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-04-19 14:46:37 +0100 | 
| commit | 14ff58ad98a5afac08db77068d80f152d8875766 (patch) | |
| tree | c5a22af7acd877ac44b59a1400d6339bae27977d /scripts/lib/devtool | |
| parent | e003ef038819c10f351bb8268b377626c95bb077 (diff) | |
| download | openembedded-core-14ff58ad98a5afac08db77068d80f152d8875766.tar.gz openembedded-core-14ff58ad98a5afac08db77068d80f152d8875766.tar.bz2 openembedded-core-14ff58ad98a5afac08db77068d80f152d8875766.zip | |
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].
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/devtool')
| -rw-r--r-- | scripts/lib/devtool/sdk.py | 26 | 
1 files changed, 26 insertions, 0 deletions
| diff --git a/scripts/lib/devtool/sdk.py b/scripts/lib/devtool/sdk.py index a22841d789..46fd12bdb2 100644 --- a/scripts/lib/devtool/sdk.py +++ b/scripts/lib/devtool/sdk.py @@ -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: | 
