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