Mercurial > cgi-bin > hgweb.cgi > ImagePrep
view package-files/osx/JavaApplicationStub @ 31:99a0eb385c9a default tip
Work around annoying Swing glitch.
author | David Barts <n5jrn@me.com> |
---|---|
date | Sat, 20 Aug 2022 09:19:49 -0700 |
parents | 92afaa27f40a |
children |
line wrap: on
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."