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

To compile Wine, you must have one of:

	Linux version 0.99.13 or above
	NetBSD-current
	FreeBSD-current or FreeBSD 1.1 or later
	OpenBSD/i386 2.1 or later
	Solaris x86 2.5 or later

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.

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

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


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


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


5. GETTING MORE INFORMATION

FAQ:	The Wine FAQ is located at http://pw1.netcom.com/~dagar/wine.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.

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
