Transform the Packaging Guide into a nice ASCII file.
Update it to the latest info, make it less prone to obsolescence.
Updated the Wine executables from list produced by Tom Wickline.

diff --git a/documentation/PACKAGING b/documentation/PACKAGING
new file mode 100644
index 0000000..570a6a6
--- /dev/null
+++ b/documentation/PACKAGING
@@ -0,0 +1,557 @@
+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.
+
+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.
+        The current Wine standard is to use the regedit tool against 
+	the 'winedefault.reg' file to generate a default registry.
+        The current preferred method of configuring/installing
+        Wine is to run /toos/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 command-line 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.
+	- 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 sucessful 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.com/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 seperate 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/
+
+Here we unfortunately do need to create wineuser.reg and winesystem.reg
+from the Wine distributed winedefault.reg. This can be done using regedit
+once for one example user and then reusing his WINEPREFIX/user.reg and
+WINEPREFIX/system.reg files.
+FIXME: this needs to be done better.
+
+	install -m 644 wine.sytemreg $BR/etc/wine/
+	install -m 644 wine.userreg $BR/etc/wine/
+
+There are now a lot of libraries generated by the build process, so a 
+seperate 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 -q /usr/X11R6/lib/wine /etc/ld.so.conf; then
+	    echo "/usr/X11R6/lib/wine" >> /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.
+		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)
+
+    * [Tweak.Layout]
+	WineLook=win95                (just the coolest look ;)
+
+    * 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>