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

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

WINELIB=''
SHORTNAMES=''
XPM=''
LANG=not_matching
NEWBUILD=''
ALLDEFINES=''

# Ask question 'str' and set 'var' to 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"
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"
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"
fi

LANGS=`echo En rc/sysres_*.rc | sed -e 's/rc\/sysres_//g' -e 's/\.rc//g' -e 's/ /\//g;'`
while	expr "$LANGS" : ".*$LANG" = 0 > /dev/null
do
	prompt "Language ($LANGS)" LANG En
	if	expr "$LANGS" : ".*$LANG" = 0 > /dev/null
	then
		echo "\"$LANG\" is not a supported language."
	fi
done
ALLDEFINES="$ALLDEFINES -ALANG\($LANG\)"

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

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

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

	CF_A=`mount | awk '/^\/dev\/fd/ {print $3;exit} END {print "/a"}'`
	prompt "Which directory do you want to use as A:" CF_A $CF_A
	CF_C=`awk '{if ($3=="msdos") {print $2;exit}} END {print "/c"}' /etc/fstab`
	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'
	if [ -r "$CF_C/autoexec.bat" ]
	then
		CF_Temp=`tr A-Z a-z < "$CF_C/autoexec.batX" | sed -n 's/^ *set *temp= *\(c:.*[a-z]\).*/\1/p'`
	fi
	if [ -z "$CF_Temp" ]
	then
		CF_Temp='c:\temp'
	fi
	prompt "Where should Windows apps store temp files" CF_Temp $CF_Temp
	prompt "Which path should be used to find progs/DLL's" CF_Path "$CF_Windows;$CF_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'

	cat >  $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

[fonts]
system=*-helvetica
mssansserif=*-helvetica
msserif=*-times
fixedsys=*-fixed
arial=*-helvetica
helv=*-helvetica
roman=*-times
default=*-*

[serialports]
Com1=$CF_Com1
Com2=$CF_Com2

[parallelports]
Lpt1=$CF_Lpt1

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

	echo
	sed '1 i\
The config file '"$WINE_CONFIGFILE"' now looks like this:\
\
' < $WINE_CONFIGFILE | $PAGER

	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

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
#define WINE_INI_GLOBAL "$WINE_CONFIGFILE"
#define AutoDefines $ALLDEFINES
EOF

echo
echo "Creating Makefiles.  This may take a while."
if xmkmf -a
then :
else	cat << EOF

WARNING:  The exit status of the command 'xmkmf -a' indicates an error.
Maybe the Wine directory is incomplete, or Imake (see 'man xmkmf imake')
is incorrectly configured?  In the latter case, it might be easiest to
reinstall X11 to get a new copy of Imake.
EOF
fi

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

WARNING:  You have some files named '*.rej', which usually indicates
rejected patch files.  Maybe you tried to upgrade Wine with 'patch',
and that some of the patches failed?  If something doesn't work, this
might be the reason.  See 'man patch' (especially the '-p' option).

List of "*.rej" files:

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

if [ -f ./Makefile ]
then
	echo
	echo "Configure finished.  Do 'make' to compile Wine."
else
	echo
	echo "*** There was a problem with 'imake': the main Makefile has not be created."
fi
