idea.sh revision 2055:95b270614957
172445Sassar#!/bin/sh
2233294Sstas#
3233294Sstas# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
4233294Sstas# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
572445Sassar#
6233294Sstas# This code is free software; you can redistribute it and/or modify it
7233294Sstas# under the terms of the GNU General Public License version 2 only, as
8233294Sstas# published by the Free Software Foundation.
972445Sassar#
10233294Sstas# This code is distributed in the hope that it will be useful, but WITHOUT
11233294Sstas# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1272445Sassar# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13233294Sstas# version 2 for more details (a copy is included in the LICENSE file that
14233294Sstas# accompanied this code).
15233294Sstas#
1672445Sassar# You should have received a copy of the GNU General Public License version
17233294Sstas# 2 along with this work; if not, write to the Free Software Foundation,
18233294Sstas# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19233294Sstas#
2072445Sassar# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21233294Sstas# or visit www.oracle.com if you need additional information or have any
22233294Sstas# questions.
23233294Sstas#
24233294Sstas
25233294Sstas# Shell script for generating an IDEA project from a given list of modules
26233294Sstas
27233294Sstasusage() {
28233294Sstas      echo "usage: $0 [-h|--help] [-v|--verbose] [-o|--output <path>] [modules]+" 
29233294Sstas      exit 1
30233294Sstas}
31233294Sstas
3272445SassarSCRIPT_DIR=`dirname $0`
3372445SassarPWD=`pwd`
3472445Sassarcd $SCRIPT_DIR; SCRIPT_DIR=`pwd`
3572445Sassarcd ../../; TOP=`pwd`; cd $PWD
36233294Sstas
37233294SstasIDEA_OUTPUT=$TOP/.idea
3890926SnectarVERBOSE="false"
3972445Sassarwhile [ $# -gt 0 ]
4072445Sassardo
41233294Sstas  case $1 in
4272445Sassar    -h | --help )
4378527Sassar      usage
4490926Snectar      ;;
45233294Sstas
4690926Snectar    -v | --vebose )
4790926Snectar      VERBOSE="true"
48233294Sstas      ;;
4990926Snectar
50233294Sstas    -o | --output )
51233294Sstas      IDEA_OUTPUT=$2
52233294Sstas      shift
53233294Sstas      ;;
5472445Sassar
5572445Sassar    -*)  # bad option
5672445Sassar      usage
57233294Sstas      ;;
58233294Sstas
59233294Sstas     * )  # non option
6072445Sassar      break
6172445Sassar      ;;
62233294Sstas  esac
63233294Sstas  shift
64233294Sstasdone
65233294Sstas
6672445Sassarmkdir $IDEA_OUTPUT || exit 1
6772445Sassarcd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd`
6872445Sassar
69233294SstasIDEA_MAKE="$TOP/make/idea"
70233294SstasIDEA_TEMPLATE="$IDEA_MAKE/template"
71233294SstasIML_TEMPLATE="$IDEA_TEMPLATE/jdk.iml"
72233294SstasANT_TEMPLATE="$IDEA_TEMPLATE/ant.xml"
7372445SassarIDEA_IML="$IDEA_OUTPUT/jdk.iml"
7472445SassarIDEA_ANT="$IDEA_OUTPUT/ant.xml"
7572445Sassar
7672445Sassarif [ "$VERBOSE" = "true" ] ; then
7772445Sassar  echo "output dir: $IDEA_OUTPUT"
78233294Sstas  echo "idea template dir: $IDEA_TEMPLATE"
79233294Sstasfi
8090926Snectar
8172445Sassarif [ ! -f "$IML_TEMPLATE" ] ; then
8272445Sassar  echo "FATAL: cannot find $IML_TEMPLATE" >&2; exit 1
8372445Sassarfi
8478527Sassar
8590926Snectarif [ ! -f "$ANT_TEMPLATE" ] ; then
86233294Sstas  echo "FATAL: cannot find $ANT_TEMPLATE" >&2; exit 1
8790926Snectarfi
8890926Snectar
89233294Sstascp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT"
9090926Snectarcd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I make/common idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" || exit 1
9190926Snectarcd $SCRIPT_DIR
92233294Sstas
93233294Sstas. $IDEA_OUTPUT/env.cfg
94233294Sstas
9572445Sassar# Expect MODULE_ROOTS, MODULE_NAMES, BOOT_JDK & SPEC to be set
9672445Sassarif [ "x$MODULE_ROOTS" = "x" ] ; then
9772445Sassar  echo "FATAL: MODULE_ROOTS is empty" >&2; exit 1
98233294Sstasfi
99233294Sstas
100233294Sstasif [ "x$MODULE_NAMES" = "x" ] ; then
10172445Sassar  echo "FATAL: MODULE_NAMES is empty" >&2; exit 1
10272445Sassarfi
103233294Sstas
104233294Sstasif [ "x$BOOT_JDK" = "x" ] ; then
105233294Sstas  echo "FATAL: BOOT_JDK is empty" >&2; exit 1
106233294Sstasfi
10772445Sassar
10872445Sassarif [ "x$SPEC" = "x" ] ; then
10972445Sassar  echo "FATAL: SPEC is empty" >&2; exit 1
110233294Sstasfi
111233294Sstas
112233294SstasSOURCE_FOLDER="      <sourceFolder url=\"file://\$MODULE_DIR\$/####\" isTestSource=\"false\" />"
113233294SstasSOURCE_FOLDERS_DONE="false"
11472445Sassar
11572445SassaraddSourceFolder() {
11672445Sassar  root=$@
11772445Sassar  relativePath="`echo "$root" | sed -e s@"$TOP/\(.*$\)"@"\1"@`"
11872445Sassar  folder="`echo "$SOURCE_FOLDER" | sed -e s@"\(.*/\)####\(.*\)"@"\1$relativePath\2"@`"
11972445Sassar  printf "%s\n" "$folder" >> $IDEA_IML
12072445Sassar}
12172445Sassar
122233294Sstas### Generate project iml
12372445SassarRELATIVE_BUILD_DIR="`dirname $SPEC | sed -e s@"$TOP/\(.*$\)"@"\1"@`"
12490926Snectarrm -f $IDEA_IML
12572445Sassarwhile IFS= read -r line
12672445Sassardo
127178825Sdfr  if echo "$line" | egrep "^ .* <sourceFolder.*####" > /dev/null ; then
12872445Sassar    if [ "$SOURCE_FOLDERS_DONE" = "false" ] ; then 
129178825Sdfr      SOURCE_FOLDERS_DONE="true"
130178825Sdfr      for root in $MODULE_ROOTS; do
131178825Sdfr         addSourceFolder $root
132178825Sdfr      done
133178825Sdfr    fi
134178825Sdfr  elif echo "$line" | egrep "^ .* <excludeFolder.*####" > /dev/null ; then
135178825Sdfr    ul="`echo "$line" | sed -e s@"\(.*/\)####\(.*\)"@"\1$RELATIVE_BUILD_DIR\2"@`"
136178825Sdfr    printf "%s\n" "$ul" >> $IDEA_IML 
137178825Sdfr  else
138178825Sdfr    printf "%s\n" "$line" >> $IDEA_IML
13972445Sassar  fi
14072445Sassardone < "$IML_TEMPLATE"
141
142
143MODULE_NAME="        <property name=\"module.name\" value=\"####\" />"
144
145addModuleName() {
146  mn="`echo "$MODULE_NAME" | sed -e s@"\(.*\)####\(.*\)"@"\1$MODULE_NAMES\2"@`"
147  printf "%s\n" "$mn" >> $IDEA_ANT
148}
149
150BUILD_DIR="        <property name=\"build.target.dir\" value=\"####\" />"
151
152addBuildDir() {
153  DIR=`dirname $SPEC`
154  mn="`echo "$BUILD_DIR" | sed -e s@"\(.*\)####\(.*\)"@"\1$DIR\2"@`"
155  printf "%s\n" "$mn" >> $IDEA_ANT
156}
157
158### Generate ant.xml
159
160rm -f $IDEA_ANT
161while IFS= read -r line
162do
163  if echo "$line" | egrep "^ .* <property name=\"module.name\"" > /dev/null ; then
164    addModuleName
165  elif echo "$line" | egrep "^ .* <property name=\"build.target.dir\"" > /dev/null ; then
166    addBuildDir
167  else
168    printf "%s\n" "$line" >> $IDEA_ANT
169  fi
170done < "$ANT_TEMPLATE"
171
172### Compile the custom Logger
173
174CLASSES=$IDEA_OUTPUT/classes
175
176if [ "x$ANT_HOME" = "x" ] ; then
177   # try some common locations, before giving up
178   if [ -f "/usr/share/ant/lib/ant.jar" ] ; then
179     ANT_HOME="/usr/share/ant"
180   elif [ -f "/usr/local/Cellar/ant/1.9.4/libexec/lib/ant.jar" ] ; then
181     ANT_HOME="/usr/local/Cellar/ant/1.9.4/libexec"
182   else
183     echo "FATAL: cannot find ant. Try setting ANT_HOME." >&2; exit 1
184   fi
185fi
186CP=$ANT_HOME/lib/ant.jar
187rm -rf $CLASSES; mkdir $CLASSES
188
189if [ "x$CYGPATH" = "x" ] ; then ## CYGPATH may be set in env.cfg
190  JAVAC_SOURCE_FILE=$IDEA_OUTPUT/src/idea/JdkIdeaAntLogger.java
191  JAVAC_CLASSES=$CLASSES
192  JAVAC_CP=$CP
193else
194  JAVAC_SOURCE_FILE=`cygpath -am $IDEA_OUTPUT/src/idea/JdkIdeaAntLogger.java`
195  JAVAC_CLASSES=`cygpath -am $CLASSES`
196  JAVAC_CP=`cygpath -am $CP`
197fi
198
199$BOOT_JDK/bin/javac -d $JAVAC_CLASSES -cp $JAVAC_CP $JAVAC_SOURCE_FILE
200