diff options
author | Dave Cobbley <david.j.cobbley@linux.intel.com> | 2018-08-14 20:05:37 +0300 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2018-08-23 04:26:31 +0300 |
commit | eb8dc40360f0cfef56fb6947cc817a547d6d9bc6 (patch) | |
tree | de291a73dc37168da6370e2cf16c347d1eba9df8 /poky/meta/classes/terminal.bbclass | |
parent | 9c3cf826d853102535ead04cebc2d6023eff3032 (diff) | |
download | openbmc-eb8dc40360f0cfef56fb6947cc817a547d6d9bc6.tar.xz |
[Subtree] Removing import-layers directory
As part of the move to subtrees, need to bring all the import layers
content to the top level.
Change-Id: I4a163d10898cbc6e11c27f776f60e1a470049d8f
Signed-off-by: Dave Cobbley <david.j.cobbley@linux.intel.com>
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'poky/meta/classes/terminal.bbclass')
-rw-r--r-- | poky/meta/classes/terminal.bbclass | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/poky/meta/classes/terminal.bbclass b/poky/meta/classes/terminal.bbclass new file mode 100644 index 0000000000..a27e10c6ec --- /dev/null +++ b/poky/meta/classes/terminal.bbclass @@ -0,0 +1,105 @@ +OE_TERMINAL ?= 'auto' +OE_TERMINAL[type] = 'choice' +OE_TERMINAL[choices] = 'auto none \ + ${@oe_terminal_prioritized()}' + +OE_TERMINAL_EXPORTS += 'EXTRA_OEMAKE CACHED_CONFIGUREVARS CONFIGUREOPTS EXTRA_OECONF' +OE_TERMINAL_EXPORTS[type] = 'list' + +XAUTHORITY ?= "${HOME}/.Xauthority" +SHELL ?= "bash" + +def oe_terminal_prioritized(): + import oe.terminal + return " ".join(o.name for o in oe.terminal.prioritized()) + +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') or "run.{func}.{pid}" + runfile = runfmt.format(func=cmd_func, task=cmd_func, taskfunc=cmd_func, pid=os.getpid()) + runfile = os.path.join(d.getVar('T'), runfile) + bb.utils.mkdirhier(os.path.dirname(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, 0o755) + + return runfile + +def oe_terminal(command, title, d): + import oe.data + import oe.terminal + + envdata = bb.data.init() + + for v in os.environ: + 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) + if value is not None: + os.environ[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"] + 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 envdata: + continue + value = origbbenv.getVar(key) + if value is not None: + os.environ[key] = str(value) + envdata.setVar(key, str(value)) + envdata.setVarFlag(key, 'export', '1') + + # Use original PATH as a fallback + path = d.getVar('PATH') + ":" + origbbenv.getVar('PATH') + os.environ['PATH'] = path + envdata.setVar('PATH', path) + + # A complex PS1 might need more escaping of chars. + # Lets not export PS1 instead. + envdata.delVar("PS1") + + # 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, None, 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, None, d) + except oe.terminal.NoSupportedTerminals as nosup: + nosup.terms.remove("false") + cmds = '\n\t'.join(nosup.terms).replace("{command}", + "do_terminal").replace("{title}", title) + bb.fatal('No valid terminal found, unable to open devshell.\n' + + 'Tried the following commands:\n\t%s' % cmds) + except oe.terminal.ExecutionError as exc: + bb.fatal('Unable to spawn terminal %s: %s' % (terminal, exc)) + +oe_terminal[vardepsexclude] = "BB_ORIGENV" |