b955f00fc23e9410ab21eca36d31b6ecf12a375b
[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 linkend="package-management" />).</para>
227       </listitem>
228     </itemizedlist>
229
230     <para>When GHC starts up, it reads the contents of these two package
231       databases, and builds up a list of the packages it knows about.  You can
232       see GHC's package table by running GHC with the <option>-v</option>
233       flag.</para> 
234
235     <para>Package databases may overlap: for example, packages in the user
236       database will override those of the same name in the global
237       database.</para> 
238
239     <para>You can control the loading of package databses using the following
240       GHC options:</para> 
241
242     <variablelist>
243       <varlistentry>
244         <term>
245           <option>-package-conf <replaceable>file</replaceable></option>
246           <indexterm><primary><option>-package-conf</option></primary></indexterm>
247         </term>
248         <listitem>
249           <para>Read in the package configuration file
250             <replaceable>file</replaceable> in addition to the system
251             default file and the user's local file.  Packages in additional
252             files read this way will override those in the global and user
253             databases.</para>
254         </listitem>
255       </varlistentry>
256
257       <varlistentry>
258         <term><option>-no-user-package-conf</option>
259           <indexterm><primary><option>-no-user-package-conf</option></primary>
260           </indexterm>
261         </term>
262         <listitem>
263           <para>Prevent loading of the user's local package database.</para>
264         </listitem>
265       </varlistentry>
266     </variablelist>
267
268     <para>To create a new package database, just create
269       a new file and put the string
270       <quote><literal>[]</literal></quote> in it.  Packages can be
271       added to the file using the
272       <literal>ghc-pkg</literal> tool, described in <xref
273       linkend="package-management"/>.</para>
274
275     <sect3 id="ghc-package-path">
276       <title>The <literal>GHC_PACKAGE_PATH</literal> environment variable</title>
277       <indexterm><primary>Environment variable</primary><secondary><literal>GHC_PACKAGE_PATH</literal></secondary>
278       </indexterm>
279       <indexterm><primary><literal>GHC_PACKAGE_PATH</literal></primary></indexterm>
280       <para>The <literal>GHC_PACKAGE_PATH</literal> environment variable may be
281         set to a <literal>:</literal>-separated (<literal>;</literal>-separated
282         on Windows) list of files containing package databases.  This list of
283         package databases is used by GHC and ghc-pkg, with earlier databases in
284         the list overriding later ones.  This order was chosen to match the
285         behaviour of the <literal>PATH</literal> environment variable; think of
286         it as a list of package databases that are searched left-to-right for
287         packages.</para>
288
289       <para>If <literal>GHC_PACKAGE_PATH</literal> ends in a separator, then
290         the default user and system package databases are appended, in that
291         order. e.g. to augment the usual set of packages with a database of
292         your own, you could say (on Unix):
293 <screen>
294 $ export GHC_PACKAGE_PATH=$HOME/.my-ghc-packages.conf:</screen>
295         (use <literal>;</literal> instead of <literal>:</literal> on
296         Windows).</para>
297
298       <para>To check whether your <literal>GHC_PACKAGE_PATH</literal> setting
299         is doing the right thing, <literal>ghc-pkg list</literal> will list all
300         the databases in use, in the reverse order they are searched.</para>
301     </sect3>
302   </sect2>
303
304   <sect2 id="building-packages">
305     <title>Building a package from Haskell source</title>
306     <indexterm><primary>packages</primary>
307       <secondary>building</secondary></indexterm>
308
309     <para>We don't recommend building packages the hard way.  Instead, use the
310       <ulink url="../Cabal/index.html">Cabal</ulink> infrastructure
311       if possible.  If your package is particularly complicated or requires a
312       lot of configuration, then you might have to fall back to the low-level
313       mechanisms, so a few hints for those brave souls follow.</para>
314     
315     <itemizedlist>
316       <listitem>
317         <para>You need to build an "installed package info" file for
318           passing to <literal>ghc-pkg</literal> when installing your
319           package.  The contents of this file are described in <xref
320             linkend="installed-pkg-info" />.</para>
321       </listitem>
322       
323       <listitem>
324         <para>The Haskell code in a package may be built into one or
325           more archive libraries
326           (e.g. <filename>libHSfoo.a</filename>), or a single DLL on
327           Windows (e.g. <filename>HSfoo.dll</filename>).  The
328           restriction to a single DLL on Windows is because the
329           package system is used to tell the compiler when it should
330           make an inter-DLL call rather than an intra-DLL call
331           (inter-DLL calls require an extra
332           indirection). <emphasis>Building packages as DLLs doesn't
333           work at the moment; see <xref linkend="win32-dlls-create"/>
334           for the gory details.</emphasis>
335           </para>
336
337         <para>Building a static library is done by using the
338           <literal>ar</literal> tool, like so:</para>
339
340 <screen>ar cqs libHSfoo.a A.o B.o C.o ...</screen>
341
342         <para>where <filename>A.o</filename>,
343           <filename>B.o</filename> and so on are the compiled Haskell
344           modules, and <filename>libHSfoo.a</filename> is the library
345           you wish to create.  The syntax may differ slightly on your
346           system, so check the documentation if you run into
347           difficulties.</para>
348
349         <para>Versions of the Haskell libraries for use with GHCi
350           may also be included: GHCi cannot load <literal>.a</literal>
351           files directly, instead it will look for an object file
352           called <filename>HSfoo.o</filename> and load that.  On some
353           systems, the <literal>ghc-pkg</literal> tool can
354           automatically build the GHCi version of each library, see
355           <xref linkend="package-management"/>.  To build these
356           libraries by hand from the <literal>.a</literal> archive, it
357           is possible to use GNU <command>ld</command> as
358           follows:</para>
359
360 <screen>ld -r &ndash;&ndash;whole-archive -o HSfoo.o libHSfoo.a</screen>
361
362         <para>(replace
363           <literal>&ndash;&ndash;--whole-archive</literal> with
364           <literal>&ndash;all_load</literal> on MacOS X)</para>
365         
366           <para>GHC does not maintain detailed cross-package
367           dependency information.  It does remember which modules in
368           other packages the current module depends on, but not which
369           things within those imported things.</para>
370       </listitem>
371     </itemizedlist>
372     
373     <para>It is worth noting that on Windows, when each package
374       is built as a DLL, since a reference to a DLL costs an extra
375       indirection, intra-package references are cheaper than
376       inter-package references. Of course, this applies to the
377       <filename>Main</filename> package as well.</para>
378     </sect2>
379
380   <sect2 id="package-management">
381     <title>Package management (the <literal>ghc-pkg</literal> command)</title>
382     <indexterm><primary>packages</primary>
383       <secondary>management</secondary></indexterm>
384     
385     <para>The <literal>ghc-pkg</literal> tool allows packages to be
386       added or removed from a package database.  By default,
387       the system-wide package database is modified, but alternatively
388       the user's local package database or another specified
389       file can be used.</para>
390
391     <para>To see what package databases are in use, say
392       <literal>ghc-pkg&nbsp;list</literal>.  The stack of databases that
393       <literal>ghc-pkg</literal> knows about can be modified using the
394       <literal>GHC_PACKAGE_PATH</literal> environment variable (see <xref
395         linkend="ghc-package-path" />, and using
396         <literal>--package-conf</literal> options on the
397         <literal>ghc-pkg</literal> command line.</para>
398
399     <para>When asked to modify a database, <literal>ghc-pkg</literal> modifies
400       the global database by default.  Specifying <option>--user</option>
401       causes it to act on the user database, or <option>--package-conf</option>
402       can be used to act on another database entirely.  When multiple of these
403       options are given, the rightmost one is used as the database to act
404       upon.</para>
405
406     <para>The <literal>ghc-pkg</literal> program may be run in the ways listed
407       below.  Where a package name is required, the package can be named in
408       full including the version number 
409       (e.g. <literal>network-1.0</literal>), or without the version number.
410       Naming a package without the version number matches all versions of the
411       package; the specified action will be applied to all the matching
412       packages.  A package specifier that matches all version of the package
413       can also be written <replaceable>pkg</replaceable><literal>-*</literal>,
414       to make it clearer that multiple packages are being matched.</para>
415
416     <variablelist>
417       <varlistentry>
418         <term><literal>ghc-pkg register <replaceable>file</replaceable></literal></term>
419         <listitem>
420           <para>Reads a package specification from
421             <replaceable>file</replaceable> (which may be &ldquo;<literal>-</literal>&rdquo;
422             to indicate standard input),
423             and adds it to the database of installed packages.  The syntax of
424             <replaceable>file</replaceable> is given in <xref
425               linkend="installed-pkg-info" />.</para>
426
427           <para>The package specification must be a package that isn't already
428             installed.</para>
429         </listitem>
430       </varlistentry>
431
432       <varlistentry>
433         <term><literal>ghc-pkg update <replaceable>file</replaceable></literal></term>
434         <listitem>
435           <para>The same as <literal>register</literal>, except that if a
436             package of the same name is already installed, it is
437             replaced by the new one.</para>
438         </listitem>
439       </varlistentry>
440
441       <varlistentry>
442         <term><literal>ghc-pkg unregister <replaceable>P</replaceable></literal></term>
443         <listitem>
444           <para>Remove the specified package from the database.</para>
445         </listitem>
446       </varlistentry>
447
448       <varlistentry>
449         <term><literal>ghc-pkg expose <replaceable>P</replaceable></literal></term>
450         <listitem>
451           <para>Sets the <literal>exposed</literal> flag for package
452             <replaceable>P</replaceable> to <literal>True</literal>.</para>
453         </listitem>
454       </varlistentry>
455
456       <varlistentry>
457         <term><literal>ghc-pkg hide <replaceable>P</replaceable></literal></term>
458         <listitem>
459           <para>Sets the <literal>exposed</literal> flag for package
460             <replaceable>P</replaceable> to <literal>False</literal>.</para>
461         </listitem>
462       </varlistentry>
463
464       <varlistentry>
465         <term><literal>ghc-pkg list [<replaceable>P</replaceable>] [<option>--simple-output</option>]</literal></term>
466         <listitem>
467           <para>This option displays the currently installed
468             packages, for each of the databases known to
469             <literal>ghc-pkg</literal>.  That includes the global database, the
470             user's local database, and any further files specified using the
471             <option>-f</option> option on the command line.</para>
472
473           <para>Hidden packages (those for which the <literal>exposed</literal>
474             flag is <literal>False</literal>) are shown in parentheses in the
475             list of packages.</para>
476
477           <para>If an optional package identifier <replaceable>P</replaceable>
478             is given, then only packages matching that identifier are
479             shown.</para>
480           
481           <para>If the option <option>--simple-output</option> is given, then
482             the packages are listed on a single line separated by spaces, and
483             the database names are not included.  This is intended to make it
484             easier to parse the output of <literal>ghc-pkg list</literal> using
485             a script.</para>
486         </listitem>
487       </varlistentry>
488
489       <varlistentry>
490         <term><literal>ghc-pkg latest <replaceable>P</replaceable></literal></term>
491         <listitem>
492           <para>Prints the latest available version of package
493             <replaceable>P</replaceable>.</para>
494         </listitem>
495       </varlistentry>
496
497       <varlistentry>
498         <term><literal>ghc-pkg describe <replaceable>P</replaceable></literal></term>
499         <listitem>
500           <para>Emit the full description of the specified package.  The
501             description is in the form of an
502             <literal>InstalledPackageInfo</literal>, the same as the input file
503             format for <literal>ghc-pkg register</literal>.  See <xref
504               linkend="installed-pkg-info" /> for details.</para>
505         </listitem>
506       </varlistentry>
507
508       <varlistentry>
509         <term><literal>ghc-pkg field <replaceable>P</replaceable> <replaceable>field</replaceable></literal></term>
510         <listitem>
511           <para>Show just a single field of the installed package description
512             for <literal>P</literal>.</para>
513         </listitem>
514       </varlistentry>
515     </variablelist>
516
517     <para>Additionally, the following flags are accepted by
518       <literal>ghc-pkg</literal>:</para>
519
520     <variablelist>
521       <varlistentry>
522         <term>
523           <option>&ndash;&ndash;auto-ghci-libs</option><indexterm><primary><option>&ndash;&ndash;auto-ghci-libs</option></primary>
524           </indexterm>
525         </term>
526         <listitem>
527           <para>Automatically generate the GHCi
528             <filename>.o</filename> version of each
529             <filename>.a</filename> Haskell library, using GNU ld (if
530             that is available).  Without this option,
531             <literal>ghc-pkg</literal> will warn if GHCi versions of
532             any Haskell libraries in the package don't exist.</para>
533             
534             <para>GHCi <literal>.o</literal> libraries don't
535             necessarily have to live in the same directory as the
536             corresponding <literal>.a</literal> library.  However,
537             this option will cause the GHCi library to be created in
538             the same directory as the <literal>.a</literal>
539             library.</para>
540         </listitem>
541       </varlistentry>
542
543       <varlistentry>
544         <term>
545           <option>-f</option> <replaceable>file</replaceable>
546           <indexterm><primary><option>-f</option></primary>
547           </indexterm>
548         </term>
549         <term>
550           <option>-package-conf</option> <replaceable>file</replaceable>
551           <indexterm><primary><option>-package-conf</option></primary>
552           </indexterm>
553         </term>
554         <listitem>
555           <para>Adds <replaceable>file</replaceable> to the stack of package
556             databases.  Additionally, <replaceable>file</replaceable> will
557             also be the database modified by a <literal>register</literal>,
558             <literal>unregister</literal>, <literal>expose</literal> or
559             <literal>hide</literal> command, unless it is overriden by a later
560             <option>--package-conf</option>, <option>--user</option> or
561             <option>--global</option> option.</para>
562         </listitem>
563       </varlistentry>
564
565       <varlistentry>
566         <term>
567           <option>&ndash;&ndash;force</option>
568           <indexterm><primary>
569               <option>&ndash;&ndash;force</option>
570             </primary></indexterm>
571         </term>
572         <listitem>
573           <para>Causes <literal>ghc-pkg</literal> to ignore missing
574             dependencies, directories and libraries when registering a package,
575             and just go ahead and add it anyway.  This might be useful if your
576             package installation system needs to add the package to
577             GHC before building and installing the files.</para>
578         </listitem>
579       </varlistentry>
580
581       <varlistentry>
582         <term>
583           <option>&ndash;&ndash;global</option><indexterm><primary><option>&ndash;&ndash;global</option></primary>
584           </indexterm>
585         </term>
586         <listitem>
587           <para>Operate on the global package database (this is the default).
588             This flag affects the <literal>register</literal>,
589             <literal>update</literal>, <literal>unregister</literal>,
590             <literal>expose</literal>, and <literal>hide</literal>
591             commands.</para>
592         </listitem>
593       </varlistentry>
594
595       <varlistentry>
596         <term>
597           <option>&ndash;&ndash;help</option><indexterm><primary><option>&ndash;&ndash;help</option></primary>
598           </indexterm>
599         </term>
600         <term>
601           <option>-?</option><indexterm><primary><option>-?</option></primary>
602           </indexterm>
603         </term>
604         <listitem>
605           <para>Outputs the command-line syntax.</para>
606         </listitem>
607       </varlistentry>
608
609       <varlistentry>
610         <term>
611           <option>&ndash;&ndash;user</option><indexterm><primary><option>&ndash;&ndash;user</option></primary>
612           </indexterm>
613         </term>
614         <listitem>
615           <para>Operate on the current user's local package database.
616             This flag affects the <literal>register</literal>,
617             <literal>update</literal>, <literal>unregister</literal>,
618             <literal>expose</literal>, and <literal>hide</literal>
619             commands.</para>
620         </listitem>
621       </varlistentry>
622
623       <varlistentry>
624         <term>
625           <option>-V</option><indexterm><primary><option>-V</option></primary>
626           </indexterm>
627         </term>
628         <term>
629           <option>&ndash;&ndash;version</option><indexterm><primary><option>&ndash;&ndash;version</option></primary>
630           </indexterm>
631         </term>
632         <listitem>
633           <para>Output the <literal>ghc-pkg</literal> version number.</para>
634         </listitem>
635       </varlistentry>
636     </variablelist>
637
638     <para>When modifying the package database
639       <replaceable>file</replaceable>, a copy of the original file is
640       saved in <replaceable>file</replaceable><literal>.old</literal>,
641       so in an emergency you can always restore the old settings by
642       copying the old file back again.</para>
643
644   </sect2>
645   
646   <sect2 id="installed-pkg-info">
647     <title>
648       <literal>InstalledPackageInfo</literal>: a package specification
649     </title>
650
651     <para>A package specification is a Haskell record; in particular, it is the
652       record <ulink
653         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>
654
655     <para>An <literal>InstalledPackageInfo</literal> has a human
656       readable/writable syntax.  The functions
657       <literal>parseInstalledPackageInfo</literal> and
658       <literal>showInstalledPackageInfo</literal> read and write this syntax
659       respectively.  Here's an example of the
660       <literal>InstalledPackageInfo</literal> for the <literal>unix</literal> package:</para>
661
662 <screen>
663 $ ghc-pkg describe unix
664 name: unix
665 version: 1.0
666 license: BSD3
667 copyright:
668 maintainer: libraries@haskell.org
669 stability:
670 homepage:
671 package-url:
672 description:
673 category:
674 author:
675 exposed: True
676 exposed-modules: System.Posix,
677                  System.Posix.DynamicLinker.Module,
678                  System.Posix.DynamicLinker.Prim,
679                  System.Posix.Directory,
680                  System.Posix.DynamicLinker,
681                  System.Posix.Env,
682                  System.Posix.Error,
683                  System.Posix.Files,
684                  System.Posix.IO,
685                  System.Posix.Process,
686                  System.Posix.Resource,
687                  System.Posix.Temp,
688                  System.Posix.Terminal,
689                  System.Posix.Time,
690                  System.Posix.Unistd,
691                  System.Posix.User,
692                  System.Posix.Signals.Exts
693 import-dirs: /usr/lib/ghc-6.4/libraries/unix
694 library-dirs: /usr/lib/ghc-6.4/libraries/unix
695 hs-libraries: HSunix
696 extra-libraries: HSunix_cbits, dl
697 include-dirs: /usr/lib/ghc-6.4/libraries/unix/include
698 includes: HsUnix.h
699 depends: base-1.0
700 </screen>
701
702     <para>The full <ulink url="../Cabal/index.html">Cabal documentation</ulink>
703       is still in preparation (at time of writing), so in the meantime
704       here is a brief description of the syntax of this file:</para>
705
706     <para>A package description consists of a number of field/value pairs.  A
707       field starts with the field name in the left-hand column followed by a
708       &ldquo;<literal>:</literal>&rdquo;, and the value continues until the next line that begins in the
709       left-hand column, or the end of file.</para>
710
711     <para>The syntax of the value depends on the field.   The various field
712       types are:</para>
713
714     <variablelist>
715       <varlistentry>
716         <term>freeform</term>
717         <listitem>
718           <para>Any arbitrary string, no interpretation or parsing is
719             done.</para>
720         </listitem>
721       </varlistentry>
722       <varlistentry>
723         <term>string</term>
724         <listitem>
725           <para>A sequence of non-space characters, or a sequence of arbitrary
726             characters surrounded by quotes <literal>"...."</literal>.</para>
727         </listitem>
728       </varlistentry>
729       <varlistentry>
730         <term>string list</term>
731         <listitem>
732           <para>A sequence of strings, separated by commas.  The sequence may
733             be empty.</para>
734         </listitem>
735       </varlistentry>
736     </variablelist>
737
738     <para>In addition, there are some fields with special syntax (e.g. package
739       names, version, dependencies).</para>
740
741     <para>The allowed fields, with their types, are:</para>
742         
743     <variablelist>
744       <varlistentry>
745         <term>
746           <literal>name</literal>
747           <indexterm><primary><literal>name</literal></primary><secondary>package specification</secondary></indexterm>
748         </term>
749         <listitem>
750           <para>The package's name (without the version).</para>
751         </listitem>
752       </varlistentry>
753       
754       <varlistentry>
755         <term>
756           <literal>version</literal>
757           <indexterm><primary><literal>version</literal></primary><secondary>package specification</secondary></indexterm>
758         </term>
759         <listitem>
760           <para>The package's version, usually in the form
761             <literal>A.B</literal> (any number of components are allowed).</para>
762         </listitem>
763       </varlistentry>
764       
765       <varlistentry>
766         <term>
767           <literal>license</literal>
768           <indexterm><primary><literal>auto</literal></primary><secondary>package specification</secondary></indexterm>
769         </term>
770         <listitem>
771           <para>(string) The type of license under which this package is distributed.
772             This field is a value of the <ulink
773         url="../libraries/Cabal/Distribution-License.html#t:License"><literal>License</literal></ulink> type.</para>
774         </listitem>
775       </varlistentry>
776
777         <varlistentry>
778           <term>
779             <literal>license-file</literal>
780             <indexterm><primary><literal>license-file</literal></primary><secondary>package specification</secondary></indexterm>
781           </term>
782           <listitem>
783             <para>(optional string) The name of a file giving detailed license
784             information for this package.</para>
785           </listitem>
786         </varlistentry>
787
788         <varlistentry>
789           <term>
790             <literal>copyright</literal>
791             <indexterm><primary><literal>copyright</literal></primary><secondary>package specification</secondary></indexterm>
792           </term>
793           <listitem>
794             <para>(optional freeform) The copyright string.</para>
795           </listitem>
796         </varlistentry>
797
798         <varlistentry>
799           <term>
800             <literal>maintainer</literal>
801             <indexterm><primary><literal>maintainer</literal></primary><secondary>package specification</secondary></indexterm>
802           </term>
803           <listitem>
804             <para>(optinoal freeform) The email address of the package's maintainer.</para>
805           </listitem>
806         </varlistentry>
807
808         <varlistentry>
809           <term>
810             <literal>stability</literal>
811             <indexterm><primary><literal>stability</literal></primary><secondary>package specification</secondary></indexterm>
812           </term>
813           <listitem>
814             <para>(optional freeform) A string describing the stability of the package
815             (eg. stable, provisional or experimental).</para>
816           </listitem>
817         </varlistentry>
818
819         <varlistentry>
820           <term>
821             <literal>homepage</literal>
822             <indexterm><primary><literal>homepage</literal></primary><secondary>package specification</secondary></indexterm>
823           </term>
824           <listitem>
825             <para>(optional freeform) URL of the package's home page.</para>
826           </listitem>
827         </varlistentry>
828
829       <varlistentry>
830         <term>
831             <literal>package-url</literal>
832             <indexterm><primary><literal>package-url</literal></primary><secondary>package specification</secondary></indexterm>
833           </term>
834           <listitem>
835             <para>(optional freeform) URL of a downloadable distribution for this
836             package.  The distribution should be a Cabal package.</para>
837           </listitem>
838         </varlistentry>
839
840         <varlistentry>
841           <term>
842             <literal>description</literal>
843             <indexterm><primary><literal>description</literal></primary><secondary>package specification</secondary></indexterm>
844           </term>
845           <listitem>
846             <para>(optional freeform) Description of the package.</para>
847           </listitem>
848         </varlistentry>
849
850       <varlistentry>
851           <term>
852             <literal>category</literal>
853             <indexterm><primary><literal>category</literal></primary><secondary>package specification</secondary></indexterm>
854           </term>
855           <listitem>
856             <para>(optinoal freeform) Which category the package belongs to.  This field
857             is for use in conjunction with a future centralised package
858             distribution framework, tentatively titled Hackage.</para>
859           </listitem>
860         </varlistentry>
861
862         <varlistentry>
863           <term>
864             <literal>author</literal>
865             <indexterm><primary><literal>author</literal></primary><secondary>package specification</secondary></indexterm>
866           </term>
867           <listitem>
868             <para>(optional freeform) Author of the package.</para>
869           </listitem>
870         </varlistentry>
871
872         <varlistentry>
873           <term>
874             <literal>exposed</literal>
875             <indexterm><primary><literal>exposed</literal></primary><secondary>package specification</secondary></indexterm>
876           </term>
877           <listitem>
878             <para>(bool) Whether the package is exposed or not.</para>
879           </listitem>
880         </varlistentry>
881
882         <varlistentry>
883           <term>
884             <literal>exposed-modules</literal>
885             <indexterm><primary><literal>exposed-modules</literal></primary><secondary>package specification</secondary></indexterm>
886           </term>
887           <listitem>
888             <para>(string list) modules exposed by this package.</para>
889           </listitem>
890         </varlistentry>
891
892         <varlistentry>
893           <term>
894             <literal>hidden-modules</literal>
895             <indexterm><primary><literal>hidden-modules</literal></primary><secondary>package specification</secondary></indexterm>
896           </term>
897           <listitem>
898             <para>(string list) modules provided by this package,
899             but not exposed to the programmer.  These modules cannot be
900             imported, but they are still subject to the overlapping constraint:
901             no other package in the same program may provide a module of the
902             same name.</para>
903         </listitem>
904         </varlistentry>
905
906         <varlistentry>
907           <term>
908             <literal>import-dirs</literal>
909             <indexterm><primary><literal>import-dirs</literal></primary><secondary>package specification</secondary></indexterm>
910           </term>
911           <listitem>
912             <para>(string list) A list of directories containing interface files
913             (<literal>.hi</literal> files) for this package.</para>
914
915             <para>If the package contains profiling libraries, then
916             the interface files for those library modules should have
917             the suffix <literal>.p_hi</literal>.  So the package can
918             contain both normal and profiling versions of the same
919             library without conflict (see also
920             <literal>library_dirs</literal> below).</para>
921           </listitem>
922         </varlistentry>
923
924         <varlistentry>
925           <term>
926             <literal>library-dirs</literal>
927             <indexterm><primary><literal>library-dirs</literal></primary><secondary>package specification</secondary></indexterm>
928           </term>
929           <listitem>
930             <para>(string list) A list of directories containing libraries for this
931             package.</para>
932           </listitem>
933         </varlistentry>
934
935         <varlistentry>
936           <term>
937             <literal>hs-libraries</literal>
938             <indexterm><primary><literal>hs-libraries</literal></primary><secondary>package specification</secondary></indexterm>
939           </term>
940           <listitem>
941             <para>(string list) A list of libraries containing Haskell code for this
942             package, with the <literal>.a</literal> or
943             <literal>.dll</literal> suffix omitted.  When packages are
944             built as libraries, the
945             <literal>lib</literal> prefix is also omitted.</para>
946
947             <para>For use with GHCi, each library should have an
948             object file too.  The name of the object file does
949             <emphasis>not</emphasis> have a <literal>lib</literal>
950             prefix, and has the normal object suffix for your
951             platform.</para>
952
953             <para>For example, if we specify a Haskell library as
954             <filename>HSfoo</filename> in the package spec, then the
955             various flavours of library that GHC actually uses will be
956             called:</para>
957             <variablelist>
958               <varlistentry>
959                 <term><filename>libHSfoo.a</filename></term>
960                 <listitem>
961                   <para>The name of the library on Unix and Windows
962                   (mingw) systems.  Note that we don't support
963                   building dynamic libraries of Haskell code on Unix
964                   systems.</para>
965                 </listitem>
966               </varlistentry>
967               <varlistentry>
968                 <term><filename>HSfoo.dll</filename></term>
969                 <listitem>
970                   <para>The name of the dynamic library on Windows
971                   systems (optional).</para>
972                 </listitem>
973               </varlistentry>
974               <varlistentry>
975                 <term><filename>HSfoo.o</filename></term>
976                 <term><filename>HSfoo.obj</filename></term>
977                 <listitem>
978                   <para>The object version of the library used by
979                   GHCi.</para>
980                 </listitem>
981               </varlistentry>
982             </variablelist>
983           </listitem>
984         </varlistentry>
985
986         <varlistentry>
987           <term>
988             <literal>extra-libraries</literal>
989             <indexterm><primary><literal>extra-libraries</literal></primary><secondary>package specification</secondary></indexterm>
990           </term>
991           <listitem>
992             <para>(string list) A list of extra libraries for this package.  The
993             difference between <literal>hs-libraries</literal> and
994             <literal>extra-libraries</literal> is that
995             <literal>hs-libraries</literal> normally have several
996             versions, to support profiling, parallel and other build
997             options.  The various versions are given different
998             suffixes to distinguish them, for example the profiling
999             version of the standard prelude library is named
1000             <filename>libHSbase_p.a</filename>, with the
1001             <literal>_p</literal> indicating that this is a profiling
1002             version.  The suffix is added automatically by GHC for
1003             <literal>hs-libraries</literal> only, no suffix is added
1004             for libraries in
1005             <literal>extra-libraries</literal>.</para>
1006
1007             <para>The libraries listed in
1008             <literal>extra-libraries</literal> may be any libraries
1009             supported by your system's linker, including dynamic
1010             libraries (<literal>.so</literal> on Unix,
1011             <literal>.DLL</literal> on Windows).</para>
1012
1013             <para>Also, <literal>extra-libraries</literal> are placed
1014             on the linker command line after the
1015             <literal>hs-libraries</literal> for the same package.  If
1016             your package has dependencies in the other direction (i.e.
1017             <literal>extra-libraries</literal> depends on
1018             <literal>hs-libraries</literal>), and the libraries are
1019             static, you might need to make two separate
1020             packages.</para>
1021           </listitem>
1022         </varlistentry>
1023
1024         <varlistentry>
1025           <term>
1026             <literal>include-dirs</literal>
1027             <indexterm><primary><literal>include-dirs</literal></primary><secondary>package specification</secondary></indexterm>
1028           </term>
1029           <listitem>
1030             <para>(string list) A list of directories containing C includes for this
1031             package.</para>
1032           </listitem>
1033         </varlistentry>
1034
1035         <varlistentry>
1036           <term>
1037            <literal>includes</literal>
1038            <indexterm><primary><literal>includes</literal></primary><secondary>package specification</secondary></indexterm>
1039           </term>
1040           <listitem>
1041             <para>(string list) A list of files to include for via-C compilations
1042             using this package.  Typically the include file(s) will
1043             contain function prototypes for any C functions used in
1044             the package, in case they end up being called as a result
1045             of Haskell functions from the package being
1046             inlined.</para>
1047           </listitem>
1048         </varlistentry>
1049
1050         <varlistentry>
1051           <term>
1052             <literal>depends</literal>
1053             <indexterm><primary><literal>depends</literal></primary><secondary>package specification</secondary></indexterm>
1054           </term>
1055           <listitem>
1056             <para>(package name list) Packages on which this package depends.  This field contains
1057             packages with explicit versions are required, except that when
1058             submitting a package to <literal>ghc-pkg register</literal>, the
1059             versions will be filled in if they are unambiguous.</para>
1060           </listitem>
1061         </varlistentry>
1062
1063         <varlistentry>
1064           <term>
1065             <literal>hugs-options</literal>
1066             <indexterm><primary><literal>hugs-options</literal></primary><secondary>package specification</secondary></indexterm>
1067           </term>
1068           <listitem>
1069             <para>(string list) Options to pass to Hugs for this package.</para>
1070           </listitem>
1071         </varlistentry>
1072
1073         <varlistentry>
1074           <term>
1075             <literal>cc-options</literal>
1076             <indexterm><primary><literal>cc-options</literal></primary><secondary>package specification</secondary></indexterm>
1077           </term>
1078           <listitem>
1079             <para>(string list) Extra arguments to be added to the gcc command line
1080             when this package is being used (only for via-C
1081             compilations).</para>
1082           </listitem>
1083         </varlistentry>
1084
1085         <varlistentry>
1086           <term>
1087             <literal>ld-options</literal>
1088             <indexterm><primary><literal>ld-options</literal></primary><secondary>package specification</secondary></indexterm>
1089           </term>
1090           <listitem>
1091             <para>(string list) Extra arguments to be added to the
1092             <command>gcc</command> command line (for linking) when
1093             this package is being used.</para>
1094           </listitem>
1095         </varlistentry>
1096         
1097         <varlistentry>
1098           <term>
1099             <literal>framework-dirs</literal>
1100             <indexterm><primary><literal>framework-dirs</literal></primary><secondary>package specification</secondary></indexterm>
1101           </term>
1102           <listitem>
1103             <para>(string list) On Darwin/MacOS X, a list of directories containing
1104             frameworks for this package. This corresponds to the
1105             <option>-framework-path</option> option. It is ignored on all other
1106             platforms.</para>
1107           </listitem>
1108         </varlistentry>
1109
1110         <varlistentry>
1111           <term>
1112             <literal>frameworks</literal>
1113             <indexterm><primary><literal>frameworks</literal></primary><secondary>package specification</secondary></indexterm>
1114           </term>
1115           <listitem>
1116             <para>(string list) On Darwin/MacOS X, a list of frameworks to link to. This
1117             corresponds to the <option>-framework</option> option. Take a look
1118             at Apple's developer documentation to find out what frameworks
1119             actually are. This entry is ignored on all other platforms.</para>
1120           </listitem>
1121         </varlistentry>
1122
1123         <varlistentry>
1124           <term>
1125             <literal>haddock-interfaces</literal>
1126             <indexterm><primary><literal>haddock-interfaces</literal></primary><secondary>package specification</secondary></indexterm>
1127           </term>
1128           <listitem>
1129             <para>(string list) A list of filenames containing <ulink
1130               url="http://www.haskell.org/haddock/">Haddock</ulink> interface
1131             files (<literal>.haddock</literal> files) for this package.</para>
1132           </listitem>
1133         </varlistentry>
1134
1135         <varlistentry>
1136           <term>
1137             <literal>haddock-html</literal>
1138             <indexterm><primary><literal>haddock-html</literal></primary><secondary>package specification</secondary></indexterm>
1139           </term>
1140           <listitem>
1141             <para>(optional string) The directory containing the Haddock-generated HTML
1142             for this package.</para>
1143           </listitem>
1144         </varlistentry>
1145       </variablelist>
1146       
1147 <!--  This isn't true any more.  I'm not sure if we still need it -SDM
1148       <para>
1149       The <literal>ghc-pkg</literal> tool performs expansion of
1150       environment variables occurring in input package specifications.
1151       So, if the <literal>mypkg</literal> was added to the package
1152       database as follows:
1153       </para>
1154 <screen>
1155   $ installdir=/usr/local/lib ghc-pkg -a &lt; mypkg.pkg
1156 </screen>
1157
1158       <para>
1159       The occurrence of <literal>${installdir}</literal> is replaced
1160       with <literal>/usr/local/lib</literal> in the package data that
1161       is added for <literal>mypkg</literal>.
1162       </para>
1163       
1164       <para>
1165       This feature enables the distribution of package specification
1166       files that can be easily configured when installing.
1167       </para>
1168
1169       <para>For examples of more package specifications, take a look
1170       at the <literal>package.conf</literal> in your GHC
1171       installation.</para>
1172
1173 -->
1174
1175     </sect2>
1176   </sect1>
1177
1178 <!-- Emacs stuff:
1179      ;;; Local Variables: ***
1180      ;;; mode: xml ***
1181      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter" "sect1") ***
1182      ;;; End: ***
1183  -->