INTRODUCTION
~~~~~~~~~~~~

This document attempts to establish guidelines for people making binary
packages of Wine.

It expresses the basic principles that the Wine developers have agreed
should be used when building Wine. It also attempts to highlight the areas
where there are different approaches to packaging Wine, so that the packager
can understand the different alternatives that have been considered and their
rationales.

TERMS
~~~~~

There are several terms and paths used in this document as place holders
for configurable values. Those terms are described here.
    * WINEPREFIX: is the user's Wine configuration directory.
	This is almost always ~/.wine, but can be overridden by
        the user by setting the WINEPREFIX environment variable.

    * PREFIX: is the prefix used when selecting an installation target.
	The current default is /usr/local. This results in binary
	installation into /usr/local/bin,  library installation into
	/usr/local/wine/lib, and so forth.
        This value can be overridden by the packager. In fact, FHS 2.2
	(http://www.pathname.com/fhs/) specifications suggest that a better
        prefix is /opt/wine.  Ideally, a packager would also allow the
	installer to override this value.

    * ETCDIR: is the prefix that Wine uses to find the global
	configuration directory. This can be changed by the configure
	option sysconfdir.  The current default is $PREFIX/etc.

    * WINDOWSDIR: is an important concept to Wine.  This directory specifies
	what directory corresponds to the root Windows directory
        (e.g. C:\WINDOWS). This directory is specified by the user, in
        the user's configuration file.  Generally speaking, this directory
	is either set to point at an empty directory, or it is set to point
	at a Windows partition that has been mounted through the vfat driver.
        NOTE:   It is extremely important that the packager understand the
		importance of WINDOWSDIR and convey this information and
		choice to the end user.

DEPENDENCIES
~~~~~~~~~~~~

There are two types of dependencies: hard and soft dependencies.

A hard dependency must be available at runtime for Wine to function,
if  compiled into the code. Soft dependencies on the other hand
will degrade gracefully at runtime if unavailable on the runtime system.
Ideally, we should eliminate all hard dependencies in favor of
soft dependencies.

To enable a soft dependency, it must be available at compile time.
As a packager, please do your best to make sure that as many soft
dependencies  are available during compilation. Failing to have a
soft dependency available means that users cannot benefit
from a Wine capability.

Here is a list of the soft dependencies. We suggest packagers
install each and every last of those before building the package.
These libraries are not dependencies in the RPM sense. In DEB packages,
they should appear as "Suggests" or "Recommends", as the case may be.
    * FreeType: http://www.freetype.org
      This library is used for direct rendering of fonts. It provides
      better support of fonts than using the X11 fonts engine. It is
      only needed for the X11 back end engine. Used from GDI.

    * fontconfig
      Used to find TrueType fonts for rendering with freetype. Used by
      GDI.

    * Alsa: http://sourceforge.net/projects/alsa (Linux only)
      This library gives sound support to the Windows environment.

    * JACK: http://jackit.sourceforge.net
      Similar to Alsa, it allow Wine to use the JACK audio server.

    * CUPS: http://www.cups.org
      This library allows Windows to see CUPS defined printers. Used
      by WINEPS and WINSPOOL.

    * OpenGL
      This is used for both OpenGL and Direct3D (and some other
      DirectX functions as well) support in Wine. There are many many
      libraries for providing this functionality. It is enough for one
      of them to be available when compiling Wine. Wine can work with
      any other library during runtime.
      If no library is available, packagers are encouraged to compile
      Wine with Mesa3D (http://www.mesa3d.org), which requires no
      hardware support to install.

    * LittleCMS: http://www.littlecms.com
      This library is used to implement MSCMS (Color Management System)
      which is needed by an increasing number of graphics applications.

    * libjpeg
      This library is used to load JPEG files within OLE automation.

    * libungif or gif_lib
      One of these two libraries is used to load GIF files within OLE
      automation.

    * ICU
      Used for bidirectional character output. Linked statically, used
      by GDI.

    * sane
      Used for basic scanner support in our TWAIN32 library.

    * openssl
      Used for some cryptographic support in ADVAPI32.

    * Xrandr, Xrender, Xi, Xext
      X11 extension libraries used by the x11drv.
      Xrandr - resolution switching
      Xrender - client side font rendering
      Xi - X Input handling (for asian input methods mostly)
      Xext - X extensions

GOALS
~~~~~

An installation from a Wine package should:
    * Install quickly and simply:
	The initial installation should require no user input.  An
		'rpm -i wine.rpm' or 'apt-get install wine'
        should suffice for initial installation.

    * Work quickly and simply:
        The user should be able to launch Solitaire within seconds
	of downloading the Wine package.

    * Comply with File system Hierarchy Standard
        A Wine installation should, as much as possible, comply
        with the FHS standard (http://www.pathname.com/fhs/).

    * Preserve flexibility
        None of the flexibility built into Wine should
        be hidden from the end user.

    * Easy configuration
        Come as preconfigured as possible, so the user does
        not need to change any configuration files.

    * Small footprint
        Use only as much disk space as needed per user.

    * Reduce support requirements.
        A packaged version of Wine should be sufficiently easy to use and
	have quick and easy access to FAQs and documentation such that
	requests to the newsgroup and development group go down.
        Further, it should be easy for users to capture good bug reports.

REQUIREMENTS
~~~~~~~~~~~~

Successfully installing Wine requires:

    * Install the RPM.

    * No longer: A configuration file

        Wine will run without a configuration file at this time.  Wine
	provides a sample config file and it can be found in
	documentation/samples.

        Some packagers may attempt to provide (or dynamically generate) a
	default configuration file. Some packagers may copy this on
	startup, but it is no longer necessary.

    * No longer: Preparing a fake windows setup.

	If WINEPREFIX is not present, wine will generate a setup
	by itself by calling wineprefixcreate.

        This will load all default registry entries, and register dlls
	where necessary. A special "wine.inf" file is provided with
	the WINE sources and installed to /usr/share/wine/.

WINE COMPONENTS
~~~~~~~~~~~~~~~

   * Executable Files
	- notepad : The windows Notepad replacement.
	- progman : A Program Manager replacement.
	- regedit : A graphical tool to edit your registry or for
		importing a windows registry to Wine.
	- regsvr32 : A program to register/unregister .DLL and .OCX files.
		Only works on those dlls that can self-register.
	- taskmgr : A clone of the windows taskmgr, used for debugging and
		managing running Windows and Winlib processes.
	- uninstaller: A program to uninstall installed Windows programs.
		Like the Add/Remove Program in the windows control panel.
	- wcmd :  Wine's command line interpreter, a cmd.exe replacement.
	- widl : Wine IDL compiler compiles (MS-RPC and DCOM) Interface
		Definition Language files.
	- wine :  The main Wine executable. This program will load a Windows
		binary and run it, relying upon the Wine shared object libraries.
	- wineboot : This program is executed on startup of the first wine
		process of a particular user.wineboot won't automatically run
		when needed.  Currently you have to manually run it after you
		install something.
	- winebuild : Winebuild is a tool used for building Winelib applications
		(and by Wine itself) to allow a developer to compile a .spec file
		into a .spec.c file.
	- wineconsole : Render the output of CUI programs.
	- winedbg : A application making use of the debugging API to allow
		debugging of Wine or Winelib applications as well as Wine itself
		(kernel and all DLLs).
	- winedump : Dumps the imports and exports of NE and PE files.
	- winefile : A clone of the win3x file manager.
	- winegcc/wineg++: Wrappers for gcc/g++ respectively, to make them behave
		as MinGW's gcc. Used for porting apps over to Winelib.
	- winemaker : Winemaker is a perl script which is designed to help you
		bootstrap the conversion of your Windows projects to Winelib.
	- winemine :  A clone of "Windows Minesweeper" a demo WineLib app.
	- winepath :  A tool for converting between Windows paths and Unix paths
	- wineserver : The Wine server is the process that manages resources,
		coordinates threads, and provides synchronization and interprocess
		communication primitives to Wine processes.
	- wineshelllink : This shell script can be called by Wine in order to
		propagate Desktop icon and menu creation requests out to a
		GNOME or KDE (or other Window Managers).
	- winewrap : Takes care of linking winelib applications. Linking with
		Winelib is a complex process, winewrap makes it simple.
	- winhelp : A Windows Help replacement.
	- wmc : Wine Message Compiler it allows Windows message files to be
		compiled into a format usable by Wine.
	- wrc : the Wine Resource Compiler. A clone of Microsoft's rc.

    * Shared Object Library Files
	To obtain a current list of DLLs, run:
		ls dlls/*.so
	it the root of the Wine _build_ tree, after a successful build.

    * Man Pages
	To obtain a current list of man files that need to be installed, run:
		find . -name "*.man"
	it the root of the Wine _build_ tree, after you have run ./configure.

    * Include Files
	An up to date list of includes can be found in the include/Makefile.in
	file.

    * Documentation files
	After building the documentation with:
		cd documentation; make html
	install all the files from: wine-user/, wine-devel/ and winelib-user/.

     * Dynamic Wine Files
        Wine also generates and depends on a number of dynamic
        files, including user configuration files and registry files.

        At the time of this writing, there was not a clear
        consensus of where these files should be located, and how
        they should be handled.  This section attempts
        to explain the alternatives clearly.

        - WINEPREFIX/config
            This file is the user local Wine configuration file.
            At the time of this writing, if this file exists,
            then no other configuration file is loaded.

        - PREFIX/share/wine.inf
	
            This is the global Wine setup information file
	    in the format of a MS Installer .INF file.

    * Registry Files
            In order to replicate the Windows registry system,
            Wine stores registry entries in a series of files.

            For an excellent overview of this issue, read this
            http://www.winehq.org/News/2000-25.html#FTR
            Wine Weekly News feature.

            The bottom line is that, at Wine server startup,
            Wine loads all registry entries into memory
            to create an in memory image of the registry.
            The order of files which Wine uses to load
            registry entries is extremely important,
            as it affects what registry entries are
            actually present.  The order is roughly that
            .dat files from a Windows partition are loaded,
            and then finally local registry settings are
            loaded from WINEPREFIX.  As each set are loaded,
            they can override the prior entries.  Thus,
            the local registry files take precedence.

            Then, at exit (or at periodic intervals),
            Wine will write either all registry entries
            (or, with the default setting) changed
            registry entries to files in the WINEPREFIX.

	    - WINEPREFIX/system.reg
                This file contains the user's local copy of the
		HKEY_LOCAL_MACHINE registry hive.  In general use, it will
		contain only changes made to the default registry values.

	    - WINEPREFIX/user.reg
                This file contains the user's local copy of the
		HKEY_CURRENT_MACHINE registry hive.  In general use, it will
		contain only changes made to the default registry values.

	    - WINEPREFIX/userdef.reg
                This file contains the user's local copy of the
		HKEY_USERS\.Default registry hive.  In general use, it will
		contain only changes made to the default registry values.

	    - WINEPREFIX/cachedmetrics.[display]
                This file contains font metrics for the given X display.
                Generally, this cache is generated once at Wine start time.
                cachedmetrics can be generated if absent.
		You should note this can take a long time.

	    - ETCDIR/wine.systemreg
                This file contains the global values for HKEY_LOCAL_MACHINE.
		The values in this file can be overridden by the user's
		local settings. The location of this directory is hard coded
		within wine, generally to /etc.

	    - ETCDIR/wine.userreg
                This file contains the global values for HKEY_USERS.
		The values in this file can be overridden by the user's
		local settings.  This file is likely to be deprecated in
                favor of a global wine.userdef.reg that will only contain
		HKEY_USERS/.Default.

    * Important Files from a Windows Partition
        Wine has the ability to use files from an installation of the
        actual Microsoft Windows operating system.  Generally these
        files are loaded on a VFAT partition that is mounted under Linux.

        This is probably the most important configuration detail.
        The use of Windows registry and DLL files dramatically alters the
	behavior of Wine. If nothing else, packagers have to make this
	distinction clear to the end user, so that they can intelligently
        choose their configuration.

        - WINDOWSDIR/system32/system.dat
        - WINDOWSDIR/system32/user.dat
	- WINDOWSDIR/win.ini

    * Windows Dynamic Link Libraries (WINDOWSDIR/system32/*.dll)
        Wine has the ability to use the actual Windows DLL files
        when running an application.  An end user can configure
        Wine so that Wine uses some or all of these DLL files
        when running a given application.

PACKAGING STRATEGIES
~~~~~~~~~~~~~~~~~~~~

There has recently been a lot of discussion on the Wine development
mailing list about the best way to build Wine packages.

There was a lot of discussion, and several diverging points of view.
This section of the document attempts to present the areas of common
agreement, and also to present the different approaches advocated on
the mailing list.

    * Distribution of Wine into packages
        The most basic question to ask is given the Wine CVS tree,
        what physical files are you, the packager, going to produce?
        Are you going to produce only a wine.rpm, or are you going to
	produce 6 Debian files (libwine, libwine-dev, wine, wine-doc,
	wine-utils and winesetuptk) as Ove has done?
        At this point, common practice is to adopt to the conventions
	of the targeted distribution.

	Also, experience shows that you should not create a huge set
	of packages, since later upgrades and obsoleting will be
	painful.

    * Where to install files
        This question is not really contested.  It will vary
        by distribution, and is really up to the packager.
        As a guideline, the current 'make install' process
        seems to behave such that if we pick a single PREFIX then:
            - binary files go into PREFIX/bin
	    - library files go into PREFIX/lib/wine
	    - include files go into PREFIX/include/wine
	    - man pages go into PREFIX/share/man
	    - documentation files go into PREFIX/share/doc/wine-VERSION

	You might also want to use the wine wrapper script winelauncher
	that can be found in tools/ directory, as it has several important
	advantages over directly invoking the wine binary.
	See the Executable Files section for details.

    * The question of /opt/wine
        The FHS 2.2 specification suggests that Wine as a package
        should be installed to /opt/wine.  None of the existing packages
	follow this guideline (today; check again tomorrow).

	(Since most are upgrades of the distro packages, this is still
	 on the safe side I think - Marcus Meissner)

    * What files to create
        After installing the static and shareable files, the next
        question the packager needs to ask is how much dynamic
        configuration will be done, and what configuration
        files should be created.

        The best current approach to this is:
	- Leave it alone and make a "wineprefixcreate" call available
	  to the user via a menu item or similar.

        - Setup a fake windows setup automatically.
		
		This is done by simply calling wineprefixcreate,
		which will setup a fake windows root for the user.

		If no arguments are passed, defaults will be
		assumed for WINEPREFIX (~/.wine) and similar
		variables.

		After this, WINE is immediately usable by the
		end user.

	- Others might be possible.

IMPLEMENTATION
~~~~~~~~~~~~~~

This section discusses the implementation of a Red Hat 8.0 .spec file.
For a current .spec file, please refer to any one of the existing SRPMs.

1. Building the package

Wine is configured the usual way (depending on your build environment).
The PREFIX is chosen using your application placement policy
(/usr/, /usr/X11R6/, /opt/wine/, or similar).  The configuration files
(wine.conf, wine.userreg, wine.systemreg) are targeted for /etc/wine/
(rationale: FHS 2.2, multiple read only configuration files of a package).

Example (split this into %build and %install section for rpm:


	CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr/X11R6 --sysconfdir=/etc/wine/ --enable-dll
	make
	BR=$RPM_BUILD_ROOT
	make install prefix=$BR/usr/X11R6/ sysconfdir=$BR/etc/wine/

You will need to package the files:

	$prefix/bin/wine*
	$prefix/lib/libwine*
	$prefix/lib/wine/*,
	$prefix/share/wine/wine.inf

	$prefix/man/man1/wine.1
	$prefix/include/wine/*
	$prefix/bin/notepad
	$prefix/bin/progman
	$prefix/bin/regedit
	$prefix/bin/rundll32
	$prefix/bin/regsvr32
	$prefix/bin/wcmd
	$prefix/bin/widl
	$prefix/bin/winhelp

	%config /etc/wine/*
	%doc ... choose from the top level directory and documentation/

2. Creating a good default configuration file.

This is no longer necessary, most of this work is now done
by wineprefixcreate itself.


3. Installing Wine for the system administrator

Install the package using the usual packager 'rpm -i wine.rpm'.

Adapting the $prefix/share/wine/wine.inf file used by wineprefixcreate is not
necessary.

Note that on Linux you should somehow try to add the unhide mount option
(see 'man mount') to the CD-ROM entry in /etc/fstab during package install,
as several stupid Windows programs mark some setup (!) files as hidden
(ISO9660) on CD-ROMs, which will greatly confuse users as they won't find
their setup files on the CD-ROMs as they were used on Windows systems when
unhide is not set ;-\ And of course the setup program will complain
that setup.ins or some other mess is missing... If you choose to do so,
then please make this change verbose to the admin.

Also make sure that the kernel you use includes the Joliet CD-ROM support,
for the very same reasons as given above (no long filenames due to missing
Joliet, files not found).

4. Installing Wine for the user

If no standard wine prefix was setup, the first call to wine will
create one for the user.

So the user can just click on any setup.exe file and it will work
out of the box.

AUTHORS
~~~~~~~

Written in 1999 by Marcus Meissner <marcus@jet.franken.de>
Updated in 2000 by Jeremy White <jwhite@codeweavers.com>
Updated in 2002 by Andreas Mohr <andi@rhlx01.fht-esslingen.de>
Updated in 2003 by Tom Wickline <twickline2@triad.rr.com>
Updated in 2003 by Dimitrie O. Paun <dpaun@rogers.com>
Updated in 2004,2005 by Marcus Meissner <marcus@jet.franken.de>
