1 #!/bin/sh 2 # 3 # Copyright (c) 2009, 2020, Oracle and/or its affiliates. All rights reserved. 4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 # 6 # This code is free software; you can redistribute it and/or modify it 7 # under the terms of the GNU General Public License version 2 only, as 8 # published by the Free Software Foundation. 9 # 10 # This code is distributed in the hope that it will be useful, but WITHOUT 11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 # version 2 for more details (a copy is included in the LICENSE file that 14 # accompanied this code). 15 # 16 # You should have received a copy of the GNU General Public License version 17 # 2 along with this work; if not, write to the Free Software Foundation, 18 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 # 20 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 # or visit www.oracle.com if you need additional information or have any 22 # questions. 23 # 24 25 # Shell script for generating an IDEA project from a given list of modules 26 27 usage() { 28 echo "usage: $0 [-h|--help] [-v|--verbose] [-o|--output <path>] [modules]+" 29 exit 1 30 } 31 32 SCRIPT_DIR=`dirname $0` 33 #assume TOP is the dir from which the script has been called 34 TOP=`pwd` 35 cd $SCRIPT_DIR; SCRIPT_DIR=`pwd` 36 cd $TOP; 37 38 IDEA_OUTPUT=$TOP/.idea 39 VERBOSE="false" 40 while [ $# -gt 0 ] 41 do 42 case $1 in 43 -h | --help ) 44 usage 45 ;; 46 47 -v | --vebose ) 48 VERBOSE="true" 49 ;; 50 51 -o | --output ) 52 IDEA_OUTPUT=$2/.idea 53 shift 54 ;; 55 56 -*) # bad option 57 usage 58 ;; 59 60 * ) # non option 61 break 62 ;; 63 esac 64 shift 65 done 66 67 mkdir -p $IDEA_OUTPUT || exit 1 68 cd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd` 69 70 if [ "x$TOPLEVEL_DIR" = "x" ] ; then 71 cd $SCRIPT_DIR/.. 72 TOPLEVEL_DIR=`pwd` 73 cd $IDEA_OUTPUT 74 fi 75 76 MAKE_DIR="$SCRIPT_DIR/../make" 77 IDEA_MAKE="$MAKE_DIR/ide/idea/jdk" 78 IDEA_TEMPLATE="$IDEA_MAKE/template" 79 80 cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT" 81 82 #override template 83 if [ -d "$TEMPLATES_OVERRIDE" ] ; then 84 for file in `ls -p "$TEMPLATES_OVERRIDE" | grep -v /`; do 85 cp "$TEMPLATES_OVERRIDE"/$file "$IDEA_OUTPUT"/ 86 done 87 fi 88 89 if [ "$VERBOSE" = "true" ] ; then 90 echo "output dir: $IDEA_OUTPUT" 91 echo "idea template dir: $IDEA_TEMPLATE" 92 fi 93 94 cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I $MAKE_DIR/.. idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" || exit 1 95 cd $SCRIPT_DIR 96 97 . $IDEA_OUTPUT/env.cfg 98 99 # Expect MODULE_ROOTS, MODULE_NAMES, BOOT_JDK & SPEC to be set 100 if [ "x$MODULE_ROOTS" = "x" ] ; then 101 echo "FATAL: MODULE_ROOTS is empty" >&2; exit 1 102 fi 103 104 if [ "x$MODULE_NAMES" = "x" ] ; then 105 echo "FATAL: MODULE_NAMES is empty" >&2; exit 1 106 fi 107 108 if [ "x$BOOT_JDK" = "x" ] ; then 109 echo "FATAL: BOOT_JDK is empty" >&2; exit 1 110 fi 111 112 if [ "x$SPEC" = "x" ] ; then 113 echo "FATAL: SPEC is empty" >&2; exit 1 114 fi 115 116 if [ -d "$TOPLEVEL_DIR/.hg" ] ; then 117 VCS_TYPE="hg4idea" 118 fi 119 120 if [ -d "$TOPLEVEL_DIR/.git" ] ; then 121 VCS_TYPE="Git" 122 fi 123 124 ### Replace template variables 125 126 NUM_REPLACEMENTS=0 127 128 replace_template_file() { 129 for i in $(seq 1 $NUM_REPLACEMENTS); do 130 eval "sed \"s|\${FROM${i}}|\${TO${i}}|g\" $1 > $1.tmp" 131 mv $1.tmp $1 132 done 133 } 134 135 replace_template_dir() { 136 for f in `find $1 -type f` ; do 137 replace_template_file $f 138 done 139 } 140 141 add_replacement() { 142 NUM_REPLACEMENTS=`expr $NUM_REPLACEMENTS + 1` 143 eval FROM$NUM_REPLACEMENTS='$1' 144 eval TO$NUM_REPLACEMENTS='$2' 145 } 146 147 add_replacement "###MODULE_NAMES###" "$MODULE_NAMES" 148 add_replacement "###VCS_TYPE###" "$VCS_TYPE" 149 SPEC_DIR=`dirname $SPEC` 150 if [ "x$CYGPATH" = "x" ]; then 151 add_replacement "###BUILD_DIR###" "$SPEC_DIR" 152 add_replacement "###JTREG_HOME###" "$JT_HOME" 153 add_replacement "###IMAGES_DIR###" "$SPEC_DIR/images/jdk" 154 add_replacement "###ROOT_DIR###" "$TOPLEVEL_DIR" 155 add_replacement "###IDEA_DIR###" "$IDEA_OUTPUT" 156 else 157 add_replacement "###BUILD_DIR###" "`cygpath -am $SPEC_DIR`" 158 add_replacement "###IMAGES_DIR###" "`cygpath -am $SPEC_DIR`/images/jdk" 159 add_replacement "###ROOT_DIR###" "`cygpath -am $TOPLEVEL_DIR`" 160 add_replacement "###IDEA_DIR###" "`cygpath -am $IDEA_OUTPUT`" 161 if [ "x$JT_HOME" = "x" ]; then 162 add_replacement "###JTREG_HOME###" "" 163 else 164 add_replacement "###JTREG_HOME###" "`cygpath -am $JT_HOME`" 165 fi 166 fi 167 168 SOURCE_PREFIX="<sourceFolder url=\"file://" 169 SOURCE_POSTFIX="\" isTestSource=\"false\" />" 170 171 for root in $MODULE_ROOTS; do 172 if [ "x$CYGPATH" != "x" ]; then 173 root=`cygpath -am $root` 174 fi 175 SOURCES=$SOURCES" $SOURCE_PREFIX""$root""$SOURCE_POSTFIX" 176 done 177 178 add_replacement "###SOURCE_ROOTS###" "$SOURCES" 179 180 replace_template_dir "$IDEA_OUTPUT" 181 182 ### Compile the custom Logger 183 184 CLASSES=$IDEA_OUTPUT/classes 185 186 if [ "x$ANT_HOME" = "x" ] ; then 187 # try some common locations, before giving up 188 if [ -f "/usr/share/ant/lib/ant.jar" ] ; then 189 ANT_HOME="/usr/share/ant" 190 elif [ -f "/usr/local/Cellar/ant/1.9.4/libexec/lib/ant.jar" ] ; then 191 ANT_HOME="/usr/local/Cellar/ant/1.9.4/libexec" 192 else 193 echo "FATAL: cannot find ant. Try setting ANT_HOME." >&2; exit 1 194 fi 195 fi 196 CP=$ANT_HOME/lib/ant.jar 197 rm -rf $CLASSES; mkdir $CLASSES 198 199 if [ "x$CYGPATH" = "x" ] ; then ## CYGPATH may be set in env.cfg 200 JAVAC_SOURCE_FILE=$IDEA_OUTPUT/src/idea/IdeaLoggerWrapper.java 201 JAVAC_SOURCE_PATH=$IDEA_OUTPUT/src 202 JAVAC_CLASSES=$CLASSES 203 JAVAC_CP=$CP 204 else 205 JAVAC_SOURCE_FILE=`cygpath -am $IDEA_OUTPUT/src/idea/IdeaLoggerWrapper.java` 206 JAVAC_SOURCE_PATH=`cygpath -am $IDEA_OUTPUT/src` 207 JAVAC_CLASSES=`cygpath -am $CLASSES` 208 JAVAC_CP=`cygpath -am $CP` 209 fi 210 211 $BOOT_JDK/bin/javac -d $JAVAC_CLASSES -sourcepath $JAVAC_SOURCE_PATH -cp $JAVAC_CP $JAVAC_SOURCE_FILE