[project @ 2003-02-24 12:44:38 by simonpj]
[ghc-hetmet.git] / docs / building / building.sgml
1 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
2
3 <Article id="building-guide">
4
5 <ArtHeader>
6
7 <Title>Building the Glasgow Functional Programming Tools Suite</Title>
8 <Author><OtherName>The GHC Team</OtherName></Author>
9 <Address><Email>glasgow-haskell-&lcub;users,bugs&rcub;@haskell.org</Email></Address>
10 <PubDate>November 2001</PubDate>
11
12     <abstract>
13       <para>The Glasgow fptools suite is a collection of Functional
14       Programming related tools, including the Glasgow Haskell
15       Compiler (GHC).  The source code for the whole suite is kept in
16       a single CVS repository and shares a common build and
17       installation system.</para>
18
19       <para>This guide is intended for people who want to build or
20       modify programs from the Glasgow <Literal>fptools</Literal>
21       suite (as distinct from those who merely want to
22       <Emphasis>run</Emphasis> them). Installation instructions are
23       now provided in the user guide.</para>
24
25       <para>The bulk of this guide applies to building on Unix
26       systems; see <XRef LinkEnd="winbuild"> for Windows notes.</para>
27     </abstract>
28
29   </artheader>
30
31
32   <sect1 id="sec-getting">
33     <title>Getting the sources</title>
34     
35     <para>You can get your hands on the <literal>fptools</literal>
36     in two ways:</para>
37
38     <variablelist>
39
40       <varlistentry>
41         <term><indexterm><primary>Source
42         distributions</primary></indexterm>Source distributions</term>
43         <listitem>
44           <para>You have a supported platform, but (a)&nbsp;you like
45           the warm fuzzy feeling of compiling things yourself;
46           (b)&nbsp;you want to build something ``extra&rdquo;&mdash;e.g., a
47           set of libraries with strictness-analysis turned off; or
48           (c)&nbsp;you want to hack on GHC yourself.</para>
49
50           <para>A source distribution contains complete sources for
51           one or more projects in the <literal>fptools</literal>
52           suite.  Not only that, but the more awkward
53           machine-independent steps are done for you.  For example, if
54           you don't have
55           <command>happy</command><indexterm><primary>happy</primary></indexterm>
56           you'll find it convenient that the source distribution
57           contains the result of running <command>happy</command> on
58           the parser specifications.  If you don't want to alter the
59           parser then this saves you having to find and install
60           <command>happy</command>. You will still need a working
61           version of GHC (preferably version 4.08+) on your machine in
62           order to compile (most of) the sources, however.</para>
63         </listitem>
64       </varlistentry>
65
66       <varlistentry>
67         <term>The CVS repository.</term>
68         <indexterm><primary>CVS repository</primary>
69         </indexterm>
70         <listitem>
71           <para>We make releases infrequently.  If you want more
72           up-to-the minute (but less tested) source code then you need
73           to get access to our CVS repository.</para>
74
75           <para>All the <literal>fptools</literal> source code is held
76           in a CVS repository. CVS is a pretty good source-code
77           control system, and best of all it works over the
78           network.</para>
79
80           <para>The repository holds source code only. It holds no
81           mechanically generated files at all.  So if you check out a
82           source tree from CVS you will need to install every utility
83           so that you can build all the derived files from
84           scratch.</para>
85
86           <para>More information about our CVS repository can be found
87           in <xref linkend="sec-cvs">.</para>
88         </listitem>
89       </varlistentry>
90     </variablelist>
91
92     <para>If you are going to do any building from sources (either
93     from a source distribution or the CVS repository) then you need to
94     read all of this manual in detail.</para>
95   </sect1>
96
97   <sect1 id="sec-cvs">
98     <title>Using the CVS repository</title>
99
100     <para>We use <ulink url="http://www.cvshome.org/">CVS</ulink> (Concurrent Version System) to keep track of our
101     sources for various software projects. CVS lets several people
102     work on the same software at the same time, allowing changes to be
103     checked in incrementally. </para>
104
105     <para>This section is a set of guidelines for how to use our CVS
106     repository, and will probably evolve in time. The main thing to
107     remember is that most mistakes can be undone, but if there's
108     anything you're not sure about feel free to bug the local CVS
109     meister (namely Jeff Lewis
110     <email>jlewis@galconn.com</email>). </para>
111
112     <sect2 id="cvs-access">
113       <title>Getting access to the CVS Repository</title>
114
115       <para>You can access the repository in one of two ways:
116       read-only (<xref linkend="cvs-read-only">), or read-write (<xref
117       linkend="cvs-read-write">).</para>
118
119       <sect3 id="cvs-read-only">
120         <title>Remote Read-only CVS Access</title>
121
122         <para>Read-only access is available to anyone - there's no
123         need to ask us first.  With read-only CVS access you can do
124         anything except commit changes to the repository.  You can
125         make changes to your local tree, and still use CVS's merge
126         facility to keep your tree up to date, and you can generate
127         patches using 'cvs diff' in order to send to us for
128         inclusion. </para>
129
130         <para>To get read-only access to the repository:</para>
131
132         <orderedlist>
133           <listitem>
134             <para>Make sure that <application>cvs</application> is
135             installed on your machine.</para>
136           </listitem>
137           <listitem>
138             <para>Set your <literal>$CVSROOT</literal> environment variable to
139             <literal>:pserver:anoncvs@glass.cse.ogi.edu:/cvs</literal></para>
140           </listitem>
141           <listitem>
142             <para>Run the command</para>
143 <programlisting>
144     $ cvs login
145 </programlisting>
146             <para>The password is simply <literal>cvs</literal>.  This
147             sets up a file in your home directory called
148             <literal>.cvspass</literal>, which squirrels away the
149             dummy password, so you only need to do this step once.</para>
150           </listitem>
151
152           <listitem>
153             <para>Now go to <xref linkend="cvs-first">.</para>
154           </listitem>
155         </orderedlist>
156       </sect3>
157
158       <sect3 id="cvs-read-write">
159         <title>Remote Read-Write CVS Access</title>
160
161         <para>We generally supply read-write access to folk doing
162         serious development on some part of the source tree, when
163         going through us would be a pain. If you're developing some
164         feature, or think you have the time and inclination to fix
165         bugs in our sources, feel free to ask for read-write
166         access. There is a certain amount of responsibility that goes
167         with commit privileges; we are more likely to grant you access
168         if you've demonstrated your competence by sending us patches
169         via mail in the past.</para>
170
171         <para>To get remote read-write CVS access, you need to do the
172         following steps.</para>
173
174         <orderedlist>
175           <listitem>
176             <para>Make sure that <literal>cvs</literal> and
177             <literal>ssh</literal> are both installed on your
178             machine.</para>
179           </listitem>
180
181           <listitem>
182             <para>Generate a DSA private-key/public-key pair, thus:</para>
183 <screen>
184      $ ssh-keygen -d
185 </screen>
186             <para>(<literal>ssh-keygen</literal> comes with
187             <literal>ssh</literal>.)  Running <literal>ssh-keygen
188             -d</literal> creates the private and public keys in
189             <literal>$HOME/.ssh/id_dsa</literal> and
190             <literal>$HOME/.ssh/id_dsa.pub</literal> respectively
191             (assuming you accept the standard defaults).</para>
192
193             <para><literal>ssh-keygen -d</literal> will only work if
194             you have Version 2 <literal>ssh</literal> installed; it
195             will fail harmlessly otherwise.  If you only have Version
196             1 you can instead generate an RSA key pair using plain</para>
197 <screen>
198     $ ssh-keygen
199 </screen>
200
201             <para>Doing so creates the private and public RSA keys in
202             <literal>$HOME/.ssh/identity</literal> and
203             <literal>$HOME/.ssh/identity.pub</literal>
204             respectively.</para>
205
206             <para>[Deprecated.]  Incidentally, you can force a Version
207             2 <literal>ssh</literal> to use the Version 1 protocol by
208             creating <literal>$HOME/config</literal> with the
209             following in it:</para>
210 <screen>
211    BatchMode Yes
212
213    Host cvs.haskell.org
214    Protocol 1
215 </screen>
216
217             <para>In both cases, <literal>ssh-keygen</literal> will
218             ask for a <firstterm>passphrase</firstterm>.  The
219             passphrase is a password that protects your private key.
220             In response to the 'Enter passphrase' question, you can
221             either:</para>
222             <itemizedlist>
223               <listitem>
224                 <para>[Recommended.]  Enter a passphrase, which you
225                 will quote each time you use CVS.
226                 <literal>ssh-agent</literal> makes this entirely
227                 un-tiresome.</para>
228               </listitem>
229               <listitem>
230                 <para>[Deprecated.] Just hit return (i.e. use an empty
231                 passphrase); then you won't need to quote the
232                 passphrase when using CVS.  The downside is that
233                 anyone who can see into your <literal>.ssh</literal>
234                 directory, and thereby get your private key, can mess
235                 up the repository.  So you must keep the
236                 <literal>.ssh</literal> directory with draconian
237                 no-access permissions.</para>
238               </listitem>
239             </itemizedlist>
240
241
242        <para>
243        [Windows users.] The programs <command>ssh-keygen1</command>, <command>ssh1</command>, and <command>cvs</command>,
244        seem to lock up <command>bash</command> entirely if they try to get user input (e.g. if
245        they ask for a password).  To solve this, start up <filename>cmd.exe</filename> 
246        and run it as follows:
247        <Screen>
248        c:\tmp> set CYGWIN32=tty
249        c:\tmp> c:/user/local/bin/ssh-keygen1
250        </Screen> </para>
251
252             <para>[Windows users.] To protect your
253             <literal>.ssh</literal> from access by anyone else,
254             right-click your <literal>.ssh</literal> directory, and
255             select <literal>Properties</literal>.  If you are not on
256             the access control list, add yourself, and give yourself
257             full permissions (the second panel).  Remove everyone else
258             from the access control list.  Don't leave them there but
259             deny them access, because 'they' may be a list that
260             includes you!</para>
261           </listitem>
262
263           <listitem>
264             <para>Send a message to to the CVS repository
265             administrator (currently Jeff Lewis
266             <email>jeff@galconn.com</email>), containing:</para>
267             <itemizedlist>
268               <listitem>
269                 <para>Your desired user-name.</para>
270               </listitem>
271               <listitem>
272                 <para>Your <literal>.ssh/id_dsa.pub</literal> (or
273                 <literal>.ssh/identity.pub</literal>).</para>
274               </listitem>
275             </itemizedlist>
276             <para>He will set up your account.</para>
277           </listitem>
278
279           <listitem>
280             <para>Set the following environment variables:</para>
281            <ItemizedList>
282            <listitem>
283            <para>
284            <constant>$HOME</constant>: points to your home directory.  This is where CVS
285            will look for its <filename>.cvsrc</filename> file.
286            </para>
287            </listitem>
288
289            <listitem>
290            <para>
291            <constant>$CVS_RSH</constant> to <filename>ssh</filename>
292            </para>
293            <para>[Windows users.] Setting your <literal>CVS_RSH</literal> to
294             <literal>ssh</literal> assumes that your CVS client
295             understands how to execute shell script
296             (&quot;#!&quot;s,really), which is what
297             <literal>ssh</literal> is. This may not be the case on
298             Win32 platforms, so in that case set <literal>CVS_RSH</literal> to
299             <literal>ssh1</literal>.</para>
300            </listitem>
301
302              <listitem>
303                 <para><literal>$CVSROOT</literal> to
304                 <literal>:ext:</literal><replaceable>your-username</replaceable>
305                 <literal>@cvs.haskell.org:/home/cvs/root</literal>
306                 where <replaceable>your-username</replaceable> is your user name on
307                 <literal>cvs.haskell.org</literal>.
308                 </para>
309         <para>The <literal>CVSROOT</literal> environment variable will
310         be recorded in the checked-out tree, so you don't need to set
311         this every time. </para>
312
313              </listitem>
314
315         <listitem>
316         <para>
317         <constant>$CVSEDITOR</constant>: <filename>bin/gnuclient.exe</filename> 
318         if you want to use an Emacs buffer for typing in those long commit messages.
319         </para>
320         </listitem>
321
322         <listitem>
323         <para>
324         <constant>$SHELL</constant>: To use bash as the shell in Emacs, you need to
325         set this to point to <filename>bash.exe</filename>.
326         </para>
327         </listitem>
328
329        </ItemizedList>
330
331
332           </listitem>
333
334           <listitem>
335           <para>
336           Put the following in <filename>$HOME/.cvsrc</filename>:
337           </para>
338           
339           <ProgramListing>
340           checkout -P
341           release -d
342           update -P
343           diff -u
344           </ProgramListing>
345           
346           <para>
347           These are the default options for the specified CVS commands,
348           and represent better defaults than the usual ones.  (Feel
349           free to change them.)
350           </para>
351           
352           <para>
353           [Windows users.]  Filenames starting with <filename>.</filename> were illegal in 
354           the 8.3 DOS filesystem, but that restriction should have
355           been lifted by now (i.e., you're using VFAT or later filesystems.) If
356           you're still having problems creating it, don't worry; <filename>.cvsrc</filename> is entirely
357           optional.
358           </para>
359           </listitem>
360
361         </orderedlist>
362
363
364         <para>[Experts.]  Once your account is set up, you can get
365         access from other machines without bothering Jeff, thus:</para>
366         <orderedlist>
367           <listitem>
368             <para>Generate a public/private key pair on the new
369             machine.</para>
370           </listitem>
371           <listitem>
372             <para>Use ssh to log in to
373             <literal>cvs.haskell.org</literal>, from your old
374             machine.</para>
375           </listitem>
376           <listitem>
377             <para>Add the public key for the new machine to the file
378             <literal>$HOME/ssh/authorized_keys</literal> on
379             <literal>cvs.haskell.org</literal>.
380             (<literal>authorized_keys2</literal>, I think, for Version
381             2 protocol.)</para>
382           </listitem>
383           <listitem>
384             <para>Make sure that the new version of
385             <literal>authorized_keys</literal> still has 600 file
386             permissions.</para>
387           </listitem>
388         </orderedlist>
389       </sect3>
390     </sect2>
391
392
393
394     <sect2 id="cvs-first">
395       <title>Checking Out a Source Tree</title>
396
397       <itemizedlist>
398         <listitem>
399           <para>Make sure you set your <literal>CVSROOT</literal>
400           environment variable according to either of the remote
401           methods above. The Approved Way to check out a source tree
402           is as follows:</para>
403
404 <screen>
405     $ cvs checkout fpconfig
406 </screen>
407
408           <para>At this point you have a new directory called
409           <literal>fptools</literal> which contains the basic stuff
410           for the fptools suite, including the configuration files and
411           some other junk. </para>
412
413 <para>[Windows users.]  The following messages appear to be harmless:
414 <Screen>
415 setsockopt IPTOS_LOWDELAY: Invalid argument
416 setsockopt IPTOS_THROUGHPUT: Invalid argument
417 </Screen>
418 </para>
419
420
421           <para>You can call the fptools directory whatever you like,
422           CVS won't mind: </para>
423           
424 <screen>
425     $ mv fptools <replaceable>directory</replaceable>
426 </screen>
427
428           <para> NB: after you've read the CVS manual you might be
429           tempted to try</para>
430 <screen>
431     $ cvs checkout -d <replaceable>directory</replaceable> fpconfig
432 </screen>
433
434           <para>instead of checking out <literal>fpconfig</literal>
435           and then renaming it.  But this doesn't work, and will
436           result in checking out the entire repository instead of just
437           the <literal>fpconfig</literal> bit.</para>
438 <screen>
439     $ cd <replaceable>directory</replaceable>
440     $ cvs checkout ghc hslibs libraries
441 </screen>
442
443           <para>The second command here checks out the relevant
444           modules you want to work on. For a GHC build, for instance,
445           you need at least the <literal>ghc</literal>,
446           <literal>hslibs</literal> and <literal>libraries</literal>
447           modules (for a full list of the projects available, see
448           <xref linkend="projects">).</para>
449         </listitem>
450       </itemizedlist>
451     </sect2>
452
453     <sect2 id="cvs-committing">
454       <title>Committing Changes</title>
455
456       <para>This is only if you have read-write access to the
457       repository. For anoncvs users, CVS will issue a &quot;read-only
458       repository&quot; error if you try to commit changes.</para>
459
460       <itemizedlist>
461         <listitem>
462           <para>Build the software, if necessary. Unless you're just
463           working on documentation, you'll probably want to build the
464           software in order to test any changes you make.</para>
465         </listitem>
466
467         <listitem>
468           <para>Make changes. Preferably small ones first.</para>
469         </listitem>
470
471         <listitem>
472           <para>Test them. You can see exactly what changes you've
473           made by using the <literal>cvs diff</literal> command:</para>
474 <screen>
475 $ cvs diff
476 </screen>
477           <para>lists all the changes (using the
478           <literal>diff</literal> command) in and below the current
479           directory. In emacs, <literal>C-c C-v =</literal> runs
480           <literal>cvs diff</literal> on the current buffer and shows
481           you the results.</para>
482         </listitem>
483
484       <listitem>
485           <para>Before checking in a change, you need to update your
486           source tree:</para>
487
488 <screen>
489 $ cd fptools
490 $ cvs update
491 </screen>
492           <para>This pulls in any changes that other people have made,
493           and merges them with yours. If there are any conflicts, CVS
494           will tell you, and you'll have to resolve them before you
495           can check your changes in. The documentation describes what
496           to do in the event of a conflict.</para>
497
498           <para>It's not always necessary to do a full cvs update
499           before checking in a change, since CVS will always tell you
500           if you try to check in a file that someone else has changed.
501           However, you should still update at regular intervals to
502           avoid making changes that don't work in conjuction with
503           changes that someone else made. Keeping an eye on what goes
504           by on the mailing list can help here.</para>
505         </listitem>
506
507         <listitem>
508           <para>When you're happy that your change isn't going to
509           break anything, check it in. For a one-file change:</para>
510
511 <screen>
512 $ cvs commit <replaceable>filename</replaceable>
513 </screen>
514
515           <para>CVS will then pop up an editor for you to enter a
516           &quot;commit message&quot;, this is just a short description
517           of what your change does, and will be kept in the history of
518           the file.</para>
519
520           <para>If you're using emacs, simply load up the file into a
521           buffer and type <literal>C-x C-q</literal>, and emacs will
522           prompt for a commit message and then check in the file for
523           you.</para>
524
525           <para>For a multiple-file change, things are a bit
526           trickier. There are several ways to do this, but this is the
527           way I find easiest. First type the commit message into a
528           temporary file. Then either</para>
529
530 <screen>
531 $ cvs commit -F <replaceable>commit-message</replaceable> <replaceable>file_1</replaceable> .... <replaceable>file_n</replaceable>
532 </screen>
533
534           <para>or, if nothing else has changed in this part of the
535           source tree, </para>
536
537 <screen>
538 $ cvs commit -F <replaceable>commit-message</replaceable> <replaceable>directory</replaceable>
539 </screen>
540
541           <para>where <replaceable>directory</replaceable> is a common
542           parent directory for all your changes, and
543           <replaceable>commit-message</replaceable> is the name of the
544           file containing the commit message.</para>
545
546           <para>Shortly afterwards, you'll get some mail from the
547           relevant mailing list saying which files changed, and giving
548           the commit message. For a multiple-file change, you should
549           still get only <emphasis>one</emphasis> message.</para>
550         </listitem>
551       </itemizedlist>
552     </sect2>
553
554     <sect2 id="cvs-update">
555       <title>Updating Your Source Tree</title>
556
557       <para>It can be tempting to cvs update just part of a source
558       tree to bring in some changes that someone else has made, or
559       before committing your own changes. This is NOT RECOMMENDED!
560       Quite often changes in one part of the tree are dependent on
561       changes in another part of the tree (the
562       <literal>mk/*.mk</literal> files are a good example where
563       problems crop up quite often). Having an inconsistent tree is a
564       major cause of headaches. </para>
565
566       <para>So, to avoid a lot of hassle, follow this recipe for
567       updating your tree: </para>
568
569 <screen>
570 $ cd fptools
571 $ cvs update -Pd 2&gt;&amp;1 | tee log</screen>
572
573       <para>Look at the log file, and fix any conflicts (denoted by a
574       <quote>C</quote> in the first column). If you're using multiple
575       build trees, then for every build tree you have pointing at this
576       source tree, you need to update the links in case any new files
577       have appeared: </para>
578
579 <screen>
580 $ cd <replaceable>build-tree</replaceable>
581 $ lndir <replaceable>source-tree</replaceable>
582 </screen>
583
584       <para>Some files might have been removed, so you need to remove
585       the links pointing to these non-existent files:</para>
586
587 <screen>
588 $ find . -xtype l -exec rm '{}' \;
589 </screen>
590
591       <para>To be <emphasis>really</emphasis> safe, you should do
592       </para>
593
594 <screen>$ gmake all</screen>
595
596       <para>from the top-level, to update the dependencies and build
597       any changed files. </para>
598     </sect2>
599
600     <sect2 id="cvs-tags">
601       <title>GHC Tag Policy</title>
602
603       <para>If you want to check out a particular version of GHC,
604       you'll need to know how we tag versions in the repository.  The
605       policy (as of 4.04) is:</para>
606
607       <itemizedlist>
608         <listitem>
609           <para>The tree is branched before every major release.  The
610           branch tag is <literal>ghc-x-xx-branch</literal>, where
611           <literal>x-xx</literal> is the version number of the release
612           with the <literal>'.'</literal> replaced by a
613           <literal>'-'</literal>.  For example, the 4.04 release lives
614           on <literal>ghc-4-04-branch</literal>.</para>
615         </listitem>
616
617         <listitem>
618           <para>The release itself is tagged with
619           <literal>ghc-x-xx</literal> (on the branch).  eg. 4.06 is
620           called <literal>ghc-4-06</literal>.</para>
621         </listitem>
622
623         <listitem>
624           <para>We didn't always follow these guidelines, so to see
625           what tags there are for previous versions, do <literal>cvs
626           log</literal> on a file that's been around for a while (like
627           <literal>fptools/ghc/README</literal>).</para>
628         </listitem>
629       </itemizedlist>
630
631       <para>So, to check out a fresh GHC 4.06 tree you would
632       do:</para>
633
634 <screen>
635      $ cvs co -r ghc-4-06 fpconfig
636      $ cd fptools
637      $ cvs co -r ghc-4-06 ghc hslibs
638 </screen>
639     </sect2>
640
641     <sect2 id="cvs-hints">
642       <title>General Hints</title>
643
644       <itemizedlist>
645         <listitem>
646           <para>As a general rule: commit changes in small units,
647           preferably addressing one issue or implementing a single
648           feature.  Provide a descriptive log message so that the
649           repository records exactly which changes were required to
650           implement a given feature/fix a bug. I've found this
651           <emphasis>very</emphasis> useful in the past for finding out
652           when a particular bug was introduced: you can just wind back
653           the CVS tree until the bug disappears.</para>
654         </listitem>
655
656         <listitem>
657           <para>Keep the sources at least *buildable* at any given
658           time. No doubt bugs will creep in, but it's quite easy to
659           ensure that any change made at least leaves the tree in a
660           buildable state. We do nightly builds of GHC to keep an eye
661           on what things work/don't work each day and how we're doing
662           in relation to previous verions. This idea is truely wrecked
663           if the compiler won't build in the first place!</para>
664         </listitem>
665
666         <listitem>
667           <para>To check out extra bits into an already-checked-out
668           tree, use the following procedure.  Suppose you have a
669           checked-out fptools tree containing just ghc, and you want
670           to add nofib to it:</para>
671
672 <screen>
673 $ cd fptools
674 $ cvs checkout nofib
675 </screen>
676
677           <para>or: </para>
678
679 <screen>
680 $ cd fptools
681 $ cvs update -d nofib
682 </screen>
683           
684           <para>(the -d flag tells update to create a new
685           directory). If you just want part of the nofib suite, you
686           can do </para>
687
688 <screen>
689 $ cd fptools
690 $ cvs checkout nofib/spectral
691 </screen>
692
693           <para>This works because <literal>nofib</literal> is a
694           module in its own right, and spectral is a subdirectory of
695           the nofib module. The path argument to checkout must always
696           start with a module name. There's no equivalent form of this
697           command using <literal>update</literal>.</para>
698         </listitem>
699       </itemizedlist>
700     </sect2>
701   </sect1>
702
703   <sect1 id="projects">
704     <title>What projects are there?</title>
705
706     <para>The <literal>fptools</literal> suite consists of several
707     <firstterm>projects</firstterm>, most of which can be downloaded,
708     built and installed individually.  Each project corresponds to a
709     subdirectory in the source tree, and if checking out from CVS then
710     each project can be checked out individually by sitting in the top
711     level of your source tree and typing <command>cvs checkout
712     <replaceable>project</replaceable></command>.</para>
713
714     <para>Here is a list of the projects currently available:</para>
715
716     <variablelist>
717       <varlistentry>
718         <term><literal>ghc</literal></term>
719         <indexterm><primary><literal>ghc</literal></primary>
720         <secondary>project</secondary></indexterm>
721         <listitem>
722           <para>The <ulink url="http://www.haskell.org/ghc/">Glasgow
723           Haskell Compiler</ulink> (minus libraries).  Absolutely
724           required for building GHC.</para>
725         </listitem>
726       </varlistentry>
727
728       <varlistentry>
729         <term><literal>glafp-utils</literal></term>
730         <indexterm><primary><literal>glafp-utils</literal></primary><secondary>project</secondary></indexterm>
731         <listitem>
732           <para>Utility programs, some of which are used by the
733           build/installation system.  Required for pretty much
734           everything.</para>
735         </listitem>
736       </varlistentry>
737
738       <varlistentry>
739         <term><literal>green-card</literal></term>
740         <indexterm><primary><literal>green-card</literal></primary><secondary>project</secondary></indexterm>
741         <listitem>
742           <para>The <ulink
743           url="http://www.haskell.org/greencard/">Green Card</ulink>
744           system for generating Haskell foreign function
745           interfaces.</para>
746         </listitem>
747       </varlistentry>
748
749       <varlistentry>
750         <term><literal>haggis</literal></term>
751         <indexterm><primary><literal>haggis</literal></primary><secondary>project</secondary></indexterm>
752         <listitem>
753           <para>The <ulink
754           url="http://www.dcs.gla.ac.uk/fp/software/haggis/">Haggis</ulink>
755           Haskell GUI framework.</para>
756         </listitem>
757       </varlistentry>
758
759       <varlistentry>
760         <term><literal>haddock</literal></term>
761         <indexterm><primary><literal>haddock</literal></primary><secondary>project</secondary></indexterm>
762         <listitem>
763           <para>The <ulink
764           url="http://www.haskell.org/haddock/">Haddock</ulink>
765           documentation tool.</para>
766         </listitem>
767       </varlistentry>
768
769       <varlistentry>
770         <term><literal>happy</literal></term>
771         <indexterm><primary><literal>happy</literal></primary><secondary>project</secondary></indexterm>
772         <listitem>
773           <para>The <ulink
774           url="http://www.haskell.org/happy/">Happy</ulink> Parser
775           generator.</para>
776         </listitem>
777       </varlistentry>
778
779       <varlistentry>
780         <term><literal>hdirect</literal></term>
781         <indexterm><primary><literal>hdirect</literal></primary><secondary>project</secondary></indexterm>
782         <listitem>
783           <para>The <ulink
784           url="http://www.haskell.org/hdirect/">H/Direct</ulink>
785           Haskell interoperability tool.</para>
786         </listitem>
787       </varlistentry>
788
789       <varlistentry>
790         <term><literal>hood</literal></term>
791         <indexterm><primary><literal>hood</literal></primary><secondary>project</secondary></indexterm>
792         <listitem>
793           <para>The <ulink url="http://www.haskell.org/hood/">Haskell
794           Object Observation Debugger</ulink>.</para>
795         </listitem>
796       </varlistentry>
797
798       <varlistentry>
799         <term><literal>hslibs</literal></term>
800         <indexterm><primary><literal>hslibs</literal></primary><secondary>project</secondary></indexterm>
801         <listitem>
802           <para>Supplemental libraries for GHC
803           (<emphasis>required</emphasis> for building GHC).</para>
804         </listitem>
805       </varlistentry>
806
807       <varlistentry>
808         <term><literal>libraries</literal></term>
809         <indexterm><primary><literal></literal></primary><secondary>project</secondary></indexterm>
810         <listitem>
811           <para>Hierarchical Haskell library suite
812           (<emphasis>required</emphasis> for building GHC).</para>
813         </listitem>
814       </varlistentry>
815
816       <varlistentry>
817         <term><literal>mhms</literal></term>
818         <indexterm><primary><literal></literal></primary><secondary>project</secondary></indexterm>
819         <listitem>
820           <para>The Modular Haskell Metric System.</para>
821         </listitem>
822       </varlistentry>
823
824       <varlistentry>
825         <term><literal>nofib</literal></term>
826         <indexterm><primary><literal>nofib</literal></primary><secondary>project</secondary></indexterm>
827         <listitem>
828           <para>The NoFib suite: A collection of Haskell programs used
829           primarily for benchmarking.</para>
830         </listitem>
831       </varlistentry>
832
833       <varlistentry>
834         <term><literal>testsuite</literal></term>
835         <indexterm><primary><literal>testsuite</literal></primary><secondary>project</secondary></indexterm>
836         <listitem>
837           <para>A testing framework, including GHC's regression test
838           suite.</para>
839         </listitem>
840       </varlistentry>
841     </variablelist>
842
843     <para>So, to build GHC you need at least the
844     <literal>ghc</literal>, <literal>libraries</literal> and
845     <literal>hslibs</literal> projects (a GHC source distribution will
846     already include the bits you need).</para>
847   </sect1>
848
849   <sect1 id="sec-build-checks">
850     <title>Things to check before you start</title>
851
852     <para>Here's a list of things to check before you get
853     started.</para>
854
855     <orderedlist>
856
857       <listitem>
858         <indexterm><primary>Disk space needed</primary></indexterm>
859         <para>Disk space needed: from about 100Mb for a basic GHC
860         build, up to probably 500Mb for a GHC build with everything
861         included (libraries built several different ways,
862         etc.).</para>
863       </listitem>
864
865       <listitem>
866         <para>Use an appropriate machine / operating system.  <xref
867         linkend="sec-port-info"> lists the supported platforms; if
868         yours isn't amongst these then you can try porting GHC (see
869         <xref linkend="sec-porting-ghc">).</para>
870       </listitem>
871
872       <listitem>
873         <para>Be sure that the &ldquo;pre-supposed&rdquo; utilities are
874         installed.  <Xref LinkEnd="sec-pre-supposed">
875         elaborates.</para>
876       </listitem>
877
878       <listitem>
879         <para>If you have any problem when building or installing the
880         Glasgow tools, please check the &ldquo;known pitfalls&rdquo; (<Xref
881         LinkEnd="sec-build-pitfalls">).  Also check the FAQ for the
882         version you're building, which is part of the User's Guide and
883         available on the <ulink URL="http://www.haskell.org/ghc/" >GHC web
884         site</ulink>.</para>
885
886         <indexterm><primary>bugs</primary><secondary>known</secondary></indexterm>
887
888         <para>If you feel there is still some shortcoming in our
889         procedure or instructions, please report it.</para>
890
891         <para>For GHC, please see the <ulink
892         url="http://www.haskell.org/ghc/docs/latest/set/bug-reporting.html">bug-reporting
893         section of the GHC Users' Guide</ulink>, to maximise the
894         usefulness of your report.</para>
895
896         <indexterm><primary>bugs</primary><secondary>seporting</secondary></indexterm>
897         <para>If in doubt, please send a message to
898         <email>glasgow-haskell-bugs@haskell.org</email>.
899         <indexterm><primary>bugs</primary><secondary>mailing
900         list</secondary></indexterm></para>
901       </listitem>
902     </orderedlist>
903   </sect1>
904
905   <sect1 id="sec-port-info">
906     <title>What machines the Glasgow tools run on</title>
907
908 <indexterm><primary>ports</primary><secondary>GHC</secondary></indexterm>
909 <indexterm><primary>GHC</primary><secondary>ports</secondary></indexterm>
910 <indexterm><primary>platforms</primary><secondary>supported</secondary></indexterm>
911
912     <para>The main question is whether or not the Haskell compiler
913     (GHC) runs on your platform.</para>
914
915     <para>A &ldquo;platform&rdquo; is a
916     architecture/manufacturer/operating-system combination, such as
917     <literal>sparc-sun-solaris2</literal>.  Other common ones are
918     <literal>alpha-dec-osf2</literal>,
919     <literal>hppa1.1-hp-hpux9</literal>,
920     <literal>i386-unknown-linux</literal>,
921     <literal>i386-unknown-solaris2</literal>,
922     <literal>i386-unknown-freebsd</literal>,
923     <literal>i386-unknown-cygwin32</literal>,
924     <literal>m68k-sun-sunos4</literal>,
925     <literal>mips-sgi-irix5</literal>,
926     <literal>sparc-sun-sunos4</literal>,
927     <literal>sparc-sun-solaris2</literal>,
928     <literal>powerpc-ibm-aix</literal>.</para>
929
930     <para>Some libraries may only work on a limited number of
931     platforms; for example, a sockets library is of no use unless the
932     operating system supports the underlying BSDisms.</para>
933
934     <sect2>
935       <title>What platforms the Haskell compiler (GHC) runs on</title>
936
937       <indexterm><primary>fully-supported platforms</primary></indexterm>
938       <indexterm><primary>native-code generator</primary></indexterm>
939       <indexterm><primary>registerised ports</primary></indexterm>
940       <indexterm><primary>unregisterised ports</primary></indexterm>
941
942       <para>The GHC hierarchy of Porting Goodness: (a)&nbsp;Best is a
943       native-code generator; (b)&nbsp;next best is a
944       &ldquo;registerised&rdquo; port; (c)&nbsp;the bare minimum is an
945       &ldquo;unregisterised&rdquo; port.
946       (&ldquo;Unregisterised&rdquo; is so terrible that we won't say
947       more about it).</para>
948
949       <para>We use Sparcs running Solaris 2.7 and x86 boxes running
950       FreeBSD and Linux, so those are the best supported platforms,
951       unsurprisingly.</para>
952
953       <para>Here's everything that's known about GHC ports.  We
954       identify platforms by their &ldquo;canonical&rdquo;
955       CPU/Manufacturer/OS triple.</para>
956
957       <variablelist>
958         <varlistentry>
959           <term>alpha-dec-{osf,linux,freebsd,openbsd,netbsd}:</term>
960           <indexterm><primary>alpha-dec-osf</primary></indexterm>
961           <indexterm><primary>alpha-dec-linux</primary></indexterm>
962           <indexterm><primary>alpha-dec-freebsd</primary></indexterm>
963           <indexterm><primary>alpha-dec-openbsd</primary></indexterm>
964           <indexterm><primary>alpha-dec-netbsd</primary></indexterm>
965           
966           <listitem>
967             <para>The OSF port is currently working (as of GHC version
968             5.02.1) and well supported.  The native code generator is
969             currently non-working.  Other operating systems will
970             require some minor porting.</para>
971           </listitem>
972         </varlistentry>
973
974         <varlistentry>
975           <term>sparc-sun-sunos4</term>
976           <indexterm><primary>sparc-sun-sunos4</primary></indexterm>
977           <listitem>
978             <para>Probably works with minor tweaks, hasn't been tested
979             for a while.</para>
980           </listitem>
981         </varlistentry>
982
983         <varlistentry>
984           <term>sparc-sun-solaris2</term>
985           <indexterm><primary>sparc-sun-solaris2</primary></indexterm>
986           <listitem>
987             <para>Fully supported (at least for Solaris 2.7),
988             including native-code generator.</para>
989           </listitem>
990         </varlistentry>
991
992         <varlistentry>
993           <term>hppa1.1-hp-hpux (HP-PA boxes running HPUX 9.x)</term>
994           <indexterm><primary>hppa1.1-hp-hpux</primary></indexterm>
995           <listitem>
996             <para>A registerised port is available for version 4.08,
997             but GHC hasn't been built on that platform since (as far
998             as we know).  No native-code generator.</para>
999           </listitem>
1000         </varlistentry>
1001
1002         <varlistentry>
1003           <term>i386-unknown-linux (PCs running Linux, ELF binary format)</term>
1004           <indexterm><primary>i386-*-linux</primary></indexterm>
1005           <listitem>
1006             <para>GHC works registerised and has a native code
1007             generator.  You <Emphasis>must</Emphasis> have GCC 2.7.x
1008             or later.  NOTE about <literal>glibc</literal> versions:
1009             GHC binaries built on a system running <literal>glibc
1010             2.0</literal> won't work on a system running
1011             <literal>glibc 2.1</literal>, and vice versa.  In general,
1012             don't expect compatibility between
1013             <literal>glibc</literal> versions, even if the shared
1014             library version hasn't changed.</para>
1015           </listitem>
1016         </varlistentry>
1017
1018         <varlistentry>
1019           <term>i386-unknown-freebsd (PCs running FreeBSD 2.2 or
1020           higher)</term>
1021           <indexterm><primary>i386-unknown-freebsd</primary></indexterm>
1022           <listitem>
1023             <para>GHC works registerised.  Pre-built packages are
1024             available in the native package format, so if you just
1025             need binaries you're better off just installing the
1026             package (it might even be on your installation
1027             CD!).</para>
1028           </listitem>
1029         </varlistentry>
1030
1031         <varlistentry>
1032           <term>i386-unknown-openbsd (PCs running OpenBSD)</term>
1033           <indexterm><primary>i386-unknown-openbsd</primary></indexterm> 
1034           <listitem>
1035             <para>Supported, with native code generator.  Packages are
1036             available through the ports system in the native package
1037             format.</para>
1038           </listitem>
1039         </varlistentry>
1040
1041         <varlistentry>
1042           <term>i386-unknown-netbsd (PCs running NetBSD and
1043             OpenBSD)</term>
1044             <indexterm><primary>i386-unknown-netbsd</primary></indexterm>
1045           <listitem>
1046             <para>Will require some minor porting effort, but should
1047             work registerised.</para>
1048           </listitem>
1049         </varlistentry>
1050
1051         <varlistentry>
1052           <term>i386-unknown-mingw32 (PCs running Windows)</term>
1053           <indexterm><primary>i386-unknown-mingw32</primary></indexterm>
1054           <listitem>
1055             <para>Fully supported under Win9x, WinNT, Win2k, and
1056             WinXP.  Includes a native code generator.  Building from
1057             source requires a recent <ulink
1058             url="http://www.cygwin.com/">Cygwin</ulink> distribution
1059             to be installed.</para>
1060           </listitem>
1061         </varlistentry>
1062
1063         <varlistentry>
1064           <term>ia64-unknown-linux</term>
1065           <indexterm><primary>ia64-unknown-linux</primary></indexterm>
1066           <listitem>
1067             <para>GHC currently works unregisterised.  A registerised
1068             port is in progress.</para>
1069           </listitem>
1070         </varlistentry>
1071
1072         <varlistentry>
1073           <term>mips-sgi-irix5</term>
1074           <indexterm><primary>mips-sgi-irix[5-6]</primary></indexterm>
1075           <listitem>
1076             <para>Port has worked in the past, but hasn't been tested
1077             for some time (and will certainly have rotted in various
1078             ways).  As usual, we don't have access to machines and
1079             there hasn't been an overwhelming demand for this port,
1080             but feel free to get in touch.</para>
1081           </listitem>
1082         </varlistentry>
1083
1084         <varlistentry>
1085           <term>powerpc-ibm-aix</term>
1086           <indexterm><primary>powerpc-ibm-aix</primary></indexterm>
1087           <listitem>
1088             <para>Port currently doesn't work, needs some minimal
1089             porting effort.  As usual, we don't have access to
1090             machines and there hasn't been an overwhelming demand for
1091             this port, but feel free to get in touch.</para>
1092           </listitem>
1093         </varlistentry>
1094
1095         <varlistentry>
1096           <term>powerpc-apple-darwin</term>
1097           <indexterm><primary>powerpc-apple-darwin</primary></indexterm> 
1098           <listitem>
1099             <para>Supported registerised.  No native code
1100             generator.</para>
1101           </listitem>
1102         </varlistentry>
1103
1104         <varlistentry>
1105           <term>powerpc-apple-linux</term>
1106           <indexterm><primary>powerpc-apple-linux</primary></indexterm> 
1107           <listitem>
1108             <para>Not supported (yet).</para>
1109           </listitem>
1110         </varlistentry>
1111       </variablelist>
1112
1113       <para>Various other systems have had GHC ported to them in the
1114       distant past, including various Motorola 68k boxes.  The 68k
1115       support still remains, but porting to one of these systems will
1116       certainly be a non-trivial task.</para>
1117     </sect2>
1118
1119     <sect2>
1120       <title>What machines the other tools run on</title>
1121
1122       <para>Unless you hear otherwise, the other tools work if GHC
1123       works.</para>
1124     </sect2>
1125   </sect1>
1126
1127
1128   <sect1 id="sec-pre-supposed">
1129     <title>Installing pre-supposed utilities</title>
1130
1131     <indexterm><primary>pre-supposed utilities</primary></indexterm>
1132     <indexterm><primary>utilities, pre-supposed</primary></indexterm>
1133
1134     <para>Here are the gory details about some utility programs you
1135     may need; <command>perl</command>, <command>gcc</command> and
1136     <command>happy</command> are the only important
1137     ones. (PVM<indexterm><primary>PVM</primary></indexterm> is
1138     important if you're going for Parallel Haskell.)  The
1139     <command>configure</command><indexterm><primary>configure</primary></indexterm>
1140     script will tell you if you are missing something.</para>
1141
1142     <variablelist>
1143
1144       <varlistentry>
1145         <term>GHC</term>
1146         <indexterm><primary>pre-supposed: GHC</primary></indexterm>
1147         <indexterm><primary>GHC, pre-supposed</primary></indexterm>
1148         <listitem>
1149           <para>GHC is required to build many of the tools, including
1150           GHC itself.  If you need to port GHC to your platform
1151           because there isn't a binary distribution of GHC available,
1152           then see <xref linkend="sec-porting-ghc">.</para>
1153
1154           <para>Which version of GHC you need will depend on the
1155           packages you intend to build.  GHC itself will normally
1156           build using one of several older versions of itself - check
1157           the announcement or release notes for details.</para>
1158         </listitem>
1159       </varlistentry>
1160
1161       <varlistentry>
1162         <term>Perl</term>
1163         <indexterm><primary>pre-supposed: Perl</primary></indexterm>
1164         <indexterm><primary>Perl, pre-supposed</primary></indexterm>
1165         <listitem>
1166           <para><emphasis>You have to have Perl to proceed!</emphasis>
1167           Perl version 5 at least is required.  GHC has been known to
1168           tickle bugs in Perl, so if you find that Perl crashes when
1169           running GHC try updating (or downgrading) your Perl
1170           installation.  Versions of Perl that we use and are known to
1171           be fairly stable are 5.005 and 5.6.1.</para>
1172
1173           <para>For Win32 platforms, you should use the binary
1174           supplied in the InstallShield (copy it to
1175           <filename>/bin</filename>).  The Cygwin-supplied Perl seems
1176           not to work.</para>
1177
1178           <para>Perl should be put somewhere so that it can be invoked
1179           by the <literal>&num;!</literal> script-invoking
1180           mechanism. The full pathname may need to be less than 32
1181           characters long on some systems.</para>
1182         </listitem>
1183       </varlistentry>
1184
1185       <varlistentry>
1186         <term>GNU C (<command>gcc</command>)</term>
1187         <indexterm><primary>pre-supposed: GCC (GNU C
1188         compiler)</primary></indexterm> <indexterm><primary>GCC (GNU C
1189         compiler), pre-supposed</primary></indexterm>
1190         <listitem>
1191           <para>We recommend using GCC version 2.95.2 on all
1192           platforms.  Failing that, version 2.7.2 is stable on most
1193           platforms.  Earlier versions of GCC can be assumed not to
1194           work, and versions in between 2.7.2 and 2.95.2 (including
1195           <command>egcs</command>) have varying degrees of stability
1196           depending on the platform.</para>
1197
1198           <para>If your GCC dies with &ldquo;internal error&rdquo; on
1199           some GHC source file, please let us know, so we can report
1200           it and get things improved.  (Exception: on iX86
1201           boxes&mdash;you may need to fiddle with GHC's
1202           <option>-monly-N-regs</option> option; see the User's
1203           Guide)</para>
1204         </listitem>
1205       </varlistentry>
1206
1207       <varlistentry>
1208         <term>GNU Make</term>
1209         <indexterm><primary>make</primary><secondary>GNU</secondary>
1210         </indexterm>
1211         <listitem>
1212           <para>The fptools build system makes heavy use of features
1213           specific to GNU <command>make</command>, so you must have
1214           this installed in order to build any of the fptools
1215           suite.</para>
1216         </listitem>
1217       </varlistentry>
1218
1219       <varlistentry>
1220         <term>Happy</term>
1221         <indexterm><primary>Happy</primary></indexterm>
1222         <listitem>
1223           <para>Happy is a parser generator tool for Haskell, and is
1224           used to generate GHC's parsers.  Happy is written in
1225           Haskell, and is a project in the CVS repository
1226           (<literal>fptools/happy</literal>).  It can be built from
1227           source, but bear in mind that you'll need GHC installed in
1228           order to build it.  To avoid the chicken/egg problem,
1229           install a binary distribtion of either Happy or GHC to get
1230           started.  Happy distributions are available from <ulink
1231           url="http://www.haskell.org/happy/">Happy's Web
1232           Page</ulink>.</para>
1233         </listitem>
1234       </varlistentry>
1235
1236       <varlistentry>
1237         <term>Autoconf</term>
1238         <indexterm><primary>pre-supposed: Autoconf</primary></indexterm>
1239         <indexterm><primary>Autoconf, pre-supposed</primary></indexterm>
1240         <listitem>
1241           <para>GNU Autoconf is needed if you intend to build from the
1242           CVS sources, it is <emphasis>not</emphasis> needed if you
1243           just intend to build a standard source distribution.</para>
1244
1245           <para>Autoconf builds the <command>configure</command>
1246           script from <filename>configure.in</filename> and
1247           <filename>aclocal.m4</filename>.  If you modify either of
1248           these files, you'll need <command>autoconf</command> to
1249           rebuild <filename>configure</filename>.</para>
1250         </listitem>
1251       </varlistentry>
1252
1253       <varlistentry>
1254         <term><command>sed</command></term>
1255         <indexterm><primary>pre-supposed: sed</primary></indexterm>
1256         <indexterm><primary>sed, pre-supposed</primary></indexterm>
1257         <listitem>
1258           <para>You need a working <command>sed</command> if you are
1259           going to build from sources.  The build-configuration stuff
1260           needs it.  GNU sed version 2.0.4 is no good!  It has a bug
1261           in it that is tickled by the build-configuration.  2.0.5 is
1262           OK. Others are probably OK too (assuming we don't create too
1263           elaborate configure scripts.)</para>
1264         </listitem>
1265       </varlistentry>
1266     </variablelist>
1267
1268     <para>One <literal>fptools</literal> project is worth a quick note
1269     at this point, because it is useful for all the others:
1270     <literal>glafp-utils</literal> contains several utilities which
1271     aren't particularly Glasgow-ish, but Occasionally Indispensable.
1272     Like <command>lndir</command> for creating symbolic link
1273     trees.</para>
1274
1275     <sect2 id="pre-supposed-gph-tools">
1276       <title>Tools for building parallel GHC (GPH)</title>
1277
1278       <variablelist>
1279         <varlistentry>
1280           <term>PVM version 3:</term>
1281           <indexterm><primary>pre-supposed: PVM3 (Parallel Virtual Machine)</primary></indexterm>
1282           <indexterm><primary>PVM3 (Parallel Virtual Machine), pre-supposed</primary></indexterm>
1283           <listitem>
1284             <para>PVM is the Parallel Virtual Machine on which
1285             Parallel Haskell programs run.  (You only need this if you
1286             plan to run Parallel Haskell.  Concurent Haskell, which
1287             runs concurrent threads on a uniprocessor doesn't need
1288             it.)  Underneath PVM, you can have (for example) a network
1289             of workstations (slow) or a multiprocessor box
1290             (faster).</para>
1291
1292             <para>The current version of PVM is 3.3.11; we use 3.3.7.
1293             It is readily available on the net; I think I got it from
1294             <literal>research.att.com</literal>, in
1295             <filename>netlib</filename>.</para>
1296
1297             <para>A PVM installation is slightly quirky, but easy to
1298             do.  Just follow the <filename>Readme</filename>
1299             instructions.</para>
1300           </listitem>
1301         </varlistentry>
1302
1303         <varlistentry>
1304           <term><command>bash</command>:</term>
1305           <indexterm><primary>bash, presupposed (Parallel Haskell only)</primary></indexterm>
1306           <listitem>
1307             <para>Sadly, the <command>gr2ps</command> script, used to
1308             convert &ldquo;parallelism profiles&rdquo; to PostScript,
1309             is written in Bash (GNU's Bourne Again shell).  This bug
1310             will be fixed (someday).</para>
1311           </listitem>
1312         </varlistentry>
1313       </variablelist>
1314     </sect2>
1315
1316     <sect2 id="pre-supposed-other-tools">
1317       <title>Other useful tools</title>
1318
1319       <variablelist>
1320         <varlistentry>
1321           <term>Flex</term>
1322           <indexterm><primary>pre-supposed: flex</primary></indexterm> 
1323           <indexterm><primary>flex, pre-supposed</primary></indexterm>
1324           <listitem>
1325             <para>This is a quite-a-bit-better-than-Lex lexer.  Used
1326             to build a couple of utilities in
1327             <literal>glafp-utils</literal>.  Depending on your
1328             operating system, the supplied <command>lex</command> may
1329             or may not work; you should get the GNU version.</para>
1330           </listitem>
1331         </varlistentry>
1332       </variablelist>
1333
1334       <para>More tools are required if you want to format the documentation
1335       that comes with GHC and other fptools projects.  See <xref
1336       linkend="building-docs">.</para>
1337     </sect2>
1338   </sect1>
1339
1340   <sect1 id="sec-building-from-source">
1341     <title>Building from source</title>
1342
1343     <indexterm><primary>Building from source</primary></indexterm>
1344     <indexterm><primary>Source, building from</primary></indexterm>
1345
1346     <para>You've been rash enough to want to build some of the Glasgow
1347     Functional Programming tools (GHC, Happy, nofib, etc.) from
1348     source.  You've slurped the source, from the CVS repository or
1349     from a source distribution, and now you're sitting looking at a
1350     huge mound of bits, wondering what to do next.</para>
1351
1352     <para>Gingerly, you type <command>make</command>.  Wrong
1353     already!</para>
1354
1355     <para>This rest of this guide is intended for duffers like me, who
1356     aren't really interested in Makefiles and systems configurations,
1357     but who need a mental model of the interlocking pieces so that
1358     they can make them work, extend them consistently when adding new
1359     software, and lay hands on them gently when they don't
1360     work.</para>
1361
1362     <sect2 id="quick-start">
1363       <title>Quick Start</title>
1364
1365       <para>If you are starting from a source distribution, and just
1366       want a completely standard build, then the following should
1367       work:</para>
1368
1369 <screen>$ ./configure
1370 $ make
1371 $ make install
1372 </screen>
1373
1374       <para>For GHC, this will do a 2-stage bootstrap build of the
1375       compiler, with profiling libraries, and install the
1376       results.</para>
1377
1378       <para>If you want to do anything at all non-standard, or you
1379       want to do some development, read on...</para>
1380     </sect2>
1381
1382     <sect2 id="sec-source-tree">
1383       <title>Your source tree</title>
1384
1385       <para>The source code is held in your <emphasis>source
1386       tree</emphasis>.  The root directory of your source tree
1387       <emphasis>must</emphasis> contain the following directories and
1388       files:</para>
1389
1390       <itemizedlist>
1391         <listitem>
1392           <para><filename>Makefile</filename>: the root
1393           Makefile.</para>
1394         </listitem>
1395
1396         <listitem>
1397           <para><filename>mk/</filename>: the directory that contains
1398           the main Makefile code, shared by all the
1399           <literal>fptools</literal> software.</para>
1400         </listitem>
1401
1402         <listitem>
1403           <para><filename>configure.in</filename>,
1404           <filename>config.sub</filename>,
1405           <filename>config.guess</filename>: these files support the
1406           configuration process.</para>
1407         </listitem>
1408
1409         <listitem>
1410           <para><filename>install-sh</filename>.</para>
1411         </listitem>
1412       </itemizedlist>
1413
1414       <para>All the other directories are individual
1415       <emphasis>projects</emphasis> of the <literal>fptools</literal>
1416       system&mdash;for example, the Glasgow Haskell Compiler
1417       (<literal>ghc</literal>), the Happy parser generator
1418       (<literal>happy</literal>), the <literal>nofib</literal>
1419       benchmark suite, and so on.  You can have zero or more of these.
1420       Needless to say, some of them are needed to build others.</para>
1421
1422       <para>The important thing to remember is that even if you want
1423       only one project (<literal>happy</literal>, say), you must have
1424       a source tree whose root directory contains
1425       <filename>Makefile</filename>, <filename>mk/</filename>,
1426       <filename>configure.in</filename>, and the project(s) you want
1427       (<filename>happy/</filename> in this case).  You cannot get by
1428       with just the <filename>happy/</filename> directory.</para>
1429     </sect2>
1430
1431     <sect2>
1432       <title>Build trees</title>
1433       <indexterm><primary>build trees</primary></indexterm>
1434       <indexterm><primary>link trees, for building</primary></indexterm>
1435
1436       <para>If you just want to build the software once on a single
1437       platform, then your source tree can also be your build tree, and
1438       you can skip the rest of this section.</para>
1439
1440       <para>We often want to build multiple versions of our software
1441       for different architectures, or with different options
1442       (e.g. profiling).  It's very desirable to share a single copy of
1443       the source code among all these builds.</para>
1444
1445       <para>So for every source tree we have zero or more
1446       <emphasis>build trees</emphasis>.  Each build tree is initially
1447       an exact copy of the source tree, except that each file is a
1448       symbolic link to the source file, rather than being a copy of
1449       the source file.  There are &ldquo;standard&rdquo; Unix
1450       utilities that make such copies, so standard that they go by
1451       different names:
1452       <command>lndir</command><indexterm><primary>lndir</primary></indexterm>,
1453       <command>mkshadowdir</command><indexterm><primary>mkshadowdir</primary></indexterm>
1454       are two (If you don't have either, the source distribution
1455       includes sources for the X11
1456       <command>lndir</command>&mdash;check out
1457       <filename>fptools/glafp-utils/lndir</filename>). See <Xref
1458       LinkEnd="sec-storysofar"> for a typical invocation.</para>
1459
1460       <para>The build tree does not need to be anywhere near the
1461       source tree in the file system.  Indeed, one advantage of
1462       separating the build tree from the source is that the build tree
1463       can be placed in a non-backed-up partition, saving your systems
1464       support people from backing up untold megabytes of
1465       easily-regenerated, and rapidly-changing, gubbins.  The golden
1466       rule is that (with a single exception&mdash;<XRef
1467       LinkEnd="sec-build-config">) <emphasis>absolutely everything in
1468       the build tree is either a symbolic link to the source tree, or
1469       else is mechanically generated</emphasis>.  It should be
1470       perfectly OK for your build tree to vanish overnight; an hour or
1471       two compiling and you're on the road again.</para>
1472
1473       <para>You need to be a bit careful, though, that any new files
1474       you create (if you do any development work) are in the source
1475       tree, not a build tree!</para>
1476
1477       <para>Remember, that the source files in the build tree are
1478       <emphasis>symbolic links</emphasis> to the files in the source
1479       tree.  (The build tree soon accumulates lots of built files like
1480       <filename>Foo.o</filename>, as well.)  You can
1481       <emphasis>delete</emphasis> a source file from the build tree
1482       without affecting the source tree (though it's an odd thing to
1483       do).  On the other hand, if you <emphasis>edit</emphasis> a
1484       source file from the build tree, you'll edit the source-tree
1485       file directly.  (You can set up Emacs so that if you edit a
1486       source file from the build tree, Emacs will silently create an
1487       edited copy of the source file in the build tree, leaving the
1488       source file unchanged; but the danger is that you think you've
1489       edited the source file whereas actually all you've done is edit
1490       the build-tree copy.  More commonly you do want to edit the
1491       source file.)</para>
1492
1493       <para>Like the source tree, the top level of your build tree
1494       must be (a linked copy of) the root directory of the
1495       <literal>fptools</literal> suite.  Inside Makefiles, the root of
1496       your build tree is called
1497       <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant><indexterm><primary>FPTOOLS&lowbar;TOP</primary></indexterm>.
1498       In the rest of this document path names are relative to
1499       <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant> unless
1500       otherwise stated.  For example, the file
1501       <filename>ghc/mk/target.mk</filename> is actually
1502       <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/ghc/mk/target.mk</filename>.</para>
1503     </sect2>
1504
1505     <sect2 id="sec-build-config">
1506       <title>Getting the build you want</title>
1507
1508       <para>When you build <literal>fptools</literal> you will be
1509       compiling code on a particular <emphasis>host
1510       platform</emphasis>, to run on a particular <emphasis>target
1511       platform</emphasis> (usually the same as the host
1512       platform)<indexterm><primary>platform</primary></indexterm>.
1513       The difficulty is that there are minor differences between
1514       different platforms; minor, but enough that the code needs to be
1515       a bit different for each.  There are some big differences too:
1516       for a different architecture we need to build GHC with a
1517       different native-code generator.</para>
1518
1519       <para>There are also knobs you can turn to control how the
1520       <literal>fptools</literal> software is built.  For example, you
1521       might want to build GHC optimised (so that it runs fast) or
1522       unoptimised (so that you can compile it fast after you've
1523       modified it.  Or, you might want to compile it with debugging on
1524       (so that extra consistency-checking code gets included) or off.
1525       And so on.</para>
1526
1527       <para>All of this stuff is called the
1528       <emphasis>configuration</emphasis> of your build.  You set the
1529       configuration using a three-step process.</para>
1530
1531       <variablelist>
1532         <varlistentry>
1533           <term>Step 1: get ready for configuration.</term>
1534           <listitem>
1535             <para>NOTE: if you're starting from a source distribution,
1536             rather than CVS sources, you can skip this step.</para>
1537
1538             <para>Change directory to
1539             <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant> and
1540             issue the command
1541             <command>autoconf</command><indexterm><primary>autoconf</primary></indexterm>
1542             (with no arguments). This GNU program converts
1543             <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/configure.in</filename>
1544             to a shell script called
1545             <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/configure</filename>.
1546             </para>
1547
1548             <para>Some projects, including GHC, have their own
1549             configure script.  If there's an
1550             <constant>&dollar;(FPTOOLS&lowbar;TOP)/&lt;project&gt;/configure.in</constant>,
1551             then you need to run <command>autoconf</command> in that
1552             directory too.</para>
1553
1554             <para>Both these steps are completely
1555             platform-independent; they just mean that the
1556             human-written file (<filename>configure.in</filename>) can
1557             be short, although the resulting shell script,
1558             <command>configure</command>, and
1559             <filename>mk/config.h.in</filename>, are long.</para>
1560           </listitem>
1561         </varlistentry>
1562
1563         <varlistentry>
1564           <term>Step 2: system configuration.</term>
1565           <listitem>
1566             <para>Runs the newly-created <command>configure</command>
1567             script, thus:</para>
1568
1569 <ProgramListing>
1570 ./configure <optional><parameter>args</parameter></optional>
1571 </ProgramListing>
1572
1573             <para><command>configure</command>'s mission is to scurry
1574             round your computer working out what architecture it has,
1575             what operating system, whether it has the
1576             <Function>vfork</Function> system call, where
1577             <command>yacc</command> is kept, whether
1578             <command>gcc</command> is available, where various obscure
1579             <literal>&num;include</literal> files are, whether it's a
1580             leap year, and what the systems manager had for lunch.  It
1581             communicates these snippets of information in two
1582             ways:</para>
1583
1584             <itemizedlist>
1585               <listitem>
1586                 
1587                 <para>It translates
1588                 <filename>mk/config.mk.in</filename><indexterm><primary>config.mk.in</primary></indexterm>
1589                 to
1590                 <filename>mk/config.mk</filename><indexterm><primary>config.mk</primary></indexterm>,
1591                 substituting for things between
1592                 &ldquo;<literal>@</literal>&rdquo; brackets.  So,
1593                 &ldquo;<literal>@HaveGcc@</literal>&rdquo; will be
1594                 replaced by &ldquo;<literal>YES</literal>&rdquo; or
1595                 &ldquo;<literal>NO</literal>&rdquo; depending on what
1596                 <command>configure</command> finds.
1597                 <filename>mk/config.mk</filename> is included by every
1598                 Makefile (directly or indirectly), so the
1599                 configuration information is thereby communicated to
1600                 all Makefiles.</para>
1601                 </listitem>
1602
1603               <listitem>
1604                 <para> It translates
1605                 <filename>mk/config.h.in</filename><indexterm><primary>config.h.in</primary></indexterm>
1606                 to
1607                 <filename>mk/config.h</filename><indexterm><primary>config.h</primary></indexterm>.
1608                 The latter is <literal>&num;include</literal>d by
1609                 various C programs, which can thereby make use of
1610                 configuration information.</para>
1611               </listitem>
1612             </itemizedlist>
1613
1614             <para><command>configure</command> takes some optional
1615             arguments.  Use <literal>./configure --help</literal> to
1616             get a list of the available arguments.  Here are some of
1617             the ones you might need:</para>
1618
1619             <variablelist>
1620               <varlistentry>
1621                 <term><literal>--with-ghc=<parameter>path</parameter></literal></term>
1622                 <indexterm><primary><literal>--with-ghc</literal></primary>
1623                 </indexterm>
1624                 <listitem>
1625                   <para>Specifies the path to an installed GHC which
1626                   you would like to use.  This compiler will be used
1627                   for compiling GHC-specific code (eg. GHC itself).
1628                   This option <emphasis>cannot</emphasis> be specified
1629                   using <filename>build.mk</filename> (see later),
1630                   because <command>configure</command> needs to
1631                   auto-detect the version of GHC you're using.  The
1632                   default is to look for a compiler named
1633                   <literal>ghc</literal> in your path.</para>
1634                 </listitem>
1635               </varlistentry>
1636               
1637               <varlistentry>
1638                 <term><literal>--with-hc=<parameter>path</parameter></literal></term>
1639                 <indexterm><primary><literal>--with-hc</literal></primary>
1640                 </indexterm>
1641                 <listitem>
1642                   <para>Specifies the path to any installed Haskell
1643                   compiler.  This compiler will be used for compiling
1644                   generic Haskell code.  The default is to use
1645                   <literal>ghc</literal>.</para>
1646                 </listitem>
1647               </varlistentry>
1648               
1649               <varlistentry>
1650                 <term><literal>--with-gcc=<parameter>path</parameter></literal></term>
1651                 <indexterm><primary><literal>--with-gcc</literal></primary>
1652                 </indexterm>
1653                 <listitem>
1654                   <para>Specifies the path to the installed GCC. This
1655                   compiler will be used to compile all C files,
1656                   <emphasis>except</emphasis> any generated by the
1657                   installed Haskell compiler, which will have its own
1658                   idea of which C compiler (if any) to use.  The
1659                   default is to use <literal>gcc</literal>.</para>
1660                 </listitem>
1661               </varlistentry>
1662             </variablelist>
1663             
1664             <para><command>configure</command> caches the results of
1665             its run in <filename>config.cache</filename>.  Quite often
1666             you don't want that; you're running
1667             <command>configure</command> a second time because
1668             something has changed.  In that case, simply delete
1669             <filename>config.cache</filename>.</para>
1670           </listitem>
1671         </varlistentry>
1672         
1673         <varlistentry>
1674           <term>Step 3: build configuration.</term>
1675           <listitem>
1676             <para>Next, you say how this build of
1677             <literal>fptools</literal> is to differ from the standard
1678             defaults by creating a new file
1679             <filename>mk/build.mk</filename><indexterm><primary>build.mk</primary></indexterm>
1680             <emphasis>in the build tree</emphasis>.  This file is the
1681             one and only file you edit in the build tree, precisely
1682             because it says how this build differs from the source.
1683             (Just in case your build tree does die, you might want to
1684             keep a private directory of <filename>build.mk</filename>
1685             files, and use a symbolic link in each build tree to point
1686             to the appropriate one.)  So
1687             <filename>mk/build.mk</filename> never exists in the
1688             source tree&mdash;you create one in each build tree from
1689             the template.  We'll discuss what to put in it
1690             shortly.</para>
1691           </listitem>
1692         </varlistentry>
1693       </variablelist>
1694
1695       <para>And that's it for configuration. Simple, eh?</para>
1696
1697       <para>What do you put in your build-specific configuration file
1698       <filename>mk/build.mk</filename>?  <emphasis>For almost all
1699       purposes all you will do is put make variable definitions that
1700       override those in</emphasis>
1701       <filename>mk/config.mk.in</filename>.  The whole point of
1702       <filename>mk/config.mk.in</filename>&mdash;and its derived
1703       counterpart <filename>mk/config.mk</filename>&mdash;is to define
1704       the build configuration. It is heavily commented, as you will
1705       see if you look at it.  So generally, what you do is look at
1706       <filename>mk/config.mk.in</filename>, and add definitions in
1707       <filename>mk/build.mk</filename> that override any of the
1708       <filename>config.mk</filename> definitions that you want to
1709       change.  (The override occurs because the main boilerplate file,
1710       <filename>mk/boilerplate.mk</filename><indexterm><primary>boilerplate.mk</primary></indexterm>,
1711       includes <filename>build.mk</filename> after
1712       <filename>config.mk</filename>.)</para>
1713
1714       <para>For example, <filename>config.mk.in</filename> contains
1715       the definition:</para>
1716
1717 <ProgramListing>
1718 GhcHcOpts=-O -Rghc-timing
1719 </ProgramListing>
1720
1721       <para>The accompanying comment explains that this is the list of
1722       flags passed to GHC when building GHC itself.  For doing
1723       development, it is wise to add <literal>-DDEBUG</literal>, to
1724       enable debugging code.  So you would add the following to
1725       <filename>build.mk</filename>:</para>
1726       
1727       <para>or, if you prefer,</para>
1728
1729 <ProgramListing>
1730 GhcHcOpts += -DDEBUG
1731 </ProgramListing>
1732
1733       <para>GNU <command>make</command> allows existing definitions to
1734       have new text appended using the &ldquo;<literal>+=</literal>&rdquo;
1735       operator, which is quite a convenient feature.)</para>
1736
1737       <para>If you want to remove the <literal>-O</literal> as well (a
1738       good idea when developing, because the turn-around cycle gets a
1739       lot quicker), you can just override
1740       <literal>GhcLibHcOpts</literal> altogether:</para>
1741
1742 <ProgramListing>
1743 GhcHcOpts=-DDEBUG -Rghc-timing
1744 </ProgramListing>
1745
1746       <para>When reading <filename>config.mk.in</filename>, remember
1747       that anything between &ldquo;@...@&rdquo; signs is going to be substituted
1748       by <command>configure</command> later.  You
1749       <emphasis>can</emphasis> override the resulting definition if
1750       you want, but you need to be a bit surer what you are doing.
1751       For example, there's a line that says:</para>
1752
1753 <ProgramListing>
1754 YACC = @YaccCmd@
1755 </ProgramListing>
1756
1757       <para>This defines the Make variables <constant>YACC</constant>
1758       to the pathname for a <command>yacc</command> that
1759       <command>configure</command> finds somewhere.  If you have your
1760       own pet <command>yacc</command> you want to use instead, that's
1761       fine. Just add this line to <filename>mk/build.mk</filename>:</para>
1762
1763 <ProgramListing>
1764 YACC = myyacc
1765 </ProgramListing>
1766
1767       <para>You do not <emphasis>have</emphasis> to have a
1768       <filename>mk/build.mk</filename> file at all; if you don't,
1769       you'll get all the default settings from
1770       <filename>mk/config.mk.in</filename>.</para>
1771
1772       <para>You can also use <filename>build.mk</filename> to override
1773       anything that <command>configure</command> got wrong.  One place
1774       where this happens often is with the definition of
1775       <constant>FPTOOLS&lowbar;TOP&lowbar;ABS</constant>: this
1776       variable is supposed to be the canonical path to the top of your
1777       source tree, but if your system uses an automounter then the
1778       correct directory is hard to find automatically.  If you find
1779       that <command>configure</command> has got it wrong, just put the
1780       correct definition in <filename>build.mk</filename>.</para>
1781
1782     </sect2>
1783
1784     <sect2 id="sec-storysofar">
1785       <title>The story so far</title>
1786
1787       <para>Let's summarise the steps you need to carry to get
1788       yourself a fully-configured build tree from scratch.</para>
1789
1790       <orderedlist>
1791         <listitem>
1792           <para> Get your source tree from somewhere (CVS repository
1793           or source distribution).  Say you call the root directory
1794           <filename>myfptools</filename> (it does not have to be
1795           called <filename>fptools</filename>).  Make sure that you
1796           have the essential files (see <XRef
1797           LinkEnd="sec-source-tree">).</para>
1798         </listitem>
1799
1800         <listitem>
1801
1802           <para>(Optional) Use <command>lndir</command> or
1803           <command>mkshadowdir</command> to create a build tree.</para>
1804
1805 <programlisting>
1806 $ cd myfptools
1807 $ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4
1808 </programlisting>
1809
1810           <para>(N.B. <command>mkshadowdir</command>'s first argument
1811           is taken relative to its second.) You probably want to give
1812           the build tree a name that suggests its main defining
1813           characteristic (in your mind at least), in case you later
1814           add others.</para>
1815         </listitem>
1816
1817         <listitem>
1818           <para>Change directory to the build tree.  Everything is
1819           going to happen there now.</para>
1820
1821 <programlisting>
1822 $ cd /scratch/joe-bloggs/myfptools-sun4
1823 </programlisting>
1824
1825         </listitem>
1826
1827         <listitem>
1828           <para>Prepare for system configuration:</para>
1829
1830 <programlisting>
1831 $ autoconf
1832 </programlisting>
1833
1834           <para>(You can skip this step if you are starting from a
1835           source distribution, and you already have
1836           <filename>configure</filename> and
1837           <filename>mk/config.h.in</filename>.)</para>
1838
1839           <para>Some projects, including GHC itself, have their own
1840           configure scripts, so it is necessary to run autoconf again
1841           in the appropriate subdirectories. eg:</para>
1842
1843 <programlisting>
1844 $ (cd ghc; autoconf)
1845 </programlisting>
1846         </listitem>
1847
1848         <listitem>
1849           <para>Do system configuration:</para>
1850
1851 <programlisting>
1852 $ ./configure
1853 </programlisting>
1854
1855           <para>Don't forget to check whether you need to add any
1856           arguments to <literal>configure</literal>; for example, a
1857           common requirement is to specify which GHC to use with
1858           <option>--with-ghc=<replaceable>ghc</replaceable></option>.</para>
1859         </listitem>
1860
1861         <listitem>
1862           <para>Create the file <filename>mk/build.mk</filename>,
1863           adding definitions for your desired configuration
1864           options.</para>
1865
1866 <programlisting>
1867 $ emacs mk/build.mk
1868 </programlisting>
1869         </listitem>
1870       </orderedlist>
1871
1872       <para>You can make subsequent changes to
1873       <filename>mk/build.mk</filename> as often as you like.  You do
1874       not have to run any further configuration programs to make these
1875       changes take effect. In theory you should, however, say
1876       <command>gmake clean</command>, <command>gmake all</command>,
1877       because configuration option changes could affect
1878       anything&mdash;but in practice you are likely to know what's
1879       affected.</para>
1880     </sect2>
1881
1882     <sect2>
1883       <title>Making things</title>
1884
1885       <para>At this point you have made yourself a fully-configured
1886       build tree, so you are ready to start building real
1887       things.</para>
1888
1889       <para>The first thing you need to know is that <emphasis>you
1890       must use GNU <command>make</command>, usually called
1891       <command>gmake</command>, not standard Unix
1892       <command>make</command></emphasis>.  If you use standard Unix
1893       <command>make</command> you will get all sorts of error messages
1894       (but no damage) because the <literal>fptools</literal>
1895       <command>Makefiles</command> use GNU <command>make</command>'s
1896       facilities extensively.</para>
1897
1898       <para>To just build the whole thing, <command>cd</command> to
1899       the top of your <literal>fptools</literal> tree and type
1900       <command>gmake</command>.  This will prepare the tree and build
1901       the various projects in the correct order.</para>
1902     </sect2>
1903
1904     <sect2 id="sec-bootstrapping">
1905       <title>Bootstrapping GHC</title>
1906
1907       <para>GHC requires a 2-stage bootstrap in order to provide 
1908       full functionality, including GHCi.  By a 2-stage bootstrap, we
1909       mean that the compiler is built once using the installed GHC,
1910       and then again using the compiler built in the first stage.  You
1911       can also build a stage 3 compiler, but this normally isn't
1912       necessary except to verify that the stage 2 compiler is working
1913       properly.</para>
1914
1915       <para>Note that when doing a bootstrap, the stage 1 compiler
1916       must be built, followed by the runtime system and libraries, and
1917       then the stage 2 compiler.  The correct ordering is implemented
1918       by the top-level fptools <filename>Makefile</filename>, so if
1919       you want everything to work automatically it's best to start
1920       <command>make</command> from the top of the tree.  When building
1921       GHC, the top-level fptools <filename>Makefile</filename> is set
1922       up to do a 2-stage bootstrap by default (when you say
1923       <command>make</command>).  Some other targets it supports
1924       are:</para>
1925
1926       <variablelist>
1927         <varlistentry>
1928           <term>stage1</term>
1929           <listitem>
1930             <para>Build everything as normal, including the stage 1
1931             compiler.</para>
1932           </listitem>
1933         </varlistentry>
1934
1935         <varlistentry>
1936           <term>stage2</term>
1937           <listitem>
1938             <para>Build the stage 2 compiler only.</para>
1939           </listitem>
1940         </varlistentry>
1941
1942         <varlistentry>
1943           <term>stage3</term>
1944           <listitem>
1945             <para>Build the stage 3 compiler only.</para>
1946           </listitem>
1947         </varlistentry>
1948
1949         <varlistentry>
1950           <term>bootstrap</term> <term>bootstrap2</term>
1951           <listitem>
1952             <para>Build stage 1 followed by stage 2.</para>
1953           </listitem>
1954         </varlistentry>
1955
1956         <varlistentry>
1957           <term>bootstrap3</term>
1958           <listitem>
1959             <para>Build stages 1, 2 and 3.</para>
1960           </listitem>
1961         </varlistentry>
1962
1963         <varlistentry>
1964           <term>install</term>
1965           <listitem>
1966             <para>Install everything, including the compiler built in
1967             stage 2.  To override the stage, say <literal>make install
1968             stage=<replaceable>n</replaceable></literal> where
1969             <replaceable>n</replaceable> is the stage to install.</para>
1970           </listitem>
1971         </varlistentry>
1972       </variablelist>
1973
1974       <para>The top-level <filename>Makefile</filename> also arranges
1975       to do the appropriate <literal>make boot</literal> steps (see
1976       below) before actually building anything.</para>
1977
1978       <para>The <literal>stage1</literal>, <literal>stage2</literal>
1979       and <literal>stage3</literal> targets also work in the
1980       <literal>ghc/compiler</literal> directory, but don't forget that
1981       each stage requires its own <literal>make boot</literal> step:
1982       for example, you must do</para>
1983
1984       <screen>$ make boot stage=2</screen>
1985
1986       <para>before <literal>make stage2</literal> in
1987       <literal>ghc/compiler</literal>.</para>
1988     </sect2>
1989
1990     <sect2 id="sec-standard-targets">
1991       <title>Standard Targets</title>
1992       <indexterm><primary>targets, standard makefile</primary></indexterm>
1993       <indexterm><primary>makefile targets</primary></indexterm>
1994
1995       <para>In any directory you should be able to make the following:</para>
1996
1997       <variablelist>
1998         <varlistentry>
1999           <term><literal>boot</literal></term>
2000           <listitem>
2001             <para>does the one-off preparation required to get ready
2002             for the real work.  Notably, it does <command>gmake
2003             depend</command> in all directories that contain programs.
2004             It also builds the necessary tools for compilation to
2005             proceed.</para>
2006
2007             <para>Invoking the <literal>boot</literal> target
2008             explicitly is not normally necessary.  From the top-level
2009             <literal>fptools</literal> directory, invoking
2010             <literal>gmake</literal> causes <literal>gmake boot
2011             all</literal> to be invoked in each of the project
2012             subdirectories, in the order specified by
2013             <literal>&dollar;(AllTargets)</literal> in
2014             <literal>config.mk</literal>.</para>
2015
2016             <para>If you're working in a subdirectory somewhere and
2017             need to update the dependencies, <literal>gmake
2018             boot</literal> is a good way to do it.</para>
2019           </listitem>
2020         </varlistentry>
2021
2022         <varlistentry>
2023           <term><literal>all</literal></term>
2024           <listitem>
2025             <para>makes all the final target(s) for this Makefile.
2026             Depending on which directory you are in a &ldquo;final
2027             target&rdquo; may be an executable program, a library
2028             archive, a shell script, or a Postscript file.  Typing
2029             <command>gmake</command> alone is generally the same as
2030             typing <command>gmake all</command>.</para>
2031           </listitem>
2032         </varlistentry>
2033
2034         <varlistentry>
2035           <term><literal>install</literal></term>
2036           <listitem>
2037             <para>installs the things built by <literal>all</literal>
2038             (except for the documentation).  Where does it install
2039             them?  That is specified by
2040             <filename>mk/config.mk.in</filename>; you can override it
2041             in <filename>mk/build.mk</filename>, or by running
2042             <command>configure</command> with command-line arguments
2043             like <literal>--bindir=/home/simonpj/bin</literal>; see
2044             <literal>./configure --help</literal> for the full
2045             details.</para>
2046           </listitem>
2047         </varlistentry>
2048
2049         <varlistentry>
2050           <term><literal>install-docs</literal></term>
2051           <listitem>
2052             <para>installs the documentation. Otherwise behaves just
2053             like <literal>install</literal>.</para>
2054           </listitem>
2055         </varlistentry>
2056
2057         <varlistentry>
2058           <term><literal>uninstall</literal></term>
2059           <listitem>
2060             <para>reverses the effect of
2061             <literal>install</literal>.</para>
2062           </listitem>
2063         </varlistentry>
2064
2065         <varlistentry>
2066           <term><literal>clean</literal></term>
2067           <listitem>
2068             <para>Delete all files from the current directory that are
2069             normally created by building the program.  Don't delete
2070             the files that record the configuration, or files
2071             generated by <command>gmake boot</command>.  Also preserve
2072             files that could be made by building, but normally aren't
2073             because the distribution comes with them.</para>
2074           </listitem>
2075         </varlistentry>
2076
2077         <varlistentry>
2078           <term><literal>distclean</literal></term>
2079           <listitem>
2080             <para>Delete all files from the current directory that are
2081             created by configuring or building the program. If you
2082             have unpacked the source and built the program without
2083             creating any other files, <literal>make
2084             distclean</literal> should leave only the files that were
2085             in the distribution.</para>
2086           </listitem>
2087         </varlistentry>
2088
2089         <varlistentry>
2090           <term><literal>mostlyclean</literal></term>
2091           <listitem>
2092             <para>Like <literal>clean</literal>, but may refrain from
2093             deleting a few files that people normally don't want to
2094             recompile.</para>
2095           </listitem>
2096         </varlistentry>
2097
2098         <varlistentry>
2099           <term><literal>maintainer-clean</literal></term>
2100           <listitem>
2101             <para>Delete everything from the current directory that
2102             can be reconstructed with this Makefile.  This typically
2103             includes everything deleted by
2104             <literal>distclean</literal>, plus more: C source files
2105             produced by Bison, tags tables, Info files, and so
2106             on.</para>
2107
2108             <para>One exception, however: <literal>make
2109             maintainer-clean</literal> should not delete
2110             <filename>configure</filename> even if
2111             <filename>configure</filename> can be remade using a rule
2112             in the <filename>Makefile</filename>. More generally,
2113             <literal>make maintainer-clean</literal> should not delete
2114             anything that needs to exist in order to run
2115             <filename>configure</filename> and then begin to build the
2116             program.</para>
2117           </listitem>
2118         </varlistentry>
2119
2120         <varlistentry>
2121           <term><literal>check</literal></term>
2122           <listitem>
2123             <para>run the test suite.</para>
2124           </listitem>
2125         </varlistentry>
2126       </variablelist>
2127
2128       <para>All of these standard targets automatically recurse into
2129       sub-directories.  Certain other standard targets do not:</para>
2130
2131       <variablelist>
2132         <varlistentry>
2133           <term><literal>configure</literal></term>
2134           <listitem>
2135             <para>is only available in the root directory
2136             <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>; it has
2137             been discussed in <XRef
2138             LinkEnd="sec-build-config">.</para>
2139           </listitem>
2140         </varlistentry>
2141
2142         <varlistentry>
2143           <term><literal>depend</literal></term>
2144           <listitem>
2145             <para>make a <filename>.depend</filename> file in each
2146             directory that needs it. This <filename>.depend</filename>
2147             file contains mechanically-generated dependency
2148             information; for example, suppose a directory contains a
2149             Haskell source module <filename>Foo.lhs</filename> which
2150             imports another module <literal>Baz</literal>.  Then the
2151             generated <filename>.depend</filename> file will contain
2152             the dependency:</para>
2153
2154 <ProgramListing>
2155 Foo.o : Baz.hi
2156 </ProgramListing>
2157
2158             <para>which says that the object file
2159             <filename>Foo.o</filename> depends on the interface file
2160             <filename>Baz.hi</filename> generated by compiling module
2161             <literal>Baz</literal>.  The <filename>.depend</filename>
2162             file is automatically included by every Makefile.</para>
2163           </listitem>
2164         </varlistentry>
2165
2166         <varlistentry>
2167           <term><literal>binary-dist</literal></term>
2168           <listitem>
2169             <para>make a binary distribution.  This is the target we
2170             use to build the binary distributions of GHC and
2171             Happy.</para>
2172           </listitem>
2173         </varlistentry>
2174
2175         <varlistentry>
2176           <term><literal>dist</literal></term>
2177           <listitem>
2178             <para>make a source distribution.  Note that this target
2179             does &ldquo;make distclean&rdquo; as part of its work;
2180             don't use it if you want to keep what you've built.</para>
2181           </listitem>
2182         </varlistentry>
2183       </variablelist>
2184
2185       <para>Most <filename>Makefile</filename>s have targets other
2186       than these.  You can discover them by looking in the
2187       <filename>Makefile</filename> itself.</para>
2188     </sect2>
2189
2190     <sect2>
2191       <title>Using a project from the build tree</title> 
2192
2193       <para>If you want to build GHC (say) and just use it direct from
2194       the build tree without doing <literal>make install</literal>
2195       first, you can run the in-place driver script:
2196       <filename>ghc/compiler/ghc-inplace</filename>.</para>
2197
2198       <para> Do <emphasis>NOT</emphasis> use
2199       <filename>ghc/compiler/ghc</filename>, or
2200       <filename>ghc/compiler/ghc-5.xx</filename>, as these are the
2201       scripts intended for installation, and contain hard-wired paths
2202       to the installed libraries, rather than the libraries in the
2203       build tree.</para>
2204
2205       <para>Happy can similarly be run from the build tree, using
2206       <filename>happy/src/happy-inplace</filename>.</para>
2207     </sect2>
2208
2209     <sect2>
2210       <title>Fast Making</title>
2211
2212       <indexterm><primary>fastmake</primary></indexterm>
2213       <indexterm><primary>dependencies, omitting</primary></indexterm>
2214       <indexterm><primary>FAST, makefile variable</primary></indexterm>
2215
2216       <para>Sometimes the dependencies get in the way: if you've made
2217       a small change to one file, and you're absolutely sure that it
2218       won't affect anything else, but you know that
2219       <command>make</command> is going to rebuild everything anyway,
2220       the following hack may be useful:</para>
2221
2222 <ProgramListing>
2223 gmake FAST=YES 
2224 </ProgramListing>
2225
2226       <para>This tells the make system to ignore dependencies and just
2227       build what you tell it to.  In other words, it's equivalent to
2228       temporarily removing the <filename>.depend</filename> file in
2229       the current directory (where <command>mkdependHS</command> and
2230       friends store their dependency information).</para>
2231
2232       <para>A bit of history: GHC used to come with a
2233       <command>fastmake</command> script that did the above job, but
2234       GNU make provides the features we need to do it without
2235       resorting to a script.  Also, we've found that fastmaking is
2236       less useful since the advent of GHC's recompilation checker (see
2237       the User's Guide section on "Separate Compilation").</para>
2238     </sect2>
2239   </sect1>
2240
2241   <sect1 id="sec-makefile-arch">
2242     <title>The <filename>Makefile</filename> architecture</title>
2243     <indexterm><primary>makefile architecture</primary></indexterm>
2244
2245     <para><command>make</command> is great if everything
2246     works&mdash;you type <command>gmake install</command> and lo! the
2247     right things get compiled and installed in the right places.  Our
2248     goal is to make this happen often, but somehow it often doesn't;
2249     instead some weird error message eventually emerges from the
2250     bowels of a directory you didn't know existed.</para>
2251
2252     <para>The purpose of this section is to give you a road-map to
2253     help you figure out what is going right and what is going
2254     wrong.</para>
2255
2256     <sect2>
2257       <title>Debugging</title>
2258       
2259       <para>Debugging <filename>Makefile</filename>s is something of a
2260       black art, but here's a couple of tricks that we find
2261       particularly useful.  The following command allows you to see
2262       the contents of any make variable in the context of the current
2263       <filename>Makefile</filename>:</para>
2264
2265 <screen>$  make show VALUE=HS_SRCS</screen>
2266
2267       <para>where you can replace <literal>HS_SRCS</literal> with the
2268       name of any variable you wish to see the value of.</para>
2269       
2270       <para>GNU make has a <option>-d</option> option which generates
2271       a dump of the decision procedure used to arrive at a conclusion
2272       about which files should be recompiled.  Sometimes useful for
2273       tracking down problems with superfluous or missing
2274       recompilations.</para>
2275     </sect2>
2276
2277     <sect2>
2278       <title>A small project</title>
2279
2280       <para>To get started, let us look at the
2281       <filename>Makefile</filename> for an imaginary small
2282       <literal>fptools</literal> project, <literal>small</literal>.
2283       Each project in <literal>fptools</literal> has its own directory
2284       in <constant>FPTOOLS&lowbar;TOP</constant>, so the
2285       <literal>small</literal> project will have its own directory
2286       <constant>FPOOLS&lowbar;TOP/small/</constant>.  Inside the
2287       <filename>small/</filename> directory there will be a
2288       <filename>Makefile</filename>, looking something like
2289       this:</para>
2290
2291 <indexterm><primary>Makefile, minimal</primary></indexterm>
2292
2293 <ProgramListing>
2294 #     Makefile for fptools project "small"
2295
2296 TOP = ..
2297 include $(TOP)/mk/boilerplate.mk
2298
2299 SRCS = $(wildcard *.lhs) $(wildcard *.c)
2300 HS_PROG = small
2301
2302 include $(TOP)/target.mk
2303 </ProgramListing>
2304
2305       <para>this <filename>Makefile</filename> has three
2306       sections:</para>
2307
2308       <orderedlist>
2309         <listitem>
2310           <para>The first section includes
2311 <footnote>
2312 <para>
2313 One of the most important
2314 features of GNU <command>make</command> that we use is the ability for a <filename>Makefile</filename> to
2315 include another named file, very like <command>cpp</command>'s <literal>&num;include</literal>
2316 directive.
2317 </para>
2318 </footnote>
2319
2320           a file of &ldquo;boilerplate&rdquo; code from the level
2321           above (which in this case will be
2322           <filename><constant>FPTOOLS&lowbar;TOP</constant>/mk/boilerplate.mk</filename><indexterm><primary>boilerplate.mk</primary></indexterm>).
2323           As its name suggests, <filename>boilerplate.mk</filename>
2324           consists of a large quantity of standard
2325           <filename>Makefile</filename> code.  We discuss this
2326           boilerplate in more detail in <XRef LinkEnd="sec-boiler">.
2327           <indexterm><primary>include, directive in
2328           Makefiles</primary></indexterm> <indexterm><primary>Makefile
2329           inclusion</primary></indexterm></para>
2330
2331           <para>Before the <literal>include</literal> statement, you
2332           must define the <command>make</command> variable
2333           <constant>TOP</constant><indexterm><primary>TOP</primary></indexterm>
2334           to be the directory containing the <filename>mk</filename>
2335           directory in which the <filename>boilerplate.mk</filename>
2336           file is.  It is <emphasis>not</emphasis> OK to simply say</para>
2337
2338 <ProgramListing>
2339 include ../mk/boilerplate.mk  # NO NO NO
2340 </ProgramListing>
2341
2342
2343           <para>Why?  Because the <filename>boilerplate.mk</filename>
2344           file needs to know where it is, so that it can, in turn,
2345           <literal>include</literal> other files.  (Unfortunately,
2346           when an <literal>include</literal>d file does an
2347           <literal>include</literal>, the filename is treated relative
2348           to the directory in which <command>gmake</command> is being
2349           run, not the directory in which the
2350           <literal>include</literal>d sits.)  In general,
2351           <emphasis>every file <filename>foo.mk</filename> assumes
2352           that
2353           <filename><constant>&dollar;(TOP)</constant>/mk/foo.mk</filename>
2354           refers to itself.</emphasis> It is up to the
2355           <filename>Makefile</filename> doing the
2356           <literal>include</literal> to ensure this is the case.</para>
2357
2358           <para>Files intended for inclusion in other
2359           <filename>Makefile</filename>s are written to have the
2360           following property: <emphasis>after
2361           <filename>foo.mk</filename> is <literal>include</literal>d,
2362           it leaves <constant>TOP</constant> containing the same value
2363           as it had just before the <literal>include</literal>
2364           statement</emphasis>.  In our example, this invariant
2365           guarantees that the <literal>include</literal> for
2366           <filename>target.mk</filename> will look in the same
2367           directory as that for <filename>boilerplate.mk</filename>.</para>
2368         </listitem>
2369
2370         <listitem>
2371           <para> The second section defines the following standard
2372           <command>make</command> variables:
2373           <constant>SRCS</constant><indexterm><primary>SRCS</primary></indexterm>
2374           (the source files from which is to be built), and
2375           <constant>HS&lowbar;PROG</constant><indexterm><primary>HS&lowbar;PROG</primary></indexterm>
2376           (the executable binary to be built).  We will discuss in
2377           more detail what the &ldquo;standard variables&rdquo; are,
2378           and how they affect what happens, in <XRef
2379           LinkEnd="sec-targets">.</para>
2380
2381           <para>The definition for <constant>SRCS</constant> uses the
2382           useful GNU <command>make</command> construct
2383           <literal>&dollar;(wildcard&nbsp;$pat$)</literal><indexterm><primary>wildcard</primary></indexterm>,
2384           which expands to a list of all the files matching the
2385           pattern <literal>pat</literal> in the current directory.  In
2386           this example, <constant>SRCS</constant> is set to the list
2387           of all the <filename>.lhs</filename> and
2388           <filename>.c</filename> files in the directory.  (Let's
2389           suppose there is one of each, <filename>Foo.lhs</filename>
2390           and <filename>Baz.c</filename>.)</para>
2391         </listitem>
2392
2393         <listitem>
2394           <para>The last section includes a second file of standard
2395           code, called
2396           <filename>target.mk</filename><indexterm><primary>target.mk</primary></indexterm>.
2397           It contains the rules that tell <command>gmake</command> how
2398           to make the standard targets (<Xref
2399           LinkEnd="sec-standard-targets">).  Why, you ask, can't this
2400           standard code be part of
2401           <filename>boilerplate.mk</filename>?  Good question.  We
2402           discuss the reason later, in <Xref
2403           LinkEnd="sec-boiler-arch">.</para>
2404
2405           <para>You do not <emphasis>have</emphasis> to
2406           <literal>include</literal> the
2407           <filename>target.mk</filename> file.  Instead, you can write
2408           rules of your own for all the standard targets.  Usually,
2409           though, you will find quite a big payoff from using the
2410           canned rules in <filename>target.mk</filename>; the price
2411           tag is that you have to understand what canned rules get
2412           enabled, and what they do (<Xref
2413           LinkEnd="sec-targets">).</para>
2414         </listitem>
2415       </orderedlist>
2416
2417       <para>In our example <filename>Makefile</filename>, most of the
2418       work is done by the two <literal>include</literal>d files.  When
2419       you say <command>gmake all</command>, the following things
2420       happen:</para>
2421
2422       <itemizedlist>
2423         <listitem>
2424           <para><command>gmake</command> figures out that the object
2425           files are <filename>Foo.o</filename> and
2426           <filename>Baz.o</filename>.</para>
2427         </listitem>
2428
2429         <listitem>
2430           <para>It uses a boilerplate pattern rule to compile
2431           <filename>Foo.lhs</filename> to <filename>Foo.o</filename>
2432           using a Haskell compiler.  (Which one?  That is set in the
2433           build configuration.)</para>
2434         </listitem>
2435
2436         <listitem>
2437           <para>It uses another standard pattern rule to compile
2438           <filename>Baz.c</filename> to <filename>Baz.o</filename>,
2439           using a C compiler.  (Ditto.)</para>
2440         </listitem>
2441
2442         <listitem>
2443           <para>It links the resulting <filename>.o</filename> files
2444           together to make <literal>small</literal>, using the Haskell
2445           compiler to do the link step.  (Why not use
2446           <command>ld</command>?  Because the Haskell compiler knows
2447           what standard libraries to link in.  How did
2448           <command>gmake</command> know to use the Haskell compiler to
2449           do the link, rather than the C compiler?  Because we set the
2450           variable <constant>HS&lowbar;PROG</constant> rather than
2451           <constant>C&lowbar;PROG</constant>.)</para>
2452         </listitem>
2453       </itemizedlist>
2454
2455       <para>All <filename>Makefile</filename>s should follow the above
2456       three-section format.</para>
2457     </sect2>
2458
2459     <sect2>
2460       <title>A larger project</title>
2461
2462       <para>Larger projects are usually structured into a number of
2463       sub-directories, each of which has its own
2464       <filename>Makefile</filename>.  (In very large projects, this
2465       sub-structure might be iterated recursively, though that is
2466       rare.)  To give you the idea, here's part of the directory
2467       structure for the (rather large) GHC project:</para>
2468
2469 <Screen>
2470 $(FPTOOLS_TOP)/ghc/
2471   Makefile
2472   mk/
2473     boilerplate.mk
2474     rules.mk
2475    docs/
2476     Makefile
2477     ...source files for documentation...
2478    driver/
2479     Makefile
2480     ...source files for driver...
2481    compiler/
2482     Makefile
2483     parser/...source files for parser...
2484     renamer/...source files for renamer...
2485     ...etc...
2486 </Screen>
2487
2488       <para>The sub-directories <filename>docs</filename>,
2489       <filename>driver</filename>, <filename>compiler</filename>, and
2490       so on, each contains a sub-component of GHC, and each has its
2491       own <filename>Makefile</filename>.  There must also be a
2492       <filename>Makefile</filename> in
2493       <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/ghc</filename>.
2494       It does most of its work by recursively invoking
2495       <command>gmake</command> on the <filename>Makefile</filename>s
2496       in the sub-directories.  We say that
2497       <filename>ghc/Makefile</filename> is a <emphasis>non-leaf
2498       <filename>Makefile</filename></emphasis>, because it does little
2499       except organise its children, while the
2500       <filename>Makefile</filename>s in the sub-directories are all
2501       <emphasis>leaf <filename>Makefile</filename>s</emphasis>.  (In
2502       principle the sub-directories might themselves contain a
2503       non-leaf <filename>Makefile</filename> and several
2504       sub-sub-directories, but that does not happen in GHC.)</para>
2505
2506       <para>The <filename>Makefile</filename> in
2507       <filename>ghc/compiler</filename> is considered a leaf
2508       <filename>Makefile</filename> even though the
2509       <filename>ghc/compiler</filename> has sub-directories, because
2510       these sub-directories do not themselves have
2511       <filename>Makefile</filename>s in them.  They are just used to
2512       structure the collection of modules that make up GHC, but all
2513       are managed by the single <filename>Makefile</filename> in
2514       <filename>ghc/compiler</filename>.</para>
2515
2516       <para>You will notice that <filename>ghc/</filename> also
2517       contains a directory <filename>ghc/mk/</filename>.  It contains
2518       GHC-specific <filename>Makefile</filename> boilerplate code.
2519       More precisely:</para>
2520
2521       <itemizedlist>
2522         <listitem>
2523           <para><filename>ghc/mk/boilerplate.mk</filename> is included
2524           at the top of <filename>ghc/Makefile</filename>, and of all
2525           the leaf <filename>Makefile</filename>s in the
2526           sub-directories.  It in turn <literal>include</literal>s the
2527           main boilerplate file
2528           <filename>mk/boilerplate.mk</filename>.</para>
2529         </listitem>
2530
2531         <listitem>
2532           <para><filename>ghc/mk/target.mk</filename> is
2533           <literal>include</literal>d at the bottom of
2534           <filename>ghc/Makefile</filename>, and of all the leaf
2535           <filename>Makefile</filename>s in the sub-directories.  It
2536           in turn <literal>include</literal>s the file
2537           <filename>mk/target.mk</filename>.</para>
2538         </listitem>
2539       </itemizedlist>
2540
2541       <para>So these two files are the place to look for GHC-wide
2542       customisation of the standard boilerplate.</para>
2543     </sect2>
2544
2545     <sect2 id="sec-boiler-arch">
2546       <title>Boilerplate architecture</title>
2547       <indexterm><primary>boilerplate architecture</primary></indexterm>
2548
2549       <para>Every <filename>Makefile</filename> includes a
2550       <filename>boilerplate.mk</filename><indexterm><primary>boilerplate.mk</primary></indexterm>
2551       file at the top, and
2552       <filename>target.mk</filename><indexterm><primary>target.mk</primary></indexterm>
2553       file at the bottom.  In this section we discuss what is in these
2554       files, and why there have to be two of them.  In general:</para>
2555
2556       <itemizedlist>
2557         <listitem>
2558           <para><filename>boilerplate.mk</filename> consists of:</para>
2559
2560           <itemizedlist>
2561             <listitem>
2562               <para><emphasis>Definitions of millions of
2563               <command>make</command> variables</emphasis> that
2564               collectively specify the build configuration.  Examples:
2565               <constant>HC&lowbar;OPTS</constant><indexterm><primary>HC&lowbar;OPTS</primary></indexterm>,
2566               the options to feed to the Haskell compiler;
2567               <constant>NoFibSubDirs</constant><indexterm><primary>NoFibSubDirs</primary></indexterm>,
2568               the sub-directories to enable within the
2569               <literal>nofib</literal> project;
2570               <constant>GhcWithHc</constant><indexterm><primary>GhcWithHc</primary></indexterm>,
2571               the name of the Haskell compiler to use when compiling
2572               GHC in the <literal>ghc</literal> project.</para>
2573             </listitem>
2574
2575             <listitem>
2576               <para><emphasis>Standard pattern rules</emphasis> that
2577               tell <command>gmake</command> how to construct one file
2578               from another.</para>
2579             </listitem>
2580           </itemizedlist>
2581
2582           <para><filename>boilerplate.mk</filename> needs to be
2583           <literal>include</literal>d at the <emphasis>top</emphasis>
2584           of each <filename>Makefile</filename>, so that the user can
2585           replace the boilerplate definitions or pattern rules by
2586           simply giving a new definition or pattern rule in the
2587           <filename>Makefile</filename>.  <command>gmake</command>
2588           simply takes the last definition as the definitive one.</para>
2589
2590           <para>Instead of <emphasis>replacing</emphasis> boilerplate
2591           definitions, it is also quite common to
2592           <emphasis>augment</emphasis> them. For example, a
2593           <filename>Makefile</filename> might say:</para>
2594
2595 <ProgramListing>
2596 SRC_HC_OPTS += -O
2597 </ProgramListing>
2598
2599           <para>thereby adding &ldquo;<option>-O</option>&rdquo; to
2600           the end of
2601           <constant>SRC&lowbar;HC&lowbar;OPTS</constant><indexterm><primary>SRC&lowbar;HC&lowbar;OPTS</primary></indexterm>.</para>
2602         </listitem>
2603
2604         <listitem>
2605           <para><filename>target.mk</filename> contains
2606           <command>make</command> rules for the standard targets
2607           described in <Xref LinkEnd="sec-standard-targets">.  These
2608           rules are selectively included, depending on the setting of
2609           certain <command>make</command> variables.  These variables
2610           are usually set in the middle section of the
2611           <filename>Makefile</filename> between the two
2612           <literal>include</literal>s.</para>
2613
2614           <para><filename>target.mk</filename> must be included at the
2615           end (rather than being part of
2616           <filename>boilerplate.mk</filename>) for several tiresome
2617           reasons:</para>
2618
2619           <itemizedlist>
2620             <listitem>
2621
2622               <para><command>gmake</command> commits target and
2623               dependency lists earlier than it should.  For example,
2624               <FIlename>target.mk</FIlename> has a rule that looks
2625               like this:</para>
2626
2627 <ProgramListing>
2628 $(HS_PROG) : $(OBJS)
2629       $(HC) $(LD_OPTS) $&#60; -o $@
2630 </ProgramListing>
2631
2632               <para>If this rule was in
2633               <filename>boilerplate.mk</filename> then
2634               <constant>&dollar;(HS&lowbar;PROG)</constant><indexterm><primary>HS&lowbar;PROG</primary></indexterm>
2635               and
2636               <constant>&dollar;(OBJS)</constant><indexterm><primary>OBJS</primary></indexterm>
2637               would not have their final values at the moment
2638               <command>gmake</command> encountered the rule.  Alas,
2639               <command>gmake</command> takes a snapshot of their
2640               current values, and wires that snapshot into the rule.
2641               (In contrast, the commands executed when the rule
2642               &ldquo;fires&rdquo; are only substituted at the moment
2643               of firing.)  So, the rule must follow the definitions
2644               given in the <filename>Makefile</filename> itself.</para>
2645             </listitem>
2646
2647             <listitem>
2648               <para>Unlike pattern rules, ordinary rules cannot be
2649               overriden or replaced by subsequent rules for the same
2650               target (at least, not without an error message).
2651               Including ordinary rules in
2652               <filename>boilerplate.mk</filename> would prevent the
2653               user from writing rules for specific targets in specific
2654               cases.</para>
2655             </listitem>
2656
2657             <listitem>
2658               <para>There are a couple of other reasons I've
2659               forgotten, but it doesn't matter too much.</para>
2660             </listitem>
2661           </itemizedlist>
2662         </listitem>
2663       </itemizedlist>
2664     </sect2>
2665
2666     <sect2 id="sec-boiler">
2667       <title>The main <filename>mk/boilerplate.mk</filename> file</title>
2668       <indexterm><primary>boilerplate.mk</primary></indexterm>
2669
2670       <para>If you look at
2671       <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/mk/boilerplate.mk</filename>
2672       you will find that it consists of the following sections, each
2673       held in a separate file:</para>
2674
2675       <variablelist>
2676         <varlistentry>
2677           <term><filename>config.mk</filename></term>
2678           <indexterm><primary>config.mk</primary></indexterm>
2679           <listitem>
2680             <para>is the build configuration file we discussed at
2681             length in <Xref LinkEnd="sec-build-config">.</para>
2682           </listitem>
2683         </varlistentry>
2684
2685         <varlistentry>
2686           <term><filename>paths.mk</filename></term>
2687           <indexterm><primary>paths.mk</primary></indexterm>
2688           <listitem>
2689             <para>defines <command>make</command> variables for
2690             pathnames and file lists.  This file contains code for
2691             automatically compiling lists of source files and deriving
2692             lists of object files from those.  The results can be
2693             overriden in the <filename>Makefile</filename>, but in
2694             most cases the automatic setup should do the right
2695             thing.</para>
2696             
2697             <para>The following variables may be set in the
2698             <filename>Makefile</filename> to affect how the automatic
2699             source file search is done:</para>
2700
2701             <variablelist>
2702               <varlistentry>
2703                 <term><literal>ALL_DIRS</literal></term>
2704                 <indexterm><primary><literal>ALL_DIRS</literal></primary>
2705                 </indexterm>
2706                 <listitem>
2707                   <para>Set to a list of directories to search in
2708                   addition to the current directory for source
2709                   files.</para>
2710                 </listitem>
2711               </varlistentry>
2712
2713               <varlistentry>
2714                 <term><literal>EXCLUDE_SRCS</literal></term>
2715                 <indexterm><primary><literal>EXCLUDE_SRCS</literal></primary>
2716                 </indexterm>
2717                 <listitem>
2718                   <para>Set to a list of source files (relative to the
2719                   current directory) to omit from the automatic
2720                   search.  The source searching machinery is clever
2721                   enough to know that if you exclude a source file
2722                   from which other sources are derived, then the
2723                   derived sources should also be excluded.  For
2724                   example, if you set <literal>EXCLUDED_SRCS</literal>
2725                   to include <filename>Foo.y</filename>, then
2726                   <filename>Foo.hs</filename> will also be
2727                   excluded.</para>
2728                 </listitem>
2729               </varlistentry>
2730
2731               <varlistentry>
2732                 <term><literal>EXTRA_SRCS</literal></term>
2733                 <indexterm><primary><literal>EXCLUDE_SRCS</literal></primary>
2734                 </indexterm>
2735                   <listitem>
2736                   <para>Set to a list of extra source files (perhaps
2737                   in directories not listed in
2738                   <literal>ALL_DIRS</literal>) that should be
2739                   considered.</para>
2740                 </listitem>
2741               </varlistentry>
2742             </variablelist>
2743
2744             <para>The results of the automatic source file search are
2745             placed in the following make variables:</para>
2746
2747             <variablelist>
2748               <varlistentry>
2749                 <term><literal>SRCS</literal></term>
2750                 <indexterm><primary><literal>SRCS</literal></primary></indexterm>
2751                 <listitem>
2752                   <para>All source files found, sorted and without
2753                   duplicates, including those which might not exist
2754                   yet but will be derived from other existing sources.
2755                   <literal>SRCS</literal> <emphasis>can</emphasis> be
2756                   overriden if necessary, in which case the variables
2757                   below will follow suit.</para>
2758                 </listitem>
2759               </varlistentry>
2760
2761               <varlistentry>
2762                 <term><literal>HS_SRCS</literal></term>
2763                 <indexterm><primary><literal>HS_SRCS</literal></primary></indexterm>
2764                 <listitem>
2765                   <para>all Haskell source files in the current
2766                   directory, including those derived from other source
2767                   files (eg. Happy sources also give rise to Haskell
2768                   sources).</para>
2769                 </listitem>
2770               </varlistentry>
2771
2772               <varlistentry>
2773                 <term><literal>HS_OBJS</literal></term>
2774                 <indexterm><primary><literal>HS_OBJS</literal></primary></indexterm>
2775                 <listitem>
2776                   <para>Object files derived from
2777                   <literal>HS_SRCS</literal>.</para>
2778                 </listitem>
2779               </varlistentry>
2780
2781               <varlistentry>
2782                 <term><literal>HS_IFACES</literal></term>
2783                 <indexterm><primary><literal>HS_IFACES</literal></primary></indexterm>
2784                 <listitem>
2785                   <para>Interface files (<literal>.hi</literal> files)
2786                   derived from <literal>HS_SRCS</literal>.</para>
2787                 </listitem>
2788               </varlistentry>
2789
2790               <varlistentry>
2791                 <term><literal>C_SRCS</literal></term>
2792                 <indexterm><primary><literal>C_SRCS</literal></primary></indexterm>
2793                 <listitem>
2794                   <para>All C source files found.</para>
2795                 </listitem>
2796               </varlistentry>
2797
2798               <varlistentry>
2799                 <term><literal>C_OBJS</literal></term>
2800                 <indexterm><primary><literal>C_OBJS</literal></primary></indexterm>
2801                 <listitem>
2802                   <para>Object files derived from
2803                   <literal>C_SRCS</literal>.</para>
2804                 </listitem>
2805               </varlistentry>
2806
2807               <varlistentry>
2808                 <term><literal>SCRIPT_SRCS</literal></term>
2809                 <indexterm><primary><literal>SCRIPT_SRCS</literal></primary></indexterm>
2810                 <listitem>
2811                   <para>All script source files found
2812                   (<literal>.lprl</literal> files).</para>
2813                 </listitem>
2814               </varlistentry>
2815
2816               <varlistentry>
2817                 <term><literal>SCRIPT_OBJS</literal></term>
2818                 <indexterm><primary><literal>SCRIPT_OBJS</literal></primary></indexterm>
2819                 <listitem>
2820                   <para><quote>object</quote> files derived from
2821                   <literal>SCRIPT_SRCS</literal>
2822                   (<literal>.prl</literal> files).</para>
2823                 </listitem>
2824               </varlistentry>
2825
2826               <varlistentry>
2827                 <term><literal>HSC_SRCS</literal></term>
2828                 <indexterm><primary><literal>HSC_SRCS</literal></primary></indexterm>
2829                 <listitem>
2830                   <para>All <literal>hsc2hs</literal> source files
2831                   (<literal>.hsc</literal> files).</para>
2832                 </listitem>
2833               </varlistentry>
2834
2835               <varlistentry>
2836                 <term><literal>HAPPY_SRCS</literal></term>
2837                 <indexterm><primary><literal>HAPPY_SRCS</literal></primary></indexterm>
2838                 <listitem>
2839                   <para>All <literal>happy</literal> source files
2840                   (<literal>.y</literal> or <literal>.hy</literal> files).</para>
2841                 </listitem>
2842               </varlistentry>
2843
2844               <varlistentry>
2845                 <term><literal>OBJS</literal></term>
2846                 <indexterm><primary>OBJS</primary></indexterm>
2847                 <listitem>
2848                   <para>the concatenation of
2849                   <literal>&dollar;(HS_OBJS)</literal>,
2850                   <literal>&dollar;(C_OBJS)</literal>, and
2851                   <literal>&dollar;(SCRIPT_OBJS)</literal>.</para>
2852                 </listitem>
2853               </varlistentry>
2854             </variablelist>
2855
2856             <para>Any or all of these definitions can easily be
2857             overriden by giving new definitions in your
2858             <filename>Makefile</filename>.</para>
2859
2860             <para>What, exactly, does <filename>paths.mk</filename>
2861             consider a <quote>source file</quote> to be?  It's based
2862             on the file's suffix (e.g. <filename>.hs</filename>,
2863             <filename>.lhs</filename>, <filename>.c</filename>,
2864             <filename>.hy</filename>, etc), but this is the kind of
2865             detail that changes, so rather than enumerate the source
2866             suffices here the best thing to do is to look in
2867             <filename>paths.mk</filename>.</para>
2868           </listitem>
2869         </varlistentry>
2870
2871         <varlistentry>
2872           <term><filename>opts.mk</filename></term>
2873           <indexterm><primary>opts.mk</primary></indexterm>
2874           <listitem>
2875             <para>defines <command>make</command> variables for option
2876             strings to pass to each program. For example, it defines
2877             <constant>HC&lowbar;OPTS</constant><indexterm><primary>HC&lowbar;OPTS</primary></indexterm>,
2878             the option strings to pass to the Haskell compiler.  See
2879             <Xref LinkEnd="sec-suffix">.</para>
2880           </listitem>
2881         </varlistentry>
2882
2883         <varlistentry>
2884           <term><filename>suffix.mk</filename></term>
2885           <indexterm><primary>suffix.mk</primary></indexterm>
2886           <listitem>
2887             <para>defines standard pattern rules&mdash;see <Xref
2888             LinkEnd="sec-suffix">.</para>
2889           </listitem>
2890         </varlistentry>
2891       </variablelist>
2892
2893       <para>Any of the variables and pattern rules defined by the
2894       boilerplate file can easily be overridden in any particular
2895       <filename>Makefile</filename>, because the boilerplate
2896       <literal>include</literal> comes first.  Definitions after this
2897       <literal>include</literal> directive simply override the default
2898       ones in <filename>boilerplate.mk</filename>.</para>
2899     </sect2>
2900
2901     <sect2 id="sec-suffix">
2902       <title>Pattern rules and options</title>
2903       <indexterm><primary>Pattern rules</primary></indexterm>
2904
2905       <para>The file
2906       <filename>suffix.mk</filename><indexterm><primary>suffix.mk</primary></indexterm>
2907       defines standard <emphasis>pattern rules</emphasis> that say how
2908       to build one kind of file from another, for example, how to
2909       build a <filename>.o</filename> file from a
2910       <filename>.c</filename> file.  (GNU <command>make</command>'s
2911       <emphasis>pattern rules</emphasis> are more powerful and easier
2912       to use than Unix <command>make</command>'s <emphasis>suffix
2913       rules</emphasis>.)</para>
2914
2915       <para>Almost all the rules look something like this:</para>
2916
2917 <ProgramListing>
2918 %.o : %.c
2919       $(RM) $@
2920       $(CC) $(CC_OPTS) -c $&#60; -o $@
2921 </ProgramListing>
2922
2923       <para>Here's how to understand the rule.  It says that
2924       <emphasis>something</emphasis><filename>.o</filename> (say
2925       <filename>Foo.o</filename>) can be built from
2926       <emphasis>something</emphasis><filename>.c</filename>
2927       (<filename>Foo.c</filename>), by invoking the C compiler (path
2928       name held in <constant>&dollar;(CC)</constant>), passing to it
2929       the options <constant>&dollar;(CC&lowbar;OPTS)</constant> and
2930       the rule's dependent file of the rule
2931       <literal>&dollar;&lt;</literal> (<filename>Foo.c</filename> in
2932       this case), and putting the result in the rule's target
2933       <literal>&dollar;@</literal> (<filename>Foo.o</filename> in this
2934       case).</para>
2935
2936       <para>Every program is held in a <command>make</command>
2937       variable defined in <filename>mk/config.mk</filename>&mdash;look
2938       in <filename>mk/config.mk</filename> for the complete list.  One
2939       important one is the Haskell compiler, which is called
2940       <constant>&dollar;(HC)</constant>.</para>
2941
2942       <para>Every program's options are are held in a
2943       <command>make</command> variables called
2944       <constant>&lt;prog&gt;&lowbar;OPTS</constant>.  the
2945       <constant>&lt;prog&gt;&lowbar;OPTS</constant> variables are
2946       defined in <filename>mk/opts.mk</filename>.  Almost all of them
2947       are defined like this:</para>
2948
2949 <ProgramListing>
2950 CC_OPTS = $(SRC_CC_OPTS) $(WAY$(_way)_CC_OPTS) $($*_CC_OPTS) $(EXTRA_CC_OPTS)
2951 </ProgramListing>
2952
2953       <para>The four variables from which
2954        <constant>CC&lowbar;OPTS</constant> is built have the following
2955       meaning:</para>
2956
2957       <variablelist>
2958         <varlistentry>
2959           <term><constant>SRC&lowbar;CC&lowbar;OPTS</constant><indexterm><primary>SRC&lowbar;CC&lowbar;OPTS</primary></indexterm>:</term>
2960           <listitem>
2961             <para>options passed to all C compilations.</para>
2962           </listitem>
2963         </varlistentry>
2964
2965         <varlistentry>
2966           <term><constant>WAY&lowbar;&lt;way&gt;&lowbar;CC&lowbar;OPTS</constant>:</term>
2967           <listitem>
2968             <para>options passed to C compilations for way
2969             <literal>&lt;way&gt;</literal>. For example,
2970             <constant>WAY&lowbar;mp&lowbar;CC&lowbar;OPTS</constant>
2971             gives options to pass to the C compiler when compiling way
2972             <literal>mp</literal>.  The variable
2973             <constant>WAY&lowbar;CC&lowbar;OPTS</constant> holds
2974             options to pass to the C compiler when compiling the
2975             standard way.  (<Xref LinkEnd="sec-ways"> dicusses
2976             multi-way compilation.)</para>
2977           </listitem>
2978         </varlistentry>
2979
2980         <varlistentry>
2981           <term><constant>&lt;module&gt;&lowbar;CC&lowbar;OPTS</constant>:</term>
2982           <listitem>
2983             <para>options to pass to the C compiler that are specific
2984             to module <literal>&lt;module&gt;</literal>.  For example,
2985             <constant>SMap&lowbar;CC&lowbar;OPTS</constant> gives the
2986             specific options to pass to the C compiler when compiling
2987             <filename>SMap.c</filename>.</para>
2988           </listitem>
2989         </varlistentry>
2990
2991         <varlistentry>
2992           <term><constant>EXTRA&lowbar;CC&lowbar;OPTS</constant><indexterm><primary>EXTRA&lowbar;CC&lowbar;OPTS</primary></indexterm>:</term>
2993           <listitem>
2994             <para>extra options to pass to all C compilations.  This
2995             is intended for command line use, thus:</para>
2996
2997 <ProgramListing>
2998 gmake libHS.a EXTRA_CC_OPTS="-v"
2999 </ProgramListing>
3000           </listitem>
3001         </varlistentry>
3002       </variablelist>
3003     </sect2>
3004
3005     <sect2 id="sec-targets">
3006       <title>The main <filename>mk/target.mk</filename> file</title>
3007       <indexterm><primary>target.mk</primary></indexterm>
3008
3009       <para><filename>target.mk</filename> contains canned rules for
3010       all the standard targets described in <Xref
3011       LinkEnd="sec-standard-targets">.  It is complicated by the fact
3012       that you don't want all of these rules to be active in every
3013       <filename>Makefile</filename>.  Rather than have a plethora of
3014       tiny files which you can include selectively, there is a single
3015       file, <filename>target.mk</filename>, which selectively includes
3016       rules based on whether you have defined certain variables in
3017       your <filename>Makefile</filename>.  This section explains what
3018       rules you get, what variables control them, and what the rules
3019       do.  Hopefully, you will also get enough of an idea of what is
3020       supposed to happen that you can read and understand any weird
3021       special cases yourself.</para>
3022
3023       <variablelist>
3024         <varlistentry>
3025           <term><constant>HS&lowbar;PROG</constant><indexterm><primary>HS&lowbar;PROG</primary></indexterm>.</term>
3026           <listitem>
3027             <para>If <constant>HS&lowbar;PROG</constant> is defined,
3028             you get rules with the following targets:</para>
3029
3030             <variablelist>
3031               <varlistentry>
3032                 <term><filename>HS&lowbar;PROG</filename><indexterm><primary>HS&lowbar;PROG</primary></indexterm></term>
3033                 <listitem>
3034                   <para>itself.  This rule links
3035                   <constant>&dollar;(OBJS)</constant> with the Haskell
3036                   runtime system to get an executable called
3037                   <constant>&dollar;(HS&lowbar;PROG)</constant>.</para>
3038                 </listitem>
3039               </varlistentry>
3040
3041               <varlistentry>
3042                 <term><literal>install</literal><indexterm><primary>install</primary></indexterm></term>
3043                 <listitem>
3044                   <para>installs
3045                   <constant>&dollar;(HS&lowbar;PROG)</constant> in
3046                   <constant>&dollar;(bindir)</constant>.</para>
3047                 </listitem>
3048               </varlistentry>
3049             </variablelist>
3050
3051           </listitem>
3052         </varlistentry>
3053
3054         <varlistentry>
3055           <term><constant>C&lowbar;PROG</constant><indexterm><primary>C&lowbar;PROG</primary></indexterm></term>
3056           <listitem>
3057             <para>is similar to <constant>HS&lowbar;PROG</constant>,
3058             except that the link step links
3059             <constant>&dollar;(C&lowbar;OBJS)</constant> with the C
3060             runtime system.</para>
3061           </listitem>
3062         </varlistentry>
3063
3064         <varlistentry>
3065           <term><constant>LIBRARY</constant><indexterm><primary>LIBRARY</primary></indexterm></term>
3066           <listitem>
3067             <para>is similar to <constant>HS&lowbar;PROG</constant>,
3068             except that it links
3069             <constant>&dollar;(LIB&lowbar;OBJS)</constant> to make the
3070             library archive <constant>&dollar;(LIBRARY)</constant>,
3071             and <literal>install</literal> installs it in
3072             <constant>&dollar;(libdir)</constant>.</para>
3073           </listitem>
3074         </varlistentry>
3075
3076         <varlistentry>
3077           <term><constant>LIB&lowbar;DATA</constant><indexterm><primary>LIB&lowbar;DATA</primary></indexterm></term>
3078           <listitem>
3079             <para>&hellip;</para>
3080           </listitem>
3081         </varlistentry>
3082
3083         <varlistentry>
3084           <term><constant>LIB&lowbar;EXEC</constant><indexterm><primary>LIB&lowbar;EXEC</primary></indexterm></term>
3085           <listitem>
3086             <para>&hellip;</para>
3087           </listitem>
3088         </varlistentry>
3089
3090         <varlistentry>
3091           <term><constant>HS&lowbar;SRCS</constant><indexterm><primary>HS&lowbar;SRCS</primary></indexterm>, <constant>C&lowbar;SRCS</constant><indexterm><primary>C&lowbar;SRCS</primary></indexterm>.</term>
3092           <listitem>
3093             <para>If <constant>HS&lowbar;SRCS</constant> is defined
3094             and non-empty, a rule for the target
3095             <literal>depend</literal> is included, which generates
3096             dependency information for Haskell programs.  Similarly
3097             for <constant>C&lowbar;SRCS</constant>.</para>
3098           </listitem>
3099         </varlistentry>
3100       </variablelist>
3101
3102       <para>All of these rules are &ldquo;double-colon&rdquo; rules,
3103       thus</para>
3104
3105 <ProgramListing>
3106 install :: $(HS_PROG)
3107       ...how to install it...
3108 </ProgramListing>
3109
3110       <para>GNU <command>make</command> treats double-colon rules as
3111       separate entities.  If there are several double-colon rules for
3112       the same target it takes each in turn and fires it if its
3113       dependencies say to do so.  This means that you can, for
3114       example, define both <constant>HS&lowbar;PROG</constant> and
3115       <constant>LIBRARY</constant>, which will generate two rules for
3116       <literal>install</literal>.  When you type <command>gmake
3117       install</command> both rules will be fired, and both the program
3118       and the library will be installed, just as you wanted.</para>
3119     </sect2>
3120
3121     <sect2 id="sec-subdirs">
3122       <title>Recursion</title>
3123       <indexterm><primary>recursion, in makefiles</primary></indexterm>
3124       <indexterm><primary>Makefile, recursing into subdirectories</primary></indexterm>
3125
3126       <para>In leaf <filename>Makefile</filename>s the variable
3127       <constant>SUBDIRS</constant><indexterm><primary>SUBDIRS</primary></indexterm>
3128       is undefined.  In non-leaf <filename>Makefile</filename>s,
3129       <constant>SUBDIRS</constant> is set to the list of
3130       sub-directories that contain subordinate
3131       <filename>Makefile</filename>s.  <emphasis>It is up to you to
3132       set <constant>SUBDIRS</constant> in the
3133       <filename>Makefile</filename>.</emphasis> There is no automation
3134       here&mdash;<constant>SUBDIRS</constant> is too important to
3135       automate.</para>
3136
3137       <para>When <constant>SUBDIRS</constant> is defined,
3138       <filename>target.mk</filename> includes a rather neat rule for
3139       the standard targets (<Xref LinkEnd="sec-standard-targets"> that
3140       simply invokes <command>make</command> recursively in each of
3141       the sub-directories.</para>
3142
3143       <para><emphasis>These recursive invocations are guaranteed to
3144       occur in the order in which the list of directories is specified
3145       in <constant>SUBDIRS</constant>. </emphasis>This guarantee can
3146       be important.  For example, when you say <command>gmake
3147       boot</command> it can be important that the recursive invocation
3148       of <command>make boot</command> is done in one sub-directory
3149       (the include files, say) before another (the source files).
3150       Generally, put the most independent sub-directory first, and the
3151       most dependent last.</para>
3152     </sect2>
3153
3154     <sect2 id="sec-ways">
3155       <title>Way management</title>
3156       <indexterm><primary>way management</primary></indexterm>
3157
3158       <para>We sometimes want to build essentially the same system in
3159       several different &ldquo;ways&rdquo;.  For example, we want to build GHC's
3160       <literal>Prelude</literal> libraries with and without profiling,
3161       so that there is an appropriately-built library archive to link
3162       with when the user compiles his program.  It would be possible
3163       to have a completely separate build tree for each such &ldquo;way&rdquo;,
3164       but it would be horribly bureaucratic, especially since often
3165       only parts of the build tree need to be constructed in multiple
3166       ways.</para>
3167
3168       <para>Instead, the
3169       <filename>target.mk</filename><indexterm><primary>target.mk</primary></indexterm>
3170       contains some clever magic to allow you to build several
3171       versions of a system; and to control locally how many versions
3172       are built and how they differ.  This section explains the
3173       magic.</para>
3174
3175       <para>The files for a particular way are distinguished by
3176       munging the suffix.  The <quote>normal way</quote> is always
3177       built, and its files have the standard suffices
3178       <filename>.o</filename>, <filename>.hi</filename>, and so on.
3179       In addition, you can build one or more extra ways, each
3180       distinguished by a <emphasis>way tag</emphasis>.  The object
3181       files and interface files for one of these extra ways are
3182       distinguished by their suffix.  For example, way
3183       <literal>mp</literal> has files
3184       <filename>.mp&lowbar;o</filename> and
3185       <filename>.mp&lowbar;hi</filename>.  Library archives have their
3186       way tag the other side of the dot, for boring reasons; thus,
3187       <filename>libHS&lowbar;mp.a</filename>.</para>
3188
3189       <para>A <command>make</command> variable called
3190       <constant>way</constant> holds the current way tag.
3191       <emphasis><constant>way</constant> is only ever set on the
3192       command line of <command>gmake</command></emphasis> (usually in
3193       a recursive invocation of <command>gmake</command> by the
3194       system).  It is never set inside a
3195       <filename>Makefile</filename>.  So it is a global constant for
3196       any one invocation of <command>gmake</command>.  Two other
3197       <command>make</command> variables,
3198       <constant>way&lowbar;</constant> and
3199       <constant>&lowbar;way</constant> are immediately derived from
3200       <constant>&dollar;(way)</constant> and never altered.  If
3201       <constant>way</constant> is not set, then neither are
3202       <constant>way&lowbar;</constant> and
3203       <constant>&lowbar;way</constant>, and the invocation of
3204       <command>make</command> will build the <quote>normal
3205       way</quote>.  If <constant>way</constant> is set, then the other
3206       two variables are set in sympathy.  For example, if
3207       <constant>&dollar;(way)</constant> is &ldquo;<literal>mp</literal>&rdquo;,
3208       then <constant>way&lowbar;</constant> is set to
3209       &ldquo;<literal>mp&lowbar;</literal>&rdquo; and
3210       <constant>&lowbar;way</constant> is set to
3211       &ldquo;<literal>&lowbar;mp</literal>&rdquo;.  These three variables are
3212       then used when constructing file names.</para>
3213
3214       <para>So how does <command>make</command> ever get recursively
3215       invoked with <constant>way</constant> set?  There are two ways
3216       in which this happens:</para>
3217
3218       <itemizedlist>
3219         <listitem>
3220           <para>For some (but not all) of the standard targets, when
3221           in a leaf sub-directory, <command>make</command> is
3222           recursively invoked for each way tag in
3223           <constant>&dollar;(WAYS)</constant>.  You set
3224           <constant>WAYS</constant> in the
3225           <filename>Makefile</filename> to the list of way tags you
3226           want these targets built for.  The mechanism here is very
3227           much like the recursive invocation of
3228           <command>make</command> in sub-directories (<Xref
3229           LinkEnd="sec-subdirs">).  It is up to you to set
3230           <constant>WAYS</constant> in your
3231           <filename>Makefile</filename>; this is how you control what
3232           ways will get built.</para>
3233         </listitem>
3234
3235         <listitem>
3236           <para>For a useful collection of targets (such as
3237           <filename>libHS&lowbar;mp.a</filename>,
3238           <filename>Foo.mp&lowbar;o</filename>) there is a rule which
3239           recursively invokes <command>make</command> to make the
3240           specified target, setting the <constant>way</constant>
3241           variable.  So if you say <command>gmake
3242           Foo.mp&lowbar;o</command> you should see a recursive
3243           invocation <command>gmake Foo.mp&lowbar;o way=mp</command>,
3244           and <emphasis>in this recursive invocation the pattern rule
3245           for compiling a Haskell file into a <filename>.o</filename>
3246           file will match</emphasis>.  The key pattern rules (in
3247           <filename>suffix.mk</filename>) look like this:
3248
3249 <ProgramListing>
3250 %.$(way_)o : %.lhs
3251       $(HC) $(HC_OPTS) $&#60; -o $@
3252 </ProgramListing>
3253
3254           Neat, eh?</para>
3255         </listitem>
3256
3257         <listitem>
3258           <para>You can invoke <command>make</command> with a
3259           particular <literal>way</literal> setting yourself, in order
3260           to build files related to a particular
3261           <literal>way</literal> in the current directory.  eg.
3262
3263 <screen>
3264 $ make way=p
3265 </screen>
3266
3267           will build files for the profiling way only in the current
3268           directory. </para>
3269         </listitem>
3270       </itemizedlist>
3271     </sect2>
3272
3273     <sect2>
3274       <title>When the canned rule isn't right</title>
3275
3276       <para>Sometimes the canned rule just doesn't do the right thing.
3277       For example, in the <literal>nofib</literal> suite we want the
3278       link step to print out timing information.  The thing to do here
3279       is <emphasis>not</emphasis> to define
3280       <constant>HS&lowbar;PROG</constant> or
3281       <constant>C&lowbar;PROG</constant>, and instead define a special
3282       purpose rule in your own <filename>Makefile</filename>.  By
3283       using different variable names you will avoid the canned rules
3284       being included, and conflicting with yours.</para>
3285     </sect2>
3286   </sect1>
3287
3288   <sect1 id="building-docs">
3289     <title>Building the documentation</title>
3290
3291     <sect2 id="pre-supposed-doc-tools">
3292       <title>Tools for building the Documentation</title>
3293
3294       <para>The following additional tools are required if you want to
3295       format the documentation that comes with the
3296       <literal>fptools</literal> projects:</para>
3297       
3298       <variablelist>
3299         <varlistentry>
3300           <term>DocBook</term>
3301           <indexterm><primary>pre-supposed: DocBook</primary></indexterm>
3302           <indexterm><primary>DocBook, pre-supposed</primary></indexterm>
3303           <listitem>
3304             <para>Much of our documentation is written in SGML, using
3305             the DocBook DTD.  Instructions on installing and
3306             configuring the DocBook tools are below.</para>
3307           </listitem>
3308         </varlistentry>
3309
3310         <varlistentry>
3311           <term>TeX</term>
3312           <indexterm><primary>pre-supposed: TeX</primary></indexterm>
3313           <indexterm><primary>TeX, pre-supposed</primary></indexterm>
3314           <listitem>
3315             <para>A decent TeX distribution is required if you want to
3316             produce printable documentation.  We recomment teTeX,
3317             which includes just about everything you need.</para>
3318           </listitem>
3319         </varlistentry>
3320
3321         <varlistentry>
3322           <term>Haddock</term>
3323           <indexterm><primary>Haddock</primary>
3324           </indexterm>
3325           <listitem>
3326             <para>Haddock is a Haskell documentation tool that we use
3327             for automatically generating documentation from the
3328             library source code.  It is an <literal>fptools</literal>
3329             project in itself.  To build documentation for the
3330             libraries (<literal>fptools/libraries</literal>) you
3331             should check out and build Haddock in
3332             <literal>fptools/haddock</literal>.  Haddock requires GHC
3333             to build.</para>
3334           </listitem>
3335         </varlistentry>
3336       </variablelist>
3337     </sect2>
3338
3339     <sect2>
3340       <title>Installing the DocBook tools</title>
3341
3342       <sect3>
3343         <title>Installing the DocBook tools on Linux</title>
3344
3345         <para>If you're on a recent RedHat system (7.0+), you probably
3346         have working DocBook tools already installed.  The configure
3347         script should detect your setup and you're away.</para>
3348
3349         <para>If you don't have DocBook tools installed, and you are
3350         using a system that can handle RedHat RPM packages, you can
3351         probably use the <ULink
3352         URL="http://sourceware.cygnus.com/docbook-tools/">Cygnus
3353         DocBook tools</ULink>, which is the most shrink-wrapped SGML
3354         suite that we could find. You need all the RPMs except for
3355         psgml (i.e.  <Filename>docbook</Filename>,
3356         <Filename>jade</Filename>, <Filename>jadetex</Filename>,
3357         <Filename>sgmlcommon</Filename> and
3358         <Filename>stylesheets</Filename>). Note that most of these
3359         RPMs are architecture neutral, so are likely to be found in a
3360         <Filename>noarch</Filename> directory. The SuSE RPMs also
3361         work; the RedHat ones <Emphasis>don't</Emphasis> in RedHat 6.2
3362         (7.0 and later should be OK), but they are easy to fix: just
3363         make a symlink from
3364         <Filename>/usr/lib/sgml/stylesheets/nwalsh-modular/lib/dblib.dsl</Filename>
3365         to <Filename>/usr/lib/sgml/lib/dblib.dsl</Filename>. </para>
3366       </sect3>
3367     
3368       <sect3>
3369         <title>Installing DocBook on FreeBSD</title>
3370
3371         <para>On FreeBSD systems, the easiest way to get DocBook up
3372         and running is to install it from the ports tree or a
3373         pre-compiled package (packages are available from your local
3374         FreeBSD mirror site).</para>
3375
3376         <para>To use the ports tree, do this:
3377 <screen>
3378       $ cd /usr/ports/textproc/docproj
3379       $ make install
3380 </screen>
3381         This installs the FreeBSD documentation project tools, which
3382         includes everything needed to format the GHC
3383         documentation.</para>
3384       </sect3>
3385
3386       <sect3>
3387         <title>Installing from binaries on Windows</title>
3388         
3389         <Para>It's a good idea to use Norman Walsh's <ULink
3390         URL="http://nwalsh.com/docbook/dsssl/doc/install.html">installation
3391         notes</ULink> as a guide. You should get version 3.1 of
3392         DocBook, and note that his file <Filename>test.sgm</Filename>
3393         won't work, as it needs version 3.0. You should unpack Jade
3394         into <Filename>\Jade</Filename>, along with the entities,
3395         DocBook into <Filename>\docbook</Filename>, and the DocBook
3396         stylesheets into <Filename>\docbook\stylesheets</Filename> (so
3397         they actually end up in
3398         <Filename>\docbook\stylesheets\docbook</Filename>).</para>
3399       </Sect3>
3400
3401
3402       <sect3>
3403         <title>Installing the DocBook tools from source</title>
3404
3405         <sect4>
3406           <title>Jade</title>
3407
3408           <para>Install <ULink
3409           URL="http://openjade.sourceforge.net/">OpenJade</ULink>
3410           (Windows binaries are available as well as sources). If you
3411           want DVI, PS, or PDF then install JadeTeX from the
3412           <Filename>dsssl</Filename> subdirectory. (If you get the
3413           error:
3414
3415 <screen>
3416 ! LaTeX Error: Unknown option implicit=false' for package hyperref'.
3417 </screen>
3418
3419           your version of <Command>hyperref</Command> is out of date;
3420           download it from CTAN
3421           (<Filename>macros/latex/contrib/supported/hyperref</Filename>),
3422           and make it, ensuring that you have first removed or renamed
3423           your old copy. If you start getting file not found errors
3424           when making the test for <Command>hyperref</Command>, you
3425           can abort at that point and proceed straight to
3426           <Command>make install</Command>, or enter them as
3427           <Filename>../</Filename><Emphasis>filename</Emphasis>.)</para>
3428
3429           <para>Make links from <Filename>virtex</Filename> to
3430           <Filename>jadetex</Filename> and
3431           <Filename>pdfvirtex</Filename> to
3432           <Filename>pdfjadetex</Filename> (otherwise DVI, PostScript
3433           and PDF output will not work). Copy
3434           <Filename>dsssl/*.{dtd,dsl}</Filename> and
3435           <Filename>catalog</Filename> to
3436           <Filename>/usr/[local/]lib/sgml</Filename>.</para>
3437         </sect4>
3438
3439         <sect4>
3440           <title>DocBook and the DocBook stylesheets</title>
3441
3442           <para>Get a Zip of <ULink
3443           URL="http://www.oasis-open.org/docbook/sgml/3.1/index.html">DocBook</ULink>
3444           and install the contents in
3445           <Filename>/usr/[local/]/lib/sgml</Filename>.</para>
3446
3447           <para>Get the <ULink
3448           URL="http://nwalsh.com/docbook/dsssl/">DocBook
3449           stylesheets</ULink> and install in
3450           <Filename>/usr/[local/]lib/sgml/stylesheets</Filename>
3451           (thereby creating a subdirectory docbook). For indexing,
3452           copy or link <Filename>collateindex.pl</Filename> from the
3453           DocBook stylesheets archive in <Filename>bin</Filename> into
3454           a directory on your <Constant>PATH</Constant>.</para>
3455
3456           <para>Download the <ULink
3457           URL="http://www.oasis-open.org/cover/ISOEnts.zip">ISO
3458           entities</ULink> into
3459           <Filename>/usr/[local/]lib/sgml</Filename>.</para>
3460         </sect4>
3461       </sect3>
3462     </sect2>
3463
3464     <sect2>
3465       <title>Configuring the DocBook tools</title>
3466
3467       <Para>Once the DocBook tools are installed, the configure script
3468       will detect them and set up the build system accordingly. If you
3469       have a system that isn't supported, let us know, and we'll try
3470       to help.</para>
3471     </sect2>
3472
3473     <sect2>
3474       <title>Remaining problems</title>
3475
3476       <para>If you install from source, you'll get a pile of warnings
3477       of the form
3478
3479 <Screen>DTDDECL catalog entries are not supported</Screen>
3480
3481       every time you build anything. These can safely be ignored, but
3482       if you find them tedious you can get rid of them by removing all
3483       the <Constant>DTDDECL</Constant> entries from
3484       <Filename>docbook.cat</Filename>.</para>
3485     </sect2>
3486
3487     <sect2>
3488       <title>Building the documentation</title>
3489
3490       <para>To build documentation in a certain format, you can
3491       say, for example,</para>
3492
3493 <screen>
3494 $ make html
3495 </screen>
3496
3497       <para>to build HTML documentation below the current directory.
3498       The available formats are: <literal>dvi</literal>,
3499       <literal>ps</literal>, <literal>pdf</literal>,
3500       <literal>html</literal>, and <literal>rtf</literal>.  Note that
3501       not all documentation can be built in all of these formats: HTML
3502       documentation is generally supported everywhere, and DocBook
3503       documentation might support the other formats (depending on what
3504       other tools you have installed).</para>
3505
3506       <para>All of these targets are recursive; that is, saying
3507       <literal>make html</literal> will make HTML docs for all the
3508       documents recursively below the current directory.</para>
3509
3510       <para>Because there are many different formats that the DocBook
3511       documentation can be generated in, you have to select which ones
3512       you want by setting the <literal>SGMLDocWays</literal> variable
3513       to a list of them.  For example, in
3514       <filename>build.mk</filename> you might have a line:</para>
3515
3516 <screen>
3517 SGMLDocWays = html ps
3518 </screen>
3519
3520       <para>This will cause the documentation to be built in the requested
3521       formats as part of the main build (the default is not to build
3522       any documentation at all).</para>
3523     </sect2>
3524
3525     <sect2>
3526       <title>Installing the documentation</title>
3527
3528       <para>To install the documentation, use:</para>
3529
3530 <screen>
3531 $ make install-docs
3532 </screen>
3533
3534       <para>This will install the documentation into
3535       <literal>$(datadir)</literal> (which defaults to
3536       <literal>$(prefix)/share</literal>).  The exception is HTML
3537       documentation, which goes into
3538       <literal>$(datadir)/html</literal>, to keep things tidy.</para>
3539
3540       <para>Note that unless you set <literal>$(SGMLDocWays)</literal>
3541       to a list of formats, the <literal>install-docs</literal> target
3542       won't do anything for SGML documentation.</para>
3543     </sect2>
3544
3545   </sect1>
3546     
3547
3548   <sect1 id="sec-porting-ghc">
3549     <title>Porting GHC</title>
3550
3551     <para>This section describes how to port GHC to a currenly
3552     unsupported platform.  There are two distinct
3553     possibilities:</para>
3554
3555     <itemizedlist>
3556       <listitem>
3557         <para>The hardware architecture for your system is already
3558         supported by GHC, but you're running an OS that isn't
3559         supported (or perhaps has been supported in the past, but
3560         currently isn't).  This is the easiest type of porting job,
3561         but it still requires some careful bootstrapping.  Proceed to
3562         <xref linkend="sec-booting-from-hc">.</para>
3563       </listitem>
3564       
3565       <listitem>
3566         <para>Your system's hardware architecture isn't supported by
3567         GHC.  This will be a more difficult port (though by comparison
3568         perhaps not as difficult as porting gcc).  Proceed to <xref
3569         linkend="unregisterised-porting">.</para>
3570       </listitem>
3571     </itemizedlist>
3572     
3573     <sect2 id="sec-booting-from-hc">
3574       <title>Booting/porting from C (<filename>.hc</filename>) files</title>
3575
3576       <indexterm><primary>building GHC from .hc files</primary></indexterm>
3577       <indexterm><primary>booting GHC from .hc files</primary></indexterm>
3578       <indexterm><primary>porting GHC</primary></indexterm>
3579
3580       <para>Bootstrapping GHC on a system without GHC already
3581       installed is achieved by taking the intermediate C files (known
3582       as HC files) from a GHC compilation on a supported system to the
3583       target machine, and compiling them using gcc to get a working
3584       GHC.</para>
3585
3586       <para><emphasis>NOTE: GHC version 5.xx is significantly harder
3587       to bootstrap from C than previous versions.  We recommend
3588       starting from version 4.08.2 if you need to bootstrap in this
3589       way.</emphasis></para>
3590
3591       <para>HC files are architecture-dependent (but not
3592       OS-dependent), so you have to get a set that were generated on
3593       similar hardware.  There may be some supplied on the GHC
3594       download page, otherwise you'll have to compile some up
3595       yourself, or start from <emphasis>unregisterised</emphasis> HC
3596       files - see <xref linkend="unregisterised-porting">.</para>
3597
3598       <para>The following steps should result in a working GHC build
3599       with full libraries:</para>
3600
3601       <itemizedlist>
3602         <listitem>
3603           <para>Unpack the HC files on top of a fresh source tree
3604           (make sure the source tree version matches the version of
3605           the HC files <emphasis>exactly</emphasis>!).  This will
3606           place matching <filename>.hc</filename> files next to the
3607           corresponding Haskell source (<filename>.hs</filename> or
3608           <filename>.lhs</filename>) in the compiler subdirectory
3609           <filename>ghc/compiler</filename> and in the libraries
3610           (subdirectories of <filename>hslibs</filename> and
3611           <literal>libraries</literal>).</para>
3612         </listitem>
3613
3614         <listitem>
3615           <para>The actual build process is fully automated by the
3616           <filename>hc-build</filename> script located in the
3617           <filename>distrib</filename> directory.  If you eventually
3618           want to install GHC into the directory
3619           <replaceable>dir</replaceable>, the following
3620           command will execute the whole build process (it won't
3621           install yet):</para>
3622
3623 <Screen>
3624 foo% distrib/hc-build --prefix=<replaceable>dir</replaceable>
3625 </Screen>
3626 <indexterm><primary>--hc-build</primary></indexterm>
3627
3628           <para>By default, the installation directory is
3629           <filename>/usr/local</filename>.  If that is what you want,
3630           you may omit the argument to <filename>hc-build</filename>.
3631           Generally, any option given to <filename>hc-build</filename>
3632           is passed through to the configuration script
3633           <filename>configure</filename>.  If
3634           <filename>hc-build</filename> successfully completes the
3635           build process, you can install the resulting system, as
3636           normal, with</para>
3637
3638 <Screen>
3639 foo% make install
3640 </Screen>
3641         </listitem>
3642       </itemizedlist>
3643     </sect2>
3644
3645     <sect2 id="unregisterised-porting">
3646       <title>Porting GHC to a new architecture</title>
3647       
3648       <para>The first step in porting to a new architecture is to get
3649       an <firstterm>unregisterised</firstterm> build working.  An
3650       unregisterised build is one that compiles via vanilla C only.
3651       By contrast, a registerised build uses the following
3652       architecture-specific hacks for speed:</para>
3653
3654       <itemizedlist>
3655         <listitem>
3656           <para>Global register variables: certain abstract machine
3657           <quote>registers</quote> are mapped to real machine
3658           registers, depending on how many machine registers are
3659           available (see
3660           <filename>ghc/includes/MachRegs.h</filename>).</para>
3661         </listitem>
3662
3663         <listitem>
3664           <para>Assembly-mangling: when compiling via C, we feed the
3665           assembly generated by gcc though a Perl script known as the
3666           <firstterm>mangler</firstterm> (see
3667           <filename>ghc/driver/mangler/ghc-asm.lprl</filename>).  The
3668           mangler rearranges the assembly to support tail-calls and
3669           various other optimisations.</para>
3670         </listitem>
3671       </itemizedlist>
3672
3673       <para>In an unregisterised build, neither of these hacks are
3674       used &mdash; the idea is that the C code generated by the
3675       compiler should compile using gcc only.  The lack of these
3676       optimisations costs about a factor of two in performance, but
3677       since unregisterised compilation is usually just a step on the
3678       way to a full registerised port, we don't mind too much.</para>
3679
3680       <sect3>
3681         <title>Building an unregisterised port</title>
3682         
3683         <para>The first step is to get some unregisterised HC files.
3684         Either (a)&nbsp;download them from the GHC site (if there are
3685         some available for the right version of GHC), or
3686         (b)&nbsp;build them yourself on any machine with a working
3687         GHC.  If at all possible this should be a machine with the
3688         same word size as the target.</para>
3689
3690         <para>There is a script available which should automate the
3691         process of doing the 2-stage bootstrap necessary to get the
3692         unregisterised HC files - it's available in <ulink
3693         url="http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/distrib/cross-port"><filename>fptools/distrib/cross-port</filename></ulink>
3694         in CVS.</para>
3695
3696         <para>Now take these unregisterised HC files to the target
3697         platform and bootstrap a compiler from them as per the
3698         instructions in <xref linkend="sec-booting-from-hc">.  In
3699         <filename>build.mk</filename>, you need to tell the build
3700         system that the compiler you're building is
3701         (a)&nbsp;unregisterised itself, and (b)&nbsp;builds
3702         unregisterised binaries.  This varies depending on the GHC
3703         version you're bootstraping:</para>
3704
3705 <programlisting>
3706 # build.mk for GHC 4.08.x
3707 GhcWithRegisterised=NO
3708 </programlisting>
3709
3710 <programlisting>
3711 # build.mk for GHC 5.xx
3712 GhcUnregisterised=YES
3713 </programlisting>
3714
3715         <para>Version 5.xx only: use the option
3716         <option>--enable-hc-boot-unregisterised</option> instead of
3717         <option>--enable-hc-boot</option> when running
3718         <filename>./configure</filename>.</para>
3719
3720         <para>The build may not go through cleanly.  We've tried to
3721         stick to writing portable code in most parts of the compiler,
3722         so it should compile on any POSIXish system with gcc, but in
3723         our experience most systems differ from the standards in one
3724         way or another.  Deal with any problems as they arise - if you
3725         get stuck, ask the experts on
3726         <email>glasgow-haskell-users@haskell.org</email>.</para>
3727         
3728         <para>Once you have the unregisterised compiler up and
3729         running, you can use it to start a registerised port.  The
3730         following sections describe the various parts of the system
3731         that will need architecture-specific tweaks in order to get a
3732         registerised build going.</para>
3733
3734         <para>Lots of useful information about the innards of GHC is
3735         available in the <ulink
3736         url="http://www.cse.unsw.edu.au/~chak/haskell/ghc/comm/">GHC
3737         Commentary</ulink>, which might be helpful if you run into
3738         some code which needs tweaking for your system.</para>
3739       </sect3>
3740
3741       <sect3>
3742         <title>Porting the RTS</title>
3743         
3744         <para>The following files need architecture-specific code for a
3745         registerised build:</para>
3746
3747         <variablelist>
3748           <varlistentry>
3749             <term><filename>ghc/includes/MachRegs.h</filename></term>
3750             <indexterm><primary><filename>MachRegs.h</filename></primary>
3751             </indexterm>
3752             <listitem>
3753               <para>Defines the STG-register to machine-register
3754               mapping.  You need to know your platform's C calling
3755               convention, and which registers are generally available
3756               for mapping to global register variables.  There are
3757               plenty of useful comments in this file.</para>
3758             </listitem>
3759           </varlistentry>
3760           <varlistentry>
3761             <term><filename>ghc/includes/TailCalls.h</filename></term>
3762             <indexterm><primary><filename>TailCalls.h</filename></primary>
3763             </indexterm>
3764             <listitem>
3765               <para>Macros that cooperate with the mangler (see <xref
3766               linkend="sec-mangler">) to make proper tail-calls
3767               work.</para>
3768             </listitem>
3769           </varlistentry>
3770           <varlistentry>
3771             <term><filename>ghc/rts/Adjustor.c</filename></term>
3772             <indexterm><primary><filename>Adjustor.c</filename></primary>
3773             </indexterm>
3774             <listitem>
3775               <para>Support for
3776               <literal>foreign&nbsp;import&nbsp;"wrapper"</literal>
3777               (aka
3778               <literal>foreign&nbsp;export&nbsp;dynamic</literal>).
3779               Not essential for getting GHC bootstrapped, so this file
3780               can be deferred until later if necessary.</para>
3781             </listitem>
3782           </varlistentry>
3783           <varlistentry>
3784             <term><filename>ghc/rts/StgCRun.c</filename></term>
3785             <indexterm><primary><filename>StgCRun.c</filename></primary>
3786             </indexterm>
3787             <listitem>
3788               <para>The little assembly layer between the C world and
3789               the Haskell world.  See the comments and code for the
3790               other architectures in this file for pointers.</para>
3791             </listitem>
3792           </varlistentry>
3793           <varlistentry>
3794             <term><filename>ghc/rts/MBlock.h</filename></term>
3795             <term><filename>ghc/rts/MBlock.c</filename></term>
3796             <indexterm><primary><filename>MBlock.h</filename></primary>
3797             </indexterm>
3798             <indexterm><primary><filename>MBlock.c</filename></primary>
3799             </indexterm>
3800             <listitem>
3801               <para>These files are really OS-specific rather than
3802               architecture-specific.  In <filename>MBlock.h</filename>
3803               is specified the absolute location at which the RTS
3804               should try to allocate memory on your platform (try to
3805               find an area which doesn't conflict with code or dynamic
3806               libraries).  In <filename>Mblock.c</filename> you might
3807               need to tweak the call to <literal>mmap()</literal> for
3808               your OS.</para>
3809             </listitem>
3810           </varlistentry>
3811         </variablelist>
3812       </sect3>
3813
3814       <sect3 id="sec-mangler">
3815         <title>The mangler</title>
3816         
3817         <para>The mangler is an evil Perl-script that rearranges the
3818         assembly code output from gcc to do two main things:</para>
3819
3820         <itemizedlist>
3821           <listitem>
3822             <para>Remove function prologues and epilogues, and all
3823             movement of the C stack pointer.  This is to support
3824             tail-calls: every code block in Haskell code ends in an
3825             explicit jump, so we don't want the C-stack overflowing
3826             while we're jumping around between code blocks.</para>
3827           </listitem>
3828           <listitem>
3829             <para>Move the <firstterm>info table</firstterm> for a
3830             closure next to the entry code for that closure.  In
3831             unregisterised code, info tables contain a pointer to the
3832             entry code, but in registerised compilation we arrange
3833             that the info table is shoved right up against the entry
3834             code, and addressed backwards from the entry code pointer
3835             (this saves a word in the info table and an extra
3836             indirection when jumping to the closure entry
3837             code).</para>
3838           </listitem>
3839         </itemizedlist>
3840
3841         <para>The mangler is abstracted to a certain extent over some
3842         architecture-specific things such as the particular assembler
3843         directives used to herald symbols.  Take a look at the
3844         definitions for other architectures and use these as a
3845         starting point.</para>
3846       </sect3>
3847
3848       <sect3>
3849         <title>The native code generator</title>
3850
3851         <para>The native code generator isn't essential to getting a
3852         registerised build going, but it's a desirable thing to have
3853         because it can cut compilation times in half.  The native code
3854         generator is described in some detail in the <ulink
3855         url="http://www.cse.unsw.edu.au/~chak/haskell/ghc/comm/">GHC
3856         commentary</ulink>.</para>
3857       </sect3>
3858
3859       <sect3>
3860         <title>GHCi</title>
3861
3862         <para>To support GHCi, you need to port the dynamic linker
3863         (<filename>fptools/ghc/rts/Linker.c</filename>).  The linker
3864         currently supports the ELF and PEi386 object file formats - if
3865         your platform uses one of these then you probably don't have
3866         to do anything except fiddle with the
3867         <literal>#ifdef</literal>s at the top of
3868         <filename>Linker.c</filename> to tell it about your OS.</para>
3869         
3870         <para>If your system uses a different object file format, then
3871         you have to write a linker &mdash; good luck!</para>
3872       </sect3>
3873     </sect2>
3874
3875   </sect1>
3876
3877 <sect1 id="sec-build-pitfalls">
3878 <title>Known pitfalls in building Glasgow Haskell
3879
3880 <indexterm><primary>problems, building</primary></indexterm>
3881 <indexterm><primary>pitfalls, in building</primary></indexterm>
3882 <indexterm><primary>building pitfalls</primary></indexterm></title>
3883
3884 <para>
3885 WARNINGS about pitfalls and known &ldquo;problems&rdquo;:
3886 </para>
3887
3888 <para>
3889
3890 <OrderedList>
3891 <listitem>
3892
3893 <para>
3894 One difficulty that comes up from time to time is running out of space
3895 in <literal>TMPDIR</literal>.  (It is impossible for the configuration stuff to
3896 compensate for the vagaries of different sysadmin approaches to temp
3897 space.)
3898 <indexterm><primary>tmp, running out of space in</primary></indexterm>
3899
3900 The quickest way around it is <command>setenv TMPDIR /usr/tmp</command><indexterm><primary>TMPDIR</primary></indexterm> or
3901 even <command>setenv TMPDIR .</command> (or the equivalent incantation with your shell
3902 of choice).
3903
3904 The best way around it is to say
3905
3906 <ProgramListing>
3907 export TMPDIR=&#60;dir&#62;
3908 </ProgramListing>
3909
3910 in your <filename>build.mk</filename> file.
3911 Then GHC and the other <literal>fptools</literal> programs will use the appropriate directory
3912 in all cases.
3913
3914
3915 </para>
3916 </listitem>
3917 <listitem>
3918
3919 <para>
3920 In compiling some support-code bits, e.g., in <filename>ghc/rts/gmp</filename> and even
3921 in <filename>ghc/lib</filename>, you may get a few C-compiler warnings.  We think these
3922 are OK.
3923
3924 </para>
3925 </listitem>
3926 <listitem>
3927
3928 <para>
3929 When compiling via C, you'll sometimes get &ldquo;warning: assignment from
3930 incompatible pointer type&rdquo; out of GCC.  Harmless.
3931
3932 </para>
3933 </listitem>
3934 <listitem>
3935
3936 <para>
3937 Similarly, <command>ar</command>chiving warning messages like the following are not
3938 a problem:
3939
3940 <Screen>
3941 ar: filename GlaIOMonad__1_2s.o truncated to GlaIOMonad_
3942 ar: filename GlaIOMonad__2_2s.o truncated to GlaIOMonad_
3943 ...
3944 </Screen>
3945
3946
3947 </para>
3948 </listitem>
3949 <listitem>
3950
3951 <para>
3952  In compiling the compiler proper (in <filename>compiler/</filename>), you <emphasis>may</emphasis>
3953 get an &ldquo;Out of heap space&rdquo; error message.  These can vary with the
3954 vagaries of different systems, it seems.  The solution is simple:
3955
3956
3957 <itemizedlist>
3958 <listitem>
3959
3960 <para>
3961  If you're compiling with GHC 4.00 or later, then the
3962 <emphasis>maximum</emphasis> heap size must have been reached.  This
3963 is somewhat unlikely, since the maximum is set to 64M by default.
3964 Anyway, you can raise it with the
3965 <option>-optCrts-M&lt;size&gt;</option> flag (add this flag to
3966 <constant>&lt;module&gt;&lowbar;HC&lowbar;OPTS</constant>
3967 <command>make</command> variable in the appropriate
3968 <filename>Makefile</filename>).
3969
3970 </para>
3971 </listitem>
3972 <listitem>
3973
3974 <para>
3975  For GHC &#60; 4.00, add a suitable <option>-H</option> flag to the <filename>Makefile</filename>, as
3976 above.
3977
3978 </para>
3979 </listitem>
3980
3981 </itemizedlist>
3982
3983
3984 and try again: <command>gmake</command>.  (see <Xref LinkEnd="sec-suffix"> for information about
3985 <constant>&lt;module&gt;&lowbar;HC&lowbar;OPTS</constant>.)
3986
3987 Alternatively, just cut to the chase:
3988
3989 <Screen>
3990 % cd ghc/compiler
3991 % make EXTRA_HC_OPTS=-optCrts-M128M
3992 </Screen>
3993
3994
3995 </para>
3996 </listitem>
3997 <listitem>
3998
3999 <para>
4000 If you try to compile some Haskell, and you get errors from GCC about
4001 lots of things from <filename>/usr/include/math.h</filename>, then your GCC was
4002 mis-installed.  <command>fixincludes</command> wasn't run when it should've been.
4003
4004 As <command>fixincludes</command> is now automagically run as part of GCC installation,
4005 this bug also suggests that you have an old GCC.
4006
4007
4008 </para>
4009 </listitem>
4010 <listitem>
4011
4012 <para>
4013 You <emphasis>may</emphasis> need to re-<command>ranlib</command><indexterm><primary>ranlib</primary></indexterm> your libraries (on Sun4s).
4014
4015
4016 <Screen>
4017 % cd $(libdir)/ghc-x.xx/sparc-sun-sunos4
4018 % foreach i ( `find . -name '*.a' -print` ) # or other-shell equiv...
4019 ?    ranlib $i
4020 ?    # or, on some machines: ar s $i
4021 ? end
4022 </Screen>
4023
4024
4025 We'd be interested to know if this is still necessary.
4026
4027
4028 </para>
4029 </listitem>
4030 <listitem>
4031
4032 <para>
4033 GHC's sources go through <command>cpp</command> before being compiled, and <command>cpp</command> varies
4034 a bit from one Unix to another.  One particular gotcha is macro calls
4035 like this:
4036
4037
4038 <ProgramListing>
4039 SLIT("Hello, world")
4040 </ProgramListing>
4041
4042
4043 Some <command>cpp</command>s treat the comma inside the string as separating two macro
4044 arguments, so you get
4045
4046
4047 <Screen>
4048 :731: macro `SLIT' used with too many (2) args
4049 </Screen>
4050
4051
4052 Alas, <command>cpp</command> doesn't tell you the offending file!
4053
4054 Workaround: don't put weird things in string args to <command>cpp</command> macros.
4055 </para>
4056 </listitem>
4057
4058 </OrderedList>
4059
4060 </para>
4061
4062 </sect1>
4063
4064
4065 <Sect1 id="winbuild"><Title>Notes for building under Windows</Title>
4066
4067 <para>
4068 This section summarises how to get the utilities you need on your
4069 Win95/98/NT/2000 machine to use CVS and build GHC. Similar notes for
4070 installing and running GHC may be found in the user guide. In general,
4071 Win95/Win98 behave the same, and WinNT/Win2k behave the same.
4072 You should read the GHC installation guide sections on Windows (in the user
4073 guide) before continuing to read these notes.
4074 </para>
4075
4076
4077 <sect2><Title>Cygwin and MinGW</Title>
4078
4079 <para> The Windows situation for building GHC is rather confusing.  This section
4080 tries to clarify, and to establish terminology.</para>
4081
4082 <sect3 id="ghc-mingw"><title>GHC-mingw</title>
4083
4084 <para> <ulink url="http://www.mingw.org">MinGW (Minimalist GNU for Windows)</ulink> 
4085 is a collection of header
4086 files and import libraries that allow one to use <command>gcc</command> and produce
4087 native Win32 programs that do not rely on any third-party DLLs. The
4088 current set of tools include GNU Compiler Collection (<command>gcc</command>), GNU Binary
4089 Utilities (Binutils), GNU debugger (Gdb), GNU make, and a assorted
4090 other utilities. 
4091 </para>
4092 <para>The GHC that we distribute includes, inside the distribution itself, the MinGW <command>gcc</command>,
4093 <command>as</command>, <command>ld</command>, and a bunch of input/output libraries.  
4094 GHC compiles Haskell to C (or to 
4095 assembly code), and then invokes these MinGW tools to generate an executable binary.
4096 The resulting binaries can run on any Win32 system.
4097 </para>
4098 <para> We will call a GHC that targets MinGW in this way <emphasis>GHC-mingw</emphasis>.</para>
4099
4100 <para> The down-side of GHC-mingw is that the MinGW libraries do not support anything like the full
4101 Posix interface.  So programs compiled with GHC-mingw cannot import the (Haskell) Posix 
4102 library; they have to do
4103 their input output using standard Haskell I/O libraries, or native Win32 bindings.
4104 </para>
4105 </sect3>
4106
4107 <sect3 id="ghc-cygwin"><title>GHC-cygwin</title>
4108
4109 <para>There <emphasis>is</emphasis> a way to get the full Posix interface, which is to use Cygwin.  
4110 <ulink url="http://www.cygwin.com">Cygwin</ulink> is a complete Unix simulation that runs on Win32.
4111 Cygwin comes with a shell, and all the usual Unix commands: <command>mv</command>, <command>rm</command>,
4112 <command>ls</command>, plus of course <command>gcc</command>, <command>ld</command> and so on.
4113 A C program compiled with the Cygwin <command>gcc</command> certainly can use all of Posix.
4114 </para>
4115 <para>So why doesn't GHC use the Cygwin <command>gcc</command> and libraries?  Because
4116 Cygwin comes with a DLL <emphasis>that must be linked with every runnable Cygwin-compiled program</emphasis>.
4117 A program compiled by the Cygwin tools cannot run at all unless Cygwin is installed. 
4118 If GHC targeted Cygwin, users would have to install Cygwin just to run the Haskell programs
4119 that GHC compiled; and the Cygwin DLL would have to be in the DLL load path.
4120 Worse, Cygwin is a moving target.  The name of the main DLL, <literal>cygwin1.dll</literal>
4121 does not change, but the implementation certainly does.  Even the interfaces to functions
4122 it exports seem to change occasionally. So programs compiled by GHC might only run with
4123 particular versions of Cygwin.  All of this seems very undesirable.
4124 </para>
4125 <para>
4126 Nevertheless, it is certainly possible to build a version of GHC that targets Cygwin;
4127 we will call that <emphasis>GHC-cygwin</emphasis>.  The up-side of GHC-cygwin is
4128 that Haskell programs compiled by GHC-cygwin can import the (Haskell) Posix library.
4129 </para>
4130 </sect3>
4131
4132 <sect3><title>HOST_OS vs TARGET_OS</title>
4133
4134 <para>
4135 In the source code you'll find various ifdefs looking like:
4136 <programlisting>
4137   #ifdef mingw32_HOST_OS
4138     ...blah blah...
4139   #endif
4140 </programlisting>
4141 and 
4142 <programlisting>
4143   #ifdef mingw32_TARGET_OS
4144     ...blah blah...
4145   #endif
4146 </programlisting>
4147 These macros are set by the configure script (via the file config.h).
4148 Which is which?  The criterion is this.  In the ifdefs in GHC's source code:
4149 <itemizedlist>
4150   <listitem> <para>
4151   The "host" system is the one on which GHC itself will be run.
4152   </para> </listitem>
4153   <listitem> <para>
4154   The "target" system is the one for which the program compiled by GHC will be run.
4155   </para> </listitem>
4156 </itemizedlist>
4157 For a stage-2 compiler, in which GHCi is available, the "host" and "target" systems must be the same.
4158 So then it doesn't really matter whether you use the HOST_OS or TARGET_OS cpp macros.
4159
4160 </para>
4161 </sect3>
4162
4163 <sect3><title>Summary</title>
4164
4165 <para>Notice that "GHC-mingw" means "GHC that <emphasis>targets</emphasis> MinGW".  It says nothing about 
4166 how that GHC was <emphasis>built</emphasis>.  It is entirely possible to have a GHC-mingw that was built
4167 by compiling GHC's Haskell sources with a GHC-cygwin, or vice versa.</para>
4168
4169 <para>We distribute only a GHC-mingw built by a GHC-mingw; supporting
4170 GHC-cygwin too is beyond our resources.  The GHC we distribute
4171 therefore does not require Cygwin to run, nor do the programs it
4172 compiles require Cygwin.</para>
4173
4174 <para>The instructions that follow describe how to build GHC-mingw. It is
4175 possible to build GHC-cygwin, but it's not a supported route, and the build system might
4176 be flaky.</para>
4177
4178 <para>In your build tree, you build a compiler called <Command>ghc-inplace</Command>.  It
4179 uses the <Command>gcc</Command> that you specify using the
4180 <option>--with-gcc</option> flag when you run
4181 <Command>configure</Command> (see below).
4182 The makefiles are careful to use <Command>ghc-inplace</Command> (not <Command>gcc</Command>)
4183 to compile any C files, so that it will in turn invoke the right <Command>gcc</Command> rather that
4184 whatever one happens to be in your path.  However, the makefiles do use whatever <Command>ld</Command> 
4185 and <Command>ar</Command> happen to be in your path. This is a bit naughty, but (a) they are only
4186 used to glom together .o files into a bigger .o file, or a .a file, 
4187 so they don't ever get libraries (which would be bogus; they might be the wrong libraries), and (b)
4188 Cygwin and Mingw use the same .o file format.  So its ok.
4189 </para>
4190 </sect3>
4191 </sect2>
4192
4193 <Sect2><Title>Installing and configuring Cygwin</Title>
4194
4195 <para>You don't need Cygwin to <emphasis>use</emphasis> GHC, 
4196 but you do need it to <emphasis>build</emphasis> GHC.</para>
4197
4198 <para> Install Cygwin from <ulink url="http://www.cygwin.com/">http://www.cygwin.com/</ulink>.
4199 The installation process is straightforward; we install it in <Filename>c:/cygwin</Filename>.
4200 Both <command>cvs</command> and <command>ssh</command>
4201 come with Cygwin, but you'll need them, so make sure you select them when running
4202 the Cygwin installer.
4203
4204 </para>
4205 <para> Now set the following user environment variables:
4206 <itemizedlist>
4207
4208 <listitem><para> Add <filename>c:/cygwin/bin</filename> and <filename>c:/cygwin/usr/bin</filename> to your 
4209 <constant>PATH</constant></para></listitem>
4210
4211 <listitem>
4212 <para>
4213 Set <constant>MAKE_MODE</constant> to <Literal>UNIX</Literal>. If you
4214 don't do this you get very weird messages when you type
4215 <Command>make</Command>, such as:
4216 <Screen>
4217 /c: /c: No such file or directory
4218 </Screen>
4219 </para>
4220 </listitem>
4221
4222 <listitem><para> Set <constant>SHELL</constant> to
4223 <Filename>c:/cygwin/bin/sh</Filename>. When you invoke a shell in Emacs, this
4224 <constant>SHELL</constant> is what you get.
4225 </para></listitem>
4226
4227 <listitem><para> Set <constant>HOME</constant> to point to your 
4228 home directory.  This is where, for example,
4229 <command>bash</command> will look for your <filename>.bashrc</filename>
4230 file.  Ditto <command>emacs</command> looking for <filename>.emacsrc</filename>
4231 </para></listitem>
4232 </itemizedlist>
4233 </para>
4234
4235 <para>
4236 There are a few other things to do:
4237 <itemizedlist>
4238 <listitem>
4239 <para>
4240 Some script files used in the make system start with "<Command>#!/bin/perl</Command>",
4241 (and similarly for <Command>bash</Command>).  Notice the hardwired path!
4242 So you need to ensure that your <Filename>/bin</Filename> directory has the following
4243 binaries in it:
4244 <itemizedlist>
4245 <listitem> <para><Command>sh</Command></para></listitem>
4246 <listitem> <para><Command>perl</Command></para></listitem>
4247 <listitem> <para><Command>cat</Command></para></listitem>
4248 </itemizedlist>
4249 All these come in Cygwin's <Filename>bin</Filename> directory, which you probably have
4250 installed as <Filename>c:/cygwin/bin</Filename>.  By default Cygwin mounts "<Filename>/</Filename>" as
4251 <Filename>c:/cygwin</Filename>, so if you just take the defaults it'll all work ok.
4252 (You can discover where your Cygwin
4253 root directory <Filename>/</Filename> is by typing <Command>mount</Command>).
4254 Provided <Filename>/bin</Filename> points to the Cygwin <Filename>bin</Filename>
4255 directory, there's no need to copy anything.
4256 </para>
4257 </listitem>
4258
4259 <listitem>
4260 <para>
4261 By default, cygwin provides the command shell <filename>ash</filename>
4262 as <filename>sh.exe</filename>. It has a couple of 'issues' (to do with quoting
4263 and length of command lines), so
4264 in your <filename>/bin</filename> directory, make sure that <filename>
4265 bash.exe</filename> is also provided as <filename>sh.exe</filename>
4266 (i.e. overwrite the old <filename>sh.exe</filename> with a copy of
4267 <filename>bash.exe</filename>).
4268 </para>
4269 </listitem>
4270 </itemizedlist>
4271 </para>
4272
4273 <para>Finally, here are some things to be aware of when using Cygwin:
4274 <itemizedlist>
4275 <listitem> <para>Cygwin doesn't deal well with filenames that include
4276 spaces. "<filename>Program Files</filename>" and "<filename>Local files</filename>" are
4277 common gotchas.
4278 </para></listitem>
4279
4280 <listitem> <para> Cygwin implements a symbolic link as a text file with some
4281 magical text in it.  So other programs that don't use Cygwin's
4282 I/O libraries won't recognise such files as symlinks.  
4283 In particular, programs compiled by GHC are meant to be runnable
4284 without having Cygwin, so they don't use the Cygwin library, so
4285 they don't recognise symlinks.
4286 </para></listitem>
4287
4288 <listitem> <para>
4289 Win32 has a <command>find</command> command which is not the same as Cygwin's find.
4290 You will probably discover that the Win32 <command>find</command> appears in your <constant>PATH</constant>
4291 before the Cygwin one, because it's in the <emphasis>system</emphasis> <constant>PATH</constant> 
4292 environment variable, whereas you have probably modified the <emphasis>user</emphasis> <constant>PATH</constant> 
4293 variable.  You can always invoke <command>find</command> with an absolute path, or rename it.
4294 </para></listitem>
4295 </itemizedlist>
4296 </para>
4297
4298 </Sect2>
4299
4300 <Sect2><Title>Other things you need to install</Title>
4301
4302 <para>You have to install the following other things to build GHC:
4303 <itemizedlist>
4304 <listitem>
4305 <para>
4306 Install an executable GHC, from <ulink url="http://www.haskell.org/ghc">http://www.haskell.org/ghc</ulink>.
4307 This is what you will use to compile GHC.  Add it in your
4308 <constant>PATH</constant>: the installer tells you the path element
4309 you need to add upon completion.
4310 </para>
4311 </listitem>
4312
4313 <listitem>
4314 <para>
4315 Install an executable Happy, from <ulink url="http://www.haskell.org/happy">http://www.haskell.org/happy</ulink>.
4316 Happy is a parser generator used to compile the Haskell grammar.  Add it in your
4317 <constant>PATH</constant>.
4318 </para>
4319 </listitem>
4320
4321
4322 <listitem>
4323 <para>GHC uses the <emphasis>mingw</emphasis> C compiler to
4324 generate code, so you have to install that. Just pick up a mingw bundle at
4325 <ulink url="http://www.mingw.org/">http://www.mingw.org/</ulink>.
4326 We install it in <filename>c:/mingw</filename>.
4327 </para>
4328 <para>Do <emphasis>not</emphasis> add any of the <emphasis>mingw</emphasis> binaries to your  path.
4329 They are only going to get used by explicit access (via the --with-gcc flag you
4330 give to <Command>configure</Command> later).  If you do add them to your path
4331 you are likely to get into a mess because their names overlap with Cygwin binaries.
4332 </para>
4333 </listitem>
4334
4335
4336 <listitem>
4337 <para> Finally, check out a copy of GHC sources from
4338 the CVS repository, following the instructions above (<xref linkend="cvs-access">).
4339 </para>
4340 </listitem>
4341 </itemizedlist>
4342 </para>
4343 </sect2>
4344
4345 <Sect2><Title>Building GHC</Title>
4346
4347 <para>OK!  
4348 Now go read the documentation above on building from source (<xref linkend="sec-building-from-source">); 
4349 the bullets below only tell
4350 you about Windows-specific wrinkles.</para>
4351 <ItemizedList>
4352 <listitem>
4353 <para>
4354 Run <Command>autoconf</Command> both in <filename>fptools</filename>
4355 and in <filename>fptools/ghc</filename>.  If you omit the latter step you'll
4356 get an error when you run <filename>./configure</filename>:
4357 <Screen>
4358 ...lots of stuff...
4359 creating mk/config.h
4360 mk/config.h is unchanged
4361 configuring in ghc
4362 running /bin/sh ./configure  --cache-file=.././config.cache --srcdir=.
4363 ./configure: ./configure: No such file or directory
4364 configure: error: ./configure failed for ghc
4365 </Screen>
4366 </para>
4367 </listitem>
4368
4369 <listitem> <para><command>autoconf</command> seems to create the file <filename>configure</filename>
4370 read-only.  So if you need to run autoconf again (which I sometimes do for safety's sake),
4371 you get
4372 <screen>
4373 /usr/bin/autoconf: cannot create configure: permission denied
4374 </screen>
4375 Solution: delete <filename>configure</filename> first.
4376 </para></listitem>
4377
4378 <listitem>
4379 <para>
4380 You either need to add <filename>ghc</filename> to your
4381 <constant>PATH</constant> before you invoke
4382 <Command>configure</Command>, or use the <Command>configure</Command>
4383 option <option>--with-ghc=c:/ghc/ghc-some-version/bin/ghc</option>.
4384 </para>
4385 </listitem>
4386
4387 <listitem><para>
4388 If you are paranoid, delete <filename>config.cache</filename> if it exists.
4389 This file occasionally remembers out-of-date configuration information, which 
4390 can be really confusing.
4391 </para>
4392 </listitem>
4393
4394 <listitem>
4395   <para> 
4396     After <command>autoconf</command> run <command>./configure</command> in
4397     <filename>fptools/</filename> thus:
4398
4399 <Screen>
4400   ./configure --host=i386-unknown-mingw32 --with-gcc=c:/mingw/bin/gcc
4401 </Screen>
4402 This is the point at which you specify that you are building GHC-mingw
4403 (see <xref linkend="ghc-mingw">). </para>
4404
4405 <para> Both these options are important! It's possible to get into
4406 trouble using the wrong C compiler!
4407 Furthermore, it's very important that you specify a 
4408 full mingw path for <command>gcc</command>, not a cygwin path, because GHC (which
4409 uses this path to invoke <command>gcc</command>) is a Mingw program and won't
4410 understand a cygwin path..  For example, if you 
4411 say <literal>--with-gcc=/mingw/bin/gcc</literal>, it'll be interpreted as
4412 <filename>/cygdrive/c/mingw/bin/gcc</filename>, and GHC will fail the first
4413 time it tries to invoke it.   (Worse, the failure does not come with
4414 a helpful error message, unfortunately.)
4415 </para>
4416
4417 <para>
4418 If you want to build GHC-cygwin (<xref linkend="ghc-cygwin">)
4419 you'll have to do something more like:
4420 <Screen>
4421   ./configure --with-gcc=...the Cygwin gcc...
4422 </Screen>
4423 </para>
4424 </listitem>
4425
4426 <listitem><para> Do not attempt to build the documentation.
4427 It needs all kinds of wierd Jade stuff that we haven't worked out for
4428 Win32.</para></listitem>
4429 </ItemizedList>
4430 </Sect2>
4431
4432
4433 </sect1>
4434
4435 </Article>