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

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

  You also need flex version 2.5 or later and bison.

Optional support libraries:
  Configure will display notices when optional libraries are not found
  on your system. See http://wiki.winehq.org/Recommended_Packages for
  hints about the packages you should install.

  On 64-bit platforms you have to make sure to install the 32-bit
  versions of these libraries; see http://wiki.winehq.org/WineOn64bit
  for details.

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.

Once installed, you can run the "winecfg" configuration tool. See the
Support area at http://www.winehq.org/ for configuration hints.


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 ~/.wine/drive_c/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
