diff options
Diffstat (limited to 'scripts/lib/wic/utils/oe/misc.py')
-rw-r--r-- | scripts/lib/wic/utils/oe/misc.py | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/scripts/lib/wic/utils/oe/misc.py b/scripts/lib/wic/utils/oe/misc.py new file mode 100644 index 0000000000..87e30411b0 --- /dev/null +++ b/scripts/lib/wic/utils/oe/misc.py @@ -0,0 +1,181 @@ +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# Copyright (c) 2013, Intel Corporation. +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# DESCRIPTION +# This module provides a place to collect various wic-related utils +# for the OpenEmbedded Image Tools. +# +# AUTHORS +# Tom Zanussi <tom.zanussi (at] linux.intel.com> +# + +from wic import msger +from wic.utils import runner + +def __exec_cmd(cmd_and_args, as_shell = False, catch = 3): + """ + Execute command, catching stderr, stdout + + Need to execute as_shell if the command uses wildcards + """ + msger.debug("__exec_cmd: %s" % cmd_and_args) + args = cmd_and_args.split() + msger.debug(args) + + if (as_shell): + rc, out = runner.runtool(cmd_and_args, catch) + else: + rc, out = runner.runtool(args, catch) + out = out.strip() + msger.debug("__exec_cmd: output for %s (rc = %d): %s" % \ + (cmd_and_args, rc, out)) + + return (rc, out) + + +def exec_cmd(cmd_and_args, as_shell = False, catch = 3): + """ + Execute command, catching stderr, stdout + + Exits if rc non-zero + """ + rc, out = __exec_cmd(cmd_and_args, as_shell, catch) + + if rc != 0: + msger.error("exec_cmd: %s returned '%s' instead of 0" % (cmd_and_args, rc)) + + return out + + +def exec_cmd_quiet(cmd_and_args, as_shell = False): + """ + Execute command, catching nothing in the output + + Exits if rc non-zero + """ + return exec_cmd(cmd_and_args, as_shell, 0) + + +def exec_native_cmd(cmd_and_args, native_sysroot, catch = 3): + """ + Execute native command, catching stderr, stdout + + Need to execute as_shell if the command uses wildcards + + Always need to execute native commands as_shell + """ + native_paths = \ + "export PATH=%s/sbin:%s/usr/sbin:%s/usr/bin:$PATH" % \ + (native_sysroot, native_sysroot, native_sysroot) + native_cmd_and_args = "%s;%s" % (native_paths, cmd_and_args) + msger.debug("exec_native_cmd: %s" % cmd_and_args) + + args = cmd_and_args.split() + msger.debug(args) + + rc, out = __exec_cmd(native_cmd_and_args, True, catch) + + if rc == 127: # shell command-not-found + msger.error("A native (host) program required to build the image " + "was not found (see details above). Please make sure " + "it's installed and try again.") + + return (rc, out) + + +def exec_native_cmd_quiet(cmd_and_args, native_sysroot): + """ + Execute native command, catching nothing in the output + + Need to execute as_shell if the command uses wildcards + + Always need to execute native commands as_shell + """ + return exec_native_cmd(cmd_and_args, native_sysroot, 0) + + +# kickstart doesn't support variable substution in commands, so this +# is our current simplistic scheme for supporting that + +wks_vars = dict() + +def get_wks_var(key): + return wks_vars[key] + +def add_wks_var(key, val): + wks_vars[key] = val + +BOOTDD_EXTRA_SPACE = 16384 +IMAGE_EXTRA_SPACE = 10240 + +__bitbake_env_lines = "" + +def set_bitbake_env_lines(bitbake_env_lines): + global __bitbake_env_lines + __bitbake_env_lines = bitbake_env_lines + +def get_bitbake_env_lines(): + return __bitbake_env_lines + +def find_bitbake_env_lines(image_name): + """ + If image_name is empty, plugins might still be able to use the + environment, so set it regardless. + """ + if image_name: + bitbake_env_cmd = "bitbake -e %s" % image_name + else: + bitbake_env_cmd = "bitbake -e" + rc, bitbake_env_lines = __exec_cmd(bitbake_env_cmd) + if rc != 0: + print "Couldn't get '%s' output." % bitbake_env_cmd + return None + + return bitbake_env_lines + +def find_artifact(bitbake_env_lines, variable): + """ + Gather the build artifact for the current image (the image_name + e.g. core-image-minimal) for the current MACHINE set in local.conf + """ + retval = "" + + for line in bitbake_env_lines.split('\n'): + if (get_line_val(line, variable)): + retval = get_line_val(line, variable) + break + + return retval + +def get_line_val(line, key): + """ + Extract the value from the VAR="val" string + """ + if line.startswith(key + "="): + stripped_line = line.split('=')[1] + stripped_line = stripped_line.replace('\"', '') + return stripped_line + return None + +def get_bitbake_var(key): + for line in __bitbake_env_lines.split('\n'): + if (get_line_val(line, key)): + val = get_line_val(line, key) + return val + return None |