#!/bin/sh ########################################################## # Gridworks Control System # ########################################################## fail () { cat < where [options] include: -h print this message and exit -p the port that gridworks will listen to default: 3333 -i the host interface gridworks should bind to default: 127.0.0.1 -w path to the webapp default: src/main/webapp -d path to the data directory default: OS dependent --debug enable JVM debugging (on port 8000) --jmx enable JMX monitoring (for jconsole) and is one of build ..................... Build Gridworks run ....................... Run Gridworks test ...................... Test Gridworks make_dmg ........ Make MacOSX DMG distribution make_exe ........ Make Windows EXE distribution clean ..................... Clean compiled classes distclean ................. Remove all generated files EOF exit 1 } add_option() { OPTS="$OPTS $1" } OPTS="$GRIDWORKS_OPTS" # Normalize the current directory cd `dirname $0` SYSTEM=`uname` if [ "$SYSTEM" == "Darwin" ] && [ "$JAVA_HOME" == "" ] ; then export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home" fi # ----- actions ------------------------------------------------- check_macosx() { if [ "$SYSTEM" != 'Darwin' ] ; then error "This action can only run on MacOSX" fi } ant_prepare() { if [ ! -d $GRIDWORKS_BUILD_DIR ] ; then mkdir $GRIDWORKS_BUILD_DIR || exit 1 fi ANT=`which ant` if [ "$ANT" = "" ] ; then cd thirdparty ANT_TAR=`ls | grep apache-ant | grep tar.gz | grep -v svn` ANT_DIR=`echo $ANT_TAR | sed 's/.tar.gz//'` if [ ! -d $ANT_DIR ] ; then tar xzf $ANT_TAR -C . || exit 1 fi ANT="`pwd`/$ANT_DIR/bin/ant" cd .. fi } ant() { ant_prepare echo $NUM_VERSION $ANT -f build.xml -Dbuild.dir="$GRIDWORKS_BUILD_DIR" -Ddist.dir="$GRIDWORKS_DIST_DIR" -Dversion="$VERSION" -Dnum_version="$NUM_VERSION" -Djava.options="$JAVA_OPTIONS" $1 || exit 1 } dist_prepare() { if [ ! -d $GRIDWORKS_DIST_DIR ] ; then mkdir $GRIDWORKS_DIST_DIR || exit 1 fi } launch4j_prepare() { cd thirdparty LAUNCH4J_TAR=`ls | grep launch4j | grep tar.gz | grep -v svn` LAUNCH4J_DIR="launch4j" if [ ! -d "$LAUNCH4J_DIR" ] ; then tar xzf $LAUNCH4J_TAR -C thirdparty || exit 1 fi cd .. } protobuf_prepare() { cd thirdparty PROTOBUF_TAR=`ls | grep protobuf | grep tar.gz | grep -v svn` PROTOBUF_DIR=`echo $PROTOBUF_TAR | sed 's/.tar.gz//'` PROTOC="`pwd`/$PROTOBUF_DIR/bin/protoc" if [ ! -f $PROTOC ] ; then tar xzf $PROTOBUF_TAR -C . || exit 1 cd $PROTOBUF_DIR ./configure --prefix=`pwd` make make install cd .. fi PROTOC="`pwd`/$PROTOBUF_DIR/bin/protoc" cd .. } get_version() { VERSION=$1 if [ "$VERSION" == "" ] ; then fail "Must specify a version number" fi NUM_VERSION=`echo $VERSION | sed 's/[a-zA-Z]//g'` } make_exe() { check_macosx dist_prepare launch4j_prepare get_version $1 ant exe } make_dmg() { check_macosx dist_prepare get_version $1 ant bundle mkdir "$GRIDWORKS_BUILD_DIR/bundle/.background" cp src/graphics/dmg_background/dmg_background.png "$GRIDWORKS_BUILD_DIR/bundle/.background/dmg_background.png" SIZE=30 TITLE="Gridworks $VERSION" echo "Building MacOSX DMG for $TITLE" hdiutil create -srcfolder "$GRIDWORKS_BUILD_DIR/bundle" -volname "$TITLE" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}m "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" DEVICE=$(hdiutil attach -readwrite -noverify -noautoopen "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" | egrep '^/dev/' | sed 1q | awk '{print $1}') hdiutil attach "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" echo ' tell application "Finder" tell disk "'$TITLE'" open set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false set the bounds of container window to {200, 100, 760, 460} set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 100 set background picture of theViewOptions to file ".background:'dmg_background.png'" make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} set position of item "'Gridworks'" of container window to {170, 175} set position of item "Applications" of container window to {380, 175} close open update without registering applications delay 2 eject end tell end tell ' | osascript chmod -Rf go-w /Volumes/Gridworks sync sync hdiutil detach $DEVICE hdiutil convert "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" -format UDZO -imagekey zlib-level=9 -o "$GRIDWORKS_DIST_DIR/gridworks-$VERSION.dmg" hdiutil internet-enable -yes "$GRIDWORKS_DIST_DIR/gridworks-$VERSION.dmg" rm -f "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" } test() { if [ ! -d $GRIDWORKS_TEST_DIR/classes ] ; then ant build_tests echo "" fi CLASSPATH="$GRIDWORKS_BUILD_DIR/classes:$GRIDWORKS_TEST_DIR/classes:$GRIDWORKS_TEST_DIR/lib/*:$GRIDWORKS_LIB_DIR/*" if [ "$1" == "" ] ; then cd $GRIDWORKS_TEST_DIR/classes TESTS=`find . -name '*.class' | sed s@/@.@g | sed s@.class@@ | sed s@..@@` cd ../.. else TESTS=$1 fi RUN_CMD="$JAVA -cp $CLASSPATH $OPTS org.junit.runner.JUnitCore $TESTS" echo "$RUN_CMD" echo "" exec $RUN_CMD } run() { if [ ! -d $GRIDWORKS_BUILD_DIR/classes ] ; then ant build echo "" fi if [ "$SYSTEM" == 'Darwin' ] ; then OPTS="-Xdock:name=Gridworks -Xdock:icon=src/graphics/icon/gridworks.icns $OPTS" fi if [ "$GRIDWORKS_DATA_DIR" != "" ] ; then OPTS="-Dgridworks.data_dir=$GRIDWORKS_DATA_DIR $OPTS" fi CLASSPATH="$GRIDWORKS_BUILD_DIR/classes:$GRIDWORKS_LIB_DIR/*" RUN_CMD="$JAVA -cp $CLASSPATH $OPTS com.metaweb.gridworks.Gridworks" echo "Starting Gridworks at 'http://${GRIDWORKS_HOST}:${GRIDWORKS_PORT}/'" echo "" #echo "$RUN_CMD" #echo "" exec $RUN_CMD } execute() { if [ ! -d $GRIDWORKS_BUILD_DIR/classes ] ; then ant build echo "" fi CLASSPATH="$GRIDWORKS_BUILD_DIR/classes:$GRIDWORKS_LIB_DIR/*" RUN_CMD="$JAVA -cp $CLASSPATH $OPTS $*" echo "$RUN_CMD" echo "" exec $RUN_CMD $* } # ----- We called without arguments print the usage ------------- [ $# -gt 0 ] || usage # ----- Normalize the current directory ------------------------- cd `dirname $0` # ----- Make sure there is a java environment installed ------------------------- if [ ! -z "$JAVA_HOME" ] ; then JAVA="$JAVA_HOME/bin/java" else JAVA=`which java` if [ -z "$JAVA" ] ; then if [ "$SYSTEM" = 'Darwin' ] ; then JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home else error "The 'java' command should be in your path or the 'JAVA_HOME' environment variable should be set" fi fi fi JAVA_VERSION=`java -version 2>&1 | grep version | cut -d ' ' -f 3 | egrep ^\"1.6` if [ -z "$JAVA_VERSION" ] ; then error "Gridworks requires java version 6 or later." fi # ----- Parse the command line args ------------------------------------------ while [ $# -ne 0 ] ; do case "$1" in -h) usage;; -p) shift; GRIDWORKS_PORT="$1"; shift; continue;; -i) shift; GRIDWORKS_HOST="$1"; shift; continue;; -w) shift; GRIDWORKS_WEBAPP="$1"; shift; continue;; -d) shift; GRIDWORKS_DATA_DIR="$1"; shift; continue;; --debug) shift; add_option '-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n'; continue;; --jmx) shift; add_option '-Dcom.sun.management.jmxremote'; continue;; -*) fail "Invalid option: $1";; *) break;; esac done ACTION=$1; shift # ----- Verify and Set Required Environment Variables ------------------------- if [ "$JAVA_OPTIONS" == "" ] ; then JAVA_OPTIONS="-Xms256M -Xmx1024M -XX:+UseParallelGC" fi add_option "$JAVA_OPTIONS" if [ "$GRIDWORKS_PORT" == "" ] ; then GRIDWORKS_PORT="3333" fi add_option "-Dgridworks.port=$GRIDWORKS_PORT" if [ "$GRIDWORKS_HOST" == "" ] ; then GRIDWORKS_HOST="127.0.0.1" fi add_option "-Dgridworks.host=$GRIDWORKS_HOST" if [ "$GRIDWORKS_WEBAPP" == "" ] ; then GRIDWORKS_WEBAPP="src/main/webapp" fi add_option "-Dgridworks.webapp=$GRIDWORKS_WEBAPP" if [ "$GRIDWORKS_TEST_DIR" == "" ] ; then GRIDWORKS_TEST_DIR="tests" fi if [ "$GRIDWORKS_BUILD_DIR" == "" ] ; then GRIDWORKS_BUILD_DIR="build" fi if [ "$GRIDWORKS_LIB_DIR" == "" ] ; then GRIDWORKS_LIB_DIR="lib" fi if [ "$GRIDWORKS_DIST_DIR" == "" ] ; then GRIDWORKS_DIST_DIR="dist" fi # ----- Respond to the action given -------------------------------------------- case "$ACTION" in build) ant build;; bundle) ant bundle;; clean) ant clean;; distclean) ant distclean;; test) test $1;; run) run;; execute) execute $*;; make_dmg) make_dmg $1;; make_exe) make_exe $1;; *) usage; ;; esac