summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bitbake-dev/ChangeLog14
-rw-r--r--bitbake-dev/lib/bb/cache.py6
-rw-r--r--bitbake-dev/lib/bb/cooker.py37
-rw-r--r--bitbake-dev/lib/bb/fetch/hg.py2
-rw-r--r--bitbake-dev/lib/bb/fetch/perforce.py24
-rw-r--r--bitbake-dev/lib/bb/fetch/svn.py4
-rw-r--r--bitbake-dev/lib/bb/taskdata.py15
-rw-r--r--bitbake-dev/lib/bb/utils.py1
-rw-r--r--bitbake/ChangeLog14
-rw-r--r--bitbake/lib/bb/cache.py6
-rw-r--r--bitbake/lib/bb/fetch/hg.py2
-rw-r--r--bitbake/lib/bb/fetch/perforce.py24
-rw-r--r--bitbake/lib/bb/fetch/svn.py4
-rw-r--r--bitbake/lib/bb/taskdata.py15
-rw-r--r--bitbake/lib/bb/utils.py1
15 files changed, 117 insertions, 52 deletions
diff --git a/bitbake-dev/ChangeLog b/bitbake-dev/ChangeLog
index 6f068be19f..a2c9d80801 100644
--- a/bitbake-dev/ChangeLog
+++ b/bitbake-dev/ChangeLog
@@ -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
used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used
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
+ - 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:
- Release 1.7.x as a stable series
diff --git a/bitbake-dev/lib/bb/cache.py b/bitbake-dev/lib/bb/cache.py
index 1c87bfa12d..a4a4f47cef 100644
--- a/bitbake-dev/lib/bb/cache.py
+++ b/bitbake-dev/lib/bb/cache.py
@@ -95,7 +95,11 @@ class Cache:
bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...")
self.depends_cache = {}
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):
"""
diff --git a/bitbake-dev/lib/bb/cooker.py b/bitbake-dev/lib/bb/cooker.py
index 86229799f2..06f3395d7a 100644
--- a/bitbake-dev/lib/bb/cooker.py
+++ b/bitbake-dev/lib/bb/cooker.py
@@ -88,6 +88,24 @@ class BBCooker:
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
fd = sys.stdout.fileno()
if os.isatty(fd):
@@ -105,23 +123,7 @@ class BBCooker:
self.server.register_idle_function(self.runCommands, 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
nice = bb.data.getVar("BB_NICE_LEVEL", self.configuration.data, True)
@@ -149,6 +151,9 @@ class BBCooker:
self.commandlineAction = ["showVersions"]
elif self.configuration.parse_only:
self.commandlineAction = ["parseFiles"]
+ # FIXME - implement
+ #elif self.configuration.interactive:
+ # self.interactiveMode()
elif self.configuration.dot_graph:
if self.configuration.pkgs_to_build:
self.commandlineAction = ["generateDotGraph", self.configuration.pkgs_to_build, self.configuration.cmd]
diff --git a/bitbake-dev/lib/bb/fetch/hg.py b/bitbake-dev/lib/bb/fetch/hg.py
index 1cd5a8aa5c..b87fd0fbe5 100644
--- a/bitbake-dev/lib/bb/fetch/hg.py
+++ b/bitbake-dev/lib/bb/fetch/hg.py
@@ -79,7 +79,7 @@ class Hg(Fetch):
host = "/"
ud.host = "localhost"
- if ud.user == None:
+ if not ud.user:
hgroot = host + ud.path
else:
hgroot = ud.user + "@" + host + ud.path
diff --git a/bitbake-dev/lib/bb/fetch/perforce.py b/bitbake-dev/lib/bb/fetch/perforce.py
index b594d2bde2..2fb38b4190 100644
--- a/bitbake-dev/lib/bb/fetch/perforce.py
+++ b/bitbake-dev/lib/bb/fetch/perforce.py
@@ -67,14 +67,15 @@ class Perforce(Fetch):
doparse = staticmethod(doparse)
def getcset(d, depot,host,user,pswd,parm):
+ p4opt = ""
if "cset" in parm:
return parm["cset"];
if user:
- data.setVar('P4USER', user, d)
+ p4opt += " -u %s" % (user)
if pswd:
- data.setVar('P4PASSWD', pswd, d)
+ p4opt += " -P %s" % (pswd)
if host:
- data.setVar('P4PORT', host, d)
+ p4opt += " -p %s" % (host)
p4date = data.getVar("P4DATE", d, 1)
if "revision" in parm:
@@ -85,8 +86,8 @@ class Perforce(Fetch):
depot += "@%s" % (p4date)
p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1)
- bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s changes -m 1 %s" % (p4cmd, depot))
- p4file = os.popen("%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%s changes -m 1 %s" % (p4cmd, p4opt, depot))
cset = p4file.readline().strip()
bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset))
if not cset:
@@ -146,14 +147,15 @@ class Perforce(Fetch):
data.update_data(localdata)
# Get the p4 command
+ p4opt = ""
if user:
- data.setVar('P4USER', user, localdata)
+ p4opt += " -u %s" % (user)
if pswd:
- data.setVar('P4PASSWD', pswd, localdata)
+ p4opt += " -P %s" % (pswd)
if host:
- data.setVar('P4PORT', host, localdata)
+ p4opt += " -p %s" % (host)
p4cmd = data.getVar('FETCHCOMMAND', localdata, 1)
@@ -175,8 +177,8 @@ class Perforce(Fetch):
os.chdir(tmpfile)
bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc)
- bb.msg.note(1, bb.msg.domain.Fetcher, "%s files %s" % (p4cmd, depot))
- p4file = os.popen("%s files %s" % (p4cmd, depot))
+ bb.msg.note(1, bb.msg.domain.Fetcher, "%s%s files %s" % (p4cmd, p4opt, depot))
+ p4file = os.popen("%s%s files %s" % (p4cmd, p4opt, depot))
if not p4file:
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:]
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
if count == 0:
diff --git a/bitbake-dev/lib/bb/fetch/svn.py b/bitbake-dev/lib/bb/fetch/svn.py
index 5e5b31b3ad..aead1629b3 100644
--- a/bitbake-dev/lib/bb/fetch/svn.py
+++ b/bitbake-dev/lib/bb/fetch/svn.py
@@ -114,13 +114,15 @@ class Svn(Fetch):
if command is "info":
svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module)
else:
+ suffix = ""
if ud.revision:
options.append("-r %s" % ud.revision)
+ suffix = "@%s" % (ud.revision)
elif ud.date:
options.append("-r {%s}" % ud.date)
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":
svncmd = "%s update %s" % (basecmd, " ".join(options))
else:
diff --git a/bitbake-dev/lib/bb/taskdata.py b/bitbake-dev/lib/bb/taskdata.py
index 782dfb0b78..64ab032c3c 100644
--- a/bitbake-dev/lib/bb/taskdata.py
+++ b/bitbake-dev/lib/bb/taskdata.py
@@ -340,7 +340,10 @@ class TaskData:
self.add_provider_internal(cfgData, dataCache, item)
except bb.providers.NoProvider:
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
targetid = self.getbuild_id(item)
self.remove_buildtarget(targetid)
@@ -358,7 +361,10 @@ class TaskData:
return
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))
raise bb.providers.NoProvider(item)
@@ -536,7 +542,10 @@ class TaskData:
except bb.providers.NoProvider:
targetid = self.getbuild_id(target)
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
self.remove_buildtarget(targetid)
for target in self.get_unresolved_run_targets(dataCache):
diff --git a/bitbake-dev/lib/bb/utils.py b/bitbake-dev/lib/bb/utils.py
index 33a0c17650..90ba9ac2e0 100644
--- a/bitbake-dev/lib/bb/utils.py
+++ b/bitbake-dev/lib/bb/utils.py
@@ -323,7 +323,6 @@ def preserved_envvars_list():
'HOME',
'LANG',
'LOGNAME',
- 'OEROOT',
'PATH',
'PWD',
'SESSION_MANAGER',
diff --git a/bitbake/ChangeLog b/bitbake/ChangeLog
index 2d50c0e364..a053ab839e 100644
--- a/bitbake/ChangeLog
+++ b/bitbake/ChangeLog
@@ -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
used instead of the internal bitbake one. Alternatively, BB_ENV_EXTRAWHITE can be used
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
+ - 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:
- 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)
- Make taskdata and runqueue errors more user friendly
- 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:
- Rewrite svn fetcher to make adding extra operations easier
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py
index 1c87bfa12d..a4a4f47cef 100644
--- a/bitbake/lib/bb/cache.py
+++ b/bitbake/lib/bb/cache.py
@@ -95,7 +95,11 @@ class Cache:
bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...")
self.depends_cache = {}
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):
"""
diff --git a/bitbake/lib/bb/fetch/hg.py b/bitbake/lib/bb/fetch/hg.py
index 1cd5a8aa5c..b87fd0fbe5 100644
--- a/bitbake/lib/bb/fetch/hg.py
+++ b/bitbake/lib/bb/fetch/hg.py
@@ -79,7 +79,7 @@ class Hg(Fetch):
host = "/"
ud.host = "localhost"
- if ud.user == None:
+ if not ud.user:
hgroot = host + ud.path
else:
hgroot = ud.user + "@" + host + ud.path
diff --git a/bitbake/lib/bb/fetch/perforce.py b/bitbake/lib/bb/fetch/perforce.py
index b594d2bde2..2fb38b4190 100644
--- a/bitbake/lib/bb/fetch/perforce.py
+++ b/bitbake/lib/bb/fetch/perforce.py
@@ -67,14 +67,15 @@ class Perforce(Fetch):
doparse = staticmethod(doparse)
def getcset(d, depot,host,user,pswd,parm):
+ p4opt = ""
if "cset" in parm:
return parm["cset"];
if user:
- data.setVar('P4USER', user, d)
+ p4opt += " -u %s" % (user)
if pswd:
- data.setVar('P4PASSWD', pswd, d)
+ p4opt += " -P %s" % (pswd)
if host:
- data.setVar('P4PORT', host, d)
+ p4opt += " -p %s" % (host)
p4date = data.getVar("P4DATE", d, 1)
if "revision" in parm:
@@ -85,8 +86,8 @@ class Perforce(Fetch):
depot += "@%s" % (p4date)
p4cmd = data.getVar('FETCHCOMMAND_p4', d, 1)
- bb.msg.debug(1, bb.msg.domain.Fetcher, "Running %s changes -m 1 %s" % (p4cmd, depot))
- p4file = os.popen("%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%s changes -m 1 %s" % (p4cmd, p4opt, depot))
cset = p4file.readline().strip()
bb.msg.debug(1, bb.msg.domain.Fetcher, "READ %s" % (cset))
if not cset:
@@ -146,14 +147,15 @@ class Perforce(Fetch):
data.update_data(localdata)
# Get the p4 command
+ p4opt = ""
if user:
- data.setVar('P4USER', user, localdata)
+ p4opt += " -u %s" % (user)
if pswd:
- data.setVar('P4PASSWD', pswd, localdata)
+ p4opt += " -P %s" % (pswd)
if host:
- data.setVar('P4PORT', host, localdata)
+ p4opt += " -p %s" % (host)
p4cmd = data.getVar('FETCHCOMMAND', localdata, 1)
@@ -175,8 +177,8 @@ class Perforce(Fetch):
os.chdir(tmpfile)
bb.msg.note(1, bb.msg.domain.Fetcher, "Fetch " + loc)
- bb.msg.note(1, bb.msg.domain.Fetcher, "%s files %s" % (p4cmd, depot))
- p4file = os.popen("%s files %s" % (p4cmd, depot))
+ bb.msg.note(1, bb.msg.domain.Fetcher, "%s%s files %s" % (p4cmd, p4opt, depot))
+ p4file = os.popen("%s%s files %s" % (p4cmd, p4opt, depot))
if not p4file:
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:]
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
if count == 0:
diff --git a/bitbake/lib/bb/fetch/svn.py b/bitbake/lib/bb/fetch/svn.py
index 5e5b31b3ad..aead1629b3 100644
--- a/bitbake/lib/bb/fetch/svn.py
+++ b/bitbake/lib/bb/fetch/svn.py
@@ -114,13 +114,15 @@ class Svn(Fetch):
if command is "info":
svncmd = "%s info %s %s://%s/%s/" % (basecmd, " ".join(options), proto, svnroot, ud.module)
else:
+ suffix = ""
if ud.revision:
options.append("-r %s" % ud.revision)
+ suffix = "@%s" % (ud.revision)
elif ud.date:
options.append("-r {%s}" % ud.date)
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":
svncmd = "%s update %s" % (basecmd, " ".join(options))
else:
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py
index 782dfb0b78..64ab032c3c 100644
--- a/bitbake/lib/bb/taskdata.py
+++ b/bitbake/lib/bb/taskdata.py
@@ -340,7 +340,10 @@ class TaskData:
self.add_provider_internal(cfgData, dataCache, item)
except bb.providers.NoProvider:
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
targetid = self.getbuild_id(item)
self.remove_buildtarget(targetid)
@@ -358,7 +361,10 @@ class TaskData:
return
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))
raise bb.providers.NoProvider(item)
@@ -536,7 +542,10 @@ class TaskData:
except bb.providers.NoProvider:
targetid = self.getbuild_id(target)
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
self.remove_buildtarget(targetid)
for target in self.get_unresolved_run_targets(dataCache):
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index cc3d03f609..5015779f8d 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -323,7 +323,6 @@ def preserved_envvars_list():
'HOME',
'LANG',
'LOGNAME',
- 'OEROOT',
'PATH',
'PWD',
'SESSION_MANAGER',