bitbake/bitbake-dev: Sync with upstream

This commit is contained in:
Richard Purdie 2008-12-06 13:16:13 +00:00
parent 4be017e82f
commit ffdec425bf
15 changed files with 117 additions and 52 deletions

View File

@ -154,7 +154,21 @@ Changes in Bitbake 1.9.x:
all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be
used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used
to extend the internal whitelist. to extend the internal whitelist.
- Perforce fetcher fix to use commandline options instead of being overriden by the environment
- bb.utils.prunedir can cope with symlinks to directoriees without exceptions
- use @rev when doing a svn checkout
- Add osc fetcher (from Joshua Lock in Poky)
- When SRCREV autorevisioning for a recipe is in use, don't cache the recipe - When SRCREV autorevisioning for a recipe is in use, don't cache the recipe
- Add tryaltconfigs option to control whether bitbake trys using alternative providers
to fulfil failed dependencies. It defaults to off, changing the default since this
behaviour confuses many users and isn't often useful.
- Improve lock file function error handling
- Add username handling to the git fetcher (Robert Bragg)
- Add support for HTTP_PROXY and HTTP_PROXY_IGNORE variables to the wget fetcher
- Export more variables to the fetcher commands to allow ssh checkouts and checkouts through
proxies to work better. (from Poky)
- Also allow user and pswd options in SRC_URIs globally (from Poky)
- Improve proxy handling when using mirrors (from Poky)
Changes in Bitbake 1.8.0: Changes in Bitbake 1.8.0:
- Release 1.7.x as a stable series - Release 1.7.x as a stable series

View File

@ -95,7 +95,11 @@ class Cache:
bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...") bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...")
self.depends_cache = {} self.depends_cache = {}
else: else:
bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...") try:
os.stat( self.cachefile )
bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...")
except OSError:
pass
def getVar(self, var, fn, exp = 0): def getVar(self, var, fn, exp = 0):
""" """

View File

@ -88,6 +88,24 @@ class BBCooker:
bb.data.inheritFromOS(self.configuration.data) bb.data.inheritFromOS(self.configuration.data)
for f in self.configuration.file:
self.parseConfigurationFile( f )
self.parseConfigurationFile( os.path.join( "conf", "bitbake.conf" ) )
if not self.configuration.cmd:
self.configuration.cmd = bb.data.getVar("BB_DEFAULT_TASK", self.configuration.data, True) or "build"
bbpkgs = bb.data.getVar('BBPKGS', self.configuration.data, True)
if bbpkgs:
self.configuration.pkgs_to_build.extend(bbpkgs.split())
#
# Special updated configuration we use for firing events
#
self.configuration.event_data = bb.data.createCopy(self.configuration.data)
bb.data.update_data(self.configuration.event_data)
# TOSTOP must not be set or our children will hang when they output # TOSTOP must not be set or our children will hang when they output
fd = sys.stdout.fileno() fd = sys.stdout.fileno()
if os.isatty(fd): if os.isatty(fd):
@ -105,23 +123,7 @@ class BBCooker:
self.server.register_idle_function(self.runCommands, self) self.server.register_idle_function(self.runCommands, self)
def parseConfiguration(self): def parseConfiguration(self):
#
# Special updated configuration we use for firing events
#
self.configuration.event_data = bb.data.createCopy(self.configuration.data)
bb.data.update_data(self.configuration.event_data)
for f in self.configuration.file:
self.parseConfigurationFile( f )
self.parseConfigurationFile( os.path.join( "conf", "bitbake.conf" ) )
if not self.configuration.cmd:
self.configuration.cmd = bb.data.getVar("BB_DEFAULT_TASK", self.configuration.data, True) or "build"
bbpkgs = bb.data.getVar('BBPKGS', self.configuration.data, True)
if bbpkgs:
self.configuration.pkgs_to_build.extend(bbpkgs.split())
# Change nice level if we're asked to # Change nice level if we're asked to
nice = bb.data.getVar("BB_NICE_LEVEL", self.configuration.data, True) nice = bb.data.getVar("BB_NICE_LEVEL", self.configuration.data, True)
@ -149,6 +151,9 @@ class BBCooker:
self.commandlineAction = ["showVersions"] self.commandlineAction = ["showVersions"]
elif self.configuration.parse_only: elif self.configuration.parse_only:
self.commandlineAction = ["parseFiles"] self.commandlineAction = ["parseFiles"]
# FIXME - implement
#elif self.configuration.interactive:
# self.interactiveMode()
elif self.configuration.dot_graph: elif self.configuration.dot_graph:
if self.configuration.pkgs_to_build: if self.configuration.pkgs_to_build:
self.commandlineAction = ["generateDotGraph", self.configuration.pkgs_to_build, self.configuration.cmd] self.commandlineAction = ["generateDotGraph", self.configuration.pkgs_to_build, self.configuration.cmd]

View File

@ -79,7 +79,7 @@ class Hg(Fetch):
host = "/" host = "/"
ud.host = "localhost" ud.host = "localhost"
if ud.user == None: if not ud.user:
hgroot = host + ud.path hgroot = host + ud.path
else: else:
hgroot = ud.user + "@" + host + ud.path hgroot = ud.user + "@" + host + ud.path

View File

@ -67,14 +67,15 @@ class Perforce(Fetch):
doparse = staticmethod(doparse) doparse = staticmethod(doparse)
def getcset(d, depot,host,user,pswd,parm): def getcset(d, depot,host,user,pswd,parm):
p4opt = ""
if "cset" in parm: if "cset" in parm:
return parm["cset"]; return parm["cset"];
if user: if user:
data.setVar('P4USER', user, d) p4opt += " -u %s" % (user)
if pswd: if pswd:
data.setVar('P4PASSWD', pswd, d) p4opt += " -P %s" % (pswd)
if host: if host:
data.setVar('P4PORT', host, d) p4opt += " -p %s" % (host)
p4date = data.getVar("P4DATE", d, 1) p4date = data.getVar("P4DATE", d, 1)
if "revision" in parm: if "revision" in parm:
@ -85,8 +86,8 @@ class Perforce(Fetch):
depot += "@%s" % (p4date) depot += "@%s" % (p4date)
p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1) p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1)
bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s changes -m 1 %s" % (p4cmd, depot)) bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
p4file = os.popen("%s changes -m 1 %s" % (p4cmd,depot)) p4file = os.popen("%s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
cset = p4file.readline().strip() cset = p4file.readline().strip()
bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset)) bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset))
if not cset: if not cset:
@ -146,14 +147,15 @@ class Perforce(Fetch):
data.update_data(localdata) data.update_data(localdata)
# Get the p4 command # Get the p4 command
p4opt = ""
if user: if user:
data.setVar('P4USER', user, localdata) p4opt += " -u %s" % (user)
if pswd: if pswd:
data.setVar('P4PASSWD', pswd, localdata) p4opt += " -P %s" % (pswd)
if host: if host:
data.setVar('P4PORT', host, localdata) p4opt += " -p %s" % (host)
p4cmd = data.getVar('FETCHCOMMAND', localdata, 1) p4cmd = data.getVar('FETCHCOMMAND', localdata, 1)
@ -175,8 +177,8 @@ class Perforce(Fetch):
os.chdir(tmpfile) os.chdir(tmpfile)
bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc) bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc)
bb.msg.note(1, bb.msg.domain.Fetcher, "%s files %s" % (p4cmd, depot)) bb.msg.note(1, bb.msg.domain.Fetcher, "%s%s files %s" % (p4cmd, p4opt, depot))
p4file = os.popen("%s files %s" % (p4cmd, depot)) p4file = os.popen("%s%s files %s" % (p4cmd, p4opt, depot))
if not p4file: if not p4file:
bb.error("Fetch: unable to get the P4 files from %s" % (depot)) bb.error("Fetch: unable to get the P4 files from %s" % (depot))
@ -193,7 +195,7 @@ class Perforce(Fetch):
dest = list[0][len(path)+1:] dest = list[0][len(path)+1:]
where = dest.find("#") where = dest.find("#")
os.system("%s print -o %s/%s %s" % (p4cmd, module,dest[:where],list[0])) os.system("%s%s print -o %s/%s %s" % (p4cmd, p4opt, module,dest[:where],list[0]))
count = count + 1 count = count + 1
if count == 0: if count == 0:

View File

@ -114,13 +114,15 @@ class Svn(Fetch):
if command is "info": if command is "info":
svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module) svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module)
else: else:
suffix = ""
if ud.revision: if ud.revision:
options.append("-r %s" % ud.revision) options.append("-r %s" % ud.revision)
suffix = "@%s" % (ud.revision)
elif ud.date: elif ud.date:
options.append("-r {%s}" % ud.date) options.append("-r {%s}" % ud.date)
if command is "fetch": if command is "fetch":
svncmd = "%s co %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, ud.module) svncmd = "%s co %s %s://%s/%s%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, suffix, ud.module)
elif command is "update": elif command is "update":
svncmd = "%s update %s" % (basecmd, " ".join(options)) svncmd = "%s update %s" % (basecmd, " ".join(options))
else: else:

View File

@ -340,7 +340,10 @@ class TaskData:
self.add_provider_internal(cfgData, dataCache, item) self.add_provider_internal(cfgData, dataCache, item)
except bb.providers.NoProvider: except bb.providers.NoProvider:
if self.abort: if self.abort:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) if self.get_rdependees_str(item):
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
else:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
raise raise
targetid = self.getbuild_id(item) targetid = self.getbuild_id(item)
self.remove_buildtarget(targetid) self.remove_buildtarget(targetid)
@ -358,7 +361,10 @@ class TaskData:
return return
if not item in dataCache.providers: if not item in dataCache.providers:
bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) if self.get_rdependees_str(item):
bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
else:
bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
bb.event.fire(bb.event.NoProvider(item, cfgData)) bb.event.fire(bb.event.NoProvider(item, cfgData))
raise bb.providers.NoProvider(item) raise bb.providers.NoProvider(item)
@ -536,7 +542,10 @@ class TaskData:
except bb.providers.NoProvider: except bb.providers.NoProvider:
targetid = self.getbuild_id(target) targetid = self.getbuild_id(target)
if self.abort and targetid in self.external_targets: if self.abort and targetid in self.external_targets:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target))) if self.get_rdependees_str(target):
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target)))
else:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (target))
raise raise
self.remove_buildtarget(targetid) self.remove_buildtarget(targetid)
for target in self.get_unresolved_run_targets(dataCache): for target in self.get_unresolved_run_targets(dataCache):

View File

@ -323,7 +323,6 @@ def preserved_envvars_list():
'HOME', 'HOME',
'LANG', 'LANG',
'LOGNAME', 'LOGNAME',
'OEROOT',
'PATH', 'PATH',
'PWD', 'PWD',
'SESSION_MANAGER', 'SESSION_MANAGER',

View File

@ -59,7 +59,20 @@ Changes in BitBake 1.8.x:
all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be all variable from the environment. If BB_ENV_WHITELIST is set, that whitelist will be
used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used
to extend the internal whitelist. to extend the internal whitelist.
- Perforce fetcher fix to use commandline options instead of being overriden by the environment
- use @rev when doing a svn checkout
- Add osc fetcher (from Joshua Lock in Poky)
- When SRCREV autorevisioning for a recipe is in use, don't cache the recipe - When SRCREV autorevisioning for a recipe is in use, don't cache the recipe
- Add tryaltconfigs option to control whether bitbake trys using alternative providers
to fulfil failed dependencies. It defaults to off, changing the default since this
behaviour confuses many users and isn't often useful.
- Improve lock file function error handling
- Add username handling to the git fetcher (Robert Bragg)
- Add support for HTTP_PROXY and HTTP_PROXY_IGNORE variables to the wget fetcher
- Export more variables to the fetcher commands to allow ssh checkouts and checkouts through
proxies to work better. (from Poky)
- Also allow user and pswd options in SRC_URIs globally (from Poky)
- Improve proxy handling when using mirrors (from Poky)
Changes in BitBake 1.8.10: Changes in BitBake 1.8.10:
- Psyco is available only for x86 - do not use it on other architectures. - Psyco is available only for x86 - do not use it on other architectures.
@ -104,6 +117,7 @@ Changes in BitBake 1.8.10:
- Add support for branches in git fetcher (Otavio Salvador, Michael Lauer) - Add support for branches in git fetcher (Otavio Salvador, Michael Lauer)
- Make taskdata and runqueue errors more user friendly - Make taskdata and runqueue errors more user friendly
- Add norecurse and fullpath options to cvs fetcher - Add norecurse and fullpath options to cvs fetcher
- bb.utils.prunedir can cope with symlinks to directories without exceptions
Changes in Bitbake 1.8.8: Changes in Bitbake 1.8.8:
- Rewrite svn fetcher to make adding extra operations easier - Rewrite svn fetcher to make adding extra operations easier

View File

@ -95,7 +95,11 @@ class Cache:
bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...") bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...")
self.depends_cache = {} self.depends_cache = {}
else: else:
bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...") try:
os.stat( self.cachefile )
bb.msg.note(1, bb.msg.domain.Cache, "Out of date cache found, rebuilding...")
except OSError:
pass
def getVar(self, var, fn, exp = 0): def getVar(self, var, fn, exp = 0):
""" """

View File

@ -79,7 +79,7 @@ class Hg(Fetch):
host = "/" host = "/"
ud.host = "localhost" ud.host = "localhost"
if ud.user == None: if not ud.user:
hgroot = host + ud.path hgroot = host + ud.path
else: else:
hgroot = ud.user + "@" + host + ud.path hgroot = ud.user + "@" + host + ud.path

View File

@ -67,14 +67,15 @@ class Perforce(Fetch):
doparse = staticmethod(doparse) doparse = staticmethod(doparse)
def getcset(d, depot,host,user,pswd,parm): def getcset(d, depot,host,user,pswd,parm):
p4opt = ""
if "cset" in parm: if "cset" in parm:
return parm["cset"]; return parm["cset"];
if user: if user:
data.setVar('P4USER', user, d) p4opt += " -u %s" % (user)
if pswd: if pswd:
data.setVar('P4PASSWD', pswd, d) p4opt += " -P %s" % (pswd)
if host: if host:
data.setVar('P4PORT', host, d) p4opt += " -p %s" % (host)
p4date = data.getVar("P4DATE", d, 1) p4date = data.getVar("P4DATE", d, 1)
if "revision" in parm: if "revision" in parm:
@ -85,8 +86,8 @@ class Perforce(Fetch):
depot += "@%s" % (p4date) depot += "@%s" % (p4date)
p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1) p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1)
bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s changes -m 1 %s" % (p4cmd, depot)) bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
p4file = os.popen("%s changes -m 1 %s" % (p4cmd,depot)) p4file = os.popen("%s%s changes -m 1 %s" % (p4cmd, p4opt, depot))
cset = p4file.readline().strip() cset = p4file.readline().strip()
bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset)) bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset))
if not cset: if not cset:
@ -146,14 +147,15 @@ class Perforce(Fetch):
data.update_data(localdata) data.update_data(localdata)
# Get the p4 command # Get the p4 command
p4opt = ""
if user: if user:
data.setVar('P4USER', user, localdata) p4opt += " -u %s" % (user)
if pswd: if pswd:
data.setVar('P4PASSWD', pswd, localdata) p4opt += " -P %s" % (pswd)
if host: if host:
data.setVar('P4PORT', host, localdata) p4opt += " -p %s" % (host)
p4cmd = data.getVar('FETCHCOMMAND', localdata, 1) p4cmd = data.getVar('FETCHCOMMAND', localdata, 1)
@ -175,8 +177,8 @@ class Perforce(Fetch):
os.chdir(tmpfile) os.chdir(tmpfile)
bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc) bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc)
bb.msg.note(1, bb.msg.domain.Fetcher, "%s files %s" % (p4cmd, depot)) bb.msg.note(1, bb.msg.domain.Fetcher, "%s%s files %s" % (p4cmd, p4opt, depot))
p4file = os.popen("%s files %s" % (p4cmd, depot)) p4file = os.popen("%s%s files %s" % (p4cmd, p4opt, depot))
if not p4file: if not p4file:
bb.error("Fetch: unable to get the P4 files from %s" % (depot)) bb.error("Fetch: unable to get the P4 files from %s" % (depot))
@ -193,7 +195,7 @@ class Perforce(Fetch):
dest = list[0][len(path)+1:] dest = list[0][len(path)+1:]
where = dest.find("#") where = dest.find("#")
os.system("%s print -o %s/%s %s" % (p4cmd, module,dest[:where],list[0])) os.system("%s%s print -o %s/%s %s" % (p4cmd, p4opt, module,dest[:where],list[0]))
count = count + 1 count = count + 1
if count == 0: if count == 0:

View File

@ -114,13 +114,15 @@ class Svn(Fetch):
if command is "info": if command is "info":
svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module) svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module)
else: else:
suffix = ""
if ud.revision: if ud.revision:
options.append("-r %s" % ud.revision) options.append("-r %s" % ud.revision)
suffix = "@%s" % (ud.revision)
elif ud.date: elif ud.date:
options.append("-r {%s}" % ud.date) options.append("-r {%s}" % ud.date)
if command is "fetch": if command is "fetch":
svncmd = "%s co %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, ud.module) svncmd = "%s co %s %s://%s/%s%s %s" % (basecmd, " ".join(options), proto, svnroot, ud.module, suffix, ud.module)
elif command is "update": elif command is "update":
svncmd = "%s update %s" % (basecmd, " ".join(options)) svncmd = "%s update %s" % (basecmd, " ".join(options))
else: else:

View File

@ -340,7 +340,10 @@ class TaskData:
self.add_provider_internal(cfgData, dataCache, item) self.add_provider_internal(cfgData, dataCache, item)
except bb.providers.NoProvider: except bb.providers.NoProvider:
if self.abort: if self.abort:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) if self.get_rdependees_str(item):
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
else:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
raise raise
targetid = self.getbuild_id(item) targetid = self.getbuild_id(item)
self.remove_buildtarget(targetid) self.remove_buildtarget(targetid)
@ -358,7 +361,10 @@ class TaskData:
return return
if not item in dataCache.providers: if not item in dataCache.providers:
bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) if self.get_rdependees_str(item):
bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
else:
bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item))
bb.event.fire(bb.event.NoProvider(item, cfgData)) bb.event.fire(bb.event.NoProvider(item, cfgData))
raise bb.providers.NoProvider(item) raise bb.providers.NoProvider(item)
@ -536,7 +542,10 @@ class TaskData:
except bb.providers.NoProvider: except bb.providers.NoProvider:
targetid = self.getbuild_id(target) targetid = self.getbuild_id(target)
if self.abort and targetid in self.external_targets: if self.abort and targetid in self.external_targets:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target))) if self.get_rdependees_str(target):
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target)))
else:
bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (target))
raise raise
self.remove_buildtarget(targetid) self.remove_buildtarget(targetid)
for target in self.get_unresolved_run_targets(dataCache): for target in self.get_unresolved_run_targets(dataCache):

View File

@ -323,7 +323,6 @@ def preserved_envvars_list():
'HOME', 'HOME',
'LANG', 'LANG',
'LOGNAME', 'LOGNAME',
'OEROOT',
'PATH', 'PATH',
'PWD', 'PWD',
'SESSION_MANAGER', 'SESSION_MANAGER',