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