aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/eclipse-generate.sh
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2015-04-20 13:51:07 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-04-20 16:41:02 +0000
commitf9971e6b9acb32fbb090c73d257a1b67fb688f51 (patch)
treef4d0591323cbeff4bb87cd9583c2d57e937dac61 /scripts/eclipse-generate.sh
parentd95efa3138b888663ba677aea38c5640393f0f68 (diff)
Improved Eclipse support for the Bazel project
Now the paths are 100% determined using Bazel query. To adapt to another project, change the variables at the top of the setup-eclipse.sh file. It also handles correctly java_plugins now. Because we must do queries on the full workspace, it is not easy to embed in a bazel build. I made a prototype for it but it is really impractical. -- MOS_MIGRATED_REVID=91580472
Diffstat (limited to 'scripts/eclipse-generate.sh')
-rwxr-xr-xscripts/eclipse-generate.sh160
1 files changed, 160 insertions, 0 deletions
diff --git a/scripts/eclipse-generate.sh b/scripts/eclipse-generate.sh
new file mode 100755
index 0000000000..e53355055c
--- /dev/null
+++ b/scripts/eclipse-generate.sh
@@ -0,0 +1,160 @@
+#!/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 eclipse files for Bazel
+
+set -eu
+
+progname=$0
+function usage() {
+ echo "Usage: $progname command args..." >&2
+ echo "Possible commands are:" >&2
+ echo " classpath java_paths lib_paths jre output_path" >&2
+ echo " factorypath project_name plugin_paths" >&2
+ echo " project project_name" >&2
+ echo " apt_settings output_path" >&2
+ exit 1
+}
+
+function read_entry() {
+ if [[ -e "${1// /_}" ]]; then
+ cat "$1"
+ else
+ echo "$1"
+ fi
+}
+
+function generate_classpath() {
+ if [[ "$#" != 4 ]]; then
+ usage
+ fi
+
+ java_paths="$(read_entry "$1")"
+ lib_paths="$(read_entry "$2")"
+ jre="$3"
+ output_path="$4"
+
+ cat <<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+EOF
+
+ for path in $java_paths; do
+ echo " <classpathentry kind=\"src\" path=\"$path\"/>"
+ done
+
+ for path_pair in $lib_paths; do
+ path_arr=(${path_pair//:/ })
+ jar=${path_arr[0]}
+ source_path=${path_arr[1]-}
+ if [ -n "${source_path}" ]; then
+ echo " <classpathentry kind=\"lib\" path=\"${jar}\" sourcepath=\"${source_path}\"/>"
+ else
+ echo " <classpathentry kind=\"lib\" path=\"${jar}\"/>"
+ fi
+ done
+
+ # Write the end of the .classpath file
+ cat <<EOF
+ <classpathentry kind="output" path="${output_path}"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/${jre}">
+ <accessrules>
+ <accessrule kind="accessible" pattern="**"/>
+ </accessrules>
+ </classpathentry>
+</classpath>
+EOF
+}
+
+function generate_factorypath() {
+ if [ "$#" != 2 ]; then
+ usage
+ fi
+ project_name="$1"
+ plugin_paths="$(read_entry "$2")"
+
+ cat <<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<factorypath>
+EOF
+
+ for path in $plugin_paths; do
+ echo " <factorypathentry kind=\"WKSPJAR\" id=\"/${project_name}/${path}\" enabled=\"true\" runInBatchMode=\"false\" />"
+ done
+
+ # Write the end of the .factorypath file
+ cat <<EOF
+</factorypath>
+EOF
+}
+
+function generate_project() {
+ if [ "$#" != 1 ]; then
+ usage
+ fi
+ project_name=$1
+ cat <<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>${project_name}</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
+EOF
+}
+
+function generate_apt_settings() {
+ if [ "$#" != 1 ]; then
+ usage
+ fi
+ output_path=$1
+ cat <<EOF
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=true
+org.eclipse.jdt.apt.genSrcDir=${output_path}
+org.eclipse.jdt.apt.reconcileEnabled=true
+EOF
+}
+
+command=$1
+shift
+case "${command}" in
+ classpath)
+ generate_classpath "$@"
+ ;;
+ factorypath)
+ generate_factorypath "$@"
+ ;;
+ project)
+ generate_project "$@"
+ ;;
+ apt_settings)
+ generate_apt_settings "$@"
+ ;;
+ *)
+ usage
+ ;;
+esac