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 # updated global config name, wine.conf -> wine.config
41 # add conf_question to allow root to install a local config file and
44 #--- defaults (change these if you are a packager)
45 CONFARGS=--enable-opengl # configure args, e.g. --prefix=/usr --sysconfdir=/etc
46 prefix=/usr/local # installation prefix
47 sysconfdir=$prefix/etc # where wine.conf and global registry is supposed to be
48 bindir=$prefix/bin # where winelib apps will be (or is) installed
49 libdir=$prefix/lib # where libwine.so will be (or is) installed
50 exdir=documentation/samples # where the example system.ini resides
51 CONF=$sysconfdir/wine.config # default path of the wine.config
52 BINDIST=no # whether called from a binary package config script
53 DOCONF=auto # whether to autogenerate wine.config
54 DOWCHK=auto # whether to autoconfigure existing-windows installation
55 DOWINE=auto # whether to autoconfigure no-windows installation
56 DOREG=auto # whether to install default registry
57 SYSREG=yes # whether to make root's registry global (system-default)
58 CONVCONF=no # whether we are converting an existing .winerc or not
60 # "make install" still installs the dlls into $libdir, but this may change in the future
61 # (DLLPATH should point to them if/when they are not in standard ld.so paths)
62 DLLPATH=$libdir/wine # default path of the dll .so files (except libwine.so)
64 # having the Wine debugger launched automatically will be a plus for us
65 DEBUGGER=$bindir/winedbg # the (installed) path of winedbg
66 HDEBUGGER=debugger/winedbg # the (non-installed) path of winedbg
68 # this is only for existing-windows installs
69 WINECONF=tools/wineconf # the path of wineconf perl script
71 # this is only for no-windows installs
72 WINEINI=$exdir/config # the path of default wine config file (also used by wineconf)
73 WININI=/dev/null # the path of default win.ini
74 SYSTEMINI=$exdir/system.ini # the path of default system.ini
75 REGAPI=programs/regapi/regapi # the path of regapi winelib application
76 DEFREG=winedefault.reg # the path of the registry file to be fed to regapi
77 # CROOT=/var/wine # the path of the fake Drive C (asks user if not set)
78 DEFCAT=cat # program to cat $DEFREG with (some packages need zcat)
81 # temporary files used by the installer
82 TMPCONF=/tmp/wineinstall.conf
83 TMPREG=/tmp/wineinstall.reg
91 function conf_question {
92 # parameters: $1 = importance, $2 = question-id, $3+ = message lines
93 # the first two parameters can be used by e.g. debconf in debian packages
94 # but here we just print the message
106 function conf_reset_question {
107 # parameters: $1 = question-id
108 # this is used to flush any cached answers and "already-displayed" flags
109 shift # dummy command
112 function conf_yesno_answer {
114 while [ "$ANSWER" != 'yes' ] && [ "$ANSWER" != 'no' ]
122 function conf_string_answer {
129 echo "WINE Installer v0.6"
132 if [ "$BINDIST" = 'no' ]
135 if ! [ -f configure ]
137 echo "You're running this from the wrong directory."
138 echo "Change to the Wine source's main directory and try again."
143 # check whether RPM installed, and if it is, remove any old wine rpm.
146 if [ $RET -eq 0 ]; then
147 if [ -n "`rpm -qi wine 2>/dev/null|grep "^Name"`" ]; then
148 echo "Warning: Old Wine RPM install detected. Do you want to remove it first?"
149 conf_yesno_answer "(yes/no) "
150 if [ "$ANSWER" = 'yes' ]; then
151 echo Starting wine rpm removal...
153 if [ $RET -eq 0 ]; then
156 echo "FAILED. Probably you aren't installing as root."
157 echo "Expect problems (library conflicts with existing install etc.)."
160 echo "Sorry, I won't install Wine when an rpm version is still installed."
161 echo "(Wine support suffered from way too many conflicts)"
162 echo "Have a nice day !"
168 # run the configure script, if necessary
170 if [ -f config.cache ] && [ -f Makefile ] && [ Makefile -nt configure ]
172 echo "I see that WINE has already been configured, so I'll skip that."
174 # load configure results
178 echo "Running configure..."
180 if ! ./configure $CONFARGS
183 echo "Configure failed, aborting install."
188 # load configure results
190 # make sure X was found
192 if [ "$have_x" != "yes" ]
194 echo "Install the X development headers and try again."
198 elif [ "$ac_cv_header_X11_xpm_h" != "yes" ]
200 echo "Install the Xpm development headers and try again."
208 # now do the compilation
210 if [ -f wine ] && [ wine -nt Makefile ]
212 echo "Hmm, looks like WINE is already compiled. I'll skip that too, I guess."
216 echo "Compiling WINE. Grab a lunch or two, rent a video, or whatever,"
217 echo "in the meantime..."
220 if ! { make depend && make; }
223 echo "Compilation failed, aborting install."
231 # and installation, if root
233 if [ `whoami` != 'root' ]
235 echo "You aren't root, so I'll skip the make install."
236 # setup to run from current directory
238 if [ -z "$LD_LIBRARY_PATH" ]
239 then LD_LIBRARY_PATH="$PWD:$DLLPATH"
240 else LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD:$DLLPATH"
242 export LD_LIBRARY_PATH
243 DEBUGGER="$PWD/$HDEBUGGER"
245 echo "NOTE! To run Wine without installing, you must set the environment variable"
246 echo "LD_LIBRARY_PATH to $PWD:$DLLPATH"
247 echo "in your logon scripts."
250 echo "Now installing binaries onto the system..."
256 echo "Installation failed, aborting."
260 if [ -f /etc/ld.so.conf ] && ! grep -qs "$libdir" /etc/ld.so.conf
263 echo "$libdir didn't exist in your /etc/ld.so.conf, adding it now..."
264 echo "$libdir" >>/etc/ld.so.conf
265 echo "Re-running ldconfig..."
266 eval "$ac_cv_path_LDCONFIG"
275 # now check whether we should generate wine.config
280 if [ "$DOCONF" = 'auto' ]
282 # see if we already have a system wine.config
289 if [ "$DOCONF" != 'no' ]
291 if [ `whoami` != 'root' ]
296 if [ "$DOCONF" != 'yes' ]
298 conf_question medium make_user_config \
299 "Since you aren't root, and there's no system wine.config, I assume" \
300 "you want a user-specific ~/.wine/config. Am I correct?"
301 conf_yesno_answer "(yes/no) "
305 if [ "$DOCONF" = 'no' ]
307 conf_question high need_root \
308 "Aborting install. Try again as root to generate a system wine.config."
324 # generate wine.config from existing windows install, if any
325 if [ "$DOCONF" = 'yes' ]
327 if [ "$DOWCHK" = 'yes' ] || [ "$DOWCHK" = 'auto' ]
330 echo -n "Searching for an existing Windows installation..."
332 if ! $WINECONF -inifile "$WINEINI" > $CONF 2>/dev/null
336 conf_question low do_without_windows \
337 "Windows was not found on your system, so I assume you want" \
338 "a Wine-only installation. Am I correct?"
339 conf_yesno_answer "(yes/no) "
340 if [ "$ANSWER" = 'no' ]
342 conf_question high windows_not_found \
343 "Aborting install. Make sure your Windows partition is mounted and try again," \
344 "or create $CONF manually by copying from $WINEINI and adapting the drive paths."
352 conf_reset_question windows_found
353 conf_question low windows_found \
354 "Created $CONF using your existing Windows installation." \
355 "You probably want to review the file, though."
360 elif [ "$DOWINE" = 'auto' ]
364 elif [ "$DOWINE" = 'auto' ]
368 # setup a no-windows installation, if necessary
369 if [ "$DOWINE" = 'yes' ]
371 if [ `whoami` != 'root' ]
375 conf_question low drivec_path \
376 "Configuring Wine without Windows." \
377 "Some fake Windows directories must be created, to hold any .ini files, DLLs," \
378 "start menu entries, and other things your applications may need to install." \
379 "Where would you like your fake C drive to be placed?"
380 while [ -z "$CROOT" ]
382 conf_string_answer "(default is $DCROOT) "
383 [ -z "$ANSWER" ] && ANSWER="$DCROOT"
384 if ! [ -d "$ANSWER" ]
386 if mkdir -p "$ANSWER"
389 echo "Directory $ANSWER can't be created !"
390 conf_reset_question drivec_path
397 echo "Configuring Wine for a no-windows install in $CROOT..."
398 for tdir in "$CROOT/windows" "$CROOT/windows/system" \
399 "$CROOT/windows/Start Menu" "$CROOT/windows/Start Menu/Programs" \
400 "$CROOT/Common Files" "$CROOT/Program Files" \
401 "$CROOT/windows/Profiles" "$CROOT/windows/Profiles/Administrator"
402 do [ -d "$tdir" ] || mkdir "$tdir"
404 [ -f "$CROOT/windows/win.ini" ] || cp "$WININI" "$CROOT/windows/win.ini"
405 [ -f "$CROOT/windows/system.ini" ] || cp "$SYSTEMINI" "$CROOT/windows/system.ini"
409 conf_question medium convert_config \
410 "I found a the old version Wine config file, .winerc, in your " \
411 "home directory. I can convert this to the new format or use the" \
412 "new default Wine config file. Convert?"
413 conf_yesno_answer "(yes/no) "
414 if [ "$ANSWER" = 'yes' ]
423 # create $CONF using the default config file $WINEINI
424 if [ "$DOCONF" = 'yes' ] && [ "$CONVCONF" = 'no' ]
426 sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"${CROOT}\"|" $WINEINI > $CONF
427 conf_reset_question default_config
428 conf_question low default_config \
429 "Created $CONF using default Wine configuration." \
430 "You probably want to review the file, though."
434 # now we really should install the registry
435 if [ "$DOREG" = 'auto' ]
442 echo "Reading current Wine configuration from $CONF..."
443 CROOT=`sed -n '/^\[Drive C\]$/,/^\[.*\]$/ s/^"Path" = \(.*\)/\1/p' $CONF`
444 echo "Drive C is configured at $CROOT."
449 # if root ask the user if they want to setup a local config file and
451 if [ `whoami` = 'root' ]
453 echo "You are running wineinstall as root. Do you want to create a local config file and install the registry?"
454 conf_yesno_answer "(yes/no) "
455 if [ "$ANSWER" = 'yes' ]
459 sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"${CROOT}\"|" $WINEINI > $CONF
460 conf_reset_question default_config
461 conf_question low default_config \
462 "Created $CONF using default Wine configuration." \
463 "You probably want to review the file, though."
470 # check whether we need to install default registry
471 # (not to be done if windows registry exists)
472 if [ "$DOREG" = 'auto' ]
474 echo "Checking for real Windows registry..."
475 if [ -f "$CROOT/windows/system.dat" ]
477 elif [ -f "$CROOT/windows/system32/config/system" ]
481 if [ "$DOREG" = 'yes' ]
482 then echo "Not found, default Wine registry will be installed."
483 else echo "Windows registry found, will not install default Wine registry."
489 # install default registry entries
490 if [ "$DOREG" = 'yes' ]
492 if [ "$BINDIST" = 'no' ]
494 echo "Compiling regapi..."
495 (cd programs/regapi; make)
499 echo "Preparing to install default Wine registry entries..."
501 # create a temporary wineinstall.conf file using ttydrv,
502 # so that we don't have to run regapi under X
503 if [ "$CONVCONF" = 'yes' ]
505 sed "s/GraphicsDriver=.*/GraphicsDriver=ttydrv/" $WINEINI > $TMPCONF
507 sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"ttydrv\"/" $CONF > $TMPCONF
510 # create a temporary wineinstall.reg with fixed debugger path
511 $DEFCAT $DEFREG | sed "s|debugger/winedbg|${DEBUGGER}|" > $TMPREG
513 echo "Installing default Wine registry entries..."
515 if ! $REGAPI --config $TMPCONF setValue < $TMPREG > /dev/null
517 rm -f $TMPCONF $TMPREG
518 echo "Registry install failed."
519 conf_reset_question regapi_error
520 conf_question high regapi_error
525 echo "Registry entries successfully installed."
528 rm -f $TMPCONF $TMPREG
529 if [ "$SYSREG" = 'auto' ]
533 # if we converted we need to change the graphics driver back
534 if [ "$CONVCONF" = 'yes' ]
536 sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"x11drv\"/" $CONF > $CONF.new
542 # make root's registry global, if desired
543 if [ `whoami` = 'root' ] && [ "$DOREG" = 'yes' ] && [ "$SYSREG" = 'yes' ]
545 [ -d ~/.wine ] || mkdir ~/.wine
546 if ! [ -f $sysconfdir/wine.userreg ]
548 echo "Linking root's user registry hive to the global registry..."
549 [ -f ~/.wine/wine.userreg ] && cp ~/.wine/wine.userreg $sysconfdir/wine.userreg
550 ln -sf $sysconfdir/wine.userreg ~/.wine/wine.userreg
553 if ! [ -f $sysconfdir/wine.systemreg ]
555 echo "Linking root's system registry hive to the global registry..."
556 [ -f ~/.wine/system.reg ] && cp ~/.wine/system.reg $sysconfdir/wine.systemreg
557 ln -sf $sysconfdir/wine.systemreg ~/.wine/system.reg
565 echo "Installation complete for now. Good luck (this is still alpha software)."
566 echo "If you have problems with WINE, please read the documentation first,"
567 echo "as many kinds of potential problems are explained there."