#!/bin/sh
#
# Wrapper script to run Wine and Winelib apps from inside the source tree
#
# Copyright (C) 2002 Alexandre Julliard
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#

# first determine the directory that contains the app itself

appdir=""
case "$0" in
  */*)
    # $0 contains a path, use it
    appdir=`dirname "$0"`
    ;;
  *)
    # no directory in $0, search in PATH
    saved_ifs=$IFS
    IFS=:
    for d in $PATH
    do
      IFS=$saved_ifs
      if [ -x "$d/$0" ]
      then
        appdir="$d"
        break
      fi
    done
    ;;
esac

# now find the top-level directory of the source tree

if [ -x "$appdir/server/wineserver" ]
then topdir="$appdir"
elif [ -x "$appdir/../server/wineserver" ]
then topdir="$appdir/.."
elif [ -x "$appdir/../../server/wineserver" ]
then topdir="$appdir/../.."
elif [ -x "$appdir/../../../server/wineserver" ]
then topdir="$appdir/../../.."
else
  echo "$0: could not locate Wine source tree"
  exit 1
fi

# setup the environment

topdir=`cd "$topdir" && pwd`

if [ "`uname -s`" = "Darwin" ]
then
  if [ -n "$DYLD_LIBRARY_PATH" ]
  then
    DYLD_LIBRARY_PATH="$topdir/libs/wine:$DYLD_LIBRARY_PATH"
  else
    DYLD_LIBRARY_PATH="$topdir/libs/wine"
  fi
  export DYLD_LIBRARY_PATH
else
  if [ -n "$LD_LIBRARY_PATH" ]
  then
    LD_LIBRARY_PATH="$topdir/libs/wine:$LD_LIBRARY_PATH"
  else
    LD_LIBRARY_PATH="$topdir/libs/wine"
  fi
  export LD_LIBRARY_PATH
fi

WINELOADER="$topdir/loader/wine"
export WINELOADER

# any local settings ?
if [ -f "$topdir/.winewrapper" ]
then
    . $topdir/.winewrapper
fi

# and run the application

case "$0" in
  wine|*/wine)
    exec "$WINELOADER" "$@"
    ;;
  */*)
    [ -f "$0.exe.so" ] && exec "$WINELOADER" "$0.exe.so" "$@"
    echo "$0: cannot find corresponding application"
    exit 1
    ;;
  *)
    [ -f "$appdir/$0.exe.so" ] && exec "$WINELOADER" "$appdir/$0.exe.so" "$@"
    echo "$0: cannot find corresponding application"
    exit 1
    ;;
esac
