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

# 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 --select --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
