  <chapter id="getting-wine">
    <title>Getting Wine</title>
    <para>
      If you decided that you can use and want to use Wine (e.g. after
      having read the <link linkend="introduction">introductory
      chapter</link>), then as a first step you need to find a good
      compatible Wine version that you like and that works on your
      system, and after you found one, the next step is to transfer its
      files to your system somehow.
      This chapter is here to tell you what you need to take care of
      in order to successfully accomplish these two steps.
    </para>

    <sect1 id="getting-download">
      <title>How to download Wine?</title>
      <para>
        There are three different methods of how the files
	belonging to Wine may be brought (downloaded) to your system:
        <itemizedlist>
          <listitem>
	  <para>
	    Getting a single Wine <glossterm>package</glossterm> file
	    (specifically adapted to your particular system), which
	    contains various <glossterm>binary</glossterm> files of Wine
	  </para>
	  </listitem>
	  <listitem>
	  <para>
	    Getting a single compressed archive file (usually .tar.gz), which contains
	    all <glossterm>source code</glossterm> files of a standard Wine
	    release version
	  </para>
	  </listitem>
	  <listitem>
	  <para>
	    Downloading from a <glossterm>CVS</glossterm> server,
	    which contains the very latest development source code files
	    of Wine
	  </para>
	  </listitem>
	</itemizedlist>
      </para>

      <sect2 id="getting-which-wine">
        <title>Which Wine form should I pick?</title>

        <para>
	 Now that we told you about the different Wine distribution
	 methods available, let's discuss the advantages and
	 disadvantages of the various methods.
        </para>

	<variablelist>
	  <title>Wine distribution methods</title>
	  <varlistentry>
	    <term><emphasis>Wine package file</emphasis></term>

	    <listitem>
	      <para>
	        Intended user level: Beginner to Advanced
	      </para>

	      <para>
	        Using Wine package files is easy for three
	        reasons:
	        They install everything else that's needed for their
	        operation, they usually preconfigure a lot, and you
	        don't need to worry about compiling anything or so.
	        However, the Wine Team doesn't have "official" packages.
	        All Wine packages are being offered by external groups,
	        with often slightly inaccurate or quite inaccurate Wine
	        environment setup.
		Also, a package you downloaded might turn out to be
		partially incompatible with your particular system
		configuration.
	        Thus it might actually be <emphasis>better</emphasis>
	        to compile Wine from source and completely install it
	        on your own, by following the instructions in this
	        Guide.
	      </para>
	    </listitem>
	  </varlistentry>
	  <varlistentry>
	    <term><emphasis>Wine source code via archive file</emphasis></term>

	    <listitem>

	      <para>
	        Intended user level: Advanced to Expert
	      </para>

	      <para>
	        A Wine source code archive file can be used
	        if you want to compile your own standard Wine release.
	        By using differential patch files to newer Wine versions,
	        you can easily upgrade your outdated Wine directory.
	        However, as you need to manually download patch files
	        and you're only able to download the most current
	        standard Wine release, this is not necessarily the
	        best method to use.
		The only advantage a Wine source archive has is that it
		is a standard Wine release with less development
		"quirks" than current CVS code.  Except for that, CVS
		source code is much preferred and almost as easy.
	      </para>
	    </listitem>
	  </varlistentry>
	  <varlistentry>
	    <term><emphasis>Wine source code via CVS checkout</emphasis></term>
	    <listitem>
	      <para>
	        Intended user level: Advanced to Expert/Developer
	      </para>

	      <para>
	        The Wine CVS checkout offers the best way to take
	        part in bleeding edge Wine capabilities and
	        development, since you'll be able to download every
	        single CVS commit even <emphasis>beyond</emphasis> the
	        last official Wine release.
	        As upgrading a Wine CVS checkout tree to the latest
	        version is very easy, this is a recommended method
	        of installing Wine.
	        Plus, by carefully following the instructions in this
	        Guide, you'll be able to gain the very best Wine
	        environment compatibility (instead of falling victim
	        to package maintainers who fail to follow some
	        instructions in the Wine Packagers Guide).
	      </para>
	    </listitem>
	  </varlistentry>
	</variablelist>
	
	<para>
	  To summarize, the "best" way to install Wine is to download
	  Wine source code via CVS to get the newest code (which might
	  be unstable!). Then you could easily compile and install the
	  Wine files manually. The final configuration part (writing the
	  configuration file and setting up the drive environment) could then
	  be handled by WineSetupTk. All in all the best way to go,
	  except for the about 500MB of disk space that you'll need.
	</para>
	
	<para>
	  With source code archive files, you have the advantage that you're
	  running standard release versions, plus you can update to
	  newer versions via patch files that we release.
	  You won't have the newest code and the flexibility offered by CVS,
	  though.
	</para>

	<para>
	  About binary package files: not sure. There's about a zillion
	  reasons to not like them as much as you'd think: they may be
	  outdated, they may not include "everything", they are
	  <emphasis>not</emphasis> optimized for your particular
	  environment (as opposed to a source compile, which would guess
	  and set everything based on your system), they frequently fail
	  to provide a completely configured Wine environment.
	  On the plus side: they're pretty easy to install and they
	  don't take as much space as a full-blown source code compile.
	  But that's about it when it comes to their advantages.
	  So I'd say they are OK if you want to have a
	  <emphasis>quick</emphasis> way to have a test run of Wine, but
	  for prolonged Wine use, configuring the environment on your
	  own is probably better.
	  Eventually this will change (we'll probably do some packaging
	  efforts on our own at some time), but at the current explosive
	  rate of Wine development, staying as close as possible to the
	  actual Wine development that's going on is the way to go.
	</para>

	<para>
          If you are running a distribution of Linux or some other
	  system that uses packages to keep track of installed software,
	  you should be in luck: A prepackaged version of Wine
	  should already exist for your system.
          The following sections will tell you how to find the latest
          Wine packages and get them installed.  You should be careful,
          though, about mixing system packages between different distributions,
          and even from different versions of the same distribution.
          Often a package will only work on the distribution which it
	  has been compiled for.  We'll cover
          <link linkend="getting-dist-debian">Debian Linux</link>, 
          <link linkend="getting-dist-linux">Red Hat, Mandrake, Suse and Slackware Linux</link>,
          <link linkend="getting-freebsd">FreeBSD</link>, and
          <link linkend="getting-other">other</link> distributions.
        </para>
        <para>
          If you're not lucky enough to have a package available for
          your operating system, or if you'd prefer a newer version of
          Wine than already exists as a package, you will need to
          download the Wine source code and compile it yourself on your
          own machine.  Don't worry, it's not too hard to do this,
          especially with the many helpful tools that come with Wine.
          You don't need any programming experience to compile and
          install Wine, although it might be nice to have some minor
          UNIX administrative skills.  Working from the source is
          covered in the Wine Developer's Guide.
	  The main problem with externally maintained package files is
	  that they lack a standard configuration method, and in fact
	  they often fail to configure Wine's Windows environment
	  properly (which is outlined in the Wine Packagers Guide).
        </para>
      </sect2>

    </sect1>

    <sect1 id="getting-wine-package">
      <title>Getting a Wine package</title>
      <sect2 id="getting-dist-debian">
        <title>Debian Linux</title>

        <para>
          In most cases on a Debian system (or any other distribution that
  	uses packages that use the file name ending .deb, for that
  	matter), you can download and install Wine with a
          single command, as <glossterm>root</glossterm>:
        </para>
  <screen>
  <prompt># </><userinput>apt-get install wine</>
  </screen>
        <para>
	  <command>apt-get</command> will connect to a Debian archive
	  across the Internet (thus, you must be online), then download
	  the Wine package and install it on your system. End of story.
	  You might first need to properly update your package setup,
	  though, by using an <glossterm>editor</glossterm> as
	  <glossterm>root</glossterm> to add an entry to
	  <filename>/etc/apt/sources.list</filename> to point to an active
	  package server and then running <command>apt-get
	  update</command>.
	</para>
	<para>
	  Once you're done with that step, you may skip the Wine
	  installation chapter, since apt-get has not only downloaded,
	  but also installed the Wine files already.
	  Thus you can now go directly to the <link
	  linkend="config-wine-main">Configuration section</link>.
        </para>

        <para>
	  However, if you don't want to or cannot use the automatic
	  download method for .deb packages that
	  <command>apt-get</command> provides, then please read on.
	</para>
        <para>
	  Of course, Debian's pre-packaged version of Wine may not be
	  the most recent release.  If you are running the stable
	  version of Debian, you may be able to get a slightly newer
	  version of Wine by grabbing the package from the so-called
	  "unstable" Debian distribution, although this may be a little
	  risky, depending on how far the unstable distribution has
	  diverged from the stable one.  You can find a list of Wine
	  binary packages for the various Debian releases using the
	  package search engine at <ulink
	  url="http://www.debian.org">www.debian.org</ulink>.
        </para>

        <para>
	  If you downloaded a separate .deb package file (e.g. a newer
	  Wine release as stated above) that's not part of your
	  distribution and thus cannot be installed via
	  <command>apt-get</command>, you must use <command>dpkg</command> instead.
	  For instructions on how to do this, please proceed to the
	  <link linkend="installing">Installation section</link>.
	</para>
      </sect2>

      <sect2 id="getting-dist-linux">
        <title>Linux Red Hat, Mandrake, Suse, and Slackware</title>

        <para>
          Red Hat, Mandrake, Suse and Slackware users can download
	  a wine binary from the
          <ulink url="http://sourceforge.net/project/showfiles.php?group_id=6241">
          sourceforge.net Wine download page</ulink>
        </para>
      </sect2>

      <sect2 id="getting-freebsd">
        <title>FreeBSD</title>

        <para>
        In order to use Wine you need to build and install a new kernel
        with options USER_LDT, SYSVSHM, SYSVSEM, and SYSVMSG.
        </para>

        <para>
        If you want to install Wine using the FreeBSD port system, run
	in a <glossterm>terminal</glossterm>:
        </para>
  <screen>
  <prompt>$ </><userinput>su -</>
  <prompt># </><userinput>cd /usr/port/emulators/</>
  <prompt># </><userinput>make</>
  <prompt># </><userinput>make install</>
  <prompt># </><userinput>make clean</>
  </screen>
        <para>
          This process will get wine source from the Internet,
          then download the Wine package and install it on your system.
        </para>

        <para>
        If you want to install Wine from the FreeBSD CD-ROM, run in a
	<glossterm>terminal</glossterm>:
        </para>
  <screen>
  <prompt>$ </><userinput>su -</>
  <prompt># </><userinput>mount /cdrom</>
  <prompt># </><userinput>cd /cdrom/packages/All</>
  <prompt># </><userinput>pkg_add wine_.X.X.X.tgz</>
  </screen>
         <para>
	 </para>
         <para>
	   These FreeBSD install instructions completely install the
	   Wine files on your system; you may then proceed to the <link
	   linkend="config-wine-main">Configuration section</link>.
	 </para>
	 <para>
	 You can also download a Freebsd package of wine from the
	 <ulink url="http://sourceforge.net/project/showfiles.php?group_id=6241">
          sourceforge.net Wine download page</ulink>
	  </para>
      </sect2>

      <sect2 id="getting-other">
        <title>Other systems</title>

        <para>
          The first place you should look if your system isn't
          specifically mentioned above is the <ulink
          url="http://www.winehq.org/download/">WineHQ Download
          Page</ulink>.  This page lists many assorted archives of
          binary (precompiled) Wine files.
        </para>

        <para>
	  You could also try to use
          <ulink url="http://www.google.com/search?q=wine+package+download">
            Google</ulink> to track down miscellaneous distribution packages.
        </para>

      </sect2>
      <!-- *** Add other distributions, e.g., Lindows, Lycoris, Xandros *** -->

    </sect1>

    <sect1 id="getting-wine-source">
      <title>Getting Wine source code</title>

      <para>
	If you are going to compile Wine (instead of installing binary
	Wine files), either to use the most recent code possible or to
	improve it, then the first thing to do is to obtain a copy of
	the source code. We'll cover how to retrieve and compile the
	official source releases from the <link
	linkend="getting-source-ftp">FTP archives</link>, and also how
	to get the cutting edge up-to-the-minute fresh Wine source code
	from <link linkend="getting-source-cvs">CVS (Concurrent Versions
	System)</link>.
      </para>

      <para>
	Once you have downloaded Wine source code according to the
	instructions below, there are two ways to proceed: If you want
	to manually install and configure Wine, then go to the <link
	linkend="compiling">Compiling</link> section. If instead you
	want automatic installation, then go straight to the <link
	linkend="config-wine-main">Configuration section</link> to make
	use of <command>wineinstall</command> to automatically install
	and configure Wine.
      </para>

      <para>
        You may also need to know how to apply a source code patch to
        your version of Wine.  Perhaps you've uncovered
        a bug in Wine, reported it to the
        <ulink url="http://bugs.winehq.org">Wine Bugzilla</ulink>
        or the
        <ulink url="mailto:wine-devel@winehq.org">Wine mailing list</ulink>,
        and received a patch from a developer to hopefully fix the
        bug.  We will show you how to
        <link linkend="getting-upgrading-patch">safely apply the
        patch</link> and revert it if it doesn't work.
      </para>

      <sect2 id="getting-source-ftp">
        <title>Getting Wine Source Code from an FTP Archive</title>

        <para>
          The safest way to grab the source is from one of the official
          archives.  An up to date listing is in the <ulink
          url="http://www.winehq.org/source/ANNOUNCE">ANNOUNCE</ulink>
          file in the Wine distribution (which you would have if you
          already downloaded it).  Here is a list
          of servers carrying Wine:
        </para>
        <itemizedlist>
          <listitem>
            <para>
              <ulink url="ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/">
                ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/
              </ulink>
            </para>
          </listitem>
          <listitem>
            <para>
              <ulink url="http://sourceforge.net/project/showfiles.php?group_id=6241&amp;package_id=77449">
                sourceforge.net download page
              </ulink>
            </para>
          </listitem>
        </itemizedlist>
        <para>
          The official releases are tagged by date with the format
          "Wine-<replaceable>YYYYMMDD</>.tar.gz".  Your best bet is to grab
          the latest one.
        </para>
	<para>
	  I'd recommend placing the Wine archive file that you chose
	  into the directory where you intend to extract Wine. In this
	  case, let's just assume that it is your home directory.
	</para>
        <para>
	  Once you have downloaded a Wine archive file, we need to
	  extract the archive file. This is not very hard to do. First
	  switch to the directory containing the file you just
	  downloaded. Then extract the source in a
	  <glossterm>terminal</glossterm> with (e.g.):
  <screen>
  <prompt>$ </><userinput>tar xvzf wine-<replaceable>20030115</>.tar.gz</>
  </screen>
        </para>
	<para>
	  Just in case you happen to get a Wine archive that uses
	  <filename>.tar.bz2</filename> extension instead of
	  <filename>.tar.gz</filename>:
	  Simply use <command>tar xvjf</command> in that case instead.
	</para>
	<para>
	  Since you now have a fully working Wine source tree by
	  having followed the steps above, you're now well-prepared to
	  go to the Wine installation and configuration steps that follow.
	</para>
      </sect2>

      <sect2 id="getting-source-cvs">
        <title>Getting Wine Source Code from CVS</title>
	<!-- this part is sort of duplicated in cvs.sgml
	     (this representation is meant to be a very short intro
	     instead, but it's similar). Please don't forget to update both!
	-->

        <para>
	  This part is intended to be quick and easy, showing the bare minimum
	  of what is needed to download Wine source code via CVS.
	  If you're interested in a very verbose explanation of CVS or
	  advanced CVS topics (configuration settings, CVS mirror servers,
	  other CVS modules on WineHQ, CVSWeb, ...), then please read
	  the full CVS chapter in the Wine Developer's Guide.
        </para>

        <sect3>
          <title>CVS installation check</title>
          <para>
            First you need to make sure that you have <command>cvs</command>
            installed.
            To check whether this is the case, please run in a
	    <glossterm>terminal</glossterm>:
          </para>
  <screen>
  <prompt>$ </><userinput>cvs</>
  </screen>
          <para>
            If this was successful, then you should have gotten a nice CVS
            "Usage" help output.  Otherwise (e.g. an error "cvs: command
            not found") you still need to install a CVS package for your
            particular operating system, similar to the instructions given
            in the chapters for getting and installing a Wine package on
            various systems.
          </para>
        </sect3>

        <sect3>
          <title>Configuring Wine-specific CVS settings</title>

          <para>
            First, you should do a
          </para>
  <screen>
  <prompt>$ </><userinput>touch ~/.cvspass</>
  </screen>
          <para>
            to create or update the file <filename>.cvspass</filename> in
            your home directory, since CVS needs this file (for password
	    and login management) and will complain loudly if it doesn't exist.
          </para>

          <para>
            Second, we need to create the file
            <filename>.cvsrc</filename> in your home directory
            containing the CVS configuration settings needed for a valid
            Wine CVS setup (use CVS compression, properly update file and
            directory information, ...).
            The content of this file should look like the following:
            <programlisting>
cvs -z 3
update -PAd
diff -u
checkout -P
            </programlisting>
            Create the file with an <glossterm>editor</glossterm>
            of your choice, either by running
  <screen>
  <prompt>$ </><userinput>&lt;editor&gt; ~/.cvsrc</>
  </screen>
            , where &lt;editor&gt; is the editor you want to use (e.g.
            <command>joe</command>, <command>ae</command>,
            <command>vi</command>),
            or by creating the file <filename>.cvsrc</filename> in your
            home directory with your favorite graphical editor like nedit, kedit,
            gedit or others.
          </para>
        </sect3>

	<sect3>
	  <title>Downloading the Wine CVS tree</title>

	  <para>
	    Once CVS is installed and the Wine specific CVS
	    configuration is done, you can now do a login on our CVS
	    server and checkout (download) the Wine source code.
	    First, let's do the server login, to connect to the US server:
	  </para>
	  <screen>
  <prompt>$ </><userinput>cvs -d :pserver:cvs@cvs.winehq.org:/home/wine login</>
  </screen>
  <para>
  To connect to the EU server:
  </para>
  <screen>
  <prompt>$ </><userinput>cvs -d :pserver:cvs@rhlx01.fht-esslingen.de:/home/wine login</>
  </screen>
	  <para>
	    If <command>cvs</command> successfully connects to the CVS server,
	    then you will get a "CVS password:" prompt.
	    Simply enter "cvs" as the password (the password is
	    <emphasis>case sensitive</emphasis>: no capital letters!).
          </para>

	  <para>
	    After login, we are able to download the Wine source code tree.
	    Please make sure that you are in the directory that you want
	    to have the Wine source code in (the Wine source code will
	    use the subdirectory <filename>wine/</filename> in this
	    directory, since the subdirectory is named after the CVS module
	    that we want to check out). We assume that your current directory
	    might be your user's home directory.
	    To download the Wine tree into the subdirectory <filename>wine/</filename>, run,
	    to download from the US server:
	  </para>
  <screen>
  <prompt>$ </><userinput>cvs -d :pserver:cvs@cvs.winehq.org:/home/wine checkout wine</>
  </screen>
  <para>
  Or, to download from the EU server:
  </para>
  <screen>
  <prompt>$ </><userinput>cvs -d :pserver:cvs@rhlx01.fht-esslingen.de:/home/wine checkout wine</>
  </screen>
	  <para>
	    Downloading the CVS tree might take a while (some minutes
	    to few hours), depending on your connection speed.
	    Once the download is finished, you should keep a note of
	    which directory the newly downloaded
	    <filename>wine/</filename> directory is in, by running
	    <command>pwd</command> (Print Working Directory):
	  </para>
  <screen>
  <prompt>$ </><userinput>pwd</>
  </screen>
	  <para>
	    Later, you will be able to change to this directory by
	    running:
	  </para>
  <screen>
  <prompt>$ </><userinput>cd <replaceable>&lt;some_dir&gt;</></>
  </screen>
	  <para>
	    , where &lt;some_dir&gt; is the directory that
	    <command>pwd</command> gave you.
	    By running
	  </para>
  <screen>
  <prompt>$ </><userinput>cd wine</>
  </screen>
	  <para>
	    , you can now change to the directory of the Wine CVS tree
	    you just downloaded. Since you now have a fully working Wine
	    source tree by having followed the steps above, you're now
	    well-prepared to go to the Wine installation and configuration
	    steps that follow.
	  </para>
	</sect3>
      </sect2>

      <sect2 id="getting-updating-cvs">
        <title>Updating the Wine CVS tree</title>

	<para>
	  After a while, you might want to update your Wine CVS tree to
	  the current version.
	  Before updating the Wine tree, it might also be a good idea
	  to run <command>make uninstall</command> as root in order to
	  uninstall the installation of the previous Wine version.
	</para>
	<para>
	  To proceed with updating Wine, simply <command>cd</command>
	  to the Wine CVS tree directory, then run, if you're using the US server:
	</para>
  <screen>
  <prompt>$ </><userinput>make distclean</>
  <prompt>$ </><userinput>cvs -d :pserver:cvs@cvs.winehq.org:/home/wine update</>
  </screen>
  <para>
  or if you're using the EU server:
  </para>
  <screen>
  <prompt>$ </><userinput>make distclean</>
  <prompt>$ </><userinput>cvs -d :pserver:cvs@rhlx01.fht-esslingen.de:/home/wine update</>
  </screen>
	<para>
	  The <command>make distclean</command> part is optional, but
	  it's a good idea to remove old build and compile configuration
	  files before updating to a newer Wine version.  Once the CVS
	  update is finished, you can proceed with installing Wine again
	  as usual.
	</para>
      </sect2>

      <sect2 id="getting-upgrading-patch">
        <title>Updating Wine with a Patch</title>
        <para>
	  If you got Wine source code (e.g. via a tar archive file), you
	  have the option of applying patches to the source tree to
	  update to a newer Wine release or to fix bugs and add
	  experimental features.  Perhaps you've found a bug, reported
	  it to the <ulink url="mailto:wine-devel@winehq.org">Wine
	  mailing list</>, and received a patch file to fix the bug.
	  You can apply the patch with the <command>patch</> command,
	  which takes a streamed patch from <filename>stdin</>:
  <screen>
  <prompt>$ </><userinput>cd wine</>
  <prompt>$ </><userinput>patch -p0 &lt;<replaceable>../patch_to_apply.diff</></>
  </screen>
        </para>
        <para>
          To remove the patch, use the <parameter>-R</> option:
  <screen>
  <prompt>$ </><userinput>patch -p0 -R &lt;<replaceable>../patch_to_apply.diff</></>
  </screen>
        </para>
        <para>
          If you want to do a test run to see if the patch will apply
          successfully (e.g., if the patch was created from an older or
          newer version of the tree), you can use the
          <parameter>--dry-run</> parameter to run the patch
          without writing to any files:
  <screen>
  <prompt>$ </><userinput>patch -p0 --dry-run &lt;<replaceable>../patch_to_apply.diff</></>
  </screen>
        </para>
        <para>
          <command>patch</> is pretty smart about extracting
          patches from the middle of a file, so if you save an email with
          an inlined patch to a file on your hard drive, you can invoke
          patch on it without stripping out the email headers and other
          text.  <command>patch</> ignores everything that doesn't
          look like a patch.
        </para>
        <para>
          The <parameter>-p0</> option to <command>patch</>
          tells it to keep the full file name from the patch file. For example,
          if the file name in the patch file was
           <filename>wine/programs/clock/main.c</>.
          Setting the <parameter>-p0</> option would apply the patch
          to the file of the same name i.e.
          <filename>wine/programs/clock/main.c </>.
          Setting the <parameter>-p1</> option would strip off the
          first part of the file name and apply
          the patch to <filename>programs/clock/main.c</>.
	  The <parameter>-p1</> option would be useful if you named your
	  top level wine directory differently than the person who sent
	  you the patch. For the <parameter>-p1</> option
	  <command>patch</> should be run from the top level wine
	  directory.
        </para>
      </sect2>
    </sect1>

  </chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-parent-document:("wine-user.sgml" "set" "book" "chapter" "")
End:
-->
