view package-files/osx/JavaApplicationStub @ 40:a65a8f5a9647
Remove more deadwood.
author
David Barts <n5jrn@me.com>
date
Fri, 01 May 2020 23:07:23 -0700 (2020-05-02)
parents
89d7f4d91f67
children
4903ac32a287
line source
+ − #!/bin/bash
+ −
+ − # This is based on Tobias Fischer's universalJavaApplicationStub:
+ − # https://github.com/tofi86/universalJavaApplicationStub
+ − #
+ − # Therefore this part of JpegWasher is covered by the same MIT license
+ − # that his code is:
+ − #
+ − # The MIT License (MIT)
+ − #
+ − # Copyright (c) 2014-2020 Tobias Fischer
+ − #
+ − # Permission is hereby granted, free of charge, to any person obtaining a copy
+ − # of this software and associated documentation files (the "Software"), to deal
+ − # in the Software without restriction, including without limitation the rights
+ − # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ − # copies of the Software, and to permit persons to whom the Software is
+ − # furnished to do so, subject to the following conditions:
+ − #
+ − # The above copyright notice and this permission notice shall be included in all
+ − # copies or substantial portions of the Software.
+ − #
+ − # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ − # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ − # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ − # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ − # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ − # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ − # SOFTWARE.
+ −
+ − # Establish our application names
+ − appname="@app.name@"
+ − appdom="@app.domain@"
+ −
+ − # Make a place for our logs to go
+ − appsupp="$HOME/Library/Application Support/$appdom"
+ − logfile="$appsupp/launcher.log"
+ −
+ − function die {
+ − osascript -e "tell application \"System Events\" to display dialog \"${1}\" with title \"Fatal Error\" buttons {\" OK \"} default button 1"
+ − exit ${2:-1}
+ − }
+ −
+ − # Initialize files and dirs, bail if we can't.
+ − if [ ! -d "$appsupp" ]
+ − then
+ − if ! mkdir -p "$appsupp"
+ − then
+ − die "Unable to create folder '$appsupp'" 2
+ − fi
+ − fi
+ − > "$logfile"
+ − if [ $? -ne 0 ]
+ − then
+ − die "Unable to create file '$logfile'" 2
+ − fi
+ −
+ − function stub_logger {
+ − echo "$(date +%c) - $1" >> "$logfile"
+ − }
+ −
+ − # Was originally just for debugging, but I think this could be useful
+ − # for later troubleshooting "in the wild."
+ − stub_logger "execution begins"
+ − {
+ − echo "****** BEGIN ARGUMENT AND ENVIRONMENT DUMP *******"
+ − echo "Arguments:" "$0" "$@"
+ − echo "Directory:" $(pwd)
+ − env
+ − echo "******* END ARGUMENT AND ENVIRONMENT DUMP ********"
+ − } >> "$logfile"
+ −
+ − # Change to the application root directory, two up from where this script
+ − # (which should contain an absolute path) is.
+ − mydir="${0%/*}"
+ − cd "$mydir/../.." || die "Unable to cd '$mydir/../..'"
+ −
+ − # Determine where Java is, bail if we can't.
+ − if [ -n "$JAVA_HOME" ]
+ − then
+ − if [ ! -d "$JAVA_HOME" ]
+ − then
+ − die "'$JAVA_HOME' does not exist"
+ − fi
+ − else
+ − export JAVA_HOME="$(/usr/libexec/java_home)"
+ − if [ $? -ne 0 -o ! -d "$JAVA_HOME" ]
+ − then
+ − die "Unable to locate Java."
+ − fi
+ − fi
+ −
+ − java="$JAVA_HOME/bin/java"
+ − if [ ! -x "$java" ]
+ − then
+ − die "'$java' not found or not executable"
+ − fi
+ −
+ − function plist_get {
+ − /usr/libexec/PlistBuddy -c "print $1" Contents/Info.plist 2> /dev/null
+ − }
+ − function must_get {
+ − plist_get "$@" || die "Info.plist key '$1' not found."
+ − }
+ −
+ − # Load some parameters from Contents/Info.plist
+ − estat=0
+ − CFBundleName=$(must_get ':CFBundleName')
+ − CFBundleIconFile=$(must_get ':CFBundleIconFile')
+ − JVMMainClassName=$(must_get ':JVMMainClassName')
+ − JVMClassPath=$(must_get ':JVMClassPath')
+ − JVMVersion=$(must_get ':JVMVersion')
+ −
+ − # Sanity check our JVM version
+ − if [[ "$JVMVersion" == *+ ]]
+ − then
+ − op='>'
+ − JVMVersion="${JVMVersion%+}"
+ − else
+ − op='='
+ − fi
+ − version=$("$java" -version 2>&1 | awk '/version/{print $3}' | sed -E -e 's/"//g' -e 's/-ea//g')
+ − if [ ! "$version" "$op" "$JVMVersion" ]
+ − then
+ − die "'$java' too old"
+ − fi
+ −
+ − # Load the JVMOptions array (if found)
+ − JVMOptions=()
+ − let i=0
+ − while true
+ − do
+ − j="$(plist_get :JVMOptions:$i)"
+ − if [ -z "$j" ]
+ − then
+ − break
+ − fi
+ − JVMOptions+=("$j")
+ − let i+=1
+ − done
+ −
+ − # Fatal error if we cannot change to HOME or HOME not defined
+ − approot="$(pwd)"
+ − if [ -z "$HOME" ]
+ − then
+ − die "HOME not defined!"
+ − fi
+ − cd "$HOME" || die "Unable to cd '$HOME'"
+ −
+ − # And off we go!
+ − jcmd=( "$JAVA_HOME/bin/java" -cp "$approot/$JVMClassPath"
+ − -Xdock:icon="$approot/Contents/Resources/$CFBundleIconFile"
+ − -Xdock:name="$CFBundleName" "${JVMOptions[@]}" "$JVMMainClassName" )
+ −
+ − stub_logger "Executing: ${jcmd[@]}"
+ − exec "${jcmd[@]}"
+ −
+ − # This shouldn't happen...
+ − die "Could not launch Java."