#!/bin/bash
#
# Script for creating a self-contained Wings package for Windows.
#

#
# The pre-built Erlang/OTP R12B-0 for Windows requires this version
# of the VC80.CRT. It must be updated if future release of Erlang
# requires a later version.
#
WINGS_VCREDIST_VERSION=2.0.50727.4053

OS=`uname -o`
if [ X$OS != XMsys ]; then
    echo "This script is supposed to be run in the" \
	 "msys environment on windows only." >&2
    exit 1
fi

# Configurable stuff.
TEMPDIR=$TMP
INSTALL=/usr/bin/install
NSIS=`which makensis 2>/dev/null`
if [ -z "$NSIS" ]; then
    NSIS=c:/program/nsis/makensis
fi

DEST_ROOT="build"

if [ -z "$ESDL_PATH" ]; then
    echo "The environment variable ESDL_PATH must be set to " \
	 "the top of the ESDL installation." >&2
    exit 1
fi
ESDL_NAME=`basename $ESDL_PATH`

ERLANG_PATH=`which erl`
ERLANG_PATH=`dirname $ERLANG_PATH`
ERLANG_PATH=`dirname $ERLANG_PATH`

if [ ! -f "$WINGS_VCREDIST" ]; then
    echo "The environment variable WINGS_VCREDIST must point out vcredist_x86.exe. " \
	 "If you have Visual Studio 2005 installed, try 'find "/cygdrive/c/Program Files" -name vcredist_x86.exe'." \
	 "Otherwise, you can download it from Microsoft (try googling 'vcredist_x86.exe')." >&2
    exit 1
fi

# Copy the Wings application.

WINGS_DIR="`pwd`"
WINGS_VSN=`sed -n "/WINGS_VSN/s/^WINGS_VSN[^0-9]*//p" vsn.mk`
WINGS_APP="wings-$WINGS_VSN"

dest="$DEST_ROOT"

$INSTALL -d "$dest"
$INSTALL -c -m 644 "$WINGS_VCREDIST" "$dest"
$INSTALL -c -m 644 README AUTHORS license.terms vsn.mk "$dest"
$INSTALL -c -m 644 win32/wings.nsi "$dest"
$INSTALL -c -m 644 win32/Wings3D.exe "$dest"
$INSTALL -c -m 644 win32/wings.ico "$dest"
$INSTALL -c -m 644 win32/install.ico "$dest"
$INSTALL -c -m 644 win32/uninstall.ico "$dest"

dest="$DEST_ROOT/lib/$WINGS_APP"

$INSTALL -d "$dest" "$dest/ebin" "$dest/patches"
$INSTALL -c -m 644 ebin/* "$dest/ebin"
$INSTALL -d  "$dest/fonts"

$INSTALL -d "$dest/textures"
$INSTALL -d "$dest/shaders"
$INSTALL -c -m 644 textures/* "$dest/textures"
$INSTALL -c -m 644 shaders/* "$dest/shaders"

$INSTALL -d "$dest/plugins/default" "$dest/plugins/accel" \
 "$dest/plugins/import_export" "$dest/plugins/commands" \
 "$dest/plugins/primitives" "$dest/plugins/win32_file" \
 "$dest/plugins/autouv" "$dest/plugins/jpeg"

$INSTALL -c -m 644 fonts/* "$dest/fonts"

$INSTALL -c -m 644 plugins/default/wp9_dialogs* "$dest/plugins/default"
$INSTALL -c -m 644 plugins/accel/* "$dest/plugins/accel"
$INSTALL -c -m 644 plugins/import_export/* "$dest/plugins/import_export"
$INSTALL -c -m 644 plugins/commands/* "$dest/plugins/commands"
$INSTALL -c -m 644 plugins/primitives/* "$dest/plugins/primitives"
$INSTALL -c -m 644 plugins/win32_file/* "$dest/plugins/win32_file"
$INSTALL -c -m 644 plugins/autouv/* "$dest/plugins/autouv"
$INSTALL -c -m 644 plugins/jpeg/* "$dest/plugins/jpeg"

# Copy the relevant parts of Erlang/OTP.

src="$ERLANG_PATH"
dest="$DEST_ROOT"
erts_src=`echo "$src"/erts-*`
stdlib=`basename "$src"/lib/stdlib-*`
kernel=`basename "$src"/lib/kernel-*`
xmerl=`basename "$src"/lib/xmerl-*`

$INSTALL -d "$dest/bin" \
    "$dest/lib/$stdlib/ebin" \
    "$dest/lib/$kernel/ebin" \
    "$dest/lib/$xmerl/ebin"

$INSTALL -c -m 644 "$src"/lib/kernel-*/ebin/* "$dest/lib/$kernel/ebin"
$INSTALL -c -m 644 "$src"/lib/stdlib-*/ebin/* "$dest/lib/$stdlib/ebin"
$INSTALL -c -m 644 "$src"/lib/xmerl-*/ebin/* "$dest/lib/$xmerl/ebin"

$INSTALL -c "$erts_src/bin/werl.exe" "$dest/bin"
$INSTALL -c "$erts_src/bin/erlexec.dll" "$dest/bin"
$INSTALL -c "$erts_src/bin/beam.dll" "$dest/bin"
$INSTALL -c -m 644 "$src/bin/start.boot" "$dest/bin"
$INSTALL -c "$erts_src/bin/inet_gethost.exe" "$dest/bin/inet_gethost.exe"

# Copy the relevant parts of ESDL.
dest="$DEST_ROOT/lib/$ESDL_NAME"
$INSTALL -d "$dest/ebin" "$dest/priv"
$INSTALL -c -m 644  "$ESDL_PATH"/ebin/* "$dest/ebin"
$INSTALL -c -m 644  "$ESDL_PATH"/priv/sdl_driver.dll "$dest/priv"
$INSTALL -c -m 644  "$ESDL_PATH"/priv/SDL.dll "$dest/priv"
strip --strip-debug --strip-unneeded "$dest/priv/sdl_driver.dll"
rm -rf "$dest/ebin/sdl_audio.beam" "$dest/ebin/sdl_joystick.beam"

#
# Remove files from OTP not needed.
#
$WINGS_DIR/tools/wings_reduce_otp "$DEST_ROOT"

# Strip debug information from all beam files.
cd "$latest_wings"
erlc -o "$TEMPDIR" tools/strip.erl
cd "$DEST_ROOT"
erl -noshell -pa $TEMPDIR -run strip strip

# Run NSIS
"$NSIS" //DREDIST_DLL_VERSION=$WINGS_VCREDIST_VERSION //DWINGS_VERSION=$WINGS_VSN wings.nsi

cd "$WINGS_DIR"
cp wings*.exe ..
