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