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
This commit is contained in:
parent
221ac2b25f
commit
2e182847e4
|
@ -140,6 +140,17 @@ Default BBFILES are the .bb files in the current directory.""" )
|
||||||
|
|
||||||
|
|
||||||
cooker = bb.cooker.BBCooker(configuration)
|
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)
|
||||||
|
|
||||||
cooker.parseConfiguration()
|
cooker.parseConfiguration()
|
||||||
host = cooker.server.host
|
host = cooker.server.host
|
||||||
port = cooker.server.port
|
port = cooker.server.port
|
||||||
|
|
|
@ -324,21 +324,15 @@ def expandData(alterdata, readdata = None):
|
||||||
if val != expanded:
|
if val != expanded:
|
||||||
setVar(key, expanded, alterdata)
|
setVar(key, expanded, alterdata)
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
def inheritFromOS(d):
|
def inheritFromOS(d):
|
||||||
"""Inherit variables from the environment."""
|
"""Inherit variables from the environment."""
|
||||||
# fakeroot needs to be able to set these
|
|
||||||
non_inherit_vars = [ "LD_LIBRARY_PATH", "LD_PRELOAD" ]
|
|
||||||
for s in os.environ.keys():
|
for s in os.environ.keys():
|
||||||
if not s in non_inherit_vars:
|
|
||||||
try:
|
try:
|
||||||
setVar(s, os.environ[s], d)
|
setVar(s, os.environ[s], d)
|
||||||
setVarFlag(s, 'matchesenv', '1', d)
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
pass
|
pass
|
||||||
|
os.unsetenv(s)
|
||||||
import sys
|
del os.environ[s]
|
||||||
|
|
||||||
def emit_var(var, o=sys.__stdout__, d = init(), all=False):
|
def emit_var(var, o=sys.__stdout__, d = init(), all=False):
|
||||||
"""Emit a variable to be sourced by a shell."""
|
"""Emit a variable to be sourced by a shell."""
|
||||||
|
@ -379,9 +373,6 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False):
|
||||||
o.write('unset %s\n' % varExpanded)
|
o.write('unset %s\n' % varExpanded)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if getVarFlag(var, 'matchesenv', d):
|
|
||||||
return 0
|
|
||||||
|
|
||||||
val.rstrip()
|
val.rstrip()
|
||||||
if not val:
|
if not val:
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -149,9 +149,6 @@ class DataSmart:
|
||||||
|
|
||||||
if not var in self.dict:
|
if not var in self.dict:
|
||||||
self._makeShadowCopy(var)
|
self._makeShadowCopy(var)
|
||||||
if self.getVarFlag(var, 'matchesenv'):
|
|
||||||
self.delVarFlag(var, 'matchesenv')
|
|
||||||
self.setVarFlag(var, 'export', 1)
|
|
||||||
|
|
||||||
# more cookies for the cookie monster
|
# more cookies for the cookie monster
|
||||||
if '_' in var:
|
if '_' in var:
|
||||||
|
|
|
@ -296,6 +296,60 @@ def sha256_file(filename):
|
||||||
s.update(line)
|
s.update(line)
|
||||||
return s.hexdigest()
|
return s.hexdigest()
|
||||||
|
|
||||||
|
def preserved_envvars_list():
|
||||||
|
return [
|
||||||
|
'BBPATH',
|
||||||
|
'BB_PRESERVE_ENV',
|
||||||
|
'BB_ENV_WHITELIST',
|
||||||
|
'BB_ENV_EXTRAWHITE',
|
||||||
|
'COLORTERM',
|
||||||
|
'DBUS_SESSION_BUS_ADDRESS',
|
||||||
|
'DESKTOP_SESSION',
|
||||||
|
'DESKTOP_STARTUP_ID',
|
||||||
|
'DISPLAY',
|
||||||
|
'GNOME_KEYRING_PID',
|
||||||
|
'GNOME_KEYRING_SOCKET',
|
||||||
|
'GPG_AGENT_INFO',
|
||||||
|
'GTK_RC_FILES',
|
||||||
|
'HOME',
|
||||||
|
'LANG',
|
||||||
|
'LOGNAME',
|
||||||
|
'PATH',
|
||||||
|
'PWD',
|
||||||
|
'SESSION_MANAGER',
|
||||||
|
'SHELL',
|
||||||
|
'SSH_AUTH_SOCK',
|
||||||
|
'TERM',
|
||||||
|
'USER',
|
||||||
|
'USERNAME',
|
||||||
|
'_',
|
||||||
|
'XAUTHORITY',
|
||||||
|
'XDG_DATA_DIRS',
|
||||||
|
'XDG_SESSION_COOKIE',
|
||||||
|
]
|
||||||
|
|
||||||
|
def filter_environment(good_vars):
|
||||||
|
"""
|
||||||
|
Create a pristine environment for bitbake. This will remove variables that
|
||||||
|
are not known and may influence the build in a negative way.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import bb
|
||||||
|
|
||||||
|
removed_vars = []
|
||||||
|
for key in os.environ.keys():
|
||||||
|
if key in good_vars:
|
||||||
|
continue
|
||||||
|
|
||||||
|
removed_vars.append(key)
|
||||||
|
os.unsetenv(key)
|
||||||
|
del os.environ[key]
|
||||||
|
|
||||||
|
if len(removed_vars):
|
||||||
|
bb.debug(1, "Removed the following variables from the environment:", ",".join(removed_vars))
|
||||||
|
|
||||||
|
return removed_vars
|
||||||
|
|
||||||
def prunedir(topdir):
|
def prunedir(topdir):
|
||||||
# Delete everything reachable from the directory named in 'topdir'.
|
# Delete everything reachable from the directory named in 'topdir'.
|
||||||
# CAUTION: This is dangerous!
|
# CAUTION: This is dangerous!
|
||||||
|
|
|
@ -113,6 +113,16 @@ Default BBFILES are the .bb files in the current directory.""" )
|
||||||
|
|
||||||
cooker = bb.cooker.BBCooker(configuration)
|
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)
|
||||||
|
|
||||||
cooker.parseConfiguration()
|
cooker.parseConfiguration()
|
||||||
|
|
||||||
if configuration.profile:
|
if configuration.profile:
|
||||||
|
|
|
@ -324,21 +324,15 @@ def expandData(alterdata, readdata = None):
|
||||||
if val != expanded:
|
if val != expanded:
|
||||||
setVar(key, expanded, alterdata)
|
setVar(key, expanded, alterdata)
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
def inheritFromOS(d):
|
def inheritFromOS(d):
|
||||||
"""Inherit variables from the environment."""
|
"""Inherit variables from the environment."""
|
||||||
# fakeroot needs to be able to set these
|
|
||||||
non_inherit_vars = [ "LD_LIBRARY_PATH", "LD_PRELOAD" ]
|
|
||||||
for s in os.environ.keys():
|
for s in os.environ.keys():
|
||||||
if not s in non_inherit_vars:
|
|
||||||
try:
|
try:
|
||||||
setVar(s, os.environ[s], d)
|
setVar(s, os.environ[s], d)
|
||||||
setVarFlag(s, 'matchesenv', '1', d)
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
pass
|
pass
|
||||||
|
os.unsetenv(s)
|
||||||
import sys
|
del os.environ[s]
|
||||||
|
|
||||||
def emit_var(var, o=sys.__stdout__, d = init(), all=False):
|
def emit_var(var, o=sys.__stdout__, d = init(), all=False):
|
||||||
"""Emit a variable to be sourced by a shell."""
|
"""Emit a variable to be sourced by a shell."""
|
||||||
|
@ -379,9 +373,6 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False):
|
||||||
o.write('unset %s\n' % varExpanded)
|
o.write('unset %s\n' % varExpanded)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if getVarFlag(var, 'matchesenv', d):
|
|
||||||
return 0
|
|
||||||
|
|
||||||
val.rstrip()
|
val.rstrip()
|
||||||
if not val:
|
if not val:
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -149,9 +149,6 @@ class DataSmart:
|
||||||
|
|
||||||
if not var in self.dict:
|
if not var in self.dict:
|
||||||
self._makeShadowCopy(var)
|
self._makeShadowCopy(var)
|
||||||
if self.getVarFlag(var, 'matchesenv'):
|
|
||||||
self.delVarFlag(var, 'matchesenv')
|
|
||||||
self.setVarFlag(var, 'export', 1)
|
|
||||||
|
|
||||||
# more cookies for the cookie monster
|
# more cookies for the cookie monster
|
||||||
if '_' in var:
|
if '_' in var:
|
||||||
|
|
|
@ -296,6 +296,60 @@ def sha256_file(filename):
|
||||||
s.update(line)
|
s.update(line)
|
||||||
return s.hexdigest()
|
return s.hexdigest()
|
||||||
|
|
||||||
|
def preserved_envvars_list():
|
||||||
|
return [
|
||||||
|
'BBPATH',
|
||||||
|
'BB_PRESERVE_ENV',
|
||||||
|
'BB_ENV_WHITELIST',
|
||||||
|
'BB_ENV_EXTRAWHITE',
|
||||||
|
'COLORTERM',
|
||||||
|
'DBUS_SESSION_BUS_ADDRESS',
|
||||||
|
'DESKTOP_SESSION',
|
||||||
|
'DESKTOP_STARTUP_ID',
|
||||||
|
'DISPLAY',
|
||||||
|
'GNOME_KEYRING_PID',
|
||||||
|
'GNOME_KEYRING_SOCKET',
|
||||||
|
'GPG_AGENT_INFO',
|
||||||
|
'GTK_RC_FILES',
|
||||||
|
'HOME',
|
||||||
|
'LANG',
|
||||||
|
'LOGNAME',
|
||||||
|
'PATH',
|
||||||
|
'PWD',
|
||||||
|
'SESSION_MANAGER',
|
||||||
|
'SHELL',
|
||||||
|
'SSH_AUTH_SOCK',
|
||||||
|
'TERM',
|
||||||
|
'USER',
|
||||||
|
'USERNAME',
|
||||||
|
'_',
|
||||||
|
'XAUTHORITY',
|
||||||
|
'XDG_DATA_DIRS',
|
||||||
|
'XDG_SESSION_COOKIE',
|
||||||
|
]
|
||||||
|
|
||||||
|
def filter_environment(good_vars):
|
||||||
|
"""
|
||||||
|
Create a pristine environment for bitbake. This will remove variables that
|
||||||
|
are not known and may influence the build in a negative way.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import bb
|
||||||
|
|
||||||
|
removed_vars = []
|
||||||
|
for key in os.environ.keys():
|
||||||
|
if key in good_vars:
|
||||||
|
continue
|
||||||
|
|
||||||
|
removed_vars.append(key)
|
||||||
|
os.unsetenv(key)
|
||||||
|
del os.environ[key]
|
||||||
|
|
||||||
|
if len(removed_vars):
|
||||||
|
bb.debug(1, "Removed the following variables from the environment:", ",".join(removed_vars))
|
||||||
|
|
||||||
|
return removed_vars
|
||||||
|
|
||||||
def prunedir(topdir):
|
def prunedir(topdir):
|
||||||
# Delete everything reachable from the directory named in 'topdir'.
|
# Delete everything reachable from the directory named in 'topdir'.
|
||||||
# CAUTION: This is dangerous!
|
# CAUTION: This is dangerous!
|
||||||
|
|
Loading…
Reference in New Issue