#!/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.
"

# 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."

# 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
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"
# depot_tools doesn't support Python 3 at all.
# TODO(crbug.com/984182): Drop EPYTHON setting if they ever finish.
EPYTHON="python2" 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
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 --oneshot --getbinpkg --deep --usepkgonly )
  EMERGE_FLAGS+=(
    $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host-post-cross)
  )
  sudo -E ${EMERGE_CMD} "${EMERGE_FLAGS[@]}"

  # Install nobdeps packages only when binary pkgs are available, since we don't
  # want to accidentally pull in build deps for a rebuild.
  EMERGE_FLAGS=( -uNv --with-bdeps=n --oneshot --getbinpkg --deep --usepkgonly )
  sudo -E "${EMERGE_CMD}" "${EMERGE_FLAGS[@]}" virtual/target-sdk-nobdeps
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
