1 <Chapter id="sec-installing-bin-distrib">
2 <Title>Installing GHC</Title>
3 <IndexTerm><Primary>binary installations</Primary></IndexTerm>
4 <IndexTerm><Primary>installation, of binaries</Primary></IndexTerm>
7 Installing from binary distributions is easiest, and recommended!
8 (Why binaries? Because GHC is a Haskell compiler written in Haskell,
9 so you've got to bootstrap it somehow. We provide machine-generated
10 C-files-from-Haskell for this purpose, but it's really quite a pain to
11 use them. If you must build GHC from its sources, using a
12 binary-distributed GHC to do so is a sensible way to proceed. For the
13 other <Literal>fptools</Literal> programs, many are written in
14 Haskell, so binary distributions allow you to install them without
15 having a Haskell compiler.)
18 <Para>This guide is in several parts:</para>
22 <para> Installing on Unix-a-likes (<Xref
23 LinkEnd="sec-unix-a-likes">). </para>
26 <para> Installing on Windows (<Xref
27 LinkEnd="sec-install-windows">). </para>
30 <para> The layout of installed files (<Xref
31 LinkEnd="sec-install-files">). You don't need to know this to
32 install GHC, but it's useful if you are changing the
33 implementation.</para>
37 <Sect1 id="sec-unix-a-likes"><Title>Installing on Unix-a-likes</Title>
40 <title>When a platform-specific package is available</title>
42 <para>For certain platforms, we provide GHC binaries packaged
43 using the native package format for the platform. This is
44 likely to be by far the best way to install GHC for your
45 platform if one of these packages is available, since
46 dependencies will automatically be handled and the package
47 system normally provides a way to uninstall the package at a
50 <para>We generally provide the following packages:</para>
54 <term>RedHat or SuSE Linux/x86</term>
56 <para>RPM source & binary packages for RedHat and SuSE
57 Linux (x86 only) are available for most major
63 <term>Debian Linux/x86</term>
65 <para>Debian packages for Linux (x86 only), also for most
66 major releases.</para>
71 <term>FreeBSD/x86</term>
73 <para>On FreeBSD/x86, GHC can be installed using either
74 the ports tree (<literal>cd /usr/ports/lang/ghc && make
75 install</literal>) or from a pre-compiled package
76 available from your local FreeBSD mirror.</para>
81 <para>Other platform-specific packages may be available, check
82 the GHC download page for details.</para>
86 <Title>GHC binary distributions</Title>
89 <IndexTerm><Primary>bundles of binary stuff</Primary></IndexTerm>
93 Binary distributions come in “bundles,” one bundle per file called
94 <literal><replaceable>bundle</replaceable>-<replaceable>platform</replaceable>.tar.gz</Literal>. (See the building guide for the definition of a platform.) Suppose that you untar a binary-distribution bundle, thus:
100 % cd /your/scratch/space
101 % gunzip < ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -</Screen>
106 Then you should find a single directory,
107 <Literal>ghc-<replaceable>version</replaceable></Literal>, with the
112 <IndexTerm><Primary>binary distribution, layout</Primary></IndexTerm>
113 <IndexTerm><Primary>directory layout (binary distributions)</Primary></IndexTerm>
117 <Term><Literal>Makefile.in</Literal></Term>
120 the raw material from which the <Literal>Makefile</Literal>
121 will be made (<Xref LinkEnd="sec-install">).
123 </ListItem></VarListEntry>
125 <Term><Literal>configure</Literal></Term>
128 the configuration script (<Xref LinkEnd="sec-install">).
130 </ListItem></VarListEntry>
132 <Term><Literal>README</Literal></Term>
135 Contains this file summary.
137 </ListItem></VarListEntry>
139 <Term><Literal>INSTALL</Literal></Term>
142 Contains this description of how to install
145 </ListItem></VarListEntry>
147 <Term><Literal>ANNOUNCE</Literal></Term>
150 The announcement message for the bundle.
152 </ListItem></VarListEntry>
154 <Term><Literal>NEWS</Literal></Term>
157 release notes for the bundle—a longer version
158 of <Literal>ANNOUNCE</Literal>. For GHC, the release notes are contained in the User
159 Guide and this file isn't present.
161 </ListItem></VarListEntry>
163 <Term><Literal>bin/<replaceable>platform</replaceable></Literal></Term>
166 contains platform-specific executable
167 files to be invoked directly by the user. These are the files that
168 must end up in your path.
170 </ListItem></VarListEntry>
172 <Term><Literal>lib/<replaceable>platform</replaceable>/</Literal></Term>
175 contains platform-specific support
176 files for the installation. Typically there is a subdirectory for
177 each <Literal>fptools</Literal> project, whose name is the name of the project with its
178 version number. For example, for GHC there would be a sub-directory
179 <Literal>ghc-x.xx</Literal>/ where <Literal>x.xx</Literal> is the version number of GHC in the bundle.
183 These sub-directories have the following general structure:
190 <Term><Literal>libHSstd.a</Literal> etc:</Term>
193 supporting library archives.
195 </ListItem></VarListEntry>
197 <Term><Literal>ghc-iface.prl</Literal> etc:</Term>
202 </ListItem></VarListEntry>
204 <Term><Literal>import/</Literal></Term>
207 <IndexTerm><Primary>Interface files</Primary></IndexTerm> (<Literal>.hi</Literal>) for the prelude.
209 </ListItem></VarListEntry>
211 <Term><Literal>include/</Literal></Term>
214 A few C <Literal>#include</Literal> files.
216 </ListItem></VarListEntry>
219 </ListItem></VarListEntry>
221 <Term><Literal>share/</Literal></Term>
224 contains platform-independent support files
225 for the installation. Again, there is a sub-directory for each
226 <Literal>fptools</Literal> project.
228 </ListItem></VarListEntry>
230 <Term><Literal>html/</Literal></Term>
233 contains HTML documentation files (one
234 sub-directory per project).
236 </ListItem></VarListEntry>
239 <Sect3 id="sec-install">
240 <Title>Installing</Title>
243 OK, so let's assume that you have unpacked your chosen bundles. What
244 next? Well, you will at least need to run the
245 <Literal>configure</Literal><IndexTerm><Primary>configure</Primary></IndexTerm>
246 script by changing directory into the top-level directory for the
247 bundle and typing <Literal>./configure</Literal>. That should convert
248 <Literal>Makefile.in</Literal> to <Literal>Makefile</Literal>.
252 <IndexTerm><Primary>installing in-place</Primary></IndexTerm>
253 <IndexTerm><Primary>in-place installation</Primary></IndexTerm>
254 You can now either start using the tools <Emphasis>in-situ</Emphasis> without going
255 through any installation process, just type <Literal>make in-place</Literal> to set the
256 tools up for this. You'll also want to add the path which <Literal>make</Literal> will
257 now echo to your <Literal>PATH</Literal> environment variable. This option is useful if
258 you simply want to try out the package and/or you don't have the
259 necessary privileges (or inclination) to properly install the tools
260 locally. Note that if you do decide to install the package `properly'
261 at a later date, you have to go through the installation steps that
266 To install a package, you'll have to do the following:
275 Edit the <Literal>Makefile</Literal> and check the settings of the following variables:
277 <IndexTerm><Primary>directories, installation</Primary></IndexTerm>
278 <IndexTerm><Primary>installation directories</Primary></IndexTerm>
283 <Term><Literal>platform</Literal></Term>
286 the platform you are going to install for.
288 </ListItem></VarListEntry>
290 <Term><Literal>bindir</Literal></Term>
293 the directory in which to install user-invokable
296 </ListItem></VarListEntry>
298 <Term><Literal>libdir</Literal></Term>
301 the directory in which to install
302 platform-dependent support files.
304 </ListItem></VarListEntry>
306 <Term><Literal>datadir</Literal></Term>
309 the directory in which to install
310 platform-independent support files.
312 </ListItem></VarListEntry>
314 <Term><Literal>infodir</Literal></Term>
317 the directory in which to install Emacs info
320 </ListItem></VarListEntry>
322 <Term><Literal>htmldir</Literal></Term>
325 the directory in which to install HTML
328 </ListItem></VarListEntry>
330 <Term><Literal>dvidir</Literal></Term>
333 the directory in which to install DVI
336 </ListItem></VarListEntry>
339 The values for these variables can be set through invocation of the
340 <Command>configure</Command><IndexTerm><Primary>configure</Primary></IndexTerm>
341 script that comes with the distribution, but doing an optical diff to
342 see if the values match your expectations is always a Good Idea.
346 <Emphasis>Instead of running <Command>configure</Command>, it is
347 perfectly OK to copy <Filename>Makefile.in</Filename> to
348 <Filename>Makefile</Filename> and set all these variables directly
349 yourself. But do it right!</Emphasis>
356 Run <Literal>make install</Literal>. This <Emphasis>
357 should</Emphasis> work with ordinary Unix
358 <Literal>make</Literal>—no need for fancy stuff like GNU
359 <Literal>make</Literal>.
366 <Literal>rehash</Literal> (t?csh or zsh users), so your shell will see the new
367 stuff in your bin directory.
374 Once done, test your “installation” as suggested in
375 <XRef LinkEnd="sec-GHC-test">. Be sure to use a <Literal>-v</Literal>
376 option, so you can see exactly what pathnames it's using.
378 If things don't work as expected, check the list of known pitfalls in
388 <IndexTerm><Primary>link, installed as ghc</Primary></IndexTerm>
389 When installing the user-invokable binaries, this installation
390 procedure will install GHC as <Literal>ghc-x.xx</Literal> where <Literal>x.xx</Literal> is the version
391 number of GHC. It will also make a link (in the binary installation
392 directory) from <Literal>ghc</Literal> to <Literal>ghc-x.xx</Literal>. If you install multiple versions
393 of GHC then the last one “wins”, and “<Literal>ghc</Literal>” will invoke the last
394 one installed. You can change this manually if you want. But
395 regardless, <Literal>ghc-x.xx</Literal> should always invoke GHC version <Literal>x.xx</Literal>.
402 <Title>What bundles there are</Title>
405 <IndexTerm><Primary>bundles, binary</Primary></IndexTerm> There are
406 plenty of “non-basic” GHC bundles. The files for them are
408 <Literal>ghc-x.xx-<replaceable>bundle</replaceable>-<replaceable>platform</replaceable>.tar.gz</Literal>,
409 where the <replaceable>platform</replaceable> is as above, and
410 <replaceable>bundle</replaceable> is one of these:
417 <Term><Literal>prof</Literal>:</Term>
420 Profiling with cost-centres. You probably want this.
421 <IndexTerm><Primary>profiling bundles</Primary></IndexTerm>
422 <IndexTerm><Primary>bundles, profiling</Primary></IndexTerm>
424 </ListItem></VarListEntry>
426 <Term><Literal>par</Literal>:</Term>
429 Parallel Haskell features (sits on top of PVM).
430 You'll want this if you're into that kind of thing.
431 <IndexTerm><Primary>parallel bundles</Primary></IndexTerm>
432 <IndexTerm><Primary>bundles, parallel</Primary></IndexTerm>
434 </ListItem></VarListEntry>
436 <Term><Literal>gran</Literal>:</Term>
439 The “GranSim” parallel-Haskell simulator
440 (hmm… mainly for implementors).
441 <IndexTerm><Primary>bundles, gransim</Primary></IndexTerm>
442 <IndexTerm><Primary>gransim bundles</Primary></IndexTerm>
444 </ListItem></VarListEntry>
446 <Term><Literal>ticky</Literal>:</Term>
449 “Ticky-ticky” profiling; very detailed
450 information about “what happened when I ran this program”—really
452 <IndexTerm><Primary>bundles, ticky-ticky</Primary></IndexTerm>
453 <IndexTerm><Primary>ticky-ticky bundles</Primary></IndexTerm>
455 </ListItem></VarListEntry>
460 One likely scenario is that you will grab <Emphasis>two</Emphasis>
461 binary bundles—basic, and profiling. We don't usually make the
462 rest, although you can build them yourself from a source distribution.
465 <para>The various GHC bundles are designed to be unpacked into the
466 same directory; then installing as per the directions above will
467 install the whole lot in one go. Note: you <emphasis>must</emphasis>
468 at least have the basic GHC binary distribution bundle, these extra
469 bundles won't install on their own.</para>
473 <Sect3 id="sec-GHC-test">
474 <Title>Testing that GHC seems to be working
478 <IndexTerm><Primary>testing a new GHC</Primary></IndexTerm>
482 The way to do this is, of course, to compile and run <Emphasis>this</Emphasis> program
483 (in a file <Literal>Main.hs</Literal>):
489 main = putStr "Hello, world!\n"
495 Compile the program, using the <Literal>-v</Literal> (verbose) flag to verify that
496 libraries, etc., are being found properly:
499 % ghc -v -o hello Main.hs</Screen>
508 Hello, world!</Screen>
513 Some simple-but-profitable tests are to compile and run the notorious
514 <Literal>nfib</Literal><IndexTerm><Primary>nfib</Primary></IndexTerm> program, using different numeric types. Start with
515 <Literal>nfib :: Int -> Int</Literal>, and then try <Literal>Integer</Literal>, <Literal>Float</Literal>, <Literal>Double</Literal>,
516 <Literal>Rational</Literal> and perhaps the overloaded version. Code for this is
517 distributed in <Literal>ghc/misc/examples/nfib/</Literal> in a source distribution.
520 <para>For more information on how to “drive” GHC, read
530 <Sect1 id="sec-install-windows"><Title>Installing on Windows</Title>
533 Getting the Glasgow Haskell Compiler (post 5.02) to run on Windows platforms is
534 a snap: the Installshield does everything you need.
537 <Sect2><Title>Installing GHC on Windows</Title>
540 To install GHC, use the following steps:
543 <listitem><para>Download the Installshield <Filename>setup.exe</Filename>
544 from the GHC download page
546 URL="http://www.haskell.org/ghc">haskell.org</ULink>.
549 <listitem><para>Run <Filename>setup.exe</Filename>.
550 (If you have a previous version of GHC, Installshield will offer to "modify",
551 or "remove" GHC. Choose "remove"; then run <Filename>setup.exe</Filename> a
552 second time. This time it should offer to install.)
555 At this point you should find GHCi and the GHC documentation are
556 available in your Start menu under "Start/Programs/Glasgow Haskell Compiler".
561 The final dialogue box from the install process tells you where GHC has
562 been installed. If you want to invoke GHC from a command line, add this
563 to your PATH environment variable. Usually, GHC installs into
564 <Filename>c:/ghc/ghc-5.02</Filename>, though the last part of this path
565 depends on which version of GHC you are installing, of course.
566 You need to add <Filename>c:/ghc/ghc-5.02/bin</Filename> to your path if yo
570 GHC needs a directory in which to create, and later delete, temporary files.
571 It uses the standard Windows procedure <literal>GetTempPath()</literal> to
572 find a suitable directory. This procedure returns:
574 <listitem><para>The path in environment variable TMP,
575 if TMP is set.</para></listitem>
576 <listitem><para>Otherwise, the path in environment variable TEMP,
577 if TEMP is set.</para></listitem>
578 <listitem><para>Otherwise, there is a per-user default which varies
579 between versions of Windows. On NT and XP-ish versions, it might
581 <Filename>c:\Documents and Settings\<username>\Local Settings\Temp</filename>
584 The main point is that if you don't do anything GHC will work fine;
585 but if you want to control where the directory is, you can do so by
591 To test the fruits of your labour, try now to compile a simple
597 module Main(main) where
599 main = putStrLn "Hello, world!"
600 bash$ ghc -o main main.hs
609 You do <emphasis>not</emphasis> need the Cygwin toolchain, or anything
610 else, to install and run GHC.
613 An installation of GHC requires about 140M of disk space.
614 To run GHC comfortably, your machine should have at least
619 <Sect2><title>Moving GHC around</title>
621 At the moment, GHC installs in a fixed place (<Filename>c:/ghc/ghc-x.yy</Filename>,
622 but once it is installed, you can freely move the entire GHC tree just by copying
623 the <Filename>ghc-x.yy</Filename> directory. (You may need to fix up
624 the links in "Start/Programs/Glasgow Haskell Compiler" if you do this.)
627 It is OK to put GHC tree in a directory whose path involves spaces. However,
628 don't do this if you use want to use GHC with the Cygwin tools,
629 because Cygwin can get confused when this happpens.
630 We havn't quite got to the bottom of this, but so far as we know it's not
631 a problem with GHC itself. Nevertheless, just to keep life simple we usually
632 put GHC in a place with a space-free path.
636 <Sect2 id="winfaq"><title>Installing ghc-win32 FAQ</title>
644 I'm having trouble with symlinks.
650 Symlinks only work under Cygwin (<Xref LinkEnd="sec-install">), so binaries
651 not linked to the Cygwin DLL, in particular those built for Mingwin, will not
662 I'm getting “permission denied” messages from the <Command>rm</Command> or
663 <Command>mv</Command>.
669 This can have various causes: trying to rename a directory when an Explorer
670 window is open on it tends to fail. Closing the window generally cures the
671 problem, but sometimes its cause is more mysterious, and logging off and back
672 on or rebooting may be the quickest cure.
680 <!-- doesn't add much value any longer; leave out [sof 7/2002].
682 Further information on using GHC under Windows can be found in <ULink
683 URL="http://www.dcs.gla.ac.uk/~sof/ghc-win32.html">Sigbjørn Finne's
684 pages</ULink>. Note: ignore the installation instructions, which are rather
685 out of date; the <Emphasis>Miscellaneous</Emphasis> section at the bottom of
686 the page is of most interest, covering topics beyond the scope of this
695 <Sect1 id="sec-install-files"><Title>The layout of installed files</Title>
698 This section describes what files get installed where. You don't need to know it
699 if you are simply installing GHC, but it is vital information if you are changing
702 <para> GHC is installed in two directory trees:</para>
705 <term>Binary directory</term>
706 <listitem> <para> known as <Filename>$(bindir)</Filename>, holds executables that
707 the user is expected to invoke. Notably,
708 <Filename>ghc</Filename> and <Filename>ghci</FileName>. On Unix, this directory
709 is typically something like <Filename>/usr/local/bin</Filename>. On Windows,
710 however, this directory is always <Filename>$(libdir)/bin</Filename>.
715 <term>Library directory,</term>
716 <listitem> <para> known as <Filename>$(libdir)</Filename>, holds all the
717 support files needed to run GHC. On Unix, this
718 directory is usually something like <Filename>/usr/lib/ghc/ghc-5.02</Filename>. </para>
724 When GHC runs, it must know where its library directory is.
725 It finds this out in one of two ways:
730 <Filename>$(libdir)</Filename> is passed to GHC using the <option>-B</option> flag.
731 On Unix (but not Windows), the installed <filename>ghc</filename> is just a one-line
732 shell script that invokes the real GHC, passing a suitable <option>-B</option> flag.
733 [All the user-supplied flags
734 follow, and a later <option>-B</option> flag overrides an earlier one, so a user-supplied
739 <para> On Windows (but not Unix), if no <option>-B</option> flag is given, GHC uses a system
740 call to find the directory in which the running GHC executable lives, and derives
741 <Filename>$(libdir)</Filename> from that. [Unix lacks such a system call.]
746 <sect2> <title>Layout of the library directory</title>
748 <para>The layout of the library directory is almost identical on
749 Windows and Unix, as follows: layout:</para>
753 package.conf GHC package configuration
754 ghc-usage.txt Message displayed by ghc ––help
756 bin/ [Win32 only] User-visible binaries
760 unlit Remove literate markup
762 touchy.exe [Win32 only]
763 perl.exe [Win32 only]
766 ghc-x.xx GHC executable [Unix only]
768 ghc-split Asm code splitter
769 ghc-asm Asm code mangler
771 gcc-lib/ [Win32 only] Support files for gcc
772 specs gcc configuration
774 cpp0.exe gcc support binaries
781 libmingw32.a Standard
786 imports/ GHC interface files
787 std/*.hi 'std' library
788 lang/*.hi 'lang' library
791 include/ C header files
792 StgMacros.h GHC-specific
793 ..etc... header files
795 mingw/*.h [Win32 only] Mingwin header files
797 libHSrts.a GHC library archives
802 HSstd1.o GHC library linkables
803 HSstd2.o (used by ghci, which does
804 HSlang.o not grok .a files yet)
807 <para>Note that:</para>
810 <para>On Win32, the <filename>$(libdir)/bin</filename> directory contains user-visible binaries;
811 add it to your <filename>PATH</filename>. The <filename>ghci</filename> executable is a <filename>.bat</filename>
812 file which invokes <filename>ghc</filename>. </para>
814 <para>The GHC executable is the Real Thing (no intervening
815 shell scripts or <filename>.bat</filename> files).
816 Reason: we sometimes invoke GHC with very long command lines,
817 and <filename>cmd.exe</filename> (which executes <filename>.bat</filename> files)
818 truncates them. [We assume people won't invoke ghci with very long
819 command lines.]</para>
821 <para>On Unix, the user-invokable <filename>ghc</filename> invokes <filename>$(libdir)/ghc-<replaceable>version</replaceable></filename>,
822 passing a suitable <option>-B</option> flag.
827 <para><filename>$(libdir)</filename> also contains support
828 binaries. These are <emphasis>not</emphasis> expected to be
829 on the user's <filename>PATH</filename>, but and are invoked
830 directly by GHC. In the Makefile system, this directory is
831 also called <filename>$(libexecdir)</filename>, but
832 <emphasis>you are not free to change it</emphasis>. It must
833 be the same as <filename>$(libdir)</filename>.</para>
837 <para>We distribute <filename>gcc</filename> with the Win32 distribution of GHC, so that users
838 don't need to install <filename>gcc</filename>, nor need to care about which version it is.
839 All <filename>gcc</filename>'s support files are kept in <filename>$(libdir)/gcc-lib/</filename>.
844 <para>Similarly, we distribute <filename>perl</filename> and a <filename>touch</filename>
845 replacement (<filename>touchy.exe</filename>)
846 with the Win32 distribution of GHC. </para>
850 <para>The support programs <filename>ghc-split</filename>
851 and <filename>ghc-asm</filename> are Perl scripts. The
852 first line says <literal>#!/bin/perl</literal>; on Unix, the
853 script is indeed invoked as a shell script, which invokes
854 Perl; on Windows, GHC invokes
855 <filename>$(libdir)/perl.exe</filename> directly, which
856 treats the <literal>#!/bin/perl</literal> as a comment.
857 Reason: on Windows we want to invoke the Perl distributed
858 with GHC, rather than assume some installed one. </para>
869 ;;; Local Variables: ***
871 ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***