1 #!/bin/sh
   2 #
   3 # Copyright (c) 2009, 2014, 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/idea"
  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 ### Replace template variables
 117 
 118 NUM_REPLACEMENTS=0
 119 
 120 replace_template_file() {
 121     for i in $(seq 1 $NUM_REPLACEMENTS); do
 122       eval "sed \"s|\${FROM${i}}|\${TO${i}}|g\" $1 > $1.tmp"
 123       mv $1.tmp $1
 124     done
 125 }
 126 
 127 replace_template_dir() {
 128     for f in `find $1 -type f` ; do
 129         replace_template_file $f
 130     done
 131 }
 132 
 133 add_replacement() {
 134     NUM_REPLACEMENTS=`expr $NUM_REPLACEMENTS + 1`
 135     eval FROM$NUM_REPLACEMENTS='$1'
 136     eval TO$NUM_REPLACEMENTS='$2'
 137 }
 138 
 139 add_replacement "###MODULE_NAMES###" "$MODULE_NAMES"
 140 SPEC_DIR=`dirname $SPEC`
 141 if [ "x$CYGPATH" = "x" ]; then
 142     add_replacement "###BUILD_DIR###" "$SPEC_DIR"
 143     add_replacement "###JTREG_HOME###" "$JT_HOME"
 144     add_replacement "###IMAGES_DIR###" "$SPEC_DIR/images/jdk"
 145     add_replacement "###ROOT_DIR###" "$TOPLEVEL_DIR"
 146     add_replacement "###IDEA_DIR###" "$IDEA_OUTPUT"
 147 else
 148     add_replacement "###BUILD_DIR###" "`cygpath -am $SPEC_DIR`"
 149     add_replacement "###IMAGES_DIR###" "`cygpath -am $SPEC_DIR`/images/jdk"
 150     add_replacement "###ROOT_DIR###" "`cygpath -am $TOPLEVEL_DIR`"
 151     add_replacement "###IDEA_DIR###" "`cygpath -am $IDEA_OUTPUT`"
 152     if [ "x$JT_HOME" = "x" ]; then
 153       add_replacement "###JTREG_HOME###" ""
 154     else
 155       add_replacement "###JTREG_HOME###" "`cygpath -am $JT_HOME`"
 156     fi
 157 fi
 158 
 159 SOURCE_PREFIX="<sourceFolder url=\"file://"
 160 SOURCE_POSTFIX="\" isTestSource=\"false\" />"
 161 
 162 for root in $MODULE_ROOTS; do
 163     if [ "x$CYGPATH" != "x" ]; then
 164         root=`cygpath -am $root`
 165     fi
 166     SOURCES=$SOURCES" $SOURCE_PREFIX""$root""$SOURCE_POSTFIX"
 167 done
 168 
 169 add_replacement "###SOURCE_ROOTS###" "$SOURCES"
 170 
 171 replace_template_dir "$IDEA_OUTPUT"
 172 
 173 ### Compile the custom Logger
 174 
 175 CLASSES=$IDEA_OUTPUT/classes
 176 
 177 if [ "x$ANT_HOME" = "x" ] ; then
 178    # try some common locations, before giving up
 179    if [ -f "/usr/share/ant/lib/ant.jar" ] ; then
 180      ANT_HOME="/usr/share/ant"
 181    elif [ -f "/usr/local/Cellar/ant/1.9.4/libexec/lib/ant.jar" ] ; then
 182      ANT_HOME="/usr/local/Cellar/ant/1.9.4/libexec"
 183    else
 184      echo "FATAL: cannot find ant. Try setting ANT_HOME." >&2; exit 1
 185    fi
 186 fi
 187 CP=$ANT_HOME/lib/ant.jar
 188 rm -rf $CLASSES; mkdir $CLASSES
 189 
 190 if [ "x$CYGPATH" = "x" ] ; then ## CYGPATH may be set in env.cfg
 191   JAVAC_SOURCE_FILE=$IDEA_OUTPUT/src/idea/JdkIdeaAntLogger.java
 192   JAVAC_CLASSES=$CLASSES
 193   JAVAC_CP=$CP
 194 else
 195   JAVAC_SOURCE_FILE=`cygpath -am $IDEA_OUTPUT/src/idea/JdkIdeaAntLogger.java`
 196   JAVAC_CLASSES=`cygpath -am $CLASSES`
 197   JAVAC_CP=`cygpath -am $CP`
 198 fi
 199 
 200 $BOOT_JDK/bin/javac -d $JAVAC_CLASSES -cp $JAVAC_CP $JAVAC_SOURCE_FILE