| <!-- 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>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 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: | |
| --> |