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

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

WINELIB=''
SHORTNAMES=''
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 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

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

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

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