[project @ 2000-05-09 09:27:03 by rrt]
[ghc-hetmet.git] / ghc / docs / users_guide / installing.sgml
1 <Chapter id="sec-installing-bin-distrib">
2 <Title>Installing from binary distributions</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 &ldquo;bootstrap&rdquo; it, somehow.  We provide
10 machine-generated C-files-from-Haskell for this purpose, but it's
11 really quite a pain to use them.  If you must build GHC from its
12 sources, using a binary-distributed GHC to do so is a sensible way to
13 proceed. For the other <Literal>fptools</Literal> programs, many are written in Haskell,
14 so binary distributions allow you to install them without having a Haskell compiler.)
15 </Para>
16
17 <Para>This guide is in two parts: installing on Unix-a-likes, and installing on Windows.</Para>
18
19
20 <Sect1><Title>Installing on Unix-a-likes</Title>
21
22 <Sect2>
23 <Title>Bundle structure</Title>
24
25 <Para>
26 <IndexTerm><Primary>bundles of binary stuff</Primary></IndexTerm>
27 </Para>
28
29 <Para>
30 Binary distributions come in &ldquo;bundles,&rdquo; one bundle per file called
31 <Literal>&lt;bundle&gt;-&lt;platform&gt;.tar.gz</Literal>.  (See the building guide for the definition of a platform.)  Suppose that you untar a binary-distribution bundle, thus:
32 </Para>
33
34 <Para>
35
36 <Screen>
37 % cd /your/scratch/space
38 % gunzip &#60; ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -</Screen>
39
40 </Para>
41
42 <Para>
43 Then you should find a single directory, <Literal>fptools</Literal>, with the following
44 structure:
45 </Para>
46
47 <Para>
48 <IndexTerm><Primary>binary distribution, layout</Primary></IndexTerm>
49 <IndexTerm><Primary>directory layout (binary distributions)</Primary></IndexTerm>
50 <VariableList>
51
52 <VarListEntry>
53 <Term><Literal>Makefile.in</Literal></Term>
54 <ListItem>
55 <Para>
56 the raw material from which the <Literal>Makefile</Literal>
57 will be made (<Xref LinkEnd="sec-install">).
58 </Para>
59 </ListItem></VarListEntry>
60 <VarListEntry>
61 <Term><Literal>configure</Literal></Term>
62 <ListItem>
63 <Para>
64 the configuration script (<Xref LinkEnd="sec-install">).
65 </Para>
66 </ListItem></VarListEntry>
67 <VarListEntry>
68 <Term><Literal>README</Literal></Term>
69 <ListItem>
70 <Para>
71 Contains this file summary.
72 </Para>
73 </ListItem></VarListEntry>
74 <VarListEntry>
75 <Term><Literal>INSTALL</Literal></Term>
76 <ListItem>
77 <Para>
78 Contains this description of how to install
79 the bundle.
80 </Para>
81 </ListItem></VarListEntry>
82 <VarListEntry>
83 <Term><Literal>ANNOUNCE</Literal></Term>
84 <ListItem>
85 <Para>
86 The announcement message for the bundle.
87 </Para>
88 </ListItem></VarListEntry>
89 <VarListEntry>
90 <Term><Literal>NEWS</Literal></Term>
91 <ListItem>
92 <Para>
93 release notes for the bundle&mdash;a longer version
94 of <Literal>ANNOUNCE</Literal>.  For GHC, the release notes are contained in the User
95 Guide and this file isn't present.
96 </Para>
97 </ListItem></VarListEntry>
98 <VarListEntry>
99 <Term><Literal>bin/&lt;platform&gt;</Literal></Term>
100 <ListItem>
101 <Para>
102 contains platform-specific executable
103 files to be invoked directly by the user.  These are the files that
104 must end up in your path.
105 </Para>
106 </ListItem></VarListEntry>
107 <VarListEntry>
108 <Term><Literal>lib/&lt;platform&gt;/</Literal></Term>
109 <ListItem>
110 <Para>
111 contains platform-specific support
112 files for the installation.  Typically there is a subdirectory for
113 each <Literal>fptools</Literal> project, whose name is the name of the project with its
114 version number.  For example, for GHC there would be a sub-directory
115 <Literal>ghc-x.xx</Literal>/ where <Literal>x.xx</Literal> is the version number of GHC in the bundle.
116 </Para>
117
118 <Para>
119 These sub-directories have the following general structure:
120 </Para>
121
122 <Para>
123 <VariableList>
124
125 <VarListEntry>
126 <Term><Literal>libHSstd.a</Literal> etc:</Term>
127 <ListItem>
128 <Para>
129 supporting library archives.
130 </Para>
131 </ListItem></VarListEntry>
132 <VarListEntry>
133 <Term><Literal>ghc-iface.prl</Literal> etc:</Term>
134 <ListItem>
135 <Para>
136 support scripts.
137 </Para>
138 </ListItem></VarListEntry>
139 <VarListEntry>
140 <Term><Literal>import/</Literal></Term>
141 <ListItem>
142 <Para>
143 <IndexTerm><Primary>Interface files</Primary></IndexTerm> (<Literal>.hi</Literal>) for the prelude.
144 </Para>
145 </ListItem></VarListEntry>
146 <VarListEntry>
147 <Term><Literal>include/</Literal></Term>
148 <ListItem>
149 <Para>
150 A few C <Literal>&num;include</Literal> files.
151 </Para>
152 </ListItem></VarListEntry>
153 </VariableList>
154 </Para>
155 </ListItem></VarListEntry>
156 <VarListEntry>
157 <Term><Literal>share/</Literal></Term>
158 <ListItem>
159 <Para>
160 contains platform-independent support files
161 for the installation.  Again, there is a sub-directory for each
162 <Literal>fptools</Literal> project.
163 </Para>
164 </ListItem></VarListEntry>
165 <VarListEntry>
166 <Term><Literal>html/</Literal></Term>
167 <ListItem>
168 <Para>
169 contains HTML documentation files (one
170 sub-directory per project).
171 </Para>
172 </ListItem></VarListEntry>
173 <VarListEntry>
174 <Term><Literal>man/</Literal></Term>
175 <ListItem>
176 <Para>
177 contains Unix manual pages.
178 </Para>
179 </ListItem></VarListEntry>
180 </VariableList>
181 </Para>
182
183 <Para>
184 This structure is designed so that you can unpack multiple bundles
185 (including ones from different releases or platforms) into a single
186 <Literal>fptools</Literal> directory
187 <FOOTNOTE>
188
189 <Para>
190 this doesn't work at the
191 moment
192 </Para>
193
194 </FOOTNOTE>
195 :
196 </Para>
197
198 <Para>
199
200 <Screen>
201 % cd /your/scratch/space
202 % gunzip &#60; ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -
203 % gunzip &#60; happy-x.xx-sun-sparc-sunos4.tar.gz | tar xvf -</Screen>
204
205 </Para>
206
207 <Para>
208 When you do multiple unpacks like this, the top level <Literal>Makefile</Literal>,
209 <Literal>README</Literal>, and <Literal>INSTALL</Literal> get overwritten each time.
210 That's fine&mdash;they should be the same.  Likewise, the
211 <Literal>ANNOUNCE-&lt;bundle&gt;</Literal> and <Literal>NEWS-&lt;bundle&gt;</Literal>
212 files will be duplicated across multiple platforms, so they will be
213 harmlessly overwritten when you do multiple unpacks.  Finally, the
214 <Literal>share/</Literal> stuff will get harmlessly overwritten when you do
215 multiple unpacks for one bundle on different platforms.
216 </Para>
217
218 <Sect3 id="sec-install">
219 <Title>Installing</Title>
220
221 <Para>
222 OK, so let's assume that you have unpacked your chosen bundles into a
223 scratch directory <Literal>fptools</Literal>. What next? Well, you will at least need
224 to run the <Literal>configure</Literal><IndexTerm><Primary>configure</Primary></IndexTerm> script by changing your
225 directory to <Literal>fptools</Literal> and typing <Literal>./configure</Literal>.  That should convert
226 <Literal>Makefile.in</Literal> to <Literal>Makefile</Literal>.
227 </Para>
228
229 <Para>
230 <IndexTerm><Primary>installing in-place</Primary></IndexTerm>
231 <IndexTerm><Primary>in-place installation</Primary></IndexTerm>
232 You can now either start using the tools <Emphasis>in-situ</Emphasis> without going
233 through any installation process, just type <Literal>make in-place</Literal> to set the
234 tools up for this. You'll also want to add the path which <Literal>make</Literal> will
235 now echo to your <Literal>PATH</Literal> environment variable. This option is useful if
236 you simply want to try out the package and/or you don't have the
237 necessary privileges (or inclination) to properly install the tools
238 locally. Note that if you do decide to install the package `properly'
239 at a later date, you have to go through the installation steps that
240 follows.
241 </Para>
242
243 <Para>
244 To install an <Literal>fptools</Literal> package, you'll have to do the following:
245 </Para>
246
247 <Para>
248
249 <OrderedList>
250 <ListItem>
251
252 <Para>
253  Edit the <Literal>Makefile</Literal> and check the settings of the following variables:
254
255 <IndexTerm><Primary>directories, installation</Primary></IndexTerm>
256 <IndexTerm><Primary>installation directories</Primary></IndexTerm>
257
258 <VariableList>
259
260 <VarListEntry>
261 <Term><Literal>platform</Literal></Term>
262 <ListItem>
263 <Para>
264 the platform you are going to install for.
265 </Para>
266 </ListItem></VarListEntry>
267 <VarListEntry>
268 <Term><Literal>bindir</Literal></Term>
269 <ListItem>
270 <Para>
271 the directory in which to install user-invokable
272 binaries.
273 </Para>
274 </ListItem></VarListEntry>
275 <VarListEntry>
276 <Term><Literal>libdir</Literal></Term>
277 <ListItem>
278 <Para>
279 the directory in which to install
280 platform-dependent support files.
281 </Para>
282 </ListItem></VarListEntry>
283 <VarListEntry>
284 <Term><Literal>datadir</Literal></Term>
285 <ListItem>
286 <Para>
287 the directory in which to install
288 platform-independent support files.
289 </Para>
290 </ListItem></VarListEntry>
291 <VarListEntry>
292 <Term><Literal>infodir</Literal></Term>
293 <ListItem>
294 <Para>
295 the directory in which to install Emacs info
296 files.
297 </Para>
298 </ListItem></VarListEntry>
299 <VarListEntry>
300 <Term><Literal>htmldir</Literal></Term>
301 <ListItem>
302 <Para>
303 the directory in which to install HTML
304 documentation.
305 </Para>
306 </ListItem></VarListEntry>
307 <VarListEntry>
308 <Term><Literal>dvidir</Literal></Term>
309 <ListItem>
310 <Para>
311 the directory in which to install DVI
312 documentation.
313 </Para>
314 </ListItem></VarListEntry>
315 </VariableList>
316
317 The values for these variables can be set through invocation of the
318 <Command>configure</Command><IndexTerm><Primary>configure</Primary></IndexTerm>
319 script that comes with the distribution, but doing an optical diff to
320 see if the values match your expectations is always a Good Idea.
321 </para>
322
323 <para>
324 <Emphasis>Instead of running <Command>configure</Command>, it is
325 perfectly OK to copy <Filename>Makefile.in</Filename> to
326 <Filename>Makefile</Filename> and set all these variables directly
327 yourself.  But do it right!</Emphasis>
328 </Para>
329
330 </ListItem>
331 <ListItem>
332
333 <Para>
334 Run <Literal>make install</Literal>.  This <Emphasis>
335 should</Emphasis> work with ordinary Unix
336 <Literal>make</Literal>&mdash;no need for fancy stuff like GNU
337 <Literal>make</Literal>.
338
339 </Para>
340 </ListItem>
341 <ListItem>
342
343 <Para>
344 <Literal>rehash</Literal> (t?csh or zsh users), so your shell will see the new
345 stuff in your bin directory.
346
347 </Para>
348 </ListItem>
349 <ListItem>
350
351 <Para>
352  Once done, test your &ldquo;installation&rdquo; as suggested in 
353 <XRef LinkEnd="sec-GHC-test">.  Be sure to use a <Literal>-v</Literal>
354 option, so you can see exactly what pathnames it's using.
355
356 If things don't work as expected, check the list of know pitfalls in
357 the building guide.
358 </Para>
359 </ListItem>
360
361 </OrderedList>
362
363 </Para>
364
365 <Para>
366 <IndexTerm><Primary>link, installed as ghc</Primary></IndexTerm>
367 When installing the user-invokable binaries, this installation
368 procedure will install GHC as <Literal>ghc-x.xx</Literal> where <Literal>x.xx</Literal> is the version
369 number of GHC.  It will also make a link (in the binary installation
370 directory) from <Literal>ghc</Literal> to <Literal>ghc-x.xx</Literal>.  If you install multiple versions
371 of GHC then the last one &ldquo;wins&rdquo;, and &ldquo;<Literal>ghc</Literal>&rdquo; will invoke the last
372 one installed.  You can change this manually if you want.  But
373 regardless, <Literal>ghc-x.xx</Literal> should always invoke GHC version <Literal>x.xx</Literal>.
374 </Para>
375
376 </Sect3>
377
378
379 <Sect3>
380 <Title>What bundles there are</Title>
381
382 <Para>
383 <IndexTerm><Primary>bundles, binary</Primary></IndexTerm>
384 There are plenty of &ldquo;non-basic&rdquo; GHC bundles.  The files for them are
385 called <Literal>ghc-x.xx-&lt;bundle&gt;-&lt;platform&gt;.tar.gz</Literal>, where
386 the <Literal>&lt;platform&gt;</Literal> is as above, and <Literal>&lt;bundle&gt;</Literal> is one
387 of these:
388 </Para>
389
390 <Para>
391 <VariableList>
392
393 <VarListEntry>
394 <Term><Literal>prof</Literal>:</Term>
395 <ListItem>
396 <Para>
397 Profiling with cost-centres.  You probably want this.
398 <IndexTerm><Primary>profiling bundles</Primary></IndexTerm>
399 <IndexTerm><Primary>bundles, profiling</Primary></IndexTerm>
400 </Para>
401 </ListItem></VarListEntry>
402 <VarListEntry>
403 <Term><Literal>par</Literal>:</Term>
404 <ListItem>
405 <Para>
406 Parallel Haskell features (sits on top of PVM).
407 You'll want this if you're into that kind of thing.
408 <IndexTerm><Primary>parallel bundles</Primary></IndexTerm>
409 <IndexTerm><Primary>bundles, parallel</Primary></IndexTerm>
410 </Para>
411 </ListItem></VarListEntry>
412 <VarListEntry>
413 <Term><Literal>gran</Literal>:</Term>
414 <ListItem>
415 <Para>
416 The &ldquo;GranSim&rdquo; parallel-Haskell simulator
417 (hmm&hellip; mainly for implementors).
418 <IndexTerm><Primary>bundles, gransim</Primary></IndexTerm>
419 <IndexTerm><Primary>gransim bundles</Primary></IndexTerm>
420 </Para>
421 </ListItem></VarListEntry>
422 <VarListEntry>
423 <Term><Literal>ticky</Literal>:</Term>
424 <ListItem>
425 <Para>
426 &ldquo;Ticky-ticky&rdquo; profiling; very detailed
427 information about &ldquo;what happened when I ran this program&rdquo;&mdash;really
428 for implementors.
429 <IndexTerm><Primary>bundles, ticky-ticky</Primary></IndexTerm>
430 <IndexTerm><Primary>ticky-ticky bundles</Primary></IndexTerm>
431 </Para>
432 </ListItem></VarListEntry>
433 </VariableList>
434 </Para>
435
436 <Para>
437 One likely scenario is that you will grab <Emphasis>two</Emphasis>
438 binary bundles&mdash;basic, and profiling.  We don't usually make the
439 rest, although you can build them yourself from a source distribution.
440 </Para>
441
442 </Sect3>
443
444 <Sect3 id="sec-GHC-test">
445 <Title>Testing that GHC seems to be working
446 </Title>
447
448 <Para>
449 <IndexTerm><Primary>testing a new GHC</Primary></IndexTerm>
450 </Para>
451
452 <Para>
453 The way to do this is, of course, to compile and run <Emphasis>this</Emphasis> program
454 (in a file <Literal>Main.hs</Literal>):
455 </Para>
456
457 <Para>
458
459 <ProgramListing>
460 main = putStr "Hello, world!\n"
461 </ProgramListing>
462
463 </Para>
464
465 <Para>
466 Compile the program, using the <Literal>-v</Literal> (verbose) flag to verify that
467 libraries, etc., are being found properly:
468
469 <Screen>
470 % ghc -v -o hello Main.hs</Screen>
471
472 </Para>
473
474 <Para>
475 Now run it:
476
477 <Screen>
478 % ./hello
479 Hello, world!</Screen>
480
481 </Para>
482
483 <Para>
484 Some simple-but-profitable tests are to compile and run the notorious
485 <Literal>nfib</Literal><IndexTerm><Primary>nfib</Primary></IndexTerm> program, using different numeric types.  Start with
486 <Literal>nfib :: Int -&gt; Int</Literal>, and then try <Literal>Integer</Literal>, <Literal>Float</Literal>, <Literal>Double</Literal>,
487 <Literal>Rational</Literal> and perhaps the overloaded version.  Code for this is
488 distributed in <Literal>ghc/misc/examples/nfib/</Literal> in a source distribution.
489 </Para>
490
491 <Para>
492 For more information on how to &ldquo;drive&rdquo; GHC, either do <Literal>ghc -help</Literal> or
493 consult the User's Guide (distributed in several pre-compiled formats
494 with a binary distribution, or in source form in
495 <Literal>ghc/docs/users&lowbar;guide</Literal> in a source distribution).
496 </Para>
497
498 </Sect3>
499
500 </Sect2>
501
502 </Sect1>
503
504
505 <Sect1><Title>Installing on Windows</Title>
506
507 <Para>
508 Getting the Glasgow Haskell Compiler (GHC) to run on Windows95/98 or
509 Windows NT4 platforms can be a bit of a trying experience. This document
510 tries to simplify the task by enumerating the steps you need to
511 follow in order to set up and configure your machine to run GHC (at
512 least that's the intention ;-)
513 </Para>
514
515 <Sect2><Title>System requirements</Title>
516
517 <Para>
518 An installation of GHC requires ca. 70M of disk space. The size of the
519 installed GHC distribution is just(!) 17M, the rest is needed by
520 supporting software.
521 </Para>
522
523 <Para>
524 To run GHC comfortably, your machine should have at least 32M of memory.
525 </Para>
526
527 </Sect2>
528
529
530 <Sect2><Title>Your environment variables</Title>
531
532 <Para>
533 Much of the Unixy stuff below involves setting environment variables.  
534 This section summarises  how to set these variables on a Windows machine, in
535 case you don't know alread.y
536 On WinNT/Win2k, to edit your <Constant>PATH</Constant> variable (for example),
537 do the following:
538 </Para>
539
540 <ItemizedList>
541 <ListItem><Para>Press Start/Settings/Control Panels</Para></ListItem>
542 <ListItem><Para>Double-click System</Para></ListItem>
543 <ListItem><Para>Press Advanced</Para></ListItem>
544 <ListItem><Para>Press Environment Variables</Para></ListItem>
545 <ListItem><Para>Under System Variables, select PATH</Para></ListItem>
546 <ListItem><Para>Press Edit</Para></ListItem>
547 <ListItem><Para>Add "<Filename>;C:/whatever/</Filename>" to the end of the string (for example)</Para></ListItem>
548 <ListItem><Para>Press OK</Para></ListItem>
549 </ItemizedList>
550
551 <Para>
552 Some environment variables are &ldquo;user variables&rdquo; and
553 some are &ldquo;system variables&rdquo;.  I'm not sure of the difference
554 but both are changed though the same dialogue.
555 </Para>
556
557 <Para>
558 In addition, when running a Cygwin (see <XRef LinkEnd="sec-required">) shell
559 you can set environment variables in your <Filename>.bashrc</Filename> file.
560 But it is better to set your environment variables from the
561 control panel (they get inherited by bash) because then they are visible
562 to applications that aren't started by bash.  For example,
563 when you're invoking CVS (and ssh) via Emacs keybindings;
564 it invokes <Filename>cvs.exe</Filename> without going via bash.
565 </Para>
566
567 <Para>
568 On a Win9x machine you need to edit <Filename>autoexec.bat</Filename> using
569 <Filename>Windows/system/Sysedit</Filename>.  You need to reboot to make
570 the new settings take effect.
571 </Para>
572
573 </Sect2>
574
575
576 <Sect2 id="sec-required"><Title>Software required</Title>
577
578 <Para>
579 You need two chunks of software other than GHC itself: the Cygwin toolchain, and Perl.  Here's how to get and install them.
580 </Para>
581
582 <Sect3><Title>The cygwin toolchain (beta20.1)</Title>
583
584 <Para>
585 GHC depends at the moment on the cygwin tools to operate, which
586 dresses up the Win32 environment into something more UNIX-like.
587 (notably, it provides <Command>gcc</Command>, <Command>as</Command> and <Command>ld</Command>),
588 so you'll need to install these tools first. You also need
589 Cygwin to use CVS.
590 </Para>
591
592 <Para>
593 Important grungy information about Cygwin:
594 </Para>
595
596 <ItemizedList>
597
598 <ListItem>
599 <Para>
600 Cygwin doesn't deal well with filenames that include
601 spaces. "<Filename>Program Files</Filename>" and "<Filename>Local files</Filename>" are
602 common gotchas.
603 </Para>
604 </ListItem>
605
606 <ListItem>
607 <Para>
608 Cygwin implements a symbolic link as a text file with some
609 magical text in it.  So programs that don't use Cygwin's
610 I/O libraries won't recognise such files as symlinks.  
611 In particular, programs compiled by GHC are meant to be runnable
612 without having Cygwin, so they don't use the Cygwin library, so
613 they don't recognise symlinks.
614 </Para>
615 </ListItem>
616
617 </ItemizedList>
618
619 <Para>
620 Here's how to install Cygwin.
621 </Para>
622
623 <ItemizedList>
624
625 <ListItem>
626 <Para>
627 Download cygwin, beta20.1 (<filename>full.exe</filename>) from
628 <ULink URL="http://sourceware.cygnus.com/cygwin/">sourceware.cygnus.com</ULink>
629 Install this somewhere locally.
630 </Para>
631 </ListItem>
632
633 <ListItem>
634 <Para>
635 Create the following directories (if they aren't already there):
636 </Para>
637
638 <ItemizedList>
639 <ListItem><Para><Filename>c:/etc</Filename></Para></ListItem>
640 <ListItem><Para><Filename>c:/bin</Filename></Para></ListItem>
641 <ListItem><Para><Filename>c:/usr/local/bin</Filename></Para></ListItem>
642 </ItemizedList>
643
644 <Para>
645 (using <Command>mkdir -p /bin</Command>, etc.)
646 </Para>
647 </ListItem>
648
649 <ListItem>
650 <Para>
651 Copy <Filename>bash.exe</Filename> from the <Filename>bin</Filename>
652 directory of the cygwin tree
653 (<Filename>cygwin-b20/H-i586-cygwin32/bin/bash.exe</Filename>) to
654 <Filename>/bin</Filename> as <Filename>sh.exe</Filename>.  You might
655 think that it was easier to use bash directly from it original Cygwin
656 directory, but (a) some UNIX utils have got
657 <Filename>/bin/sh</Filename> hardwired in, and (b) the path following
658 <Literal>#!</Literal> is limited to 32 characters.
659 </Para>
660 </ListItem>
661
662 <ListItem>
663 <Para>
664 If you're an Emacs user and want to be able to run <Command>bash</Command>
665 from within a shell buffer, see the <ULink URL="http://www.cs.washington.edu/homes/voelker/ntemacs.html">NT Emacs home page</ULink> for
666 instructions on how to set this up.
667 </Para>
668 </ListItem>
669
670 </ItemizedList>
671
672 <Para>
673 The following environment variables must be set:
674 </Para>
675
676 <Para>
677 <InformalTable>
678 <TGroup cols="2">
679 <ColSpec Align="Left" Colsep="0">
680 <ColSpec Align="Left" Colsep="0">
681 <TBody>
682
683 <Row>
684 <Entry><Constant>PATH</Constant></Entry>
685 <Entry>System</Entry>
686 <Entry><Para>
687 Add <Filename>C:\cygnus\cygwin-b20\H-i586-cygwin32\bin</Filename>.
688 <Command>bash</Command> needs this, and when it is invoked from <Filename>/bin</Filename> it can't
689 find it. <Filename>c:/bin</Filename> and <Filename>c:/usr/local/bin</Filename> should also be added.
690 </Para></Entry>
691 </Row>
692
693 <Row>
694 <Entry><Constant>SHELL</Constant></Entry>
695 <Entry>User</Entry>
696 <Entry><Para>
697 <Filename>c:/bin/sh</Filename>.
698 </Para></Entry>
699 </Row>
700
701 <Row>
702 <Entry><Constant>HOME</Constant></Entry>
703 <Entry>User</Entry>
704 <Entry><Para>
705 Set to point to your home directory.  This is where, for example,
706 <Command>bash</Command> will look for your <Filename>.bashrc</Filename>
707 file.
708 </Para></Entry>
709 </Row>
710
711 <Row>
712 <Entry><Constant>MAKE_MODE</Constant></Entry>
713 <Entry>User</Entry>
714 <Entry><Para>
715 Set to <Literal>UNIX</Literal>.  If you don't do
716 this you get very weird messages when you type `<Command>make</Command>', such as:
717 </Para><Screen>
718 /c: /c: No such file or directory</Screen></Entry>
719 </Row>
720
721 <Row>
722 <Entry><Constant>TMPDIR</Constant></Entry>
723 <Entry>User</Entry>
724 <Entry><Para>
725 Set to <Filename>c:/tmp</Filename>. For some reason, Win2k invisibly sets
726 this variable to point to a temporary directory in your profile, that
727 contains embedded spaces.  If GHC sees the <Constant>TMPDIR</Constant>
728 variable set, it tries to use it for temporary files, but Cygwin
729 doesn't grok filenames with spaces, so disaster results.
730 </Para><Para>
731 Furthermore, it seems that <Constant>TMPDIR</Constant> must be set to a directory
732 in the same file system in which you invoke GHC.  Otherwise you get very werid messages
733 when you invoke GHC, such as:
734 <Screen>
735 does not exist
736 Action: openFile
737 Reason: file does not exist /tmp/ghc11068.cpp</Screen>
738 We think this is due to a bug in Cygwin.
739 </Para></Entry>
740 </Row>
741 </TBody>
742
743 </TGroup>
744 </InformalTable>
745 </Para>
746
747 </Sect3>
748
749
750 <Sect3><Title>Perl5</Title>
751
752 <Para>
753 The driver script is written in Perl, so you'll need to have this
754 installed too. However, the ghc binary distribution includes a
755 perl binary for you to make use of, should you not already have a
756 cygwin compatible one. Note: GHC does <Emphasis>not</Emphasis>
757 work with the ActiveState port of perl.
758 </Para>
759
760 </Sect3>  <!-- Perl -->
761
762 </Sect2>  <!-- Reqd software -->
763
764
765 <Sect2><Title>Installing GHC</Title>
766
767 <Para>
768 Download a GHC distribution:
769 </Para>
770
771 <VariableList>
772
773 <VarListEntry>
774 <Term>ghc-4.045&mdash;InstallShield installer, 10M: <ULink URL="http://www.dcs.gla.ac.uk/~sof/ghc-4.045-win32-IS.zip">http</ULink> or <ULink URL="ftp://ftp.dcs.gla.ac.uk/pub/haskell/glasgow/4.04/ghc-4.045-win32-IS.zip">ftp</ULink>
775 </Term>
776
777 <ListItem>
778 <Para>
779 (The version number may change.) It is packaged up using an installer that should be familiar-looking to Windows users. Unpack and double click on <Filename>setup.exe</Filename>.
780 </Para>
781
782 <Para>
783 Note: The cygwin support for long file names containing
784 spaces is not 100%, so make sure that you install ghc in a directory
785 that has no embedded spaces (i.e., resist the temptation to put it
786 in <Filename>/Program Files/</Filename>!)
787 </Para>
788
789 <Para>
790 When the installer has completed its job, you may delete the
791 <Filename>ghcInstall</Filename> directory.
792 </Para>
793
794 <Para>
795 When the installer has completed, make sure you add the location of the
796 ghc <Filename>bin/</Filename> directory to your path (i.e. <Filename>/path/to/wherever/ghc-4.05/bin </Filename>).
797 You need to do this in order to bring the various GHC DLLs into scope;
798 if not, then you need to copy the DLLs into a directory that is (the
799 system directory, for example).
800 </Para>
801
802 <Para>
803 Note: In case you haven't got perl already installed,
804 you will have to manually copy the <Filename>perl.exe</Filename> binary from the
805 ghc <Filename>bin/</Filename> into your <Filename>/bin</Filename> directory before continuing&mdash;the installer will not currently do this.
806 </Para>
807 </ListItem>
808
809 </VarListEntry>
810
811 <VarListEntry>
812 <Term>
813 ghc-4.045 - gzip'ed tarfile, 7.5M: <ULink URL="http://www.dcs.gla.ac.uk/~sof/ghc-4.045-win32.tar.gz">
814 http</ULink> or <ULink URL="ftp://ftp.dcs.gla.ac.uk/pub/haskell/glasgow/4.04/ghc-4.045-win32.tar.gz">ftp</ULink>
815 </Term>
816
817 <ListItem>
818 <Para>
819 A `normal' GHC binary distribution packaged up as a compressed tar file.
820 If you're already accustomed to installing and using GHC distributions
821 on other platforms, the setup should be familiar to you, I
822 hope. Unpack and read the INSTALL file contained in the
823 distribution for instructions on how to set it up.
824 </Para>
825
826 <Para>
827 Notice that the top directory of the distribution contains
828 (rather clumsily) a perl binary (version 5.005_02). If you
829 haven't already got a working perl, install this somewhere
830 along your path too.
831 </Para>
832 </ListItem>
833
834 </VarListEntry>
835 </VariableList>
836
837 <Para>
838 Make sure that you set all the environment variables described above
839 under Cygwin installation, including <Constant>TMPDIR</Constant>
840 </Para>
841 <Para>
842 To test the fruits of your labour, try now to compile a simple
843 Haskell program:
844 </Para>
845
846 <Screen>
847 bash$ cat main.hs
848 module Main(main) where
849
850 main = putStrLn "Hello, world!"
851 bash$ /path/to/the/ghc/bin/directory/ghc-4.05 -o main main.hs
852 ..
853 bash$ ./main
854 Hello, world!
855 bash$ </Screen>
856
857 <Para>
858 OK, assuming that worked, you're all set. Go forth and write useful
859 Haskell programs :-) If not, consult the installation FAQ (<XRef LinkEnd="winfaq">); if that still doesn't help then please report the problems you're experiencing (see <Xref LinkEnd="wrong">).
860 </Para>
861
862 <Para>
863 Further information on using GHC under Windows can be found in <ULink URL="http://www.dcs.gla.ac.uk/~sof/ghc-win32.html">Sigbj&oslash;rn Finne's pages</ULink>.
864 </Para>
865
866 </Sect2>
867
868 </Sect1>
869
870
871 <Sect1 id="winfaq"><title>Installing ghc-win32 FAQ</title>
872
873 <QandASet>
874
875 <QandAEntry>
876
877 <Question>
878 <Para>
879 Invoking ghc doesn't seem to do anything, it immediately returns without having compiled the input file.
880 </Para>
881 </Question>
882
883 <Answer>
884 <Para>
885 One cause of this is that <Filename>/bin/sh</Filename> is missing. To verify, open up a
886 bash session and type <Command>ls -l /bin/sh.exe</Command>. If <Filename>sh.exe</Filename> is 
887 reported as not being there, copy <Filename>bash.exe</Filename> (which you'll find
888 inside the cygwin installation tree as <Filename>H-i586-cygwin32/bin/bash.exe</Filename>)
889 to <Filename>/bin/sh.exe</Filename>.
890 </Para>
891
892 <Para>
893 All being well, ghc should then start to function.
894 </Para>
895 </Answer>
896
897 </QandAEntry>
898
899 <QandAEntry>
900
901 <Question>
902 <Para>
903 When compiling up the <Literal>Hello World</Literal> example, the following happens:
904 </Para>
905
906 <Screen>
907 bash$ /ghc/ghc-4.05/bin/ghc-4.05 main.hs
908 &lt;stdin&gt;:0:25: Character literal '{-# LINE 1 "main.hs" -}' too long
909 &lt;stdin&gt;:0:25:  on input: "'"
910 bash$ </Screen>
911
912 <Para>
913 or
914 </Para>
915
916 <Screen>
917 bash$ /ghc/ghc-4.05/bin/ghc-4.05 main.hs
918 Program too big fit into memory under NT
919 bash$ </Screen>
920 </Question>
921
922 <Answer>
923 <Para>
924 The cause of this is that you're using a version of <Command>perl</Command> that employs the Microsoft <Command>cmd</Command>/<Command>command</Command> shell when launching sub-processes to execute <Function>system()</Function> calls.
925 </Para>
926
927 <Para>
928 The GHC driver really needs a <Command>perl</Command> which uses a `UNIX'y  shell instead, so
929 make sure that the version you're using is of an compatible ilk. In particular, 
930 if <Command>perl -v</Command> reports that you've got a copy of the (otherwise fine) port
931 of perl done by ActiveState, you're in trouble.
932 </Para>
933
934 <Para>
935 If you're stuck with an incompatible <Command>perl</Command>, the GHC installation comes with a very basic <Command>perl</Command> binary for you to use. Simply copy it into the <Command>/bin</Command> directory.
936 </Para>
937
938 <Para>
939 Notice that copying <Filename>perl.exe</Filename> into <Filename>/bin</Filename> will not cause
940 the GHC install to suddenly start functioning. If you don't want to
941 re-run the InstallShield installer again, you need to edit the following
942 files within the directory tree that the installer created:
943 </Para>
944
945 <Screen>
946 bin/ghc-4.xx   -- where xx is the minor release number
947 bin/stat2resid
948 bin/hstags
949 lib/mkdependHS</Screen>
950
951 <Para>
952 For each of these files, you need to edit the first line from instead
953 saying <Command>#!/path/to/your/other/perl/install</Command> to <Command>#!/bin/perl</Command>.
954 Once that is done, try compiling up the Hello, World example again.
955 </Para>
956
957 <Para>
958 Should you want to pick up a complete installation of a ghc-friendly port
959 of perl instead, a <ULink URL="http://cygutils.netpedia.net/">cygwin port</ULink> is available.
960 </Para>
961 </Answer>
962
963 </QandAEntry>
964
965 <QAndAEntry>
966
967 <Question>
968 <Para>
969 <Function>System.getArgs</Function> always return the empty list, i.e. the following program always prints &ldquo;<Literal>[]</Literal>&rdquo;:
970 </Para>
971
972 <ProgramListing>
973 module Main(main) where
974 import qualified System
975 main = System.getArgs >>= print
976 </ProgramListing>
977
978 </Question>
979
980 <Answer>
981 <Para>
982 This is a bug with the RTS DLL that comes with ghc-4.03. To fix, upgrade to
983 ghc-4.05.
984 </Para>
985 </Answer>
986
987 </QAndAEntry>
988
989 </QandASet>
990
991 </Sect1>
992
993
994 <Sect1>
995 <Title>Building the documentation</Title>
996
997 <Para>
998 This is a slightly sore point at the moment, because the GHC team has been unable to strike a good balance between having a documentation system that is easy to maintain and one that is widely available. We use the DocBook DTD, which is widely used; however, shrink-wrapped distributions of DocBook are few and far between, and getting it to work out of the box is a nightmare. We settled on the Cygnus DocBook tools; however, these are only available as Red Hat RPMs, and hence at the moment the documentation can only be built on systems which can use RPMs (i.e. most versions of Linux). Sorry about that. We will probably add pre-built documentation to future source distributions (it's already in binary distributions, of course) until the situation is sorted out (either we bite the bullet and have our own version of the DocBook tools, or a more portable distribution is made available).
999 </Para>
1000
1001 <Para>
1002 See the Building Guide for details of what to install to get the DocBook tools and how to build the documentation (it's done by the build system, but just isn't part of a normal build).
1003 </Para>
1004
1005 </Sect1>
1006
1007 </Chapter>
1008
1009 <!-- Emacs stuff:
1010      ;;; Local Variables: ***
1011      ;;; mode: sgml ***
1012      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
1013      ;;; End: ***
1014  -->