1 <?xml version="1.0" encoding="iso-8859-1"?>
6 <indexterm><primary>packages</primary></indexterm>
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>
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>
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>,
27 <sect2 id="using-packages">
30 <indexterm><primary>packages</primary>
31 <secondary>using</secondary></indexterm>
33 <para>To see which packages are installed, use the
34 <literal>ghc-pkg</literal> command:</para>
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
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
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>
59 <para>To see which modules are exposed by a package:</para>
62 $ ghc-pkg field network exposed-modules
63 exposed-modules: Network.BSD,
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>
76 <para>The GHC command line options that control packages are:</para>
81 <option>-package <replaceable>P</replaceable></option>
82 <indexterm><primary><option>-package</option></primary></indexterm>
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
92 <para>If there are multiple versions of <replaceable>P</replaceable>
93 installed, then all other versions will become hidden.</para>
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>––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>
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:
109 <screen>$ ghc -o myprog Foo.o Main.o -package network</screen>
111 The same flag is necessary even if we compiled the modules from
112 source, because GHC still reckons it's in batch mode:
114 <screen>$ ghc -o myprog Foo.hs Main.hs -package network</screen>
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>
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
130 <term><option>-hide-all-packages</option>
131 <indexterm><primary><option>-hide-package</option></primary>
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>
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>
147 <term><option>-hide-package</option> <replaceable>P</replaceable>
148 <indexterm><primary><option>-hide-package</option></primary>
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>
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>
163 <term><option>-ignore-package</option> <replaceable>P</replaceable>
164 <indexterm><primary><option>-ignore-package</option></primary>
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>
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
183 <sect2 id="package-overlaps">
184 <title>The module overlap restriction</title>
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>
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>
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>
207 <sect2 id="package-databases">
208 <title>Package Databases</title>
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>
216 <para>The global package database, which comes with your GHC
220 <para>A package database private to each user. On Unix
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 And 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>
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>
236 <para>Package databases may overlap: for example, packages in the user
237 database will override those of the same name in the global
240 <para>You can control the loading of package databses using the following
246 <option>-package-conf <replaceable>file</replaceable></option>
247 <indexterm><primary><option>-package-conf</option></primary></indexterm>
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
259 <term><option>-no-user-package-conf</option>
260 <indexterm><primary><option>-no-user-package-conf</option></primary>
264 <para>Prevent loading of the user's local package database.</para>
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>
277 <sect2 id="building-packages">
278 <title>Building a package from Haskell source</title>
279 <indexterm><primary>packages</primary>
280 <secondary>building</secondary></indexterm>
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>
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>
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>
310 <para>Building a static library is done by using the
311 <literal>ar</literal> tool, like so:</para>
313 <screen>ar cqs libHSfoo.a A.o B.o C.o ...</screen>
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
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
333 <screen>ld -r ––whole-archive -o HSfoo.o libHSfoo.a</screen>
336 <literal>––--whole-archive</literal> with
337 <literal>–all_load</literal> on MacOS X)</para>
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>
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>
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>
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>
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
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 if
375 there is only a single version of that package installed. Additionally,
376 the version may be given as <literal>*</literal>, which means “all
377 versions”. For example, <literal>ghc-pkg hide network-*</literal>
378 would hide all versions of the network package.</para>
382 <term><literal>ghc-pkg register <replaceable>file</replaceable></literal></term>
384 <para>Reads a package specification from
385 <replaceable>file</replaceable> (which may be “<literal>-</literal>”
386 to indicate standard input),
387 and adds it to the database of installed packages. The syntax of
388 <replaceable>file</replaceable> is given in <xref
389 linkend="installed-pkg-info" />.</para>
391 <para>The package specification must be a package that isn't already
397 <term><literal>ghc-pkg update <replaceable>file</replaceable></literal></term>
399 <para>The same as <literal>register</literal>, except that if a
400 package of the same name is already installed, it is
401 replaced by the new one.</para>
406 <term><literal>ghc-pkg unregister <replaceable>P</replaceable></literal></term>
408 <para>Remove the specified package from the database.</para>
413 <term><literal>ghc-pkg expose <replaceable>P</replaceable></literal></term>
415 <para>Sets the <literal>exposed</literal> flag for package
416 <replaceable>P</replaceable> to <literal>True</literal>.</para>
421 <term><literal>ghc-pkg hide <replaceable>P</replaceable></literal></term>
423 <para>Sets the <literal>exposed</literal> flag for package
424 <replaceable>P</replaceable> to <literal>False</literal>.</para>
429 <term><literal>ghc-pkg list</literal></term>
431 <para>This option displays the currently installed
432 packages, for each of the databases known to
433 <literal>ghc-pkg</literal>. That includes the global database, the
434 user's local database (if <option>--user</option> is given), and
435 any further files specified using the <option>-f</option> option on
436 the command line.</para>
438 <para>Hidden packages (those for which the <literal>exposed</literal>
439 flag is <literal>False</literal>) are shown in parentheses in the
440 list of packages.</para>
445 <term><literal>ghc-pkg describe <replaceable>P</replaceable></literal></term>
447 <para>Emit the full description of the specified package. The
448 description is in the form of an
449 <literal>InstalledPackageInfo</literal>, the same as the input file
450 format for <literal>ghc-pkg register</literal>. See <xref
451 linkend="installed-pkg-info" /> for details.</para>
456 <term><literal>ghc-pkg field <replaceable>P</replaceable> <replaceable>field</replaceable></literal></term>
458 <para>Show just a single field of the installed package description
459 for <literal>P</literal>.</para>
464 <para>Additionally, the following flags are accepted by
465 <literal>ghc-pkg</literal>:</para>
470 <option>––auto-ghci-libs</option><indexterm><primary><option>––user</option></primary>
474 <para>Automatically generate the GHCi
475 <filename>.o</filename> version of each
476 <filename>.a</filename> Haskell library, using GNU ld (if
477 that is available). Without this option,
478 <literal>ghc-pkg</literal> will warn if GHCi versions of
479 any Haskell libraries in the package don't exist.</para>
481 <para>GHCi <literal>.o</literal> libraries don't
482 necessarily have to live in the same directory as the
483 corresponding <literal>.a</literal> library. However,
484 this option will cause the GHCi library to be created in
485 the same directory as the <literal>.a</literal>
492 <option>-f</option> <replaceable>file</replaceable>
493 <indexterm><primary><option>-f</option></primary>
497 <option>-package-conf</option> <replaceable>file</replaceable>
498 <indexterm><primary><option>-package-conf</option></primary>
502 <para>Operate on the package database in
503 <replaceable>file</replaceable>.</para>
505 <para>When multiple <option>-f</option> options are given, or
506 <option>-f</option> is used in conjunction with
507 <option>--user</option> or <option>--global</option>, the last
508 one on the command-line is the one that will be modified.</para>
514 <option>––force</option>
516 <option>––force</option>
517 </primary></indexterm>
520 <para>Causes <literal>ghc-pkg</literal> to ignore missing
521 dependencies, directories and libraries when registering a package,
522 and just go ahead and add it anyway. This might be useful if your
523 package installation system needs to add the package to
524 GHC before building and installing the files.</para>
530 <option>––global</option><indexterm><primary><option>––user</option></primary>
534 <para>Operate on the global package database (this is the default).
535 This flag affects the <literal>register</literal>,
536 <literal>update</literal>, <literal>unregister</literal>,
537 <literal>expose</literal>, and <literal>hide</literal>
544 <option>––help</option><indexterm><primary><option>––user</option></primary>
548 <option>-?</option><indexterm><primary><option>-?</option></primary>
552 <para>Outputs the command-line syntax.</para>
558 <option>––user</option><indexterm><primary><option>––user</option></primary>
562 <para>Operate on the current user's local package database.
563 This flag affects the <literal>register</literal>,
564 <literal>update</literal>, <literal>unregister</literal>,
565 <literal>expose</literal>, and <literal>hide</literal>
572 <option>-V</option><indexterm><primary><option>-V</option></primary>
576 <option>––version</option><indexterm><primary><option>––user</option></primary>
580 <para>Output the <literal>ghc-pkg</literal> version number.</para>
585 <para>When modifying the package database
586 <replaceable>file</replaceable>, a copy of the original file is
587 saved in <replaceable>file</replaceable><literal>.old</literal>,
588 so in an emergency you can always restore the old settings by
589 copying the old file back again.</para>
593 <sect2 id="installed-pkg-info">
595 <literal>InstalledPackageInfo</literal>: a package specification
598 <para>A package specification is a Haskell record; in particular, it is the
600 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>
602 <para>An <literal>InstalledPackageInfo</literal> has a human
603 readable/writable syntax. The functions
604 <literal>parseInstalledPackageInfo</literal> and
605 <literal>showInstalledPackageInfo</literal> read and write this syntax
606 respectively. Here's an example of the
607 <literal>InstalledPackageInfo</literal> for the <literal>unix</literal> package:</para>
610 $ ghc-pkg describe unix
615 maintainer: libraries@haskell.org
623 exposed-modules: System.Posix,
624 System.Posix.DynamicLinker.Module,
625 System.Posix.DynamicLinker.Prim,
626 System.Posix.Directory,
627 System.Posix.DynamicLinker,
632 System.Posix.Process,
633 System.Posix.Resource,
635 System.Posix.Terminal,
639 System.Posix.Signals.Exts
640 import-dirs: /usr/lib/ghc-6.4/libraries/unix
641 library-dirs: /usr/lib/ghc-6.4/libraries/unix
643 extra-libraries: HSunix_cbits, dl
644 include-dirs: /usr/lib/ghc-6.4/libraries/unix/include
649 <para>The full <ulink url="../Cabal/index.html">Cabal documentation</ulink>
650 is still in preparation (at time of writing), so in the meantime
651 here is a brief description of the syntax of this file:</para>
653 <para>A package description consists of a number of field/value pairs. A
654 field starts with the field name in the left-hand column followed by a
655 “<literal>:</literal>”, and the value continues until the next line that begins in the
656 left-hand column, or the end of file.</para>
658 <para>The syntax of the value depends on the field. The various field
663 <term>freeform</term>
665 <para>Any arbitrary string, no interpretation or parsing is
672 <para>A sequence of non-space characters, or a sequence of arbitrary
673 characters surrounded by quotes <literal>"...."</literal>.</para>
677 <term>string list</term>
679 <para>A sequence of strings, separated by commas. The sequence may
685 <para>In addition, there are some fields with special syntax (e.g. package
686 names, version, dependencies).</para>
688 <para>The allowed fields, with their types, are:</para>
693 <literal>name</literal>
694 <indexterm><primary><literal>name</literal></primary><secondary>package specification</secondary></indexterm>
697 <para>The package's name (without the version).</para>
703 <literal>version</literal>
704 <indexterm><primary><literal>version</literal></primary><secondary>package specification</secondary></indexterm>
707 <para>The package's version, usually in the form
708 <literal>A.B</literal> (any number of components are allowed).</para>
714 <literal>license</literal>
715 <indexterm><primary><literal>auto</literal></primary><secondary>package specification</secondary></indexterm>
718 <para>(string) The type of license under which this package is distributed.
719 This field is a value of the <ulink
720 url="../libraries/Cabal/Distribution.License.html#t:License"><literal>License</literal></ulink> type.</para>
726 <literal>license-file</literal>
727 <indexterm><primary><literal>license-file</literal></primary><secondary>package specification</secondary></indexterm>
730 <para>(optional string) The name of a file giving detailed license
731 information for this package.</para>
737 <literal>copyright</literal>
738 <indexterm><primary><literal>copyright</literal></primary><secondary>package specification</secondary></indexterm>
741 <para>(optional freeform) The copyright string.</para>
747 <literal>maintainer</literal>
748 <indexterm><primary><literal>maintainer</literal></primary><secondary>package specification</secondary></indexterm>
751 <para>(optinoal freeform) The email address of the package's maintainer.</para>
757 <literal>stability</literal>
758 <indexterm><primary><literal>stability</literal></primary><secondary>package specification</secondary></indexterm>
761 <para>(optional freeform) A string describing the stability of the package
762 (eg. stable, provisional or experimental).</para>
768 <literal>homepage</literal>
769 <indexterm><primary><literal>homepage</literal></primary><secondary>package specification</secondary></indexterm>
772 <para>(optional freeform) URL of the package's home page.</para>
778 <literal>package-url</literal>
779 <indexterm><primary><literal>package-url</literal></primary><secondary>package specification</secondary></indexterm>
782 <para>(optional freeform) URL of a downloadable distribution for this
783 package. The distribution should be a Cabal package.</para>
789 <literal>description</literal>
790 <indexterm><primary><literal>description</literal></primary><secondary>package specification</secondary></indexterm>
793 <para>(optional freeform) Description of the package.</para>
799 <literal>category</literal>
800 <indexterm><primary><literal>category</literal></primary><secondary>package specification</secondary></indexterm>
803 <para>(optinoal freeform) Which category the package belongs to. This field
804 is for use in conjunction with a future centralised package
805 distribution framework, tentatively titled Hackage.</para>
811 <literal>author</literal>
812 <indexterm><primary><literal>author</literal></primary><secondary>package specification</secondary></indexterm>
815 <para>(optional freeform) Author of the package.</para>
821 <literal>exposed</literal>
822 <indexterm><primary><literal>exposed</literal></primary><secondary>package specification</secondary></indexterm>
825 <para>(bool) Whether the package is exposed or not.</para>
831 <literal>exposed-modules</literal>
832 <indexterm><primary><literal>exposed-modules</literal></primary><secondary>package specification</secondary></indexterm>
835 <para>(string list) modules exposed by this package.</para>
841 <literal>hidden-modules</literal>
842 <indexterm><primary><literal>hidden-modules</literal></primary><secondary>package specification</secondary></indexterm>
845 <para>(string list) modules provided by this package,
846 but not exposed to the programmer. These modules cannot be
847 imported, but they are still subject to the overlapping constraint:
848 no other package in the same program may provide a module of the
855 <literal>import-dirs</literal>
856 <indexterm><primary><literal>import-dirs</literal></primary><secondary>package specification</secondary></indexterm>
859 <para>(string list) A list of directories containing interface files
860 (<literal>.hi</literal> files) for this package.</para>
862 <para>If the package contains profiling libraries, then
863 the interface files for those library modules should have
864 the suffix <literal>.p_hi</literal>. So the package can
865 contain both normal and profiling versions of the same
866 library without conflict (see also
867 <literal>library_dirs</literal> below).</para>
873 <literal>library-dirs</literal>
874 <indexterm><primary><literal>library-dirs</literal></primary><secondary>package specification</secondary></indexterm>
877 <para>(string list) A list of directories containing libraries for this
884 <literal>hs-libraries</literal>
885 <indexterm><primary><literal>hs-libraries</literal></primary><secondary>package specification</secondary></indexterm>
888 <para>(string list) A list of libraries containing Haskell code for this
889 package, with the <literal>.a</literal> or
890 <literal>.dll</literal> suffix omitted. When packages are
891 built as libraries, the
892 <literal>lib</literal> prefix is also omitted.</para>
894 <para>For use with GHCi, each library should have an
895 object file too. The name of the object file does
896 <emphasis>not</emphasis> have a <literal>lib</literal>
897 prefix, and has the normal object suffix for your
900 <para>For example, if we specify a Haskell library as
901 <filename>HSfoo</filename> in the package spec, then the
902 various flavours of library that GHC actually uses will be
906 <term><filename>libHSfoo.a</filename></term>
908 <para>The name of the library on Unix and Windows
909 (mingw) systems. Note that we don't support
910 building dynamic libraries of Haskell code on Unix
915 <term><filename>HSfoo.dll</filename></term>
917 <para>The name of the dynamic library on Windows
918 systems (optional).</para>
922 <term><filename>HSfoo.o</filename></term>
923 <term><filename>HSfoo.obj</filename></term>
925 <para>The object version of the library used by
935 <literal>extra-libraries</literal>
936 <indexterm><primary><literal>extra-libraries</literal></primary><secondary>package specification</secondary></indexterm>
939 <para>(string list) A list of extra libraries for this package. The
940 difference between <literal>hs-libraries</literal> and
941 <literal>extra-libraries</literal> is that
942 <literal>hs-libraries</literal> normally have several
943 versions, to support profiling, parallel and other build
944 options. The various versions are given different
945 suffixes to distinguish them, for example the profiling
946 version of the standard prelude library is named
947 <filename>libHSbase_p.a</filename>, with the
948 <literal>_p</literal> indicating that this is a profiling
949 version. The suffix is added automatically by GHC for
950 <literal>hs-libraries</literal> only, no suffix is added
952 <literal>extra-libraries</literal>.</para>
954 <para>The libraries listed in
955 <literal>extra-libraries</literal> may be any libraries
956 supported by your system's linker, including dynamic
957 libraries (<literal>.so</literal> on Unix,
958 <literal>.DLL</literal> on Windows).</para>
960 <para>Also, <literal>extra-libraries</literal> are placed
961 on the linker command line after the
962 <literal>hs-libraries</literal> for the same package. If
963 your package has dependencies in the other direction (i.e.
964 <literal>extra-libraries</literal> depends on
965 <literal>hs-libraries</literal>), and the libraries are
966 static, you might need to make two separate
973 <literal>include-dirs</literal>
974 <indexterm><primary><literal>include-dirs</literal></primary><secondary>package specification</secondary></indexterm>
977 <para>(string list) A list of directories containing C includes for this
984 <literal>includes</literal>
985 <indexterm><primary><literal>includes</literal></primary><secondary>package specification</secondary></indexterm>
988 <para>(string list) A list of files to include for via-C compilations
989 using this package. Typically the include file(s) will
990 contain function prototypes for any C functions used in
991 the package, in case they end up being called as a result
992 of Haskell functions from the package being
999 <literal>depends</literal>
1000 <indexterm><primary><literal>depends</literal></primary><secondary>package specification</secondary></indexterm>
1003 <para>(package name list) Packages on which this package depends. This field contains
1004 packages with explicit versions are required, except that when
1005 submitting a package to <literal>ghc-pkg register</literal>, the
1006 versions will be filled in if they are unambiguous.</para>
1012 <literal>hugs-options</literal>
1013 <indexterm><primary><literal>hugs-options</literal></primary><secondary>package specification</secondary></indexterm>
1016 <para>(string list) Options to pass to Hugs for this package.</para>
1022 <literal>cc-options</literal>
1023 <indexterm><primary><literal>cc-options</literal></primary><secondary>package specification</secondary></indexterm>
1026 <para>(string list) Extra arguments to be added to the gcc command line
1027 when this package is being used (only for via-C
1028 compilations).</para>
1034 <literal>ld-options</literal>
1035 <indexterm><primary><literal>ld-options</literal></primary><secondary>package specification</secondary></indexterm>
1038 <para>(string list) Extra arguments to be added to the
1039 <command>gcc</command> command line (for linking) when
1040 this package is being used.</para>
1046 <literal>framework-dirs</literal>
1047 <indexterm><primary><literal>framework-dirs</literal></primary><secondary>package specification</secondary></indexterm>
1050 <para>(string list) On Darwin/MacOS X, a list of directories containing
1051 frameworks for this package. This corresponds to the
1052 <option>-framework-path</option> option. It is ignored on all other
1059 <literal>frameworks</literal>
1060 <indexterm><primary><literal>frameworks</literal></primary><secondary>package specification</secondary></indexterm>
1063 <para>(string list) On Darwin/MacOS X, a list of frameworks to link to. This
1064 corresponds to the <option>-framework</option> option. Take a look
1065 at Apple's developer documentation to find out what frameworks
1066 actually are. This entry is ignored on all other platforms.</para>
1072 <literal>haddock-interfaces</literal>
1073 <indexterm><primary><literal>haddock-interfaces</literal></primary><secondary>package specification</secondary></indexterm>
1076 <para>(string list) A list of filenames containing <ulink
1077 url="http://www.haskell.org/haddock/">Haddock</ulink> interface
1078 files (<literal>.haddock</literal> files) for this package.</para>
1084 <literal>haddock-html</literal>
1085 <indexterm><primary><literal>haddock-html</literal></primary><secondary>package specification</secondary></indexterm>
1088 <para>(optional string) The directory containing the Haddock-generated HTML
1089 for this package.</para>
1094 <!-- This isn't true any more. I'm not sure if we still need it -SDM
1096 The <literal>ghc-pkg</literal> tool performs expansion of
1097 environment variables occurring in input package specifications.
1098 So, if the <literal>mypkg</literal> was added to the package
1099 database as follows:
1102 $ installdir=/usr/local/lib ghc-pkg -a < mypkg.pkg
1106 The occurrence of <literal>${installdir}</literal> is replaced
1107 with <literal>/usr/local/lib</literal> in the package data that
1108 is added for <literal>mypkg</literal>.
1112 This feature enables the distribution of package specification
1113 files that can be easily configured when installing.
1116 <para>For examples of more package specifications, take a look
1117 at the <literal>package.conf</literal> in your GHC
1118 installation.</para>
1126 ;;; Local Variables: ***
1128 ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter" "sect1") ***