aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/android/desugar.sh
diff options
context:
space:
mode:
authorGravatar kmb <kmb@google.com>2018-04-24 15:09:15 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-24 15:10:39 -0700
commit11571bd547a8967d08eaa1f98383e3fa0482af84 (patch)
tree955ed7d59bf5c069090fc668624acd453f1a9336 /tools/android/desugar.sh
parent10e6500d9e164204963352ad384c4cfb00c2e44d (diff)
send Android desugar tool invocations through wrapper script with additional configuration flags.
PiperOrigin-RevId: 194153158
Diffstat (limited to 'tools/android/desugar.sh')
-rw-r--r--tools/android/desugar.sh120
1 files changed, 120 insertions, 0 deletions
diff --git a/tools/android/desugar.sh b/tools/android/desugar.sh
new file mode 100644
index 0000000000..f589c75d09
--- /dev/null
+++ b/tools/android/desugar.sh
@@ -0,0 +1,120 @@
+#!/bin/bash
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# A wrapper around the desugar binary that sets
+# jdk.internal.lambda.dumpProxyClasses and configures Java 8 library rewriting
+# through additional flags.
+
+# exit on errors and uninitialized variables
+set -eu
+
+RUNFILES="${RUNFILES:-$0.runfiles}"
+RUNFILES_MANIFEST_FILE="${RUNFILES_MANIFEST_FILE:-$RUNFILES/MANIFEST}"
+
+IS_WINDOWS=false
+case "$(uname | tr [:upper:] [:lower:])" in
+msys*|mingw*|cygwin*)
+ IS_WINDOWS=true
+esac
+
+if "$IS_WINDOWS" && ! type rlocation &> /dev/null; then
+ function rlocation() {
+ # Use 'sed' instead of 'awk', so if the absolute path ($2) has spaces, it
+ # will be printed completely.
+ local result="$(grep "$1" "${RUNFILES_MANIFEST_FILE}" | head -1)"
+ # If the entry has a space, it is a mapping from a runfiles-path to absolute
+ # path, otherwise it resolves to itself.
+ echo "$result" | grep -q " " \
+ && echo "$result" | sed 's/^[^ ]* //' \
+ || echo "$result"
+ }
+fi
+
+# Find script to call:
+# Windows (in MANIFEST): <repository_name>/<path/to>/tool
+# Linux/MacOS (symlink): ${RUNFILES}/<repository_name>/<path/to>/tool
+if "$IS_WINDOWS"; then
+ DESUGAR="$(rlocation "[^/]*/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar")"
+else
+ DESUGAR="$(find "${RUNFILES}" -path "*/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar" | head -1)"
+fi
+
+readonly TMPDIR="$(mktemp -d)"
+trap "rm -rf ${TMPDIR}" EXIT
+
+readonly DESUGAR_JAVA8_LIBS_CONFIG=(--rewrite_core_library_prefix java/time/ \
+ --rewrite_core_library_prefix java/lang/Double8 \
+ --rewrite_core_library_prefix java/lang/Integer8 \
+ --rewrite_core_library_prefix java/lang/Long8 \
+ --rewrite_core_library_prefix java/util/stream/ \
+ --rewrite_core_library_prefix java/util/function/ \
+ --rewrite_core_library_prefix java/util/Arrays8 \
+ --rewrite_core_library_prefix java/util/Date8 \
+ --rewrite_core_library_prefix java/util/DoubleSummaryStatistics \
+ --rewrite_core_library_prefix java/util/IntSummaryStatistics \
+ --rewrite_core_library_prefix java/util/LinkedHashSet8 \
+ --rewrite_core_library_prefix java/util/LongSummaryStatistics \
+ --rewrite_core_library_prefix java/util/Objects \
+ --rewrite_core_library_prefix java/util/Optional \
+ --rewrite_core_library_prefix java/util/PrimitiveIterator \
+ --rewrite_core_library_prefix java/util/Spliterator \
+ --rewrite_core_library_prefix java/util/StringJoiner \
+ --retarget_core_library_member "java/lang/Double#max->java/lang/Double8" \
+ --retarget_core_library_member "java/lang/Double#min->java/lang/Double8" \
+ --retarget_core_library_member "java/lang/Double#sum->java/lang/Double8" \
+ --retarget_core_library_member "java/lang/Integer#max->java/lang/Integer8" \
+ --retarget_core_library_member "java/lang/Integer#min->java/lang/Integer8" \
+ --retarget_core_library_member "java/lang/Integer#sum->java/lang/Integer8" \
+ --retarget_core_library_member "java/lang/Long#max->java/lang/Long8" \
+ --retarget_core_library_member "java/lang/Long#min->java/lang/Long8" \
+ --retarget_core_library_member "java/lang/Long#sum->java/lang/Long8" \
+ --retarget_core_library_member "java/util/Arrays#stream->java/util/Arrays8" \
+ --retarget_core_library_member "java/util/Arrays#spliterator->java/util/Arrays8" \
+ --retarget_core_library_member "java/util/LinkedHashSet#spliterator->java/util/LinkedHashSet8" \
+ --retarget_core_library_member "java/util/Date#from->java/util/Date8" \
+ --retarget_core_library_member "java/util/Date#toInstant->java/util/Date8" \
+ --emulate_core_library_interface java/util/Collection \
+ --emulate_core_library_interface java/util/Map \
+ --emulate_core_library_interface java/util/Map\$Entry \
+ --emulate_core_library_interface java/util/Iterator \
+ --emulate_core_library_interface java/util/Comparator \
+ --dont_rewrite_core_library_invocation "java/util/Iterator#remove")
+
+# Check for params file. Desugar doesn't accept a mix of params files and flags
+# directly on the command line, so we need to build a new params file that adds
+# the flags we want.
+if [[ "$#" -gt 0 ]]; then
+ arg="$1";
+ case "${arg}" in
+ @*)
+ params="${TMPDIR}/desugar.params"
+ cat "${arg:1}" > "${params}" # cp would create file readonly
+ for o in "${DESUGAR_JAVA8_LIBS_CONFIG[@]}"; do
+ echo "${o}" >> "${params}"
+ done
+
+ "${DESUGAR}" \
+ "--jvm_flag=-Djdk.internal.lambda.dumpProxyClasses=${TMPDIR}" \
+ "@${params}"
+ # temp dir deleted by TRAP installed above
+ exit 0
+ ;;
+ esac
+fi
+
+"${DESUGAR}" \
+ "--jvm_flag=-Djdk.internal.lambda.dumpProxyClasses=${TMPDIR}" \
+ "$@" \
+ "${DESUGAR_JAVA8_LIBS_CONFIG[@]}"