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.

On x86 Systems gcc >= 2.7.0 is required. You will probably need flex too.

To build Wine, first do a "./configure" and then a "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 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 and the man page.

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.


4. RUNNING PROGRAMS

When invoking Wine, you must 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.

5. GETTING MORE INFORMATION

Usenet:	The best place to get help or to report bugs is the Usenet newsgroup
	comp.emulators.ms-windows.wine. The Wine FAQ is posted there every
	month. 

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

	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.

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

FAQ:	The Wine FAQ is located at http://pw1.netcom.com/~dagar/wine.html.


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
