diff options
| -rw-r--r-- | meta/classes/terminal.bbclass | 41 |
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" | |||
| 11 | SHELL ?= "bash" | 11 | SHELL ?= "bash" |
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | def emit_terminal_func(command, envdata, d): | ||
| 15 | cmd_func = 'do_terminal' | ||
| 16 | |||
| 17 | envdata.setVar(cmd_func, 'exec ' + command) | ||
| 18 | envdata.setVarFlag(cmd_func, 'func', 1) | ||
| 19 | |||
| 20 | runfmt = d.getVar('BB_RUNFMT', True) or "run.{func}.{pid}" | ||
| 21 | runfile = runfmt.format(func=cmd_func, pid=os.getpid()) | ||
| 22 | runfile = os.path.join(d.getVar('T', True), runfile) | ||
| 23 | with open(runfile, 'w') as script: | ||
| 24 | script.write('#!/bin/sh -e\n') | ||
| 25 | bb.data.emit_func(cmd_func, script, envdata) | ||
| 26 | script.write(cmd_func) | ||
| 27 | script.write("\n") | ||
| 28 | os.chmod(runfile, 0755) | ||
| 29 | |||
| 30 | return runfile | ||
| 31 | |||
| 14 | def oe_terminal(command, title, d): | 32 | def oe_terminal(command, title, d): |
| 15 | import oe.data | 33 | import oe.data |
| 16 | import oe.terminal | 34 | import oe.terminal |
| 17 | 35 | ||
| 18 | env = dict() | 36 | envdata = bb.data.init() |
| 19 | 37 | ||
| 20 | for v in os.environ: | 38 | for v in os.environ: |
| 21 | env[v] = os.environ[v] | 39 | envdata.setVar(v, os.environ[v]) |
| 40 | envdata.setVarFlag(v, 'export', 1) | ||
| 22 | 41 | ||
| 23 | for export in oe.data.typed_value('OE_TERMINAL_EXPORTS', d): | 42 | for export in oe.data.typed_value('OE_TERMINAL_EXPORTS', d): |
| 24 | value = d.getVar(export, True) | 43 | value = d.getVar(export, True) |
| 25 | if value is not None: | 44 | if value is not None: |
| 26 | os.environ[export] = str(value) | 45 | os.environ[export] = str(value) |
| 27 | env[export] = str(value) | 46 | envdata.setVar(export, str(value)) |
| 47 | envdata.setVarFlag(export, 'export', 1) | ||
| 28 | if export == "PSEUDO_DISABLED": | 48 | if export == "PSEUDO_DISABLED": |
| 29 | if "PSEUDO_UNLOAD" in os.environ: | 49 | if "PSEUDO_UNLOAD" in os.environ: |
| 30 | del os.environ["PSEUDO_UNLOAD"] | 50 | del os.environ["PSEUDO_UNLOAD"] |
| 31 | if "PSEUDO_UNLOAD" in env: | 51 | envdata.delVar("PSEUDO_UNLOAD") |
| 32 | del env["PSEUDO_UNLOAD"] | ||
| 33 | 52 | ||
| 34 | # Add in all variables from the user's original environment which | 53 | # Add in all variables from the user's original environment which |
| 35 | # haven't subsequntly been set/changed | 54 | # haven't subsequntly been set/changed |
| 36 | origbbenv = d.getVar("BB_ORIGENV", False) or {} | 55 | origbbenv = d.getVar("BB_ORIGENV", False) or {} |
| 37 | for key in origbbenv: | 56 | for key in origbbenv: |
| 38 | if key in env: | 57 | if key in envdata: |
| 39 | continue | 58 | continue |
| 40 | value = origbbenv.getVar(key, True) | 59 | value = origbbenv.getVar(key, True) |
| 41 | if value is not None: | 60 | if value is not None: |
| 42 | os.environ[key] = str(value) | 61 | os.environ[key] = str(value) |
| 43 | env[key] = str(value) | 62 | envdata.setVar(key, str(value)) |
| 63 | envdata.setVarFlag(key, 'export', 1) | ||
| 64 | |||
| 65 | # Replace command with an executable wrapper script | ||
| 66 | command = emit_terminal_func(command, envdata, d) | ||
| 44 | 67 | ||
| 45 | terminal = oe.data.typed_value('OE_TERMINAL', d).lower() | 68 | terminal = oe.data.typed_value('OE_TERMINAL', d).lower() |
| 46 | if terminal == 'none': | 69 | if terminal == 'none': |
| 47 | bb.fatal('Devshell usage disabled with OE_TERMINAL') | 70 | bb.fatal('Devshell usage disabled with OE_TERMINAL') |
| 48 | elif terminal != 'auto': | 71 | elif terminal != 'auto': |
| 49 | try: | 72 | try: |
| 50 | oe.terminal.spawn(terminal, command, title, env, d) | 73 | oe.terminal.spawn(terminal, command, title, None, d) |
| 51 | return | 74 | return |
| 52 | except oe.terminal.UnsupportedTerminal: | 75 | except oe.terminal.UnsupportedTerminal: |
| 53 | bb.warn('Unsupported terminal "%s", defaulting to "auto"' % | 76 | bb.warn('Unsupported terminal "%s", defaulting to "auto"' % |
| @@ -56,7 +79,7 @@ def oe_terminal(command, title, d): | |||
| 56 | bb.fatal('Unable to spawn terminal %s: %s' % (terminal, exc)) | 79 | bb.fatal('Unable to spawn terminal %s: %s' % (terminal, exc)) |
| 57 | 80 | ||
| 58 | try: | 81 | try: |
| 59 | oe.terminal.spawn_preferred(command, title, env, d) | 82 | oe.terminal.spawn_preferred(command, title, None, d) |
| 60 | except oe.terminal.NoSupportedTerminals: | 83 | except oe.terminal.NoSupportedTerminals: |
| 61 | bb.fatal('No valid terminal found, unable to open devshell') | 84 | bb.fatal('No valid terminal found, unable to open devshell') |
| 62 | except oe.terminal.ExecutionError as exc: | 85 | except oe.terminal.ExecutionError as exc: |
