Removed calls to internal (non-exported) wine functions.
[wine.git] / tools / wineinstall
blob8b7d5f11d46148bd862a510e59287abcf8752c96
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
36 #--- defaults (change these if you are a packager)
37 CONFARGS=--enable-opengl # configure args, e.g. --prefix=/usr --sysconfdir=/etc
38 prefix=/usr/local # installation prefix
39 sysconfdir=$prefix/etc # where wine.conf and global registry is supposed to be
40 bindir=$prefix/bin # where winelib apps will be (or is) installed
41 libdir=$prefix/lib # where libwine.so will be (or is) installed
42 exdir=documentation/samples # where the example system.ini resides
43 CONF=$sysconfdir/wine.conf # default path of the wine.conf
44 BINDIST=no # whether called from a binary package config script
45 DOCONF=auto # whether to autogenerate wine.conf
46 DOWCHK=auto # whether to autoconfigure existing-windows installation
47 DOWINE=auto # whether to autoconfigure no-windows installation
48 DOREG=auto # whether to install default registry
49 SYSREG=yes # whether to make root's registry global (system-default)
51 # "make install" still installs the dlls into $libdir, but this may change in the future
52 # (DLLPATH should point to them if/when they are not in standard ld.so paths)
53 DLLPATH=$libdir/wine # default path of the dll .so files (except libwine.so)
55 # having the Wine debugger launched automatically will be a plus for us
56 DEBUGGER=$bindir/winedbg # the (installed) path of winedbg
57 HDEBUGGER=debugger/winedbg # the (non-installed) path of winedbg
59 # this is only for existing-windows installs
60 WINECONF=tools/wineconf # the path of wineconf perl script
62 # this is only for no-windows installs
63 WINEINI=wine.ini # the path of default wine.ini (also used by wineconf)
64 WININI=/dev/null # the path of default win.ini
65 SYSTEMINI=$exdir/system.ini # the path of default system.ini
66 REGAPI=programs/regapi/regapi # the path of regapi winelib application
67 DEFREG=winedefault.reg # the path of the registry file to be fed to regapi
68 # CROOT=/var/wine # the path of the fake Drive C (asks user if not set)
69 DEFCAT=cat # program to cat $DEFREG with (some packages need zcat)
70 #--- end of defaults
72 # temporary files used by the installer
73 TMPCONF=/tmp/wineinstall.conf
74 TMPREG=/tmp/wineinstall.reg
76 # functions
78 function conf_question {
79 # parameters: $1 = importance, $2 = question-id, $3+ = message lines
80 # the first two parameters can be used by e.g. debconf in debian packages
81 # but here we just print the message
82 shift 2
83 echo
84 local LINE="$1"
85 while shift
86 do {
87 echo "$LINE"
88 LINE="$1"
90 done
93 function conf_reset_question {
94 # parameters: $1 = question-id
95 # this is used to flush any cached answers and "already-displayed" flags
96 shift # dummy command
99 function conf_yesno_answer {
100 unset ANSWER
101 while [ "$ANSWER" != 'yes' ] && [ "$ANSWER" != 'no' ]
102 do {
103 echo -n "$1"
104 read ANSWER
106 done
109 function conf_string_answer {
110 echo -n "$1"
111 read ANSWER
114 # startup...
116 echo "WINE Installer v0.5"
117 echo
119 if [ "$BINDIST" = 'no' ]
120 then {
122 if ! [ -f configure ]
123 then {
124 echo "You're running this from the wrong directory."
125 echo "Change to the Wine source's main directory and try again."
126 exit 1
130 # check whether RPM installed, and if it is, remove any old wine rpm.
131 hash rpm &>/dev/null
132 RET=$?
133 if [ $RET -eq 0 ]; then
134 if [ -n "`rpm -qi wine 2>/dev/null|grep "^Name"`" ]; then
135 echo "Warning: Old Wine RPM install detected. Do you want to remove it first?"
136 conf_yesno_answer "(yes/no) "
137 if [ "$ANSWER" = 'yes' ]; then
138 echo Starting wine rpm removal...
139 rpm -e wine; RET=$?
140 if [ $RET -eq 0 ]; then
141 echo Done.
142 else
143 echo "FAILED. Probably you aren't installing as root."
144 echo "Expect problems (library conflicts with existing install etc.)."
146 else
147 echo "Sorry, I won't install Wine when an rpm version is still installed."
148 echo "(Wine support suffered from way too many conflicts)"
149 echo "Have a nice day !"
150 exit 1
155 # run the configure script, if necessary
157 if [ -f config.cache ] && [ -f Makefile ] && [ Makefile -nt configure ]
158 then {
159 echo "I see that WINE has already been configured, so I'll skip that."
160 # load configure results
161 . ./config.cache
163 else {
164 echo "Running configure..."
165 echo
166 if ! ./configure $CONFARGS
167 then {
168 echo
169 echo "Configure failed, aborting install."
170 rm -f config.cache
171 exit 1
174 # load configure results
175 . ./config.cache
176 # make sure X was found
177 eval "$ac_cv_have_x"
178 if [ "$have_x" != "yes" ]
179 then {
180 echo "Install the X development headers and try again."
181 rm -f config.cache
182 exit 1
184 elif [ "$ac_cv_header_X11_xpm_h" != "yes" ]
185 then {
186 echo "Install the Xpm development headers and try again."
187 rm -f config.cache
188 exit 1
194 # now do the compilation
196 if [ -f wine ] && [ wine -nt Makefile ]
197 then {
198 echo "Hmm, looks like WINE is already compiled. I'll skip that too, I guess."
200 else {
201 echo "Compiling WINE. Grab a lunch or two, rent a video, or whatever,"
202 echo "in the meantime..."
203 echo
204 if ! { make depend && make; }
205 then {
206 echo
207 echo "Compilation failed, aborting install."
208 exit 1
211 echo
215 # and installation, if root
217 if [ `whoami` != 'root' ]
218 then {
219 echo "You aren't root, so I'll skip the make install."
220 # setup to run from current directory
221 DLLPATH="$PWD/dlls"
222 if [ -z "$LD_LIBRARY_PATH" ]
223 then LD_LIBRARY_PATH="$PWD:$DLLPATH"
224 else LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD:$DLLPATH"
226 export LD_LIBRARY_PATH
227 DEBUGGER="$PWD/$HDEBUGGER"
228 echo
229 echo "NOTE! To run Wine without installing, you must set the environment variable"
230 echo "LD_LIBRARY_PATH to $PWD:$DLLPATH"
231 echo "in your logon scripts."
233 else {
234 echo "Now installing binaries onto the system..."
235 echo
236 if ! make install
237 then {
238 echo
239 echo "Installation failed, aborting."
240 exit 1
243 if [ -f /etc/ld.so.conf ] && ! grep -qs "$libdir" /etc/ld.so.conf
244 then {
245 echo
246 echo "$libdir didn't exist in your /etc/ld.so.conf, adding it now..."
247 echo "$libdir" >>/etc/ld.so.conf
248 echo "Re-running ldconfig..."
249 eval "$ac_cv_path_LDCONFIG"
256 fi # BINDIST
258 # now check whether we should generate wine.conf
259 if [ -z "$DOCONF" ]
260 then DOCONF=auto
263 if [ "$DOCONF" = 'auto' ]
264 then {
265 # see if we already have a system wine.conf
266 if [ -f $CONF ]
267 then DOCONF=no
272 if [ "$DOCONF" != 'no' ]
273 then {
274 if [ `whoami` != 'root' ]
275 then {
276 CONF=~/.winerc
277 if ! [ -f $CONF ]
278 then {
279 if [ "$DOCONF" != 'yes' ]
280 then {
281 conf_question medium make_user_winerc \
282 "Since you aren't root, and there's no system wine.conf, I assume" \
283 "you want a user-specific .winerc. Am I correct?"
284 conf_yesno_answer "(yes/no) "
285 DOCONF="$ANSWER"
288 if [ "$DOCONF" = 'no' ]
289 then {
290 conf_question high need_root \
291 "Aborting install. Try again as root to generate a system wine.conf."
292 exit 1
295 echo
299 else {
300 mkdir -p $sysconfdir
301 DOCONF=yes
307 # generate wine.conf from existing windows install, if any
308 if [ "$DOCONF" = 'yes' ]
309 then {
310 if [ "$DOWCHK" = 'yes' ] || [ "$DOWCHK" = 'auto' ]
311 then {
312 echo
313 echo -n "Searching for an existing Windows installation..."
314 if ! $WINECONF -inifile "$WINEINI" > $CONF 2>/dev/null
315 then {
316 rm -f $CONF
317 echo " not found."
318 conf_question low do_without_windows \
319 "Windows was not found on your system, so I assume you want" \
320 "a Wine-only installation. Am I correct?"
321 conf_yesno_answer "(yes/no) "
322 if [ "$ANSWER" = 'no' ]
323 then {
324 conf_question high windows_not_found \
325 "Aborting install. Make sure your Windows partition is mounted and try again," \
326 "or create $CONF manually by copying from $WINEINI and adapting the drive paths."
327 exit 1
330 DOWINE=yes
332 else {
333 echo " found."
334 conf_reset_question windows_found
335 conf_question low windows_found \
336 "Created $CONF using your existing Windows installation." \
337 "You probably want to review the file, though."
338 DOWINE=no
342 elif [ "$DOWINE" = 'auto' ]
343 then DOWINE=yes
346 elif [ "$DOWINE" = 'auto' ]
347 then DOWINE=no
350 # setup a no-windows installation, if necessary
351 if [ "$DOWINE" = 'yes' ]
352 then {
353 if [ `whoami` != 'root' ]
354 then DCROOT=~/c
355 else DCROOT=/c
357 conf_question low drivec_path \
358 "Configuring Wine without Windows." \
359 "Some fake Windows directories must be created, to hold any .ini files, DLLs," \
360 "start menu entries, and other things your applications may need to install." \
361 "Where would oyu like your fake C drive to be placed?"
362 while [ -z "$CROOT" ]
363 do {
364 conf_string_answer "(default is $DCROOT) "
365 if [ -z "$ANSWER" ]
366 then CROOT="$DCROOT"
367 elif ! [ -d "$ANSWER" ]
368 then {
369 if mkdir -p "$ANSWER"
370 then CROOT="$ANSWER"
371 else conf_reset_question drivec_path
374 else CROOT="$ANSWER"
377 done
378 echo "Configuring Wine for a no-windows install in $CROOT..."
379 for tdir in "$CROOT/windows" "$CROOT/windows/system" \
380 "$CROOT/windows/Start Menu" "$CROOT/windows/Start Menu/Programs" \
381 "$CROOT/Common Files" "$CROOT/Program Files" \
382 "$CROOT/windows/Profiles" "$CROOT/windows/Profiles/Administrator"
383 do [ -d "$tdir" ] || mkdir "$tdir"
384 done
385 [ -f "$CROOT/windows/win.ini" ] || cp "$WININI" "$CROOT/windows/win.ini"
386 [ -f "$CROOT/windows/system.ini" ] || cp "$SYSTEMINI" "$CROOT/windows/system.ini"
387 if [ "$DOCONF" = 'yes' ]
388 then {
389 sed "s|Path=/c\$|Path=${CROOT}|" $WINEINI > $CONF
390 conf_reset_question default_config
391 conf_question low default_config \
392 "Created $CONF using default Wine configuration." \
393 "You probably want to review the file, though."
396 # now we really should install the registry
397 if [ "$DOREG" = 'auto' ]
398 then DOREG=yes
401 elif [ -z "$CROOT" ]
402 then {
403 echo
404 echo "Reading current Wine configuration from $CONF..."
405 CROOT=`sed -n '/^\[Drive C\]$/,/^\[.*\]$/ s/^Path=\(.*\)/\1/p' $CONF`
406 echo "Drive C is configured at $CROOT."
409 echo
411 # fixup EXTRA_LD_LIBRARY_PATH
412 if [ "$DOCONF" = 'yes' ]
413 then {
414 echo "Setting EXTRA_LD_LIBRARY_PATH in .winerc to $DLLPATH..."
415 sed "s|EXTRA_LD_LIBRARY_PATH=.*|EXTRA_LD_LIBRARY_PATH=${DLLPATH}|" $CONF > $CONF.new
416 mv -f $CONF.new $CONF
417 echo
421 # check whether we need to install default registry
422 # (not to be done if windows registry exists)
423 if [ "$DOREG" = 'auto' ]
424 then {
425 echo "Checking for real Windows registry..."
426 if [ -f "$CROOT/windows/system.dat" ]
427 then DOREG=no
428 elif [ -f "$CROOT/windows/system32/config/system" ]
429 then DOREG=no
430 else DOREG=yes
432 if [ "$DOREG" = 'yes' ]
433 then echo "Not found, default Wine registry will be installed."
434 else echo "Windows registry found, will not install default Wine registry."
436 echo
440 # install default registry entries
441 if [ "$DOREG" = 'yes' ]
442 then {
443 if [ "$BINDIST" = 'no' ]
444 then {
445 echo "Compiling regapi..."
446 echo
447 (cd programs/regapi; make)
448 echo
451 echo "Preparing to install default Wine registry entries..."
453 # create a temporary wineinstall.conf file using ttydrv,
454 # so that we don't have to run regapi under X
455 sed "s/GraphicsDriver=.*/GraphicsDriver=ttydrv/" $CONF > $TMPCONF
457 # create a temporary wineinstall.reg with fixed debugger path
458 $DEFCAT $DEFREG | sed "s|debugger/winedbg|${DEBUGGER}|" > $TMPREG
460 echo "Installing default Wine registry entries..."
461 echo
462 if ! $REGAPI --config $TMPCONF setValue < $TMPREG > /dev/null
463 then {
464 rm -f $TMPCONF $TMPREG
465 echo "Registry install failed."
466 conf_reset_question regapi_error
467 conf_question high regapi_error
468 exit 1
470 else echo "Registry entries successfully installed."
472 rm -f $TMPCONF $TMPREG
473 if [ "$SYSREG" = 'auto' ]
474 then SYSREG=yes
479 # make root's registry global, if desired
480 if [ `whoami` = 'root' ] && [ "$SYSREG" = 'yes' ]
481 then {
482 [ -d ~/.wine ] || mkdir ~/.wine
483 if ! [ -f $sysconfdir/wine.userreg ]
484 then {
485 echo "Linking root's user registry hive to the global registry..."
486 [ -f ~/.wine/wine.userreg ] && cp ~/.wine/wine.userreg $sysconfdir/wine.userreg
487 ln -sf $sysconfdir/wine.userreg ~/.wine/wine.userreg
490 if ! [ -f $sysconfdir/wine.systemreg ]
491 then {
492 echo "Linking root's system registry hive to the global registry..."
493 [ -f ~/.wine/system.reg ] && cp ~/.wine/system.reg $sysconfdir/wine.systemreg
494 ln -sf $sysconfdir/wine.systemreg ~/.wine/system.reg
500 # it's a wrap
501 echo
502 echo "Installation complete for now. Good luck (this is still alpha software)."
503 echo "If you have problems with WINE, please read the documentation first,"
504 echo "as many kinds of potential problems are explained there."
506 exit 0