浏览代码

bitbake: Refactor the environment variable handling

Refactor the environment variable handling so that it more closes matches the
changes that have been made in bitbake-dev.

git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5527 311d38ba-8fff-0310-9ca6-ca027cbcb966
Robert Bradford 17 年之前
父节点
当前提交
696d4f01d2
共有 4 个文件被更改,包括 28 次插入11 次删除
  1. 3 9
      bitbake/bin/bitbake
  2. 3 0
      bitbake/lib/bb/cooker.py
  3. 0 2
      bitbake/lib/bb/data.py
  4. 22 0
      bitbake/lib/bb/utils.py

+ 3 - 9
bitbake/bin/bitbake

@@ -113,15 +113,9 @@ 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.
+    bb.utils.clean_environment()
 
     cooker.parseConfiguration()
 

+ 3 - 0
bitbake/lib/bb/cooker.py

@@ -596,6 +596,9 @@ class BBCooker:
         build.
         """
 
+        # Wipe the OS environment
+        bb.utils.empty_environment()
+
         if self.configuration.show_environment:
             self.showEnvironment(self.configuration.buildfile, self.configuration.pkgs_to_build)
             sys.exit( 0 )

+ 0 - 2
bitbake/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."""

+ 22 - 0
bitbake/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 variables 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!