|  | #!/bin/bash | 
|  | # WINE Installation script | 
|  | # Can do almost everything from compiling to configuring... | 
|  |  | 
|  | # Mar 31 1999 - Ove Kåven | 
|  | #  First version | 
|  | # Dec 9 1999 - Ove Kåven | 
|  | #  require Xpm | 
|  | # Feb 25 2000 - Ove Kåven | 
|  | #  auto-add /usr/local/lib to /etc/ld.so.conf | 
|  | # Mar 2 2000 - Ove Kåven | 
|  | #  source rather than grep config.cache | 
|  | #  use sourced config.cache to start ldconfig | 
|  | #  reconfigure if config.cache doesn't exist | 
|  | # Mar 30 2000 - Ove Kåven | 
|  | #  autoconfigure no-windows installs | 
|  | #  do not install registry on real-windows installs | 
|  | #  some support for binary package installs | 
|  | #  set and tell user about LD_LIBRARY_PATH if necessary | 
|  | #  set EXTRA_LD_LIBRARY_PATH in wine.conf | 
|  | # Apr 9 2000 - Ove Kåven | 
|  | #  make root's registry global (system-default) | 
|  | # May 9 2000 - Ove Kåven | 
|  | #  use ttydrv when running regapi, so we don't have to run from X | 
|  | #  change debugger path in registry | 
|  | # Oct 29 2000 - Ove Kåven | 
|  | #  added --enable-opengl to default confargs | 
|  | #  added conf_question, conf_yesno_answer, and conf_string_answer functions | 
|  | #  added DEFCAT variable | 
|  |  | 
|  | #--- defaults (change these if you are a packager) | 
|  | CONFARGS=--enable-opengl      # configure args, e.g. --prefix=/usr --sysconfdir=/etc | 
|  | prefix=/usr/local             # installation prefix | 
|  | sysconfdir=$prefix/etc        # where wine.conf and global registry is supposed to be | 
|  | bindir=$prefix/bin            # where winelib apps will be (or is) installed | 
|  | libdir=$prefix/lib            # where libwine.so will be (or is) installed | 
|  | exdir=documentation/samples   # where the example system.ini resides | 
|  | CONF=$sysconfdir/wine.conf    # default path of the wine.conf | 
|  | BINDIST=no                    # whether called from a binary package config script | 
|  | DOCONF=auto                   # whether to autogenerate wine.conf | 
|  | DOWCHK=auto                   # whether to autoconfigure existing-windows installation | 
|  | DOWINE=auto                   # whether to autoconfigure no-windows installation | 
|  | DOREG=auto                    # whether to install default registry | 
|  | SYSREG=yes                    # whether to make root's registry global (system-default) | 
|  |  | 
|  | # "make install" still installs the dlls into $libdir, but this may change in the future | 
|  | # (DLLPATH should point to them if/when they are not in standard ld.so paths) | 
|  | DLLPATH=$libdir/wine          # default path of the dll .so files (except libwine.so) | 
|  |  | 
|  | # having the Wine debugger launched automatically will be a plus for us | 
|  | DEBUGGER=$bindir/winedbg      # the (installed) path of winedbg | 
|  | HDEBUGGER=debugger/winedbg    # the (non-installed) path of winedbg | 
|  |  | 
|  | # this is only for existing-windows installs | 
|  | WINECONF=tools/wineconf       # the path of wineconf perl script | 
|  |  | 
|  | # this is only for no-windows installs | 
|  | WINEINI=wine.ini              # the path of default wine.ini (also used by wineconf) | 
|  | WININI=/dev/null              # the path of default win.ini | 
|  | SYSTEMINI=$exdir/system.ini   # the path of default system.ini | 
|  | REGAPI=programs/regapi/regapi # the path of regapi winelib application | 
|  | DEFREG=winedefault.reg        # the path of the registry file to be fed to regapi | 
|  | # CROOT=/var/wine             # the path of the fake Drive C (asks user if not set) | 
|  | DEFCAT=cat                    # program to cat $DEFREG with (some packages need zcat) | 
|  | #--- end of defaults | 
|  |  | 
|  | # temporary files used by the installer | 
|  | TMPCONF=/tmp/wineinstall.conf | 
|  | TMPREG=/tmp/wineinstall.reg | 
|  |  | 
|  | # functions | 
|  |  | 
|  | function conf_question { | 
|  | # parameters: $1 = importance, $2 = question-id, $3+ = message lines | 
|  | # the first two parameters can be used by e.g. debconf in debian packages | 
|  | # but here we just print the message | 
|  | shift 2 | 
|  | echo | 
|  | local LINE="$1" | 
|  | while shift | 
|  | do { | 
|  | echo "$LINE" | 
|  | LINE="$1" | 
|  | } | 
|  | done | 
|  | } | 
|  |  | 
|  | function conf_yesno_answer { | 
|  | unset ANSWER | 
|  | while [ "$ANSWER" != 'yes' ] && [ "$ANSWER" != 'no' ] | 
|  | do { | 
|  | echo -n "$1" | 
|  | read ANSWER | 
|  | } | 
|  | done | 
|  | } | 
|  |  | 
|  | function conf_string_answer { | 
|  | echo -n "$1" | 
|  | read ANSWER | 
|  | } | 
|  |  | 
|  | # startup... | 
|  |  | 
|  | echo "WINE Installer v0.5" | 
|  | echo | 
|  |  | 
|  | if [ "$BINDIST" = 'no' ] | 
|  | then { | 
|  |  | 
|  | if ! [ -f configure ] | 
|  | then { | 
|  | echo "You're running this from the wrong directory." | 
|  | echo "Change to the Wine directory and try again." | 
|  | exit 1 | 
|  | } | 
|  | fi | 
|  |  | 
|  | # check whether RPM installed, and if it is, remove any old wine rpm. | 
|  | hash rpm &>/dev/null | 
|  | RET=$? | 
|  | if [ $RET -eq 0 ]; then | 
|  | if [ -n "`rpm -qi wine 2>/dev/null|grep "^Name"`" ]; then | 
|  | echo "Warning: Old Wine RPM install detected. Do you want to remove it first?" | 
|  | conf_yesno_answer "(yes/no) " | 
|  | if [ "$ANSWER" = 'yes' ]; then | 
|  | echo Starting wine rpm removal... | 
|  | rpm -e wine; RET=$? | 
|  | if [ $RET -eq 0 ]; then | 
|  | echo Done. | 
|  | else | 
|  | echo "FAILED. Probably you aren't installing as root." | 
|  | fi | 
|  | else | 
|  | echo "Sorry, I won't install Wine when an rpm version is still installed." | 
|  | echo "(Wine support suffered from way too many conflicts)" | 
|  | echo "Have a nice day !" | 
|  | exit | 
|  | fi | 
|  | fi | 
|  | fi | 
|  |  | 
|  | # run the configure script, if necessary | 
|  |  | 
|  | if [ -f config.cache ] && [ -f Makefile ] && [ Makefile -nt configure ] | 
|  | then { | 
|  | echo "I see that WINE has already been configured, so I'll skip that." | 
|  | # load configure results | 
|  | . ./config.cache | 
|  | } | 
|  | else { | 
|  | echo "Running configure..." | 
|  | echo | 
|  | if ! ./configure $CONFARGS | 
|  | then { | 
|  | echo | 
|  | echo "Configure failed, aborting install." | 
|  | rm -f config.cache | 
|  | exit 1 | 
|  | } | 
|  | fi | 
|  | # load configure results | 
|  | . ./config.cache | 
|  | # make sure X was found | 
|  | eval "$ac_cv_have_x" | 
|  | if [ "$have_x" != "yes" ] | 
|  | then { | 
|  | echo "Install the X development headers and try again." | 
|  | rm -f config.cache | 
|  | exit 1 | 
|  | } | 
|  | elif [ "$ac_cv_header_X11_xpm_h" != "yes" ] | 
|  | then { | 
|  | echo "Install the Xpm development headers and try again." | 
|  | rm -f config.cache | 
|  | exit 1 | 
|  | } | 
|  | fi | 
|  | } | 
|  | fi | 
|  |  | 
|  | # now do the compilation | 
|  |  | 
|  | if [ -f wine ] && [ wine -nt Makefile ] | 
|  | then { | 
|  | echo "Hmm, looks like WINE is already compiled. I'll skip that too, I guess." | 
|  | } | 
|  | else { | 
|  | echo "Compiling WINE. Grab a lunch or two, rent a video, or whatever, in the meantime..." | 
|  | echo | 
|  | if ! { make depend && make; } | 
|  | then { | 
|  | echo | 
|  | echo "Compilation failed, aborting install." | 
|  | exit 1 | 
|  | } | 
|  | fi | 
|  | echo | 
|  | } | 
|  | fi | 
|  |  | 
|  | # and installation, if root | 
|  |  | 
|  | if [ `whoami` != 'root' ] | 
|  | then { | 
|  | echo "You aren't root, so I'll skip the make install." | 
|  | # setup to run from current directory | 
|  | DLLPATH="$PWD/dlls" | 
|  | if [ -z "$LD_LIBRARY_PATH" ] | 
|  | then LD_LIBRARY_PATH="$PWD:$DLLPATH" | 
|  | else LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD:$DLLPATH" | 
|  | fi | 
|  | export LD_LIBRARY_PATH | 
|  | DEBUGGER="$PWD/$HDEBUGGER" | 
|  | echo | 
|  | echo "NOTE! To run Wine without installing, you must set the environment variable" | 
|  | echo "LD_LIBRARY_PATH to $PWD:$DLLPATH" | 
|  | echo "in your logon scripts." | 
|  | } | 
|  | else { | 
|  | echo "Now installing binaries onto the system..." | 
|  | echo | 
|  | if ! make install | 
|  | then { | 
|  | echo | 
|  | echo "Installation failed, aborting." | 
|  | exit 1 | 
|  | } | 
|  | fi | 
|  | if [ -f /etc/ld.so.conf ] && ! grep -qs "$libdir" /etc/ld.so.conf | 
|  | then { | 
|  | echo | 
|  | echo "$libdir didn't exist in your /etc/ld.so.conf, adding it now..." | 
|  | echo "$libdir" >>/etc/ld.so.conf | 
|  | echo "Re-running ldconfig..." | 
|  | eval "$ac_cv_path_LDCONFIG" | 
|  | } | 
|  | fi | 
|  | } | 
|  | fi | 
|  |  | 
|  | } | 
|  | fi # BINDIST | 
|  |  | 
|  | # now check whether we should generate wine.conf | 
|  | if [ -z "$DOCONF" ] | 
|  | then DOCONF=auto | 
|  | fi | 
|  |  | 
|  | if [ "$DOCONF" = 'auto' ] | 
|  | then { | 
|  | # see if we already have a system wine.conf | 
|  | if [ -f $CONF ] | 
|  | then DOCONF=no | 
|  | fi | 
|  | } | 
|  | fi | 
|  |  | 
|  | if [ "$DOCONF" != 'no' ] | 
|  | then { | 
|  | if [ `whoami` != 'root' ] | 
|  | then { | 
|  | CONF=~/.winerc | 
|  | if ! [ -f $CONF ] | 
|  | then { | 
|  | if [ "$DOCONF" != 'yes' ] | 
|  | then { | 
|  | conf_question medium make_user_winerc \ | 
|  | "Since you aren't root, and there's no system wine.conf, I assume" \ | 
|  | "you want a user-specific .winerc. Am I correct?" | 
|  | conf_yesno_answer "(yes/no) " | 
|  | DOCONF="$ANSWER" | 
|  | } | 
|  | fi | 
|  | if [ "$DOCONF" = 'no' ] | 
|  | then { | 
|  | conf_question high need_root \ | 
|  | "Aborting install. Try again as root to generate a system wine.conf." | 
|  | exit 1 | 
|  | } | 
|  | fi | 
|  | echo | 
|  | } | 
|  | fi | 
|  | } | 
|  | else { | 
|  | mkdir -p $sysconfdir | 
|  | DOCONF=yes | 
|  | } | 
|  | fi | 
|  | } | 
|  | fi | 
|  |  | 
|  | # generate wine.conf from existing windows install, if any | 
|  | if [ "$DOCONF" = 'yes' ] | 
|  | then { | 
|  | if [ "$DOWCHK" = 'yes' ] || [ "$DOWCHK" = 'auto' ] | 
|  | then { | 
|  | echo | 
|  | echo -n "Searching for an existing Windows installation..." | 
|  | if ! $WINECONF > $CONF 2>/dev/null | 
|  | then { | 
|  | rm -f $CONF | 
|  | echo " not found." | 
|  | conf_question low do_without_windows \ | 
|  | "Windows was not found on your system, so I assume you want a Wine-only installation." \ | 
|  | "Am I correct?" | 
|  | conf_yesno_answer "(yes/no) " | 
|  | if [ "$ANSWER" = 'no' ] | 
|  | then { | 
|  | conf_question high windows_not_found \ | 
|  | "Aborting install. Make sure your Windows partition is mounted and try again," \ | 
|  | "or create $CONF manually by copying from $WINEINI and adapting the drive paths." | 
|  | exit 1 | 
|  | } | 
|  | fi | 
|  | DOWINE=yes | 
|  | } | 
|  | else { | 
|  | echo " found." | 
|  | conf_question low windows_found \ | 
|  | "Created $CONF using your existing Windows installation." \ | 
|  | "You probably want to review the file, though." | 
|  | DOWINE=no | 
|  | } | 
|  | fi | 
|  | } | 
|  | elif [ "$DOWINE" = 'auto' ] | 
|  | then DOWINE=yes | 
|  | fi | 
|  | } | 
|  | elif [ "$DOWINE" = 'auto' ] | 
|  | then DOWINE=no | 
|  | fi | 
|  |  | 
|  | # setup a no-windows installation, if necessary | 
|  | if [ "$DOWINE" = 'yes' ] | 
|  | then { | 
|  | if [ `whoami` != 'root' ] | 
|  | then DCROOT=~/c | 
|  | else DCROOT=/c | 
|  | fi | 
|  | conf_question low drivec_path \ | 
|  | "Configuring Wine without Windows. Some fake Windows directories must be created, to" \ | 
|  | "hold any .ini files, DLLs, and start menu entries your applications may need to install." | 
|  | while [ -z "$CROOT" ] | 
|  | do { | 
|  | conf_string_answer "Where would you like your fake C drive to be placed? (default is $DCROOT)" | 
|  | if [ -z "$ANSWER" ] | 
|  | then CROOT="$DCROOT" | 
|  | fi | 
|  | if ! [ -d "$ANSWER" ] | 
|  | then { | 
|  | if mkdir -p "$ANSWER" | 
|  | then CROOT="$ANSWER" | 
|  | fi | 
|  | } | 
|  | fi | 
|  | } | 
|  | done | 
|  | echo "Configuring Wine for a no-windows install in $CROOT..." | 
|  | for tdir in "$CROOT/windows" "$CROOT/windows/system" "$CROOT/windows/Start Menu" "$CROOT/windows/Start Menu/Programs" "$CROOT/Common Files" "$CROOT/windows/Profiles/Administrator" "$CROOT/Program Files" | 
|  | do [ -d "$tdir" ] || mkdir "$tdir" | 
|  | done | 
|  | [ -f "$CROOT/windows/win.ini" ]    || cp "$WININI"    "$CROOT/windows/win.ini" | 
|  | [ -f "$CROOT/windows/system.ini" ] || cp "$SYSTEMINI" "$CROOT/windows/system.ini" | 
|  | if [ "$DOCONF" = 'yes' ] | 
|  | then { | 
|  | sed "s|Path=/c\$|Path=${CROOT}|" $WINEINI > $CONF | 
|  | conf_question low default_config \ | 
|  | "Created $CONF using default Wine configuration." \ | 
|  | "You probably want to review the file, though." | 
|  | } | 
|  | fi | 
|  | # now we really should install the registry | 
|  | if [ "$DOREG" = 'auto' ] | 
|  | then DOREG=yes | 
|  | fi | 
|  | } | 
|  | elif [ -z "$CROOT" ] | 
|  | then { | 
|  | echo | 
|  | echo "Reading current Wine configuration from $CONF..." | 
|  | CROOT=`sed -n '/^\[Drive C\]$/,/^\[.*\]$/ s/^Path=\(.*\)/\1/p' $CONF` | 
|  | echo "Drive C is configured at $CROOT." | 
|  | } | 
|  | fi | 
|  | echo | 
|  |  | 
|  | # fixup EXTRA_LD_LIBRARY_PATH | 
|  | if [ "$DOCONF" = 'yes' ] | 
|  | then { | 
|  | echo "Setting EXTRA_LD_LIBRARY_PATH in .winerc to $DLLPATH..." | 
|  | sed "s|EXTRA_LD_LIBRARY_PATH=.*|EXTRA_LD_LIBRARY_PATH=${DLLPATH}|" $CONF > $CONF.new | 
|  | mv -f $CONF.new $CONF | 
|  | echo | 
|  | } | 
|  | fi | 
|  |  | 
|  | # check whether we need to install default registry | 
|  | # (not to be done if windows registry exists) | 
|  | if [ "$DOREG" = 'auto' ] | 
|  | then { | 
|  | echo "Checking for real Windows registry..." | 
|  | if [ -f "$CROOT/windows/system.dat" ] | 
|  | then DOREG=no | 
|  | elif [ -f "$CROOT/windows/system32/config/system" ] | 
|  | then DOREG=no | 
|  | else DOREG=yes | 
|  | fi | 
|  | if [ "$DOREG" = 'yes' ] | 
|  | then echo "Not found, default Wine registry will be installed." | 
|  | else echo "Windows registry found, will not install default Wine registry." | 
|  | fi | 
|  | echo | 
|  | } | 
|  | fi | 
|  |  | 
|  | # install default registry entries | 
|  | if [ "$DOREG" = 'yes' ] | 
|  | then { | 
|  | if [ "$BINDIST" = 'no' ] | 
|  | then { | 
|  | echo "Compiling regapi..." | 
|  | echo | 
|  | (cd programs/regapi; make) | 
|  | echo | 
|  | } | 
|  | fi | 
|  | echo "Preparing to install default Wine registry entries..." | 
|  |  | 
|  | # create a temporary wineinstall.conf file using ttydrv, | 
|  | # so that we don't have to run regapi under X | 
|  | sed "s/GraphicsDriver=.*/GraphicsDriver=ttydrv/" $CONF > $TMPCONF | 
|  |  | 
|  | # create a temporary wineinstall.reg with fixed debugger path | 
|  | $DEFCAT $DEFREG | sed "s|debugger/winedbg|${DEBUGGER}|" > $TMPREG | 
|  |  | 
|  | echo "Installing default Wine registry entries..." | 
|  | echo | 
|  | if ! $REGAPI --config $TMPCONF setValue < $TMPREG > /dev/null | 
|  | then { | 
|  | rm -f $TMPCONF $TMPREG | 
|  | echo "Registry install failed." | 
|  | conf_question high regapi_error | 
|  | exit 1 | 
|  | } | 
|  | else echo "Registry entries successfully installed." | 
|  | fi | 
|  | rm -f $TMPCONF $TMPREG | 
|  | if [ "$SYSREG" = 'auto' ] | 
|  | then SYSREG=yes | 
|  | fi | 
|  | } | 
|  | fi | 
|  |  | 
|  | # make root's registry global, if desired | 
|  | if [ `whoami` = 'root' ] && [ "$SYSREG" = 'yes' ] | 
|  | then { | 
|  | [ -d ~/.wine ] || mkdir ~/.wine | 
|  | if ! [ -f $sysconfdir/wine.userreg ] | 
|  | then { | 
|  | echo "Linking root's user registry hive to the global registry..." | 
|  | cp ~/.wine/wine.userreg $sysconfdir/wine.userreg | 
|  | ln -sf $sysconfdir/wine.userreg ~/.wine/wine.userreg | 
|  | } | 
|  | fi | 
|  | if ! [ -f $sysconfdir/wine.systemreg ] | 
|  | then { | 
|  | echo "Linking root's system registry hive to the global registry..." | 
|  | cp ~/.wine/system.reg $sysconfdir/wine.systemreg | 
|  | ln -sf $sysconfdir/wine.systemreg ~/.wine/system.reg | 
|  | } | 
|  | fi | 
|  | } | 
|  | fi | 
|  |  | 
|  | # it's a wrap | 
|  | echo | 
|  | echo "Installation complete for now. Good luck (this is still alpha software)." | 
|  | echo "If you have problems with WINE, please read the documentation first," | 
|  | echo "as many kinds of potential problems are explained there." |