#! /bin/sh
#
# Configure script for wine

: ${EDITOR:=vi}
: ${PAGER:=more}

ALLDEFINES=''

# Ask question 'str' and sets 'var' reply (defaulting to 'def' on CR)
prompt ()
{
	str="$1"
	var="$2"
	def="$3"

	eval $var='$def'
	echo
	echo -n "$str [$def]? "
	input=`head -1`  #  When using read, user must double all backslashes
	if [ -n "$input" ]
	then
		eval $var='$input'
	fi
}

echo -n 'Build Wine as emulator or library (E/L) [E]? '
read input
if [ "$input" = 'l' -o "$input" = 'L' ]
then
	WINELIB='#define WINELIB -DWINELIB'
	ALLDEFINES="$ALLDEFINES -DWINELIB"
else
	WINELIB=''

#	Commented out until the processor emulator starts to work.
#
#	echo
#	echo -n 'Use processor emulator (*DOES*NOT*WORK*YET*) (Y/N) [N]? '
#	read input
#	if [ "$input" = 'y' -o "$input" = 'Y' ]
#	then
#		PROCEMU='#define PROCEMU'
#		ALLDEFINES="$ALLDEFINES -DPROCEMU"
#		echo
#		echo -n 'bochs directory [/usr/src/bochs]? '
#		read input
#		if [ "$input" = '' ]
#		then
#			ALLDEFINES="$ALLDEFINES -DPROC_EMU_DIR=/usr/src/bochs"
#		else
#			ALLDEFINES="$ALLDEFINES -DPROC_EMU_DIR="$input
#		fi
#	fi

fi

echo
echo -n 'Short filenames (Y/N) [N]? '
read input
if [ "$input" = 'y' -o "$input" = 'Y' ]
then
	SHORTNAMES='#define ShortNames -DSHORTNAMES'
	ALLDEFINES="$ALLDEFINES -DSHORTNAMES"
else
	SHORTNAMES=''
fi

echo
echo -n 'Use the XPM library (Y/N) [N]? '
read input
if [ "$input" = 'y' -o "$input" = 'Y' ]
then
	XPM='#define USE_XPM'
	ALLDEFINES="$ALLDEFINES -DUSE_XPM"
else
	XPM=''
fi

prompt "Global configfile name" WINE_CONFIGFILE /usr/local/etc/wine.conf

WINE_INI_GLOBAL='#define WINE_INI_GLOBAL "'$WINE_CONFIGFILE'"'

if [ -r $WINE_CONFIGFILE ]
then
	DEFAULT_ANS=N
else
	DEFAULT_ANS=Y
fi

echo
echo -n "Do you want to make a config file now (Y/N) [$DEFAULT_ANS]? "
read input
if [ "$input" = '' ]
then
	input="$DEFAULT_ANS"
fi
if [ "$input" = 'y' -o "$input" = 'Y' ]
then
	if [ -r $WINE_CONFIGFILE ]
	then
		echo "Backing up the old file to ${WINE_CONFIGFILE}.old."
		if cp $WINE_CONFIGFILE ${WINE_CONFIGFILE}.old
		then	:
		else
			echo "Error while creating backup file.  Fix it and run Configure again"
			exit 1
		fi
	fi

	case `awk 'BEGIN {s=0} {if ($3=="msdos") s++} END {print s}' /etc/fstab` in
	0)	CF_C=/c;;
	1)	CF_C=`awk '{if ($3=="msdos") print $2}' /etc/fstab`;;
	*)	CF_C=`awk '{if ($3=="msdos") {print $2;exit}}' /etc/fstab`;;
	esac

	prompt "Which directory do you want to use as A:" CF_A /a
	prompt "Which directory do you want to use as C:" CF_C $CF_C
	prompt "Where is the Windows directory" CF_Windows 'c:\windows'
	prompt "Where is the System directory" CF_System 'c:\windows\system'
	prompt "Where should Windows apps store temp files" CF_Temp 'c:\temp'
	prompt "Which path should be used to find executables and DLL's" CF_Path 'c:\windows;c:\windows\system'
	prompt "Where is sysres.dll" CF_SystemResources `pwd`/sysres.dll
	prompt "Where is COM1" CF_Com1 '/dev/cua0'
	prompt "Where is COM2" CF_Com2 '/dev/cua1'
	prompt "Where is LPT1" CF_Lpt1 '/dev/lp0'
	prompt "Log messages to which file (CON = stdout)" CF_File 'CON'

	echo
	sed -n -e 's/^ *\"\(WM_[A-Z0-9]*\)\".*/\1/p' < misc/spy.c | \
		sort | pr -ta4w83 | sed '1 i\
Here is the list of messages:\
\
' | $PAGER

	prompt "Exclude which messages from the log" CF_Exclude 'WM_SIZE;WM_TIMER'

	echo
	echo "The config file $WINE_CONFIGFILE now looks like this:"
	tee $WINE_CONFIGFILE << EOF
[drives]
A=$CF_A
C=$CF_C

[wine]
Windows=$CF_Windows
System=$CF_System
Temp=$CF_Temp
Path=$CF_Path
SystemResources=$CF_SystemResources

[serialports]
Com1=$CF_Com1
Com2=$CF_Com2

[parallelports]
Lpt1=$CF_Lpt1

[spy]
File=$CF_File
Exclude=$CF_Exclude
EOF

	echo
	echo -n "Do you want to edit it using $EDITOR (Y/N) [N]? "
	read input
	if [ "$input" = 'y' -o "$input" = 'Y' ]
	then
		$EDITOR $WINE_CONFIGFILE
	fi
else
	if [ ! -r $WINE_CONFIGFILE ]
	then
		echo 'Ok, remember to make it yourself later.'
	fi
fi

prompt "Language (En/De)" LANG En
ALLDEFINES="$ALLDEFINES -ALANG\($LANG\)"

NEWBUILD=''
if [ "`(domainname)`" = 'amscons.com' ]
then
    echo
    echo -n 'New build program (Y/N) [N]? '
    read input
    if [ "$input" = 'y' -o "$input" = 'Y' ]
    then
	NEWBUILD='#define NewBuild -DNEWBUILD'
	ALLDEFINES="$ALLDEFINES -DNEWBUILD"
    fi
fi

NEWLINUXLDT=''
if grep -s seg_not_present /usr/include/linux/ldt.h 2> /dev/null
then
	ALLDEFINES="$ALLDEFINES -DNEW_LDT_STRUCT"
fi

cat > autoconf.h << EOF
/* autoconf.h generated automatically.  Run Configure. */
$WINELIB
$SHORTNAMES
$XPM
$NEWBUILD
$WINE_INI_GLOBAL
$ENDIAN
$PROCEMUDIR
#define AutoDefines $ALLDEFINES
EOF

xmkmf -a

if [ 0 -lt `find . -name "*.rej" -print | wc -l` ]
then
	cat << EOF

WARNING:  You have some files named "*.rej".  Rejected patch files?
Maybe you tried to upgrade Wine by diff-files, and that patch failed.
If something doesn't work, this might be the reason.  See "man patch".

List of "*.rej" files:

EOF
	find . -name "*.rej" -print
	echo
fi
