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

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

WINELIB=''
SHORTNAMES=''
XPM=''
LANGUAGE=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) [Y]? '
read input
if [ "$input" = 'n' -o "$input" = 'N' ]
then :
else
	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" : ".*$LANGUAGE" = 0 > /dev/null
do
	prompt "Language ($LANGS)" LANGUAGE En
	if	expr "$LANGS" : ".*$LANGUAGE" = 0 > /dev/null
	then
		echo "\"$LANGUAGE\" is not a supported language."
	fi
done
ALLDEFINES="$ALLDEFINES -ALANG\($LANGUAGE\)"

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
