Leave IID check to the OleCreateFontIndirect, so that SFCF will handle
[wine/wine-kai.git] / tools / wineinstall
blob96bb5715272367df52ae41111cc96fab8f29ba35
1 #!/bin/bash
2 # WINE Installation script
3 # Can do almost everything from compiling to configuring...
5 # Mar 31 1999 - Ove Kåven
6 # First version
7 # Dec 9 1999 - Ove Kåven
8 # require Xpm
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
30 # (later that day...)
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
39 # config file
40 # add conf_question to allow root to install a local config file and
41 # registry
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)
86 #--- end of defaults
88 # temporary files used by the installer
89 TMPCONF=/tmp/wineinstall.conf
90 TMPREG=/tmp/wineinstall.reg
92 # functions
94 function std_sleep {
95 sleep 1
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
102 shift 2
103 echo
104 local LINE="$1"
105 while shift
106 do {
107 echo "$LINE"
108 LINE="$1"
110 done
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 {
120 unset ANSWER
121 while [ "$ANSWER" != 'yes' ] && [ "$ANSWER" != 'no' ]
122 do {
123 echo -n "$1"
124 read ANSWER
126 done
129 function conf_string_answer {
130 echo -n "$1"
131 read 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"
140 done
141 [ -f "$CROOT/windows/win.ini" ] || cp "$WININI" "$CROOT/windows/win.ini"
142 [ -f "$CROOT/windows/system.ini" ] || cp "$SYSTEMINI" "$CROOT/windows/system.ini"
145 # startup...
147 echo "WINE Installer v0.7"
148 echo
150 if [ "$BINDIST" = 'no' ]
151 then {
153 if ! [ -f configure ]
154 then {
155 echo "You're running this from the wrong directory."
156 echo "Change to the Wine source's main directory and try again."
157 exit 1
161 # check whether RPM installed, and if it is, remove any old wine rpm.
162 hash rpm &>/dev/null
163 RET=$?
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...
170 rpm -e wine; RET=$?
171 if [ $RET -eq 0 ]; then
172 echo Done.
173 else
174 echo "FAILED. Probably you aren't installing as root."
175 echo "Expect problems (library conflicts with existing install etc.)."
177 else
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 !"
181 exit 1
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."
191 std_sleep
194 # run the configure script, if necessary
196 if [ -f config.cache ] && [ -f Makefile ] && [ Makefile -nt configure ]
197 then {
198 echo "I see that WINE has already been configured, so I'll skip that."
199 std_sleep
200 # load configure results
201 . ./config.cache
203 else {
204 echo "Running configure..."
205 echo
206 if ! ./configure $CONFARGS
207 then {
208 echo
209 echo "Configure failed, aborting install."
210 rm -f config.cache
211 exit 1
214 # load configure results
215 . ./config.cache
216 # make sure X was found
217 eval "$ac_cv_have_x"
218 if [ "$have_x" != "yes" ]
219 then {
220 echo "Install the X development headers and try again."
221 rm -f config.cache
222 exit 1
228 # now do the compilation
230 if [ -f wine ] && [ wine -nt Makefile ]
231 then {
232 echo "Hmm, looks like WINE is already compiled. I'll skip that too, I guess."
233 std_sleep
235 else {
236 echo "Compiling WINE. Grab a lunch or two, rent a video, or whatever,"
237 echo "in the meantime..."
238 echo
239 std_sleep
240 if ! { make depend && make; }
241 then {
242 echo
243 echo "Compilation failed, aborting install."
244 exit 1
247 echo
251 # and installation, if root
253 if [ `whoami` != 'root' ]
254 then {
255 echo "You aren't root, so I'll skip the make install."
257 # setup to run from current directory
258 DLLPATH="$PWD/dlls"
259 if [ -z "$LD_LIBRARY_PATH" ]
260 then LD_LIBRARY_PATH="$PWD:$DLLPATH"
261 else LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD:$DLLPATH"
263 export LD_LIBRARY_PATH
264 DEBUGGER="$PWD/$HDEBUGGER"
265 echo
266 echo "NOTE! To run Wine without installing, you must set the environment variable"
267 echo "LD_LIBRARY_PATH to $PWD:$DLLPATH"
268 echo "in your logon scripts."
269 echo
271 # see if wine is installed on the users system, if not prompt them
272 # and then exit
273 if [ ! `which wine` ]
274 then
275 echo "Could not find wine on your system. Run wineinstall as root to install wine"
276 echo "before re-running wineinstall as a user."
277 echo
278 echo "Exiting wineinstall"
279 exit 1;
282 else {
283 echo "Now installing binaries onto the system..."
284 echo
285 std_sleep
286 if ! make install
287 then {
288 echo
289 echo "Installation failed, aborting."
290 exit 1
293 if [ -f /etc/ld.so.conf ] && ! grep -qs "$libdir" /etc/ld.so.conf
294 then {
295 echo
296 echo "$libdir didn't exist in your /etc/ld.so.conf, adding it now..."
297 echo "$libdir" >>/etc/ld.so.conf
298 echo "Re-running ldconfig..."
299 eval "$ac_cv_path_LDCONFIG"
306 fi # BINDIST
308 # now check whether we should generate wine.conf
309 if [ -z "$DOGLOBALCONF" ]
310 then DOGLOBALCONF=auto
313 if [ "$DOGLOBALCONF" = 'auto' ]
314 then {
315 # see if we already have a system wine.conf
316 if [ ! -f $GCONF ] && [ `whoami` = 'root' ]
317 then
318 DOGLOBALCONF=no
319 echo "Creation of a global config file is not supported in wineinstall at this"
320 echo "time. When the configuration architecture is cleaned up this functionality"
321 echo "will be restored to wineinstall."
322 echo
327 if [ "$DOLOCALCONF" = 'auto' ]
328 then {
329 # see if the user is root, if so, explicitly ask them if they want a
330 # local config file
331 if [ `whoami` = 'root' ]
332 then
333 echo "You are running as root. Do you want a local config file,"
334 echo "file, ~/.wine/config, created?"
335 conf_yesno_answer "(yes/no) "
336 DOLOCALCONF="$ANSWER"
337 else
338 echo "Create local config file ~/.wine/config?"
339 conf_yesno_answer "(yes/no) "
340 echo
341 DOLOCALCONF="$ANSWER"
342 if [ "$ANSWER" = 'no' ]
343 then
344 conf_question high need_root \
345 "Aborting install. Try again as root to generate a system wine.conf."
346 exit 1
350 if [ -f "$LCONF" ]
351 then
352 echo "Found existing $LCONF, if you continue this file will be"
353 echo "overwritten. Continue running wineinstall?"
354 conf_yesno_answer "(yes/no) "
355 echo
356 if [ "$ANSWER" = 'no' ]
357 then
358 echo "Exiting wineinstall"
359 exit 1
365 # generate $TMPCONF from existing windows install, if any
366 if [ "$DOLOCALCONF" = 'yes' ]
367 then {
368 if [ "$DOWCHK" = 'yes' ] || [ "$DOWCHK" = 'auto' ]
369 then {
370 echo -n "Searching for an existing Windows installation..."
371 if ! $WINECONF -inifile "$WINEINI" > $TMPCONF 2>/dev/null
372 then {
373 rm -f $TMPCONF $TMPREG > /dev/null
375 echo " not found. (no matching /etc/fstab mount entry found)"
376 conf_question low do_without_windows \
377 "Windows was not found on your system, so I assume you want" \
378 "a Wine-only installation. Am I correct?"
379 conf_yesno_answer "(yes/no) "
380 if [ "$ANSWER" = 'no' ]
381 then {
382 conf_question high windows_not_found \
383 "Aborting install. Make sure your Windows partition is mounted and try again," \
384 "or create $LCONF manually by copying from $WINEINI and adapting the drive paths."
385 exit 1
388 DOWINE=yes
390 else {
391 echo " found."
393 conf_reset_question windows_found
394 conf_question low windows_found \
395 "Created $LCONF using your existing Windows installation." \
396 "You probably want to review the file, though."
397 DOWINE=no
401 elif [ "$DOWINE" = 'auto' ]
402 then DOWINE=yes
405 elif [ "$DOWINE" = 'auto' ]
406 then
407 DOWINE=no
410 # setup a no-windows installation, if necessary
411 if [ "$DOWINE" = 'yes' ]
412 then {
413 # set an appropriate DCROOT
414 if [ `whoami` != 'root' ]
415 then DCROOT=~/c
416 else DCROOT=/c
419 if [ -f ~/.winerc ]
420 then {
421 conf_question medium convert_config \
422 "I found the old version Wine config file, .winerc, in your " \
423 "home directory. I can convert this to the new format or use the" \
424 "new default Wine config file. Convert?"
425 conf_yesno_answer "(yes/no) "
426 if [ "$ANSWER" = 'yes' ]
427 then {
428 WINEINI=~/.winerc
429 CONVCONF=yes
433 else {
435 conf_question low drivec_path \
436 "Configuring Wine without Windows." \
437 "Some fake Windows directories must be created, to hold any .ini files, DLLs," \
438 "start menu entries, and other things your applications may need to install." \
439 "Where would you like your fake C drive to be placed?"
440 while [ -z "$CROOT" ]
441 do {
442 conf_string_answer "(default is $DCROOT) "
443 [ -z "$ANSWER" ] && ANSWER="$DCROOT"
444 if ! [ -d "$ANSWER" ]
445 then {
446 if mkdir -p "$ANSWER"
447 then CROOT="$ANSWER"
448 else
449 echo "Directory $ANSWER can't be created !"
450 conf_reset_question drivec_path
453 else CROOT="$ANSWER"
456 done
457 echo "Configuring Wine for a no-windows install in $CROOT..."
459 create_windows_directories
463 # create $LCONF using the default config file $WINEINI
464 if [ "$DOLOCALCONF" = 'yes' ] && [ "$CONVCONF" = 'no' ]
465 then {
466 sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"${CROOT}\"|" $WINEINI > $TMPCONF
467 conf_reset_question default_config
468 conf_question low default_config \
469 "Created $LCONF using default Wine configuration." \
470 "You probably want to review the file, though."
474 # now we really should install the registry
475 if [ "$DOREG" = 'auto' ]
476 then DOREG=yes
480 echo
482 #install the local config file $LCONF
483 if [ "$DOLOCALCONF" = 'yes' ]
484 then
485 if [ ! -w ~/.wine ]
486 then
487 mkdir ~/.wine
490 if [ "$CONVCONF" = 'no' ]
491 then
492 cp $TMPCONF $LCONF > /dev/null
494 else
495 DOREG=no
498 #install the global config file $GCONF
499 if [ "$DOGLOBALCONF" = 'yes' ]
500 then
501 if [ ! -f $sysconfdir ]
502 then
503 mkdir -p $sysconfdir
506 cp $TMPCONF $GCONF > /dev/null
509 # check whether we need to install default registry
510 # (not to be done if windows registry exists)
511 if [ "$DOREG" = 'auto' ]
512 then {
513 echo "Checking for real Windows registry..."
514 if [ -f "$CROOT/windows/system.dat" ]
515 then DOREG=no
516 elif [ -f "$CROOT/windows/system32/config/system" ]
517 then DOREG=no
518 else DOREG=yes
520 if [ "$DOREG" = 'yes' ]
521 then echo "Not found, default Wine registry will be installed."
522 else echo "Windows registry found, will not install default Wine registry."
524 echo
528 # install default registry entries
529 if [ "$DOREG" = 'yes' ]
530 then {
531 if [ "$BINDIST" = 'no' ]
532 then {
533 echo "Compiling regapi..."
534 (cd programs/regapi; make)
535 echo
538 echo "Preparing to install default Wine registry entries..."
540 # edit config files so we don't have to run regapi under X
541 if [ "$CONVCONF" = 'yes' ]
542 then
543 mv $WINEINI $WINEINI.new
544 sed "s/GraphicsDriver=.*/GraphicsDriver=ttydrv/" $WINEINI.new > $WINEINI
545 else
546 mv $LCONF $LCONF.new
547 sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"ttydrv\"/" $LCONF.new > $LCONF
550 # create a temporary wineinstall.reg with fixed debugger path
551 $DEFCAT $DEFREG | sed "s|debugger/winedbg|${DEBUGGER}|" > $TMPREG
553 echo "Installing default Wine registry entries..."
554 echo
555 if ! $REGAPI setValue < $TMPREG > /dev/null
556 then {
557 rm -f $TMPREG
558 echo "Registry install failed."
559 conf_reset_question regapi_error
560 conf_question high regapi_error
561 exit 1
563 else {
564 # if we are converting from a .winerc file, running regapi once
565 # will ONLY convert .winerc -> ~/.wine/config, it will not import the
566 # registry data. so if we are converting we need to run regapi twice
567 if [ "$CONVCONF" = 'yes' ]
568 then
569 if ! $REGAPI setValue < $TMPREG > /dev/null
570 then
571 rm -f $TMPREG
572 echo "Registry install failed."
573 conf_reset_question regapi_error
574 conf_question high regapi_error
575 exit 1
576 else
577 echo
578 echo "Registry entries successfully installed."
580 else
581 echo
582 echo "Registry entries successfully installed."
586 rm -f $TMPREG
587 if [ "$SYSREG" = 'auto' ]
588 then SYSREG=yes
591 # if we converted we need to change the graphics driver back and
592 # restore the original .winerc file
593 if [ "$CONVCONF" = 'yes' ]
594 then
595 mv $WINEINI.new $WINEINI
598 sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"x11drv\"/" $LCONF > $LCONF.new
599 mv $LCONF.new $LCONF
603 # make root's registry global, if desired
604 if [ `whoami` = 'root' ] && [ "$DOREG" = 'yes' ] && [ "$SYSREG" = 'yes' ]
605 then {
606 [ -d ~/.wine ] || mkdir ~/.wine
607 if ! [ -f $sysconfdir/wine.userreg ]
608 then {
609 echo "Linking root's user registry hive to the global registry..."
610 [ -f ~/.wine/wine.userreg ] && cp ~/.wine/wine.userreg $sysconfdir/wine.userreg
611 ln -sf $sysconfdir/wine.userreg ~/.wine/wine.userreg
614 if ! [ -f $sysconfdir/wine.systemreg ]
615 then {
616 echo "Linking root's system registry hive to the global registry..."
617 [ -f ~/.wine/system.reg ] && cp ~/.wine/system.reg $sysconfdir/wine.systemreg
618 ln -sf $sysconfdir/wine.systemreg ~/.wine/system.reg
624 # cleanup any temporary files that may remain
625 if [ -f $TMPCONF ]
626 then rm -f $TMPCONF
628 if [ -f $TMPREG ]
629 then rm -f $TMPREG
633 # it's a wrap
634 echo
635 echo "Installation complete for now. Good luck (this is still alpha software)."
636 echo "If you have problems with WINE, please read the documentation first,"
637 echo "as many kinds of potential problems are explained there."
639 exit 0