| #!/bin/bash |
| |
| # Copyright 2015 Google Inc. 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. |
| |
| # Wrapper for extracting compilation information from javac invocations. It |
| # requires the same environment variables as the javac extractor (see |
| # AbstractJavacWrapper.java). In particular, it needs KYTHE_ROOT_DIRECTORY and |
| # KYTHE_OUTPUT_DIRECTORY set to understand where the root of the compiled source |
| # repository is and where to put the resulting .kindex files, respectively. |
| # |
| # This script assumes a usable java binary is on $PATH. |
| # |
| # This script is meant as a replacement for $JAVA_HOME/bin/javac. It assumes |
| # the true javac binary is in the same directory as itself and named |
| # "javac.real". The location of the real javac binary can be configured with |
| # the REAL_JAVAC environment variable. The default path for the javac extractor |
| # jar is /opt/kythe/javac_extractor.jar but can be set with the |
| # JAVAC_EXTRACTOR_JAR environment variable. |
| # |
| # If used in a Docker environment where KYTHE_ROOT_DIRECTORY and |
| # KYTHE_OUTPUT_DIRECTORY are volumes, it can be useful to set the DOCKER_CLEANUP |
| # environment variable so that files modified/created in either volume have |
| # their owner/group set to the volume's root directory's owner/group. |
| # |
| # Other environment variables that may be passed to this script include: |
| # KYTHE_EXTRACT_ONLY: if set, suppress the call to javac after extraction |
| # TMPDIR: override the location of extraction logs and other temporary output |
| |
| export TMPDIR="${TMPDIR:-/tmp}" |
| |
| if [[ -z "$REAL_JAVAC" ]]; then |
| readonly REAL_JAVAC="$(dirname "$(readlink -e "$0")")/javac.real" |
| fi |
| if [[ -z "$JAVAC_EXTRACTOR_JAR" ]]; then |
| readonly JAVAC_EXTRACTOR_JAR="/opt/kythe/extractors/javac_extractor.jar" |
| fi |
| |
| fix_permissions() { |
| local dir="${1:?missing path}" |
| chown -R $(stat "$dir" -c %u:%g) "$dir" |
| } |
| cleanup() { |
| fix_permissions "$KYTHE_ROOT_DIRECTORY" |
| fix_permissions "$KYTHE_OUTPUT_DIRECTORY" |
| } |
| if [[ -n "$DOCKER_CLEANUP" ]]; then |
| trap cleanup EXIT ERR INT |
| fi |
| |
| java -Xbootclasspath/p:"$JAVAC_EXTRACTOR_JAR" \ |
| -jar "$JAVAC_EXTRACTOR_JAR" \ |
| "$@" >>"$TMPDIR"/javac-extractor.out 2>> "$TMPDIR"/javac-extractor.err |
| if [[ -z "$KYTHE_EXTRACT_ONLY" ]]; then |
| "$REAL_JAVAC" "$@" |
| fi |