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 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, and its license (contained in the file LICENSE)
is BSD style.  Basically, you can do anything with it except claim
that you wrote it.

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 Wine
directory (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 manpage,
and the files in the documentation directory in the Wine source.

3. REQUIREMENTS

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

	Linux version 2.0.36 or above
	FreeBSD-current or FreeBSD 3.0 or later
	Solaris x86 2.5 or later

Although Linux version 2.0.x will mostly work, certain features
(specifically LDT sharing) required for properly supporting Win32
threads were not implemented until kernel version 2.2.  If you get
consistent thread-related crashes, you may want to upgrade to 2.2.

Similarly if you are on FreeBSD you may want to apply an LDT sharing
patch too (unless you are tracking -current where it finally has
been committed just recently), and there also is a small sigtrap
fix thats needed for wine's debugger. (Actually now that its using
ptrace() by default it may no longer make a difference but it still
doesn't hurt...) And if you're running a system from the -stable
branch older than Nov 15 1999, like a 3.3-RELEASE, then you also
need to apply a signal handling change that was MFC'd at that date.
More information including patches for the -stable branch is in
the ports tree:
ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/ports/emulators/wine/files/

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

You also need to have libXpm installed on your system. The sources for
it are available at ftp.x.org and all its mirror sites in the directory
/contrib/libraries. If you are using RedHat, libXpm is distributed as the
xpm and xpm-devel packages. Debian distributes libXpm as xpm4.7, xpm4g,
and xpm4g-dev 3.4j. SuSE calls these packages xpm and xpm-devel.

On x86 Systems gcc >= 2.7.2 is required. You also need flex version 2.5
or later and yacc. Bison will work as a replacement for yacc. If you are
using RedHat, install the flex and bison packages.

4. COMPILATION

To build Wine, run the following commands:

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

Wine requires a configuration file named wine.conf. Its default
location is /usr/local/etc, but you can supply a different name when
configuring wine by using the --prefix or --sysconfdir options to
./configure. You can also override the global configuration file with
a file named "config" in your ~/.wine directory.

The format of this file is explained in the man page. The file
documentation/samples/config contains an example configuration file
which has to be adapted and copied to one of the two locations
mentioned above.

See http://www.winehq.com/config.html for further 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 searchpath to locate the file)
	wine sol.exe

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

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

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 some 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.
If you post a bug report, please read the file documentation/bugreports to
see what information is required.


7. GETTING MORE INFORMATION

DOCU:	grep -i "SearchString" `find documentation/`|more

FAQ:	The Wine FAQ is located at http://www.winehq.com/faq.html.

WWW:	A great deal of information about Wine is available from WineHQ at
	http://www.winehq.com/. Untested patches against the current release
	are available on the wine-patches mailing list; see 
	http://www.winehq.com/dev.shtml#ml for more information.

HOWTO:	The Wine HOWTO is available at
	http://www.westfalen.de/witch/wine-HOWTO.txt .

Usenet:	Please browse old messages on http://www.dejanews.com/ to check whether 
	your problem is already fixed before posting a bug report to the 
	newsgroup. 

	The best place to get help or to report bugs is the Usenet newsgroup
	comp.emulators.ms-windows.wine. Please read the file 
	documentation/bugreports to see what information should be included 
	in a bug report.

IRC:	Online help is available at channel #WineHQ on IRCnet.

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

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

--
Alexandre Julliard
julliard@winehq.com
