| #!/bin/bash |
| # Copyright 2015 The Bazel Authors. 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 |