1#!/bin/bash 2# Copyright 2014 BarD Software s.r.o 3# This script launches GanttProject. It can be symlinked and can be ran from 4# any working directory 5 6SCRIPT_FILE="$0" 7 8WORKING_DIR="$(pwd)" 9# We want to find the directory where the real script file resides. 10# If real file is symlinked (possibly many times) then we need to follow 11# symlinks until we reach the real script 12# After that we run pwd to get directory path 13cd "$(dirname "$SCRIPT_FILE")" 14SCRIPT_FILE="$(basename "$SCRIPT_FILE")" 15 16while [ -L "$SCRIPT_FILE" ]; do 17 SCRIPT_FILE="$(readlink "$SCRIPT_FILE")" 18 cd "$(dirname "$SCRIPT_FILE")" 19 SCRIPT_FILE="$(basename "$SCRIPT_FILE")" 20done 21 22GP_HOME="$(pwd)" 23 24cd "$WORKING_DIR" 25 26# Create log directory 27GP_LOG_DIR="$HOME/.ganttproject.d" 28# Check if log dir is present (or create it) 29if [ ! -d $GP_LOG_DIR ]; then 30 if [ -e $GP_LOG_DIR ]; then 31 echo "file $GP_LOG_DIR exists and is not a directory" >&2 32 exit 1 33 fi 34 if ! mkdir $GP_LOG_DIR ; then 35 echo "Could not create $GP_LOG_DIR directory" >&2 36 exit 1 37 fi 38fi 39 40# Create unique name for log file 41LOG_FILE="$GP_LOG_DIR/.ganttproject-"$(date +%Y%m%d%H%M%S)".log" 42if [ -e "$LOG_FILE" ] && [ ! -w "$LOG_FILE" ]; then 43 echo "Log file $LOG_FILE is not writable" >2 44 exit 1 45fi 46 47LOG_TEXT="" 48echo "" > /tmp/ganttproject-launcher.log || LOG_TEXT="----" 49 50log() { 51 if [ ! -z "$LOG_TEXT" ]; then 52 LOG_TEXT="$LOG_TEXT\n$1"; 53 else 54 echo $1 >> /tmp/ganttproject-launcher.log 55 fi 56} 57 58check_java() { 59 JAVA_COMMAND=$1 60 log "Searching for Java in $JAVA_COMMAND" 61 62 if [ ! -x "$JAVA_COMMAND" ]; then 63 log "...missing or not executable" 64 JAVA_COMMAND="" 65 return 1 66 fi 67 68 VERSION="$( $JAVA_COMMAND -version 2>&1 | head -n 1)" 69 log "...found $VERSION" 70 [[ "$VERSION" =~ "1.7" ]] && return 0; 71 [[ "$VERSION" =~ "1.8" ]] && return 0; 72 [[ "$VERSION" =~ "9." ]] && return 0; 73 [[ "$VERSION" =~ "10." ]] && return 0; 74 [[ "$VERSION" =~ "11." ]] && return 0; 75 [[ "$VERSION" =~ "12." ]] && return 0; 76 [[ "$VERSION" =~ "13." ]] && return 0; 77 [[ "$VERSION" =~ "14." ]] && return 0; 78 log "... this seems to be an old Java Runtime"; 79 JAVA_COMMAND="" 80 return 1 81} 82 83find_java() { 84 if [ ! -z "$JAVA_HOME" ]; then 85 check_java "$JAVA_HOME/bin/java" && return 0; 86 fi 87 JAVA_COMMAND=$(which java) 88 if [ "0" = "$?" ]; then 89 check_java "$JAVA_COMMAND" && return 0; 90 fi 91 92 if [ -x /usr/libexec/java_home ]; then 93 check_java "$(/usr/libexec/java_home)/bin/java" && return 0; 94 fi 95 96 if [ -x /usr/libexec/java_home ]; then 97 check_java "$(/usr/libexec/java_home -v 1.8+)/bin/java" && return 0; 98 fi 99 100 for f in $(ls /Library/Java/JavaVirtualMachines/); do 101 check_java "/Library/Java/JavaVirtualMachines/$f/Contents/Home/bin/java" && return 0; 102 done; 103 104 check_java "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" && return 0; 105 check_java /Library/Java/Home/bin/java && return 0; 106 107 check_java /System/Library/Frameworks/JavaVM.framework/Home/bin/java && return 0; 108 report_java_not_found && exit 1; 109} 110 111report_java_not_found() { 112 if [ -z "$LOG_TEXT" ]; then 113 LOG_TEXT="$(cat /tmp/ganttproject-launcher.log)" 114 fi 115 116 LOG_TEXT=$(echo "$LOG_TEXT" | sed s/\"/\\\\\"/g) 117 osascript -e 'tell app "System Events" to display alert "Java Runtime not found" message "GanttProject cannot find a suitable Java Runtime.\n\nWhat we have tried:\n'"$LOG_TEXT"'\n\nYou can find this log in /tmp/ganttproject-launcher.log file\nProceed to http://docs.ganttproject.biz/user/troubleshooting-installation to learn how to fix this."' 118} 119 120find_java 121CLASSPATH="$CLASSPATH:$GP_HOME/eclipsito.jar:$GP_HOME" 122export CLASSPATH 123BOOT_CLASS=org.bardsoftware.eclipsito.Boot 124ECLIPSITO_ARGS="-plugins-dir plugins -app net.sourceforge.ganttproject.GanttProject" 125MACOS_ARGS="-Dapple.laf.useScreenMenuBar=true -Dcom.apple.macos.useScreenMenuBar=true -Dcom.apple.mrj.application.apple.menu.about.name=GanttProject -Xdock:name=GanttProject -Xdock:icon=ganttproject.icns" 126JAVA_ARGS="-Duser.dir=$GP_HOME -Xmx1024m -ea -Dfile.encoding=UTF-8 $MACOS_ARGS $BOOT_CLASS $ECLIPSITO_ARGS -log true -log_file $LOG_FILE" 127 128if [ -n "$(echo \"$*\" | sed -n '/\(^\|\s\)-/{p;}')" ]; then 129 "$JAVA_COMMAND" $JAVA_ARGS "$@" 130else 131 echo $JAVA_COMMAND 132 "$JAVA_COMMAND" $JAVA_ARGS "$@" & 133fi 134 135