| <!-- 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> |
| Updated by &name-jeremy-white; <email>&email-jeremy-white;</email> |
| Updated by &name-andreas-mohr; <email>&email-andreas-mohr;</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 November 14, 2001.</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. |
| 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.1</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 /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. Further, |
| no default is currently provided by Wine. 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 regapi tool |
| against the 'winedefault.reg' file to generate |
| a default registry. |
| </para> |
| <para> |
| 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>winebootup</filename></term> |
| <listitem> |
| <para> |
| Winelib app to be found in programs/. |
| It'll be called by the winelauncher wine wrapper startup |
| script for every first-time wine invocation. |
| 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. |
| </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 is NOT necessarily current ! </para> |
| |
| <simplelist columns=5> |
| <member>advapi32.dll.so</> |
| <member>avicap32.dll.so</> |
| <member>avifil32.dll.so</> |
| <member>avifile.dll.so</> |
| <member>comctl32.dll.so</> |
| <member>comdlg32.dll.so</> |
| <member>comm.dll.so</> |
| <member>commdlg.dll.so</> |
| <member>compobj.dll.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>dispdib.dll.so</> |
| <member>display.dll.so</> |
| <member>dplay.dll.so</> |
| <member>dplayx.dll.so</> |
| <member>dsound.dll.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>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>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>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>psapi.dll.so</> |
| <member>qcap.dll.so</> |
| <member>quartz.dll.so</> |
| <member>rasapi16.dll.so</> |
| <member>rasapi32.dll.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>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>winearts.drv.so</> |
| <member>winedos.dll.so</> |
| <member>wineoss.drv.so</> |
| <member>wineps.dll.so</> |
| <member>wineps16.dll.so</> |
| <member>wing.dll.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.man</> |
| <member>wine.conf.man</> |
| <member>wmc.man</> |
| <member>wrc.man</> |
| </simplelist> |
| |
| </listitem> |
| |
| |
| <listitem id=includefiles> |
| <para> Include Files</para> |
| <para> This list is NOT necessarily current ! </para> |
| <simplelist columns=5> |
| |
| <member>basetsd.h</> |
| <member>cderr.h</> |
| <member>cguid.h</> |
| <member>commctrl.h</> |
| <member>commdlg.h</> |
| <member>compobj.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>docobj.h</> |
| <member>dplay.h</> |
| <member>dplobby.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>mapidefs.h</> |
| <member>mcx.h</> |
| <member>mmreg.h</> |
| <member>mmsystem.h</> |
| <member>msacm.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>servprov.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>ver.h</> |
| <member>vfw.h</> |
| <member>winbase.h</> |
| <member>wincon.h</> |
| <member>wincrypt.h</> |
| <member>windef.h</> |
| <member>windows.h</> |
| <member>windowsx.h</> |
| <member>wine/exception.h</> |
| <member>wine/icmpapi.h</> |
| <member>wine/ipexport.h</> |
| <member>wine/obj_base.h</> |
| <member>wine/obj_cache.h</> |
| <member>wine/obj_channel.h</> |
| <member>wine/obj_clientserver.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_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_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/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>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>wtypes.h</> |
| <member>zmouse.h</> |
| </simplelist> |
| |
| </listitem> |
| |
| <listitem id=docfiles> |
| <para> |
| Documentation files. |
| </para> |
| <para> |
| At the time of this writing, I do not have a |
| definitive list of documentation files to |
| be installed. However, they do include |
| the HTML files generated from the SGML in the Wine CVS tree. |
| </para> |
| </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. |
| </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>/bin, |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| all <link linkend=libfiles>library files</link> go into |
| <link linkend=PREFIX endterm=prefix.id></link>/lib, |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| all <link linkend=includefiles>include files</link> go into |
| <link linkend=PREFIX endterm=prefix.id></link>/include, |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| all <link linkend=docfiles>documentation files</link> go into |
| <link linkend=PREFIX endterm=prefix.id></link>/doc/wine, |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| and <link linkend=manfiles>man pages</link> go into |
| <link linkend=PREFIX endterm=prefix.id></link>/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.1 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> |
| The next hard question is what the Wine config should look like. |
| The current best practices seems to involve using drives from M to Z. |
| </para> |
| <caution><para>This isn't done yet! Fix it, Jer!</para></caution> |
| </sect1> |
| |
| |
| </chapter> |
| |
| |
| |
| |
| <chapter id="pkg-implementation"> <title>Implementation</title> |
| |
| <sect1 id="pkg-openlinux"><title>OpenLinux 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.0, |
| 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>./regapi</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 <filename>wine.ini</filename> for OpenLinux 2.x (outdated, for review purposes only !):</title> |
| |
| <programlisting> |
| |
| |
| ;; |
| ;; 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) |
| ;; |
| |
| ; |
| ; |
| ; Floppy 'A' and 'B' |
| ; |
| ; OpenLinux uses an automounter under /auto/, so we use that too. |
| ; |
| [Drive A] |
| Path=/auto/floppy/ |
| Type=floppy |
| Label=Floppy |
| Serial=87654321 |
| Device=/dev/fd0 |
| Filesystem=win95 |
| |
| ; |
| ; Comment in ONLY if you have a second floppy or the automounter hangs |
| ; for 5 minutes. |
| ; |
| ;[Drive B] |
| ;Path=/auto/floppy2/ |
| ;Type=floppy |
| ;Label=Floppy |
| ;Serial=87654321 |
| ;Device=/dev/fd1 |
| ;Filesystem=win95 |
| |
| |
| ; |
| ; Drive 'C' links to the user's homedirectory. |
| ; |
| ; This must point to a writeable directory structure (not your readonly |
| ; mounted DOS partitions!) since programs want to dump stuff into |
| ; "Program Files/" "Programme/", "windows/", "windows/system/" etc. |
| ; |
| ; The basic structure is set up using the config script. |
| ; |
| [Drive C] |
| Path=${HOME} |
| Type=hd |
| Label=MS-DOS |
| Filesystem=win95 |
| |
| ; |
| ; /tmp/ directory |
| ; |
| ; The temp drive (and directory) points to /tmp/. Windows programs fill it |
| ; with junk, so it is approbiate. |
| ; |
| [Drive T] |
| Path=/tmp |
| Type=hd |
| Label=Tmp Drive |
| Filesystem=win95 |
| |
| ; |
| ; 'U'ser homedirectory |
| ; |
| ; Just in case you want C:\ elsewhere. |
| ; |
| [Drive U] |
| Path=${HOME} |
| Type=hd |
| Label=Home |
| Filesystem=win95 |
| |
| ; |
| ; CD-'R'OM drive (automounted) |
| ; |
| ; The default cdrom drive. |
| ; |
| ; If an application (or game) wants a specific CD-ROM you might have to |
| ; temporary change the Label to the one of the CD itself. |
| ; |
| ; How to read them is described in /usr/doc/wine-cvs-xxxxx/cdrom-labels. |
| ; |
| [Drive R] |
| Path=/auto/cdrom |
| Type=cdrom |
| Label=CD-Rom |
| Filesystem=win95 |
| |
| ; |
| ; The drive where the old windows installation resides (it points to the |
| ; windows/ subdirectory). |
| ; |
| ; The Path is modified by the winesetup script. |
| ; |
| [Drive W] |
| Path=/ |
| Type=network |
| Label=Windows |
| Filesystem=win95 |
| ; |
| ; The UNIX Root directory, so all other programs and directories are reachable. |
| ; |
| ; type network is used to tell programs to not write here. |
| ; |
| [Drive Z] |
| Path=/ |
| Type=network |
| Label=ROOT |
| Filesystem=win95 |
| |
| ; |
| ; Standard Windows path entries. WINE will not work if they are incorrect. |
| ; |
| [wine] |
| ; |
| ; The windows/ directory. It must be writeable, for programs write into it. |
| ; |
| Windows=c:\windows |
| ; |
| ; The windows/system/ directory. It must be writeable, for especially setup |
| ; programs install dlls in there. |
| ; |
| System=c:\windows\system |
| ; |
| ; The temp directory. Should be cleaned regulary, since install programs leave |
| ; junk without end in there. |
| ; |
| Temp=t:\ |
| ; |
| ; The dll search path. It should contain at least: |
| ; - the windows and the windows/system directory of the user. |
| ; - the global windows and windows/system directory (from a possible readonly |
| ; windows installation either on msdos filesystems or somewhere in the UNIX |
| ; directory tree) |
| ; - any other windows style directories you want to add. |
| ; |
| Path=c:\windows;c:\windows\system;c:\windows\system32;t:\;w:\;w:\system;w:\system32 |
| ; |
| ; Outdated and no longer used. (but needs to be present). |
| ; |
| SymbolTableFile=./wine.sym |
| |
| # <wineconf> |
| |
| ; |
| ; Dll loadorder defaults. No need to modify. |
| ; |
| [DllDefaults] |
| EXTRA_LD_LIBRARY_PATH=${HOME}/wine/cvs/lib |
| DefaultLoadOrder = native, elfdll, so, builtin |
| |
| ; |
| ; What 32/16 dlls belong to each other (context wise). No need to modify. |
| ; |
| [DllPairs] |
| kernel = kernel32 |
| gdi = gdi32 |
| user = user32 |
| commdlg = comdlg32 |
| commctrl= comctl32 |
| ver = version |
| shell = shell32 |
| lzexpand= lz32 |
| mmsystem= winmm |
| msvideo = msvfw32 |
| winsock = wsock32 |
| |
| ; |
| ; What type of dll to use in their respective loadorder. |
| ; |
| [DllOverrides] |
| kernel32, gdi32, user32 = builtin |
| kernel, gdi, user = builtin |
| toolhelp = builtin |
| comdlg32, commdlg = elfdll, builtin, native |
| version, ver = elfdll, builtin, native |
| shell32, shell = builtin, native |
| lz32, lzexpand = builtin, native |
| commctrl, comctl32 = builtin, native |
| wsock32, winsock = builtin |
| advapi32, crtdll, ntdll = builtin, native |
| mpr, winspool = builtin, native |
| ddraw, dinput, dsound = builtin, native |
| winmm, mmsystem = builtin |
| msvideo, msvfw32 = builtin, native |
| mcicda.drv, mciseq.drv = builtin, native |
| mciwave.drv = builtin, native |
| mciavi.drv, mcianim.drv = native, builtin |
| w32skrnl = builtin |
| wnaspi32, wow32 = builtin |
| system, display, wprocs = builtin |
| wineps = builtin |
| |
| ; |
| ; Options section. Does not need to be edited. |
| ; |
| [options] |
| ; allocate how much system colors on startup. No need to modify. |
| AllocSystemColors=100 |
| |
| ;; |
| ; Font specification. You usually do not need to edit this section. |
| ; |
| ; Read documentation/fonts before adding aliases |
| ; |
| [fonts] |
| ; The resolution defines what fonts to use (usually either 75 or 100 dpi fonts, |
| ; or nearest match). |
| Resolution = 96 |
| ; Default font |
| Default = -adobe-times- |
| |
| ; |
| ; serial ports used by "COM1" "COM2" "COM3" "COM4". Useful for applications |
| ; that try to access serial ports. |
| ; |
| [serialports] |
| Com1=/dev/ttyS0 |
| Com2=/dev/ttyS1 |
| Com3=/dev/modem,38400 |
| Com4=/dev/modem |
| |
| ; |
| ; parallel port(s) used by "LPT1" etc. Useful for applications that try to |
| ; access these ports. |
| ; |
| [parallelports] |
| Lpt1=/dev/lp0 |
| |
| ; |
| ; What spooling program to use on printing. |
| ; Use "|program" or "filename", where the output will be dumped into. |
| ; |
| [spooler] |
| LPT1:=|lpr |
| LPT2:=|gs -sDEVICE=bj200 -sOutputFile=/tmp/fred -q - |
| LPT3:=/dev/lp3 |
| |
| ; |
| ; Allow port access to WINE started by the root user. Useful for some |
| ; supported devices, but it can make the system unstable. |
| ; Read /usr/doc/wine-cvs-xxxxx/ioport-trace-hints. |
| ; |
| [ports] |
| ;read=0x779,0x379,0x280-0x2a0 |
| ;write=0x779,0x379,0x280-0x2a0 |
| |
| ; debugging, not need to be modified. |
| [spy] |
| Exclude=WM_SIZE;WM_TIMER; |
| |
| ; |
| ; What names for the registry datafiles, no need to modify. |
| ; |
| [Registry] |
| ; Paths must be given in /dir/dir/file.reg format. |
| ; Wine will not understand dos file names here... |
| ;UserFileName=xxx ; alternate registry file name (user.reg) |
| ;LocalMachineFileName=xxx ; (system.reg) |
| |
| ; |
| ; Layout/Look modifications. Here you can switch with a single line between |
| ; windows 3.1 and windows 95 style. |
| ; This does not change WINE behaviour or reported versions, just the look! |
| ; |
| [Tweak.Layout] |
| ;; WineLook=xxx (supported styles are 'Win31'(default), 'Win95', 'Win98') |
| WineLook=Win95 |
| |
| ; |
| ; What programs to start on WINE startup. (you should probably leave it empty) |
| ; |
| [programs] |
| Default= |
| Startup= |
| |
| ; defunct section. |
| [Console] |
| ;XtermProg=nxterm |
| ;InitialRows=25 |
| ;InitialColumns=80 |
| ;TerminalType=nxterm |
| |
| # </wineconf> |
| </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: |
| --> |