Added a -municode flag to winegcc for applications that have a wmain()
[wine] / tools / wineinstall
index 894af93..d644d6c 100755 (executable)
 #
 
 #--- defaults (change these if you are a packager)
-CONFARGS=""                   # configure args, e.g. --prefix=/usr --sysconfdir=/etc
+CONFARGS=""                   # configure args, e.g. --prefix=/usr
 prefix=/usr/local             # installation prefix
-sysconfdir=$prefix/etc        # where wine.conf and the global registry are supposed to be
 bindir=$prefix/bin            # where winelib apps will be (or are) installed
 libdir=$prefix/lib            # where libwine.so will be (or is) installed
-exdir=documentation/samples   # where the sample system.ini resides
-GCONF=$sysconfdir/wine.conf   # default path of the wine.conf global config file
-LCONF=~/.wine/config          # default path of the local config file
 BINDIST=no                    # whether called from a binary package config script
-DOGLOBALCONF=auto             # whether to autogenerate wine.conf
-DOLOCALCONF=auto              # whether to autogenerate localconf
-DOWCHK=auto                   # whether to autoconfigure existing-windows installation
-DOWINE=auto                   # whether to autoconfigure no-windows installation
-DOREG=auto                    # whether to install default registry
-DOAPP=auto                    # whether to install applications, distributed with Wine
-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)
-
-# this is only for existing-windows installs
-WINECONF=tools/wineconf       # path to the wineconf perl script
-
-# this is only for no-windows installs
-WINEINI=$exdir/config         # path to the default wine config file (also used by wineconf)
-WININI=/dev/null              # path to the default win.ini
-SYSTEMINI=$exdir/system.ini   # path to the default system.ini
-REGEDIT=programs/regedit/regedit       # path to the regedit winelib application
-DEFREG=winedefault.reg        # path of the registry file to be fed to regedit
-# CROOT=/var/wine             # 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
 
 # functions
 
@@ -70,7 +39,7 @@ function conf_question {
   shift 2
   echo
   local LINE="$1"
-  while shift
+  while [ $# -gt 0 ] && shift
   do {
     echo "$LINE"
     LINE="$1"
@@ -99,55 +68,9 @@ function conf_string_answer {
   read ANSWER
 }
 
-function create_windows_directories {
-  for tdir in "$CROOT/windows" "$CROOT/windows/system" "$CROOT/windows/system32" \
-              "$CROOT/windows/Start Menu" "$CROOT/windows/Start Menu/Programs" \
-              "$CROOT/Program Files" "$CROOT/Program Files/Common Files" \
-              "$CROOT/windows/Profiles" "$CROOT/windows/Profiles/Administrator" \
-              "$CROOT/windows/Fonts" "$CROOT/windows/Start Menu/Programs/Startup"
-  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"
-}
-
-#creates symbolic link in windows directory to installed winelib application
-#parameters:
-# - name of the installed winelib application
-# - full path to application in the winelib directory
-function link_app {
-  if [ "$WINEINSTALLED" = 'no' ]
-  then {
-    ln -sf $PWD/programs/$1/$1.exe.so $2
-  }
-  else {
-    ln -sf $libdir/wine/$1.exe.so $2
-  }
-  fi
-}
-
-#puts windows applications replacements to windows directories,
-#configures them
-function configure_wine_applications {
-  link_app notepad      "$CROOT/windows/notepad.exe"
-  link_app regedit      "$CROOT/windows/regedit.exe"
-  link_app rundll32     "$CROOT/windows/rundll32.exe"
-  link_app wcmd         "$CROOT/windows/system32/cmd.exe"
-  link_app control      "$CROOT/windows/system32/control.exe"
-  link_app winhelp      "$CROOT/windows/system32/help.exe"
-  link_app notepad      "$CROOT/windows/system32/notepad.exe"
-  link_app progman      "$CROOT/windows/system32/progman.exe"
-  link_app regsvr32     "$CROOT/windows/system32/regsvr32.exe"
-  link_app winemine     "$CROOT/windows/system32/winmine.exe"
-  link_app winver       "$CROOT/windows/system32/winver.exe"
-  link_app uninstaller  "$CROOT/windows/uninstall.exe"
-  link_app winhelp      "$CROOT/windows/winhelp.exe"
-  link_app winhelp      "$CROOT/windows/winhlp32.exe"
-}
-
 # startup...
 
-echo "WINE Installer v0.74"
+echo "WINE Installer v0.75"
 echo
 
 if [ "$BINDIST" = 'no' ]
@@ -168,7 +91,7 @@ then {
   }
   fi
 
-  if [ `whoami` == 'root' ]
+  if [ `whoami` = 'root' ]
   then {
     echo "You are running wineinstall as root, this is not advisable. Please rerun as a user."
     echo "Aborting."
@@ -176,6 +99,14 @@ then {
   }
   fi
 
+  if [ ! -w . ]
+  then {
+    echo "The source directory is not writable. You probably extracted the sources as root."
+    echo "You should remove the source tree and extract it again as a normal user."
+    exit 1
+  }
+  fi
+
   # check whether RPM installed, and if it is, remove any old wine rpm.
   hash rpm &>/dev/null
   RET=$?
@@ -209,6 +140,8 @@ then {
     echo "Warning !! wine binary (still) found, which may indicate"
     echo "a (conflicting) previous installation."
     echo "You might want to abort and uninstall Wine first."
+    echo "(If you previously tried to install from source manually, "
+    echo "run 'make uninstall' from the wine root directory)"
     std_sleep
   fi
 
@@ -225,7 +158,7 @@ then {
   else {
     echo "Running configure..."
     echo
-    if ! ./configure -C $CONFARGS
+    if ! ./configure -C $CONFARGS --prefix=$prefix
     then {
       echo
       echo "Configure failed, aborting install."
@@ -267,7 +200,7 @@ then {
       # to our sucommand string
       if [ -f /etc/ld.so.conf ]
       then
-        if ! grep -qs "$libdir" /etc/ld.so.conf
+        if ! grep -s "$libdir" /etc/ld.so.conf >/dev/null 2>&1
         then {
           echo
           echo "$libdir doesn't exist in your /etc/ld.so.conf, it will be added"
@@ -275,7 +208,7 @@ then {
           sucommand="$sucommand;echo $libdir>>/etc/ld.so.conf"
         }
         fi
-        # run ldconfig always just in case some updated files dont get linked
+        # run ldconfig always just in case some updated files don't get linked
         sucommand="$sucommand;$ac_cv_path_LDCONFIG"
       fi
     }
@@ -311,16 +244,20 @@ then {
 
       if ! su root -c "$sucommand"
       then {
-        echo
-        echo "Either you entered an incorrect password or we failed to run"
-        echo "'$sucommand' correctly."
-        echo "If you didn't enter an incorrect password then please report this"
-        echo "error and any steps to possibly reproduce it to"
-        echo "http://bugs.winehq.com/"
-        echo
-        echo "Installation failed, aborting."
-        exit 1
-      }
+       if ! su root -c "$sucommand"
+        then {
+            echo
+             echo "Either you entered an incorrect password or we failed to"
+             echo "run '$sucommand' correctly."
+             echo "If you didn't enter an incorrect password then please"
+             echo "report this error and any steps to possibly reproduce it to"
+             echo "http://bugs.winehq.org/"
+             echo
+             echo "Installation failed, aborting."
+             exit 1
+         }
+         fi
+       }
       fi
 
       echo
@@ -339,22 +276,6 @@ then {
       WINEINSTALLED=yes
     }
     else {
-      # user didn't want to install wine so tell them about running from the
-      # current directory and set some stuff up for them
-
-      # 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
-      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."
-      echo
-
       WINEINSTALLED=no
     }
     fi # [ "$ROOTINSTALL" = "yes" ]
@@ -364,300 +285,56 @@ then {
 }
 fi # BINDIST
 
-# now check whether we should generate wine.conf
-if [ -z "$DOGLOBALCONF" ]
-then
-  DOGLOBALCONF=auto
-fi
-
-if [ "$DOGLOBALCONF" = 'auto' ]
-then {
-  # see if we already have a system wine.conf
-  if [ ! -f $GCONF ] && [ `whoami` = 'root' ]
-  then
-    DOGLOBALCONF=no
-    echo "Creation of a global config file is not supported in wineinstall at this"
-    echo "time.  When the configuration architecture is cleaned up this functionality"
-    echo "will be restored to wineinstall."
-    echo
-  fi
-}
+# setup a no-windows installation
+# set an appropriate DCROOT
+if [ `whoami` != 'root' ]
+then DCROOT=~/.wine/drive_c
+else DCROOT=/c
 fi
 
-if [ "$DOLOCALCONF" = 'auto' ]
-then {
-  # see if the user is root, if so, explicitly ask them if they want a
-  # local config file
-  if [ `whoami` = 'root' ]
-  then
-    echo "You are running as root.  Do you want a local config file,"
-    echo "file, ~/.wine/config, created?"
-    conf_yesno_answer "(yes/no) "
-    DOLOCALCONF="$ANSWER"
-  else
-    # if the user has an existing config file ask them if they want us to
-    # overwrite it, otherwise just ask them if they want to create one
-    if [ -f "$LCONF" ]
-    then
-      echo "Found existing $LCONF, do you want to overwrite this"
-      echo "existing Wine configuration file?"
-      conf_yesno_answer "(yes/no) "
-      DOLOCALCONF="$ANSWER"
-      echo
-      if [ "$ANSWER" = "yes" ]
-      then
-      {
-        echo "Would you like to make a backup of this old config file?"
-        conf_yesno_answer "(yes/no) "
-        echo
-        if [ "$ANSWER" = "yes" ]
-        then
-        {
-          echo "Renaming $LCONF to $LCONF.old"
-          mv -f "$LCONF" "$LCONF.old"
-          echo
-        }
-        fi
-      }
-      fi
-    else
-    {
-      echo "Create local config file ~/.wine/config?"
-      conf_yesno_answer "(yes/no) "
-      DOLOCALCONF="$ANSWER"
-      echo
-      if [ "$ANSWER" = 'no' ]
-      then
-        conf_question high need_root \
-          "Aborting install. Try again as root to generate a system wine.conf."
-        exit 1
-      fi
-    }
-    fi
-  fi
-}
-fi
-
-# generate $TMPCONF from existing windows install, if any
-if [ "$DOLOCALCONF" = 'yes' ]
-then {
-  if [ "$DOWCHK" = 'yes' ] || [ "$DOWCHK" = 'auto' ]
+conf_question low drivec_path \
+   "Configuring Wine without Windows." \
+   "Some fake Windows directories must be created, to hold any .ini files, DLLs," \
+   "start menu entries, and other things your applications may need to install." \
+   "Where would you like your fake C drive to be placed?"
+while [ -z "$CROOT" ]
+do {
+  conf_string_answer "(default is $DCROOT) "
+  [ -z "$ANSWER" ] && ANSWER="$DCROOT"
+  if ! [ -d "$ANSWER" ]
   then {
-    echo -n "Searching for an existing Windows installation..."
-    if ! $WINECONF -inifile "$WINEINI" > $TMPCONF 2>/dev/null
-    then {
-      rm -f $TMPCONF > /dev/null
-
-      echo " not found. (no matching /etc/fstab mount entry 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 $LCONF manually by copying from $WINEINI and adapting the drive paths."
-        exit 1
-      }
-      fi
-      DOWINE=yes
-    }
-    else {
-      echo " found."
-
-      conf_question low do_without_windows \
-       "Windows was found on your system, and so we can use the Windows" \
-       "Drive as our Wine drive. You may, however, wish to create a clean" \
-       "Wine install anyways."
-      conf_yesno_answer "Should I use the Windows drive for the Wine install? (yes/no) "
-      if [ "$ANSWER" = 'yes' ]
-      then {
-        conf_reset_question windows_found
-        conf_question low windows_found \
-         "Created $LCONF using your existing Windows installation." \
-         "You probably want to review the file, though."
-        DOWINE=no
-      }
-      else {
-        DOWINE=yes
-      }
-      fi
-    }
-    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 {
-  # set an appropriate DCROOT
-  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," \
-     "start menu entries, and other things your applications may need to install." \
-     "Where would you like your fake C drive to be placed?"
-  while [ -z "$CROOT" ]
-  do {
-    conf_string_answer "(default is $DCROOT) "
-    [ -z "$ANSWER" ] && ANSWER="$DCROOT"
-    if ! [ -d "$ANSWER" ]
-    then {
-      if mkdir -p "$ANSWER"
-      then CROOT="$ANSWER"
-      else
-          echo "Directory $ANSWER can't be created !"
-          conf_reset_question drivec_path
-      fi
-    }
-    else CROOT="$ANSWER"
+    if mkdir -p "$ANSWER"
+    then CROOT="$ANSWER"
+    else
+        echo "Directory $ANSWER can't be created !"
+        conf_reset_question drivec_path
     fi
   }
-  done
-  echo "Configuring Wine for a no-windows install in $CROOT..."
-
-    create_windows_directories
-    configure_wine_applications
-
-  # create $LCONF using the default config file $WINEINI
-  if [ "$DOLOCALCONF" = 'yes' ]
-  then {
-    sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"${CROOT}\"|" $WINEINI > $TMPCONF
-    conf_reset_question default_config
-    conf_question low default_config \
-     "Created $LCONF 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
+  else CROOT="$ANSWER"
   fi
 }
-fi
-echo
-
-#install the local config file $LCONF
-if [ "$DOLOCALCONF" = 'yes' ]
-then
-  if [ ! -w ~/.wine ]
-  then
-    mkdir ~/.wine
-  fi
-  cp $TMPCONF $LCONF > /dev/null
-else
-  DOREG=no
-fi
+done
+echo "Configuring Wine for a no-windows install in $CROOT..."
 
-#install the global config file $GCONF
-if [ "$DOGLOBALCONF" = 'yes' ]
+if [ ! -d ~/.wine/dosdevices ]
 then
-  if [ ! -f $sysconfdir ]
-  then
-    mkdir -p $sysconfdir
-  fi
-
-  cp $TMPCONF $GCONF > /dev/null
-fi
-
-# check whether we need to install default registry
-# (not to be done if windows registry exists)
-if [ "$DOREG" = 'auto' ]
-then {
-  CROOT=`sed -n '/^\[Drive C\]$/,/^\[.*\]$/ s/^\"Path\" = \"\(.*\)\"/\1/p' $LCONF`
-  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
-  elif [ -f "$CROOT/WINNT/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 regedit..."
-    (cd programs/regedit; make)
-    echo
-  }
-  fi
-  echo "Preparing to install default Wine registry entries..."
-
-  # edit config files so we don't have to run regedit under X
-  mv $LCONF $LCONF.orig
-  sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"ttydrv\"/" $LCONF.orig > $LCONF
-
-  echo "Installing default Wine registry entries..."
-  echo
-  if ! $REGEDIT $DEFREG > /dev/null
-  then {
-    echo "Registry install failed."
-    mv $LCONF.orig $LCONF
-    conf_reset_question regedit_error
-    conf_question high regedit_error
-    exit 1
-  }
-  else {
-    echo
-    echo "Registry entries successfully installed."
-    mv $LCONF.orig $LCONF
-  }
-  fi
-  if [ "$SYSREG" = 'auto' ]
-  then SYSREG=yes
-  fi
-}
-fi
-
-# make root's registry global, if desired
-if [ `whoami` = 'root' ] && [ "$DOREG" = 'yes' ] && [ "$SYSREG" = 'yes' ]
-then {
   [ -d ~/.wine ] || mkdir ~/.wine
-  if ! [ -f $sysconfdir/wine.userreg ]
-  then {
-    echo "Linking root's user registry hive to the global registry..."
-    [ -f ~/.wine/wine.userreg ] && 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..."
-    [ -f ~/.wine/system.reg ] && cp ~/.wine/system.reg $sysconfdir/wine.systemreg
-    ln -sf $sysconfdir/wine.systemreg ~/.wine/system.reg
-  }
-  fi
-}
+  mkdir ~/.wine/dosdevices
+  ln -s /mnt/fd0 ~/.wine/dosdevices/a:
+  ln -s $CROOT ~/.wine/dosdevices/c:
+  ln -s /cdrom ~/.wine/dosdevices/d:
+  ln -s /tmp ~/.wine/dosdevices/e:
+  ln -s ~ ~/.wine/dosdevices/f:
+  ln -s / ~/.wine/dosdevices/z:
 fi
 
-# cleanup any temporary files that may remain
-if [ -f $TMPCONF ]
-then rm -f $TMPCONF
+if [ "$WINEINSTALLED" = 'no' ]
+then
+    tools/wineprefixcreate --use-wine-tree .
+else
+    wineprefixcreate
 fi
+echo
 
 
 # it's a wrap