2442 lines
85 KiB
Plaintext
2442 lines
85 KiB
Plaintext
<!-- Wine Packaging guidelines. This is a rough outline only,
|
|
and much of this was up for open debate on wine-devel. -->
|
|
|
|
<chapter id="pkg-preface"> <title>Preface</title>
|
|
|
|
<sect1 id="pkg-authors"> <title>Authors</title>
|
|
|
|
<para>
|
|
Written by &name-marcus-meissner; <email>&email-marcus-meissner;</email>
|
|
</para>
|
|
<para>
|
|
Updated by &name-jeremy-white; <email>&email-jeremy-white;</email>
|
|
</para>
|
|
<para>
|
|
Updated by &name-andreas-mohr; <email>&email-andreas-mohr;</email>
|
|
</para>
|
|
<para>
|
|
Updated by &name-tom-wickline; <email>&email-tom-wickline;</email>
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="pkg-date"> <title>Document Revision Date</title>
|
|
|
|
|
|
<para>
|
|
The information contained in this document is extremely
|
|
time sensitive. <emphasis>It is vital that a packager
|
|
stay current with changes in Wine. </>
|
|
Changes to this document could be tracked e.g. by viewing its CVS log.
|
|
Due to Wine's fast development, a recent revision date
|
|
does not necessarily indicate that this document is 100% on par
|
|
with what Wine's full installation requirements are
|
|
(especially whenever lazy developers don't properly update the
|
|
documentation to include info about new features they implemented).
|
|
</para>
|
|
<para>
|
|
This document was last revised on January 16, 2003.</para>
|
|
|
|
</sect1>
|
|
|
|
<sect1 id="pkg-terms"> <title>Terms used in this document</title>
|
|
|
|
<para>There are several terms and paths used in this
|
|
document as place holders for configurable values.
|
|
Those terms are described here.
|
|
</para>
|
|
|
|
<orderedlist>
|
|
<listitem id=WINECONFDIR><para id=wineconfdir.id><EnVar>WINECONFDIR</EnVar></para>
|
|
<para>
|
|
<envar>WINECONFDIR</envar> is the user's Wine configuration directory.
|
|
This is almost always ~/.wine, but can be overridden
|
|
by the user by setting the <EnVar>WINECONFDIR</EnVar> environment
|
|
variable.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem id=PREFIX><para id=prefix.id><EnVar>PREFIX</EnVar></para>
|
|
<para>
|
|
<envar>PREFIX</envar> is the prefix used when selecting
|
|
an installation target. The current default is /usr/local.
|
|
This results in binary installation into /usr/bin,
|
|
library installation into /usr/wine/lib, and so forth.
|
|
This value can be overridden by the packager.
|
|
In fact, <ulink url="http://www.pathname.com/fhs/">FHS 2.2</ulink>
|
|
specifications suggest that a better
|
|
prefix is /opt/wine. Ideally, a packager would also
|
|
allow the installer to override this value.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem id=ETCDIR><para id=etcdir.id><EnVar>ETCDIR</EnVar></para>
|
|
<para>
|
|
<envar>ETCDIR</envar> 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.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem id=WINDOWSDIR><para id=windowsdir.id><EnVar>WINDOWSDIR</EnVar></para>
|
|
<para>
|
|
<envar>WINDOWSDIR</envar> is an important concept
|
|
to Wine. This directory specifies what directory
|
|
corresponds to the root Windows directory
|
|
(e.g. C:\WINDOWS).
|
|
</para>
|
|
<para>
|
|
This directory is specified by the user, in
|
|
the user's <link linkend=winerc>configuration file</link>.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
<emphasis>It is extremely important that the packager
|
|
understand the importance of <envar>WINDOWSDIR</envar>
|
|
and convey this information and choice to the end
|
|
user</emphasis>.
|
|
</para>
|
|
</listitem>
|
|
|
|
</orderedlist>
|
|
|
|
|
|
</sect1>
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
<chapter id="pkg-introduction"> <title>Introduction</title>
|
|
|
|
<para>
|
|
This document attempts to establish guidelines
|
|
for people making binary packages of Wine.
|
|
</para>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<sect1 id="pkg-goals"> <title>Goals</title>
|
|
<para>
|
|
An installation from a Wine package should:
|
|
</para>
|
|
<itemizedlist>
|
|
|
|
<listitem>
|
|
<para>
|
|
Install quickly and simply.
|
|
</para>
|
|
<para>
|
|
The initial installation should require no user
|
|
input. An rpm -i wine.rpm or apt-get install wine
|
|
should suffice for initial installation.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Work quickly and simply
|
|
</para>
|
|
<para>
|
|
The user should be able to launch Solitaire
|
|
within minutes of downloading the Wine package.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Comply with Filesystem Hierarchy Standard
|
|
</para>
|
|
<para>
|
|
A Wine installation should, as much as possible, comply
|
|
with the
|
|
<ulink url="http://www.pathname.com/fhs/">FHS standard</ulink>.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Preserve flexibility
|
|
</para>
|
|
<para>
|
|
None of the flexibility built into Wine should
|
|
be hidden from the end user.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Come as preconfigured as possible, so the user does
|
|
not need to change any configuration files.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Use only as much diskspace as needed per user.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Reduce support requirements.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
|
|
</sect1>
|
|
|
|
<sect1 id="pkg-requirements"> <title>Requirements</title>
|
|
<para>
|
|
Successfully installing Wine requires:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Much thought and work from the packager (1x)</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
A configuration file
|
|
</para>
|
|
<para>
|
|
Wine will not run without a configuration file. Wine provides a
|
|
a sample config file and it can be found in /usr/share/doc/wine/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.
|
|
</para>
|
|
</listitem>
|
|
|
|
|
|
<listitem>
|
|
<para>
|
|
A writeable <filename>C:\</filename> directory
|
|
structure on a per-user basis. Applications do dump
|
|
<filename>.ini</filename> files into
|
|
<filename>c:\windows</filename>, installers dump
|
|
<filename>.exe</filename>, <filename>.dll</filename>
|
|
and more into <filename>c:\windows</filename> and
|
|
subdirectories or into <filename>C:\Program Files</filename>.
|
|
</para>
|
|
</listitem>
|
|
|
|
|
|
<listitem>
|
|
<para>
|
|
An initial set of registry entries.
|
|
</para>
|
|
<para>
|
|
The current Wine standard is to use the regedit tool
|
|
against the 'winedefault.reg' file to generate
|
|
a default registry.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
|
|
|
|
<listitem>
|
|
<para>
|
|
Some special <filename>.dll</filename> and
|
|
<filename>.exe</filename> files in the
|
|
<filename>windows\system</filename> directory, since
|
|
applications directly check for their presence.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
</sect1>
|
|
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<chapter id="pkg-components"><title>Wine Components</title>
|
|
|
|
<para>
|
|
This section lists all files that pertain to Wine.
|
|
</para>
|
|
|
|
<sect1 id="pkg-static"><title>Wine Static and Shareable Files</title>
|
|
|
|
<para>
|
|
At the time of this writing, almost all of the following components
|
|
are installed through a standard 'make install'
|
|
of Wine. Exceptions from the rule are noted.
|
|
|
|
<caution>
|
|
<para>
|
|
It is vital that a packager check for
|
|
changes in Wine. This list will likely be out
|
|
of date by the time this document is committed to CVS.
|
|
</para>
|
|
</caution>
|
|
|
|
</para>
|
|
|
|
<orderedlist>
|
|
|
|
<listitem id=binfiles>
|
|
<variablelist><title>Executable Files</title>
|
|
|
|
<varlistentry><term><filename>wine</filename></term>
|
|
<listitem>
|
|
<para>
|
|
The main Wine executable. This program will load
|
|
a Windows binary and run it, relying upon
|
|
the Wine shared object libraries.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>wineserver</filename></term>
|
|
<listitem>
|
|
<para>
|
|
The Wine server is critical to Wine; it is the
|
|
process that coordinates all shared Windows
|
|
resources.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>wineboot</filename></term>
|
|
<listitem>
|
|
<para>
|
|
Winelib app to be found in programs/.
|
|
Its purpose is to process all Windows startup autorun
|
|
mechanisms, such as wininit.ini, win.ini Load=/Run=,
|
|
registry keys: RenameFiles/Run/RunOnce*/RunServices*,
|
|
Startup folders.
|
|
It'll be called by Wine automatically when an application
|
|
requests a restart of the system (presumeably - after
|
|
installation).
|
|
It should also be called once when a session starts to
|
|
run the various session start utilities (will not happen
|
|
automatically). To start a session, invoke "wineboot start".
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>wineclipsrv</filename></term>
|
|
<listitem>
|
|
<para>
|
|
The Wine Clipboard Server is a standalone XLib
|
|
application whose purpose is to manage the X selection
|
|
when Wine exits.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>winedbg</filename></term>
|
|
<listitem>
|
|
<para>
|
|
Winedbg is the Wine built in debugger.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>winelauncher</filename></term>
|
|
<listitem>
|
|
<para>
|
|
(not getting installed via make install)
|
|
A wine wrapper shell script that intelligently handles
|
|
wine invocation by informing the user about what's going
|
|
on, among other things.
|
|
To be found in tools/ directory.
|
|
Use of this wrapper script instead of directly using wine
|
|
is strongly encouraged, as it not only improves the user
|
|
interface, but also adds important functionality to wine,
|
|
such as session bootup/startup actions.
|
|
If you intend to use this script, then you might want to
|
|
rename the wine executable to e.g. wine.bin and
|
|
winelauncher to wine.
|
|
the <link linkend=WINECONFDIR endterm=wineconfdir.id></link>/config file.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>winesetup</filename></term>
|
|
<listitem>
|
|
<para>
|
|
This is a Tcl/Tk based front end that provides
|
|
a user friendly tool to edit and configure
|
|
the <link linkend=WINECONFDIR endterm=wineconfdir.id></link>/config file.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>wineshelllink</filename></term>
|
|
<listitem>
|
|
<para>
|
|
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).
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>winebuild</filename></term>
|
|
<listitem>
|
|
<para>
|
|
Winebuild is a tool used for Winelib applications
|
|
(and by Wine itself) to allow a developer to
|
|
compile a .spec file into a .spec.c file.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry><term><filename>wmc</filename></term>
|
|
<listitem>
|
|
<para>
|
|
The wmc tools is the Wine Message Compiler. It
|
|
allows Windows message files to be compiled
|
|
into a format usable by Wine.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry><term><filename>wrc</filename></term>
|
|
<listitem>
|
|
<para>
|
|
The wrc tool is the Wine Resource Compiler.
|
|
It allows Winelib programmers (and Wine itself)
|
|
to compile Windows style resource files
|
|
into a form usable by Wine.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry><term><filename>fnt2bdf</filename></term>
|
|
<listitem>
|
|
<para>
|
|
The fnt2bdf utility extracts fonts from .fnt or
|
|
.dll files and stores them in .bdf format files.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry><term><filename>dosmod</filename></term>
|
|
<listitem>
|
|
<para>
|
|
DOS Virtual Machine.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>uninstaller</filename></term>
|
|
<listitem>
|
|
<para>
|
|
(not getting installed via make install)
|
|
A Winelib program to uninstall installed Windows programs.
|
|
To be found in the programs/ source directory.
|
|
This program can be used to uninstall most Windows programs
|
|
(just like the Add/Remove Programs item in Windows)
|
|
by taking the registry uninstall strings that get created
|
|
by installers such as InstallShield or WISE.
|
|
In binary packages, it should probably be renamed
|
|
to something like wine-uninstaller for consistency's sake.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</listitem>
|
|
|
|
<listitem id=libfiles>
|
|
<para>Shared Object Library Files</para>
|
|
<para>This list may NOT necessarily current!</para>
|
|
|
|
<simplelist columns=5>
|
|
<member>advapi32.dll.so</>
|
|
<member>avicap32.dll.so</>
|
|
<member>avifil32.dll.so</>
|
|
<member>avifile.dll.so</>
|
|
<member>aviinfo.exe.so</>
|
|
<member>aviplay.exe.so</>
|
|
<member>clock.exe.so </>
|
|
<member>comcat.dll.so</>
|
|
<member>comctl32.dll.so</>
|
|
<member>comdlg32.dll.so</>
|
|
<member>comm.dll.so</>
|
|
<member>commdlg.dll.so</>
|
|
<member>compobj.dll.so</>
|
|
<member>control.exe.so</>
|
|
<member>crtdll.dll.so</>
|
|
<member>crypt32.dll.so</>
|
|
<member>dciman32.dll.so</>
|
|
<member>ddeml.dll.so</>
|
|
<member>ddraw.dll.so</>
|
|
<member>devenum.dll.so</>
|
|
<member>dinput.dll.so</>
|
|
<member>dinput8.dll.so</>
|
|
<member>dispdib.dll.so</>
|
|
<member>display.dll.so</>
|
|
<member>dplay.dll.so</>
|
|
<member>dplayx.dll.so</>
|
|
<member>dsound.dll.so</>
|
|
<member>expand.exe.so</>
|
|
<member>gdi.exe.so</>
|
|
<member>gdi32.dll.so</>
|
|
<member>glu32.dll.so</>
|
|
<member>icmp.dll.so</>
|
|
<member>imaadp32.acm.so</>
|
|
<member>imagehlp.dll.so</>
|
|
<member>icinfo.exe.so</>
|
|
<member>icmp.dll.so</>
|
|
<member>imaadp32.acm.so</>
|
|
<member>imagehlp.dll.so</>
|
|
<member>imm.dll.so</>
|
|
<member>imm32.dll.so</>
|
|
<member>joystick.drv.so</>
|
|
<member>kernel32.dll.so</>
|
|
<member>keyboard.dll.so</>
|
|
<member>krnl386.exe.so</>
|
|
<member>libgdi32.dll.so</>
|
|
<member>libkernel32.dll.so</>
|
|
<member>libntdll.dll.so</>
|
|
<member>libuser32.dll.so</>
|
|
<member>libwine.so</>
|
|
<member>libwine_tsx11.so</>
|
|
<member>libwine_unicode.so</>
|
|
<member>libwinspool.drv.so</>
|
|
<member>lz32.dll.so</>
|
|
<member>lzexpand.dll.so</>
|
|
<member>mapi32.dll.so</>
|
|
<member>mcianim.drv.so</>
|
|
<member>mciavi.drv.so</>
|
|
<member>mcicda.drv.so</>
|
|
<member>mciseq.drv.so</>
|
|
<member>mciwave.drv.so</>
|
|
<member>midimap.drv.so</>
|
|
<member>mmsystem.dll.so</>
|
|
<member>mouse.dll.so</>
|
|
<member>mpr.dll.so</>
|
|
<member>msacm.dll.so</>
|
|
<member>msacm.drv.so</>
|
|
<member>msacm32.dll.so</>
|
|
<member>msdmo.dll.so</>
|
|
<member>msg711.drv.so</>
|
|
<member>msimg32.dll.so</>
|
|
<member>msacm.drv.so</>
|
|
<member>msnet32.dll.so</>
|
|
<member>msrle32.dll.so</>
|
|
<member>msdmo.dll.so</>
|
|
<member>msg711.acm.so</>
|
|
<member>msimg32.dll.so</>
|
|
<member>msisys.ocx.so</>
|
|
<member>msnet32.dll.so</>
|
|
<member>msrle32.dll.so</>
|
|
<member>msvcrt.dll.so</>
|
|
<member>msvcrt20.dll.so</>
|
|
<member>msvfw32.dll.so</>
|
|
<member>msvideo.dll.so</>
|
|
<member>netapi32.dll.so</>
|
|
<member>notepad.exe.so</>
|
|
<member>ntdll.dll.so</>
|
|
<member>odbc32.dll.so</>
|
|
<member>ole2.dll.so</>
|
|
<member>ole2conv.dll.so</>
|
|
<member>ole2disp.dll.so</>
|
|
<member>ole2nls.dll.so</>
|
|
<member>ole2prox.dll.so</>
|
|
<member>ole2thk.dll.so</>
|
|
<member>ole32.dll.so</>
|
|
<member>oleaut32.dll.so</>
|
|
<member>olecli.dll.so</>
|
|
<member>olecli32.dll.so</>
|
|
<member>oledlg.dll.so</>
|
|
<member>olepro32.dll.so</>
|
|
<member>olesvr.dll.so</>
|
|
<member>olesvr32.dll.so</>
|
|
<member>opengl32.dll.so</>
|
|
<member>osversioncheck.exe.so</>
|
|
<member>progman.exe.so</>
|
|
<member>psapi.dll.so</>
|
|
<member>qcap.dll.so</>
|
|
<member>quartz.dll.so</>
|
|
<member>rasapi16.dll.so</>
|
|
<member>rasapi32.dll.so</>
|
|
<member>regapi.exe.so</>
|
|
<member>regedit.exe.so </>
|
|
<member>regsvr32.exe.so</>
|
|
<member>regtest.exe.so</>
|
|
<member>riched32.dll.so</>
|
|
<member>rpcrt4.dll.so</>
|
|
<member>serialui.dll.so</>
|
|
<member>setupapi.dll.so</>
|
|
<member>setupx.dll.so</>
|
|
<member>shdocvw.dll.so</>
|
|
<member>shell.dll.so</>
|
|
<member>shell32.dll.so</>
|
|
<member>shfolder.dll.so</>
|
|
<member>shlwapi.dll.so</>
|
|
<member>sound.dll.so</>
|
|
<member>sti.dll.so</>
|
|
<member>storage.dll.so</>
|
|
<member>stress.dll.so</>
|
|
<member>system.dll.so</>
|
|
<member>tapi32.dll.so</>
|
|
<member>toolhelp.dll.so</>
|
|
<member>ttydrv.dll.so</>
|
|
<member>twain_32.dll.so</>
|
|
<member>typelib.dll.so</>
|
|
<member>uninstaller.exe.so</>
|
|
<member>url.dll.so</>
|
|
<member>urlmon.dll.so</>
|
|
<member>user.exe.so</>
|
|
<member>user32.dll.so</>
|
|
<member>ver.dll.so</>
|
|
<member>version.dll.so</>
|
|
<member>w32skrnl.dll.so</>
|
|
<member>w32sys.dll.so</>
|
|
<member>win32s16.dll.so</>
|
|
<member>win87em.dll.so</>
|
|
<member>winaspi.dll.so</>
|
|
<member>windebug.dll.so</>
|
|
<member>winealsa.drv.so</>
|
|
<member>winearts.drv.so</>
|
|
<member>wineconsole.exe.so</>
|
|
<member>winedbg.exe.so</>
|
|
<member>winedos.dll.so</>
|
|
<member>winefile.exe.so</>
|
|
<member>winemine.exe.so</>
|
|
<member>winemp3.acm.so</>
|
|
<member>wineoss.drv.so</>
|
|
<member>winepath.exe.so</>
|
|
<member>wineps.dll.so</>
|
|
<member>wineps16.dll.so</>
|
|
<member>wing.dll.so</>
|
|
<member>winhelp.exe.so</>
|
|
<member>wininet.dll.so</>
|
|
<member>winmm.dll.so</>
|
|
<member>winnls.dll.so</>
|
|
<member>winnls32.dll.so</>
|
|
<member>winsock.dll.so</>
|
|
<member>winspool.drv.so</>
|
|
<member>wintrust.dll.so</>
|
|
<member>wnaspi32.dll.so</>
|
|
<member>wow32.dll.so</>
|
|
<member>wprocs.dll.so</>
|
|
<member>ws2_32.dll.so</>
|
|
<member>wsock32.dll.so</>
|
|
<member>x11drv.dll.so</>
|
|
</simplelist>
|
|
|
|
</listitem>
|
|
|
|
|
|
<listitem id=manfiles>
|
|
<para> Man Pages</para>
|
|
<simplelist columns=1>
|
|
<member>wine.conf.man</>
|
|
<member>wine.man</>
|
|
<member>winemaker</>
|
|
<member>wmc.man</>
|
|
<member>wrc.man</>
|
|
</simplelist>
|
|
</listitem>
|
|
|
|
|
|
<listitem id=includefiles>
|
|
<para>Include Files</para>
|
|
<para>This list may NOT be current!</para>
|
|
<simplelist columns=5>
|
|
|
|
<member>audevcod.h</>
|
|
<member>basetsd.h</>
|
|
<member>cderr.h</>
|
|
<member>cguid.h</>
|
|
<member>comcat.h</>
|
|
<member>commctrl.h</>
|
|
<member>commdlg.h</>
|
|
<member>compobj.h</>
|
|
<member>cpl.h</>
|
|
<member>d3d.h</>
|
|
<member>d3dcaps.h</>
|
|
<member>d3dtypes.h</>
|
|
<member>d3dvec.inl</>
|
|
<member>dde.h</>
|
|
<member>ddeml.h</>
|
|
<member>ddraw.h</>
|
|
<member>digitalv.h</>
|
|
<member>dinput.h</>
|
|
<member>dispdib.h</>
|
|
<member>dlgs.h</>
|
|
<member>dmo.h</>
|
|
<member>dmoreg.h</>
|
|
<member>dmort.h</>
|
|
<member>docobj.h</>
|
|
<member>dplay.h</>
|
|
<member>dplobby.h</>
|
|
<member>dshow.h</>
|
|
<member>dsound.h</>
|
|
<member>guiddef.h</>
|
|
<member>imagehlp.h</>
|
|
<member>imm.h</>
|
|
<member>initguid.h</>
|
|
<member>instance.h</>
|
|
<member>lmcons.h</>
|
|
<member>lzexpand.h</>
|
|
<member>mapi.h</>
|
|
<member>mapicode.h</>
|
|
<member>mapidefs.h</>
|
|
<member>mciavi.h</>
|
|
<member>mcx.h</>
|
|
<member>mediaerr.h</>
|
|
<member>mediaobj.h</>
|
|
<member>minmax.h</>
|
|
<member>mmreg.h</>
|
|
<member>mmsystem.h</>
|
|
<member>msacm.h</>
|
|
<member>msacmdlg.h</>
|
|
<member>msvcrt/conio.h</>
|
|
<member>msvcrt/crtdbg.h</>
|
|
<member>msvcrt/ctype.h</>
|
|
<member>msvcrt/direct.h</>
|
|
<member>msvcrt/dos.h</>
|
|
<member>msvcrt/eh.h</>
|
|
<member>msvcrt/excpt.h</>
|
|
<member>msvcrt/fcntl.h</>
|
|
<member>msvcrt/io.h</>
|
|
<member>msvcrt/locale.h</>
|
|
<member>msvcrt/malloc.h</>
|
|
<member>msvcrt/mbctype.h</>
|
|
<member>msvcrt/mbstring.h</>
|
|
<member>msvcrt/process.h</>
|
|
<member>msvcrt/search.h</>
|
|
<member>msvcrt/setjmp.h</>
|
|
<member>msvcrt/share.h</>
|
|
<member>msvcrt/stddef.h</>
|
|
<member>msvcrt/stdio.h</>
|
|
<member>msvcrt/stdlib.h</>
|
|
<member>msvcrt/string.h</>
|
|
<member>msvcrt/sys/locking.h</>
|
|
<member>msvcrt/sys/stat.h</>
|
|
<member>msvcrt/sys/timeb.h</>
|
|
<member>msvcrt/sys/types.h</>
|
|
<member>msvcrt/sys/utime.h</>
|
|
<member>msvcrt/time.h</>
|
|
<member>msvcrt/wchar.h</>
|
|
<member>msvcrt/wctype.h</>
|
|
<member>mswsock.h</>
|
|
<member>nb30.h</>
|
|
<member>nspapi.h</>
|
|
<member>ntsecapi.h</>
|
|
<member>oaidl.h</>
|
|
<member>objbase.h</>
|
|
<member>objidl.h</>
|
|
<member>ocidl.h</>
|
|
<member>ole2.h</>
|
|
<member>ole2ver.h</>
|
|
<member>oleauto.h</>
|
|
<member>olectl.h</>
|
|
<member>oledlg.h</>
|
|
<member>oleidl.h</>
|
|
<member>poppack.h</>
|
|
<member>prsht.h</>
|
|
<member>psapi.h</>
|
|
<member>pshpack1.h</>
|
|
<member>pshpack2.h</>
|
|
<member>pshpack4.h</>
|
|
<member>pshpack8.h</>
|
|
<member>ras.h</>
|
|
<member>regstr.h</>
|
|
<member>richedit.h</>
|
|
<member>rpc.h</>
|
|
<member>rpcdce.h</>
|
|
<member>rpcdcep.h</>
|
|
<member>rpcndr.h</>
|
|
<member>rpcnterr.h</>
|
|
<member>rpcproxy.h</>
|
|
<member>servprov.h</>
|
|
<member>setupapi.h</>
|
|
<member>shellapi.h</>
|
|
<member>shlguid.h</>
|
|
<member>shlobj.h</>
|
|
<member>shlwapi.h</>
|
|
<member>sql.h</>
|
|
<member>sqlext.h</>
|
|
<member>sqltypes.h</>
|
|
<member>storage.h</>
|
|
<member>tapi.h</>
|
|
<member>tlhelp32.h</>
|
|
<member>unknwn.h</>
|
|
<member>urlmon.h</>
|
|
<member>uuids.h</>
|
|
<member>ver.h</>
|
|
<member>vfw.h</>
|
|
<member>vfwmsgs.h</>
|
|
<member>winbase.h</>
|
|
<member>wincon.h</>
|
|
<member>wincrypt.h</>
|
|
<member>windef.h</>
|
|
<member>windows.h</>
|
|
<member>windowsx.h</>
|
|
<member>wine/debug.h</>
|
|
<member>wine/exception.h</>
|
|
<member>wine/icmpapi.h</>
|
|
<member>wine/ipexport.h</>
|
|
<member>wine/library.h</>
|
|
<member>wine/obj_base.h</>
|
|
<member>wine/obj_cache.h</>
|
|
<member>wine/obj_channel.h</>
|
|
<member>wine/obj_clientserver.h</>
|
|
<member>wine/obj_comcat.h</>
|
|
<member>wine/obj_commdlgbrowser.h</>
|
|
<member>wine/obj_connection.h</>
|
|
<member>wine/obj_contextmenu.h</>
|
|
<member>wine/obj_control.h</>
|
|
<member>wine/obj_dataobject.h</>
|
|
<member>wine/obj_dockingwindowframe.h</>
|
|
<member>wine/obj_dragdrop.h</>
|
|
<member>wine/obj_enumguid.h</>
|
|
<member>wine/obj_enumidlist.h</>
|
|
<member>wine/obj_errorinfo.h</>
|
|
<member>wine/obj_extracticon.h</>
|
|
<member>wine/obj_inplace.h</>
|
|
<member>wine/obj_marshal.h</>
|
|
<member>wine/obj_misc.h</>
|
|
<member>wine/obj_moniker.h</>
|
|
<member>wine/obj_oleaut.h</>
|
|
<member>wine/obj_olefont.h</>
|
|
<member>wine/obj_oleobj.h</>
|
|
<member>wine/obj_oleundo.h</>
|
|
<member>wine/obj_oleview.h</>
|
|
<member>wine/obj_picture.h</>
|
|
<member>wine/obj_property.h</>
|
|
<member>wine/obj_propertystorage.h</>
|
|
<member>wine/obj_queryassociations.h</>
|
|
<member>wine/obj_serviceprovider.h</>
|
|
<member>wine/obj_shellbrowser.h</>
|
|
<member>wine/obj_shellextinit.h</>
|
|
<member>wine/obj_shellfolder.h</>
|
|
<member>wine/obj_shelllink.h</>
|
|
<member>wine/obj_shellview.h</>
|
|
<member>wine/obj_storage.h</>
|
|
<member>wine/obj_webbrowser.h</>
|
|
<member>wine/unicode.h</>
|
|
<member>winerror.h</>
|
|
<member>wingdi.h</>
|
|
<member>wininet.h</>
|
|
<member>winioctl.h</>
|
|
<member>winnetwk.h</>
|
|
<member>winnls.h</>
|
|
<member>winnt.h</>
|
|
<member>winreg.h</>
|
|
<member>winres.h</>
|
|
<member>winresrc.h</>
|
|
<member>winsock.h</>
|
|
<member>winsock2.h</>
|
|
<member>winspool.h</>
|
|
<member>winsvc.h</>
|
|
<member>winuser.h</>
|
|
<member>winver.h</>
|
|
<member>wnaspi32.h</>
|
|
<member>wownt32.h</>
|
|
<member>ws2spi.h</>
|
|
<member>ws2tcpip.h</>
|
|
<member>wshisotp.h</>
|
|
<member>wsipx.h</>
|
|
<member>wtypes.h</>
|
|
<member>zmouse.h</>
|
|
<member>libwine_uuid.a</>
|
|
</simplelist>
|
|
|
|
</listitem>
|
|
|
|
<listitem id=docfiles>
|
|
<para>Documentation files.</para>
|
|
<para>This list may NOT be current!</para>
|
|
|
|
<simplelist columns=3>
|
|
|
|
<member>HOWTO-winelib.gz</>
|
|
<member>wine-devel-20020710/wine-devel</>
|
|
<member>wine-devel/accel-impl.html</>
|
|
<member>wine-devel/arch-dlls.html</>
|
|
<member>wine-devel/architecture.html</>
|
|
<member>wine-devel/build.html</>
|
|
<member>wine-devel/com-writing.html</>
|
|
<member>wine-devel/compiling.html</>
|
|
<member>wine-devel/consoles.html</>
|
|
<member>wine-devel/cvs-regression.html</>
|
|
<member>wine-devel/dbg-channels.html</>
|
|
<member>wine-devel/dbg-checking.html</>
|
|
<member>wine-devel/dbg-commands.html</>
|
|
<member>wine-devel/dbg-compiling.html</>
|
|
<member>wine-devel/dbg-config.html</>
|
|
<member>wine-devel/dbg-in-memory.html</>
|
|
<member>wine-devel/dbg-limits.html</>
|
|
<member>wine-devel/dbg-modes.html</>
|
|
<member>wine-devel/dbg-notes.html</>
|
|
<member>wine-devel/dbg-others.html</>
|
|
<member>wine-devel/dbg-param.html</>
|
|
<member>wine-devel/dbg-resource-ids.html</>
|
|
<member>wine-devel/dbg-using.html</>
|
|
<member>wine-devel/debugger.html</>
|
|
<member>wine-devel/debugging.html</>
|
|
<member>wine-devel/dlls.html</>
|
|
<member>wine-devel/documentation.html</>
|
|
<member>wine-devel/file-handles.html</>
|
|
<member>wine-devel/hardware-trace.html</>
|
|
<member>wine-devel/i18n.html</>
|
|
<member>wine-devel/implementation.html</>
|
|
<member>wine-devel/index.html</>
|
|
<member>wine-devel/memory-addresses.html</>
|
|
<member>wine-devel/module-overview.html</>
|
|
<member>wine-devel/ole-binary.html</>
|
|
<member>wine-devel/ole.html</>
|
|
<member>wine-devel/opengl-configure.html</>
|
|
<member>wine-devel/opengl-problems.html</>
|
|
<member>wine-devel/opengl-works.html</>
|
|
<member>wine-devel/opengl.html</>
|
|
<member>wine-devel/os2-wine.html</>
|
|
<member>wine-devel/part-one.html</>
|
|
<member>wine-devel/part-three.html</>
|
|
<member>wine-devel/part-two.html</>
|
|
<member>wine-devel/patch-quality.html</>
|
|
<member>wine-devel/patches.html</>
|
|
<member>wine-devel/porting.html</>
|
|
<member>wine-devel/tools.html</>
|
|
<member>wine-devel/wine-debugger.html</>
|
|
<member>wine-devel/wine-docbook.html</>
|
|
<member>winelib-user/bindlls-building.html</>
|
|
<member>winelib-user/bindlls-cxx-apis.html</>
|
|
<member>winelib-user/bindlls-spec.html</>
|
|
<member>winelib-user/bindlls-wrapper.html</>
|
|
<member>winelib-user/bindlls.html</>
|
|
<member>winelib-user/c-library.html</>
|
|
<member>winelib-user/com-support.html</>
|
|
<member>winelib-user/index.html</>
|
|
<member>winelib-user/init-problems.html</>
|
|
<member>winelib-user/linking.html</>
|
|
<member>winelib-user/mfc-compiling.html</>
|
|
<member>winelib-user/mfc-legal-issues.html</>
|
|
<member>winelib-user/mfc-using.html</>
|
|
<member>winelib-user/mfc.html</>
|
|
<member>winelib-user/others.html</>
|
|
<member>winelib-user/packaging.html</>
|
|
<member>winelib-user/portability-issues.html</>
|
|
<member>winelib-user/porting-compiling.html</>
|
|
<member>winelib-user/seh.html</>
|
|
<member>winelib-user/spec-file.html</>
|
|
<member>winelib-user/unicode.html</>
|
|
<member>winelib-user/winelib-getting-started.html</>
|
|
<member>winelib-user/winelib-introduction.html</>
|
|
<member>winelib-user/winelib-requirements.html</>
|
|
<member>winelib-user/winelib-toolkit.html</>
|
|
<member>winelib-user/wmc.html</>
|
|
<member>winelib-user/wrc.html</>
|
|
</simplelist>
|
|
|
|
</listitem>
|
|
|
|
|
|
</orderedlist>
|
|
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="pkg-nonstatic"><title>Dynamic Wine Files</title>
|
|
|
|
<para>
|
|
Wine also generates and depends on a number of dynamic
|
|
files, including user configuration files and registry files.
|
|
</para>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<orderedlist>
|
|
|
|
<listitem>
|
|
<variablelist><title>Configuration File</title>
|
|
<varlistentry id=winerc><term><filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/config</filename></term>
|
|
<listitem>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term>
|
|
<filename><link linkend=ETCDIR endterm=etcdir.id></link>/wine.conf</filename></term>
|
|
<listitem>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
Some packagers feel that this file should not
|
|
be supplied, and that only a wine.conf.default
|
|
should be given here.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
This debate is addressed more completely
|
|
below, in <link linkend=pkg-strategy endterm=strategy.id></link>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>Registry Files</para>
|
|
|
|
<para>
|
|
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
|
|
<ulink url="http://www.winehq.com/News/2000-25.html#FTR">
|
|
Wine Weekly News feature.</ulink>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
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 <link linkend=ETCDIR endterm=etcdir.id></link>,
|
|
and then finally local registry settings are
|
|
loaded from <link linkend=WINECONFDIR endterm=wineconfdir.id></link>
|
|
. As each set are loaded,
|
|
they can override the prior entries. Thus,
|
|
the local registry files take precedence.
|
|
</para>
|
|
|
|
<para>
|
|
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
|
|
<link linkend=WINECONFDIR endterm=wineconfdir.id></link>.
|
|
</para>
|
|
|
|
<variablelist>
|
|
<varlistentry><term><filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/system.reg</filename></term>
|
|
<listitem>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/user.reg</filename></term>
|
|
<listitem>
|
|
<para>
|
|
This file contains the user's local copy of
|
|
the HKEY_CURRENT_USER registry hive. In
|
|
general use, it will contain only changes made to the
|
|
default registry values.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/userdef.reg</filename></term>
|
|
<listitem>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/wine.userreg</filename></term>
|
|
<listitem>
|
|
<para>
|
|
This file is being deprecated. It is only read
|
|
if there is no user.reg or wine.userreg, and
|
|
it supplied the contents of HKEY_USERS.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename><link linkend=ETCDIR endterm=etcdir.id></link>/wine.systemreg</filename></term>
|
|
<listitem>
|
|
<para>
|
|
This file contains the global values for
|
|
HKEY_LOCAL_MACHINE. The values in this file
|
|
can be overridden by the user's local settings.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
The location of this directory is hardcoded within
|
|
wine, generally to /etc. This will hopefully be
|
|
fixed at some point in the future.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry><term><filename><link linkend=ETCDIR endterm=etcdir.id></link>/wine.userreg</filename></term>
|
|
<listitem>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<variablelist><title>Other files in <link linkend=WINECONFDIR endterm=wineconfdir.id></link></title>
|
|
<varlistentry><term><filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/wineserver-[hostname]</filename></term>
|
|
<listitem>
|
|
<para>
|
|
This directory contains files used by Wine and the Wineserver
|
|
to communicate. A packager may want to have a facility for the user to erase files in this directory, as a crash in the
|
|
wineserver resulting in a bogus lock file can render wine unusable.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/cachedmetrics.[display]</filename></term>
|
|
<listitem>
|
|
<para>
|
|
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 be long.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</listitem>
|
|
|
|
|
|
</orderedlist>
|
|
|
|
|
|
</sect1>
|
|
|
|
<sect1 id="pkg-winpartition"><title>Important Files from a Windows Partition</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
|
|
<orderedlist>
|
|
|
|
<listitem>
|
|
<variablelist><title>Registry Files</title>
|
|
<varlistentry><term><filename>[WINDOWSDIR]/system32/system.dat</filename></term>
|
|
<listitem>
|
|
<para>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>[WINDOWSDIR]/system32/user.dat</filename></term>
|
|
<listitem>
|
|
<para>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry><term><filename>[WINDOWSDIR]/win.ini</filename></term>
|
|
<listitem>
|
|
<para>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Windows Dynamic Link Libraries ([WINDOWSDIR]/system32/*.dll)
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
|
|
</orderedlist>
|
|
|
|
</sect1>
|
|
|
|
</chapter>
|
|
|
|
<chapter id="pkg-strategy"><title id=strategy.id>Packaging Strategies</title>
|
|
|
|
<para>
|
|
There has recently been a lot of discussion on the Wine
|
|
development mailing list about the best way to
|
|
build Wine packages.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<sect1 id="pkg-whatfiles"><title>Distribution of Wine into packages</title>
|
|
<para>
|
|
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?
|
|
</para>
|
|
<para>
|
|
At this point, there is no consensus
|
|
amongst the wine-devel community on this subject.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="pkg-wherefiles"><title>Where to install files</title>
|
|
<para>
|
|
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 <link linkend=PREFIX endterm=prefix.id></link>,
|
|
then :
|
|
</para>
|
|
<orderedlist>
|
|
|
|
<listitem>
|
|
<para>
|
|
all <link linkend=binfiles>binary files</link> go into
|
|
<link linkend=PREFIX endterm=prefix.id></link>$PREFIX/bin,
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
all <link linkend=libfiles>library files</link> go into
|
|
<link linkend=PREFIX endterm=prefix.id></link>$PREFIX/lib/wine,
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
all <link linkend=includefiles>include files</link> go into
|
|
<link linkend=PREFIX endterm=prefix.id></link>$PREFIX/include/wine,
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
all <link linkend=docfiles>documentation files</link> go into
|
|
<link linkend=PREFIX endterm=prefix.id></link>$PREFIX/share/doc/wine-VERSION,
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
and <link linkend=manfiles>man pages</link> go into
|
|
<link linkend=PREFIX endterm=prefix.id></link>$PREFIX/share/man,
|
|
</para>
|
|
</listitem>
|
|
|
|
</orderedlist>
|
|
|
|
<para>
|
|
Refer to the specific information on the Debian package
|
|
and the OpenLinux package for specific details on how
|
|
those packages are built.
|
|
</para>
|
|
<para>
|
|
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 <link linkend=binfiles>Executable Files</link> section
|
|
for details.
|
|
</para>
|
|
|
|
<sect2 id=opt><title>The question of /opt/wine</title>
|
|
<para>
|
|
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).
|
|
</para>
|
|
</sect2>
|
|
|
|
</sect1>
|
|
|
|
<sect1 id="pkg-whattomake"><title>What files to create</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
There are several approaches to this:
|
|
<orderedlist>
|
|
<listitem>
|
|
<para>
|
|
Rely completely on user file space - install nothing
|
|
</para>
|
|
<para>
|
|
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 <link linkend=WINECONFDIR endterm=wineconfdir.id></link>.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
|
|
|
|
<listitem>
|
|
<para>
|
|
Build a reasonable set of defaults for the global wine.conf,
|
|
facilitate creation of a user's local Wine configuration.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
A flaw with this approach, however, is it doesn't
|
|
give the user an obvious way to choose not to
|
|
use a Windows partition.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Build a reasonable set of defaults for the global wine.conf,
|
|
and ask the user if possible
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
|
|
|
|
</orderedlist>
|
|
</para>
|
|
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="pkg-wineconf"><title>What to put into the wine config file</title>
|
|
<para>
|
|
This is the sample config file provided with wine 20030115. You can edit this file
|
|
to best suit the needs of your intended user.
|
|
</para>
|
|
|
|
<programlisting>
|
|
|
|
WINE REGISTRY Version 2
|
|
;; All keys relative to \\Machine\\Software\\Wine\\Wine\\Config
|
|
|
|
;; If you think it is necessary to show others your complete config for a
|
|
;; bug report, filter out empty lines and comments with
|
|
;; grep -v "^;" ~/.wine/config | grep '.'
|
|
;;
|
|
;; MS-DOS drives configuration
|
|
;;
|
|
;; Each section has the following format:
|
|
;; [Drive X]
|
|
;; "Path"="xxx" (Unix path for drive root)
|
|
;; "Type"="xxx" (supported types are 'floppy', 'hd', 'cdrom' and 'network')
|
|
;; "Label"="xxx" (drive label, at most 11 characters)
|
|
;; "Serial"="xxx" (serial number, 8 characters hexadecimal number)
|
|
;; "Filesystem"="xxx" (supported types are 'msdos'/'dos'/'fat', 'win95'/'vfat', 'unix')
|
|
;; This is the FS Wine is supposed to emulate on a certain
|
|
;; directory structure.
|
|
;; Recommended:
|
|
;; - "win95" for ext2fs, VFAT and FAT32
|
|
;; - "msdos" for FAT16 (ugly, upgrading to VFAT driver strongly recommended)
|
|
;; DON'T use "unix" unless you intend to port programs using Winelib !
|
|
;; "Device"="/dev/xx" (only if you want to allow raw device access)
|
|
;;
|
|
[Drive A]
|
|
"Path" = "/mnt/fd0"
|
|
"Type" = "floppy"
|
|
"Label" = "Floppy"
|
|
"Filesystem" = "win95"
|
|
"Serial" = "87654321"
|
|
"Device" = "/dev/fd0"
|
|
|
|
[Drive C]
|
|
"Path" = "/c"
|
|
"Type" = "hd"
|
|
"Label" = "MS-DOS"
|
|
"Filesystem" = "win95"
|
|
|
|
[Drive D]
|
|
"Path" = "/cdrom"
|
|
"Type" = "cdrom"
|
|
"Label" = "CD-Rom"
|
|
"Filesystem" = "win95"
|
|
; make sure that device is correct and has proper permissions !
|
|
"Device" = "/dev/cdrom"
|
|
|
|
[Drive E]
|
|
"Path" = "/tmp"
|
|
"Type" = "hd"
|
|
"Label" = "Tmp Drive"
|
|
"Filesystem" = "win95"
|
|
|
|
[Drive F]
|
|
"Path" = "${HOME}"
|
|
"Type" = "network"
|
|
"Label" = "Home"
|
|
"Filesystem" = "win95"
|
|
|
|
[wine]
|
|
"Windows" = "c:\\windows"
|
|
"System" = "c:\\windows\\system"
|
|
"Temp" = "e:\\"
|
|
"Path" = "c:\\windows;c:\\windows\\system;e:\\;e:\\test;f:\\"
|
|
"Profile" = "c:\\windows\\Profiles\\Administrator"
|
|
"GraphicsDriver" = "x11drv"
|
|
;"ShowDirSymlinks" = "1"
|
|
;"ShowDotFiles" = "1"
|
|
"ShellLinker" = "wineshelllink"
|
|
|
|
# <wineconf>
|
|
|
|
[Version]
|
|
; Windows version to imitate (win95,win98,winme,nt351,nt40,win2k,winxp,win20,win30,win31)
|
|
;"Windows" = "win98"
|
|
; DOS version to imitate
|
|
;"DOS" = "6.22"
|
|
|
|
; Be careful here, wrong DllOverrides settings have the potential
|
|
; to pretty much kill your setup.
|
|
[DllOverrides]
|
|
; some dlls you may want to change
|
|
"oleaut32" = "builtin, native"
|
|
"ole32" = "builtin, native"
|
|
"commdlg" = "builtin, native"
|
|
"comdlg32" = "builtin, native"
|
|
"shell" = "builtin, native"
|
|
"shell32" = "builtin, native"
|
|
"shfolder" = "builtin, native"
|
|
"shlwapi" = "builtin, native"
|
|
"shdocvw" = "builtin, native"
|
|
"advapi32" = "builtin, native"
|
|
"msvcrt" = "native, builtin"
|
|
"mciavi.drv" = "native, builtin"
|
|
"mcianim.drv" = "native, builtin"
|
|
; you can specify applications too
|
|
; this one will apply for all notepad.exe
|
|
;"*notepad.exe" = "native, builtin"
|
|
; this one will apply only for a particular file
|
|
;"C:\\windows\\regedit.exe" = "native, builtin"
|
|
; default for all other dlls
|
|
"*" = "builtin, native"
|
|
|
|
[x11drv]
|
|
; Number of colors to allocate from the system palette
|
|
"AllocSystemColors" = "100"
|
|
; Use a private color map
|
|
"PrivateColorMap" = "N"
|
|
; Favor correctness over speed in some graphics operations
|
|
"PerfectGraphics" = "N"
|
|
; Color depth to use on multi-depth screens
|
|
;;"ScreenDepth" = "16"
|
|
; Name of X11 display to use
|
|
;;"Display" = ":0.0"
|
|
; Allow the window manager to manage created windows
|
|
"Managed" = "Y"
|
|
; Use a desktop window of 640x480 for Wine
|
|
;"Desktop" = "640x480"
|
|
; Use XFree86 DGA extension if present
|
|
; (make sure /dev/mem is accessible by you !)
|
|
"UseDGA" = "Y"
|
|
; Use XShm extension if present
|
|
"UseXShm" = "Y"
|
|
; Use XVidMode extension if present
|
|
"UseXVidMode" = "Y"
|
|
; Use the take focus protocol
|
|
"UseTakeFocus" = "Y"
|
|
; Enable DirectX mouse grab
|
|
"DXGrab" = "N"
|
|
; Create the desktop window with a double-buffered visual
|
|
; (useful to play OpenGL games)
|
|
"DesktopDoubleBuffered" = "N"
|
|
; Code page used for captions in managed mode
|
|
; 0 means default ANSI code page (CP_ACP == 0)
|
|
"TextCP" = "0"
|
|
; Use this if you have more than one port for video on your setup
|
|
; (Wine uses for now the first 'input image' it finds).
|
|
;; "XVideoPort" = "43"
|
|
; Run in synchronous mode (useful for debugging X11 problems)
|
|
;;"Synchronous" = "Y"
|
|
;
|
|
; Use the Render extension to render client side fonts (default "Y")
|
|
;;"ClientSideWithRender" = "Y"
|
|
; Fallback on X core requests to render client side fonts (default "Y")
|
|
;;"ClientSideWithCore" = "Y"
|
|
; Set both of the previous two to "N" in order to force X11 server side fonts
|
|
;
|
|
; Anti-alias fonts if using the Render extension (default "Y")
|
|
;;"ClientSideAntiAliasWithRender" = "Y"
|
|
; Anti-alias fonts if using core requests fallback (default "Y")
|
|
;;"ClientSideAntiAliasWithCore" = "Y"
|
|
;
|
|
|
|
[fonts]
|
|
;Read the Fonts topic in the Wine User Guide before adding aliases
|
|
;See a couple of examples for russian users below
|
|
"Resolution" = "96"
|
|
"Default" = "-adobe-helvetica-"
|
|
"DefaultFixed" = "fixed"
|
|
"DefaultSerif" = "-adobe-times-"
|
|
"DefaultSansSerif" = "-adobe-helvetica-"
|
|
|
|
;; default TrueType fonts with russian koi8-r encoding
|
|
;"Default" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r"
|
|
;"DefaultFixed" = "-monotype-courier new-*-*-*--*-*-*-*-*-*-koi8-r"
|
|
;"DefaultSerif" = "-monotype-times new roman-*-*-*--*-*-*-*-*-*-koi8-r"
|
|
;"DefaultSansSerif" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r"
|
|
;; default cyrillic bitmap X fonts
|
|
;"Default" = "-cronyx-helvetica-"
|
|
;"DefaultFixed" = "fixed"
|
|
;"DefaultSerif" = "-cronyx-times-"
|
|
;"DefaultSansSerif" = "-cronyx-helvetica-"
|
|
|
|
; the TrueType font dirs you want to make accessible to wine
|
|
[FontDirs]
|
|
;"dir1" = "/usr/X11R6/lib/X11/fonts/TrueType"
|
|
;"dir2" = "/usr/share/fonts/truetype"
|
|
;"dir3" = "/usr/X11R6/lib/X11/fonts/TT"
|
|
;"dir4" = "/usr/share/fonts/TT"
|
|
|
|
[serialports]
|
|
"Com1" = "/dev/ttyS0"
|
|
"Com2" = "/dev/ttyS1"
|
|
"Com3" = "/dev/ttyS2"
|
|
"Com4" = "/dev/modem"
|
|
|
|
[parallelports]
|
|
"Lpt1" = "/dev/lp0"
|
|
|
|
[ppdev]
|
|
;; key: io-base of the emulated port
|
|
;; value : parport-device{,timeout}
|
|
;; timeout for auto closing an open device ( not yet implemented)
|
|
;"378" = "/dev/parport0"
|
|
;"278" = "/dev/parport1"
|
|
;"3bc" = "/dev/parport2"
|
|
|
|
[spooler]
|
|
"FILE:" = "tmp.ps"
|
|
"LPT1:" = "|lpr"
|
|
"LPT2:" = "|gs -sDEVICE=bj200 -sOutputFile=/tmp/fred -q -"
|
|
"LPT3:" = "/dev/lp3"
|
|
|
|
[ports]
|
|
;"read" = "0x779,0x379,0x280-0x2a0"
|
|
;"write" = "0x779,0x379,0x280-0x2a0"
|
|
|
|
[Debug]
|
|
;"RelayExclude" = "RtlEnterCriticalSection;RtlLeaveCriticalSection"
|
|
;"RelayInclude" = "user32.CreateWindowA"
|
|
;"SnoopExclude" = "RtlEnterCriticalSection;RtlLeaveCriticalSection"
|
|
;"SpyExclude" = "WM_SIZE;WM_TIMER;"
|
|
|
|
[registry]
|
|
;These are all booleans. Y/y/T/t/1 are true, N/n/F/f/0 are false.
|
|
;Defaults are read all, write to Home
|
|
; Where to find the global registries
|
|
;"GlobalRegistryDir" = "/etc";
|
|
; Global registries (stored in /etc)
|
|
"LoadGlobalRegistryFiles" = "Y"
|
|
; Home registries (stored in ~user/.wine/)
|
|
"LoadHomeRegistryFiles" = "Y"
|
|
; Load Windows registries from the Windows directory
|
|
"LoadWindowsRegistryFiles" = "Y"
|
|
; TRY to write all changes to home registries
|
|
"WritetoHomeRegistryFiles" = "Y"
|
|
; Registry periodic save timeout in seconds
|
|
; "PeriodicSave" = "600"
|
|
; Save only modified keys
|
|
"SaveOnlyUpdatedKeys" = "Y"
|
|
|
|
[Tweak.Layout]
|
|
;; supported styles are 'Win31'(default), 'Win95', 'Win98'
|
|
;; this has *nothing* to do with the windows version Wine returns:
|
|
;; set the "Windows" value in the [Version] section if you want that.
|
|
"WineLook" = "Win95"
|
|
|
|
[Console]
|
|
;"Drivers" = "tty"
|
|
;"XtermProg" = "nxterm"
|
|
;"InitialRows" = "25"
|
|
;"InitialColumns" = "80"
|
|
;"TerminalType" = "nxterm"
|
|
|
|
[Clipboard]
|
|
"ClearAllSelections" = "0"
|
|
"PersistentSelection" = "1"
|
|
|
|
; List of all directories directly contain .AFM files
|
|
[afmdirs]
|
|
"1" = "/usr/share/ghostscript/fonts"
|
|
"2" = "/usr/share/a2ps/afm"
|
|
"3" = "/usr/share/enscript"
|
|
"4" = "/usr/X11R6/lib/X11/fonts/Type1"
|
|
|
|
[WinMM]
|
|
#"Drivers" = "winearts.drv"
|
|
#"Drivers" = "winejack.drv"
|
|
"Drivers" = "wineoss.drv"
|
|
"WaveMapper" = "msacm.drv"
|
|
"MidiMapper" = "midimap.drv"
|
|
|
|
[dsound]
|
|
;; HEL only: Number of waveOut fragments ahead to mix in new buffers.
|
|
;"HELmargin" = "5"
|
|
;; HEL only: Number of waveOut fragments ahead to queue to driver.
|
|
;"HELqueue" = "5"
|
|
;; Max number of fragments to prebuffer
|
|
;"SndQueueMax" = "28"
|
|
;; Min number of fragments to prebuffer
|
|
;"SndQueueMin" = "12"
|
|
|
|
[Network]
|
|
;; Use the DNS (Unix) host name always as NetBIOS "ComputerName" (boolean, default "Y").
|
|
;; Set to N if you need a persistent NetBIOS ComputerName that possibly differs
|
|
;; from the Unix host name. You'll need to set ComputerName in
|
|
;; HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ComputerName, too.
|
|
;"UseDnsComputerName" = "N"
|
|
|
|
;; sample AppDefaults entries
|
|
|
|
; 3 InstallShield versions who like to put their full screen window in front,
|
|
; without any chance to switch to another X11 application.
|
|
; So just catch them in a desktop window.
|
|
|
|
[AppDefaults\\_INS5576._MP\\x11drv]
|
|
"Desktop" = "640x480"
|
|
|
|
[AppDefaults\\_INS5176._MP\\x11drv]
|
|
"Desktop" = "640x480"
|
|
|
|
[AppDefaults\\_INS0466._MP\\x11drv]
|
|
"Desktop" = "640x480"
|
|
|
|
;[AppDefaults\\iexplore.exe\\DllOverrides]
|
|
;"shlwapi" = "native"
|
|
;"rpcrt4" = "native"
|
|
;"ole32" = "native"
|
|
;"shdocvw" = "native"
|
|
;"wininet" = "native"
|
|
;"shfolder" = "native"
|
|
;"shell32" = "native"
|
|
;"shell" = "native"
|
|
;"comctl32" = "native"
|
|
;
|
|
;[AppDefaults\\setup.exe\\x11drv]
|
|
;"Desktop" = "800x600"
|
|
;
|
|
;[AppDefaults\\sol.exe\\Version]
|
|
;"Windows" = "nt40"
|
|
;
|
|
;; Some games (Quake 2, UT) refuse to accept emulated dsound devices.
|
|
;; You can add an AppDefault entry like this for such cases.
|
|
;[AppDefaults\\pickygame.exe\\dsound]
|
|
;"EmulDriver" = "N"
|
|
|
|
# </wineconf>
|
|
|
|
</programlisting>
|
|
</sect1>
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<chapter id="pkg-implementation"> <title>Implementation</title>
|
|
|
|
<sect1 id="pkg-openlinux"><title>RedHat 8.0 Sample</title>
|
|
|
|
<orderedlist inheritnum="inherit">
|
|
<listitem>
|
|
<para>Building the package</para>
|
|
<para>
|
|
Wine is configured the usual way (depending on your
|
|
build environment). The "prefix" is chosen using your
|
|
application placement policy
|
|
(<filename>/usr/</filename>,
|
|
<filename>/usr/X11R6/</filename>,
|
|
<filename>/opt/wine/</filename> or similar). The
|
|
configuration files (<filename>wine.conf</filename>,
|
|
<filename>wine.userreg</filename>,
|
|
<filename>wine.systemreg</filename>) are targeted for
|
|
<filename>/etc/wine/</filename> (rationale: FHS 2.2,
|
|
multiple readonly configuration files of a package).
|
|
</para>
|
|
<para>
|
|
Example (split this into <literal>%build</literal> and
|
|
<literal>%install</literal> section for
|
|
<command>rpm</command>):
|
|
</para>
|
|
<screen>
|
|
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/
|
|
</screen>
|
|
<para>
|
|
Here we unfortunately do need to create
|
|
<filename>wineuser.reg</filename> and
|
|
<filename>winesystem.reg</filename> from the Wine
|
|
distributed <filename>winedefault.reg</filename>. This
|
|
can be done using <command>./regedit</command> once for
|
|
one example user and then reusing his
|
|
<filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/user.reg</filename> and
|
|
<filename><link linkend=WINECONFDIR endterm=wineconfdir.id></link>/system.reg</filename> files.
|
|
<note>
|
|
<title>FIXME</title>
|
|
<para>this needs to be done better</para>
|
|
</note>
|
|
</para>
|
|
<screen>
|
|
install -m 644 wine.sytemreg $BR/etc/wine/
|
|
install -m 644 wine.userreg $BR/etc/wine/
|
|
</screen>
|
|
<para>
|
|
There are now a lot of libraries generated by the
|
|
build process, so a seperate library directory should
|
|
be used.
|
|
</para>
|
|
<screen>
|
|
install -d 755 $BR/usr/X11R6/lib/
|
|
mv $BR/
|
|
</screen>
|
|
<para>
|
|
You will need to package the files:
|
|
</para>
|
|
<screen>
|
|
$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/
|
|
</screen>
|
|
<para>
|
|
The post-install script:
|
|
</para>
|
|
<screen>
|
|
if ! grep -q /usr/X11R6/lib/wine /etc/ld.so.conf; then
|
|
echo "/usr/X11R6/lib/wine" >> /etc/ld.so.conf
|
|
fi
|
|
/sbin/ldconfig
|
|
</screen>
|
|
<para>
|
|
The post-uninstall script:
|
|
</para>
|
|
<screen>
|
|
if [ "$1" = 0 ]; then
|
|
perl -ni -e 'print unless m:/usr/X11R6/lib/wine:;' /etc/ld.so.conf
|
|
fi
|
|
/sbin/ldconfig
|
|
</screen>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Creating a good default configuration file</para>
|
|
<para>
|
|
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:
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
[Drive X]:
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
A for the floppy. Specify your distribution's
|
|
default floppy mountpoint here.
|
|
</para>
|
|
<programlisting>
|
|
Path=/auto/floppy
|
|
</programlisting>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
C for the <filename>C:\</filename> directory.
|
|
Here we use the user's home directory, for most
|
|
applications do see <filename>C:\</filename>
|
|
as root-writeable directory of every windows
|
|
installation and this basically is it in the
|
|
UNIX-user context.
|
|
</para>
|
|
<programlisting>
|
|
Path=${HOME}
|
|
</programlisting>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
R for the CD-Rom drive. Specify your
|
|
distribution's default CD-ROM drives mountpoint
|
|
here.
|
|
</para>
|
|
<programlisting>
|
|
Path=/auto/cdrom
|
|
</programlisting>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
T for temporary storage. We do use
|
|
<filename>/tmp/</filename> (rationale: between
|
|
process temporary data belongs to
|
|
<filename>/tmp/</filename>, FHS 2.0)
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
W for the original Windows installation. This
|
|
drive points to the
|
|
<filename>windows\</filename> subdirectory of
|
|
the original windows installation. This avoids
|
|
problems with renamed
|
|
<filename>windows</filename> directories (as
|
|
for instance <filename>lose95</filename>,
|
|
<filename>win</filename> or
|
|
<filename>sys\win95</filename>). During
|
|
compile/package/install we leave this to be
|
|
<filename>/</filename>, it has to be
|
|
configured after the package install.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Z for the UNIX Root directory. This avoids any
|
|
problems 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.
|
|
</para>
|
|
<programlisting>
|
|
Path=/
|
|
</programlisting>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
[wine]:
|
|
</para>
|
|
<screen>
|
|
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)
|
|
</screen>
|
|
</listitem>
|
|
<listitem>
|
|
<para>[Tweak.Layout]</para>
|
|
<screen>
|
|
WineLook=win95 (just the coolest look ;)
|
|
</screen>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Possibly modify the [spooler], [serialports] and
|
|
[parallelports] sections.
|
|
</para>
|
|
<note>
|
|
<title>FIXME</title>
|
|
<para>possibly more, including printer stuff.</para>
|
|
</note>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Add this prepared configuration file to the package.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Installing Wine for the system administrator</para>
|
|
<para>
|
|
Install the package using the usual packager
|
|
<command>rpm -i wine.rpm</command>. You may edit
|
|
<filename>/etc/wine/wine.conf</filename>, [Drive W],
|
|
to point to a possible windows installation right
|
|
after the install. That's it.
|
|
</para>
|
|
<para>
|
|
Note that on Linux you should somehow try to add the
|
|
<option>unhide</option> mount option (see <command>man
|
|
mount</command>) to the CD-ROM entry in
|
|
<filename>/etc/fstab</filename> 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 <option>unhide</option> is not
|
|
set ;-\ And of course the setup program will complain
|
|
that <filename>setup.ins</filename> 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).
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Installing Wine for the user</para>
|
|
<para>
|
|
The user will need to run a setup script before the
|
|
first invocation of Wine. This script should:
|
|
</para>
|
|
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Copy <filename>/etc/wine/wine.conf</filename> for
|
|
user modification.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Allow specification of the original windows
|
|
installation to use (which modifies the copied
|
|
<filename>wine.conf</filename> file).
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Create the windows directory structure
|
|
(<filename>c:\windows</filename>,
|
|
<filename>c:\windows\system</filename>,
|
|
<filename>c:\windows\Start Menu\Programs</filename>,
|
|
<filename>c:\Program Files</filename>,
|
|
<filename>c:\Desktop</filename>, etc.)
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Symlink all <filename>.dll</filename> and
|
|
<filename>.exe</filename> files from the original
|
|
windows installation to the
|
|
<filename>windows</filename> directory. Why? Some
|
|
programs reference "%windowsdir%/file.dll" or
|
|
"%systemdir%/file.dll" directly and fail if they
|
|
are not present.
|
|
</para>
|
|
<para>
|
|
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
|
|
<filename>windows/</filename> subdirectory).
|
|
</para>
|
|
<note>
|
|
<title>FIXME</title>
|
|
<para>Not sure this is needed for all files.</para>
|
|
</note>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
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).
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
|
|
</listitem>
|
|
</orderedlist>
|
|
|
|
|
|
<sect2 id=sample><title>Sample RedHat 8.0 .spec file for review purposes</title>
|
|
|
|
|
|
<programlisting>
|
|
|
|
%define DATE 20030115
|
|
Summary: A Windows 16/32 bit emulator.
|
|
Name: wine
|
|
Version: %{DATE}
|
|
Release: 1rh8winehq
|
|
Group: Applications/Emulators
|
|
License: LGPL
|
|
URL: http://www.winehq.com/
|
|
Source: ftp://metalab.unc.edu/pub/Linux/ALPHA/wine/development/Wine-%{version}.tar.bz2
|
|
Source1: wine.init
|
|
Patch: wine-%{version}-initial.patch
|
|
Patch1: wine-%{version}-kde2.patch
|
|
Patch2: wine-%{version}-winelauncher.patch
|
|
Patch3: wine-%{version}-defaultcfg.patch
|
|
Patch4: wine-%{version}-stabs+.patch
|
|
Buildroot: %{_tmppath}/%{name}-root
|
|
ExclusiveArch: %{ix86}
|
|
Prereq: shadow-utils
|
|
Conflicts: kdebase < 2.0
|
|
Requires: cups-libs >= 1.1.12
|
|
BuildRequires: docbook-utils, cups-devel >= 1.1.12, autoconf253, perl
|
|
|
|
%description
|
|
While Wine is usually thought of as a Windows(TM) emulator, the Wine
|
|
developers would prefer that users thought of Wine as a Windows
|
|
compatibility layer for UNIX. This package includes a program loader,
|
|
which allows unmodified Windows 3.1/95/NT binaries to run under Intel
|
|
Unixes. Wine does not require MS Windows, but it can use native system
|
|
.dll files if they are available.
|
|
|
|
%package devel
|
|
Summary: Wine development environment.
|
|
Group: System Environment/Libraries
|
|
Requires: wine = %{version}
|
|
|
|
%description devel
|
|
Header and include files for developing applications with the Wine
|
|
Windows(TM) emulation libraries.
|
|
|
|
%prep
|
|
%setup -q -n wine-%{version}
|
|
find . -type d -name CVS |xargs rm -rf
|
|
%patch -p1 -b .initial
|
|
%patch1 -p1 -b .kde2
|
|
%patch2 -p1 -b .wl
|
|
%patch3 -p1 -b .defcfg
|
|
%patch4 -p1 -b .stabs+
|
|
|
|
%build
|
|
export CFLAGS="$RPM_OPT_FLAGS"
|
|
autoconf || autoconf-2.53
|
|
%configure \
|
|
--with-x \
|
|
--libdir=%{_libdir}/wine \
|
|
--includedir=%{_includedir}/wine \
|
|
--sysconfdir=%{_sysconfdir}/wine
|
|
|
|
make depend
|
|
make
|
|
make -C documentation doc
|
|
|
|
%install
|
|
rm -rf $RPM_BUILD_ROOT
|
|
|
|
%makeinstall \
|
|
includedir=%{?buildroot:%{buildroot}}%{_includedir}/wine \
|
|
libdir=%{?buildroot:%{buildroot}}%{_libdir}/wine \
|
|
sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir}/wine \
|
|
dlldir=%{?buildroot:%{buildroot}}%{_libdir}/wine/wine \
|
|
LDCONFIG=/bin/true
|
|
|
|
for i in system "Start Menu/Programs/Startup" Profiles/Administrator Fonts \
|
|
Desktop Favorites NetHood Recent SendTo ShellNew; do
|
|
mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/windows/$i"
|
|
done
|
|
mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/My Documents"
|
|
mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/Program Files/Common Files"
|
|
|
|
# Take care of wine and windows configuration files...
|
|
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/wine
|
|
mv documentation/samples/config documentation/samples/config.orig
|
|
sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"ttydrv\"/" documentation/samples/config.orig |\
|
|
sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"$RPM_BUILD_ROOT%{_datadir}/wine-c\"|" |\
|
|
sed "s|\"Path\" = \"\${HOME}\"$|\"Path\" = \"%{_builddir}/%{buildsubdir}\"|" -> documentation/samples/config
|
|
WINEPREFIX=%{_builddir}/%{buildsubdir}/documentation/samples programs/regedit/regedit winedefault.reg > /dev/null
|
|
# Wait until wineserver finishes and closes those files
|
|
sleep 5
|
|
install -c -m 0644 documentation/samples/system.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/system.reg
|
|
install -c -m 0644 documentation/samples/user.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/user.reg
|
|
install -c -m 0644 documentation/samples/userdef.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/userdef.reg
|
|
rm -f documentation/samples/system.reg
|
|
rm -f documentation/samples/user.reg
|
|
rm -f documentation/samples/userdef.reg
|
|
|
|
sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"%{_datadir}/wine-c\"|" documentation/samples/config.orig > documentation/samples/config.rh
|
|
install -c -m 0644 documentation/samples/config.rh $RPM_BUILD_ROOT%{_sysconfdir}/wine/wine.conf
|
|
rm -f documentation/samples/config
|
|
rm -f documentation/samples/config.rh
|
|
mv documentation/samples/config.orig documentation/samples/config
|
|
|
|
# Install link to windows applications replacements
|
|
ln -sf %{_libdir}/wine/notepad.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/notepad.exe
|
|
ln -sf %{_libdir}/wine/regedit.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/regedit.exe
|
|
ln -sf %{_libdir}/wine/rundll32.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/rundll32.exe
|
|
ln -sf %{_libdir}/wine/wcmd.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/cmd.exe
|
|
ln -sf %{_libdir}/wine/control.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/control.exe
|
|
ln -sf %{_libdir}/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/help.exe
|
|
ln -sf %{_libdir}/wine/notepad.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/notepad.exe
|
|
ln -sf %{_libdir}/wine/progman.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/progman.exe
|
|
ln -sf %{_libdir}/wine/regsvr32.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/regsvr32.exe
|
|
ln -sf %{_libdir}/wine/winemine.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/winmine.exe
|
|
ln -sf %{_libdir}/wine/winver.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/winver.exe
|
|
ln -sf %{_libdir}/wine/uninstaller.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/uninstaller.exe
|
|
ln -sf %{_libdir}/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/winhelp.exe
|
|
ln -sf %{_libdir}/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/winhlp32.exe
|
|
|
|
for i in shell.dll shell32.dll winsock.dll wnsock32.dll; do
|
|
touch $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/$i
|
|
done
|
|
touch $RPM_BUILD_ROOT%{_datadir}/wine-c/autoexec.bat
|
|
touch $RPM_BUILD_ROOT%{_datadir}/wine-c/config.sys
|
|
touch $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/win.ini
|
|
install -c -m 0644 documentation/samples/system.ini $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system.ini
|
|
|
|
cat >RedHat <<EOF
|
|
Wine directory structure used in Red Hat Linux:
|
|
===============================================
|
|
|
|
%{_datadir}/wine-c is the root directory (aka C: drive) wine looks for
|
|
by default. It contains (empty) C:\windows and C:\windows\system
|
|
directories, needed to operate Wine without an existing Windows installation.
|
|
|
|
If you want to use Wine with an existing Windows installation that is mounted,
|
|
for example, in /mnt/windows-c, edit /etc/wine.conf to say
|
|
|
|
[Drive C]
|
|
Path=/mnt/windows-c
|
|
Type=hd
|
|
Label=Whatever
|
|
Filesystem=win95
|
|
|
|
instead of the defaults set by installation.
|
|
|
|
If you do this, you can safely remove %{_datadir}/wine-c.
|
|
(Alternatively, just mount your Windows partition to %{_datadir}/wine-c.)
|
|
EOF
|
|
|
|
# Allow users to launch Windows programs by just clicking on the .exe file...
|
|
mkdir -p $RPM_BUILD_ROOT%{_initrddir}
|
|
install -c -m 755 %SOURCE1 $RPM_BUILD_ROOT%{_initrddir}/wine
|
|
|
|
%clean
|
|
rm -rf $RPM_BUILD_ROOT
|
|
|
|
%pre
|
|
/usr/sbin/groupadd -g 66 -r wine &>/dev/null || :
|
|
|
|
%post
|
|
if ! grep -q "^/usr/lib/wine$" /etc/ld.so.conf; then
|
|
echo "/usr/lib/wine" >>/etc/ld.so.conf
|
|
fi
|
|
/sbin/ldconfig
|
|
/sbin/chkconfig --add wine
|
|
/sbin/chkconfig --level 2345 wine on
|
|
/sbin/service wine start &>/dev/null || :
|
|
|
|
%preun
|
|
if test "$1" = "0"; then
|
|
/sbin/chkconfig --del wine
|
|
fi
|
|
|
|
%postun
|
|
if test "$1" = "0"; then
|
|
perl -pi -e "s,^/usr/lib/wine$,,g" /etc/ld.so.conf
|
|
/usr/sbin/groupdel wine &>/dev/null || :
|
|
fi
|
|
/sbin/ldconfig
|
|
|
|
%files
|
|
%defattr(-,root,root)
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/system
|
|
%attr(0775, root, wine) %dir "%{_datadir}/wine-c/windows/Start Menu"
|
|
%attr(0775, root, wine) %dir "%{_datadir}/wine-c/windows/Start Menu/Programs"
|
|
%attr(0775, root, wine) %dir "%{_datadir}/wine-c/windows/Start Menu/Programs/Startup"
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/Profiles
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/Profiles/Administrator
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/Fonts
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/Desktop
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/Favorites
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/NetHood
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/Recent
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/SendTo
|
|
%attr(0775, root, wine) %dir %{_datadir}/wine-c/windows/ShellNew
|
|
%attr(0775, root, wine) %dir "%{_datadir}/wine-c/My Documents"
|
|
%attr(0775, root, wine) %dir "%{_datadir}/wine-c/Program Files"
|
|
%attr(0775, root, wine) %dir "%{_datadir}/wine-c/Program Files/Common Files"
|
|
%{_libdir}/wine
|
|
%{_bindir}/*
|
|
%{_mandir}/man?/*
|
|
%{_datadir}/wine-c/windows/system/*.dll
|
|
%{_datadir}/wine-c/windows/*.exe
|
|
%config %{_datadir}/wine-c/autoexec.bat
|
|
%config %{_datadir}/wine-c/config.sys
|
|
%attr(0664, root, wine) %config %{_datadir}/wine-c/windows/win.ini
|
|
%attr(0664, root, wine) %config %{_datadir}/wine-c/windows/system.ini
|
|
%config %{_sysconfdir}/wine/*
|
|
%config %{_initrddir}/*
|
|
%doc ANNOUNCE BUGS COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD README VERSION
|
|
%doc AUTHORS RedHat
|
|
%doc documentation/ChangeLog.OLD documentation/HOWTO-winelib documentation/README.fr
|
|
%doc documentation/wine-devel documentation/wine-user documentation/winelib-user documentation/samples
|
|
|
|
%files devel
|
|
%defattr(-,root,root)
|
|
%{_includedir}/*
|
|
|
|
|
|
</programlisting>
|
|
|
|
</sect2>
|
|
</sect1>
|
|
|
|
</chapter>
|
|
|
|
<chapter id="pkg-todo"><Title>Work to be done</title>
|
|
|
|
<para>
|
|
In preparing this document, it became clear that there were
|
|
still a range of action items to be done in Wine
|
|
that would improve this packaging process.
|
|
For lack of a better place, I record them here.
|
|
<emphasis>This list is almost certain to be obsolete;
|
|
check bugzilla for a better list.</emphasis>
|
|
</para>
|
|
|
|
<orderedlist>
|
|
<listitem>
|
|
<para>
|
|
Remove duplication of code between winesetup and
|
|
wineconf/wineinstall.
|
|
</para>
|
|
<para>
|
|
Currently, winesetup duplicates all of the code contained
|
|
in wineconf.
|
|
</para>
|
|
<para>
|
|
Instead, wineconf should be improved to generate
|
|
the new style config file, and then winesetup should
|
|
rely on wineconf to generate the default
|
|
configuration file.
|
|
</para>
|
|
<para>
|
|
Similarly, there is functionality such as creating
|
|
the default registry files that is now done by
|
|
both winesetup and wineinstall.
|
|
</para>
|
|
<para>
|
|
At this time, it seems like the right thing to do
|
|
is to break up or parameterize wineinstall, so that
|
|
it can be used for single function actions,
|
|
and then have winesetup call those functions.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Enhance winesetup to support W: drive generation.
|
|
</para>
|
|
<para>
|
|
The best practices convention now seems to be
|
|
to generate a set of drives from M: through W:.
|
|
At this point, winesetup does not generate
|
|
a default wine config file that follows
|
|
these conventions. It should.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Enhance Wine to allow more dynamic switching
|
|
between the use of a real Windows partition
|
|
and an empty one.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Write a winelauncher utility application.
|
|
</para>
|
|
<para>
|
|
Currently, Wine really requires a user to launch it
|
|
from a command line, so that the user can look for
|
|
error messages and warnings. However, eventually, we will
|
|
want users to be able to launch Wine from a more
|
|
friendly GUI launcher. The launcher should have the
|
|
ability to allow the end user to turn on debugging
|
|
messages and capture those traces for bug reporting
|
|
purposes. Also, if we make it possible to
|
|
switch between use of a Windows partition or not
|
|
automatically, that option should be controlled here.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Get Marcus's winesetup facilities into CVS
|
|
</para>
|
|
<para>
|
|
Along the lines of the changes to winesetup,
|
|
and the consolidation of wineconf and wineinstall,
|
|
we should extract the good stuff from Marcus's
|
|
winesetup script, and get it into CVS.
|
|
Again, perhaps we should have a set of scripts
|
|
that perform discrete functions, or maybe
|
|
one script with parameters.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Finish this document
|
|
</para>
|
|
<para>
|
|
This document is pretty rough itself. Many hard
|
|
things aren't addressed, and lots of stuff was missed.
|
|
</para>
|
|
</listitem>
|
|
</orderedlist>
|
|
</chapter>
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-parent-document:("wine-doc.sgml" "book" "part" "chapter" "")
|
|
End:
|
|
-->
|