c4a53526424ea56ee46b3b0a42a08de5b615d246
[ghc-hetmet.git] / ghc / docs / users_guide / packages.xml
1 <?xml version="1.0" encoding="iso-8859-1"?>
2   <sect1 id="packages">
3  <title>
4 Packages
5  </title>
6   <indexterm><primary>packages</primary></indexterm>
7   
8   <para>A package is a library of Haskell modules known to the compiler.  GHC
9     comes with several packages: see the accompanying 
10     <ulink url="../libraries/index.html">library documentation</ulink>.</para>
11
12   <para>Using a package couldn't be simpler: if you're using
13     <option>--make</option> or GHCi, then most of the installed packages will be
14     automatically available to your program without any further options.  The
15     exceptions to this rule are covered below in <xref
16       linkend="using-packages" />.</para>
17
18   <para>Building your own packages is also quite straightforward: we provide
19     the <ulink url="http://www.haskell.org/cabal/">Cabal</ulink> infrastructure which
20     automates the process of configuring, building, installing and distributing
21     a package.  All you need to do is write a simple configuration file, put a
22     few files in the right places, and you have a package.  See the
23     <ulink url="../Cabal/index.html">Cabal documentation</ulink>
24     for details, and also the Cabal libraries (<ulink url="../libraries/Cabal/Distribution.Simple.html">Distribution.Simple</ulink>,
25     for example).</para>
26
27   <sect2 id="using-packages">
28   <title>Using Packages
29   </title>
30     <indexterm><primary>packages</primary>
31       <secondary>using</secondary></indexterm>
32     
33     <para>To see which packages are installed, use the
34       <literal>ghc-pkg</literal> command:</para>
35
36 <screen>
37 $ ghc-pkg list
38 /usr/lib/ghc-6.4/package.conf:
39     base-1.0, haskell98-1.0, template-haskell-1.0, mtl-1.0, unix-1.0,
40     Cabal-1.0, haskell-src-1.0, parsec-1.0, network-1.0,
41     QuickCheck-1.0, HUnit-1.1, fgl-1.0, X11-1.1, HGL-3.1, OpenGL-2.0,
42     GLUT-2.0, stm-1.0, readline-1.0, (lang-1.0), (concurrent-1.0),
43     (posix-1.0), (util-1.0), (data-1.0), (text-1.0), (net-1.0),
44     (hssource-1.0), rts-1.0
45       </screen>
46
47     <para>Packages are either exposed or hidden.  Only
48       modules from exposed packages may be imported by your Haskell code; if
49       you try to import a module from a hidden package, GHC will emit an error
50       message.</para>
51
52     <para>Each package has an exposed flag, which says whether it is exposed by
53       default or not.  Packages hidden by default are listed in
54       parentheses (eg. <literal>(lang-1.0)</literal>) in the output from
55       <literal>ghc-pkg list</literal>.  To expose a package which is hidden by
56       default, use the <option>-package</option>
57       flag (see below).</para>
58
59    <para>To see which modules are exposed by a package:</para>
60
61 <screen>
62 $ ghc-pkg field network exposed-modules
63 exposed-modules: Network.BSD,
64                  Network.CGI,
65                  Network.Socket,
66                  Network.URI,
67                  Network
68 </screen>
69
70     <para>In general, packages containing hierarchical modules are usually
71       exposed by default.  However, it is possible for two packages to contain
72       the same module: in this case, only one of the packages should be
73       exposed.  It is an error to import a module that belongs to more than one
74       exposed package.</para>
75
76     <para>The GHC command line options that control packages are:</para>
77
78     <variablelist>
79       <varlistentry>
80         <term>
81           <option>-package <replaceable>P</replaceable></option>
82           <indexterm><primary><option>-package</option></primary></indexterm>
83         </term>
84         <listitem>
85           <para>This option causes package <replaceable>P</replaceable> to be
86             exposed.  The package <replaceable>P</replaceable> can be specified
87             in full with its version number
88             (e.g. <literal>network-1.0</literal>) or the version number can be
89             omitted if there is only one version of the package
90             installed.</para>
91
92           <para>If there are multiple versions of <replaceable>P</replaceable>
93             installed, then all other versions will become hidden.</para>
94
95           <para>The <option>-package <replaceable>P</replaceable></option>
96             option also causes package <replaceable>P</replaceable> to be
97             linked into the resulting executable.  In
98             <option>&ndash;&ndash;make</option> mode and GHCi, the compiler 
99             normally determines which packages are required by the current
100             Haskell modules, and links only those.  In batch mode however, the
101             dependency information isn't available, and explicit
102             <option>-package</option> options must be given when linking.</para>
103
104           <para>For example, to link a program consisting of objects
105             <filename>Foo.o</filename> and <filename>Main.o</filename>, where
106             we made use of the <literal>network</literal> package, we need to
107             give GHC the <literal>-package</literal> flag thus:  
108
109 <screen>$ ghc -o myprog Foo.o Main.o -package network</screen>
110
111             The same flag is necessary even if we compiled the modules from
112             source, because GHC still reckons it's in batch mode: 
113
114 <screen>$ ghc -o myprog Foo.hs Main.hs -package network</screen>
115
116             In <literal>--make</literal> and <literal>--interactive</literal>
117             modes (<xref linkend="modes" />), however, GHC figures out the
118             packages required for linking without further assistance.</para>
119
120           <para>The one other time you might need to use
121             <option>-package</option> to force linking a package is when the
122             package does not contain any Haskell modules (it might contain a C
123             library only, for example).  In that case, GHC
124             will never discover a dependency on it, so it has to be mentioned
125             explicitly.</para>
126         </listitem>
127       </varlistentry>
128       
129       <varlistentry>
130         <term><option>-hide-all-packages</option>
131         <indexterm><primary><option>-hide-package</option></primary>
132           </indexterm></term>
133         <listitem>
134           <para>Ignore the exposed flag on installed packages, and hide them
135             all by default.  If you use
136             this flag, then any packages you require (including
137             <literal>base</literal>) need to be explicitly exposed using
138             <option>-package</option> options.</para>
139
140           <para>This is a good way to insulate your program from differences
141             in the globally exposed packages, and being explicit about package
142             dependencies is a Good Thing.</para>
143         </listitem>
144       </varlistentry>
145
146       <varlistentry>
147         <term><option>-hide-package</option> <replaceable>P</replaceable>
148         <indexterm><primary><option>-hide-package</option></primary>
149           </indexterm></term>
150         <listitem>
151           <para>This option does the opposite of <option>-package</option>: it
152             causes the specified package to be <firstterm>hidden</firstterm>,
153             which means that none of its modules will be available for import
154             by Haskell <literal>import</literal> directives.</para>
155
156           <para>Note that the package might still end up being linked into the
157             final program, if it is a dependency (direct or indirect) of
158             another exposed package.</para>
159         </listitem>
160       </varlistentry>
161
162       <varlistentry>
163         <term><option>-ignore-package</option> <replaceable>P</replaceable>
164         <indexterm><primary><option>-ignore-package</option></primary>
165           </indexterm></term>
166         <listitem>
167           <para>Causes the compiler to behave as if package
168             <replaceable>P</replaceable>, and any packages that depend on
169             <literal>P</literal>, are not installed at all.</para>
170
171           <para>Saying <literal>-ignore-package P</literal> is the same as
172             giving <literal>-hide-package</literal> flags for
173             <literal>P</literal> and all the packages that depend on
174             <literal>P</literal>.  Sometimes we don't know ahead of time which
175             packages will be installed that depend on <literal>P</literal>,
176             which is when the <literal>-ignore-package</literal> flag can be
177             useful.</para>
178         </listitem>
179       </varlistentry>
180     </variablelist>
181   </sect2>
182
183   <sect2 id="package-overlaps">
184     <title>The module overlap restriction</title>
185
186     <para>The module names in a Haskell program must be distinct.
187       This doesn't sound like a severe restriction, but in a Haskell program
188       using multiple packages with interdependencies, difficulties can start to
189       arise.  You should be aware of what the module overlap
190       restriction means, and how to avoid it.</para>
191
192     <para>GHC knows which packages are <emphasis>in use</emphasis> by your
193       program: a package is in use if you imported something from it, or if it
194       is a dependency of some other package in use.  There must be no conflicts
195       between the packages in use; a conflict is when two packages contain
196       a module with the same name.  If
197       GHC detects a conflict, it will issue a message stating which packages
198       are in conflict, and which modules are overlapping.</para>
199
200     <para>For example, a conflict might arise if you use two packages, say P
201       and Q, which respectively depend on two different versions of another
202       package, say <literal>R-1.0</literal> and <literal>R-2.0</literal>.  The
203       two versions of <literal>R</literal> are likely to contain at least some
204       of the same modules, so this situation would be a conflict.</para>
205   </sect2>
206
207   <sect2 id="package-databases">
208     <title>Package Databases</title>
209       
210     <para>A package database is a file, normally called
211       <literal>package.conf</literal> which contains descriptions of installed
212       packages.  GHC usually knows about two package databases:</para>
213
214     <itemizedlist>
215       <listitem>
216         <para>The global package database, which comes with your GHC
217           installation.</para>
218       </listitem>
219       <listitem>
220         <para>A package database private to each user.  On Unix
221           systems this will be
222           <filename>$HOME/.ghc/<replaceable>arch</replaceable>-<replaceable>os</replaceable>-<replaceable>version</replaceable>/package.conf</filename>, and on
223           Windows it will be something like
224           <filename>C:\Documents&nbsp;And&nbsp;Settings\<replaceable>user</replaceable>\ghc</filename>.
225           The <literal>ghc-pkg</literal> tool knows where this file should be
226           located, and will create it if it doesn't exist (see <xref
227             linkend="package-management" />).</para>
228       </listitem>
229     </itemizedlist>
230
231     <para>When GHC starts up, it reads the contents of these two package
232       databases, and builds up a list of the packages it knows about.  You can
233       see GHC's package table by running GHC with the <option>-v</option>
234       flag.</para> 
235
236     <para>Package databases may overlap: for example, packages in the user
237       database will override those of the same name in the global
238       database.</para> 
239
240     <para>You can control the loading of package databses using the following
241       GHC options:</para> 
242
243     <variablelist>
244       <varlistentry>
245         <term>
246           <option>-package-conf <replaceable>file</replaceable></option>
247           <indexterm><primary><option>-package-conf</option></primary></indexterm>
248         </term>
249         <listitem>
250           <para>Read in the package configuration file
251             <replaceable>file</replaceable> in addition to the system
252             default file and the user's local file.  Packages in additional
253             files read this way will override those in the global and user
254             databases.</para>
255         </listitem>
256       </varlistentry>
257
258       <varlistentry>
259         <term><option>-no-user-package-conf</option>
260           <indexterm><primary><option>-no-user-package-conf</option></primary>
261           </indexterm>
262         </term>
263         <listitem>
264           <para>Prevent loading of the user's local package database.</para>
265         </listitem>
266       </varlistentry>
267     </variablelist>
268
269     <para>To create a new package database, just create
270       a new file and put the string
271       <quote><literal>[]</literal></quote> in it.  Packages can be
272       added to the file using the
273       <literal>ghc-pkg</literal> tool, described in <xref
274       linkend="package-management"/>.</para>
275   </sect2>
276
277   <sect2 id="building-packages">
278     <title>Building a package from Haskell source</title>
279     <indexterm><primary>packages</primary>
280       <secondary>building</secondary></indexterm>
281
282     <para>We don't recommend building packages the hard way.  Instead, use the
283       <ulink url="../Cabal/index.html">Cabal</ulink> infrastructure
284       if possible.  If your package is particularly complicated or requires a
285       lot of configuration, then you might have to fall back to the low-level
286       mechanisms, so a few hints for those brave souls follow.</para>
287     
288     <itemizedlist>
289       <listitem>
290         <para>You need to build an "installed package info" file for
291           passing to <literal>ghc-pkg</literal> when installing your
292           package.  The contents of this file are described in <xref
293             linkend="installed-pkg-info" />.</para>
294       </listitem>
295       
296       <listitem>
297         <para>The Haskell code in a package may be built into one or
298           more archive libraries
299           (e.g. <filename>libHSfoo.a</filename>), or a single DLL on
300           Windows (e.g. <filename>HSfoo.dll</filename>).  The
301           restriction to a single DLL on Windows is because the
302           package system is used to tell the compiler when it should
303           make an inter-DLL call rather than an intra-DLL call
304           (inter-DLL calls require an extra
305           indirection). <emphasis>Building packages as DLLs doesn't
306           work at the moment; see <xref linkend="win32-dlls-create"/>
307           for the gory details.</emphasis>
308           </para>
309
310         <para>Building a static library is done by using the
311           <literal>ar</literal> tool, like so:</para>
312
313 <screen>ar cqs libHSfoo.a A.o B.o C.o ...</screen>
314
315         <para>where <filename>A.o</filename>,
316           <filename>B.o</filename> and so on are the compiled Haskell
317           modules, and <filename>libHSfoo.a</filename> is the library
318           you wish to create.  The syntax may differ slightly on your
319           system, so check the documentation if you run into
320           difficulties.</para>
321
322         <para>Versions of the Haskell libraries for use with GHCi
323           may also be included: GHCi cannot load <literal>.a</literal>
324           files directly, instead it will look for an object file
325           called <filename>HSfoo.o</filename> and load that.  On some
326           systems, the <literal>ghc-pkg</literal> tool can
327           automatically build the GHCi version of each library, see
328           <xref linkend="package-management"/>.  To build these
329           libraries by hand from the <literal>.a</literal> archive, it
330           is possible to use GNU <command>ld</command> as
331           follows:</para>
332
333 <screen>ld -r &ndash;&ndash;whole-archive -o HSfoo.o libHSfoo.a</screen>
334
335         <para>(replace
336           <literal>&ndash;&ndash;--whole-archive</literal> with
337           <literal>&ndash;all_load</literal> on MacOS X)</para>
338         
339           <para>GHC does not maintain detailed cross-package
340           dependency information.  It does remember which modules in
341           other packages the current module depends on, but not which
342           things within those imported things.</para>
343       </listitem>
344     </itemizedlist>
345     
346     <para>It is worth noting that on Windows, when each package
347       is built as a DLL, since a reference to a DLL costs an extra
348       indirection, intra-package references are cheaper than
349       inter-package references. Of course, this applies to the
350       <filename>Main</filename> package as well.</para>
351     </sect2>
352
353   <sect2 id="package-management">
354     <title>Package management (the <literal>ghc-pkg</literal> command)</title>
355     <indexterm><primary>packages</primary>
356       <secondary>management</secondary></indexterm>
357     
358     <para>The <literal>ghc-pkg</literal> tool allows packages to be
359       added or removed from a package database.  By default,
360       the system-wide package database is modified, but alternatively
361       the user's local package database or another specified
362       file can be used.</para>
363
364     <para>Commands which only inspect the database (<literal>list</literal>,
365       <literal>describe</literal>, <literal>field</literal>) will take into
366       account the user's local package database too, unless the
367       <literal>--global</literal> option is given.  This matches the behaviour
368       of GHC, which automatically reads the user's local database if it is
369       available.</para>
370
371     <para>The <literal>ghc-pkg</literal> program may be run in the ways listed
372       below.  Where a package name is required, the package can be named in
373       full including the version number 
374       (e.g. <literal>network-1.0</literal>), or without the version number.
375       Naming a package without the version number matches all versions of the
376       package; the specified action will be applied to all the matching
377       packages.  A package specifier that matches all version of the package
378       can also be written <replaceable>pkg</replaceable><literal>-*</literal>,
379       to make it clearer that multiple packages are being matched.</para>
380
381     <variablelist>
382       <varlistentry>
383         <term><literal>ghc-pkg register <replaceable>file</replaceable></literal></term>
384         <listitem>
385           <para>Reads a package specification from
386             <replaceable>file</replaceable> (which may be &ldquo;<literal>-</literal>&rdquo;
387             to indicate standard input),
388             and adds it to the database of installed packages.  The syntax of
389             <replaceable>file</replaceable> is given in <xref
390               linkend="installed-pkg-info" />.</para>
391
392           <para>The package specification must be a package that isn't already
393             installed.</para>
394         </listitem>
395       </varlistentry>
396
397       <varlistentry>
398         <term><literal>ghc-pkg update <replaceable>file</replaceable></literal></term>
399         <listitem>
400           <para>The same as <literal>register</literal>, except that if a
401             package of the same name is already installed, it is
402             replaced by the new one.</para>
403         </listitem>
404       </varlistentry>
405
406       <varlistentry>
407         <term><literal>ghc-pkg unregister <replaceable>P</replaceable></literal></term>
408         <listitem>
409           <para>Remove the specified package from the database.</para>
410         </listitem>
411       </varlistentry>
412
413       <varlistentry>
414         <term><literal>ghc-pkg expose <replaceable>P</replaceable></literal></term>
415         <listitem>
416           <para>Sets the <literal>exposed</literal> flag for package
417             <replaceable>P</replaceable> to <literal>True</literal>.</para>
418         </listitem>
419       </varlistentry>
420
421       <varlistentry>
422         <term><literal>ghc-pkg hide <replaceable>P</replaceable></literal></term>
423         <listitem>
424           <para>Sets the <literal>exposed</literal> flag for package
425             <replaceable>P</replaceable> to <literal>False</literal>.</para>
426         </listitem>
427       </varlistentry>
428
429       <varlistentry>
430         <term><literal>ghc-pkg list [<replaceable>P</replaceable>] [<option>--simple-output</option>]</literal></term>
431         <listitem>
432           <para>This option displays the currently installed
433             packages, for each of the databases known to
434             <literal>ghc-pkg</literal>.  That includes the global database, the
435             user's local database (if <option>--user</option> is given), and
436             any further files specified using the <option>-f</option> option on
437             the command line.</para>
438
439           <para>Hidden packages (those for which the <literal>exposed</literal>
440             flag is <literal>False</literal>) are shown in parentheses in the
441             list of packages.</para>
442
443           <para>If an optional package identifier <replaceable>P</replaceable>
444             is given, then only packages matching that identifier are
445             shown.</para>
446           
447           <para>If the option <option>--simple-output</option> is given, then
448             the packages are listed on a single line separated by spaces, and
449             the database names are not included.  This is intended to make it
450             easier to parse the output of <literal>ghc-pkg list</literal> using
451             a script.</para>
452         </listitem>
453       </varlistentry>
454
455       <varlistentry>
456         <term><literal>ghc-pkg latest <replaceable>P</replaceable></literal></term>
457         <listitem>
458           <para>Prints the latest available version of package
459             <replaceable>P</replaceable>.</para>
460         </listitem>
461       </varlistentry>
462
463       <varlistentry>
464         <term><literal>ghc-pkg describe <replaceable>P</replaceable></literal></term>
465         <listitem>
466           <para>Emit the full description of the specified package.  The
467             description is in the form of an
468             <literal>InstalledPackageInfo</literal>, the same as the input file
469             format for <literal>ghc-pkg register</literal>.  See <xref
470               linkend="installed-pkg-info" /> for details.</para>
471         </listitem>
472       </varlistentry>
473
474       <varlistentry>
475         <term><literal>ghc-pkg field <replaceable>P</replaceable> <replaceable>field</replaceable></literal></term>
476         <listitem>
477           <para>Show just a single field of the installed package description
478             for <literal>P</literal>.</para>
479         </listitem>
480       </varlistentry>
481     </variablelist>
482
483     <para>Additionally, the following flags are accepted by
484       <literal>ghc-pkg</literal>:</para>
485
486     <variablelist>
487       <varlistentry>
488         <term>
489           <option>&ndash;&ndash;auto-ghci-libs</option><indexterm><primary><option>&ndash;&ndash;user</option></primary>
490           </indexterm>
491         </term>
492         <listitem>
493           <para>Automatically generate the GHCi
494             <filename>.o</filename> version of each
495             <filename>.a</filename> Haskell library, using GNU ld (if
496             that is available).  Without this option,
497             <literal>ghc-pkg</literal> will warn if GHCi versions of
498             any Haskell libraries in the package don't exist.</para>
499             
500             <para>GHCi <literal>.o</literal> libraries don't
501             necessarily have to live in the same directory as the
502             corresponding <literal>.a</literal> library.  However,
503             this option will cause the GHCi library to be created in
504             the same directory as the <literal>.a</literal>
505             library.</para>
506         </listitem>
507       </varlistentry>
508
509       <varlistentry>
510         <term>
511           <option>-f</option> <replaceable>file</replaceable>
512           <indexterm><primary><option>-f</option></primary>
513           </indexterm>
514         </term>
515         <term>
516           <option>-package-conf</option> <replaceable>file</replaceable>
517           <indexterm><primary><option>-package-conf</option></primary>
518           </indexterm>
519         </term>
520         <listitem>
521           <para>Operate on the package database in
522             <replaceable>file</replaceable>.</para>
523
524           <para>When multiple <option>-f</option> options are given, or
525             <option>-f</option> is used in conjunction with
526             <option>--user</option> or <option>--global</option>, the last
527             one on the command-line is the one that will be modified.</para>
528         </listitem>
529       </varlistentry>
530
531       <varlistentry>
532         <term>
533           <option>&ndash;&ndash;force</option>
534           <indexterm><primary>
535               <option>&ndash;&ndash;force</option>
536             </primary></indexterm>
537         </term>
538         <listitem>
539           <para>Causes <literal>ghc-pkg</literal> to ignore missing
540             dependencies, directories and libraries when registering a package,
541             and just go ahead and add it anyway.  This might be useful if your
542             package installation system needs to add the package to
543             GHC before building and installing the files.</para>
544         </listitem>
545       </varlistentry>
546
547       <varlistentry>
548         <term>
549           <option>&ndash;&ndash;global</option><indexterm><primary><option>&ndash;&ndash;user</option></primary>
550           </indexterm>
551         </term>
552         <listitem>
553           <para>Operate on the global package database (this is the default).
554             This flag affects the <literal>register</literal>,
555             <literal>update</literal>, <literal>unregister</literal>,
556             <literal>expose</literal>, and <literal>hide</literal>
557             commands.</para>
558         </listitem>
559       </varlistentry>
560
561       <varlistentry>
562         <term>
563           <option>&ndash;&ndash;help</option><indexterm><primary><option>&ndash;&ndash;user</option></primary>
564           </indexterm>
565         </term>
566         <term>
567           <option>-?</option><indexterm><primary><option>-?</option></primary>
568           </indexterm>
569         </term>
570         <listitem>
571           <para>Outputs the command-line syntax.</para>
572         </listitem>
573       </varlistentry>
574
575       <varlistentry>
576         <term>
577           <option>&ndash;&ndash;user</option><indexterm><primary><option>&ndash;&ndash;user</option></primary>
578           </indexterm>
579         </term>
580         <listitem>
581           <para>Operate on the current user's local package database.
582             This flag affects the <literal>register</literal>,
583             <literal>update</literal>, <literal>unregister</literal>,
584             <literal>expose</literal>, and <literal>hide</literal>
585             commands.</para>
586         </listitem>
587       </varlistentry>
588
589       <varlistentry>
590         <term>
591           <option>-V</option><indexterm><primary><option>-V</option></primary>
592           </indexterm>
593         </term>
594         <term>
595           <option>&ndash;&ndash;version</option><indexterm><primary><option>&ndash;&ndash;user</option></primary>
596           </indexterm>
597         </term>
598         <listitem>
599           <para>Output the <literal>ghc-pkg</literal> version number.</para>
600         </listitem>
601       </varlistentry>
602     </variablelist>
603
604     <para>When modifying the package database
605       <replaceable>file</replaceable>, a copy of the original file is
606       saved in <replaceable>file</replaceable><literal>.old</literal>,
607       so in an emergency you can always restore the old settings by
608       copying the old file back again.</para>
609
610   </sect2>
611   
612   <sect2 id="installed-pkg-info">
613     <title>
614       <literal>InstalledPackageInfo</literal>: a package specification
615     </title>
616
617     <para>A package specification is a Haskell record; in particular, it is the
618       record <ulink
619         url="../libraries/Cabal/Distribution.InstalledPackageInfo.html#%tInstalledPackageInfo">InstalledPackageInfo</ulink> in the module Distribution.InstalledPackageInfo, which is part of the Cabal package distributed with GHC.</para>
620
621     <para>An <literal>InstalledPackageInfo</literal> has a human
622       readable/writable syntax.  The functions
623       <literal>parseInstalledPackageInfo</literal> and
624       <literal>showInstalledPackageInfo</literal> read and write this syntax
625       respectively.  Here's an example of the
626       <literal>InstalledPackageInfo</literal> for the <literal>unix</literal> package:</para>
627
628 <screen>
629 $ ghc-pkg describe unix
630 name: unix
631 version: 1.0
632 license: BSD3
633 copyright:
634 maintainer: libraries@haskell.org
635 stability:
636 homepage:
637 package-url:
638 description:
639 category:
640 author:
641 exposed: True
642 exposed-modules: System.Posix,
643                  System.Posix.DynamicLinker.Module,
644                  System.Posix.DynamicLinker.Prim,
645                  System.Posix.Directory,
646                  System.Posix.DynamicLinker,
647                  System.Posix.Env,
648                  System.Posix.Error,
649                  System.Posix.Files,
650                  System.Posix.IO,
651                  System.Posix.Process,
652                  System.Posix.Resource,
653                  System.Posix.Temp,
654                  System.Posix.Terminal,
655                  System.Posix.Time,
656                  System.Posix.Unistd,
657                  System.Posix.User,
658                  System.Posix.Signals.Exts
659 import-dirs: /usr/lib/ghc-6.4/libraries/unix
660 library-dirs: /usr/lib/ghc-6.4/libraries/unix
661 hs-libraries: HSunix
662 extra-libraries: HSunix_cbits, dl
663 include-dirs: /usr/lib/ghc-6.4/libraries/unix/include
664 includes: HsUnix.h
665 depends: base-1.0
666 </screen>
667
668     <para>The full <ulink url="../Cabal/index.html">Cabal documentation</ulink>
669       is still in preparation (at time of writing), so in the meantime
670       here is a brief description of the syntax of this file:</para>
671
672     <para>A package description consists of a number of field/value pairs.  A
673       field starts with the field name in the left-hand column followed by a
674       &ldquo;<literal>:</literal>&rdquo;, and the value continues until the next line that begins in the
675       left-hand column, or the end of file.</para>
676
677     <para>The syntax of the value depends on the field.   The various field
678       types are:</para>
679
680     <variablelist>
681       <varlistentry>
682         <term>freeform</term>
683         <listitem>
684           <para>Any arbitrary string, no interpretation or parsing is
685             done.</para>
686         </listitem>
687       </varlistentry>
688       <varlistentry>
689         <term>string</term>
690         <listitem>
691           <para>A sequence of non-space characters, or a sequence of arbitrary
692             characters surrounded by quotes <literal>"...."</literal>.</para>
693         </listitem>
694       </varlistentry>
695       <varlistentry>
696         <term>string list</term>
697         <listitem>
698           <para>A sequence of strings, separated by commas.  The sequence may
699             be empty.</para>
700         </listitem>
701       </varlistentry>
702     </variablelist>
703
704     <para>In addition, there are some fields with special syntax (e.g. package
705       names, version, dependencies).</para>
706
707     <para>The allowed fields, with their types, are:</para>
708         
709     <variablelist>
710       <varlistentry>
711         <term>
712           <literal>name</literal>
713           <indexterm><primary><literal>name</literal></primary><secondary>package specification</secondary></indexterm>
714         </term>
715         <listitem>
716           <para>The package's name (without the version).</para>
717         </listitem>
718       </varlistentry>
719       
720       <varlistentry>
721         <term>
722           <literal>version</literal>
723           <indexterm><primary><literal>version</literal></primary><secondary>package specification</secondary></indexterm>
724         </term>
725         <listitem>
726           <para>The package's version, usually in the form
727             <literal>A.B</literal> (any number of components are allowed).</para>
728         </listitem>
729       </varlistentry>
730       
731       <varlistentry>
732         <term>
733           <literal>license</literal>
734           <indexterm><primary><literal>auto</literal></primary><secondary>package specification</secondary></indexterm>
735         </term>
736         <listitem>
737           <para>(string) The type of license under which this package is distributed.
738             This field is a value of the <ulink
739         url="../libraries/Cabal/Distribution.License.html#t:License"><literal>License</literal></ulink> type.</para>
740         </listitem>
741       </varlistentry>
742
743         <varlistentry>
744           <term>
745             <literal>license-file</literal>
746             <indexterm><primary><literal>license-file</literal></primary><secondary>package specification</secondary></indexterm>
747           </term>
748           <listitem>
749             <para>(optional string) The name of a file giving detailed license
750             information for this package.</para>
751           </listitem>
752         </varlistentry>
753
754         <varlistentry>
755           <term>
756             <literal>copyright</literal>
757             <indexterm><primary><literal>copyright</literal></primary><secondary>package specification</secondary></indexterm>
758           </term>
759           <listitem>
760             <para>(optional freeform) The copyright string.</para>
761           </listitem>
762         </varlistentry>
763
764         <varlistentry>
765           <term>
766             <literal>maintainer</literal>
767             <indexterm><primary><literal>maintainer</literal></primary><secondary>package specification</secondary></indexterm>
768           </term>
769           <listitem>
770             <para>(optinoal freeform) The email address of the package's maintainer.</para>
771           </listitem>
772         </varlistentry>
773
774         <varlistentry>
775           <term>
776             <literal>stability</literal>
777             <indexterm><primary><literal>stability</literal></primary><secondary>package specification</secondary></indexterm>
778           </term>
779           <listitem>
780             <para>(optional freeform) A string describing the stability of the package
781             (eg. stable, provisional or experimental).</para>
782           </listitem>
783         </varlistentry>
784
785         <varlistentry>
786           <term>
787             <literal>homepage</literal>
788             <indexterm><primary><literal>homepage</literal></primary><secondary>package specification</secondary></indexterm>
789           </term>
790           <listitem>
791             <para>(optional freeform) URL of the package's home page.</para>
792           </listitem>
793         </varlistentry>
794
795       <varlistentry>
796         <term>
797             <literal>package-url</literal>
798             <indexterm><primary><literal>package-url</literal></primary><secondary>package specification</secondary></indexterm>
799           </term>
800           <listitem>
801             <para>(optional freeform) URL of a downloadable distribution for this
802             package.  The distribution should be a Cabal package.</para>
803           </listitem>
804         </varlistentry>
805
806         <varlistentry>
807           <term>
808             <literal>description</literal>
809             <indexterm><primary><literal>description</literal></primary><secondary>package specification</secondary></indexterm>
810           </term>
811           <listitem>
812             <para>(optional freeform) Description of the package.</para>
813           </listitem>
814         </varlistentry>
815
816       <varlistentry>
817           <term>
818             <literal>category</literal>
819             <indexterm><primary><literal>category</literal></primary><secondary>package specification</secondary></indexterm>
820           </term>
821           <listitem>
822             <para>(optinoal freeform) Which category the package belongs to.  This field
823             is for use in conjunction with a future centralised package
824             distribution framework, tentatively titled Hackage.</para>
825           </listitem>
826         </varlistentry>
827
828         <varlistentry>
829           <term>
830             <literal>author</literal>
831             <indexterm><primary><literal>author</literal></primary><secondary>package specification</secondary></indexterm>
832           </term>
833           <listitem>
834             <para>(optional freeform) Author of the package.</para>
835           </listitem>
836         </varlistentry>
837
838         <varlistentry>
839           <term>
840             <literal>exposed</literal>
841             <indexterm><primary><literal>exposed</literal></primary><secondary>package specification</secondary></indexterm>
842           </term>
843           <listitem>
844             <para>(bool) Whether the package is exposed or not.</para>
845           </listitem>
846         </varlistentry>
847
848         <varlistentry>
849           <term>
850             <literal>exposed-modules</literal>
851             <indexterm><primary><literal>exposed-modules</literal></primary><secondary>package specification</secondary></indexterm>
852           </term>
853           <listitem>
854             <para>(string list) modules exposed by this package.</para>
855           </listitem>
856         </varlistentry>
857
858         <varlistentry>
859           <term>
860             <literal>hidden-modules</literal>
861             <indexterm><primary><literal>hidden-modules</literal></primary><secondary>package specification</secondary></indexterm>
862           </term>
863           <listitem>
864             <para>(string list) modules provided by this package,
865             but not exposed to the programmer.  These modules cannot be
866             imported, but they are still subject to the overlapping constraint:
867             no other package in the same program may provide a module of the
868             same name.</para>
869         </listitem>
870         </varlistentry>
871
872         <varlistentry>
873           <term>
874             <literal>import-dirs</literal>
875             <indexterm><primary><literal>import-dirs</literal></primary><secondary>package specification</secondary></indexterm>
876           </term>
877           <listitem>
878             <para>(string list) A list of directories containing interface files
879             (<literal>.hi</literal> files) for this package.</para>
880
881             <para>If the package contains profiling libraries, then
882             the interface files for those library modules should have
883             the suffix <literal>.p_hi</literal>.  So the package can
884             contain both normal and profiling versions of the same
885             library without conflict (see also
886             <literal>library_dirs</literal> below).</para>
887           </listitem>
888         </varlistentry>
889
890         <varlistentry>
891           <term>
892             <literal>library-dirs</literal>
893             <indexterm><primary><literal>library-dirs</literal></primary><secondary>package specification</secondary></indexterm>
894           </term>
895           <listitem>
896             <para>(string list) A list of directories containing libraries for this
897             package.</para>
898           </listitem>
899         </varlistentry>
900
901         <varlistentry>
902           <term>
903             <literal>hs-libraries</literal>
904             <indexterm><primary><literal>hs-libraries</literal></primary><secondary>package specification</secondary></indexterm>
905           </term>
906           <listitem>
907             <para>(string list) A list of libraries containing Haskell code for this
908             package, with the <literal>.a</literal> or
909             <literal>.dll</literal> suffix omitted.  When packages are
910             built as libraries, the
911             <literal>lib</literal> prefix is also omitted.</para>
912
913             <para>For use with GHCi, each library should have an
914             object file too.  The name of the object file does
915             <emphasis>not</emphasis> have a <literal>lib</literal>
916             prefix, and has the normal object suffix for your
917             platform.</para>
918
919             <para>For example, if we specify a Haskell library as
920             <filename>HSfoo</filename> in the package spec, then the
921             various flavours of library that GHC actually uses will be
922             called:</para>
923             <variablelist>
924               <varlistentry>
925                 <term><filename>libHSfoo.a</filename></term>
926                 <listitem>
927                   <para>The name of the library on Unix and Windows
928                   (mingw) systems.  Note that we don't support
929                   building dynamic libraries of Haskell code on Unix
930                   systems.</para>
931                 </listitem>
932               </varlistentry>
933               <varlistentry>
934                 <term><filename>HSfoo.dll</filename></term>
935                 <listitem>
936                   <para>The name of the dynamic library on Windows
937                   systems (optional).</para>
938                 </listitem>
939               </varlistentry>
940               <varlistentry>
941                 <term><filename>HSfoo.o</filename></term>
942                 <term><filename>HSfoo.obj</filename></term>
943                 <listitem>
944                   <para>The object version of the library used by
945                   GHCi.</para>
946                 </listitem>
947               </varlistentry>
948             </variablelist>
949           </listitem>
950         </varlistentry>
951
952         <varlistentry>
953           <term>
954             <literal>extra-libraries</literal>
955             <indexterm><primary><literal>extra-libraries</literal></primary><secondary>package specification</secondary></indexterm>
956           </term>
957           <listitem>
958             <para>(string list) A list of extra libraries for this package.  The
959             difference between <literal>hs-libraries</literal> and
960             <literal>extra-libraries</literal> is that
961             <literal>hs-libraries</literal> normally have several
962             versions, to support profiling, parallel and other build
963             options.  The various versions are given different
964             suffixes to distinguish them, for example the profiling
965             version of the standard prelude library is named
966             <filename>libHSbase_p.a</filename>, with the
967             <literal>_p</literal> indicating that this is a profiling
968             version.  The suffix is added automatically by GHC for
969             <literal>hs-libraries</literal> only, no suffix is added
970             for libraries in
971             <literal>extra-libraries</literal>.</para>
972
973             <para>The libraries listed in
974             <literal>extra-libraries</literal> may be any libraries
975             supported by your system's linker, including dynamic
976             libraries (<literal>.so</literal> on Unix,
977             <literal>.DLL</literal> on Windows).</para>
978
979             <para>Also, <literal>extra-libraries</literal> are placed
980             on the linker command line after the
981             <literal>hs-libraries</literal> for the same package.  If
982             your package has dependencies in the other direction (i.e.
983             <literal>extra-libraries</literal> depends on
984             <literal>hs-libraries</literal>), and the libraries are
985             static, you might need to make two separate
986             packages.</para>
987           </listitem>
988         </varlistentry>
989
990         <varlistentry>
991           <term>
992             <literal>include-dirs</literal>
993             <indexterm><primary><literal>include-dirs</literal></primary><secondary>package specification</secondary></indexterm>
994           </term>
995           <listitem>
996             <para>(string list) A list of directories containing C includes for this
997             package.</para>
998           </listitem>
999         </varlistentry>
1000
1001         <varlistentry>
1002           <term>
1003            <literal>includes</literal>
1004            <indexterm><primary><literal>includes</literal></primary><secondary>package specification</secondary></indexterm>
1005           </term>
1006           <listitem>
1007             <para>(string list) A list of files to include for via-C compilations
1008             using this package.  Typically the include file(s) will
1009             contain function prototypes for any C functions used in
1010             the package, in case they end up being called as a result
1011             of Haskell functions from the package being
1012             inlined.</para>
1013           </listitem>
1014         </varlistentry>
1015
1016         <varlistentry>
1017           <term>
1018             <literal>depends</literal>
1019             <indexterm><primary><literal>depends</literal></primary><secondary>package specification</secondary></indexterm>
1020           </term>
1021           <listitem>
1022             <para>(package name list) Packages on which this package depends.  This field contains
1023             packages with explicit versions are required, except that when
1024             submitting a package to <literal>ghc-pkg register</literal>, the
1025             versions will be filled in if they are unambiguous.</para>
1026           </listitem>
1027         </varlistentry>
1028
1029         <varlistentry>
1030           <term>
1031             <literal>hugs-options</literal>
1032             <indexterm><primary><literal>hugs-options</literal></primary><secondary>package specification</secondary></indexterm>
1033           </term>
1034           <listitem>
1035             <para>(string list) Options to pass to Hugs for this package.</para>
1036           </listitem>
1037         </varlistentry>
1038
1039         <varlistentry>
1040           <term>
1041             <literal>cc-options</literal>
1042             <indexterm><primary><literal>cc-options</literal></primary><secondary>package specification</secondary></indexterm>
1043           </term>
1044           <listitem>
1045             <para>(string list) Extra arguments to be added to the gcc command line
1046             when this package is being used (only for via-C
1047             compilations).</para>
1048           </listitem>
1049         </varlistentry>
1050
1051         <varlistentry>
1052           <term>
1053             <literal>ld-options</literal>
1054             <indexterm><primary><literal>ld-options</literal></primary><secondary>package specification</secondary></indexterm>
1055           </term>
1056           <listitem>
1057             <para>(string list) Extra arguments to be added to the
1058             <command>gcc</command> command line (for linking) when
1059             this package is being used.</para>
1060           </listitem>
1061         </varlistentry>
1062         
1063         <varlistentry>
1064           <term>
1065             <literal>framework-dirs</literal>
1066             <indexterm><primary><literal>framework-dirs</literal></primary><secondary>package specification</secondary></indexterm>
1067           </term>
1068           <listitem>
1069             <para>(string list) On Darwin/MacOS X, a list of directories containing
1070             frameworks for this package. This corresponds to the
1071             <option>-framework-path</option> option. It is ignored on all other
1072             platforms.</para>
1073           </listitem>
1074         </varlistentry>
1075
1076         <varlistentry>
1077           <term>
1078             <literal>frameworks</literal>
1079             <indexterm><primary><literal>frameworks</literal></primary><secondary>package specification</secondary></indexterm>
1080           </term>
1081           <listitem>
1082             <para>(string list) On Darwin/MacOS X, a list of frameworks to link to. This
1083             corresponds to the <option>-framework</option> option. Take a look
1084             at Apple's developer documentation to find out what frameworks
1085             actually are. This entry is ignored on all other platforms.</para>
1086           </listitem>
1087         </varlistentry>
1088
1089         <varlistentry>
1090           <term>
1091             <literal>haddock-interfaces</literal>
1092             <indexterm><primary><literal>haddock-interfaces</literal></primary><secondary>package specification</secondary></indexterm>
1093           </term>
1094           <listitem>
1095             <para>(string list) A list of filenames containing <ulink
1096               url="http://www.haskell.org/haddock/">Haddock</ulink> interface
1097             files (<literal>.haddock</literal> files) for this package.</para>
1098           </listitem>
1099         </varlistentry>
1100
1101         <varlistentry>
1102           <term>
1103             <literal>haddock-html</literal>
1104             <indexterm><primary><literal>haddock-html</literal></primary><secondary>package specification</secondary></indexterm>
1105           </term>
1106           <listitem>
1107             <para>(optional string) The directory containing the Haddock-generated HTML
1108             for this package.</para>
1109           </listitem>
1110         </varlistentry>
1111       </variablelist>
1112       
1113 <!--  This isn't true any more.  I'm not sure if we still need it -SDM
1114       <para>
1115       The <literal>ghc-pkg</literal> tool performs expansion of
1116       environment variables occurring in input package specifications.
1117       So, if the <literal>mypkg</literal> was added to the package
1118       database as follows:
1119       </para>
1120 <screen>
1121   $ installdir=/usr/local/lib ghc-pkg -a &lt; mypkg.pkg
1122 </screen>
1123
1124       <para>
1125       The occurrence of <literal>${installdir}</literal> is replaced
1126       with <literal>/usr/local/lib</literal> in the package data that
1127       is added for <literal>mypkg</literal>.
1128       </para>
1129       
1130       <para>
1131       This feature enables the distribution of package specification
1132       files that can be easily configured when installing.
1133       </para>
1134
1135       <para>For examples of more package specifications, take a look
1136       at the <literal>package.conf</literal> in your GHC
1137       installation.</para>
1138
1139 -->
1140
1141     </sect2>
1142   </sect1>
1143
1144 <!-- Emacs stuff:
1145      ;;; Local Variables: ***
1146      ;;; mode: xml ***
1147      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter" "sect1") ***
1148      ;;; End: ***
1149  -->