2 # WINE Installation script
3 # Can do almost everything from compiling to configuring...
5 # Mar 31 1999 - Ove Kåven
7 # Dec 9 1999 - Ove Kåven
9 # Feb 25 2000 - Ove Kåven
10 # auto-add /usr/local/lib to /etc/ld.so.conf
11 # Mar 2 2000 - Ove Kåven
12 # source rather than grep config.cache
13 # use sourced config.cache to start ldconfig
14 # reconfigure if config.cache doesn't exist
15 # Mar 30 2000 - Ove Kåven
16 # autoconfigure no-windows installs
17 # do not install registry on real-windows installs
18 # some support for binary package installs
19 # set and tell user about LD_LIBRARY_PATH if necessary
20 # set EXTRA_LD_LIBRARY_PATH in wine.conf
21 # Apr 9 2000 - Ove Kåven
22 # make root's registry global (system-default)
23 # May 9 2000 - Ove Kåven
24 # use ttydrv when running regapi, so we don't have to run from X
25 # change debugger path in registry
26 # Oct 29 2000 - Ove Kåven
27 # added --enable-opengl to default confargs
28 # added conf_question, conf_yesno_answer, and conf_string_answer functions
29 # added DEFCAT variable
31 # added conf_reset_question function
32 # added file existence checks to the registry copying
33 # fixed problem with no-windows directory creation
34 # some text reformatting from Eric Maryniak
35 # Jan 5 2000 - Chris Morgan
36 # use default config file in /documentation/samples/config
37 # replace .winerc with ~/.wine/config in printed text
38 # added user question to convert .winerc file(if exists) or use the default
40 # add conf_question to allow root to install a local config file and
42 # Jan 12 2000 - Chris Morgan
43 # distinguish between creating local and global config files
44 # display a message about the status of global config files
45 # misc cleanups and reordering of questions
46 # added check to see if wine is installed when we are running as a normal
47 # user and print a message if wine cannot be found
49 #--- defaults (change these if you are a packager)
50 CONFARGS="--enable-opengl" # configure args, e.g. --prefix=/usr --sysconfdir=/etc
51 prefix=/usr/local # installation prefix
52 sysconfdir=$prefix/etc # where wine.conf and global registry is supposed to be
53 bindir=$prefix/bin # where winelib apps will be (or is) installed
54 libdir=$prefix/lib # where libwine.so will be (or is) installed
55 exdir=documentation/samples # where the example system.ini resides
56 GCONF=$sysconfdir/wine.conf # default path of the wine.conf global config file
57 LCONF=~/.wine/config # default path of the local config file
58 BINDIST=no # whether called from a binary package config script
59 DOGLOBALCONF=auto # whether to autogenerate wine.conf
60 DOLOCALCONF=auto # whether to autogenerate localconf
61 DOWCHK=auto # whether to autoconfigure existing-windows installation
62 DOWINE=auto # whether to autoconfigure no-windows installation
63 DOREG=auto # whether to install default registry
64 SYSREG=yes # whether to make root's registry global (system-default)
65 CONVCONF=no # whether we are converting an existing .winerc or not
67 # "make install" still installs the dlls into $libdir, but this may change in the future
68 # (DLLPATH should point to them if/when they are not in standard ld.so paths)
69 DLLPATH=$libdir/wine # default path of the dll .so files (except libwine.so)
71 # having the Wine debugger launched automatically will be a plus for us
72 DEBUGGER=$bindir/winedbg # the (installed) path of winedbg
73 HDEBUGGER=debugger/winedbg # the (non-installed) path of winedbg
75 # this is only for existing-windows installs
76 WINECONF=tools/wineconf # the path of wineconf perl script
78 # this is only for no-windows installs
79 WINEINI=$exdir/config # the path of default wine config file (also used by wineconf)
80 WININI=/dev/null # the path of default win.ini
81 SYSTEMINI=$exdir/system.ini # the path of default system.ini
82 REGAPI=programs/regapi/regapi # the path of regapi winelib application
83 DEFREG=winedefault.reg # the path of the registry file to be fed to regapi
84 # CROOT=/var/wine # the path of the fake Drive C (asks user if not set)
85 DEFCAT=cat # program to cat $DEFREG with (some packages need zcat)
88 # temporary files used by the installer
89 TMPCONF=/tmp/wineinstall.conf
90 TMPREG=/tmp/wineinstall.reg
98 function conf_question {
99 # parameters: $1 = importance, $2 = question-id, $3+ = message lines
100 # the first two parameters can be used by e.g. debconf in debian packages
101 # but here we just print the message
113 function conf_reset_question {
114 # parameters: $1 = question-id
115 # this is used to flush any cached answers and "already-displayed" flags
116 shift # dummy command
119 function conf_yesno_answer {
121 while [ "$ANSWER" != 'yes' ] && [ "$ANSWER" != 'no' ]
129 function conf_string_answer {
134 function create_windows_directories {
135 for tdir in "$CROOT/windows" "$CROOT/windows/system" \
136 "$CROOT/windows/Start Menu" "$CROOT/windows/Start Menu/Programs" \
137 "$CROOT/Common Files" "$CROOT/Program Files" \
138 "$CROOT/windows/Profiles" "$CROOT/windows/Profiles/Administrator"
139 do [ -d "$tdir" ] || mkdir "$tdir"
141 [ -f "$CROOT/windows/win.ini" ] || cp "$WININI" "$CROOT/windows/win.ini"
142 [ -f "$CROOT/windows/system.ini" ] || cp "$SYSTEMINI" "$CROOT/windows/system.ini"
147 echo "WINE Installer v0.7"
150 if [ "$BINDIST" = 'no' ]
153 if ! [ -f configure ]
155 echo "You're running this from the wrong directory."
156 echo "Change to the Wine source's main directory and try again."
161 # check whether RPM installed, and if it is, remove any old wine rpm.
164 if [ $RET -eq 0 ]; then
165 if [ -n "`rpm -qi wine 2>/dev/null|grep "^Name"`" ]; then
166 echo "Warning: Old Wine RPM install detected. Do you want to remove it first?"
167 conf_yesno_answer "(yes/no) "
168 if [ "$ANSWER" = 'yes' ]; then
169 echo Starting wine rpm removal...
171 if [ $RET -eq 0 ]; then
174 echo "FAILED. Probably you aren't installing as root."
175 echo "Expect problems (library conflicts with existing install etc.)."
178 echo "Sorry, I won't install Wine when an rpm version is still installed."
179 echo "(Wine support suffered from way too many conflicts)"
180 echo "Have a nice day !"
186 # check whether wine binary still available
187 if [ -n "`which wine`" ]; then
188 echo "Warning !! wine binary (still) found, which may indicate"
189 echo "a (conflicting) previous installation."
190 echo "You might want to abort and uninstall Wine first."
194 # run the configure script, if necessary
196 if [ -f config.cache ] && [ -f Makefile ] && [ Makefile -nt configure ]
198 echo "I see that WINE has already been configured, so I'll skip that."
200 # load configure results
204 echo "Running configure..."
206 if ! ./configure $CONFARGS
209 echo "Configure failed, aborting install."
214 # load configure results
216 # make sure X was found
218 if [ "$have_x" != "yes" ]
220 echo "Install the X development headers and try again."
224 elif [ "$ac_cv_header_X11_xpm_h" != "yes" ]
226 echo "Install the Xpm development headers and try again."
234 # now do the compilation
236 if [ -f wine ] && [ wine -nt Makefile ]
238 echo "Hmm, looks like WINE is already compiled. I'll skip that too, I guess."
242 echo "Compiling WINE. Grab a lunch or two, rent a video, or whatever,"
243 echo "in the meantime..."
246 if ! { make depend && make; }
249 echo "Compilation failed, aborting install."
257 # and installation, if root
259 if [ `whoami` != 'root' ]
261 echo "You aren't root, so I'll skip the make install."
263 # setup to run from current directory
265 if [ -z "$LD_LIBRARY_PATH" ]
266 then LD_LIBRARY_PATH="$PWD:$DLLPATH"
267 else LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD:$DLLPATH"
269 export LD_LIBRARY_PATH
270 DEBUGGER="$PWD/$HDEBUGGER"
272 echo "NOTE! To run Wine without installing, you must set the environment variable"
273 echo "LD_LIBRARY_PATH to $PWD:$DLLPATH"
274 echo "in your logon scripts."
277 # see if wine is installed on the users system, if not prompt them
279 if [ ! `which wine` ]
281 echo "Could not find wine on your system. Run wineinstall as root to install wine"
282 echo "before re-running wineinstall as a user."
284 echo "Exiting wineinstall"
289 echo "Now installing binaries onto the system..."
295 echo "Installation failed, aborting."
299 if [ -f /etc/ld.so.conf ] && ! grep -qs "$libdir" /etc/ld.so.conf
302 echo "$libdir didn't exist in your /etc/ld.so.conf, adding it now..."
303 echo "$libdir" >>/etc/ld.so.conf
304 echo "Re-running ldconfig..."
305 eval "$ac_cv_path_LDCONFIG"
314 # now check whether we should generate wine.conf
315 if [ -z "$DOGLOBALCONF" ]
316 then DOGLOBALCONF=auto
319 if [ "$DOGLOBALCONF" = 'auto' ]
321 # see if we already have a system wine.conf
322 if [ ! -f $GCONF ] && [ `whoami` = 'root' ]
325 echo "Creation of a global config file is not supported in wineinstall at this"
326 echo "time. When the configuration architecture is cleaned up this functionality"
327 echo "will be restored to wineinstall."
333 if [ "$DOLOCALCONF" = 'auto' ]
335 # see if the user is root, if so, explicitly ask them if they want a
337 if [ `whoami` = 'root' ]
339 echo "You are running as root. Do you want a local config file,"
340 echo "file, ~/.wine/config, created?"
341 conf_yesno_answer "(yes/no) "
342 DOLOCALCONF="$ANSWER"
344 echo "Create local config file ~/.wine/config?"
345 conf_yesno_answer "(yes/no) "
347 DOLOCALCONF="$ANSWER"
348 if [ "$ANSWER" = 'no' ]
350 conf_question high need_root \
351 "Aborting install. Try again as root to generate a system wine.conf."
358 echo "Found existing $LCONF, if you continue this file will be"
359 echo "overwritten. Continue running wineinstall?"
360 conf_yesno_answer "(yes/no) "
362 if [ "$ANSWER" = 'no' ]
364 echo "Exiting wineinstall"
371 # generate $TMPCONF from existing windows install, if any
372 if [ "$DOLOCALCONF" = 'yes' ]
374 if [ "$DOWCHK" = 'yes' ] || [ "$DOWCHK" = 'auto' ]
376 echo -n "Searching for an existing Windows installation..."
377 if ! $WINECONF -inifile "$WINEINI" > $TMPCONF 2>/dev/null
379 rm -f $TMPCONF $TMPREG > /dev/null
382 conf_question low do_without_windows \
383 "Windows was not found on your system, so I assume you want" \
384 "a Wine-only installation. Am I correct?"
385 conf_yesno_answer "(yes/no) "
386 if [ "$ANSWER" = 'no' ]
388 conf_question high windows_not_found \
389 "Aborting install. Make sure your Windows partition is mounted and try again," \
390 "or create $LCONF manually by copying from $WINEINI and adapting the drive paths."
399 conf_reset_question windows_found
400 conf_question low windows_found \
401 "Created $LCONF using your existing Windows installation." \
402 "You probably want to review the file, though."
407 elif [ "$DOWINE" = 'auto' ]
411 elif [ "$DOWINE" = 'auto' ]
416 # setup a no-windows installation, if necessary
417 if [ "$DOWINE" = 'yes' ]
419 # set an appropriate DCROOT
420 if [ `whoami` != 'root' ]
427 conf_question medium convert_config \
428 "I found the old version Wine config file, .winerc, in your " \
429 "home directory. I can convert this to the new format or use the" \
430 "new default Wine config file. Convert?"
431 conf_yesno_answer "(yes/no) "
432 if [ "$ANSWER" = 'yes' ]
441 conf_question low drivec_path \
442 "Configuring Wine without Windows." \
443 "Some fake Windows directories must be created, to hold any .ini files, DLLs," \
444 "start menu entries, and other things your applications may need to install." \
445 "Where would you like your fake C drive to be placed?"
446 while [ -z "$CROOT" ]
448 conf_string_answer "(default is $DCROOT) "
449 [ -z "$ANSWER" ] && ANSWER="$DCROOT"
450 if ! [ -d "$ANSWER" ]
452 if mkdir -p "$ANSWER"
455 echo "Directory $ANSWER can't be created !"
456 conf_reset_question drivec_path
463 echo "Configuring Wine for a no-windows install in $CROOT..."
465 create_windows_directories
469 # create $LCONF using the default config file $WINEINI
470 if [ "$DOLOCALCONF" = 'yes' ] && [ "$CONVCONF" = 'no' ]
472 sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"${CROOT}\"|" $WINEINI > $TMPCONF
473 conf_reset_question default_config
474 conf_question low default_config \
475 "Created $LCONF using default Wine configuration." \
476 "You probably want to review the file, though."
480 # now we really should install the registry
481 if [ "$DOREG" = 'auto' ]
488 #install the local config file $LCONF
489 if [ "$DOLOCALCONF" = 'yes' ]
496 if [ "$CONVCONF" = 'no' ]
498 cp $TMPCONF $LCONF > /dev/null
504 #install the global config file $GCONF
505 if [ "$DOGLOBALCONF" = 'yes' ]
507 if [ ! -f $sysconfdir ]
512 cp $TMPCONF $GCONF > /dev/null
515 # check whether we need to install default registry
516 # (not to be done if windows registry exists)
517 if [ "$DOREG" = 'auto' ]
519 echo "Checking for real Windows registry..."
520 if [ -f "$CROOT/windows/system.dat" ]
522 elif [ -f "$CROOT/windows/system32/config/system" ]
526 if [ "$DOREG" = 'yes' ]
527 then echo "Not found, default Wine registry will be installed."
528 else echo "Windows registry found, will not install default Wine registry."
534 # install default registry entries
535 if [ "$DOREG" = 'yes' ]
537 if [ "$BINDIST" = 'no' ]
539 echo "Compiling regapi..."
540 (cd programs/regapi; make)
544 echo "Preparing to install default Wine registry entries..."
546 # edit config files so we don't have to run regapi under X
547 if [ "$CONVCONF" = 'yes' ]
549 mv $WINEINI $WINEINI.new
550 sed "s/GraphicsDriver=.*/GraphicsDriver=ttydrv/" $WINEINI.new > $WINEINI
553 sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"ttydrv\"/" $LCONF.new > $LCONF
556 # create a temporary wineinstall.reg with fixed debugger path
557 $DEFCAT $DEFREG | sed "s|debugger/winedbg|${DEBUGGER}|" > $TMPREG
559 echo "Installing default Wine registry entries..."
561 if ! $REGAPI setValue < $TMPREG > /dev/null
564 echo "Registry install failed."
565 conf_reset_question regapi_error
566 conf_question high regapi_error
570 # if we are converting from a .winerc file, running regapi once
571 # will ONLY convert .winerc -> ~/.wine/config, it will not import the
572 # registry data. so if we are converting we need to run regapi twice
573 if [ "$CONVCONF" = 'yes' ]
575 if ! $REGAPI setValue < $TMPREG > /dev/null
578 echo "Registry install failed."
579 conf_reset_question regapi_error
580 conf_question high regapi_error
584 echo "Registry entries successfully installed."
588 echo "Registry entries successfully installed."
593 if [ "$SYSREG" = 'auto' ]
597 # if we converted we need to change the graphics driver back and
598 # restore the original .winerc file
599 if [ "$CONVCONF" = 'yes' ]
601 mv $WINEINI.new $WINEINI
604 sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"x11drv\"/" $LCONF > $LCONF.new
609 # make root's registry global, if desired
610 if [ `whoami` = 'root' ] && [ "$DOREG" = 'yes' ] && [ "$SYSREG" = 'yes' ]
612 [ -d ~/.wine ] || mkdir ~/.wine
613 if ! [ -f $sysconfdir/wine.userreg ]
615 echo "Linking root's user registry hive to the global registry..."
616 [ -f ~/.wine/wine.userreg ] && cp ~/.wine/wine.userreg $sysconfdir/wine.userreg
617 ln -sf $sysconfdir/wine.userreg ~/.wine/wine.userreg
620 if ! [ -f $sysconfdir/wine.systemreg ]
622 echo "Linking root's system registry hive to the global registry..."
623 [ -f ~/.wine/system.reg ] && cp ~/.wine/system.reg $sysconfdir/wine.systemreg
624 ln -sf $sysconfdir/wine.systemreg ~/.wine/system.reg
630 # cleanup any temporary files that may remain
641 echo "Installation complete for now. Good luck (this is still alpha software)."
642 echo "If you have problems with WINE, please read the documentation first,"
643 echo "as many kinds of potential problems are explained there."