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

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

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

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 minutes of downloading the Wine package.
              
    * Comply with Filesystem 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 diskspace 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:
    * Much thought and work from the packager (1x)

    * A configuration file
        Wine will not run without a configuration file.  Wine provides a
        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 wish to rely on 
	winesetup to generate the configuration file.

    * A writeable C drive
        A writeable C:\ directory structure on a per-user basis. 
	Applications do dump .ini file into C:\WINDOWS, installer
	dump .exe/.dll/etc. files into C:\WINDOWS or C:\Program Files.

    * An initial set of registry entries.
	For custom changes to the default registry, tools/wine.inf
	can be modified as needed. The current preferred method of 
	configuring/installing Wine is to run /tools/wineinstall.  
	There are several other choices that could be made; registries 
	can be imported from a Windows partition.  At this time, Wine 
	does not completely support a complex multi-user installation 
	ala Windows NT, but it could fairly readily.

     * Special files
        Some special .dll and .exe files in the C:\WINDOWS\SYSTEM
	directory, since applications directly check for their presence.

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

   * Executable Files
	- notepad : The windows Notepad replacement.
	- progman : A Program Manager replacement.
	- regedit : A graphical tool to edit your registry or for 
		important a windows registry to Wine.
	- regsvr32 : A program to register/unregister .DLL's 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.
	- wineclipserv : The Wine Clipboard Server is a standalone XLib application
		whose purpose is to manage the X selection when Wine exits.
	- 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 filemanager.
	- 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.

        - ETCDIR/wine.conf
            This is the global Wine configuration file. It is only used
	    if the user running Wine has no local configuration file.
	    Global wine configuration is currently not possible;
	    this might get reenabled at some time.
            Some packagers feel that this file should not be supplied, 
	    and that only a wine.conf.default should be given here.
            Other packagers feel that this file should be the predominant
	    file used, and that users should only shift to a local 
	    configuration file if they need to.  An argument has been
            made that the local configuration file should inherit the 
	    global configuration file.  At this time, Wine does not do this;
            please refer to the WineHQ discussion archives for the debate 
	    concerning this.
            This debate is addressed more completely below, in the
	    'Packaging Strategy' section.

    * 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 partion are loaded,
            then global registry settings from ETCDIR,
            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 hardcoded 
		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 
	behaviour of Wine. If nothing else, pacakager 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 (as Marcus has done),
        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. 

    * 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).

    * 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.
        There are several approaches to this:
            - Rely completely on user file space - install nothing
                This approach relies upon the new winesetup utility
                and the new ability of Wine to launch winesetup if no
                configuration file is found.  The basic concept is
                that no global configuration files are created at
                install time.  Instead, Wine configuration files are
                created on the fly by the winesetup program when Wine
                is invoked.  Further, winesetup creates default
                Windows directories and paths that are stored
                completely in the user's WINEPREFIX.  This approach
                has the benefit of simplicity in that all Wine files
                are either stored under /opt/wine or under ~/.wine.
                Further, there is only ever one Wine configuration
                file.  This approach, however, adds another level of
                complexity.  It does not allow Wine to run Solitaire
                'out of the box'; the user must run the configuration
                program first.  Further, winesetup requires Tcl/Tk, a
                requirement not beloved by some.  Additionally, this
                approach closes the door on multi user configurations
                and presumes a single user approach.

	    - Build a reasonable set of defaults for the global wine.conf,
	      facilitate creation of a user's local Wine configuration.
                This approach, best shown by Marcus, causes the
                installation process to auto scan the system,
                and generate a global wine.conf file with best
                guess defaults.  The OpenLinux packages follow
                this behaviour.
                The keys to this approach are always putting
                an existing Windows partition into the
                path, and being able to run Solitaire
                right out of the box.
                Another good thing that Marcus does is he
                detects a first time installation and
                does some clever things to improve the
                user's Wine experience.
                A flaw with this approach, however, is it doesn't
                give the user an obvious way to choose not to
                use a Windows partition.

	    - Build a reasonable set of defaults for the global wine.conf,
              and ask the user if possible
                This approach, demonstrated by Ove, causes the
                installation process to auto scan the system,
                and generate a global wine.conf file with best
                guess defaults.  Because Ove built a Debian
                package, he was able to further query debconf and
                get permission to ask the user some questions,
                allowing the user to decide whether or not to
                use a Windows partition.

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 readonly 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/
	install -d $BR/etc/wine/
	install -m 644 wine.ini $BR/etc/wine/wine.conf

	# Put all our DLLs in a separate directory. (this works only if you have a buildroot)
	install -d $BR/usr/X11R6/lib/wine
	mv $BR/usr/X11R6/lib/lib* $BR/usr/X11R6/lib/wine/

	# the clipboard server is started on demand.
	install -m 755 dlls/x11drv/wineclipsrv $BR/usr/X11R6/bin/

	# The Wine server is needed.
	install -m 755 server/wineserver $BR/usr/X11R6/bin/


There are now a lot of libraries generated by the build process, so a 
separate library directory should be used.

	install -d 755 $BR/usr/X11R6/lib/
	mv $BR/
        
You will need to package the files:

	$prefix/bin/wine, $prefix/bin/dosmod, $prefix/lib/wine/*
	$prefix/man/man1/wine.1, $prefix/include/wine/*,
	$prefix/bin/wineserver, $prefix/bin/wineclipsrv

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

The post-install script:

	if ! grep /usr/X11R6/lib/wine /etc/ld.so.conf &gt;/dev/null; then
	    echo "/usr/X11R6/lib/wine" &gt;&gt; /etc/ld.so.conf
	fi
	/sbin/ldconfig

The post-uninstall script:

	if [ "$1" = 0 ]; then
	    perl -ni -e 'print unless m:/usr/X11R6/lib/wine:;' /etc/ld.so.conf
	fi
	/sbin/ldconfig

2. Creating a good default configuration file. 

For the rationales of needing as less input from the user as possible arises 
the need for a very good configuration file. The one supplied with Wine is 
currently lacking. We need:

    * [Drive X]: 
	- A for the floppy. Specify your distribution's default floppy mountpoint.
		Path=/auto/floppy
	- C for the C:\ directory. Here we use the user's home directory, for most
	  applications do see C:\ as root-writeable directory of every windows
	  installation and this basically is it in the UNIX-user context.
	  Don't forget to identify environment variables as DOS ones (ie, surrounded by '%').
		Path=%HOME%
	- R for the CD-Rom drive. Specify your distribution's default CD-ROM mountpoint.
		Path=/auto/cdrom
	- T for temporary storage. We do use /tmp/ (rationale: between process 
	  temporary data belongs to /tmp/ , FHS 2.0)
		Path=/tmp/
	- W for the original Windows installation. This drive points to the
	  WINDOWSDIR subdirectory of the original windows installation.
	  This avoids problems with renamed WINDOWSDIR directories (as for 
	  instance lose95, win or sys\win95). During compile/package/install
	  we leave this to be / , it has to be configured after the package install.
	- Z for the UNIX Root directory. This avoids any roblems with 
	  "could not find drive for current directory" users occasionally complain
	  about in the newsgroup and the irc channel. It also makes the whole 
	  directory structure browseable. The type of Z should be network,
	  so applications expect it to be readonly.
		Path=/
	  
    * [wine]:
	Windows=c:\windows\ 		(the windows/ subdirectory in the user's
				 home directory)
	System=c:\windows\system\	(the windows/system subdirectory in the user's
  					 home directory)
	Path=c:\windows;c:\windows\system;c:\windows\system32;w:\;w:\system;w:\system32;
	; Using this trick we have in fact two windows installations in one, we
	; get the stuff from the readonly installation and can write to our own.
	Temp=t:\			(the TEMP directory)

    * Possibly modify the [spooler], [serialports] and [parallelports] sections.
      FIXME: possibly more, including printer stuff.

Add this prepared configuration file to the package.

3. Installing Wine for the system administrator
                
Install the package using the usual packager 'rpm -i wine.rpm'.
You may edit /etc/wine/wine.conf , [Drive W], to point to a
possible Windows installation right after the install. That's it.

Note that on Linux you should somehow try to add the unhide mount optioni
(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

The user will need to run a setup script before the first invocation of Wine. 
This script should:
    * Copy /etc/wine/wine.conf for user modification.
    * Allow specification of the original windows installation to use
      (which modifies the copied wine.conf file).
    * Create the windows directory structure (c:\windows, c:\windows\system,
      c:\windows\Start Menu\Programs, c:\Program Files, c:\Desktop, etc.)
    * Symlink all .dll and .exe files from the original windows installation
      to the windows directory. Why? Some programs reference 
      "%windowsdir%/file.dll" or "%systemdir%/file.dll" directly and fail
      if they are not present.  This will give a huge number of symlinks, yes.
      However, if an installer later overwrites one of those files, it will 
      overwrite the symlink (so that the file now lies in the windows/
      subdirectory). FIXME: Not sure this is needed for all files.
    * On later invocation the script might want to compare regular files in 
      the user's windows directories and in the global windows directories
      and replace same files by symlinks (to avoid diskspace problems).
    
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>
