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

You also need to have libXpm installed on your system. The sources for
it are probably available on the FTP site where you got Wine. They can
also be found on ftp.x.org and all its mirror sites. If you are using
RedHat, install the xpm and xpm-devel packages. Debian users need
xpm4.7, xpm4g, and xpm4g-dev 3.4j.

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.

3. COMPILATION

To build Wine, first run "./configure" and then run "make depend; make".
This will build the library "libwine.a" and the program "wine".

The program "wine" will load and run Windows executables.
The library "libwine.a" can be used to compile and link Windows source
code under Unix.  If you have an ELF compiler, you can use
"./configure --enable-dll" to build a shared library instead. To see
other 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".


4. 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 you to have a file /usr/local/etc/wine.conf (you can
supply a different name when configuring wine) or a file called .winerc
in your home directory.

The format of this file is explained in the man page. The file
wine.ini contains a config file example which has to be adapted
and copied to one of the two locations mentioned above.

See www.winehq.com/config.html for further configuration hints.


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


6. GETTING MORE INFORMATION

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.html#ml for more information.

HOWTO:	A pre-release version of 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.

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

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

--
Alexandre Julliard
julliard@lrc.epfl.ch
