From bd6d60b874911e5176224b8677d7448227f387d9 Mon Sep 17 00:00:00 2001 From: Damien Martin-Guillerez Date: Fri, 13 Mar 2015 15:21:26 +0000 Subject: [PATCH] Added script to generate an Eclipse project for Bazel Now a developer can work on the Java sources by generating an Eclipse project with scripts/eclipse/setup.sh. The xcode tooling are also imported compared to the previously checked-in project resulting in a bunch of errors. -- MOS_MIGRATED_REVID=88548129 --- .classpath | 51 ------------------ .project | 17 ------ scripts/generate-classpath.sh | 98 +++++++++++++++++++++++++++++++++++ scripts/setup-eclipse.sh | 57 ++++++++++++++++++++ 4 files changed, 155 insertions(+), 68 deletions(-) delete mode 100644 .classpath delete mode 100644 .project create mode 100755 scripts/generate-classpath.sh create mode 100755 scripts/setup-eclipse.sh diff --git a/.classpath b/.classpath deleted file mode 100644 index 1b8a76da7ed6da..00000000000000 --- a/.classpath +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.project b/.project deleted file mode 100644 index 7e2de609318f09..00000000000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - bazel - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/scripts/generate-classpath.sh b/scripts/generate-classpath.sh new file mode 100755 index 00000000000000..31f6c5d7bbdf48 --- /dev/null +++ b/scripts/generate-classpath.sh @@ -0,0 +1,98 @@ +#!/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. +# +# Generates an eclipse .classpath file for Bazel + +set -eu + +cd $(dirname "$0") +cd .. + +function query() { + ./output/bazel query "$@" +} + +# Compile bazel +([ -f "output/bazel" ] && [ -f "tools/jdk/JavaBuilder_deploy.jar" ] && [ -f "tools/jdk/ijar" ] \ + && [ -f "tools/jdk/SingleJar_deploy.jar" ] && [ -e "tools/jdk/jdk" ]) || ./compile.sh >&2 || exit $? + +# Build everything +./output/bazel build //src/... //third_party/... >&2 || exit $? + +cat < + +EOF + +# Find Java paths +for path in $(find src -name "*.java" | sed "s|/com/google/.*$||" | sort -u); do + echo " " +done + +# Find third party paths +for path in $(find third_party -name "*.jar" | sort -u); do + echo " " +done + +# Find protobuf generation +for path in $(find bazel-bin/ -name "*.java" | grep proto | sed "s|/com/google/.*$||" | sort -u | sed 's|//|/|'); do + echo " " +done + +# Find other generation +PACKAGE_LIST=$(find src -name "BUILD" | sed "s|/BUILD||" | sed "s|^|//|") +# Returns the package of file $1 +function get_package_of() { + # look for the longest matching package + for i in ${PACKAGE_LIST}; do + if [[ "$1" =~ ^$i ]]; then # we got a match + echo $(echo -n $i | wc -c | xargs echo) $i + fi + done | sort -r -n | head -1 | cut -d " " -f 2 +} + +# returns the target corresponding to file $1 +function get_target_of() { + local package=$(get_package_of $1) + local file=$(echo $1 | sed "s|^${package}/||g") + echo "${package}:${file}" +} + +# Returns the target that consume file $1 +function get_consuming_target() { + # Here to the god of bazel, I should probably offer one or two memory chips for that + local target=$(get_target_of $1) + local generating_target=$(query "deps(${target}, 1) - ${target}") + local java_library=$(query "rdeps(//src/..., ${generating_target}, 1) - ${generating_target}") + echo "${java_library}" +} + +# Returns the library that contains the generated file $1 +function get_containing_library() { + get_consuming_target $1 | sed 's|:|/lib|' | sed 's|^//|bazel-bin/|' | sed 's|$|.jar|' +} + +for path in $(find bazel-genfiles/ -name "*.java" | sed 's|/\{0,1\}bazel-genfiles/\{0,1\}|//|'); do + source_path=$(echo $path | sed 's|//|bazel-genfiles/|' | sed 's|/com/.*$||') + echo " " +done | sort -u + +# Write the end of the .classpath file +cat <<'EOF' + + + + +EOF diff --git a/scripts/setup-eclipse.sh b/scripts/setup-eclipse.sh new file mode 100755 index 00000000000000..68ce918981eab7 --- /dev/null +++ b/scripts/setup-eclipse.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# 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. +# +# Generates an Eclipse project. If a .project is not present, it will creates +# it and it will overwrite any .classpath file present +# +# Usage: ./setup-eclipse.sh +# + +set -eu + +cd $(dirname "$0") +cd .. + +# Simply creates a Eclipse java project +if [ ! -f ".project" ]; then + cat >.project <<'EOF' + + + bazel + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + +EOF +fi + +./scripts/generate-classpath.sh >.classpath + +echo +echo '***' +echo '*** Eclipse project generated' +echo '***' +echo +echo 'You can now import the bazel project into Eclipse.'