#!/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.
#
# Simple wrapper script to build a cros_workon package incrementally.
# You must already be cros_workon'ing the package in question.

. /usr/lib/crosutils/common.sh || exit 1

get_default_board

DEFINE_string board "${DEFAULT_BOARD}" \
    "Board for which to build the package."
DEFINE_boolean test "${FLAGS_FALSE}" \
  "Compile and run tests as well."
DEFINE_boolean reconf "${FLAGS_FALSE}" \
  "Re-run configure and prepare steps."
DEFINE_boolean install "${FLAGS_FALSE}" \
  "Incrementally build and install your package."
DEFINE_boolean scrub "${FLAGS_FALSE}" \
  "Blow away all in-tree files not managed by git."

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

if [ $# -lt 1 ]; then
  echo "Usage: ${0} [OPTIONS] <package (read: ebuild) basename>"
  exit 1
fi

if [ -n "${FLAGS_board}" ]; then
  BOARD_DIR=/build/"${FLAGS_board}"
  EBUILDCMD=ebuild-"${FLAGS_board}"
  EMERGECMD=emerge-"${FLAGS_board}"
  EQUERYCMD=equery-"${FLAGS_board}"
  BOARD_STR="${FLAGS_board}"
  BOARD_KEYWORD="$(portageq-${FLAGS_board} envvar ARCH)"
fi

pkg="${1}"
if [ "${pkg}" = "." ]; then
  if ! pkg=$(git config workon.pkg); then
    die "workon.pkg not set in git config for this project"
  fi
fi

unstable_suffix="9999"
workon_name="${pkg}-${unstable_suffix}"
pkgfile=
workpath=

# Find the ebuild file, ensure the caller is workon'ing the package.
if ! pkgfile=$("${EQUERYCMD}" which "${workon_name}" 2> /dev/null); then
  if ACCEPT_KEYWORDS="~${BOARD_KEYWORD}" "${EQUERYCMD}" which "${workon_name}" \
      > /dev/null 2>&1; then
    die "run 'cros_workon --board ${BOARD_STR} start ${pkg}' first!" 1>&2
  fi
  die "error looking up package ${pkg}"
fi

if [ "${FLAGS_scrub}" = "${FLAGS_TRUE}" ]; then
  warn "--scrub will destroy ALL FILES unknown to git!"
  read -p "Are you sure you want to do this? [y|N]" resp
  if egrep -qi "^y(es)?$" <(echo -n "${resp}"); then
    eval $(${EBUILDCMD} $(${EQUERYCMD} which ${workon_name}) info)
    srcdir=$(readlink -m ${CROS_WORKON_SRCDIR})
    trunkdir=$(readlink -m ${CHROOT_TRUNK_DIR})
    project_path=${srcdir#${trunkdir}/}
    if ! (cd "${GCLIENT_ROOT}/${project_path}" && git clean -dxf); then
      die "Could not scrub source directory"
    fi
  else
    info "Not scrubbing; exiting gracefully"
  fi
  exit 0
fi

# Find the portage work directory for this package.
workpath=$(\
    echo "${pkgfile}" | \
        awk -F '/' '{ print $(NF-2) "/" $(NF-1) }')-"${unstable_suffix}"

# Determine if we're going to do tests, set up commands appropriately.
emerge_features=
to_do="compile"
if [ "${FLAGS_test}" = "${FLAGS_TRUE}" ]; then
  to_do="test"
  emerge_features="test"
  rm -f "/build/${BOARD_STR}/tmp/portage/${workpath}/.tested"
fi

workdir="/build/${BOARD_STR}/tmp/portage/${workpath}/work/${workon_name}"
if [ ! -h "${workdir}" ]; then
  warn "Cleaning up stale workdir: ${workdir}"
  FLAGS_reconf="${FLAGS_TRUE}"  # To force symlinking in the user's src dir.
fi

if [ "${FLAGS_install}" = "${FLAGS_TRUE}" ]; then
  SANDBOX_WRITE=~/trunk CROS_WORKON_INPLACE=1 \
    FEATURES="${emerge_features} ${FEATURES}" "${EMERGECMD}" "${pkg}"
  exit $?
fi

clean=
if [ "${FLAGS_reconf}" = "${FLAGS_TRUE}" ]; then
  clean="clean"
else
  rm -f "/build/${BOARD_STR}/tmp/portage/${workpath}/.compiled"
fi
SANDBOX_WRITE=~/trunk CROS_WORKON_INPLACE=1 \
  "${EBUILDCMD}" "${pkgfile}" ${clean} "${to_do}"
