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 program".  For more information and problem
resolution, read the rest of this file, the Wine man page, 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 6.2 or later
  Solaris x86 2.5 or later
  NetBSD-current
  Mac OS X 10.4 or later

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 or 2.6.x.

FreeBSD info:
  Wine should build on FreeBSD 5.x, but versions before FreeBSD 7.0 will
  generally not work properly. FreeBSD 6.3 has patches available to allow
  Wine to run. See <http://wiki.freebsd.org/Wine> for more information.
 
  More information can be found in the FreeBSD ports tree at
  <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.

Mac OS X info:
  You need Xcode 2.4 or later to build properly on x86.


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, NTFS does not
  provide all the file system features needed by some applications.
  Using a native Linux file system such as ext3 is recommended.

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

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.

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

  You also need flex version 2.5 or later and bison.

Optional support libraries:
  Run ./configure --verbose to see the optional libraries that could
  be used but aren't found on your system.


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:

    bunzip2 -c patch-file | patch -p1

where "patch-file" is the name of the patch file (something like
wine-0.9.x.diff.bz2). 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.

See the Support area at http://www.winehq.org/ for 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.


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)

Wine is not yet complete, so several programs may crash. In that crash
you will be dropped into the debugger so that you can investigate and
fix the problem.  For more information on how to do this, please check
the debugging section of the Wine Developer's Guide.


7. 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.

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

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

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

Wiki:	The Wine Wiki is located at http://wiki.winehq.org

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
