From d5d4869634e5db8bde334e23f786ccb28a53972f Mon Sep 17 00:00:00 2001 From: Joshua Lock Date: Mon, 5 Sep 2016 21:32:57 +0100 Subject: runqemu: better handle running on a host with different paths If the STAGING_*_NATIVE directories from the config file don't exist and we're in a sourced OE build directory try to extract the paths from `bitbake -e` (From OE-Core rev: 9326af1c20636320c70caecebd47aedafb3f2d25) Signed-off-by: Joshua Lock Signed-off-by: Richard Purdie --- scripts/runqemu | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/scripts/runqemu b/scripts/runqemu index 5b719d5ac7..2830c15d52 100755 --- a/scripts/runqemu +++ b/scripts/runqemu @@ -558,6 +558,22 @@ class BaseConfig(object): logger.info('Setting DEPLOY_DIR_IMAGE to folder containing %s (%s)' % (self.qemuboot, imgdir)) self.set('DEPLOY_DIR_IMAGE', imgdir) + # If the STAGING_*_NATIVE directories from the config file don't exist + # and we're in a sourced OE build directory try to extract the paths + # from `bitbake -e` + havenative = os.path.exists(self.get('STAGING_DIR_NATIVE')) and \ + os.path.exists(self.get('STAGING_BINDIR_NATIVE')) + + if not havenative: + if not self.bitbake_e: + self.load_bitbake_env() + native_vars = ['STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE'] + for nv in native_vars: + s = re.search('^%s="(.*)"' % nv, self.bitbake_e, re.M) + if s and s.group(1) != self.get(nv): + logger.info('Overriding conf file setting of %s to %s from Bitbake environment' % (nv, s.group(1))) + self.set(nv, s.group(1)) + def print_config(self): logger.info('Continuing with the following parameters:\n') if not self.fstype in self.vmtypes: @@ -815,6 +831,29 @@ class BaseConfig(object): shutil.rmtree(self.nfs_dir) shutil.rmtree('%s.pseudo_state' % self.nfs_dir) + def load_bitbake_env(self, mach=None): + if self.bitbake_e: + return + + bitbake = shutil.which('bitbake') + if not bitbake: + return + + if not mach: + mach = self.get('MACHINE') + + if mach: + cmd = 'MACHINE=%s bitbake -e' % mach + else: + cmd = 'bitbake -e' + + logger.info('Running %s...' % cmd) + try: + self.bitbake_e = subprocess.check_output(cmd, shell=True).decode('utf-8') + except subprocess.CalledProcessError as err: + self.bitbake_e = '' + logger.warn("Couldn't run 'bitbake -e' to gather environment information:\n%s" % err.output.decode('utf-8')) + def main(): if len(sys.argv) == 1 or "help" in sys.argv: print_usage() -- cgit 1.2.3-korg