summaryrefslogtreecommitdiffstats
path: root/meta/classes/terminal.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/terminal.bbclass')
-rw-r--r--meta/classes/terminal.bbclass41
1 files changed, 32 insertions, 9 deletions
diff --git a/meta/classes/terminal.bbclass b/meta/classes/terminal.bbclass
index 8cebad4162..ae338e9f57 100644
--- a/meta/classes/terminal.bbclass
+++ b/meta/classes/terminal.bbclass
@@ -11,43 +11,66 @@ XAUTHORITY ?= "${HOME}/.Xauthority"
SHELL ?= "bash"
+def emit_terminal_func(command, envdata, d):
+ cmd_func = 'do_terminal'
+
+ envdata.setVar(cmd_func, 'exec ' + command)
+ envdata.setVarFlag(cmd_func, 'func', 1)
+
+ runfmt = d.getVar('BB_RUNFMT', True) or "run.{func}.{pid}"
+ runfile = runfmt.format(func=cmd_func, pid=os.getpid())
+ runfile = os.path.join(d.getVar('T', True), runfile)
+ with open(runfile, 'w') as script:
+ script.write('#!/bin/sh -e\n')
+ bb.data.emit_func(cmd_func, script, envdata)
+ script.write(cmd_func)
+ script.write("\n")
+ os.chmod(runfile, 0755)
+
+ return runfile
+
def oe_terminal(command, title, d):
import oe.data
import oe.terminal
- env = dict()
+ envdata = bb.data.init()
for v in os.environ:
- env[v] = os.environ[v]
+ envdata.setVar(v, os.environ[v])
+ envdata.setVarFlag(v, 'export', 1)
for export in oe.data.typed_value('OE_TERMINAL_EXPORTS', d):
value = d.getVar(export, True)
if value is not None:
os.environ[export] = str(value)
- env[export] = str(value)
+ envdata.setVar(export, str(value))
+ envdata.setVarFlag(export, 'export', 1)
if export == "PSEUDO_DISABLED":
if "PSEUDO_UNLOAD" in os.environ:
del os.environ["PSEUDO_UNLOAD"]
- if "PSEUDO_UNLOAD" in env:
- del env["PSEUDO_UNLOAD"]
+ envdata.delVar("PSEUDO_UNLOAD")
# Add in all variables from the user's original environment which
# haven't subsequntly been set/changed
origbbenv = d.getVar("BB_ORIGENV", False) or {}
for key in origbbenv:
- if key in env:
+ if key in envdata:
continue
value = origbbenv.getVar(key, True)
if value is not None:
os.environ[key] = str(value)
- env[key] = str(value)
+ envdata.setVar(key, str(value))
+ envdata.setVarFlag(key, 'export', 1)
+
+ # Replace command with an executable wrapper script
+ command = emit_terminal_func(command, envdata, d)
terminal = oe.data.typed_value('OE_TERMINAL', d).lower()
if terminal == 'none':
bb.fatal('Devshell usage disabled with OE_TERMINAL')
elif terminal != 'auto':
try:
- oe.terminal.spawn(terminal, command, title, env, d)
+ oe.terminal.spawn(terminal, command, title, None, d)
return
except oe.terminal.UnsupportedTerminal:
bb.warn('Unsupported terminal "%s", defaulting to "auto"' %
@@ -56,7 +79,7 @@ def oe_terminal(command, title, d):
bb.fatal('Unable to spawn terminal %s: %s' % (terminal, exc))
try:
- oe.terminal.spawn_preferred(command, title, env, d)
+ oe.terminal.spawn_preferred(command, title, None, d)
except oe.terminal.NoSupportedTerminals:
bb.fatal('No valid terminal found, unable to open devshell')
except oe.terminal.ExecutionError as exc: