diff --git a/bitbake-dev/bin/bitbake b/bitbake-dev/bin/bitbake index 247b54fcd3..87284c08fe 100755 --- a/bitbake-dev/bin/bitbake +++ b/bitbake-dev/bin/bitbake @@ -141,15 +141,10 @@ Default BBFILES are the .bb files in the current directory.""" ) cooker = bb.cooker.BBCooker(configuration) - # Optionally clean up the environment - if 'BB_PRESERVE_ENV' not in os.environ: - if 'BB_ENV_WHITELIST' in os.environ: - good_vars = os.environ['BB_ENV_WHITELIST'].split() - else: - good_vars = bb.utils.preserved_envvars_list() - if 'BB_ENV_EXTRAWHITE' in os.environ: - good_vars.extend(os.environ['BB_ENV_EXTRAWHITE'].split()) - bb.utils.filter_environment(good_vars) + # Clear away any spurious environment variables. But don't wipe the + # environment totally. This is necessary to ensure the correct operation + # of the UIs (e.g. for DISPLAY, etc.) + bb.utils.clean_environment() cooker.parseConfiguration() host = cooker.server.host diff --git a/bitbake-dev/lib/bb/cooker.py b/bitbake-dev/lib/bb/cooker.py index 8feb228faf..6d04d38080 100644 --- a/bitbake-dev/lib/bb/cooker.py +++ b/bitbake-dev/lib/bb/cooker.py @@ -907,6 +907,10 @@ class BBCooker: def serve(self): + # Empty the environment. The environment will be populated as + # necessary from the data store. + bb.utils.empty_environment() + if self.configuration.profile: try: import cProfile as profile diff --git a/bitbake-dev/lib/bb/data.py b/bitbake-dev/lib/bb/data.py index 82eef44989..19e67dbc37 100644 --- a/bitbake-dev/lib/bb/data.py +++ b/bitbake-dev/lib/bb/data.py @@ -331,8 +331,6 @@ def inheritFromOS(d): setVar(s, os.environ[s], d) except TypeError: pass - os.unsetenv(s) - del os.environ[s] def emit_var(var, o=sys.__stdout__, d = init(), all=False): """Emit a variable to be sourced by a shell.""" diff --git a/bitbake-dev/lib/bb/utils.py b/bitbake-dev/lib/bb/utils.py index 119f08582d..94bc62f7cf 100644 --- a/bitbake-dev/lib/bb/utils.py +++ b/bitbake-dev/lib/bb/utils.py @@ -354,6 +354,28 @@ def filter_environment(good_vars): return removed_vars +def clean_environment(): + """ + Clean up any spurious environment variables. This will remove any + variables the user hasn't chose to preserve. + """ + if 'BB_PRESERVE_ENV' not in os.environ: + if 'BB_ENV_WHITELIST' in os.environ: + good_vars = os.environ['BB_ENV_WHITELIST'].split() + else: + good_vars = preserved_envvars_list() + if 'BB_ENV_EXTRAWHITE' in os.environ: + good_vars.extend(os.environ['BB_ENV_EXTRAWHITE'].split()) + filter_environment(good_vars) + +def empty_environment(): + """ + Remove all variable from the environment. + """ + for s in os.environ.keys(): + os.unsetenv(s) + del os.environ[s] + def prunedir(topdir): # Delete everything reachable from the directory named in 'topdir'. # CAUTION: This is dangerous!