#!/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=""
name=$0

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

# now find the top-level directory of the build 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 "$name: could not locate the Wine build 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/$name" ]
then WINELOADER="$topdir/loader/$name"
elif [ -x "$topdir/loader/wine" ]
then WINELOADER="$topdir/loader/wine"
elif [ -x "$topdir/loader/wine64" ]
then WINELOADER="$topdir/loader/wine64"
else
  echo "$name: 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" "$@"
