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

For the impatient, 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.

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 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 do not intend to compile Windows source code, use
"./configure --disable-lib" to skip building the library and reduce disk
space requirements. If you have an ELF compiler (which you probably do),
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".


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 .winerc file in your home directory.

The format of this file is explained in the man page. The file
wine.ini 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. 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

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
