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

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

WINELIB=''
LANGUAGE=not_matching
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
echo Read the RELEASE-NOTES for an explanation of the various flags
echo

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

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\)"

prompt "Inter-process communication" CONFIG_IPC N
if [ CONFIG_IPC = 'Y' -o $CONFIG_IPC = 'y' ]
then
       ALLDEFINES="$ALLDEFINES -DCONFIG_IPC"
fi

prompt "Malloc debugging" MALLOC_DEBUGGING N
if [ MALLOC_DEBUGGING = 'Y' -o $MALLOC_DEBUGGING = 'y' ]
then
       MALLOC_DEBUGGING="#define MALLOC_DEBUGGING"
       ALLDEFINES="$ALLDEFINES -DMALLOC_DEBUGGING"
else
       MALLOC_DEBUGGING=''
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 COM1" CF_Com1 '/dev/cua0'
	prompt "Where is COM2" CF_Com2 '/dev/cua1'
	prompt "Where is LPT1" CF_Lpt1 '/dev/lp0'

	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]
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

cat > autoconf.h << EOF
/* autoconf.h generated automatically.  Run Configure. */
$WINELIB
$MALLOC_DEBUGGING
#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
