mirror of
https://git.yoctoproject.org/poky
synced 2026-02-06 16:56:37 +01:00
Currently its hard to run a devshell complete with fakeroot context. This patch allows the fakeroot flag on the task to do this, as with any other task. Since we may need to start X terminal applications, we need to only start the fakeroot session on the final command, hence the hoops this code jumps through. As always with fakeroot, you can break out and run a command without the fake permissions with syntax like "PSEUDO_UNLOAD=1 <command>" [YOCTO #3374] (From OE-Core rev: 0a2662a48eaf0487db043c348e2834bb9cdd0466) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
64 lines
2.1 KiB
Plaintext
64 lines
2.1 KiB
Plaintext
OE_TERMINAL ?= 'auto'
|
|
OE_TERMINAL[type] = 'choice'
|
|
OE_TERMINAL[choices] = 'auto none \
|
|
${@" ".join(o.name \
|
|
for o in oe.terminal.prioritized())}'
|
|
|
|
OE_TERMINAL_EXPORTS += 'EXTRA_OEMAKE'
|
|
OE_TERMINAL_EXPORTS[type] = 'list'
|
|
|
|
XAUTHORITY ?= "${HOME}/.Xauthority"
|
|
SHELL ?= "bash"
|
|
|
|
|
|
def oe_terminal(command, title, d):
|
|
import oe.data
|
|
import oe.terminal
|
|
|
|
env = dict()
|
|
|
|
for v in os.environ:
|
|
env[v] = os.environ[v]
|
|
|
|
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)
|
|
if export == "PSEUDO_DISABLED":
|
|
if "PSEUDO_UNLOAD" in os.environ:
|
|
del os.environ["PSEUDO_UNLOAD"]
|
|
if "PSEUDO_UNLOAD" in env:
|
|
del env["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:
|
|
continue
|
|
value = origbbenv.getVar(key, True)
|
|
if value is not None:
|
|
os.environ[key] = str(value)
|
|
env[key] = str(value)
|
|
|
|
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)
|
|
return
|
|
except oe.terminal.UnsupportedTerminal:
|
|
bb.warn('Unsupported terminal "%s", defaulting to "auto"' %
|
|
terminal)
|
|
except oe.terminal.ExecutionError as exc:
|
|
bb.fatal('Unable to spawn terminal %s: %s' % (terminal, exc))
|
|
|
|
try:
|
|
oe.terminal.spawn_preferred(command, title, env, d)
|
|
except oe.terminal.NoSupportedTerminals:
|
|
bb.fatal('No valid terminal found, unable to open devshell')
|
|
except oe.terminal.ExecutionError as exc:
|
|
bb.fatal('Unable to spawn terminal %s: %s' % (terminal, exc))
|