build_packages: arrayify things

Convert strings-used-as-lists to arrays.  This makes the code nicer.

Further, package the variable initializations together.  There is no
need to have them all intermingled.  e.g. we set up EMERGE_FLAGS all
in the same region rather than doing some at the top, some in the
middle, and then more at the bottom.

BUG=chromium-os:19140
TEST=`cbuildbot {{x86,amd64}-generic,daisy}-paladin {amd64,arm,x86}-generic-full stout-release` passed

Change-Id: I593e01e6f450370545335144b06f814f306019df
Reviewed-on: https://gerrit.chromium.org/gerrit/33265
Reviewed-by: Brian Harring <ferringb@chromium.org>
Reviewed-by: David James <davidjames@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Ready: Mike Frysinger <vapier@chromium.org>
This commit is contained in:
Mike Frysinger 2012-09-13 22:33:12 -04:00 committed by Gerrit
parent cc6d7b12a0
commit 4114c79297

View File

@ -80,88 +80,89 @@ if [[ -z "${FLAGS_board}" ]]; then
exit 1
fi
EMERGE_FLAGS="--backtrack=30 --select"
EMERGE_CMD="emerge"
EMERGE_BOARD_CMD="emerge-${FLAGS_board}"
CHROMITE_BIN="${GCLIENT_ROOT}/chromite/bin"
# Before we can run any tools, we need to update chroot or setup_board.
UPDATE_ARGS=()
if [ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=( --fast )
else
UPDATE_ARGS+=( --nofast )
fi
if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=( --usepkg )
else
UPDATE_ARGS+=( --nousepkg )
fi
if [[ "${FLAGS_jobs}" -ne -1 ]]; then
UPDATE_ARGS+=( --jobs=${FLAGS_jobs} )
fi
if [ "${FLAGS_reuse_pkgs_from_local_boards}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=( --reuse_pkgs_from_local_boards )
fi
if [ "${FLAGS_skip_toolchain_update}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=( --skip_toolchain_update )
fi
if [ "${FLAGS_skip_chroot_upgrade}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=( --skip_chroot_upgrade )
fi
"${SCRIPTS_DIR}"/setup_board --quiet --board=${FLAGS_board} "${UPDATE_ARGS[@]}"
# Setup all the emerge command/flags.
EMERGE_FLAGS=( -uDNv --backtrack=30 --select )
if [[ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]]; then
EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"
EMERGE_BOARD_CMD="${EMERGE_CMD} --board=${FLAGS_board}"
fi
if [[ -n "${EXTRA_BOARD_FLAGS}" ]]; then
EMERGE_BOARD_CMD="${EMERGE_BOARD_CMD} ${EXTRA_BOARD_FLAGS}"
EMERGE_CMD=(
"${CHROMITE_BIN}/parallel_emerge"
--board=${FLAGS_board}
)
else
EMERGE_CMD=( "emerge-${FLAGS_board}" )
fi
EMERGE_CMD+=( ${EXTRA_BOARD_FLAGS} )
if [[ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ||
"${FLAGS_reuse_pkgs_from_local_boards}" -eq "${FLAGS_TRUE}" ]]; then
# Use binary packages. Include all build-time dependencies,
# so as to avoid unnecessary differences between source
# and binary builds.
EMERGE_FLAGS="${EMERGE_FLAGS} --getbinpkg --usepkg --with-bdeps y"
EMERGE_FLAGS+=( --getbinpkg --usepkg --with-bdeps y )
fi
if [[ "${FLAGS_jobs}" -ne -1 ]]; then
EMERGE_FLAGS+=" --jobs=${FLAGS_jobs}"
EMERGE_FLAGS+=( --jobs=${FLAGS_jobs} )
fi
if [[ "${FLAGS_norebuild}" -eq "${FLAGS_FALSE}" ]]; then
EMERGE_FLAGS+=( --rebuild-if-unbuilt )
fi
if [[ "${FLAGS_showoutput}" -eq "${FLAGS_TRUE}" && \
"${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]]; then
# Only parallel_emerge supports --show-output.
EMERGE_FLAGS+=( --show-output )
fi
if [[ "${FLAGS_withdebug}" -eq "${FLAGS_FALSE}" ]]; then
export USE="${USE} -cros-debug"
fi
# Before we can run any tools, we need to update chroot or setup_board.
UPDATE_ARGS=""
if [ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=" --fast"
else
UPDATE_ARGS+=" --nofast"
fi
if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=" --usepkg"
else
UPDATE_ARGS+=" --nousepkg"
fi
if [[ "${FLAGS_jobs}" -ne -1 ]]; then
UPDATE_ARGS+=" --jobs=${FLAGS_jobs}"
fi
if [ "${FLAGS_reuse_pkgs_from_local_boards}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=" --reuse_pkgs_from_local_boards"
fi
if [ "${FLAGS_skip_toolchain_update}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=" --skip_toolchain_update"
fi
if [ "${FLAGS_skip_chroot_upgrade}" -eq "${FLAGS_TRUE}" ]; then
UPDATE_ARGS+=" --skip_chroot_upgrade"
fi
${SCRIPTS_DIR}/setup_board --quiet --board=${FLAGS_board} ${UPDATE_ARGS}
if [ "${FLAGS_noworkon}" -eq "${FLAGS_FALSE}" ]; then
# Build cros_workon packages when they are changed.
LIST_MODIFIED_PACKAGES="${CHROMITE_BIN}/cros_list_modified_packages"
CROS_WORKON_PKGS=$("${LIST_MODIFIED_PACKAGES}" --board=${FLAGS_board})
fi
# TODO(anush): Make chrome a fake cros-workon package.
if [[ -n "${CHROME_ORIGIN}" ]]; then
CROS_WORKON_PKGS="${CROS_WORKON_PKGS} chromeos-base/chromeos-chrome"
fi
PACKAGES="chromeos-base/chromeos"
# Figure out which packages we should be building.
PACKAGES=( chromeos-base/chromeos )
if [[ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]]; then
PACKAGES="${PACKAGES} chromeos-base/chromeos-dev"
PACKAGES+=( chromeos-base/chromeos-dev )
fi
if [[ "${FLAGS_withfactory}" -eq "${FLAGS_TRUE}" ]]; then
PACKAGES="${PACKAGES} chromeos-base/chromeos-factory"
PACKAGES="${PACKAGES} chromeos-base/chromeos-factoryinstall"
PACKAGES="${PACKAGES} chromeos-base/factorytest-init"
PACKAGES="${PACKAGES} chromeos-base/chromeos-hwid"
PACKAGES+=( chromeos-base/chromeos-factory )
PACKAGES+=( chromeos-base/chromeos-factoryinstall )
PACKAGES+=( chromeos-base/factorytest-init )
PACKAGES+=( chromeos-base/chromeos-hwid )
fi
if [[ "${FLAGS_withtest}" -eq "${FLAGS_TRUE}" ]]; then
PACKAGES="${PACKAGES} chromeos-base/chromeos-test"
PACKAGES+=( chromeos-base/chromeos-test )
fi
if [[ "${FLAGS_withautotest}" -eq "${FLAGS_TRUE}" ]]; then
PACKAGES="${PACKAGES} chromeos-base/autotest-all"
PACKAGES+=( chromeos-base/autotest-all )
fi
# Verify that all packages can be emerged from scratch, without any
@ -171,27 +172,33 @@ if ! OUTPUT=$(emerge-${FLAGS_board} -pe --backtrack=0 ${PACKAGES} 2>&1); then
die_notrace "emerge detected broken ebuilds. See error message above."
fi
for pkg in ${CROS_WORKON_PKGS}; do
EMERGE_FLAGS+=" --reinstall-atoms=${pkg}"
EMERGE_FLAGS+=" --usepkg-exclude=${pkg}"
done
if [[ "${FLAGS_norebuild}" -eq "${FLAGS_FALSE}" ]]; then
EMERGE_FLAGS+=" --rebuild-if-unbuilt"
# Build cros_workon packages when they are changed.
CROS_WORKON_PKGS=()
if [ "${FLAGS_noworkon}" -eq "${FLAGS_FALSE}" ]; then
LIST_MODIFIED_PACKAGES="${CHROMITE_BIN}/cros_list_modified_packages"
CROS_WORKON_PKGS+=( $("${LIST_MODIFIED_PACKAGES}" --board=${FLAGS_board}) )
fi
if [[ "${FLAGS_showoutput}" -eq "${FLAGS_TRUE}" && \
"${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]]; then
# Only parallel_emerge supports --show-output.
EMERGE_FLAGS+=" --show-output"
# TODO(anush): Make chrome a fake cros-workon package.
if [[ -n "${CHROME_ORIGIN}" ]]; then
CROS_WORKON_PKGS+=( chromeos-base/chromeos-chrome )
fi
if [[ ${#CROS_WORKON_PKGS[@]} -gt 0 ]]; then
EMERGE_FLAGS+=(
--reinstall-atoms="${CROS_WORKON_PKGS[*]}"
--usepkg-exclude="${CROS_WORKON_PKGS[*]}"
)
fi
# Prepare tmp file to capture emerge output from tee.
tmpfile=$(mktemp -t tmp.build_packages-emerge.XXXXXX)
trap "rm -f '${tmpfile}'" EXIT
info "Merging board packages ${PACKAGES}"
info "Merging board packages ${PACKAGES[*]}"
(
set -o pipefail
sudo -E ${EMERGE_BOARD_CMD} -uDNv ${EMERGE_FLAGS} ${PACKAGES} | \
sudo -E "${EMERGE_CMD[@]}" "${EMERGE_FLAGS[@]}" "${PACKAGES[@]}" | \
tee "${tmpfile}"
)