[project @ 2002-12-05 23:49:43 by mthomas]
[ghc-hetmet.git] / ghc / docs / users_guide / installing.sgml
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>
5
6 <Para>
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.)
16 </Para>
17
18 <Para>This guide is in several parts:</para>
19
20   <itemizedlist>
21     <listitem>
22       <para> Installing on Unix-a-likes (<Xref
23       LinkEnd="sec-unix-a-likes">). </para>
24     </listitem>
25     <listitem>
26       <para> Installing on Windows (<Xref
27       LinkEnd="sec-install-windows">).  </para>
28     </listitem>
29     <listitem>
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>
34     </listitem>
35   </itemizedlist>
36   
37   <Sect1 id="sec-unix-a-likes"><Title>Installing on Unix-a-likes</Title>
38
39     <sect2>
40       <title>When a platform-specific package is available</title>
41       
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
48       later date.</para>
49
50       <para>We generally provide the following packages:</para>
51
52       <variablelist>
53         <varlistentry>
54           <term>RedHat or SuSE Linux/x86</term>
55           <listitem>
56             <para>RPM source & binary packages for RedHat and SuSE
57             Linux (x86 only) are available for most major
58             releases.</para>
59           </listitem>
60         </varlistentry>
61
62         <varlistentry>
63           <term>Debian Linux/x86</term>
64           <listitem>
65             <para>Debian packages for Linux (x86 only), also for most
66             major releases.</para>
67           </listitem>
68         </varlistentry>
69
70         <varlistentry>
71           <term>FreeBSD/x86</term>
72           <listitem>
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>
77           </listitem>
78         </varlistentry>
79       </variablelist>
80       
81       <para>Other platform-specific packages may be available, check
82       the GHC download page for details.</para>
83     </sect2>
84
85 <Sect2>
86 <Title>GHC binary distributions</Title>
87
88 <Para>
89 <IndexTerm><Primary>bundles of binary stuff</Primary></IndexTerm>
90 </Para>
91
92 <Para>
93 Binary distributions come in &ldquo;bundles,&rdquo; 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:
95 </Para>
96
97 <Para>
98
99 <Screen>
100 % cd /your/scratch/space
101 % gunzip &#60; ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -</Screen>
102
103 </Para>
104
105 <Para>
106 Then you should find a single directory,
107 <Literal>ghc-<replaceable>version</replaceable></Literal>, with the
108 following structure:
109 </Para>
110
111 <Para>
112 <IndexTerm><Primary>binary distribution, layout</Primary></IndexTerm>
113 <IndexTerm><Primary>directory layout (binary distributions)</Primary></IndexTerm>
114 <VariableList>
115
116 <VarListEntry>
117 <Term><Literal>Makefile.in</Literal></Term>
118 <ListItem>
119 <Para>
120 the raw material from which the <Literal>Makefile</Literal>
121 will be made (<Xref LinkEnd="sec-install">).
122 </Para>
123 </ListItem></VarListEntry>
124 <VarListEntry>
125 <Term><Literal>configure</Literal></Term>
126 <ListItem>
127 <Para>
128 the configuration script (<Xref LinkEnd="sec-install">).
129 </Para>
130 </ListItem></VarListEntry>
131 <VarListEntry>
132 <Term><Literal>README</Literal></Term>
133 <ListItem>
134 <Para>
135 Contains this file summary.
136 </Para>
137 </ListItem></VarListEntry>
138 <VarListEntry>
139 <Term><Literal>INSTALL</Literal></Term>
140 <ListItem>
141 <Para>
142 Contains this description of how to install
143 the bundle.
144 </Para>
145 </ListItem></VarListEntry>
146 <VarListEntry>
147 <Term><Literal>ANNOUNCE</Literal></Term>
148 <ListItem>
149 <Para>
150 The announcement message for the bundle.
151 </Para>
152 </ListItem></VarListEntry>
153 <VarListEntry>
154 <Term><Literal>NEWS</Literal></Term>
155 <ListItem>
156 <Para>
157 release notes for the bundle&mdash;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.
160 </Para>
161 </ListItem></VarListEntry>
162 <VarListEntry>
163             <Term><Literal>bin/<replaceable>platform</replaceable></Literal></Term>
164 <ListItem>
165 <Para>
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.
169 </Para>
170 </ListItem></VarListEntry>
171 <VarListEntry>
172 <Term><Literal>lib/<replaceable>platform</replaceable>/</Literal></Term>
173 <ListItem>
174 <Para>
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.
180 </Para>
181
182 <Para>
183 These sub-directories have the following general structure:
184 </Para>
185
186 <Para>
187 <VariableList>
188
189 <VarListEntry>
190 <Term><Literal>libHSstd.a</Literal> etc:</Term>
191 <ListItem>
192 <Para>
193 supporting library archives.
194 </Para>
195 </ListItem></VarListEntry>
196 <VarListEntry>
197 <Term><Literal>ghc-iface.prl</Literal> etc:</Term>
198 <ListItem>
199 <Para>
200 support scripts.
201 </Para>
202 </ListItem></VarListEntry>
203 <VarListEntry>
204 <Term><Literal>import/</Literal></Term>
205 <ListItem>
206 <Para>
207 <IndexTerm><Primary>Interface files</Primary></IndexTerm> (<Literal>.hi</Literal>) for the prelude.
208 </Para>
209 </ListItem></VarListEntry>
210 <VarListEntry>
211 <Term><Literal>include/</Literal></Term>
212 <ListItem>
213 <Para>
214 A few C <Literal>&num;include</Literal> files.
215 </Para>
216 </ListItem></VarListEntry>
217 </VariableList>
218 </Para>
219 </ListItem></VarListEntry>
220 <VarListEntry>
221 <Term><Literal>share/</Literal></Term>
222 <ListItem>
223 <Para>
224 contains platform-independent support files
225 for the installation.  Again, there is a sub-directory for each
226 <Literal>fptools</Literal> project.
227 </Para>
228 </ListItem></VarListEntry>
229 <VarListEntry>
230 <Term><Literal>html/</Literal></Term>
231 <ListItem>
232 <Para>
233 contains HTML documentation files (one
234 sub-directory per project).
235 </Para>
236 </ListItem></VarListEntry>
237 <VarListEntry>
238 <Term><Literal>man/</Literal></Term>
239 <ListItem>
240 <Para>
241 contains Unix manual pages.
242 </Para>
243 </ListItem></VarListEntry>
244 </VariableList>
245 </Para>
246
247 <Sect3 id="sec-install">
248 <Title>Installing</Title>
249
250 <Para>
251 OK, so let's assume that you have unpacked your chosen bundles into a
252 scratch directory <Literal>fptools</Literal>. What next? Well, you will at least need
253 to run the <Literal>configure</Literal><IndexTerm><Primary>configure</Primary></IndexTerm> script by changing your
254 directory to <Literal>fptools</Literal> and typing <Literal>./configure</Literal>.  That should convert
255 <Literal>Makefile.in</Literal> to <Literal>Makefile</Literal>.
256 </Para>
257
258 <Para>
259 <IndexTerm><Primary>installing in-place</Primary></IndexTerm>
260 <IndexTerm><Primary>in-place installation</Primary></IndexTerm>
261 You can now either start using the tools <Emphasis>in-situ</Emphasis> without going
262 through any installation process, just type <Literal>make in-place</Literal> to set the
263 tools up for this. You'll also want to add the path which <Literal>make</Literal> will
264 now echo to your <Literal>PATH</Literal> environment variable. This option is useful if
265 you simply want to try out the package and/or you don't have the
266 necessary privileges (or inclination) to properly install the tools
267 locally. Note that if you do decide to install the package `properly'
268 at a later date, you have to go through the installation steps that
269 follow.
270 </Para>
271
272 <Para>
273 To install an <Literal>fptools</Literal> package, you'll have to do the following:
274 </Para>
275
276 <Para>
277
278 <OrderedList>
279 <ListItem>
280
281 <Para>
282  Edit the <Literal>Makefile</Literal> and check the settings of the following variables:
283
284 <IndexTerm><Primary>directories, installation</Primary></IndexTerm>
285 <IndexTerm><Primary>installation directories</Primary></IndexTerm>
286
287 <VariableList>
288
289 <VarListEntry>
290 <Term><Literal>platform</Literal></Term>
291 <ListItem>
292 <Para>
293 the platform you are going to install for.
294 </Para>
295 </ListItem></VarListEntry>
296 <VarListEntry>
297 <Term><Literal>bindir</Literal></Term>
298 <ListItem>
299 <Para>
300 the directory in which to install user-invokable
301 binaries.
302 </Para>
303 </ListItem></VarListEntry>
304 <VarListEntry>
305 <Term><Literal>libdir</Literal></Term>
306 <ListItem>
307 <Para>
308 the directory in which to install
309 platform-dependent support files.
310 </Para>
311 </ListItem></VarListEntry>
312 <VarListEntry>
313 <Term><Literal>datadir</Literal></Term>
314 <ListItem>
315 <Para>
316 the directory in which to install
317 platform-independent support files.
318 </Para>
319 </ListItem></VarListEntry>
320 <VarListEntry>
321 <Term><Literal>infodir</Literal></Term>
322 <ListItem>
323 <Para>
324 the directory in which to install Emacs info
325 files.
326 </Para>
327 </ListItem></VarListEntry>
328 <VarListEntry>
329 <Term><Literal>htmldir</Literal></Term>
330 <ListItem>
331 <Para>
332 the directory in which to install HTML
333 documentation.
334 </Para>
335 </ListItem></VarListEntry>
336 <VarListEntry>
337 <Term><Literal>dvidir</Literal></Term>
338 <ListItem>
339 <Para>
340 the directory in which to install DVI
341 documentation.
342 </Para>
343 </ListItem></VarListEntry>
344 </VariableList>
345
346 The values for these variables can be set through invocation of the
347 <Command>configure</Command><IndexTerm><Primary>configure</Primary></IndexTerm>
348 script that comes with the distribution, but doing an optical diff to
349 see if the values match your expectations is always a Good Idea.
350 </para>
351
352 <para>
353 <Emphasis>Instead of running <Command>configure</Command>, it is
354 perfectly OK to copy <Filename>Makefile.in</Filename> to
355 <Filename>Makefile</Filename> and set all these variables directly
356 yourself.  But do it right!</Emphasis>
357 </Para>
358
359 </ListItem>
360 <ListItem>
361
362 <Para>
363 Run <Literal>make install</Literal>.  This <Emphasis>
364 should</Emphasis> work with ordinary Unix
365 <Literal>make</Literal>&mdash;no need for fancy stuff like GNU
366 <Literal>make</Literal>.
367
368 </Para>
369 </ListItem>
370 <ListItem>
371
372 <Para>
373 <Literal>rehash</Literal> (t?csh or zsh users), so your shell will see the new
374 stuff in your bin directory.
375
376 </Para>
377 </ListItem>
378 <ListItem>
379
380 <Para>
381  Once done, test your &ldquo;installation&rdquo; as suggested in 
382 <XRef LinkEnd="sec-GHC-test">.  Be sure to use a <Literal>-v</Literal>
383 option, so you can see exactly what pathnames it's using.
384
385 If things don't work as expected, check the list of known pitfalls in
386 the building guide.
387 </Para>
388 </ListItem>
389
390 </OrderedList>
391
392 </Para>
393
394 <Para>
395 <IndexTerm><Primary>link, installed as ghc</Primary></IndexTerm>
396 When installing the user-invokable binaries, this installation
397 procedure will install GHC as <Literal>ghc-x.xx</Literal> where <Literal>x.xx</Literal> is the version
398 number of GHC.  It will also make a link (in the binary installation
399 directory) from <Literal>ghc</Literal> to <Literal>ghc-x.xx</Literal>.  If you install multiple versions
400 of GHC then the last one &ldquo;wins&rdquo;, and &ldquo;<Literal>ghc</Literal>&rdquo; will invoke the last
401 one installed.  You can change this manually if you want.  But
402 regardless, <Literal>ghc-x.xx</Literal> should always invoke GHC version <Literal>x.xx</Literal>.
403 </Para>
404
405 </Sect3>
406
407
408 <Sect3>
409 <Title>What bundles there are</Title>
410
411 <Para>
412 <IndexTerm><Primary>bundles, binary</Primary></IndexTerm> There are
413 plenty of &ldquo;non-basic&rdquo; GHC bundles.  The files for them are
414 called
415 <Literal>ghc-x.xx-<replaceable>bundle</replaceable>-<replaceable>platform</replaceable>.tar.gz</Literal>,
416 where the <replaceable>platform</replaceable> is as above, and
417 <replaceable>bundle</replaceable> is one of these:
418 </Para>
419
420 <Para>
421 <VariableList>
422
423 <VarListEntry>
424 <Term><Literal>prof</Literal>:</Term>
425 <ListItem>
426 <Para>
427 Profiling with cost-centres.  You probably want this.
428 <IndexTerm><Primary>profiling bundles</Primary></IndexTerm>
429 <IndexTerm><Primary>bundles, profiling</Primary></IndexTerm>
430 </Para>
431 </ListItem></VarListEntry>
432 <VarListEntry>
433 <Term><Literal>par</Literal>:</Term>
434 <ListItem>
435 <Para>
436 Parallel Haskell features (sits on top of PVM).
437 You'll want this if you're into that kind of thing.
438 <IndexTerm><Primary>parallel bundles</Primary></IndexTerm>
439 <IndexTerm><Primary>bundles, parallel</Primary></IndexTerm>
440 </Para>
441 </ListItem></VarListEntry>
442 <VarListEntry>
443 <Term><Literal>gran</Literal>:</Term>
444 <ListItem>
445 <Para>
446 The &ldquo;GranSim&rdquo; parallel-Haskell simulator
447 (hmm&hellip; mainly for implementors).
448 <IndexTerm><Primary>bundles, gransim</Primary></IndexTerm>
449 <IndexTerm><Primary>gransim bundles</Primary></IndexTerm>
450 </Para>
451 </ListItem></VarListEntry>
452 <VarListEntry>
453 <Term><Literal>ticky</Literal>:</Term>
454 <ListItem>
455 <Para>
456 &ldquo;Ticky-ticky&rdquo; profiling; very detailed
457 information about &ldquo;what happened when I ran this program&rdquo;&mdash;really
458 for implementors.
459 <IndexTerm><Primary>bundles, ticky-ticky</Primary></IndexTerm>
460 <IndexTerm><Primary>ticky-ticky bundles</Primary></IndexTerm>
461 </Para>
462 </ListItem></VarListEntry>
463 </VariableList>
464 </Para>
465
466 <Para>
467 One likely scenario is that you will grab <Emphasis>two</Emphasis>
468 binary bundles&mdash;basic, and profiling.  We don't usually make the
469 rest, although you can build them yourself from a source distribution.
470 </Para>
471
472 <para>The various GHC bundles are designed to be unpacked into the
473 same directory; then installing as per the directions above will
474 install the whole lot in one go.  Note: you <emphasis>must</emphasis>
475 at least have the basic GHC binary distribution bundle, these extra
476 bundles won't install on their own.</para>
477
478 </Sect3>
479
480 <Sect3 id="sec-GHC-test">
481 <Title>Testing that GHC seems to be working
482 </Title>
483
484 <Para>
485 <IndexTerm><Primary>testing a new GHC</Primary></IndexTerm>
486 </Para>
487
488 <Para>
489 The way to do this is, of course, to compile and run <Emphasis>this</Emphasis> program
490 (in a file <Literal>Main.hs</Literal>):
491 </Para>
492
493 <Para>
494
495 <ProgramListing>
496 main = putStr "Hello, world!\n"
497 </ProgramListing>
498
499 </Para>
500
501 <Para>
502 Compile the program, using the <Literal>-v</Literal> (verbose) flag to verify that
503 libraries, etc., are being found properly:
504
505 <Screen>
506 % ghc -v -o hello Main.hs</Screen>
507
508 </Para>
509
510 <Para>
511 Now run it:
512
513 <Screen>
514 % ./hello
515 Hello, world!</Screen>
516
517 </Para>
518
519 <Para>
520 Some simple-but-profitable tests are to compile and run the notorious
521 <Literal>nfib</Literal><IndexTerm><Primary>nfib</Primary></IndexTerm> program, using different numeric types.  Start with
522 <Literal>nfib :: Int -&gt; Int</Literal>, and then try <Literal>Integer</Literal>, <Literal>Float</Literal>, <Literal>Double</Literal>,
523 <Literal>Rational</Literal> and perhaps the overloaded version.  Code for this is
524 distributed in <Literal>ghc/misc/examples/nfib/</Literal> in a source distribution.
525 </Para>
526
527 <para>For more information on how to &ldquo;drive&rdquo; GHC, read
528 on...</para>
529
530 </Sect3>
531
532 </Sect2>
533
534 </Sect1>
535
536
537 <Sect1 id="sec-install-windows"><Title>Installing on Windows</Title>
538
539 <para>
540 Getting the Glasgow Haskell Compiler (post 5.02) to run on Windows platforms is
541 a snap: the Installshield does everything you need.  
542 </para>
543
544 <Sect2><Title>Installing GHC on Windows</Title>
545
546 <para>
547 To install GHC, use the following steps:
548 </para>
549 <itemizedlist>
550 <listitem><para>Download the Installshield <Filename>setup.exe</Filename>
551 from the GHC download page
552 <ULink
553 URL="http://www.haskell.org/ghc">haskell.org</ULink>.
554 </para></listitem>
555
556 <listitem><para>Run <Filename>setup.exe</Filename>.
557 (If you have a previous version of GHC, Installshield will offer to "modify", 
558 or "remove" GHC.  Choose "remove"; then run <Filename>setup.exe</Filename> a
559 second time.  This time it should offer to install.)
560 </para>
561 <para>
562 At this point you should find GHCi and the GHC documentation are 
563 available in your Start menu under "Start/Programs/Glasgow Haskell Compiler".
564 </para>
565 </listitem>
566
567 <listitem><para>
568 The final dialogue box from the install process tells you where GHC has
569 been installed.  If you want to invoke GHC from a command line, add this 
570 to your PATH environment variable.  Usually, GHC installs into
571 <Filename>c:/ghc/ghc-5.02</Filename>, though the last part of this path
572 depends on which version of GHC you are installing, of course. 
573 You need to add <Filename>c:/ghc/ghc-5.02/bin</Filename> to your path if yo
574 </para></listitem>
575
576 <listitem><para>
577 GHC needs a directory in which to create, and later delete, temporary files.
578 It uses the standard Windows procedure <literal>GetTempPath()</literal> to
579 find a suitable directory.  This procedure returns:
580 <itemizedlist>
581 <listitem><para>The path in environment variable TMP, 
582 if TMP is set.</para></listitem>
583 <listitem><para>Otherwise, the path in environment variable TEMP, 
584 if TEMP is set.</para></listitem>
585 <listitem><para>Otherwise, there is a per-user default which varies
586 between versions of Windows. On NT and XP-ish versions, it might 
587 be:
588 <Filename>c:\Documents and Settings\&lt;username&gt;\Local Settings\Temp</filename>
589 </para></listitem>
590 </itemizedlist>
591 The main point is that if you don't do anything GHC will work fine;
592 but if you want to control where the directory is, you can do so by
593 setting TMP or TEMP.
594 </para></listitem>
595
596 <listitem>
597 <Para>
598 To test the fruits of your labour, try now to compile a simple
599 Haskell program:
600 </Para>
601
602 <Screen>
603 bash$ cat main.hs
604 module Main(main) where
605
606 main = putStrLn "Hello, world!"
607 bash$ ghc -o main main.hs
608 ..
609 bash$ ./main
610 Hello, world!
611 bash$ </Screen>
612 </listitem>
613 </itemizedlist>
614
615 <para>
616 You do <emphasis>not</emphasis> need the Cygwin toolchain, or anything
617 else, to install and run GHC.
618 </para>
619 <Para>
620 An installation of GHC requires about 140M of disk space.
621 To run GHC comfortably, your machine should have at least
622 64M of memory.
623 </Para>
624 </sect2>
625
626 <Sect2><title>Moving GHC around</title>
627 <Para>
628 At the moment, GHC installs in a fixed place (<Filename>c:/ghc/ghc-x.yy</Filename>,
629 but once it is installed, you can freely move the entire GHC tree just by copying
630 the <Filename>ghc-x.yy</Filename> directory.   (You may need to fix up 
631 the links in "Start/Programs/Glasgow Haskell Compiler" if you do this.)
632 </para>
633 <para>
634 It is OK to put GHC tree in a directory whose path involves spaces.  However,
635 don't do this if you use want to use GHC with the Cygwin tools, 
636 because Cygwin can get confused when this happpens.
637 We havn't quite got to the bottom of this, but so far as we know it's not 
638 a problem with GHC itself.  Nevertheless, just to keep life simple we usually
639 put GHC in a place with a space-free path.
640 </Para>
641 </sect2>
642
643 <Sect2 id="winfaq"><title>Installing ghc-win32 FAQ</title>
644
645 <QandASet>
646
647 <QandAEntry>
648
649 <Question>
650 <Para>
651 I'm having trouble with symlinks.
652 </Para>
653 </Question>
654
655 <Answer>
656 <Para>
657 Symlinks only work under Cygwin (<Xref LinkEnd="sec-install">), so binaries
658 not linked to the Cygwin DLL, in particular those built for Mingwin, will not
659 work with symlinks.
660 </Para>
661 </Answer>
662
663 </QandAEntry>
664
665 <QandAEntry>
666
667 <Question>
668 <Para>
669 I'm getting &ldquo;permission denied&rdquo; messages from the <Command>rm</Command> or
670 <Command>mv</Command>.
671 </Para>
672 </Question>
673
674 <Answer>
675 <Para>
676 This can have various causes: trying to rename a directory when an Explorer
677 window is open on it tends to fail. Closing the window generally cures the
678 problem, but sometimes its cause is more mysterious, and logging off and back
679 on or rebooting may be the quickest cure.
680 </Para>
681 </Answer>
682
683 </QandAEntry>
684
685 </QandASet>
686
687 <!-- doesn't add much value any longer; leave out [sof 7/2002].
688 <Para>
689 Further information on using GHC under Windows can be found in <ULink
690 URL="http://www.dcs.gla.ac.uk/~sof/ghc-win32.html">Sigbj&oslash;rn Finne's
691 pages</ULink>. Note: ignore the installation instructions, which are rather
692 out of date; the <Emphasis>Miscellaneous</Emphasis> section at the bottom of
693 the page is of most interest, covering topics beyond the scope of this
694 manual.
695 </Para>
696 -->
697 </Sect2>
698
699 </Sect1>
700
701
702 <Sect1 id="sec-install-files"><Title>The layout of installed files</Title>
703
704 <para>
705 This section describes what files get installed where.  You don't need to know it
706 if you are simply installing GHC, but it is vital information if you are changing
707 the implementation.
708 </para>
709 <para> GHC is installed in two directory trees:</para>
710 <variablelist>
711 <varlistentry>
712 <term>Binary directory</term>
713 <listitem> <para> known as <Filename>$(bindir)</Filename>, holds executables that 
714 the user is expected to invoke.  Notably,
715 <Filename>ghc</Filename> and <Filename>ghci</FileName>.  On Unix, this directory
716 is typically something like <Filename>/usr/local/bin</Filename>.  On Windows,
717 however, this directory is always <Filename>$(libdir)/bin</Filename>.
718 </para>
719 </listitem>
720 </varlistentry>
721 <varlistentry>
722 <term>Library directory,</term>
723 <listitem> <para> known as <Filename>$(libdir)</Filename>, holds all the 
724 support files needed to run GHC.  On Unix, this 
725 directory is usually something like <Filename>/usr/lib/ghc/ghc-5.02</Filename>. </para>
726 </listitem>
727 </varlistentry>
728 </variablelist>
729
730 <para>
731 When GHC runs, it must know where its library directory is.
732 It finds this out in one of two ways:
733 </para>
734 <itemizedlist>
735 <listitem>
736 <para>
737 <Filename>$(libdir)</Filename> is passed to GHC using the <option>-B</option> flag.
738 On Unix (but not Windows), the installed <filename>ghc</filename> is just a one-line 
739 shell script that invokes the real GHC, passing a suitable <option>-B</option> flag. 
740 [All the user-supplied flags
741 follow, and a later <option>-B</option> flag overrides an earlier one, so a user-supplied
742 one wins.]
743 </para>
744 </listitem>
745 <listitem>
746 <para> On Windows (but not Unix), if no <option>-B</option> flag is given, GHC uses a system
747 call to find the directory in which the running GHC executable lives, and derives 
748 <Filename>$(libdir)</Filename> from that. [Unix lacks such a system call.]
749 </para>
750 </listitem>
751 </itemizedlist>
752
753 <sect2> <title>Layout of the library directory</title>
754
755 <para>The layout of the library directory is almost identical on
756 Windows and Unix, as follows: layout:</para>
757
758 <programlisting>
759   $(libdir)/
760     package.conf           GHC package configuration
761     ghc-usage.txt          Message displayed by ghc &ndash;&ndash;help
762     
763     bin/                   [Win32 only]  User-visible binaries
764          ghc.exe
765          ghci.bat
766
767     unlit                  Remove literate markup
768     
769     touchy.exe             [Win32 only]
770     perl.exe               [Win32 only]
771     gcc.exe                [Win32 only]
772    
773     ghc-x.xx               GHC executable [Unix only]
774    
775     ghc-split              Asm code splitter
776     ghc-asm                Asm code mangler
777
778     gcc-lib/               [Win32 only] Support files for gcc
779         specs              gcc configuration
780  
781         cpp0.exe           gcc support binaries
782         as.exe
783         ld.exe
784
785         crt0.o              Standard
786            ..etc..          binaries
787         
788         libmingw32.a        Standard
789            ..etc..          libraries
790
791         *.h                 Include files
792
793     imports/                GHC interface files
794         std/*.hi              'std' library
795         lang/*.hi             'lang' library
796         ..etc..
797
798     include/                 C header files
799         StgMacros.h           GHC-specific
800         ..etc...              header files
801
802         mingw/*.h            [Win32 only] Mingwin header files
803
804     libHSrts.a              GHC library archives
805     libHSstd.a
806     libHSlang.a
807       ..etc..
808
809     HSstd1.o                GHC library linkables
810     HSstd2.o                  (used by ghci, which does
811     HSlang.o                  not grok .a files yet)
812 </programlisting>
813
814 <para>Note that:</para>
815 <itemizedlist>
816 <listitem>
817 <para>On Win32, the <filename>$(libdir)/bin</filename> directory contains user-visible binaries; 
818 add it to your <filename>PATH</filename>.  The <filename>ghci</filename> executable is a <filename>.bat</filename>
819 file which invokes <filename>ghc</filename>.   </para>
820
821 <para>The GHC executable is the Real Thing (no intervening
822 shell scripts or <filename>.bat</filename> files).  
823 Reason: we sometimes invoke GHC with very long command lines,
824 and <filename>cmd.exe</filename> (which executes <filename>.bat</filename> files)
825 truncates them.  [We assume people won't invoke ghci with very long
826 command lines.]</para>
827
828 <para>On Unix, the user-invokable <filename>ghc</filename> invokes <filename>$(libdir)/ghc-<replaceable>version</replaceable></filename>,
829 passing a suitable <option>-B</option> flag. 
830 </para>
831 </listitem>
832
833         <listitem>
834           <para><filename>$(libdir)</filename> also contains support
835           binaries.  These are <emphasis>not</emphasis> expected to be
836           on the user's <filename>PATH</filename>, but and are invoked
837           directly by GHC.  In the Makefile system, this directory is
838           also called <filename>$(libexecdir)</filename>, but
839           <emphasis>you are not free to change it</emphasis>.  It must
840           be the same as <filename>$(libdir)</filename>.</para>
841         </listitem>
842
843 <listitem>
844 <para>We distribute <filename>gcc</filename> with the Win32 distribution of GHC, so that users
845 don't need to install <filename>gcc</filename>, nor need to care about which version it is.
846 All <filename>gcc</filename>'s support files are kept in  <filename>$(libdir)/gcc-lib/</filename>.
847 </para> 
848 </listitem>
849
850 <listitem>
851 <para>Similarly, we distribute <filename>perl</filename> and a <filename>touch</filename> 
852 replacement (<filename>touchy.exe</filename>)
853 with the Win32 distribution of GHC. </para> 
854 </listitem>
855
856         <listitem>
857           <para>The support programs <filename>ghc-split</filename>
858           and <filename>ghc-asm</filename> are Perl scripts.  The
859           first line says <literal>#!/bin/perl</literal>; on Unix, the
860           script is indeed invoked as a shell script, which invokes
861           Perl; on Windows, GHC invokes
862           <filename>$(libdir)/perl.exe</filename> directly, which
863           treats the <literal>#!/bin/perl</literal> as a comment.
864           Reason: on Windows we want to invoke the Perl distributed
865           with GHC, rather than assume some installed one.  </para>
866         </listitem>
867 </itemizedlist>
868
869 </sect2>
870
871 </sect1>
872
873 </Chapter>
874
875 <!-- Emacs stuff:
876      ;;; Local Variables: ***
877      ;;; mode: sgml ***
878      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
879      ;;; End: ***
880  -->