Synced repos to: 60208
diff --git a/utils/misc.py b/utils/misc.py
new file mode 100644
index 0000000..9111c6b
--- /dev/null
+++ b/utils/misc.py
@@ -0,0 +1,158 @@
+#!/usr/bin/python2.6
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Utilities for toolchain build."""
+
+__author__ = "asharif@google.com (Ahmad Sharif)"
+
+import hashlib
+import os
+import re
+import stat
+import command_executer
+import logger
+import tempfile
+from contextlib import contextmanager
+
+
+def ApplySubs(string, *substitutions):
+ for pattern, replacement in substitutions:
+ string = re.sub(pattern, replacement, string)
+ return string
+
+
+def GetFilenameFromString(string):
+ return ApplySubs(string,
+ ("/", "__"),
+ ("\s", "_"),
+ ("=", ""),
+ ("\"", ""))
+
+
+def GetRoot(scr_name):
+ """Break up pathname into (dir+name)."""
+ abs_path = os.path.abspath(scr_name)
+ return (os.path.dirname(abs_path), os.path.basename(abs_path))
+
+
+def FormatQuotedCommand(command):
+ return ApplySubs(command,
+ ("\"", "\\\""))
+
+
+def FormatCommands(commands):
+ return ApplySubs(str(commands),
+ ("&&", "&&\n"),
+ (";", ";\n"),
+ ("\n+\s*", "\n"))
+
+
+def GetImageDir(chromeos_root, board):
+ return os.path.join(chromeos_root,
+ "src",
+ "build",
+ "images",
+ board)
+
+
+def LabelLatestImage(chromeos_root, board, label):
+ image_dir = GetImageDir(chromeos_root, board)
+ latest_image_dir = os.path.join(image_dir, "latest")
+ latest_image_dir = os.path.realpath(latest_image_dir)
+ latest_image_dir = os.path.basename(latest_image_dir)
+ with WorkingDirectory(image_dir):
+ command = "ln -sf -T %s %s" % (latest_image_dir, label)
+ ce = command_executer.GetCommandExecuter()
+ return ce.RunCommand(command)
+
+
+def DoesLabelExist(chromeos_root, board, label):
+ image_label = os.path.join(GetImageDir(chromeos_root, board),
+ label)
+ return os.path.exists(image_label)
+
+
+def GetBuildPackagesCommand(board, usepkg=False):
+ if usepkg:
+ usepkg_flag = "--usepkg"
+ else:
+ usepkg_flag = "--nousepkg"
+ return ("./build_packages %s --withdev --withtest --withautotest "
+ "--skip_toolchain_update --nowithdebug --board=%s" %
+ (usepkg_flag, board))
+
+
+def GetBuildImageCommand(board):
+ return "./build_image --board=%s test" % board
+
+
+def GetSetupBoardCommand(board, gcc_version=None, binutils_version=None,
+ usepkg=None, force=None):
+ options = []
+
+ if gcc_version:
+ options.append("--gcc_version=%s" % gcc_version)
+
+ if binutils_version:
+ options.append("--binutils_version=%s" % binutils_version)
+
+ if usepkg:
+ options.append("--usepkg")
+ else:
+ options.append("--nousepkg")
+
+ if force:
+ options.append("--force")
+
+ return "./setup_board --board=%s %s" % (board, " ".join(options))
+
+
+def CanonicalizePath(path):
+ path = os.path.expanduser(path)
+ path = os.path.realpath(path)
+ return path
+
+
+def GetCtargetFromBoard(board, chromeos_root):
+ base_board = board.split("_")[0]
+ command = ("source "
+ "../platform/dev/toolchain_utils.sh; get_ctarget_from_board %s" %
+ base_board)
+ ce = command_executer.GetCommandExecuter()
+ ret, out, err = ce.ChrootRunCommand(chromeos_root,
+ command,
+ return_output=True)
+ if ret != 0:
+ raise ValueError("Board %s is invalid!" % board)
+ return out.strip()
+
+
+def GetChromeSrcDir():
+ return "var/cache/distfiles/target/chrome-src/src"
+
+
+def GetEnvStringFromDict(env_dict):
+ return " ".join(["%s=\"%s\"" % var for var in env_dict.items()])
+
+
+def GetAllImages(chromeos_root, board):
+ ce = command_executer.GetCommandExecuter()
+ command = ("find %s/src/build/images/%s -name chromiumos_test_image.bin" %
+ (chromeos_root, board))
+ ret, out, err = ce.RunCommand(command, return_output=True)
+ return out.splitlines()
+
+
+@contextmanager
+def WorkingDirectory(new_dir):
+ old_dir = os.getcwd()
+ if old_dir != new_dir:
+ msg = "cd %s" % new_dir
+ logger.GetLogger().LogCmd(msg)
+ os.chdir(new_dir)
+ yield new_dir
+ if old_dir != new_dir:
+ msg = "cd %s" % old_dir
+ logger.GetLogger().LogCmd(msg)
+ os.chdir(old_dir)