#!/bin/sh
#
# Script to create the initial WINEPREFIX directory
#
# Copyright 1999 Ove Kåven
# Copyright 2004 Chris Morgan
# Copyright 2004 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
#

usage()
{
    echo "Usage: $0 [options]"
    echo ""
    echo "Options:"
    echo "  -h, --help                 Display this message"
    echo "      --prefix <dir>         Directory to create (default: \$WINEPREFIX or ~/.wine)"
    echo "  -q, --quiet                Don't print status messages"
    echo "  -w, --wait                 Wait for the wineserver to exit before returning"
    echo ""
}

set -e

bindir=""
case "$0" in
  */*)
    # $0 contains a path, use it
    bindir=`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
        bindir="$d"
        break
      fi
    done
    ;;
esac

bindir=`cd "$bindir" && pwd`
dlldir="$bindir/@bintodlldir@"

do_wait=0
quiet=0

if [ ! -f "$dlldir/ntdll.dll.so" -a \
     -x "$bindir/../server/wineserver" -a \
     -f "$bindir/../dlls/ntdll/ntdll.dll.so" ]
then
    # running from the wine source tree
    topdir=`cd "$bindir/.." && pwd`
    WINELOADER="$topdir/wine"
    WINESERVER="$topdir/server/wineserver"
    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

while [ $# -gt 0 ]
do
    case "$1" in
        -h|--help)
            usage
            exit 0
            ;;
        --prefix)
            WINEPREFIX="$2"
            shift 2
            ;;
        -q|--quiet)
            quiet=1
            shift
            ;;
        -w|--wait)
            do_wait=1
            shift
            ;;
        --use-wine-tree)
            # ignored, autodetected now
            shift 2
            ;;
        *)
            echo "Unknown option $1"
            usage
            exit 1
            ;;
  esac
done

echo "Note: wineprefixcreate is deprecated and shouldn't be needed anymore." 1>&2
echo "      WINEPREFIX creation and updates now happen automatically when needed." 1>&2
echo 1>&2

WINEPREFIX="${WINEPREFIX:-$HOME/.wine}"

if [ -d "$WINEPREFIX" ] || mkdir "$WINEPREFIX"; then :
else
    echo "Could not create $WINEPREFIX, aborting"
    exit 1
fi

WINEPREFIX=`cd "$WINEPREFIX" && pwd`
export WINEPREFIX

if [ -d "$WINEPREFIX/dosdevices" ]
then
    "${WINELOADER:-$bindir/wine}" wineboot.exe --update
else
    "${WINELOADER:-$bindir/wine}" wineboot.exe
fi

# Wait for the wineserver to finish

if [ $do_wait = 1 ]
then
    "${WINESERVER:-$bindir/wineserver}" -w
fi
