#!/bin/bash

# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.


. "$(dirname "$0")/common.sh" || exit 1

# Script must run inside the chroot
assert_inside_chroot "$@"

# Do not run as root
assert_not_root_user

# Developer-visible flags.
DEFINE_boolean usepkg $FLAGS_TRUE \
  "Use binary packages to bootstrap."

FLAGS_HELP="usage: $(basename $0) [flags]
Performs an update of the chroot. This script is called as part of
build_packages, so there is typically no need to call this script directly.
"
show_help_if_requested "$@"

# The following options are advanced options, only available to those willing
# to read the source code. They are not shown in help output, since they are
# not needed for the typical developer workflow.
DEFINE_integer jobs -1 \
  "How many packages to build in parallel at maximum."
DEFINE_boolean skip_toolchain_update $FLAGS_FALSE \
  "Don't update the toolchains."
DEFINE_string toolchain_boards "" \
  "Extra toolchains to setup for the specified boards."
DEFINE_boolean eclean ${FLAGS_TRUE} \
  "Run eclean to delete old binpkgs after updating the chroot."
DEFINE_string save_install_plan "" \
  "Save install plan to filename for correct reverse dependency calculation."

# Parse command line flags
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"

# Only now can we die on error.  shflags functions leak non-zero error codes,
# so will die prematurely if 'switch_to_strict_mode' is specified before now.
switch_to_strict_mode

. ${SCRIPTS_DIR}/sdk_lib/make_conf_util.sh

# Run version hooks as pre-update
${SCRIPTS_DIR}/run_chroot_version_hooks

info "Updating chroot"

# Create /etc/make.conf.host_setup.  The file content is regenerated
# from scratch every update.  There are various reasons to do this:
#  + It's cheap, so this is an easy way to guarantee correct content
#    after an upgrade.
#  + Inside make_chroot.sh, we use a temporary version of the file
#    which must be updated before the script completes; that final
#    update happens here.
#  + If the repositories change to add or remove the private
#    overlay, the file may need to be regenerated.
create_host_setup

sudo_clear_shadow_locks /

# First make sure the cross-compilers have the right config settings.
# We don't actually build them yet though as we want to wait for the
# sdk to have all up-to-date packages.
if [ "${FLAGS_skip_toolchain_update}" -eq "${FLAGS_FALSE}" ]; then
  info "Updating cross-compilers"
  TOOLCHAIN_FLAGS=()

  if [[ -n ${FLAGS_toolchain_boards} ]]; then
    TOOLCHAIN_FLAGS+=(
      "--targets=boards"
      "--include-boards=${FLAGS_toolchain_boards}"
    )
  fi

  # This should really only be skipped while bootstrapping.
  if [ "${FLAGS_usepkg}" -eq "${FLAGS_FALSE}" ]; then
    TOOLCHAIN_FLAGS+=( --nousepkg )
  fi
  # Expand the path before sudo, as root doesn't have the same path magic.
  sudo -E $(type -p cros_setup_toolchains) "${TOOLCHAIN_FLAGS[@]}"
fi

# Make sure depot_tools is bootstrapped, so that it can build chromeos-chrome.
info "Bootstrapping depot_tools"
ensure_bootstrap

info "Updating the SDK"

# Perform an update of all the sdk packages in the chroot.
EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"

EMERGE_FLAGS=( -uNv --with-bdeps=y --select )
if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
  EMERGE_FLAGS+=( --getbinpkg )

  # Only update toolchain when binpkgs are available. Toolchain rollout
  # process only takes place when the chromiumos sdk builder finishes
  # a successful build.
  PACKAGES=(
    $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host)
  )
  # Sanity check we got some valid results.
  [[ ${#PACKAGES[@]} -eq 0 ]] && die_notrace "cros_setup_toolchains failed"
  # Update post cross-packages. This is needed to update rust.
  PACKAGES+=(
    $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host-post-cross)
  )
  EMERGE_FLAGS+=(
    $(printf ' --useoldpkg-atoms=%s' "${PACKAGES[@]}")
  )
fi
SAVE_INSTALL_PLAN_FLAGS=()
if [[ ! -z "${FLAGS_save_install_plan}" ]]; then
  SAVE_INSTALL_PLAN_FLAGS=(
    $(printf ' --install-plan-filename=%s' "${FLAGS_save_install_plan}") )
  EMERGE_FLAGS+=( ${SAVE_INSTALL_PLAN_FLAGS[@]} )
fi
if [[ "${FLAGS_jobs}" -ne -1 ]]; then
  EMERGE_FLAGS+=( --jobs="${FLAGS_jobs}" )
fi

# Build cros_workon packages when they are changed.
for pkg in $("${CHROMITE_BIN}/cros_list_modified_packages" --host); do
  EMERGE_FLAGS+=( --reinstall-atoms="${pkg}" --usepkg-exclude="${pkg}" )
done

# Second pass, update everything else.
EMERGE_FLAGS+=( --deep )
sudo -E ${EMERGE_CMD} "${EMERGE_FLAGS[@]}" virtual/target-sdk world

# Install post cross packages if binary pkgs are available.
if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
  # Use --usepkgonly to ensure that packages are not built from source.
  EMERGE_FLAGS=( -uNv --with-bdeps=y --select --getbinpkg --deep --usepkgonly )
  EMERGE_FLAGS+=(
    $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host-post-cross)
  )
  EMERGE_FLAGS+=( ${SAVE_INSTALL_PLAN_FLAGS[@]} )
  sudo -E ${EMERGE_CMD} "${EMERGE_FLAGS[@]}"
fi

# Automatically discard all CONFIG_PROTECT'ed files. Those that are
# protected should not be overwritten until the variable is changed.
# Autodiscard is option "-9" followed by the "YES" confirmation.
printf '%s\nYES\n' -9 | sudo etc-update

# If the user still has old perl modules installed, update them.
"${SCRIPTS_DIR}/build_library/perl_rebuild.sh"

# Finally clean out any stale binpkgs we've accumulated.
if [[ ${FLAGS_eclean} -eq ${FLAGS_TRUE} ]]; then
  info "Running 'eclean -d packages' to clean up stale binpkgs"
  sudo eclean -d packages
fi

command_completed
