diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2015-04-20 13:51:07 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2015-04-20 16:41:02 +0000 |
commit | f9971e6b9acb32fbb090c73d257a1b67fb688f51 (patch) | |
tree | f4d0591323cbeff4bb87cd9583c2d57e937dac61 /scripts/eclipse-generate.sh | |
parent | d95efa3138b888663ba677aea38c5640393f0f68 (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-x | scripts/eclipse-generate.sh | 160 |
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 |