#!/bin/bash

# Copyright (c) 2010 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.

# Script that emerges packages and their dependencies from a host development
# machine onto a target Chromium OS device
#
# NOTE: This script must be run from the chromiumos build chroot environment.
#

# Load common constants.  This should be the first executable line.
# The path to common.sh should be relative to your script's location.
. "$(dirname "$0")/../../scripts/common.sh"

# Script must be run inside the chroot
assert_inside_chroot

get_default_board

# Flags
DEFINE_string board "$DEFAULT_BOARD" \
  "The board to build packages for."
DEFINE_boolean usepkg $FLAGS_FALSE \
  "Use binary packages to bootstrap build when possible."
DEFINE_string build_root "/build" \
  "The root location for board sysroots."
DEFINE_integer jobs -1 \
  "How many packages to build in parallel at maximum."
DEFINE_boolean unmerge $FLAGS_FALSE \
  "Whether to unmerge the package versus emerge it."
DEFINE_integer retries -1 \
  "On build failure, the number of times to retry"
DEFINE_boolean onstatefuldev $FLAGS_TRUE \
  "Build packages and install them into stateful partition on device."
DEFINE_boolean installmask $FLAGS_TRUE \
  "Use INSTALL_MASK to shrink the resulting image."
DEFINE_string remote "" "remote hostname/IP of running Chromium OS instance"

# Parse command line
FLAGS_HELP="usage: $0 [flags]"
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"

# Die on any errors.
set -e

# Checks $1 and prints out $2 is required before exiting if $1 does not exist
check_args() {
  if [ -z "${1}" ] ; then
    echo "Error: ${2} is required."
    exit 1
  fi
}

# Clean up function for mount point
cleanup_sshfs_mount() {
  echo "Cleaning up mount point"
  sudo umount "${REMOTE_ROOT_DIR}"
}

check_args "${FLAGS_board}"
check_args "${FLAGS_ARGV}" "Emerge package name"

EMERGE_FLAGS=""
[[ $FLAGS_usepkg -eq $FLAGS_TRUE ]] &&
  EMERGE_FLAGS="${EMERGE_FLAGS} --getbinpkg --usepkg --with-bdeps y"

INSTALL_MASK=""
[[ ${FLAGS_installmask} -eq ${FLAGS_TRUE} ]] && \
  INSTALL_MASK="${DEFAULT_INSTALL_MASK}"

EMERGE_JOBS=
[[ ${FLAGS_jobs} -ne -1 ]] && EMERGE_JOBS="--jobs=${FLAGS_jobs}"

# Duplicate from build_packages to get host packages on system.

# Skip building on host if we are unmerging.
if [ ${FLAGS_unmerge} -eq ${FLAGS_FALSE} ] ; then
  eretry sudo emerge -uDNv $EMERGE_FLAGS world

  # Build request and install them onto the sysroot
  for emerge_request in $FLAGS_ARGV; do
    eretry sudo emerge-${FLAGS_board} -uDNv \
      $(remove_quotes "${emerge_request}")
  done
fi

# Name is unique per client.  This allows one to run gmergefs in parallel
# with multiple clients.
REMOTE_ROOT_DIR="${FLAGS_build_root}/${FLAGS_board}/gmergefs/${FLAGS_remote}"

# Default is to install on stateful dev, otherwise install on root.
REMOTE_RELATIVE_PATH=""
[ ${FLAGS_onstatefuldev} -eq $FLAGS_TRUE ] && \
  REMOTE_RELATIVE_PATH="mnt/stateful_partition/dev_image"
REMOTE_PATH="${REMOTE_ROOT_DIR}/${REMOTE_RELATIVE_PATH}"

# Create directory for remote image
sudo mkdir -p "${REMOTE_ROOT_DIR}"

# Mount remote fs into chroot
echo "Enter password for remote machine"
sudo sshfs -o idmap=user -o allow_other -o nonempty -o transform_symlinks \
  "root@${FLAGS_remote}:/" "${REMOTE_ROOT_DIR}"

trap cleanup_sshfs_mount EXIT

# Ensure root path is created for emerge
sudo mkdir -p "${REMOTE_PATH}"

# Same arguments used in build_image to emerge these packages onto the target
for emerge_request in $FLAGS_ARGV; do
  if [ ${FLAGS_unmerge} -eq ${FLAGS_FALSE} ] ; then
    sudo INSTALL_MASK="$INSTALL_MASK" emerge-${FLAGS_board} \
      --root="${REMOTE_PATH}" --root-deps=rdeps \
      --usepkgonly $(remove_quotes "${emerge_request}") $EMERGE_JOBS
  else
    sudo emerge-${FLAGS_board} --unmerge \
      --root="${REMOTE_PATH}" $(remove_quotes "${emerge_request}")
  fi
done

# Update ld.so.cache of root partition if installing to /usr/local
if [ ${FLAGS_onstatefuldev} -eq $FLAGS_TRUE ] ; then
  # Re-run ldconfig to fix /etc/ldconfig.so.cache
  sudo /sbin/ldconfig -r "${REMOTE_ROOT_DIR}"
fi

sync
sudo umount "${REMOTE_ROOT_DIR}"

trap - EXIT
