setup_board: use sudo_multi in more places

This gives a side speed up and a slight clean up.

While we're here, merge a few commands (like mkdirs).

BUG=chromium-os:34519
TEST=`./setup_board --board=lumpy` output looked ok
TEST=`cbuildbot {x86,amd64,arm}-generic-full chromiumos-sdk` worked

Change-Id: I8d03448e2df549e76d320cc23ab9d36242c3b118
Reviewed-on: https://gerrit.chromium.org/gerrit/33486
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Zdenek Behan <zbehan@chromium.org>
Commit-Ready: Mike Frysinger <vapier@chromium.org>
diff --git a/setup_board b/setup_board
index 029d3aa..0249471 100755
--- a/setup_board
+++ b/setup_board
@@ -201,6 +201,7 @@
 # Install all of the stuff that depends on the toolchain versions
 # into the board root.
 install_toolchain_in_board() {
+  local cmds
   local binutils_ver=$(cross_get_version binutils)
   local gcc_ver=$(cross_get_version gcc)
   local libc_ver=$(cross_get_version glibc)
@@ -226,23 +227,27 @@
     fi
     copy_gcc_libs "${BOARD_ROOT}" "cross-$FLAGS_toolchain/gcc-$gcc_ver"
   else
-    sudo mkdir -p ${BOARD_ROOT}/usr/lib64
-    sudo ln -sf ${BOARD_ROOT}/usr/lib64 ${BOARD_ROOT}/usr/lib
-    sudo mkdir -p ${BOARD_ROOT}/lib64
-    sudo ln -sf ${BOARD_ROOT}/lib64 ${BOARD_ROOT}/lib
+    cmds=(
+      "mkdir -p '${BOARD_ROOT}'{/usr,}/lib64 '${BOARD_ROOT}/usr/lib/debug'"
+      "ln -sf '${BOARD_ROOT}/usr/lib64' '${BOARD_ROOT}/usr/lib'"
+      "ln -sf '${BOARD_ROOT}/lib64' '${BOARD_ROOT}/lib'"
+    )
+    sudo_multi "${cmds[@]}"
     LIBC_PATH="${PKGDIR}/sys-libs/${LIBC_TAR}"
     sudo emerge --oneshot --nodeps -k --root=${BOARD_ROOT} =sys-libs/glibc-${libc_ver}
-    sudo mkdir -p ${BOARD_ROOT}/usr/lib/debug
     # TODO: we have no debug
     GCC_PKG=sys-devel/gcc-$gcc_ver
   fi
 
   # Some header files are needed also for rpcbind (NFS support)
   # TODO: Figure out a better way of doing this too?
-  sudo cp -a /usr/include/rpcsvc/mount.h "${BOARD_ROOT}/usr/include/rpcsvc"
-  sudo cp -a /usr/include/rpcsvc/rquota.h "${BOARD_ROOT}/usr/include/rpcsvc"
-  sudo cp -a /usr/include/rpcsvc/nfs_prot.h "${BOARD_ROOT}/usr/include/rpcsvc"
-  sudo cp -a /usr/include/rpcsvc/yppasswd.h "${BOARD_ROOT}/usr/include/rpcsvc"
+  cmds=(
+    "cp -a /usr/include/rpcsvc/mount.h '${BOARD_ROOT}/usr/include/rpcsvc'"
+    "cp -a /usr/include/rpcsvc/rquota.h '${BOARD_ROOT}/usr/include/rpcsvc'"
+    "cp -a /usr/include/rpcsvc/nfs_prot.h '${BOARD_ROOT}/usr/include/rpcsvc'"
+    "cp -a /usr/include/rpcsvc/yppasswd.h '${BOARD_ROOT}/usr/include/rpcsvc'"
+  )
+  sudo_multi "${cmds[@]}"
 
   install_toolchain_in_provided "$binutils_ver" "$gcc_ver" "$libc_ver"
 
@@ -458,7 +463,9 @@
   fi
 fi
 
-sudo mkdir -p "${BOARD_ROOT}" "${BOARD_ETC}" "${BOARD_PROFILE}"
+cmds=(
+  "mkdir -p '${BOARD_ROOT}' '${BOARD_ETC}' '${BOARD_PROFILE}'"
+)
 
 # Setup the make.confs. We use the following:
 #    make.conf             <- Overall target make.conf [arm, x86, etc. version]
@@ -466,25 +473,30 @@
 #    make.conf.common      <- Common settings across all targets
 #    make.conf.board       <- Optional board-supplied make.conf
 if ${HOST_BOARD}; then
-  sudo ln -sf "${CHROMIUMOS_CONFIG}/make.conf.${BOARD}" \
-    "${BOARD_ETC}/make.conf"
-  sudo cp -f "/etc/make.conf.host_setup" "${BOARD_ETC}/"
+  cmds+=(
+    "ln -sf '${CHROMIUMOS_CONFIG}/make.conf.${BOARD}' \
+      '${BOARD_ETC}/make.conf'"
+    "cp -f '/etc/make.conf.host_setup' '${BOARD_ETC}/'"
 
-  # Setting up symlinks for bootstrapping multilib.
-  # See http://crosbug.com/14498
-  sudo mkdir -p "${BOARD_ROOT}/usr/lib64" "${BOARD_ROOT}/lib64"
-  sudo ln -sf lib64 "${BOARD_ROOT}/lib"
-  sudo ln -sf lib64 "${BOARD_ROOT}/usr/lib"
+    # Setting up symlinks for bootstrapping multilib.
+    # See http://crosbug.com/14498
+    "mkdir -p '${BOARD_ROOT}'{/usr,}/lib64"
+    "ln -sf lib64 '${BOARD_ROOT}/lib'"
+    "ln -sf lib64 '${BOARD_ROOT}/usr/lib'"
 
-  # Copying some files for bootstrapping empty chroot.
-  # See http://crosbug.com/14499
-  sudo mkdir -p  ${BOARD_ETC}/xml/
-  sudo cp /etc/xml/catalog ${BOARD_ETC}/xml/
-  sudo mkdir -p  ${BOARD_ETC}/init.d/
-  sudo cp /etc/init.d/functions.sh ${BOARD_ETC}/init.d/
+    # Copying some files for bootstrapping empty chroot.
+    # See http://crosbug.com/14499
+    "mkdir -p '${BOARD_ETC}'/{init.d,xml}"
+    "cp /etc/xml/catalog '${BOARD_ETC}'/xml/"
+    "cp /etc/init.d/functions.sh '${BOARD_ETC}'/init.d/"
+  )
 fi
-sudo ln -sf "${CHROMIUMOS_CONFIG}/make.conf.common-target" \
-  "${BOARD_ETC}/make.conf.common"
+cmds+=(
+  "ln -sf '${CHROMIUMOS_CONFIG}/make.conf.common-target' \
+    '${BOARD_ETC}/make.conf.common'"
+)
+sudo_multi "${cmds[@]}"
+
 sudo_clobber "${BOARD_SETUP}" <<EOF
 # Created by setup_board
 CHOST="${FLAGS_toolchain}"
@@ -504,9 +516,12 @@
   install_toolchain_in_board
 fi
 # Setup make.globals and the profile.
-sudo touch /etc/make.conf.user
-sudo ln -sf /etc/make.globals "${BOARD_ROOT}/etc/make.globals"
-sudo ln -sf /etc/make.conf.user "${BOARD_ROOT}/etc/make.conf.user"
+cmds=(
+  "touch /etc/make.conf.user"
+  "ln -sf /etc/make.globals '${BOARD_ROOT}/etc/make.globals'"
+  "ln -sf /etc/make.conf.user '${BOARD_ROOT}/etc/make.conf.user'"
+)
+sudo_multi "${cmds[@]}"
 
 # Select the profile to build based on the board and profile passed to
 # setup_board.  The developer can later change profiles by running