| #!/bin/bash |
| # Updater script for Bazel java_tools prebuilt jars and binaries in AOSP. |
| # |
| # Usage: update_java_tools.sh <commit> <absolute path to prebuilts/bazel/common> <absolute path to prebuilts/bazel/linux-x86_64> |
| |
| set -euo pipefail |
| |
| function err() { |
| >&2 echo "$@" |
| exit 1 |
| } |
| |
| # Check that the necessary tools are installed. |
| function check_prereqs() { |
| for cmd in curl xmllint git bazel-real; do |
| if ! command -v "${cmd}" &> /dev/null; then |
| err "Error: This script requires ${cmd}. Install it and ensure it is on your PATH." |
| fi |
| done |
| } |
| |
| function check_sha256() { |
| local sha256=$1; shift |
| local downloaded_file=$1; shift |
| echo "Verifying checksum for ${downloaded_file} to be ${sha256}.." |
| if ! echo "${sha256} ${downloaded_file}" | sha256sum --check --status ; then |
| echo "ERROR: checksum of ${downloaded_file} did not match!" |
| echo "${sha256} ${downloaded_file}" | sha256sum --check --status |
| echo "${sha256} ${downloaded_file}" | sha256sum --check |
| exit 1 |
| fi |
| } |
| |
| BAZEL_BUILD_FLAGS=( |
| --incompatible_sandbox_hermetic_tmp |
| --verbose_failures |
| ) |
| |
| check_prereqs |
| new_bazel="$1"; shift |
| common_bazel_dir="$1"; shift |
| linux_bazel_dir="$1"; shift |
| bazel_src_dir="$1"; shift |
| cd $(mktemp -d) |
| touch WORKSPACE |
| $new_bazel query "//external:remote_java_tools + //external:remote_java_tools_linux + //external:android_tools" --output=xml > repo_infos.xml |
| remote_java_tools_url=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools']/list[@name='urls']/string[1]/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") |
| remote_java_tools_sha256=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools']/string[@name='sha256']/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") |
| remote_java_tools_linux_url=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools_linux']/list[@name='urls']/string[1]/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") |
| remote_java_tools_linux_sha256=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools_linux']/string[@name='sha256']/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") |
| android_tools_url=$(xmllint --xpath "/query/rule[@name='//external:android_tools']/list[@name='urls']/string[1]/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") |
| android_tools_sha256=$(xmllint --xpath "/query/rule[@name='//external:android_tools']/string[@name='sha256']/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") |
| |
| echo "downloading remote_java_tools..." |
| curl "${remote_java_tools_url}" --output java_tools.zip |
| check_sha256 "${remote_java_tools_sha256}" "java_tools.zip" |
| common_jars=("JavaBuilder_deploy.jar" "turbine_direct_binary_deploy.jar" "VanillaJavaBuilder_deploy.jar" "JacocoCoverage_jarjar_deploy.jar" "GenClass_deploy.jar" "Runner_deploy.jar") |
| for jar in "${common_jars[@]}" |
| do |
| unzip -o -d ${common_bazel_dir}/remote_java_tools java_tools.zip "java_tools/${jar}" |
| done |
| |
| echo "downloading android_tools..." |
| curl "${android_tools_url}" --output android_tools.zip |
| check_sha256 "${android_tools_sha256}" "android_tools.zip" |
| android_jars=("all_android_tools_deploy.jar" "ImportDepsChecker_deploy.jar" "desugar_jdk_libs.jar") |
| for jar in "${android_jars[@]}" |
| do |
| unzip -o -d ${common_bazel_dir}/android_tools android_tools.zip "android_tools/${jar}" |
| done |
| |
| echo "downloading remote_java_tools_linux..." |
| curl "${remote_java_tools_linux_url}" --output java_tools_prebuilt.zip |
| check_sha256 "${remote_java_tools_linux_sha256}" "java_tools_prebuilt.zip" |
| common_bins=("src/tools/singlejar/singlejar_local" "ijar/ijar") |
| for bin in "${common_bins[@]}" |
| do |
| unzip -o -d ${linux_bazel_dir}/remote_java_tools_linux java_tools_prebuilt.zip "java_tools/${bin}" |
| done |
| |
| echo "building autocompletion script..." |
| cd $bazel_src_dir |
| $new_bazel build "${BAZEL_BUILD_FLAGS[@]}" //scripts:bazel-complete.bash |
| cp bazel-bin/scripts/bazel-complete.bash ${common_bazel_dir}/bazel-complete.bash |