#!/bin/sh

#********************************************************************** 
# Copyright (c) 2000, 2002 IBM Corp.  All rights reserved.
# This file is made available under the terms of the Common Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/cpl-v10.html
# 
# Andre Weinand, OTI - Initial version
#********************************************************************** 

# 
# This script wrappers a SWT based Java application on the fly as an
# application bundle and launches it.
#
# Why is it necessary?
# When using Carbon via JNI some magic is necessary to make MacOS X
# recognize the Java program as a 'real Mac application' with its own menu bar 
# and an entry in the Dock. Since this 'magic' does not seem to be public and
# documented API I don't know how to call it from the SWT startup code.
# As a workaround I've tried to simulate what ProjectBuilder or MRJAppBuilder
# do if they launch a SWT based Java application.
#
# How is it used?
# Basically by replacing the standard Java VM ('/usr/bin/java') with this script.
# Since this script is a replacement for the VM it takes roughly the same arguments.

#
# In order to build an application bundle under MacOS X we need
# a small stub that reads the various artefacts of a bundle and
# starts the Java VM. We copy the stub from the JavaVM framework.
#
JAVASTUB="/System/Library/Frameworks/JavaVM.framework/Versions/A/Resources/MacOS/JavaApplicationStub"

#
# Where to build the temporary application bundle
#
TMP_APP_DIR="/tmp/swt_stubs"

#
# We remember the current working directory
# so that we can later define the property "WorkingDirectory"
#
CURRENT_DIR="$PWD"

#echo $* > /dev/console

VM_OPTIONS=""
#
# Ensure that we get our own JDI implementation
# 
#JDI="$JAVA_LIBRARY_PATH"/plugins/org.eclipse.jdt.debug/jdi.jar
#if test -f "$JDI"
#then
#	VM_OPTIONS="$VM_OPTIONS<string>-Xbootclasspath/p:$JDI</string>"
#	echo $VM_OPTIONS > /dev/console
#else
#	echo "$JDI not found" > /dev/console
#fi

# skip 1st argument
shift

#
# Process command line arguments until we see the main class...
#
while [ $# -gt 0 ]; do
	case "$1" in
		-classpath | -cp )
			CLASS_PATH="$2"
			shift;
			;;	
		-* )
			VM_OPTIONS="$VM_OPTIONS<string>$1</string>"
			;;
		* )
			MAIN_CLASS="$1"
			shift;
			break;
			;;
	esac
	shift
done

while [ $# -gt 0 ]; do
	PARAMETERS="$PARAMETERS<string>$1</string>"
	shift
done

#
# Application name is name of main class without package prefix 
#
APP_NAME=`echo $MAIN_CLASS | awk -F. '{ print $(NF) }' `
LAUNCHER="$APP_NAME"

#
# Create the parent directory for the application bundle 
#
mkdir -p $TMP_APP_DIR
cd $TMP_APP_DIR

#
# Create the application bundle 
#
rm -rf $APP_NAME.app
mkdir -p $APP_NAME.app/Contents/MacOS

cd $APP_NAME.app/Contents

#
# Copy the JavaAppLauncher into the bundle 
#
cp $JAVASTUB MacOS/$APP_NAME

#
# Create the Info.plist file.
#
cat > Info.plist <<End_Of_Input
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
		<string>English</string>
	<key>CFBundleGetInfoString</key>
		<string>$APP_NAME</string>
	<key>CFBundleInfoDictionaryVersion</key>
		<string>6.0</string>
	<key>CFBundleName</key>
		<string>$APP_NAME</string>
	<key>CFBundlePackageType</key>
		<string>APPL</string>
	<key>CFBundleShortVersionString</key>
		<string>2.0.1</string>
	<key>CFBundleSignature</key>
		<string>????</string>
	<key>CFBundleVersion</key>
		<string>1.0.1</string>
	<key>Java</key>
	<dict>
		<key>VMOptions</key>
			<array>$VM_OPTIONS</array>
		<key>ClassPath</key>
			<string>$CLASS_PATH</string>
		<key>MainClass</key>
			<string>$MAIN_CLASS</string>
		<key>WorkingDirectory</key>
			<string>$CURRENT_DIR</string>
		<key>Arguments</key>
			<array>$PARAMETERS</array>
	</dict>
</dict>
</plist>
End_Of_Input

#
# Start the JavaAppLauncher by replacing this shell script
# to ensure that the process id is preserved.
#
exec $TMP_APP_DIR/$APP_NAME.app/Contents/MacOS/$APP_NAME

#
# not reached (as long as the exec from above succeeds).
#
