#!/bin/sh

# Description: This wrapper script pre-compiles (AOT) the passed assembly
#              before executing it, and AOTs new assemblies in build output
#              directory.

export MONO_PATH

DEBIAN_DIR=$(dirname $0)
#MONO_DIR=$DEBIAN_DIR/..
MONO_DIR=${DEBIAN_DIR/%\/debian}
ASSEMBLY=$1

#case $ASSEMBLY in
#	*.dll | *.exe)
#		if [ -f $ASSEMBLY -a ! -f "$ASSEMBLY.so" ]; then
#			$MONO_DIR/runtime/mono-wrapper --aot $ASSEMBLY
#		fi
#	;;
#esac
           
$MONO_DIR/runtime/mono-wrapper "$@"

ASSEMBLIES_DIR=$MONO_DIR/mcs/class/lib
ASSEMBLIES=$(find $ASSEMBLIES_DIR -name "*.dll" -or -name "*.exe")
for ASSEMBLY in $ASSEMBLIES; do
	ASSEMBLY_DIR=$(dirname $ASSEMBLY)
	ASSEMBLY_NAME=$(basename $ASSEMBLY)
	if [ ! -f "$ASSEMBLY.so" ]; then
		#if [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_2_0" ] ||
		#   [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_2_1" ] ||
		#   [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_2_1_tuned" ]; then
		#   	# AOT for 2.0/2.1 is buggy and likes to crash
		#	true
		#elif [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_2_0_bootstrap" ]; then
		#	# AOT for 2.0 runtime libs seems to work though
		#	$MONO_DIR/runtime/mono-wrapper --aot -O=all $ASSEMBLY
		#else
		#	$MONO_DIR/runtime/mono-wrapper --aot -O=all $ASSEMBLY
		#fi
		
		# only AOT basic / 1.0 bootstrap / 2.0 bootstrap
		if [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/basic" ] ||
		   [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_1_1_bootstrap" ] ||
		   [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_2_0_bootstrap" ]; then
			$MONO_DIR/runtime/mono-wrapper --aot -O=all $ASSEMBLY
		fi
		
		# always AOT libs used by the compilers
		if [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/default" ]; then
			if [ "$ASSEMBLY_NAME" = "mscorlib.dll" ] ||
			   [ "$ASSEMBLY_NAME" = "System.dll" ] ||
			   [ "$ASSEMBLY_NAME" = "System.Xml.dll" ]; then
				$MONO_DIR/runtime/mono-wrapper --aot -O=all $ASSEMBLY
			fi
		fi
		#elif [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_2_0" ] ||
		#     [ "$ASSEMBLY_DIR" = "$ASSEMBLIES_DIR/net_2_1" ]; then
		#	if [ "$ASSEMBLY_NAME" = "mscorlib.dll" ] ||
		#	   [ "$ASSEMBLY_NAME" = "System.dll" ] ||
		#	   [ "$ASSEMBLY_NAME" = "System.Xml.dll" ]; then
		#		MONO_PATH=$MONO_DIR/class/lib/net_2_0:$MONO_PATH $MONO_DIR/runtime/mono-wrapper --aot -O=all $ASSEMBLY
		#	fi
		#fi
	fi
done