blob: 23b121d1f950853ee791a88dc78111aa4454b100 [file] [log] [blame]
#!/usr/bin/env bash
# Call gclient and generate a flutter-engine source tarball if one does not
# already exist.
set -eu
DL_DIR=
DOT_GCLIENT=
JOBS=
SCRATCH_DIR=
TARBALL_DL_PATH=
VERSION=
TARBALL_NAME=
term_bold="$(tput smso 2>/dev/null || true)"
term_reset="$(tput rmso 2>/dev/null || true)"
# Print status messages in the same style Buildroot prints.
message() {
printf "%s>>> flutter-engine %s %s%s\n" "${term_bold}" "${VERSION}" "${1}" "${term_reset}"
}
parse_opts() {
local o O opts
o='d:j:s:t:v:'
O='dot-gclient:,jobs:,scratch-dir:,tarball-dl-path:,version:'
opts="$(getopt -o "${o}" -l "${O}" -- "${@}")"
eval set -- "${opts}"
while [ ${#} -gt 0 ]; do
case "${1}" in
(-d|--dot-gclient) DOT_GCLIENT="${2}"; shift 2;;
(-j|--jobs) JOBS="${2}"; shift 2;;
(-s|--scratch-dir) SCRATCH_DIR="${2}"; shift 2;;
(-t|--tarball-dl-path) DL_DIR=$(dirname "${2}"); TARBALL_DL_PATH="${2}"; shift 2;;
(-v|--version) VERSION="${2}"; TARBALL_NAME=flutter-"${VERSION}".tar.gz; shift 2;;
(--) shift; break;;
esac
done
}
prepare() {
rm -rf "${SCRATCH_DIR}"
mkdir -p "${SCRATCH_DIR}"
pushd "${SCRATCH_DIR}" >/dev/null
}
copy_dot_gclient() {
sed "s%!FLUTTER_VERSION!%${VERSION}%g" "${DOT_GCLIENT}" >.gclient
}
run_gclient() {
message "Downloading"
gclient.py \
sync \
--delete_unversioned_trees \
--no-history \
--reset \
--shallow \
-j"${JOBS}"
}
gen_tarball() {
message "Generating tarball"
mkdir -p "${DL_DIR}"
# There are two issues with the flutter-engine buildsystem:
# - it expects empty directories created by gclient.py to be present; that
# means we can't use the mk_tar_gz helper method from support/download/helpers,
# becasue it does not include emnpty directories;
# - it insists on having a full git repositoy, with .git et al., which means
# we can't generate a reproducible archive anyway.
# So we jsut create a plain tarball.
${TAR} -C "${SCRATCH_DIR}"/src -czf "${TARBALL_NAME}" .
mv "${TARBALL_NAME}" "${TARBALL_DL_PATH}"
}
cleanup() {
popd >/dev/null
rm -rf "${SCRATCH_DIR}"
}
main() {
parse_opts "${@}"
if [[ ! -e "${TARBALL_DL_PATH}" ]]; then
prepare
copy_dot_gclient
run_gclient
gen_tarball
cleanup
fi
}
main "${@}"