#!/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

if [ -x "$topdir/loader/wine" ]
then WINELOADER="$topdir/loader/wine"
elif [ -x "$topdir/loader/wine32" ]
then WINELOADER="$topdir/loader/wine32"
else
  echo "$0: could not find the wine loader in $topdir"
  exit 1
fi
export WINELOADER

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

# and run the application

exec "$WINELOADER" "$@"
