#!/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