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