diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py index 60f9ac08aa..29b0a53e98 100644 --- a/bitbake/lib/bb/command.py +++ b/bitbake/lib/bb/command.py @@ -273,7 +273,8 @@ class CommandsSync: def updateConfig(self, command, params): options = params[0] - command.cooker.updateConfigOpts(options) + environment = params[1] + command.cooker.updateConfigOpts(options, environment) class CommandsAsync: """ diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 95f65ac685..9086f92e5c 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -489,9 +489,29 @@ class BBCooker: self.handleCollections( self.data.getVar("BBFILE_COLLECTIONS", True) ) - def updateConfigOpts(self,options): + def updateConfigOpts(self, options, environment): for o in options: setattr(self.configuration, o, options[o]) + clean = True + for k in bb.utils.approved_variables(): + if k in environment and k not in self.configuration.env: + logger.debug(1, "Updating environment variable %s to %s" % (k, environment[k])) + self.configuration.env[k] = environment[k] + clean = False + if k in self.configuration.env and k not in environment: + logger.debug(1, "Updating environment variable %s (deleted)" % (k)) + del self.configuration.env[k] + clean = False + if k not in self.configuration.env and k not in environment: + continue + if environment[k] != self.configuration.env[k]: + logger.debug(1, "Updating environment variable %s to %s" % (k, environment[k])) + self.configuration.env[k] = environment[k] + clean = False + if not clean: + logger.debug(1, "Base environment change, triggering reparse") + self.baseconfig_valid = False + self.reset() def runCommands(self, server, data, abort): """ diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index 2ceed2d867..7eae761d59 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py @@ -69,14 +69,14 @@ class ConfigParameters(object): if bbpkgs: self.options.pkgs_to_build.extend(bbpkgs.split()) - def updateToServer(self, server): + def updateToServer(self, server, environment): options = {} for o in ["abort", "tryaltconfigs", "force", "invalidate_stamp", "verbose", "debug", "dry_run", "dump_signatures", "debug_domains", "extra_assume_provided", "profile"]: options[o] = getattr(self.options, o) - ret, error = server.runCommand(["updateConfig", options]) + ret, error = server.runCommand(["updateConfig", options, environment]) if error: raise Exception("Unable to update the server configuration with local parameters: %s" % error) diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 9e58b31727..ea20ddc7e0 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -284,7 +284,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): if not params.observe_only: params.updateFromServer(server) - params.updateToServer(server) + params.updateToServer(server, os.environ.copy()) cmdline = params.parseActions() if not cmdline: print("Nothing to do. Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.")