OSDN Git Service

カラーダイアログのテキスト読み取り修正が不具合を起こしていたので再修正
[charactermanaj/CharacterManaJ.git] / src / main / attachment / bundle / CharacterManaJ.app / Contents / MacOS / java_launch.sh
1 #! /bin/bash
2
3 APPNAME="CharacterManaJ"
4 JARNAME="CharacterManaJ.jar"
5
6 # JVMオプション
7 declare -a jvm_options=()
8
9 # 相対パスから絶対パスに変換する
10 function realpath() {
11     [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
12 }
13
14 # エラーを表示する
15 function ShowMessage() {
16     if [[ -x /usr/bin/osascript ]]; then
17         /usr/bin/osascript -e "display alert \"$APPNAME\" message \"$1\""
18     else
19         echo "$APPNAME -- $1"
20     fi
21 }
22
23 # JVMに指定するオプションのテキストファイルをjvm_options配列に読み込む
24 function read_jvm_options() {
25     while IFS='' read -r line || [[ -n $line ]]; do
26         line="${line//[$'\r\n']}" # 行端記号の除去(空白は残す)
27         trimline="${line//[$'\t\r\n ']}" # 空行判定のためタブ、行端、空白を除去
28         if [[ -n $trimline ]]; then
29             jvm_options+=("$line")
30         fi
31     done < "$1"
32 }
33
34 # このスクリプト基準のパスを求める
35 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
36 RESOURCE_DIR="$(realpath "$SCRIPT_DIR/../Resources")"
37
38 # JVMオプションがあれば読み取る
39 if [[ -f "$RESOURCE_DIR/jvm_options" ]]; then
40     read_jvm_options "$RESOURCE_DIR/jvm_options"
41 fi
42 # JVMオプション(ユーザーディレクトリ上)
43 if [[ -f "${HOME}/Library/${APPNAME}/jvm_options" ]]; then
44     read_jvm_options "${HOME}/Library/${APPNAME}/jvm_options"
45 fi
46
47 # JREの位置を検索する
48 PLUGINS_JRE_DIR="$(realpath "${SCRIPT_DIR}/../Plugins/JRE")"
49 if [[ -x "${PLUGINS_JRE_DIR}/Home/bin/java" ]]; then
50     # バンドル内にある場合(パターン1)
51     JAVA_HOME="$(realpath "${PLUGINS_JRE_DIR}/Home")"
52 elif [[ -x "${PLUGINS_JRE_DIR}/bin/java" ]]; then
53     # バンドル内にある場合(パターン2)
54     JAVA_HOME="$(realpath "${PLUGINS_JRE_DIR}")"
55 else
56     # バンドル内にない場合で、環境変数JAVA_HOMEがあれば、それを用いる。
57     # 環境変数JAVA_HOMEがなければ、/usr/libexec/java_home があれば、それを使う
58     if [[ -z "$JAVA_HOME" ]]; then
59         if [[ -x "/usr/libexec/java_home" ]]; then
60             JAVA_HOME="$(/usr/libexec/java_home)"
61             if [[ $? -ne 0 ]]; then
62                 # java_homeがエラーを返すならばJavaが無いものと見なす
63                 JAVA_HOME=""
64             fi
65         fi
66     fi
67 fi
68
69 if [[ -z "$JAVA_HOME" ]]; then
70     which java 2>/dev/null
71     if [[ $? -ne 0 ]]; then
72         # JAVA_HOMEが設定されておらず、且つ、javaにパスが通ってない場合はエラー
73         ShowMessage "Could not find Java SE Runtime Environment."
74         exit 2
75     fi
76     # JAVA_HOMEは未設定だがパスが通っていれば継続する
77     JAVA_CMD="java"
78 else
79     # JAVA_HOMEが特定されている場合は、それを用いる
80     export JAVA_HOME
81     JAVA_CMD="$JAVA_HOME/bin/java"
82 fi
83
84 # JAVAをオプションとJARを指定して起動する
85 if [[ -f $RESOURCE_DIR/$JARNAME ]]; then
86         # アプリケーション名とロケールの取得
87         APPTITLE=( $("$JAVA_CMD" -jar "$RESOURCE_DIR/$JARNAME" --show-appinfo) )
88         if [[ $? -ne 0 ]]; then
89                 # JAVAの起動に失敗した場合
90         ShowMessage "Could not launch Java SE Runtime Environment. ${APPNAME}"
91         exit 1
92         fi
93
94         # アプリケーションの起動
95     "$JAVA_CMD" ${jvm_options[@]} "-Xdock:name=${APPTITLE[0]}" -jar "$RESOURCE_DIR/$JARNAME" || ShowMessage "Failed to launch ${APPNAME}"
96 else
97     ShowMessage "$JARNAME is not found."
98 fi