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)