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