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