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