1. INTRODUCTION

Wine is a program which allows running Microsoft Windows programs
(including DOS, Windows 3.x and Win32 executables) on Unix.  It
consists of a program loader which loads and executes a Microsoft
Windows binary, and a library (called Winelib) that implements Windows
API calls using their Unix or X11 equivalents.  The library may also
be used for porting Win32 code into native Unix executables.

Wine is free software, released under the GNU LGPL; see the file
LICENSE for the details.

2. QUICK START

Whenever you compile from source, it is recommended to use the Wine
Installer to build and install Wine.  From the top-level directory
of the Wine source (which contains this file), run:

./tools/wineinstall

Run programs as "wine [options] program".  For more information and
problem resolution, read the rest of this file, the Wine man page,
the files in the documentation directory of the Wine source
(see "DOCUMENTATION"), and especially the wealth of information
found at http://www.winehq.org.

3. REQUIREMENTS

To compile and run Wine, you must have one of the following:

  Linux version 2.0.36 or above
  FreeBSD 4.x or FreeBSD 5-CURRENT or later
  Solaris x86 2.5 or later
  NetBSD-current

As Wine requires kernel-level thread support to run, only the operating
systems mentioned above are supported.
Other operating systems which support kernel threads may be supported
in the future.

Linux info:
  While Linux 2.2.x should still work and Linux 2.0.x may still work
  (older 2.0.x versions had thread-related crashes),
  it's best to have a current kernel such as 2.4.x.

FreeBSD info:
  Make sure you have the USER_LDT, SYSVSHM, SYSVSEM, and SYSVMSG
  options turned on in your kernel.  More information is in the ports
  tree: ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports/emulators/wine/

Solaris info:
  You will most likely need to build Wine with the GNU toolchain
  (gcc, gas, etc.). Warning : installing gas does *not* ensure that it
  will be used by gcc. Recompiling gcc after installing gas or
  symlinking cc, as and ld to the gnu tools is said to be necessary.

NetBSD info:
  Make sure you have the USER_LDT, SYSVSHM, SYSVSEM, and SYSVMSG options
  turned on in your kernel.



Supported file systems:
  Wine should run on most file systems. However, Wine will fail to start
  if umsdos is used for the /tmp directory. A few compatibility problems have
  also been reported using files accessed through Samba. Also, as NTFS
  can only be used safely with readonly access for now, we recommend against
  using NTFS, as Windows programs need write access almost everywhere.
  In case of NTFS files, copy over to a writable location.

Basic requirements:
  You need to have the X11 development include files installed
  (called xlib6g-dev in Debian and XFree86-devel in RedHat).

Build tool requirements:
  On x86 Systems gcc >= 2.7.2 is required.
  Versions earlier than 2.7.2.3 may have problems when certain files
  are compiled with optimization, often due to problems with header file
  management. pgcc currently doesn't work with Wine. The cause of this problem
  is unknown.

  Of course you also need "make" (most likely GNU make).

  You also need flex version 2.5 or later and bison.  If you are
  using RedHat or Debian, install the flex and bison packages.

Optional support libraries:
  If you want CUPS printing support, please install both cups and cups-devel
  packages.

  For the automatic processing of the test suite scripts, you also need
  libperl development header support (libperl-dev package on Debian).

For requirements in case you intend to build the documentation yourself,
see "DOCUMENTATION" section.

4. COMPILATION

In case you chose to not use wineinstall, run the following commands
to build Wine:

./configure
make depend
make

This will build the program "wine" and numerous support libraries/binaries.
The program "wine" will load and run Windows executables.
The library "libwine" ("Winelib") can be used to compile and link
Windows source code under Unix.

To see compile configuration options, do ./configure --help.

To upgrade to a new release by using a patch file, first cd to the
top-level directory of the release (the one containing this README
file). Then do a "make clean", and patch the release with:

    gunzip -c patch-file | patch -p1

where "patch-file" is the name of the patch file (something like
Wine-yymmdd.diff.gz). You can then re-run "./configure", and then
run "make depend && make".

5. SETUP

Once Wine has been built correctly, you can do "make install"; this
will install the wine executable, the Wine man page, and a few other
needed files.

Don't forget to uninstall any conflicting previous Wine installation
first.  Try either "dpkg -r wine" or "rpm -e wine" or "make uninstall"
before installing.

If you want to read the documentation supplied with the Wine source,
see the "DOCUMENTATION" section.

Wine requires a configuration file named named "config" in your
~/.wine directory. The format of this file is explained in the config file
man page (documentation/wine.conf.man).
The file documentation/samples/config contains an example configuration file
which has to be adapted and copied to the location mentioned above.

See the Support area at http://www.winehq.org/ for further
configuration hints.

In case of library loading errors
(e.g. "Error while loading shared libraries: libntdll.so"), make sure
to add the library path to /etc/ld.so.conf and run ldconfig as root.

In order to verify the correctness of the environment you need for
Wine to run successfully, you may run "./tools/winecheck | less".
You'll get a percentage score indicating "Wine configuration correctness".
As this program is alpha, it doesn't run a truly thorough test yet, though,
so it should be taken as a first verification step only.

See wine.conf man page on how to switch to text mode only support if desired.

6. RUNNING PROGRAMS

When invoking Wine, you may specify the entire path to the executable,
or a filename only.

For example: to run Solitaire:

	wine sol		   (using the search Path as specified in
	wine sol.exe		    the config file to locate the file)

	wine c:\\windows\\sol.exe  (using DOS filename syntax)

	wine /usr/windows/sol.exe  (using Unix filename syntax)

        wine -- sol.exe /parameter1 -parameter2 parameter3
				   (calling program with parameters)

Note: the path of the file will also be added to the path when
      a full name is supplied on the commandline.

Wine is not yet complete, so several programs may crash. Provided you set up
winedbg correctly according to documentation/debugger.sgml, you will be dropped
into a debugger so that you can investigate and fix the problem.
For more information on how to do this, please read the file
documentation/debugging.sgml.

You should backup all your important files that you give Wine access
to, or use a special Wine copy of them, as there have been some cases
of users reporting file corruption. Do NOT run Explorer, for instance,
if you don't have a proper backup, as it renames/cripples several
directories sometimes. Not even other MS apps such as e.g. Messenger are safe,
as they launch Explorer somehow. This particular corruption (!$!$!$!$.pfr)
can at least partially be fixed by using
http://home.nexgo.de/andi.mohr/download/decorrupt_explorer

7. DOCUMENTATION

Some documentation (various Wine Guides etc.) can be found in the
documentation/ directory (apart from also being available on WineHQ).

If you want to process the SGML files in there, then you can run "make doc"
in the documentation/ directory.
Doing so requires the sgml tools package (for db2html, db2ps, db2pdf) named:
Debian:		docbook-utils
Mandrake:	sgml-tools-A.B.C-DDmdk
SuSE:		docbktls-A.BB.C-DD

8. GETTING MORE INFORMATION

WWW:	A great deal of information about Wine is available from WineHQ at
	http://www.winehq.org/ : various Wine Guides, application database,
	bug tracking. This is probably the best starting point.

FAQ:	The Wine FAQ is located at http://www.winehq.org/FAQ

Usenet:	You can discuss Wine-related issues and get help
	on comp.emulators.ms-windows.wine.

Bugs:	Report bugs to Wine Bugzilla at http://bugs.winehq.org
	Please search the bugzilla database to check whether your
	problem is already found before posting a bug report.  You can
	also post bug reports to comp.emulators.ms-windows.wine.
	Please read the file documentation/bugs.sgml to see what
	information is required.

IRC:	Online help is available at channel #WineHQ on irc.freenode.net.

CVS:	The current Wine development tree is available through CVS.
	Go to http://www.winehq.org/cvs for more information.

Mailing lists:
	There are several mailing lists for Wine developers; see
	http://www.winehq.org/forums for more information.

If you add something, or fix a bug, please send a patch (in 'diff -u'
format) to wine-patches@winehq.org list for inclusion in the next
release.

--
Alexandre Julliard
julliard@winehq.org
