diff options
| author | Richard Purdie <richard@openedhand.com> | 2008-09-30 20:57:18 +0000 |
|---|---|---|
| committer | Richard Purdie <richard@openedhand.com> | 2008-09-30 20:57:18 +0000 |
| commit | 2e182847e4a780c58c5b8046eb98f7f6c8970ea1 (patch) | |
| tree | dc3ccf060b2b04c8af29c75607260052bc92673b | |
| parent | 221ac2b25f544a500869667d8f95c6c12c80db1a (diff) | |
| download | poky-2e182847e4a780c58c5b8046eb98f7f6c8970ea1.tar.gz | |
bitbake/bitbake-dev: Allow much better control of which variable influence bitbake from the environment
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5347 311d38ba-8fff-0310-9ca6-ca027cbcb966
| -rwxr-xr-x | bitbake-dev/bin/bitbake | 11 | ||||
| -rw-r--r-- | bitbake-dev/lib/bb/data.py | 21 | ||||
| -rw-r--r-- | bitbake-dev/lib/bb/data_smart.py | 3 | ||||
| -rw-r--r-- | bitbake-dev/lib/bb/utils.py | 54 | ||||
| -rwxr-xr-x | bitbake/bin/bitbake | 10 | ||||
| -rw-r--r-- | bitbake/lib/bb/data.py | 21 | ||||
| -rw-r--r-- | bitbake/lib/bb/data_smart.py | 3 | ||||
| -rw-r--r-- | bitbake/lib/bb/utils.py | 54 |
8 files changed, 141 insertions, 36 deletions
diff --git a/bitbake-dev/bin/bitbake b/bitbake-dev/bin/bitbake index c994edb84b..247b54fcd3 100755 --- a/bitbake-dev/bin/bitbake +++ b/bitbake-dev/bin/bitbake | |||
| @@ -140,6 +140,17 @@ Default BBFILES are the .bb files in the current directory.""" ) | |||
| 140 | 140 | ||
| 141 | 141 | ||
| 142 | cooker = bb.cooker.BBCooker(configuration) | 142 | cooker = bb.cooker.BBCooker(configuration) |
| 143 | |||
| 144 | # Optionally clean up the environment | ||
| 145 | if 'BB_PRESERVE_ENV' not in os.environ: | ||
| 146 | if 'BB_ENV_WHITELIST' in os.environ: | ||
| 147 | good_vars = os.environ['BB_ENV_WHITELIST'].split() | ||
| 148 | else: | ||
| 149 | good_vars = bb.utils.preserved_envvars_list() | ||
| 150 | if 'BB_ENV_EXTRAWHITE' in os.environ: | ||
| 151 | good_vars.extend(os.environ['BB_ENV_EXTRAWHITE'].split()) | ||
| 152 | bb.utils.filter_environment(good_vars) | ||
| 153 | |||
| 143 | cooker.parseConfiguration() | 154 | cooker.parseConfiguration() |
| 144 | host = cooker.server.host | 155 | host = cooker.server.host |
| 145 | port = cooker.server.port | 156 | port = cooker.server.port |
diff --git a/bitbake-dev/lib/bb/data.py b/bitbake-dev/lib/bb/data.py index 54b2615afb..82eef44989 100644 --- a/bitbake-dev/lib/bb/data.py +++ b/bitbake-dev/lib/bb/data.py | |||
| @@ -324,21 +324,15 @@ def expandData(alterdata, readdata = None): | |||
| 324 | if val != expanded: | 324 | if val != expanded: |
| 325 | setVar(key, expanded, alterdata) | 325 | setVar(key, expanded, alterdata) |
| 326 | 326 | ||
| 327 | import os | ||
| 328 | |||
| 329 | def inheritFromOS(d): | 327 | def inheritFromOS(d): |
| 330 | """Inherit variables from the environment.""" | 328 | """Inherit variables from the environment.""" |
| 331 | # fakeroot needs to be able to set these | ||
| 332 | non_inherit_vars = [ "LD_LIBRARY_PATH", "LD_PRELOAD" ] | ||
| 333 | for s in os.environ.keys(): | 329 | for s in os.environ.keys(): |
| 334 | if not s in non_inherit_vars: | 330 | try: |
| 335 | try: | 331 | setVar(s, os.environ[s], d) |
| 336 | setVar(s, os.environ[s], d) | 332 | except TypeError: |
| 337 | setVarFlag(s, 'matchesenv', '1', d) | 333 | pass |
| 338 | except TypeError: | 334 | os.unsetenv(s) |
| 339 | pass | 335 | del os.environ[s] |
| 340 | |||
| 341 | import sys | ||
| 342 | 336 | ||
| 343 | def emit_var(var, o=sys.__stdout__, d = init(), all=False): | 337 | def emit_var(var, o=sys.__stdout__, d = init(), all=False): |
| 344 | """Emit a variable to be sourced by a shell.""" | 338 | """Emit a variable to be sourced by a shell.""" |
| @@ -379,9 +373,6 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False): | |||
| 379 | o.write('unset %s\n' % varExpanded) | 373 | o.write('unset %s\n' % varExpanded) |
| 380 | return 1 | 374 | return 1 |
| 381 | 375 | ||
| 382 | if getVarFlag(var, 'matchesenv', d): | ||
| 383 | return 0 | ||
| 384 | |||
| 385 | val.rstrip() | 376 | val.rstrip() |
| 386 | if not val: | 377 | if not val: |
| 387 | return 0 | 378 | return 0 |
diff --git a/bitbake-dev/lib/bb/data_smart.py b/bitbake-dev/lib/bb/data_smart.py index b3a51b0edf..0d39d20a45 100644 --- a/bitbake-dev/lib/bb/data_smart.py +++ b/bitbake-dev/lib/bb/data_smart.py | |||
| @@ -149,9 +149,6 @@ class DataSmart: | |||
| 149 | 149 | ||
| 150 | if not var in self.dict: | 150 | if not var in self.dict: |
| 151 | self._makeShadowCopy(var) | 151 | self._makeShadowCopy(var) |
| 152 | if self.getVarFlag(var, 'matchesenv'): | ||
| 153 | self.delVarFlag(var, 'matchesenv') | ||
| 154 | self.setVarFlag(var, 'export', 1) | ||
| 155 | 152 | ||
| 156 | # more cookies for the cookie monster | 153 | # more cookies for the cookie monster |
| 157 | if '_' in var: | 154 | if '_' in var: |
diff --git a/bitbake-dev/lib/bb/utils.py b/bitbake-dev/lib/bb/utils.py index 0a0c9ada34..9c9eb5d328 100644 --- a/bitbake-dev/lib/bb/utils.py +++ b/bitbake-dev/lib/bb/utils.py | |||
| @@ -296,6 +296,60 @@ def sha256_file(filename): | |||
| 296 | s.update(line) | 296 | s.update(line) |
| 297 | return s.hexdigest() | 297 | return s.hexdigest() |
| 298 | 298 | ||
| 299 | def preserved_envvars_list(): | ||
| 300 | return [ | ||
| 301 | 'BBPATH', | ||
| 302 | 'BB_PRESERVE_ENV', | ||
| 303 | 'BB_ENV_WHITELIST', | ||
| 304 | 'BB_ENV_EXTRAWHITE', | ||
| 305 | 'COLORTERM', | ||
| 306 | 'DBUS_SESSION_BUS_ADDRESS', | ||
| 307 | 'DESKTOP_SESSION', | ||
| 308 | 'DESKTOP_STARTUP_ID', | ||
| 309 | 'DISPLAY', | ||
| 310 | 'GNOME_KEYRING_PID', | ||
| 311 | 'GNOME_KEYRING_SOCKET', | ||
| 312 | 'GPG_AGENT_INFO', | ||
| 313 | 'GTK_RC_FILES', | ||
| 314 | 'HOME', | ||
| 315 | 'LANG', | ||
| 316 | 'LOGNAME', | ||
| 317 | 'PATH', | ||
| 318 | 'PWD', | ||
| 319 | 'SESSION_MANAGER', | ||
| 320 | 'SHELL', | ||
| 321 | 'SSH_AUTH_SOCK', | ||
| 322 | 'TERM', | ||
| 323 | 'USER', | ||
| 324 | 'USERNAME', | ||
| 325 | '_', | ||
| 326 | 'XAUTHORITY', | ||
| 327 | 'XDG_DATA_DIRS', | ||
| 328 | 'XDG_SESSION_COOKIE', | ||
| 329 | ] | ||
| 330 | |||
| 331 | def filter_environment(good_vars): | ||
| 332 | """ | ||
| 333 | Create a pristine environment for bitbake. This will remove variables that | ||
| 334 | are not known and may influence the build in a negative way. | ||
| 335 | """ | ||
| 336 | |||
| 337 | import bb | ||
| 338 | |||
| 339 | removed_vars = [] | ||
| 340 | for key in os.environ.keys(): | ||
| 341 | if key in good_vars: | ||
| 342 | continue | ||
| 343 | |||
| 344 | removed_vars.append(key) | ||
| 345 | os.unsetenv(key) | ||
| 346 | del os.environ[key] | ||
| 347 | |||
| 348 | if len(removed_vars): | ||
| 349 | bb.debug(1, "Removed the following variables from the environment:", ",".join(removed_vars)) | ||
| 350 | |||
| 351 | return removed_vars | ||
| 352 | |||
| 299 | def prunedir(topdir): | 353 | def prunedir(topdir): |
| 300 | # Delete everything reachable from the directory named in 'topdir'. | 354 | # Delete everything reachable from the directory named in 'topdir'. |
| 301 | # CAUTION: This is dangerous! | 355 | # CAUTION: This is dangerous! |
diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index e262d0b9b4..dc35152d57 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake | |||
| @@ -113,6 +113,16 @@ Default BBFILES are the .bb files in the current directory.""" ) | |||
| 113 | 113 | ||
| 114 | cooker = bb.cooker.BBCooker(configuration) | 114 | cooker = bb.cooker.BBCooker(configuration) |
| 115 | 115 | ||
| 116 | # Optionally clean up the environment | ||
| 117 | if 'BB_PRESERVE_ENV' not in os.environ: | ||
| 118 | if 'BB_ENV_WHITELIST' in os.environ: | ||
| 119 | good_vars = os.environ['BB_ENV_WHITELIST'].split() | ||
| 120 | else: | ||
| 121 | good_vars = bb.utils.preserved_envvars_list() | ||
| 122 | if 'BB_ENV_EXTRAWHITE' in os.environ: | ||
| 123 | good_vars.extend(os.environ['BB_ENV_EXTRAWHITE'].split()) | ||
| 124 | bb.utils.filter_environment(good_vars) | ||
| 125 | |||
| 116 | cooker.parseConfiguration() | 126 | cooker.parseConfiguration() |
| 117 | 127 | ||
| 118 | if configuration.profile: | 128 | if configuration.profile: |
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index 54b2615afb..82eef44989 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py | |||
| @@ -324,21 +324,15 @@ def expandData(alterdata, readdata = None): | |||
| 324 | if val != expanded: | 324 | if val != expanded: |
| 325 | setVar(key, expanded, alterdata) | 325 | setVar(key, expanded, alterdata) |
| 326 | 326 | ||
| 327 | import os | ||
| 328 | |||
| 329 | def inheritFromOS(d): | 327 | def inheritFromOS(d): |
| 330 | """Inherit variables from the environment.""" | 328 | """Inherit variables from the environment.""" |
| 331 | # fakeroot needs to be able to set these | ||
| 332 | non_inherit_vars = [ "LD_LIBRARY_PATH", "LD_PRELOAD" ] | ||
| 333 | for s in os.environ.keys(): | 329 | for s in os.environ.keys(): |
| 334 | if not s in non_inherit_vars: | 330 | try: |
| 335 | try: | 331 | setVar(s, os.environ[s], d) |
| 336 | setVar(s, os.environ[s], d) | 332 | except TypeError: |
| 337 | setVarFlag(s, 'matchesenv', '1', d) | 333 | pass |
| 338 | except TypeError: | 334 | os.unsetenv(s) |
| 339 | pass | 335 | del os.environ[s] |
| 340 | |||
| 341 | import sys | ||
| 342 | 336 | ||
| 343 | def emit_var(var, o=sys.__stdout__, d = init(), all=False): | 337 | def emit_var(var, o=sys.__stdout__, d = init(), all=False): |
| 344 | """Emit a variable to be sourced by a shell.""" | 338 | """Emit a variable to be sourced by a shell.""" |
| @@ -379,9 +373,6 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False): | |||
| 379 | o.write('unset %s\n' % varExpanded) | 373 | o.write('unset %s\n' % varExpanded) |
| 380 | return 1 | 374 | return 1 |
| 381 | 375 | ||
| 382 | if getVarFlag(var, 'matchesenv', d): | ||
| 383 | return 0 | ||
| 384 | |||
| 385 | val.rstrip() | 376 | val.rstrip() |
| 386 | if not val: | 377 | if not val: |
| 387 | return 0 | 378 | return 0 |
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index b3a51b0edf..0d39d20a45 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
| @@ -149,9 +149,6 @@ class DataSmart: | |||
| 149 | 149 | ||
| 150 | if not var in self.dict: | 150 | if not var in self.dict: |
| 151 | self._makeShadowCopy(var) | 151 | self._makeShadowCopy(var) |
| 152 | if self.getVarFlag(var, 'matchesenv'): | ||
| 153 | self.delVarFlag(var, 'matchesenv') | ||
| 154 | self.setVarFlag(var, 'export', 1) | ||
| 155 | 152 | ||
| 156 | # more cookies for the cookie monster | 153 | # more cookies for the cookie monster |
| 157 | if '_' in var: | 154 | if '_' in var: |
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 9c8d8e8435..3c1fd31b03 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
| @@ -296,6 +296,60 @@ def sha256_file(filename): | |||
| 296 | s.update(line) | 296 | s.update(line) |
| 297 | return s.hexdigest() | 297 | return s.hexdigest() |
| 298 | 298 | ||
| 299 | def preserved_envvars_list(): | ||
| 300 | return [ | ||
| 301 | 'BBPATH', | ||
| 302 | 'BB_PRESERVE_ENV', | ||
| 303 | 'BB_ENV_WHITELIST', | ||
| 304 | 'BB_ENV_EXTRAWHITE', | ||
| 305 | 'COLORTERM', | ||
| 306 | 'DBUS_SESSION_BUS_ADDRESS', | ||
| 307 | 'DESKTOP_SESSION', | ||
| 308 | 'DESKTOP_STARTUP_ID', | ||
| 309 | 'DISPLAY', | ||
| 310 | 'GNOME_KEYRING_PID', | ||
| 311 | 'GNOME_KEYRING_SOCKET', | ||
| 312 | 'GPG_AGENT_INFO', | ||
| 313 | 'GTK_RC_FILES', | ||
| 314 | 'HOME', | ||
| 315 | 'LANG', | ||
| 316 | 'LOGNAME', | ||
| 317 | 'PATH', | ||
| 318 | 'PWD', | ||
| 319 | 'SESSION_MANAGER', | ||
| 320 | 'SHELL', | ||
| 321 | 'SSH_AUTH_SOCK', | ||
| 322 | 'TERM', | ||
| 323 | 'USER', | ||
| 324 | 'USERNAME', | ||
| 325 | '_', | ||
| 326 | 'XAUTHORITY', | ||
| 327 | 'XDG_DATA_DIRS', | ||
| 328 | 'XDG_SESSION_COOKIE', | ||
| 329 | ] | ||
| 330 | |||
| 331 | def filter_environment(good_vars): | ||
| 332 | """ | ||
| 333 | Create a pristine environment for bitbake. This will remove variables that | ||
| 334 | are not known and may influence the build in a negative way. | ||
| 335 | """ | ||
| 336 | |||
| 337 | import bb | ||
| 338 | |||
| 339 | removed_vars = [] | ||
| 340 | for key in os.environ.keys(): | ||
| 341 | if key in good_vars: | ||
| 342 | continue | ||
| 343 | |||
| 344 | removed_vars.append(key) | ||
| 345 | os.unsetenv(key) | ||
| 346 | del os.environ[key] | ||
| 347 | |||
| 348 | if len(removed_vars): | ||
| 349 | bb.debug(1, "Removed the following variables from the environment:", ",".join(removed_vars)) | ||
| 350 | |||
| 351 | return removed_vars | ||
| 352 | |||
| 299 | def prunedir(topdir): | 353 | def prunedir(topdir): |
| 300 | # Delete everything reachable from the directory named in 'topdir'. | 354 | # Delete everything reachable from the directory named in 'topdir'. |
| 301 | # CAUTION: This is dangerous! | 355 | # CAUTION: This is dangerous! |
