#!/bin/bash
# Copyright 2021 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# See the help string below.

# The input ebuild (must be a cros-rust ebuild). sync was chosen because it is
# a first party crate that sets CROS_WORKON_OUTOFTREE_BUILD so unpack is fast.
: "${CATEGORY:="dev-rust"}"
: "${PN:="sync"}"
: "${PVR:="9999"}"

: "${CARGO_HOME:="${HOME}/.cargo"}"
: "${CARGO_HOME_BACKUP:="${HOME}/cargo.backup"}"

# Help string.
read -r -d '' HELP_STRING <<EOF
Copy the cargo_home used by cros-rust.eclass to \$CARGO_HOME, by unpacking:
    ${CATEGORY}/${PN}-${PVR}  (\${CATEGORY}/\${PN}-\${PVR})
and copying its cargo_home to:
    ${CARGO_HOME}
If the above directory already exists it will be moved to (\$CARGO_HOME_BACKUP):
    ${CARGO_HOME_BACKUP}
replacing any previous copy.

NOTE: If the BOARD environment variable is set, its registry will be used.
Otherwise, the cros_rust_registry from the host is used. Currently,
    BOARD="${BOARD}"
Also, stale Cargo.lock files will need to be deleted for local builds to work
properly.

If any arguments are set, this help string is displayed.
EOF

if [[ "$#" -gt 0 ]]; then
  echo "${HELP_STRING}"
  exit 1
fi

set -x
set -e

SRC_PATH="/mnt/host/source"


PF="${PN}-${PVR}"


if [[ -z "${BOARD}" ]]; then
  # pkg_setup needs root.
  EBUILD=( "sudo" "ebuild" )
  NEW_CARGO_HOME="/var/tmp/portage/${CATEGORY}/${PF}/work/cargo_home"
else
  EBUILD=( "ebuild-${BOARD}" )
  NEW_CARGO_HOME="/build/${BOARD}/tmp/portage/${CATEGORY}/${PF}/work/cargo_home"
fi

"${EBUILD[@]}" "${SRC_PATH}/src/third_party/chromiumos-overlay/${CATEGORY}/${PN}/${PF}.ebuild" clean unpack || die

if [[ ! -d "${NEW_CARGO_HOME}" ]]; then
  echo "Failed to generate new cargo home: '${NEW_CARGO_HOME}'" >&2
  exit 1
fi

rm -rf "${CARGO_HOME_BACKUP}"
if [[ -e "${CARGO_HOME}" ]]; then
  mv "${CARGO_HOME}" "${CARGO_HOME_BACKUP}"
fi

mv "${NEW_CARGO_HOME}" "${CARGO_HOME}"

echo "done"
