[project @ 2003-09-03 13:16:37 by simonmar]
[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> installed, you need to check it out
438           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>GHC currently works unregisterised.  A registerised
1084             port is in progress.</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>Autoconf</term>
1266         <indexterm><primary>pre-supposed: Autoconf</primary></indexterm>
1267         <indexterm><primary>Autoconf, pre-supposed</primary></indexterm>
1268         <listitem>
1269           <para>GNU Autoconf is needed if you intend to build from the
1270           CVS sources, it is <emphasis>not</emphasis> needed if you
1271           just intend to build a standard source distribution.</para>
1272
1273           <para>Version 2.52 or later of autoconf is required.
1274           NB. vesrion 2.13 will no longer work, as of GHC version
1275           6.1.</para>
1276
1277           <para>Autoconf builds the <command>configure</command>
1278           script from <filename>configure.ac</filename> and
1279           <filename>aclocal.m4</filename>.  If you modify either of
1280           these files, you'll need <command>autoconf</command> to
1281           rebuild <filename>configure</filename>.</para>
1282         </listitem>
1283       </varlistentry>
1284
1285       <varlistentry>
1286         <term><command>sed</command></term>
1287         <indexterm><primary>pre-supposed: sed</primary></indexterm>
1288         <indexterm><primary>sed, pre-supposed</primary></indexterm>
1289         <listitem>
1290           <para>You need a working <command>sed</command> if you are
1291           going to build from sources.  The build-configuration stuff
1292           needs it.  GNU sed version 2.0.4 is no good!  It has a bug
1293           in it that is tickled by the build-configuration.  2.0.5 is
1294           OK. Others are probably OK too (assuming we don't create too
1295           elaborate configure scripts.)</para>
1296         </listitem>
1297       </varlistentry>
1298     </variablelist>
1299
1300     <para>One <literal>fptools</literal> project is worth a quick note
1301     at this point, because it is useful for all the others:
1302     <literal>glafp-utils</literal> contains several utilities which
1303     aren't particularly Glasgow-ish, but Occasionally Indispensable.
1304     Like <command>lndir</command> for creating symbolic link
1305     trees.</para>
1306
1307     <sect2 id="pre-supposed-gph-tools">
1308       <title>Tools for building parallel GHC (GPH)</title>
1309
1310       <variablelist>
1311         <varlistentry>
1312           <term>PVM version 3:</term>
1313           <indexterm><primary>pre-supposed: PVM3 (Parallel Virtual Machine)</primary></indexterm>
1314           <indexterm><primary>PVM3 (Parallel Virtual Machine), pre-supposed</primary></indexterm>
1315           <listitem>
1316             <para>PVM is the Parallel Virtual Machine on which
1317             Parallel Haskell programs run.  (You only need this if you
1318             plan to run Parallel Haskell.  Concurrent Haskell, which
1319             runs concurrent threads on a uniprocessor doesn't need
1320             it.)  Underneath PVM, you can have (for example) a network
1321             of workstations (slow) or a multiprocessor box
1322             (faster).</para>
1323
1324             <para>The current version of PVM is 3.3.11; we use 3.3.7.
1325             It is readily available on the net; I think I got it from
1326             <literal>research.att.com</literal>, in
1327             <filename>netlib</filename>.</para>
1328
1329             <para>A PVM installation is slightly quirky, but easy to
1330             do.  Just follow the <filename>Readme</filename>
1331             instructions.</para>
1332           </listitem>
1333         </varlistentry>
1334
1335         <varlistentry>
1336           <term><command>bash</command>:</term>
1337           <indexterm><primary>bash, presupposed (Parallel Haskell only)</primary></indexterm>
1338           <listitem>
1339             <para>Sadly, the <command>gr2ps</command> script, used to
1340             convert &ldquo;parallelism profiles&rdquo; to PostScript,
1341             is written in Bash (GNU's Bourne Again shell).  This bug
1342             will be fixed (someday).</para>
1343           </listitem>
1344         </varlistentry>
1345       </variablelist>
1346     </sect2>
1347
1348     <sect2 id="pre-supposed-other-tools">
1349       <title>Other useful tools</title>
1350
1351       <variablelist>
1352         <varlistentry>
1353           <term>Flex</term>
1354           <indexterm><primary>pre-supposed: flex</primary></indexterm> 
1355           <indexterm><primary>flex, pre-supposed</primary></indexterm>
1356           <listitem>
1357             <para>This is a quite-a-bit-better-than-Lex lexer.  Used
1358             to build a couple of utilities in
1359             <literal>glafp-utils</literal>.  Depending on your
1360             operating system, the supplied <command>lex</command> may
1361             or may not work; you should get the GNU version.</para>
1362           </listitem>
1363         </varlistentry>
1364       </variablelist>
1365
1366       <para>More tools are required if you want to format the documentation
1367       that comes with GHC and other fptools projects.  See <xref
1368       linkend="building-docs">.</para>
1369     </sect2>
1370   </sect1>
1371
1372   <sect1 id="sec-building-from-source">
1373     <title>Building from source</title>
1374
1375     <indexterm><primary>Building from source</primary></indexterm>
1376     <indexterm><primary>Source, building from</primary></indexterm>
1377
1378     <para>You've been rash enough to want to build some of the Glasgow
1379     Functional Programming tools (GHC, Happy, nofib, etc.) from
1380     source.  You've slurped the source, from the CVS repository or
1381     from a source distribution, and now you're sitting looking at a
1382     huge mound of bits, wondering what to do next.</para>
1383
1384     <para>Gingerly, you type <command>make</command>.  Wrong
1385     already!</para>
1386
1387     <para>This rest of this guide is intended for duffers like me, who
1388     aren't really interested in Makefiles and systems configurations,
1389     but who need a mental model of the interlocking pieces so that
1390     they can make them work, extend them consistently when adding new
1391     software, and lay hands on them gently when they don't
1392     work.</para>
1393
1394     <sect2 id="quick-start">
1395       <title>Quick Start</title>
1396
1397       <para>If you are starting from a source distribution, and just
1398       want a completely standard build, then the following should
1399       work:</para>
1400
1401 <screen>$ ./configure
1402 $ make
1403 $ make install
1404 </screen>
1405
1406       <para>For GHC, this will do a 2-stage bootstrap build of the
1407       compiler, with profiling libraries, and install the
1408       results.</para>
1409
1410       <para>If you want to do anything at all non-standard, or you
1411       want to do some development, read on...</para>
1412     </sect2>
1413
1414     <sect2 id="sec-source-tree">
1415       <title>Your source tree</title>
1416
1417       <para>The source code is held in your <emphasis>source
1418       tree</emphasis>.  The root directory of your source tree
1419       <emphasis>must</emphasis> contain the following directories and
1420       files:</para>
1421
1422       <itemizedlist>
1423         <listitem>
1424           <para><filename>Makefile</filename>: the root
1425           Makefile.</para>
1426         </listitem>
1427
1428         <listitem>
1429           <para><filename>mk/</filename>: the directory that contains
1430           the main Makefile code, shared by all the
1431           <literal>fptools</literal> software.</para>
1432         </listitem>
1433
1434         <listitem>
1435           <para><filename>configure.ac</filename>,
1436           <filename>config.sub</filename>,
1437           <filename>config.guess</filename>: these files support the
1438           configuration process.</para>
1439         </listitem>
1440
1441         <listitem>
1442           <para><filename>install-sh</filename>.</para>
1443         </listitem>
1444       </itemizedlist>
1445
1446       <para>All the other directories are individual
1447       <emphasis>projects</emphasis> of the <literal>fptools</literal>
1448       system&mdash;for example, the Glasgow Haskell Compiler
1449       (<literal>ghc</literal>), the Happy parser generator
1450       (<literal>happy</literal>), the <literal>nofib</literal>
1451       benchmark suite, and so on.  You can have zero or more of these.
1452       Needless to say, some of them are needed to build others.</para>
1453
1454       <para>The important thing to remember is that even if you want
1455       only one project (<literal>happy</literal>, say), you must have
1456       a source tree whose root directory contains
1457       <filename>Makefile</filename>, <filename>mk/</filename>,
1458       <filename>configure.ac</filename>, and the project(s) you want
1459       (<filename>happy/</filename> in this case).  You cannot get by
1460       with just the <filename>happy/</filename> directory.</para>
1461     </sect2>
1462
1463     <sect2>
1464       <title>Build trees</title>
1465       <indexterm><primary>build trees</primary></indexterm>
1466       <indexterm><primary>link trees, for building</primary></indexterm>
1467
1468       <para>If you just want to build the software once on a single
1469       platform, then your source tree can also be your build tree, and
1470       you can skip the rest of this section.</para>
1471
1472       <para>We often want to build multiple versions of our software
1473       for different architectures, or with different options
1474       (e.g. profiling).  It's very desirable to share a single copy of
1475       the source code among all these builds.</para>
1476
1477       <para>So for every source tree we have zero or more
1478       <emphasis>build trees</emphasis>.  Each build tree is initially
1479       an exact copy of the source tree, except that each file is a
1480       symbolic link to the source file, rather than being a copy of
1481       the source file.  There are &ldquo;standard&rdquo; Unix
1482       utilities that make such copies, so standard that they go by
1483       different names:
1484       <command>lndir</command><indexterm><primary>lndir</primary></indexterm>,
1485       <command>mkshadowdir</command><indexterm><primary>mkshadowdir</primary></indexterm>
1486       are two (If you don't have either, the source distribution
1487       includes sources for the X11
1488       <command>lndir</command>&mdash;check out
1489       <filename>fptools/glafp-utils/lndir</filename>). See <Xref
1490       LinkEnd="sec-storysofar"> for a typical invocation.</para>
1491
1492       <para>The build tree does not need to be anywhere near the
1493       source tree in the file system.  Indeed, one advantage of
1494       separating the build tree from the source is that the build tree
1495       can be placed in a non-backed-up partition, saving your systems
1496       support people from backing up untold megabytes of
1497       easily-regenerated, and rapidly-changing, gubbins.  The golden
1498       rule is that (with a single exception&mdash;<XRef
1499       LinkEnd="sec-build-config">) <emphasis>absolutely everything in
1500       the build tree is either a symbolic link to the source tree, or
1501       else is mechanically generated</emphasis>.  It should be
1502       perfectly OK for your build tree to vanish overnight; an hour or
1503       two compiling and you're on the road again.</para>
1504
1505       <para>You need to be a bit careful, though, that any new files
1506       you create (if you do any development work) are in the source
1507       tree, not a build tree!</para>
1508
1509       <para>Remember, that the source files in the build tree are
1510       <emphasis>symbolic links</emphasis> to the files in the source
1511       tree.  (The build tree soon accumulates lots of built files like
1512       <filename>Foo.o</filename>, as well.)  You can
1513       <emphasis>delete</emphasis> a source file from the build tree
1514       without affecting the source tree (though it's an odd thing to
1515       do).  On the other hand, if you <emphasis>edit</emphasis> a
1516       source file from the build tree, you'll edit the source-tree
1517       file directly.  (You can set up Emacs so that if you edit a
1518       source file from the build tree, Emacs will silently create an
1519       edited copy of the source file in the build tree, leaving the
1520       source file unchanged; but the danger is that you think you've
1521       edited the source file whereas actually all you've done is edit
1522       the build-tree copy.  More commonly you do want to edit the
1523       source file.)</para>
1524
1525       <para>Like the source tree, the top level of your build tree
1526       must be (a linked copy of) the root directory of the
1527       <literal>fptools</literal> suite.  Inside Makefiles, the root of
1528       your build tree is called
1529       <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant><indexterm><primary>FPTOOLS&lowbar;TOP</primary></indexterm>.
1530       In the rest of this document path names are relative to
1531       <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant> unless
1532       otherwise stated.  For example, the file
1533       <filename>ghc/mk/target.mk</filename> is actually
1534       <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/ghc/mk/target.mk</filename>.</para>
1535     </sect2>
1536
1537     <sect2 id="sec-build-config">
1538       <title>Getting the build you want</title>
1539
1540       <para>When you build <literal>fptools</literal> you will be
1541       compiling code on a particular <emphasis>host
1542       platform</emphasis>, to run on a particular <emphasis>target
1543       platform</emphasis> (usually the same as the host
1544       platform)<indexterm><primary>platform</primary></indexterm>.
1545       The difficulty is that there are minor differences between
1546       different platforms; minor, but enough that the code needs to be
1547       a bit different for each.  There are some big differences too:
1548       for a different architecture we need to build GHC with a
1549       different native-code generator.</para>
1550
1551       <para>There are also knobs you can turn to control how the
1552       <literal>fptools</literal> software is built.  For example, you
1553       might want to build GHC optimised (so that it runs fast) or
1554       unoptimised (so that you can compile it fast after you've
1555       modified it.  Or, you might want to compile it with debugging on
1556       (so that extra consistency-checking code gets included) or off.
1557       And so on.</para>
1558
1559       <para>All of this stuff is called the
1560       <emphasis>configuration</emphasis> of your build.  You set the
1561       configuration using a three-step process.</para>
1562
1563       <variablelist>
1564         <varlistentry>
1565           <term>Step 1: get ready for configuration.</term>
1566           <listitem>
1567             <para>NOTE: if you're starting from a source distribution,
1568             rather than CVS sources, you can skip this step.</para>
1569
1570             <para>Change directory to
1571             <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant> and
1572             issue the command
1573             <command>autoconf</command><indexterm><primary>autoconf</primary></indexterm>
1574             (with no arguments). This GNU program converts
1575             <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/configure.ac</filename>
1576             to a shell script called
1577             <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/configure</filename>.
1578             </para>
1579
1580             <para>Some projects, including GHC, have their own
1581             configure script.  If there's an
1582             <constant>&dollar;(FPTOOLS&lowbar;TOP)/&lt;project&gt;/configure.ac</constant>,
1583             then you need to run <command>autoconf</command> in that
1584             directory too.</para>
1585
1586             <para>Both these steps are completely
1587             platform-independent; they just mean that the
1588             human-written file (<filename>configure.ac</filename>) can
1589             be short, although the resulting shell script,
1590             <command>configure</command>, and
1591             <filename>mk/config.h.in</filename>, are long.</para>
1592           </listitem>
1593         </varlistentry>
1594
1595         <varlistentry>
1596           <term>Step 2: system configuration.</term>
1597           <listitem>
1598             <para>Runs the newly-created <command>configure</command>
1599             script, thus:</para>
1600
1601 <ProgramListing>
1602 ./configure <optional><parameter>args</parameter></optional>
1603 </ProgramListing>
1604
1605             <para><command>configure</command>'s mission is to scurry
1606             round your computer working out what architecture it has,
1607             what operating system, whether it has the
1608             <Function>vfork</Function> system call, where
1609             <command>tar</command> is kept, whether
1610             <command>gcc</command> is available, where various obscure
1611             <literal>&num;include</literal> files are, whether it's a
1612             leap year, and what the systems manager had for lunch.  It
1613             communicates these snippets of information in two
1614             ways:</para>
1615
1616             <itemizedlist>
1617               <listitem>
1618                 
1619                 <para>It translates
1620                 <filename>mk/config.mk.in</filename><indexterm><primary>config.mk.in</primary></indexterm>
1621                 to
1622                 <filename>mk/config.mk</filename><indexterm><primary>config.mk</primary></indexterm>,
1623                 substituting for things between
1624                 &ldquo;<literal>@</literal>&rdquo; brackets.  So,
1625                 &ldquo;<literal>@HaveGcc@</literal>&rdquo; will be
1626                 replaced by &ldquo;<literal>YES</literal>&rdquo; or
1627                 &ldquo;<literal>NO</literal>&rdquo; depending on what
1628                 <command>configure</command> finds.
1629                 <filename>mk/config.mk</filename> is included by every
1630                 Makefile (directly or indirectly), so the
1631                 configuration information is thereby communicated to
1632                 all Makefiles.</para>
1633                 </listitem>
1634
1635               <listitem>
1636                 <para> It translates
1637                 <filename>mk/config.h.in</filename><indexterm><primary>config.h.in</primary></indexterm>
1638                 to
1639                 <filename>mk/config.h</filename><indexterm><primary>config.h</primary></indexterm>.
1640                 The latter is <literal>&num;include</literal>d by
1641                 various C programs, which can thereby make use of
1642                 configuration information.</para>
1643               </listitem>
1644             </itemizedlist>
1645
1646             <para><command>configure</command> takes some optional
1647             arguments.  Use <literal>./configure --help</literal> to
1648             get a list of the available arguments.  Here are some of
1649             the ones you might need:</para>
1650
1651             <variablelist>
1652               <varlistentry>
1653                 <term><literal>--with-ghc=<parameter>path</parameter></literal></term>
1654                 <indexterm><primary><literal>--with-ghc</literal></primary>
1655                 </indexterm>
1656                 <listitem>
1657                   <para>Specifies the path to an installed GHC which
1658                   you would like to use.  This compiler will be used
1659                   for compiling GHC-specific code (eg. GHC itself).
1660                   This option <emphasis>cannot</emphasis> be specified
1661                   using <filename>build.mk</filename> (see later),
1662                   because <command>configure</command> needs to
1663                   auto-detect the version of GHC you're using.  The
1664                   default is to look for a compiler named
1665                   <literal>ghc</literal> in your path.</para>
1666                 </listitem>
1667               </varlistentry>
1668               
1669               <varlistentry>
1670                 <term><literal>--with-hc=<parameter>path</parameter></literal></term>
1671                 <indexterm><primary><literal>--with-hc</literal></primary>
1672                 </indexterm>
1673                 <listitem>
1674                   <para>Specifies the path to any installed Haskell
1675                   compiler.  This compiler will be used for compiling
1676                   generic Haskell code.  The default is to use
1677                   <literal>ghc</literal>.</para>
1678                 </listitem>
1679               </varlistentry>
1680               
1681               <varlistentry>
1682                 <term><literal>--with-gcc=<parameter>path</parameter></literal></term>
1683                 <indexterm><primary><literal>--with-gcc</literal></primary>
1684                 </indexterm>
1685                 <listitem>
1686                   <para>Specifies the path to the installed GCC. This
1687                   compiler will be used to compile all C files,
1688                   <emphasis>except</emphasis> any generated by the
1689                   installed Haskell compiler, which will have its own
1690                   idea of which C compiler (if any) to use.  The
1691                   default is to use <literal>gcc</literal>.</para>
1692                 </listitem>
1693               </varlistentry>
1694             </variablelist>
1695             
1696             <para><command>configure</command> caches the results of
1697             its run in <filename>config.cache</filename>.  Quite often
1698             you don't want that; you're running
1699             <command>configure</command> a second time because
1700             something has changed.  In that case, simply delete
1701             <filename>config.cache</filename>.</para>
1702           </listitem>
1703         </varlistentry>
1704         
1705         <varlistentry>
1706           <term>Step 3: build configuration.</term>
1707           <listitem>
1708             <para>Next, you say how this build of
1709             <literal>fptools</literal> is to differ from the standard
1710             defaults by creating a new file
1711             <filename>mk/build.mk</filename><indexterm><primary>build.mk</primary></indexterm>
1712             <emphasis>in the build tree</emphasis>.  This file is the
1713             one and only file you edit in the build tree, precisely
1714             because it says how this build differs from the source.
1715             (Just in case your build tree does die, you might want to
1716             keep a private directory of <filename>build.mk</filename>
1717             files, and use a symbolic link in each build tree to point
1718             to the appropriate one.)  So
1719             <filename>mk/build.mk</filename> never exists in the
1720             source tree&mdash;you create one in each build tree from
1721             the template.  We'll discuss what to put in it
1722             shortly.</para>
1723           </listitem>
1724         </varlistentry>
1725       </variablelist>
1726
1727       <para>And that's it for configuration. Simple, eh?</para>
1728
1729       <para>What do you put in your build-specific configuration file
1730       <filename>mk/build.mk</filename>?  <emphasis>For almost all
1731       purposes all you will do is put make variable definitions that
1732       override those in</emphasis>
1733       <filename>mk/config.mk.in</filename>.  The whole point of
1734       <filename>mk/config.mk.in</filename>&mdash;and its derived
1735       counterpart <filename>mk/config.mk</filename>&mdash;is to define
1736       the build configuration. It is heavily commented, as you will
1737       see if you look at it.  So generally, what you do is look at
1738       <filename>mk/config.mk.in</filename>, and add definitions in
1739       <filename>mk/build.mk</filename> that override any of the
1740       <filename>config.mk</filename> definitions that you want to
1741       change.  (The override occurs because the main boilerplate file,
1742       <filename>mk/boilerplate.mk</filename><indexterm><primary>boilerplate.mk</primary></indexterm>,
1743       includes <filename>build.mk</filename> after
1744       <filename>config.mk</filename>.)</para>
1745
1746      <para>For your convenience, there's a file called <filename>build.mk.sample</filename>
1747      that can serve as a starting point for your <filename>build.mk</filename>.</para>
1748
1749       <para>For example, <filename>config.mk.in</filename> contains
1750       the definition:</para>
1751
1752 <ProgramListing>
1753 GhcHcOpts=-O -Rghc-timing
1754 </ProgramListing>
1755
1756       <para>The accompanying comment explains that this is the list of
1757       flags passed to GHC when building GHC itself.  For doing
1758       development, it is wise to add <literal>-DDEBUG</literal>, to
1759       enable debugging code.  So you would add the following to
1760       <filename>build.mk</filename>:</para>
1761       
1762       <para>or, if you prefer,</para>
1763
1764 <ProgramListing>
1765 GhcHcOpts += -DDEBUG
1766 </ProgramListing>
1767
1768       <para>GNU <command>make</command> allows existing definitions to
1769       have new text appended using the &ldquo;<literal>+=</literal>&rdquo;
1770       operator, which is quite a convenient feature.)</para>
1771
1772       <para>If you want to remove the <literal>-O</literal> as well (a
1773       good idea when developing, because the turn-around cycle gets a
1774       lot quicker), you can just override
1775       <literal>GhcLibHcOpts</literal> altogether:</para>
1776
1777 <ProgramListing>
1778 GhcHcOpts=-DDEBUG -Rghc-timing
1779 </ProgramListing>
1780
1781       <para>When reading <filename>config.mk.in</filename>, remember
1782       that anything between &ldquo;@...@&rdquo; signs is going to be substituted
1783       by <command>configure</command> later.  You
1784       <emphasis>can</emphasis> override the resulting definition if
1785       you want, but you need to be a bit surer what you are doing.
1786       For example, there's a line that says:</para>
1787
1788 <ProgramListing>
1789 TAR = @TarCmd@
1790 </ProgramListing>
1791
1792       <para>This defines the Make variables <constant>TAR</constant>
1793       to the pathname for a <command>tar</command> that
1794       <command>configure</command> finds somewhere.  If you have your
1795       own pet <command>tar</command> you want to use instead, that's
1796       fine. Just add this line to <filename>mk/build.mk</filename>:</para>
1797
1798 <ProgramListing>
1799 TAR = mytar
1800 </ProgramListing>
1801
1802       <para>You do not <emphasis>have</emphasis> to have a
1803       <filename>mk/build.mk</filename> file at all; if you don't,
1804       you'll get all the default settings from
1805       <filename>mk/config.mk.in</filename>.</para>
1806
1807       <para>You can also use <filename>build.mk</filename> to override
1808       anything that <command>configure</command> got wrong.  One place
1809       where this happens often is with the definition of
1810       <constant>FPTOOLS&lowbar;TOP&lowbar;ABS</constant>: this
1811       variable is supposed to be the canonical path to the top of your
1812       source tree, but if your system uses an automounter then the
1813       correct directory is hard to find automatically.  If you find
1814       that <command>configure</command> has got it wrong, just put the
1815       correct definition in <filename>build.mk</filename>.</para>
1816
1817     </sect2>
1818
1819     <sect2 id="sec-storysofar">
1820       <title>The story so far</title>
1821
1822       <para>Let's summarise the steps you need to carry to get
1823       yourself a fully-configured build tree from scratch.</para>
1824
1825       <orderedlist>
1826         <listitem>
1827           <para> Get your source tree from somewhere (CVS repository
1828           or source distribution).  Say you call the root directory
1829           <filename>myfptools</filename> (it does not have to be
1830           called <filename>fptools</filename>).  Make sure that you
1831           have the essential files (see <XRef
1832           LinkEnd="sec-source-tree">).</para>
1833         </listitem>
1834
1835         <listitem>
1836
1837           <para>(Optional) Use <command>lndir</command> or
1838           <command>mkshadowdir</command> to create a build tree.</para>
1839
1840 <programlisting>
1841 $ cd myfptools
1842 $ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4
1843 </programlisting>
1844
1845           <para>(N.B. <command>mkshadowdir</command>'s first argument
1846           is taken relative to its second.) You probably want to give
1847           the build tree a name that suggests its main defining
1848           characteristic (in your mind at least), in case you later
1849           add others.</para>
1850         </listitem>
1851
1852         <listitem>
1853           <para>Change directory to the build tree.  Everything is
1854           going to happen there now.</para>
1855
1856 <programlisting>
1857 $ cd /scratch/joe-bloggs/myfptools-sun4
1858 </programlisting>
1859
1860         </listitem>
1861
1862         <listitem>
1863           <para>Prepare for system configuration:</para>
1864
1865 <programlisting>
1866 $ autoconf
1867 </programlisting>
1868
1869           <para>(You can skip this step if you are starting from a
1870           source distribution, and you already have
1871           <filename>configure</filename> and
1872           <filename>mk/config.h.in</filename>.)</para>
1873
1874           <para>Some projects, including GHC itself, have their own
1875           configure scripts, so it is necessary to run autoconf again
1876           in the appropriate subdirectories. eg:</para>
1877
1878 <programlisting>
1879 $ (cd ghc; autoconf)
1880 </programlisting>
1881         </listitem>
1882
1883         <listitem>
1884           <para>Do system configuration:</para>
1885
1886 <programlisting>
1887 $ ./configure
1888 </programlisting>
1889
1890           <para>Don't forget to check whether you need to add any
1891           arguments to <literal>configure</literal>; for example, a
1892           common requirement is to specify which GHC to use with
1893           <option>--with-ghc=<replaceable>ghc</replaceable></option>.</para>
1894         </listitem>
1895
1896         <listitem>
1897           <para>Create the file <filename>mk/build.mk</filename>,
1898           adding definitions for your desired configuration
1899           options.</para>
1900
1901 <programlisting>
1902 $ emacs mk/build.mk
1903 </programlisting>
1904         </listitem>
1905       </orderedlist>
1906
1907       <para>You can make subsequent changes to
1908       <filename>mk/build.mk</filename> as often as you like.  You do
1909       not have to run any further configuration programs to make these
1910       changes take effect. In theory you should, however, say
1911       <command>gmake clean</command>, <command>gmake all</command>,
1912       because configuration option changes could affect
1913       anything&mdash;but in practice you are likely to know what's
1914       affected.</para>
1915     </sect2>
1916
1917     <sect2>
1918       <title>Making things</title>
1919
1920       <para>At this point you have made yourself a fully-configured
1921       build tree, so you are ready to start building real
1922       things.</para>
1923
1924       <para>The first thing you need to know is that <emphasis>you
1925       must use GNU <command>make</command>, usually called
1926       <command>gmake</command>, not standard Unix
1927       <command>make</command></emphasis>.  If you use standard Unix
1928       <command>make</command> you will get all sorts of error messages
1929       (but no damage) because the <literal>fptools</literal>
1930       <command>Makefiles</command> use GNU <command>make</command>'s
1931       facilities extensively.</para>
1932
1933       <para>To just build the whole thing, <command>cd</command> to
1934       the top of your <literal>fptools</literal> tree and type
1935       <command>gmake</command>.  This will prepare the tree and build
1936       the various projects in the correct order.</para>
1937     </sect2>
1938
1939     <sect2 id="sec-bootstrapping">
1940       <title>Bootstrapping GHC</title>
1941
1942       <para>GHC requires a 2-stage bootstrap in order to provide 
1943       full functionality, including GHCi.  By a 2-stage bootstrap, we
1944       mean that the compiler is built once using the installed GHC,
1945       and then again using the compiler built in the first stage.  You
1946       can also build a stage 3 compiler, but this normally isn't
1947       necessary except to verify that the stage 2 compiler is working
1948       properly.</para>
1949
1950       <para>Note that when doing a bootstrap, the stage 1 compiler
1951       must be built, followed by the runtime system and libraries, and
1952       then the stage 2 compiler.  The correct ordering is implemented
1953       by the top-level fptools <filename>Makefile</filename>, so if
1954       you want everything to work automatically it's best to start
1955       <command>make</command> from the top of the tree.  When building
1956       GHC, the top-level fptools <filename>Makefile</filename> is set
1957       up to do a 2-stage bootstrap by default (when you say
1958       <command>make</command>).  Some other targets it supports
1959       are:</para>
1960
1961       <variablelist>
1962         <varlistentry>
1963           <term>stage1</term>
1964           <listitem>
1965             <para>Build everything as normal, including the stage 1
1966             compiler.</para>
1967           </listitem>
1968         </varlistentry>
1969
1970         <varlistentry>
1971           <term>stage2</term>
1972           <listitem>
1973             <para>Build the stage 2 compiler only.</para>
1974           </listitem>
1975         </varlistentry>
1976
1977         <varlistentry>
1978           <term>stage3</term>
1979           <listitem>
1980             <para>Build the stage 3 compiler only.</para>
1981           </listitem>
1982         </varlistentry>
1983
1984         <varlistentry>
1985           <term>bootstrap</term> <term>bootstrap2</term>
1986           <listitem>
1987             <para>Build stage 1 followed by stage 2.</para>
1988           </listitem>
1989         </varlistentry>
1990
1991         <varlistentry>
1992           <term>bootstrap3</term>
1993           <listitem>
1994             <para>Build stages 1, 2 and 3.</para>
1995           </listitem>
1996         </varlistentry>
1997
1998         <varlistentry>
1999           <term>install</term>
2000           <listitem>
2001             <para>Install everything, including the compiler built in
2002             stage 2.  To override the stage, say <literal>make install
2003             stage=<replaceable>n</replaceable></literal> where
2004             <replaceable>n</replaceable> is the stage to install.</para>
2005           </listitem>
2006         </varlistentry>
2007       </variablelist>
2008
2009       <para>The top-level <filename>Makefile</filename> also arranges
2010       to do the appropriate <literal>make boot</literal> steps (see
2011       below) before actually building anything.</para>
2012
2013       <para>The <literal>stage1</literal>, <literal>stage2</literal>
2014       and <literal>stage3</literal> targets also work in the
2015       <literal>ghc/compiler</literal> directory, but don't forget that
2016       each stage requires its own <literal>make boot</literal> step:
2017       for example, you must do</para>
2018
2019       <screen>$ make boot stage=2</screen>
2020
2021       <para>before <literal>make stage2</literal> in
2022       <literal>ghc/compiler</literal>.</para>
2023     </sect2>
2024
2025     <sect2 id="sec-standard-targets">
2026       <title>Standard Targets</title>
2027       <indexterm><primary>targets, standard makefile</primary></indexterm>
2028       <indexterm><primary>makefile targets</primary></indexterm>
2029
2030       <para>In any directory you should be able to make the following:</para>
2031
2032       <variablelist>
2033         <varlistentry>
2034           <term><literal>boot</literal></term>
2035           <listitem>
2036             <para>does the one-off preparation required to get ready
2037             for the real work.  Notably, it does <command>gmake
2038             depend</command> in all directories that contain programs.
2039             It also builds the necessary tools for compilation to
2040             proceed.</para>
2041
2042             <para>Invoking the <literal>boot</literal> target
2043             explicitly is not normally necessary.  From the top-level
2044             <literal>fptools</literal> directory, invoking
2045             <literal>gmake</literal> causes <literal>gmake boot
2046             all</literal> to be invoked in each of the project
2047             subdirectories, in the order specified by
2048             <literal>&dollar;(AllTargets)</literal> in
2049             <literal>config.mk</literal>.</para>
2050
2051             <para>If you're working in a subdirectory somewhere and
2052             need to update the dependencies, <literal>gmake
2053             boot</literal> is a good way to do it.</para>
2054           </listitem>
2055         </varlistentry>
2056
2057         <varlistentry>
2058           <term><literal>all</literal></term>
2059           <listitem>
2060             <para>makes all the final target(s) for this Makefile.
2061             Depending on which directory you are in a &ldquo;final
2062             target&rdquo; may be an executable program, a library
2063             archive, a shell script, or a Postscript file.  Typing
2064             <command>gmake</command> alone is generally the same as
2065             typing <command>gmake all</command>.</para>
2066           </listitem>
2067         </varlistentry>
2068
2069         <varlistentry>
2070           <term><literal>install</literal></term>
2071           <listitem>
2072             <para>installs the things built by <literal>all</literal>
2073             (except for the documentation).  Where does it install
2074             them?  That is specified by
2075             <filename>mk/config.mk.in</filename>; you can override it
2076             in <filename>mk/build.mk</filename>, or by running
2077             <command>configure</command> with command-line arguments
2078             like <literal>--bindir=/home/simonpj/bin</literal>; see
2079             <literal>./configure --help</literal> for the full
2080             details.</para>
2081           </listitem>
2082         </varlistentry>
2083
2084         <varlistentry>
2085           <term><literal>install-docs</literal></term>
2086           <listitem>
2087             <para>installs the documentation. Otherwise behaves just
2088             like <literal>install</literal>.</para>
2089           </listitem>
2090         </varlistentry>
2091
2092         <varlistentry>
2093           <term><literal>uninstall</literal></term>
2094           <listitem>
2095             <para>reverses the effect of
2096             <literal>install</literal>.</para>
2097           </listitem>
2098         </varlistentry>
2099
2100         <varlistentry>
2101           <term><literal>clean</literal></term>
2102           <listitem>
2103             <para>Delete all files from the current directory that are
2104             normally created by building the program.  Don't delete
2105             the files that record the configuration, or files
2106             generated by <command>gmake boot</command>.  Also preserve
2107             files that could be made by building, but normally aren't
2108             because the distribution comes with them.</para>
2109           </listitem>
2110         </varlistentry>
2111
2112         <varlistentry>
2113           <term><literal>distclean</literal></term>
2114           <listitem>
2115             <para>Delete all files from the current directory that are
2116             created by configuring or building the program. If you
2117             have unpacked the source and built the program without
2118             creating any other files, <literal>make
2119             distclean</literal> should leave only the files that were
2120             in the distribution.</para>
2121           </listitem>
2122         </varlistentry>
2123
2124         <varlistentry>
2125           <term><literal>mostlyclean</literal></term>
2126           <listitem>
2127             <para>Like <literal>clean</literal>, but may refrain from
2128             deleting a few files that people normally don't want to
2129             recompile.</para>
2130           </listitem>
2131         </varlistentry>
2132
2133         <varlistentry>
2134           <term><literal>maintainer-clean</literal></term>
2135           <listitem>
2136             <para>Delete everything from the current directory that
2137             can be reconstructed with this Makefile.  This typically
2138             includes everything deleted by
2139             <literal>distclean</literal>, plus more: C source files
2140             produced by Bison, tags tables, Info files, and so
2141             on.</para>
2142
2143             <para>One exception, however: <literal>make
2144             maintainer-clean</literal> should not delete
2145             <filename>configure</filename> even if
2146             <filename>configure</filename> can be remade using a rule
2147             in the <filename>Makefile</filename>. More generally,
2148             <literal>make maintainer-clean</literal> should not delete
2149             anything that needs to exist in order to run
2150             <filename>configure</filename> and then begin to build the
2151             program.</para>
2152           </listitem>
2153         </varlistentry>
2154
2155         <varlistentry>
2156           <term><literal>check</literal></term>
2157           <listitem>
2158             <para>run the test suite.</para>
2159           </listitem>
2160         </varlistentry>
2161       </variablelist>
2162
2163       <para>All of these standard targets automatically recurse into
2164       sub-directories.  Certain other standard targets do not:</para>
2165
2166       <variablelist>
2167         <varlistentry>
2168           <term><literal>configure</literal></term>
2169           <listitem>
2170             <para>is only available in the root directory
2171             <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>; it has
2172             been discussed in <XRef
2173             LinkEnd="sec-build-config">.</para>
2174           </listitem>
2175         </varlistentry>
2176
2177         <varlistentry>
2178           <term><literal>depend</literal></term>
2179           <listitem>
2180             <para>make a <filename>.depend</filename> file in each
2181             directory that needs it. This <filename>.depend</filename>
2182             file contains mechanically-generated dependency
2183             information; for example, suppose a directory contains a
2184             Haskell source module <filename>Foo.lhs</filename> which
2185             imports another module <literal>Baz</literal>.  Then the
2186             generated <filename>.depend</filename> file will contain
2187             the dependency:</para>
2188
2189 <ProgramListing>
2190 Foo.o : Baz.hi
2191 </ProgramListing>
2192
2193             <para>which says that the object file
2194             <filename>Foo.o</filename> depends on the interface file
2195             <filename>Baz.hi</filename> generated by compiling module
2196             <literal>Baz</literal>.  The <filename>.depend</filename>
2197             file is automatically included by every Makefile.</para>
2198           </listitem>
2199         </varlistentry>
2200
2201         <varlistentry>
2202           <term><literal>binary-dist</literal></term>
2203           <listitem>
2204             <para>make a binary distribution.  This is the target we
2205             use to build the binary distributions of GHC and
2206             Happy.</para>
2207           </listitem>
2208         </varlistentry>
2209
2210         <varlistentry>
2211           <term><literal>dist</literal></term>
2212           <listitem>
2213             <para>make a source distribution.  Note that this target
2214             does &ldquo;make distclean&rdquo; as part of its work;
2215             don't use it if you want to keep what you've built.</para>
2216           </listitem>
2217         </varlistentry>
2218       </variablelist>
2219
2220       <para>Most <filename>Makefile</filename>s have targets other
2221       than these.  You can discover them by looking in the
2222       <filename>Makefile</filename> itself.</para>
2223     </sect2>
2224
2225     <sect2>
2226       <title>Using a project from the build tree</title> 
2227
2228       <para>If you want to build GHC (say) and just use it direct from
2229       the build tree without doing <literal>make install</literal>
2230       first, you can run the in-place driver script:
2231       <filename>ghc/compiler/ghc-inplace</filename>.</para>
2232
2233       <para> Do <emphasis>NOT</emphasis> use
2234       <filename>ghc/compiler/ghc</filename>, or
2235       <filename>ghc/compiler/ghc-6.xx</filename>, as these are the
2236       scripts intended for installation, and contain hard-wired paths
2237       to the installed libraries, rather than the libraries in the
2238       build tree.</para>
2239
2240       <para>Happy can similarly be run from the build tree, using
2241       <filename>happy/src/happy-inplace</filename>.</para>
2242     </sect2>
2243
2244     <sect2>
2245       <title>Fast Making</title>
2246
2247       <indexterm><primary>fastmake</primary></indexterm>
2248       <indexterm><primary>dependencies, omitting</primary></indexterm>
2249       <indexterm><primary>FAST, makefile variable</primary></indexterm>
2250
2251       <para>Sometimes the dependencies get in the way: if you've made
2252       a small change to one file, and you're absolutely sure that it
2253       won't affect anything else, but you know that
2254       <command>make</command> is going to rebuild everything anyway,
2255       the following hack may be useful:</para>
2256
2257 <ProgramListing>
2258 gmake FAST=YES 
2259 </ProgramListing>
2260
2261       <para>This tells the make system to ignore dependencies and just
2262       build what you tell it to.  In other words, it's equivalent to
2263       temporarily removing the <filename>.depend</filename> file in
2264       the current directory (where <command>mkdependHS</command> and
2265       friends store their dependency information).</para>
2266
2267       <para>A bit of history: GHC used to come with a
2268       <command>fastmake</command> script that did the above job, but
2269       GNU make provides the features we need to do it without
2270       resorting to a script.  Also, we've found that fastmaking is
2271       less useful since the advent of GHC's recompilation checker (see
2272       the User's Guide section on "Separate Compilation").</para>
2273     </sect2>
2274   </sect1>
2275
2276   <sect1 id="sec-makefile-arch">
2277     <title>The <filename>Makefile</filename> architecture</title>
2278     <indexterm><primary>makefile architecture</primary></indexterm>
2279
2280     <para><command>make</command> is great if everything
2281     works&mdash;you type <command>gmake install</command> and lo! the
2282     right things get compiled and installed in the right places.  Our
2283     goal is to make this happen often, but somehow it often doesn't;
2284     instead some weird error message eventually emerges from the
2285     bowels of a directory you didn't know existed.</para>
2286
2287     <para>The purpose of this section is to give you a road-map to
2288     help you figure out what is going right and what is going
2289     wrong.</para>
2290
2291     <sect2>
2292       <title>Debugging</title>
2293       
2294       <para>Debugging <filename>Makefile</filename>s is something of a
2295       black art, but here's a couple of tricks that we find
2296       particularly useful.  The following command allows you to see
2297       the contents of any make variable in the context of the current
2298       <filename>Makefile</filename>:</para>
2299
2300 <screen>$  make show VALUE=HS_SRCS</screen>
2301
2302       <para>where you can replace <literal>HS_SRCS</literal> with the
2303       name of any variable you wish to see the value of.</para>
2304       
2305       <para>GNU make has a <option>-d</option> option which generates
2306       a dump of the decision procedure used to arrive at a conclusion
2307       about which files should be recompiled.  Sometimes useful for
2308       tracking down problems with superfluous or missing
2309       recompilations.</para>
2310     </sect2>
2311
2312     <sect2>
2313       <title>A small project</title>
2314
2315       <para>To get started, let us look at the
2316       <filename>Makefile</filename> for an imaginary small
2317       <literal>fptools</literal> project, <literal>small</literal>.
2318       Each project in <literal>fptools</literal> has its own directory
2319       in <constant>FPTOOLS&lowbar;TOP</constant>, so the
2320       <literal>small</literal> project will have its own directory
2321       <constant>FPOOLS&lowbar;TOP/small/</constant>.  Inside the
2322       <filename>small/</filename> directory there will be a
2323       <filename>Makefile</filename>, looking something like
2324       this:</para>
2325
2326 <indexterm><primary>Makefile, minimal</primary></indexterm>
2327
2328 <ProgramListing>
2329 #     Makefile for fptools project "small"
2330
2331 TOP = ..
2332 include $(TOP)/mk/boilerplate.mk
2333
2334 SRCS = $(wildcard *.lhs) $(wildcard *.c)
2335 HS_PROG = small
2336
2337 include $(TOP)/target.mk
2338 </ProgramListing>
2339
2340       <para>this <filename>Makefile</filename> has three
2341       sections:</para>
2342
2343       <orderedlist>
2344         <listitem>
2345           <para>The first section includes
2346 <footnote>
2347 <para>
2348 One of the most important
2349 features of GNU <command>make</command> that we use is the ability for a <filename>Makefile</filename> to
2350 include another named file, very like <command>cpp</command>'s <literal>&num;include</literal>
2351 directive.
2352 </para>
2353 </footnote>
2354
2355           a file of &ldquo;boilerplate&rdquo; code from the level
2356           above (which in this case will be
2357           <filename><constant>FPTOOLS&lowbar;TOP</constant>/mk/boilerplate.mk</filename><indexterm><primary>boilerplate.mk</primary></indexterm>).
2358           As its name suggests, <filename>boilerplate.mk</filename>
2359           consists of a large quantity of standard
2360           <filename>Makefile</filename> code.  We discuss this
2361           boilerplate in more detail in <XRef LinkEnd="sec-boiler">.
2362           <indexterm><primary>include, directive in
2363           Makefiles</primary></indexterm> <indexterm><primary>Makefile
2364           inclusion</primary></indexterm></para>
2365
2366           <para>Before the <literal>include</literal> statement, you
2367           must define the <command>make</command> variable
2368           <constant>TOP</constant><indexterm><primary>TOP</primary></indexterm>
2369           to be the directory containing the <filename>mk</filename>
2370           directory in which the <filename>boilerplate.mk</filename>
2371           file is.  It is <emphasis>not</emphasis> OK to simply say</para>
2372
2373 <ProgramListing>
2374 include ../mk/boilerplate.mk  # NO NO NO
2375 </ProgramListing>
2376
2377
2378           <para>Why?  Because the <filename>boilerplate.mk</filename>
2379           file needs to know where it is, so that it can, in turn,
2380           <literal>include</literal> other files.  (Unfortunately,
2381           when an <literal>include</literal>d file does an
2382           <literal>include</literal>, the filename is treated relative
2383           to the directory in which <command>gmake</command> is being
2384           run, not the directory in which the
2385           <literal>include</literal>d sits.)  In general,
2386           <emphasis>every file <filename>foo.mk</filename> assumes
2387           that
2388           <filename><constant>&dollar;(TOP)</constant>/mk/foo.mk</filename>
2389           refers to itself.</emphasis> It is up to the
2390           <filename>Makefile</filename> doing the
2391           <literal>include</literal> to ensure this is the case.</para>
2392
2393           <para>Files intended for inclusion in other
2394           <filename>Makefile</filename>s are written to have the
2395           following property: <emphasis>after
2396           <filename>foo.mk</filename> is <literal>include</literal>d,
2397           it leaves <constant>TOP</constant> containing the same value
2398           as it had just before the <literal>include</literal>
2399           statement</emphasis>.  In our example, this invariant
2400           guarantees that the <literal>include</literal> for
2401           <filename>target.mk</filename> will look in the same
2402           directory as that for <filename>boilerplate.mk</filename>.</para>
2403         </listitem>
2404
2405         <listitem>
2406           <para> The second section defines the following standard
2407           <command>make</command> variables:
2408           <constant>SRCS</constant><indexterm><primary>SRCS</primary></indexterm>
2409           (the source files from which is to be built), and
2410           <constant>HS&lowbar;PROG</constant><indexterm><primary>HS&lowbar;PROG</primary></indexterm>
2411           (the executable binary to be built).  We will discuss in
2412           more detail what the &ldquo;standard variables&rdquo; are,
2413           and how they affect what happens, in <XRef
2414           LinkEnd="sec-targets">.</para>
2415
2416           <para>The definition for <constant>SRCS</constant> uses the
2417           useful GNU <command>make</command> construct
2418           <literal>&dollar;(wildcard&nbsp;$pat$)</literal><indexterm><primary>wildcard</primary></indexterm>,
2419           which expands to a list of all the files matching the
2420           pattern <literal>pat</literal> in the current directory.  In
2421           this example, <constant>SRCS</constant> is set to the list
2422           of all the <filename>.lhs</filename> and
2423           <filename>.c</filename> files in the directory.  (Let's
2424           suppose there is one of each, <filename>Foo.lhs</filename>
2425           and <filename>Baz.c</filename>.)</para>
2426         </listitem>
2427
2428         <listitem>
2429           <para>The last section includes a second file of standard
2430           code, called
2431           <filename>target.mk</filename><indexterm><primary>target.mk</primary></indexterm>.
2432           It contains the rules that tell <command>gmake</command> how
2433           to make the standard targets (<Xref
2434           LinkEnd="sec-standard-targets">).  Why, you ask, can't this
2435           standard code be part of
2436           <filename>boilerplate.mk</filename>?  Good question.  We
2437           discuss the reason later, in <Xref
2438           LinkEnd="sec-boiler-arch">.</para>
2439
2440           <para>You do not <emphasis>have</emphasis> to
2441           <literal>include</literal> the
2442           <filename>target.mk</filename> file.  Instead, you can write
2443           rules of your own for all the standard targets.  Usually,
2444           though, you will find quite a big payoff from using the
2445           canned rules in <filename>target.mk</filename>; the price
2446           tag is that you have to understand what canned rules get
2447           enabled, and what they do (<Xref
2448           LinkEnd="sec-targets">).</para>
2449         </listitem>
2450       </orderedlist>
2451
2452       <para>In our example <filename>Makefile</filename>, most of the
2453       work is done by the two <literal>include</literal>d files.  When
2454       you say <command>gmake all</command>, the following things
2455       happen:</para>
2456
2457       <itemizedlist>
2458         <listitem>
2459           <para><command>gmake</command> figures out that the object
2460           files are <filename>Foo.o</filename> and
2461           <filename>Baz.o</filename>.</para>
2462         </listitem>
2463
2464         <listitem>
2465           <para>It uses a boilerplate pattern rule to compile
2466           <filename>Foo.lhs</filename> to <filename>Foo.o</filename>
2467           using a Haskell compiler.  (Which one?  That is set in the
2468           build configuration.)</para>
2469         </listitem>
2470
2471         <listitem>
2472           <para>It uses another standard pattern rule to compile
2473           <filename>Baz.c</filename> to <filename>Baz.o</filename>,
2474           using a C compiler.  (Ditto.)</para>
2475         </listitem>
2476
2477         <listitem>
2478           <para>It links the resulting <filename>.o</filename> files
2479           together to make <literal>small</literal>, using the Haskell
2480           compiler to do the link step.  (Why not use
2481           <command>ld</command>?  Because the Haskell compiler knows
2482           what standard libraries to link in.  How did
2483           <command>gmake</command> know to use the Haskell compiler to
2484           do the link, rather than the C compiler?  Because we set the
2485           variable <constant>HS&lowbar;PROG</constant> rather than
2486           <constant>C&lowbar;PROG</constant>.)</para>
2487         </listitem>
2488       </itemizedlist>
2489
2490       <para>All <filename>Makefile</filename>s should follow the above
2491       three-section format.</para>
2492     </sect2>
2493
2494     <sect2>
2495       <title>A larger project</title>
2496
2497       <para>Larger projects are usually structured into a number of
2498       sub-directories, each of which has its own
2499       <filename>Makefile</filename>.  (In very large projects, this
2500       sub-structure might be iterated recursively, though that is
2501       rare.)  To give you the idea, here's part of the directory
2502       structure for the (rather large) GHC project:</para>
2503
2504 <Screen>
2505 $(FPTOOLS_TOP)/ghc/
2506   Makefile
2507   mk/
2508     boilerplate.mk
2509     rules.mk
2510    docs/
2511     Makefile
2512     ...source files for documentation...
2513    driver/
2514     Makefile
2515     ...source files for driver...
2516    compiler/
2517     Makefile
2518     parser/...source files for parser...
2519     renamer/...source files for renamer...
2520     ...etc...
2521 </Screen>
2522
2523       <para>The sub-directories <filename>docs</filename>,
2524       <filename>driver</filename>, <filename>compiler</filename>, and
2525       so on, each contains a sub-component of GHC, and each has its
2526       own <filename>Makefile</filename>.  There must also be a
2527       <filename>Makefile</filename> in
2528       <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/ghc</filename>.
2529       It does most of its work by recursively invoking
2530       <command>gmake</command> on the <filename>Makefile</filename>s
2531       in the sub-directories.  We say that
2532       <filename>ghc/Makefile</filename> is a <emphasis>non-leaf
2533       <filename>Makefile</filename></emphasis>, because it does little
2534       except organise its children, while the
2535       <filename>Makefile</filename>s in the sub-directories are all
2536       <emphasis>leaf <filename>Makefile</filename>s</emphasis>.  (In
2537       principle the sub-directories might themselves contain a
2538       non-leaf <filename>Makefile</filename> and several
2539       sub-sub-directories, but that does not happen in GHC.)</para>
2540
2541       <para>The <filename>Makefile</filename> in
2542       <filename>ghc/compiler</filename> is considered a leaf
2543       <filename>Makefile</filename> even though the
2544       <filename>ghc/compiler</filename> has sub-directories, because
2545       these sub-directories do not themselves have
2546       <filename>Makefile</filename>s in them.  They are just used to
2547       structure the collection of modules that make up GHC, but all
2548       are managed by the single <filename>Makefile</filename> in
2549       <filename>ghc/compiler</filename>.</para>
2550
2551       <para>You will notice that <filename>ghc/</filename> also
2552       contains a directory <filename>ghc/mk/</filename>.  It contains
2553       GHC-specific <filename>Makefile</filename> boilerplate code.
2554       More precisely:</para>
2555
2556       <itemizedlist>
2557         <listitem>
2558           <para><filename>ghc/mk/boilerplate.mk</filename> is included
2559           at the top of <filename>ghc/Makefile</filename>, and of all
2560           the leaf <filename>Makefile</filename>s in the
2561           sub-directories.  It in turn <literal>include</literal>s the
2562           main boilerplate file
2563           <filename>mk/boilerplate.mk</filename>.</para>
2564         </listitem>
2565
2566         <listitem>
2567           <para><filename>ghc/mk/target.mk</filename> is
2568           <literal>include</literal>d at the bottom of
2569           <filename>ghc/Makefile</filename>, and of all the leaf
2570           <filename>Makefile</filename>s in the sub-directories.  It
2571           in turn <literal>include</literal>s the file
2572           <filename>mk/target.mk</filename>.</para>
2573         </listitem>
2574       </itemizedlist>
2575
2576       <para>So these two files are the place to look for GHC-wide
2577       customisation of the standard boilerplate.</para>
2578     </sect2>
2579
2580     <sect2 id="sec-boiler-arch">
2581       <title>Boilerplate architecture</title>
2582       <indexterm><primary>boilerplate architecture</primary></indexterm>
2583
2584       <para>Every <filename>Makefile</filename> includes a
2585       <filename>boilerplate.mk</filename><indexterm><primary>boilerplate.mk</primary></indexterm>
2586       file at the top, and
2587       <filename>target.mk</filename><indexterm><primary>target.mk</primary></indexterm>
2588       file at the bottom.  In this section we discuss what is in these
2589       files, and why there have to be two of them.  In general:</para>
2590
2591       <itemizedlist>
2592         <listitem>
2593           <para><filename>boilerplate.mk</filename> consists of:</para>
2594
2595           <itemizedlist>
2596             <listitem>
2597               <para><emphasis>Definitions of millions of
2598               <command>make</command> variables</emphasis> that
2599               collectively specify the build configuration.  Examples:
2600               <constant>HC&lowbar;OPTS</constant><indexterm><primary>HC&lowbar;OPTS</primary></indexterm>,
2601               the options to feed to the Haskell compiler;
2602               <constant>NoFibSubDirs</constant><indexterm><primary>NoFibSubDirs</primary></indexterm>,
2603               the sub-directories to enable within the
2604               <literal>nofib</literal> project;
2605               <constant>GhcWithHc</constant><indexterm><primary>GhcWithHc</primary></indexterm>,
2606               the name of the Haskell compiler to use when compiling
2607               GHC in the <literal>ghc</literal> project.</para>
2608             </listitem>
2609
2610             <listitem>
2611               <para><emphasis>Standard pattern rules</emphasis> that
2612               tell <command>gmake</command> how to construct one file
2613               from another.</para>
2614             </listitem>
2615           </itemizedlist>
2616
2617           <para><filename>boilerplate.mk</filename> needs to be
2618           <literal>include</literal>d at the <emphasis>top</emphasis>
2619           of each <filename>Makefile</filename>, so that the user can
2620           replace the boilerplate definitions or pattern rules by
2621           simply giving a new definition or pattern rule in the
2622           <filename>Makefile</filename>.  <command>gmake</command>
2623           simply takes the last definition as the definitive one.</para>
2624
2625           <para>Instead of <emphasis>replacing</emphasis> boilerplate
2626           definitions, it is also quite common to
2627           <emphasis>augment</emphasis> them. For example, a
2628           <filename>Makefile</filename> might say:</para>
2629
2630 <ProgramListing>
2631 SRC_HC_OPTS += -O
2632 </ProgramListing>
2633
2634           <para>thereby adding &ldquo;<option>-O</option>&rdquo; to
2635           the end of
2636           <constant>SRC&lowbar;HC&lowbar;OPTS</constant><indexterm><primary>SRC&lowbar;HC&lowbar;OPTS</primary></indexterm>.</para>
2637         </listitem>
2638
2639         <listitem>
2640           <para><filename>target.mk</filename> contains
2641           <command>make</command> rules for the standard targets
2642           described in <Xref LinkEnd="sec-standard-targets">.  These
2643           rules are selectively included, depending on the setting of
2644           certain <command>make</command> variables.  These variables
2645           are usually set in the middle section of the
2646           <filename>Makefile</filename> between the two
2647           <literal>include</literal>s.</para>
2648
2649           <para><filename>target.mk</filename> must be included at the
2650           end (rather than being part of
2651           <filename>boilerplate.mk</filename>) for several tiresome
2652           reasons:</para>
2653
2654           <itemizedlist>
2655             <listitem>
2656
2657               <para><command>gmake</command> commits target and
2658               dependency lists earlier than it should.  For example,
2659               <FIlename>target.mk</FIlename> has a rule that looks
2660               like this:</para>
2661
2662 <ProgramListing>
2663 $(HS_PROG) : $(OBJS)
2664       $(HC) $(LD_OPTS) $&#60; -o $@
2665 </ProgramListing>
2666
2667               <para>If this rule was in
2668               <filename>boilerplate.mk</filename> then
2669               <constant>&dollar;(HS&lowbar;PROG)</constant><indexterm><primary>HS&lowbar;PROG</primary></indexterm>
2670               and
2671               <constant>&dollar;(OBJS)</constant><indexterm><primary>OBJS</primary></indexterm>
2672               would not have their final values at the moment
2673               <command>gmake</command> encountered the rule.  Alas,
2674               <command>gmake</command> takes a snapshot of their
2675               current values, and wires that snapshot into the rule.
2676               (In contrast, the commands executed when the rule
2677               &ldquo;fires&rdquo; are only substituted at the moment
2678               of firing.)  So, the rule must follow the definitions
2679               given in the <filename>Makefile</filename> itself.</para>
2680             </listitem>
2681
2682             <listitem>
2683               <para>Unlike pattern rules, ordinary rules cannot be
2684               overriden or replaced by subsequent rules for the same
2685               target (at least, not without an error message).
2686               Including ordinary rules in
2687               <filename>boilerplate.mk</filename> would prevent the
2688               user from writing rules for specific targets in specific
2689               cases.</para>
2690             </listitem>
2691
2692             <listitem>
2693               <para>There are a couple of other reasons I've
2694               forgotten, but it doesn't matter too much.</para>
2695             </listitem>
2696           </itemizedlist>
2697         </listitem>
2698       </itemizedlist>
2699     </sect2>
2700
2701     <sect2 id="sec-boiler">
2702       <title>The main <filename>mk/boilerplate.mk</filename> file</title>
2703       <indexterm><primary>boilerplate.mk</primary></indexterm>
2704
2705       <para>If you look at
2706       <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/mk/boilerplate.mk</filename>
2707       you will find that it consists of the following sections, each
2708       held in a separate file:</para>
2709
2710       <variablelist>
2711         <varlistentry>
2712           <term><filename>config.mk</filename></term>
2713           <indexterm><primary>config.mk</primary></indexterm>
2714           <listitem>
2715             <para>is the build configuration file we discussed at
2716             length in <Xref LinkEnd="sec-build-config">.</para>
2717           </listitem>
2718         </varlistentry>
2719
2720         <varlistentry>
2721           <term><filename>paths.mk</filename></term>
2722           <indexterm><primary>paths.mk</primary></indexterm>
2723           <listitem>
2724             <para>defines <command>make</command> variables for
2725             pathnames and file lists.  This file contains code for
2726             automatically compiling lists of source files and deriving
2727             lists of object files from those.  The results can be
2728             overriden in the <filename>Makefile</filename>, but in
2729             most cases the automatic setup should do the right
2730             thing.</para>
2731             
2732             <para>The following variables may be set in the
2733             <filename>Makefile</filename> to affect how the automatic
2734             source file search is done:</para>
2735
2736             <variablelist>
2737               <varlistentry>
2738                 <term><literal>ALL_DIRS</literal></term>
2739                 <indexterm><primary><literal>ALL_DIRS</literal></primary>
2740                 </indexterm>
2741                 <listitem>
2742                   <para>Set to a list of directories to search in
2743                   addition to the current directory for source
2744                   files.</para>
2745                 </listitem>
2746               </varlistentry>
2747
2748               <varlistentry>
2749                 <term><literal>EXCLUDE_SRCS</literal></term>
2750                 <indexterm><primary><literal>EXCLUDE_SRCS</literal></primary>
2751                 </indexterm>
2752                 <listitem>
2753                   <para>Set to a list of source files (relative to the
2754                   current directory) to omit from the automatic
2755                   search.  The source searching machinery is clever
2756                   enough to know that if you exclude a source file
2757                   from which other sources are derived, then the
2758                   derived sources should also be excluded.  For
2759                   example, if you set <literal>EXCLUDED_SRCS</literal>
2760                   to include <filename>Foo.y</filename>, then
2761                   <filename>Foo.hs</filename> will also be
2762                   excluded.</para>
2763                 </listitem>
2764               </varlistentry>
2765
2766               <varlistentry>
2767                 <term><literal>EXTRA_SRCS</literal></term>
2768                 <indexterm><primary><literal>EXCLUDE_SRCS</literal></primary>
2769                 </indexterm>
2770                   <listitem>
2771                   <para>Set to a list of extra source files (perhaps
2772                   in directories not listed in
2773                   <literal>ALL_DIRS</literal>) that should be
2774                   considered.</para>
2775                 </listitem>
2776               </varlistentry>
2777             </variablelist>
2778
2779             <para>The results of the automatic source file search are
2780             placed in the following make variables:</para>
2781
2782             <variablelist>
2783               <varlistentry>
2784                 <term><literal>SRCS</literal></term>
2785                 <indexterm><primary><literal>SRCS</literal></primary></indexterm>
2786                 <listitem>
2787                   <para>All source files found, sorted and without
2788                   duplicates, including those which might not exist
2789                   yet but will be derived from other existing sources.
2790                   <literal>SRCS</literal> <emphasis>can</emphasis> be
2791                   overriden if necessary, in which case the variables
2792                   below will follow suit.</para>
2793                 </listitem>
2794               </varlistentry>
2795
2796               <varlistentry>
2797                 <term><literal>HS_SRCS</literal></term>
2798                 <indexterm><primary><literal>HS_SRCS</literal></primary></indexterm>
2799                 <listitem>
2800                   <para>all Haskell source files in the current
2801                   directory, including those derived from other source
2802                   files (eg. Happy sources also give rise to Haskell
2803                   sources).</para>
2804                 </listitem>
2805               </varlistentry>
2806
2807               <varlistentry>
2808                 <term><literal>HS_OBJS</literal></term>
2809                 <indexterm><primary><literal>HS_OBJS</literal></primary></indexterm>
2810                 <listitem>
2811                   <para>Object files derived from
2812                   <literal>HS_SRCS</literal>.</para>
2813                 </listitem>
2814               </varlistentry>
2815
2816               <varlistentry>
2817                 <term><literal>HS_IFACES</literal></term>
2818                 <indexterm><primary><literal>HS_IFACES</literal></primary></indexterm>
2819                 <listitem>
2820                   <para>Interface files (<literal>.hi</literal> files)
2821                   derived from <literal>HS_SRCS</literal>.</para>
2822                 </listitem>
2823               </varlistentry>
2824
2825               <varlistentry>
2826                 <term><literal>C_SRCS</literal></term>
2827                 <indexterm><primary><literal>C_SRCS</literal></primary></indexterm>
2828                 <listitem>
2829                   <para>All C source files found.</para>
2830                 </listitem>
2831               </varlistentry>
2832
2833               <varlistentry>
2834                 <term><literal>C_OBJS</literal></term>
2835                 <indexterm><primary><literal>C_OBJS</literal></primary></indexterm>
2836                 <listitem>
2837                   <para>Object files derived from
2838                   <literal>C_SRCS</literal>.</para>
2839                 </listitem>
2840               </varlistentry>
2841
2842               <varlistentry>
2843                 <term><literal>SCRIPT_SRCS</literal></term>
2844                 <indexterm><primary><literal>SCRIPT_SRCS</literal></primary></indexterm>
2845                 <listitem>
2846                   <para>All script source files found
2847                   (<literal>.lprl</literal> files).</para>
2848                 </listitem>
2849               </varlistentry>
2850
2851               <varlistentry>
2852                 <term><literal>SCRIPT_OBJS</literal></term>
2853                 <indexterm><primary><literal>SCRIPT_OBJS</literal></primary></indexterm>
2854                 <listitem>
2855                   <para><quote>object</quote> files derived from
2856                   <literal>SCRIPT_SRCS</literal>
2857                   (<literal>.prl</literal> files).</para>
2858                 </listitem>
2859               </varlistentry>
2860
2861               <varlistentry>
2862                 <term><literal>HSC_SRCS</literal></term>
2863                 <indexterm><primary><literal>HSC_SRCS</literal></primary></indexterm>
2864                 <listitem>
2865                   <para>All <literal>hsc2hs</literal> source files
2866                   (<literal>.hsc</literal> files).</para>
2867                 </listitem>
2868               </varlistentry>
2869
2870               <varlistentry>
2871                 <term><literal>HAPPY_SRCS</literal></term>
2872                 <indexterm><primary><literal>HAPPY_SRCS</literal></primary></indexterm>
2873                 <listitem>
2874                   <para>All <literal>happy</literal> source files
2875                   (<literal>.y</literal> or <literal>.hy</literal> files).</para>
2876                 </listitem>
2877               </varlistentry>
2878
2879               <varlistentry>
2880                 <term><literal>OBJS</literal></term>
2881                 <indexterm><primary>OBJS</primary></indexterm>
2882                 <listitem>
2883                   <para>the concatenation of
2884                   <literal>&dollar;(HS_OBJS)</literal>,
2885                   <literal>&dollar;(C_OBJS)</literal>, and
2886                   <literal>&dollar;(SCRIPT_OBJS)</literal>.</para>
2887                 </listitem>
2888               </varlistentry>
2889             </variablelist>
2890
2891             <para>Any or all of these definitions can easily be
2892             overriden by giving new definitions in your
2893             <filename>Makefile</filename>.</para>
2894
2895             <para>What, exactly, does <filename>paths.mk</filename>
2896             consider a <quote>source file</quote> to be?  It's based
2897             on the file's suffix (e.g. <filename>.hs</filename>,
2898             <filename>.lhs</filename>, <filename>.c</filename>,
2899             <filename>.hy</filename>, etc), but this is the kind of
2900             detail that changes, so rather than enumerate the source
2901             suffices here the best thing to do is to look in
2902             <filename>paths.mk</filename>.</para>
2903           </listitem>
2904         </varlistentry>
2905
2906         <varlistentry>
2907           <term><filename>opts.mk</filename></term>
2908           <indexterm><primary>opts.mk</primary></indexterm>
2909           <listitem>
2910             <para>defines <command>make</command> variables for option
2911             strings to pass to each program. For example, it defines
2912             <constant>HC&lowbar;OPTS</constant><indexterm><primary>HC&lowbar;OPTS</primary></indexterm>,
2913             the option strings to pass to the Haskell compiler.  See
2914             <Xref LinkEnd="sec-suffix">.</para>
2915           </listitem>
2916         </varlistentry>
2917
2918         <varlistentry>
2919           <term><filename>suffix.mk</filename></term>
2920           <indexterm><primary>suffix.mk</primary></indexterm>
2921           <listitem>
2922             <para>defines standard pattern rules&mdash;see <Xref
2923             LinkEnd="sec-suffix">.</para>
2924           </listitem>
2925         </varlistentry>
2926       </variablelist>
2927
2928       <para>Any of the variables and pattern rules defined by the
2929       boilerplate file can easily be overridden in any particular
2930       <filename>Makefile</filename>, because the boilerplate
2931       <literal>include</literal> comes first.  Definitions after this
2932       <literal>include</literal> directive simply override the default
2933       ones in <filename>boilerplate.mk</filename>.</para>
2934     </sect2>
2935
2936     <sect2 id="sec-suffix">
2937       <title>Pattern rules and options</title>
2938       <indexterm><primary>Pattern rules</primary></indexterm>
2939
2940       <para>The file
2941       <filename>suffix.mk</filename><indexterm><primary>suffix.mk</primary></indexterm>
2942       defines standard <emphasis>pattern rules</emphasis> that say how
2943       to build one kind of file from another, for example, how to
2944       build a <filename>.o</filename> file from a
2945       <filename>.c</filename> file.  (GNU <command>make</command>'s
2946       <emphasis>pattern rules</emphasis> are more powerful and easier
2947       to use than Unix <command>make</command>'s <emphasis>suffix
2948       rules</emphasis>.)</para>
2949
2950       <para>Almost all the rules look something like this:</para>
2951
2952 <ProgramListing>
2953 %.o : %.c
2954       $(RM) $@
2955       $(CC) $(CC_OPTS) -c $&#60; -o $@
2956 </ProgramListing>
2957
2958       <para>Here's how to understand the rule.  It says that
2959       <emphasis>something</emphasis><filename>.o</filename> (say
2960       <filename>Foo.o</filename>) can be built from
2961       <emphasis>something</emphasis><filename>.c</filename>
2962       (<filename>Foo.c</filename>), by invoking the C compiler (path
2963       name held in <constant>&dollar;(CC)</constant>), passing to it
2964       the options <constant>&dollar;(CC&lowbar;OPTS)</constant> and
2965       the rule's dependent file of the rule
2966       <literal>&dollar;&lt;</literal> (<filename>Foo.c</filename> in
2967       this case), and putting the result in the rule's target
2968       <literal>&dollar;@</literal> (<filename>Foo.o</filename> in this
2969       case).</para>
2970
2971       <para>Every program is held in a <command>make</command>
2972       variable defined in <filename>mk/config.mk</filename>&mdash;look
2973       in <filename>mk/config.mk</filename> for the complete list.  One
2974       important one is the Haskell compiler, which is called
2975       <constant>&dollar;(HC)</constant>.</para>
2976
2977       <para>Every program's options are are held in a
2978       <command>make</command> variables called
2979       <constant>&lt;prog&gt;&lowbar;OPTS</constant>.  the
2980       <constant>&lt;prog&gt;&lowbar;OPTS</constant> variables are
2981       defined in <filename>mk/opts.mk</filename>.  Almost all of them
2982       are defined like this:</para>
2983
2984 <ProgramListing>
2985 CC_OPTS = $(SRC_CC_OPTS) $(WAY$(_way)_CC_OPTS) $($*_CC_OPTS) $(EXTRA_CC_OPTS)
2986 </ProgramListing>
2987
2988       <para>The four variables from which
2989        <constant>CC&lowbar;OPTS</constant> is built have the following
2990       meaning:</para>
2991
2992       <variablelist>
2993         <varlistentry>
2994           <term><constant>SRC&lowbar;CC&lowbar;OPTS</constant><indexterm><primary>SRC&lowbar;CC&lowbar;OPTS</primary></indexterm>:</term>
2995           <listitem>
2996             <para>options passed to all C compilations.</para>
2997           </listitem>
2998         </varlistentry>
2999
3000         <varlistentry>
3001           <term><constant>WAY&lowbar;&lt;way&gt;&lowbar;CC&lowbar;OPTS</constant>:</term>
3002           <listitem>
3003             <para>options passed to C compilations for way
3004             <literal>&lt;way&gt;</literal>. For example,
3005             <constant>WAY&lowbar;mp&lowbar;CC&lowbar;OPTS</constant>
3006             gives options to pass to the C compiler when compiling way
3007             <literal>mp</literal>.  The variable
3008             <constant>WAY&lowbar;CC&lowbar;OPTS</constant> holds
3009             options to pass to the C compiler when compiling the
3010             standard way.  (<Xref LinkEnd="sec-ways"> dicusses
3011             multi-way compilation.)</para>
3012           </listitem>
3013         </varlistentry>
3014
3015         <varlistentry>
3016           <term><constant>&lt;module&gt;&lowbar;CC&lowbar;OPTS</constant>:</term>
3017           <listitem>
3018             <para>options to pass to the C compiler that are specific
3019             to module <literal>&lt;module&gt;</literal>.  For example,
3020             <constant>SMap&lowbar;CC&lowbar;OPTS</constant> gives the
3021             specific options to pass to the C compiler when compiling
3022             <filename>SMap.c</filename>.</para>
3023           </listitem>
3024         </varlistentry>
3025
3026         <varlistentry>
3027           <term><constant>EXTRA&lowbar;CC&lowbar;OPTS</constant><indexterm><primary>EXTRA&lowbar;CC&lowbar;OPTS</primary></indexterm>:</term>
3028           <listitem>
3029             <para>extra options to pass to all C compilations.  This
3030             is intended for command line use, thus:</para>
3031
3032 <ProgramListing>
3033 gmake libHS.a EXTRA_CC_OPTS="-v"
3034 </ProgramListing>
3035           </listitem>
3036         </varlistentry>
3037       </variablelist>
3038     </sect2>
3039
3040     <sect2 id="sec-targets">
3041       <title>The main <filename>mk/target.mk</filename> file</title>
3042       <indexterm><primary>target.mk</primary></indexterm>
3043
3044       <para><filename>target.mk</filename> contains canned rules for
3045       all the standard targets described in <Xref
3046       LinkEnd="sec-standard-targets">.  It is complicated by the fact
3047       that you don't want all of these rules to be active in every
3048       <filename>Makefile</filename>.  Rather than have a plethora of
3049       tiny files which you can include selectively, there is a single
3050       file, <filename>target.mk</filename>, which selectively includes
3051       rules based on whether you have defined certain variables in
3052       your <filename>Makefile</filename>.  This section explains what
3053       rules you get, what variables control them, and what the rules
3054       do.  Hopefully, you will also get enough of an idea of what is
3055       supposed to happen that you can read and understand any weird
3056       special cases yourself.</para>
3057
3058       <variablelist>
3059         <varlistentry>
3060           <term><constant>HS&lowbar;PROG</constant><indexterm><primary>HS&lowbar;PROG</primary></indexterm>.</term>
3061           <listitem>
3062             <para>If <constant>HS&lowbar;PROG</constant> is defined,
3063             you get rules with the following targets:</para>
3064
3065             <variablelist>
3066               <varlistentry>
3067                 <term><filename>HS&lowbar;PROG</filename><indexterm><primary>HS&lowbar;PROG</primary></indexterm></term>
3068                 <listitem>
3069                   <para>itself.  This rule links
3070                   <constant>&dollar;(OBJS)</constant> with the Haskell
3071                   runtime system to get an executable called
3072                   <constant>&dollar;(HS&lowbar;PROG)</constant>.</para>
3073                 </listitem>
3074               </varlistentry>
3075
3076               <varlistentry>
3077                 <term><literal>install</literal><indexterm><primary>install</primary></indexterm></term>
3078                 <listitem>
3079                   <para>installs
3080                   <constant>&dollar;(HS&lowbar;PROG)</constant> in
3081                   <constant>&dollar;(bindir)</constant>.</para>
3082                 </listitem>
3083               </varlistentry>
3084             </variablelist>
3085
3086           </listitem>
3087         </varlistentry>
3088
3089         <varlistentry>
3090           <term><constant>C&lowbar;PROG</constant><indexterm><primary>C&lowbar;PROG</primary></indexterm></term>
3091           <listitem>
3092             <para>is similar to <constant>HS&lowbar;PROG</constant>,
3093             except that the link step links
3094             <constant>&dollar;(C&lowbar;OBJS)</constant> with the C
3095             runtime system.</para>
3096           </listitem>
3097         </varlistentry>
3098
3099         <varlistentry>
3100           <term><constant>LIBRARY</constant><indexterm><primary>LIBRARY</primary></indexterm></term>
3101           <listitem>
3102             <para>is similar to <constant>HS&lowbar;PROG</constant>,
3103             except that it links
3104             <constant>&dollar;(LIB&lowbar;OBJS)</constant> to make the
3105             library archive <constant>&dollar;(LIBRARY)</constant>,
3106             and <literal>install</literal> installs it in
3107             <constant>&dollar;(libdir)</constant>.</para>
3108           </listitem>
3109         </varlistentry>
3110
3111         <varlistentry>
3112           <term><constant>LIB&lowbar;DATA</constant><indexterm><primary>LIB&lowbar;DATA</primary></indexterm></term>
3113           <listitem>
3114             <para>&hellip;</para>
3115           </listitem>
3116         </varlistentry>
3117
3118         <varlistentry>
3119           <term><constant>LIB&lowbar;EXEC</constant><indexterm><primary>LIB&lowbar;EXEC</primary></indexterm></term>
3120           <listitem>
3121             <para>&hellip;</para>
3122           </listitem>
3123         </varlistentry>
3124
3125         <varlistentry>
3126           <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>
3127           <listitem>
3128             <para>If <constant>HS&lowbar;SRCS</constant> is defined
3129             and non-empty, a rule for the target
3130             <literal>depend</literal> is included, which generates
3131             dependency information for Haskell programs.  Similarly
3132             for <constant>C&lowbar;SRCS</constant>.</para>
3133           </listitem>
3134         </varlistentry>
3135       </variablelist>
3136
3137       <para>All of these rules are &ldquo;double-colon&rdquo; rules,
3138       thus</para>
3139
3140 <ProgramListing>
3141 install :: $(HS_PROG)
3142       ...how to install it...
3143 </ProgramListing>
3144
3145       <para>GNU <command>make</command> treats double-colon rules as
3146       separate entities.  If there are several double-colon rules for
3147       the same target it takes each in turn and fires it if its
3148       dependencies say to do so.  This means that you can, for
3149       example, define both <constant>HS&lowbar;PROG</constant> and
3150       <constant>LIBRARY</constant>, which will generate two rules for
3151       <literal>install</literal>.  When you type <command>gmake
3152       install</command> both rules will be fired, and both the program
3153       and the library will be installed, just as you wanted.</para>
3154     </sect2>
3155
3156     <sect2 id="sec-subdirs">
3157       <title>Recursion</title>
3158       <indexterm><primary>recursion, in makefiles</primary></indexterm>
3159       <indexterm><primary>Makefile, recursing into subdirectories</primary></indexterm>
3160
3161       <para>In leaf <filename>Makefile</filename>s the variable
3162       <constant>SUBDIRS</constant><indexterm><primary>SUBDIRS</primary></indexterm>
3163       is undefined.  In non-leaf <filename>Makefile</filename>s,
3164       <constant>SUBDIRS</constant> is set to the list of
3165       sub-directories that contain subordinate
3166       <filename>Makefile</filename>s.  <emphasis>It is up to you to
3167       set <constant>SUBDIRS</constant> in the
3168       <filename>Makefile</filename>.</emphasis> There is no automation
3169       here&mdash;<constant>SUBDIRS</constant> is too important to
3170       automate.</para>
3171
3172       <para>When <constant>SUBDIRS</constant> is defined,
3173       <filename>target.mk</filename> includes a rather neat rule for
3174       the standard targets (<Xref LinkEnd="sec-standard-targets"> that
3175       simply invokes <command>make</command> recursively in each of
3176       the sub-directories.</para>
3177
3178       <para><emphasis>These recursive invocations are guaranteed to
3179       occur in the order in which the list of directories is specified
3180       in <constant>SUBDIRS</constant>. </emphasis>This guarantee can
3181       be important.  For example, when you say <command>gmake
3182       boot</command> it can be important that the recursive invocation
3183       of <command>make boot</command> is done in one sub-directory
3184       (the include files, say) before another (the source files).
3185       Generally, put the most independent sub-directory first, and the
3186       most dependent last.</para>
3187     </sect2>
3188
3189     <sect2 id="sec-ways">
3190       <title>Way management</title>
3191       <indexterm><primary>way management</primary></indexterm>
3192
3193       <para>We sometimes want to build essentially the same system in
3194       several different &ldquo;ways&rdquo;.  For example, we want to build GHC's
3195       <literal>Prelude</literal> libraries with and without profiling,
3196       so that there is an appropriately-built library archive to link
3197       with when the user compiles his program.  It would be possible
3198       to have a completely separate build tree for each such &ldquo;way&rdquo;,
3199       but it would be horribly bureaucratic, especially since often
3200       only parts of the build tree need to be constructed in multiple
3201       ways.</para>
3202
3203       <para>Instead, the
3204       <filename>target.mk</filename><indexterm><primary>target.mk</primary></indexterm>
3205       contains some clever magic to allow you to build several
3206       versions of a system; and to control locally how many versions
3207       are built and how they differ.  This section explains the
3208       magic.</para>
3209
3210       <para>The files for a particular way are distinguished by
3211       munging the suffix.  The <quote>normal way</quote> is always
3212       built, and its files have the standard suffices
3213       <filename>.o</filename>, <filename>.hi</filename>, and so on.
3214       In addition, you can build one or more extra ways, each
3215       distinguished by a <emphasis>way tag</emphasis>.  The object
3216       files and interface files for one of these extra ways are
3217       distinguished by their suffix.  For example, way
3218       <literal>mp</literal> has files
3219       <filename>.mp&lowbar;o</filename> and
3220       <filename>.mp&lowbar;hi</filename>.  Library archives have their
3221       way tag the other side of the dot, for boring reasons; thus,
3222       <filename>libHS&lowbar;mp.a</filename>.</para>
3223
3224       <para>A <command>make</command> variable called
3225       <constant>way</constant> holds the current way tag.
3226       <emphasis><constant>way</constant> is only ever set on the
3227       command line of <command>gmake</command></emphasis> (usually in
3228       a recursive invocation of <command>gmake</command> by the
3229       system).  It is never set inside a
3230       <filename>Makefile</filename>.  So it is a global constant for
3231       any one invocation of <command>gmake</command>.  Two other
3232       <command>make</command> variables,
3233       <constant>way&lowbar;</constant> and
3234       <constant>&lowbar;way</constant> are immediately derived from
3235       <constant>&dollar;(way)</constant> and never altered.  If
3236       <constant>way</constant> is not set, then neither are
3237       <constant>way&lowbar;</constant> and
3238       <constant>&lowbar;way</constant>, and the invocation of
3239       <command>make</command> will build the <quote>normal
3240       way</quote>.  If <constant>way</constant> is set, then the other
3241       two variables are set in sympathy.  For example, if
3242       <constant>&dollar;(way)</constant> is &ldquo;<literal>mp</literal>&rdquo;,
3243       then <constant>way&lowbar;</constant> is set to
3244       &ldquo;<literal>mp&lowbar;</literal>&rdquo; and
3245       <constant>&lowbar;way</constant> is set to
3246       &ldquo;<literal>&lowbar;mp</literal>&rdquo;.  These three variables are
3247       then used when constructing file names.</para>
3248
3249       <para>So how does <command>make</command> ever get recursively
3250       invoked with <constant>way</constant> set?  There are two ways
3251       in which this happens:</para>
3252
3253       <itemizedlist>
3254         <listitem>
3255           <para>For some (but not all) of the standard targets, when
3256           in a leaf sub-directory, <command>make</command> is
3257           recursively invoked for each way tag in
3258           <constant>&dollar;(WAYS)</constant>.  You set
3259           <constant>WAYS</constant> in the
3260           <filename>Makefile</filename> to the list of way tags you
3261           want these targets built for.  The mechanism here is very
3262           much like the recursive invocation of
3263           <command>make</command> in sub-directories (<Xref
3264           LinkEnd="sec-subdirs">).  It is up to you to set
3265           <constant>WAYS</constant> in your
3266           <filename>Makefile</filename>; this is how you control what
3267           ways will get built.</para>
3268         </listitem>
3269
3270         <listitem>
3271           <para>For a useful collection of targets (such as
3272           <filename>libHS&lowbar;mp.a</filename>,
3273           <filename>Foo.mp&lowbar;o</filename>) there is a rule which
3274           recursively invokes <command>make</command> to make the
3275           specified target, setting the <constant>way</constant>
3276           variable.  So if you say <command>gmake
3277           Foo.mp&lowbar;o</command> you should see a recursive
3278           invocation <command>gmake Foo.mp&lowbar;o way=mp</command>,
3279           and <emphasis>in this recursive invocation the pattern rule
3280           for compiling a Haskell file into a <filename>.o</filename>
3281           file will match</emphasis>.  The key pattern rules (in
3282           <filename>suffix.mk</filename>) look like this:
3283
3284 <ProgramListing>
3285 %.$(way_)o : %.lhs
3286       $(HC) $(HC_OPTS) $&#60; -o $@
3287 </ProgramListing>
3288
3289           Neat, eh?</para>
3290         </listitem>
3291
3292         <listitem>
3293           <para>You can invoke <command>make</command> with a
3294           particular <literal>way</literal> setting yourself, in order
3295           to build files related to a particular
3296           <literal>way</literal> in the current directory.  eg.
3297
3298 <screen>
3299 $ make way=p
3300 </screen>
3301
3302           will build files for the profiling way only in the current
3303           directory. </para>
3304         </listitem>
3305       </itemizedlist>
3306     </sect2>
3307
3308     <sect2>
3309       <title>When the canned rule isn't right</title>
3310
3311       <para>Sometimes the canned rule just doesn't do the right thing.
3312       For example, in the <literal>nofib</literal> suite we want the
3313       link step to print out timing information.  The thing to do here
3314       is <emphasis>not</emphasis> to define
3315       <constant>HS&lowbar;PROG</constant> or
3316       <constant>C&lowbar;PROG</constant>, and instead define a special
3317       purpose rule in your own <filename>Makefile</filename>.  By
3318       using different variable names you will avoid the canned rules
3319       being included, and conflicting with yours.</para>
3320     </sect2>
3321   </sect1>
3322
3323   <sect1 id="building-docs">
3324     <title>Building the documentation</title>
3325
3326     <sect2 id="pre-supposed-doc-tools">
3327       <title>Tools for building the Documentation</title>
3328
3329       <para>The following additional tools are required if you want to
3330       format the documentation that comes with the
3331       <literal>fptools</literal> projects:</para>
3332       
3333       <variablelist>
3334         <varlistentry>
3335           <term>DocBook</term>
3336           <indexterm><primary>pre-supposed: DocBook</primary></indexterm>
3337           <indexterm><primary>DocBook, pre-supposed</primary></indexterm>
3338           <listitem>
3339             <para>Much of our documentation is written in SGML, using
3340             the DocBook DTD.  Instructions on installing and
3341             configuring the DocBook tools are below.</para>
3342           </listitem>
3343         </varlistentry>
3344
3345         <varlistentry>
3346           <term>TeX</term>
3347           <indexterm><primary>pre-supposed: TeX</primary></indexterm>
3348           <indexterm><primary>TeX, pre-supposed</primary></indexterm>
3349           <listitem>
3350             <para>A decent TeX distribution is required if you want to
3351             produce printable documentation.  We recomment teTeX,
3352             which includes just about everything you need.</para>
3353           </listitem>
3354         </varlistentry>
3355
3356         <varlistentry>
3357           <term>Haddock</term>
3358           <indexterm><primary>Haddock</primary>
3359           </indexterm>
3360           <listitem>
3361             <para>Haddock is a Haskell documentation tool that we use
3362             for automatically generating documentation from the
3363             library source code.  It is an <literal>fptools</literal>
3364             project in itself.  To build documentation for the
3365             libraries (<literal>fptools/libraries</literal>) you
3366             should check out and build Haddock in
3367             <literal>fptools/haddock</literal>.  Haddock requires GHC
3368             to build.</para>
3369           </listitem>
3370         </varlistentry>
3371       </variablelist>
3372     </sect2>
3373
3374     <sect2>
3375       <title>Installing the DocBook tools</title>
3376
3377       <sect3>
3378         <title>Installing the DocBook tools on Linux</title>
3379
3380         <para>If you're on a recent RedHat system (7.0+), you probably
3381         have working DocBook tools already installed.  The configure
3382         script should detect your setup and you're away.</para>
3383
3384         <para>If you don't have DocBook tools installed, and you are
3385         using a system that can handle RedHat RPM packages, you can
3386         probably use the <ULink
3387         URL="http://sourceware.cygnus.com/docbook-tools/">Cygnus
3388         DocBook tools</ULink>, which is the most shrink-wrapped SGML
3389         suite that we could find. You need all the RPMs except for
3390         psgml (i.e.  <Filename>docbook</Filename>,
3391         <Filename>jade</Filename>, <Filename>jadetex</Filename>,
3392         <Filename>sgmlcommon</Filename> and
3393         <Filename>stylesheets</Filename>). Note that most of these
3394         RPMs are architecture neutral, so are likely to be found in a
3395         <Filename>noarch</Filename> directory. The SuSE RPMs also
3396         work; the RedHat ones <Emphasis>don't</Emphasis> in RedHat 6.2
3397         (7.0 and later should be OK), but they are easy to fix: just
3398         make a symlink from
3399         <Filename>/usr/lib/sgml/stylesheets/nwalsh-modular/lib/dblib.dsl</Filename>
3400         to <Filename>/usr/lib/sgml/lib/dblib.dsl</Filename>. </para>
3401       </sect3>
3402     
3403       <sect3>
3404         <title>Installing DocBook on FreeBSD</title>
3405
3406         <para>On FreeBSD systems, the easiest way to get DocBook up
3407         and running is to install it from the ports tree or a
3408         pre-compiled package (packages are available from your local
3409         FreeBSD mirror site).</para>
3410
3411         <para>To use the ports tree, do this:
3412 <screen>
3413       $ cd /usr/ports/textproc/docproj
3414       $ make install
3415 </screen>
3416         This installs the FreeBSD documentation project tools, which
3417         includes everything needed to format the GHC
3418         documentation.</para>
3419       </sect3>
3420
3421       <sect3>
3422         <title>Installing from binaries on Windows</title>
3423         
3424         <Para>It's a good idea to use Norman Walsh's <ULink
3425         URL="http://nwalsh.com/docbook/dsssl/doc/install.html">installation
3426         notes</ULink> as a guide. You should get version 3.1 of
3427         DocBook, and note that his file <Filename>test.sgm</Filename>
3428         won't work, as it needs version 3.0. You should unpack Jade
3429         into <Filename>\Jade</Filename>, along with the entities,
3430         DocBook into <Filename>\docbook</Filename>, and the DocBook
3431         stylesheets into <Filename>\docbook\stylesheets</Filename> (so
3432         they actually end up in
3433         <Filename>\docbook\stylesheets\docbook</Filename>).</para>
3434       </Sect3>
3435
3436
3437       <sect3>
3438         <title>Installing the DocBook tools from source</title>
3439
3440         <sect4>
3441           <title>Jade</title>
3442
3443           <para>Install <ULink
3444           URL="http://openjade.sourceforge.net/">OpenJade</ULink>
3445           (Windows binaries are available as well as sources). If you
3446           want DVI, PS, or PDF then install JadeTeX from the
3447           <Filename>dsssl</Filename> subdirectory. (If you get the
3448           error:
3449
3450 <screen>
3451 ! LaTeX Error: Unknown option implicit=false' for package hyperref'.
3452 </screen>
3453
3454           your version of <Command>hyperref</Command> is out of date;
3455           download it from CTAN
3456           (<Filename>macros/latex/contrib/supported/hyperref</Filename>),
3457           and make it, ensuring that you have first removed or renamed
3458           your old copy. If you start getting file not found errors
3459           when making the test for <Command>hyperref</Command>, you
3460           can abort at that point and proceed straight to
3461           <Command>make install</Command>, or enter them as
3462           <Filename>../</Filename><Emphasis>filename</Emphasis>.)</para>
3463
3464           <para>Make links from <Filename>virtex</Filename> to
3465           <Filename>jadetex</Filename> and
3466           <Filename>pdfvirtex</Filename> to
3467           <Filename>pdfjadetex</Filename> (otherwise DVI, PostScript
3468           and PDF output will not work). Copy
3469           <Filename>dsssl/*.{dtd,dsl}</Filename> and
3470           <Filename>catalog</Filename> to
3471           <Filename>/usr/[local/]lib/sgml</Filename>.</para>
3472         </sect4>
3473
3474         <sect4>
3475           <title>DocBook and the DocBook stylesheets</title>
3476
3477           <para>Get a Zip of <ULink
3478           URL="http://www.oasis-open.org/docbook/sgml/3.1/index.html">DocBook</ULink>
3479           and install the contents in
3480           <Filename>/usr/[local/]/lib/sgml</Filename>.</para>
3481
3482           <para>Get the <ULink
3483           URL="http://nwalsh.com/docbook/dsssl/">DocBook
3484           stylesheets</ULink> and install in
3485           <Filename>/usr/[local/]lib/sgml/stylesheets</Filename>
3486           (thereby creating a subdirectory docbook). For indexing,
3487           copy or link <Filename>collateindex.pl</Filename> from the
3488           DocBook stylesheets archive in <Filename>bin</Filename> into
3489           a directory on your <Constant>PATH</Constant>.</para>
3490
3491           <para>Download the <ULink
3492           URL="http://www.oasis-open.org/cover/ISOEnts.zip">ISO
3493           entities</ULink> into
3494           <Filename>/usr/[local/]lib/sgml</Filename>.</para>
3495         </sect4>
3496       </sect3>
3497     </sect2>
3498
3499     <sect2>
3500       <title>Configuring the DocBook tools</title>
3501
3502       <Para>Once the DocBook tools are installed, the configure script
3503       will detect them and set up the build system accordingly. If you
3504       have a system that isn't supported, let us know, and we'll try
3505       to help.</para>
3506     </sect2>
3507
3508     <sect2>
3509       <title>Remaining problems</title>
3510
3511       <para>If you install from source, you'll get a pile of warnings
3512       of the form
3513
3514 <Screen>DTDDECL catalog entries are not supported</Screen>
3515
3516       every time you build anything. These can safely be ignored, but
3517       if you find them tedious you can get rid of them by removing all
3518       the <Constant>DTDDECL</Constant> entries from
3519       <Filename>docbook.cat</Filename>.</para>
3520     </sect2>
3521
3522     <sect2>
3523       <title>Building the documentation</title>
3524
3525       <para>To build documentation in a certain format, you can
3526       say, for example,</para>
3527
3528 <screen>
3529 $ make html
3530 </screen>
3531
3532       <para>to build HTML documentation below the current directory.
3533       The available formats are: <literal>dvi</literal>,
3534       <literal>ps</literal>, <literal>pdf</literal>,
3535       <literal>html</literal>, and <literal>rtf</literal>.  Note that
3536       not all documentation can be built in all of these formats: HTML
3537       documentation is generally supported everywhere, and DocBook
3538       documentation might support the other formats (depending on what
3539       other tools you have installed).</para>
3540
3541       <para>All of these targets are recursive; that is, saying
3542       <literal>make html</literal> will make HTML docs for all the
3543       documents recursively below the current directory.</para>
3544
3545       <para>Because there are many different formats that the DocBook
3546       documentation can be generated in, you have to select which ones
3547       you want by setting the <literal>SGMLDocWays</literal> variable
3548       to a list of them.  For example, in
3549       <filename>build.mk</filename> you might have a line:</para>
3550
3551 <screen>
3552 SGMLDocWays = html ps
3553 </screen>
3554
3555       <para>This will cause the documentation to be built in the requested
3556       formats as part of the main build (the default is not to build
3557       any documentation at all).</para>
3558     </sect2>
3559
3560     <sect2>
3561       <title>Installing the documentation</title>
3562
3563       <para>To install the documentation, use:</para>
3564
3565 <screen>
3566 $ make install-docs
3567 </screen>
3568
3569       <para>This will install the documentation into
3570       <literal>$(datadir)</literal> (which defaults to
3571       <literal>$(prefix)/share</literal>).  The exception is HTML
3572       documentation, which goes into
3573       <literal>$(datadir)/html</literal>, to keep things tidy.</para>
3574
3575       <para>Note that unless you set <literal>$(SGMLDocWays)</literal>
3576       to a list of formats, the <literal>install-docs</literal> target
3577       won't do anything for SGML documentation.</para>
3578     </sect2>
3579
3580   </sect1>
3581     
3582
3583   <sect1 id="sec-porting-ghc">
3584     <title>Porting GHC</title>
3585
3586     <para>This section describes how to port GHC to a currenly
3587     unsupported platform.  There are two distinct
3588     possibilities:</para>
3589
3590     <itemizedlist>
3591       <listitem>
3592         <para>The hardware architecture for your system is already
3593         supported by GHC, but you're running an OS that isn't
3594         supported (or perhaps has been supported in the past, but
3595         currently isn't).  This is the easiest type of porting job,
3596         but it still requires some careful bootstrapping.  Proceed to
3597         <xref linkend="sec-booting-from-hc">.</para>
3598       </listitem>
3599       
3600       <listitem>
3601         <para>Your system's hardware architecture isn't supported by
3602         GHC.  This will be a more difficult port (though by comparison
3603         perhaps not as difficult as porting gcc).  Proceed to <xref
3604         linkend="unregisterised-porting">.</para>
3605       </listitem>
3606     </itemizedlist>
3607     
3608     <sect2 id="sec-booting-from-hc">
3609       <title>Booting/porting from C (<filename>.hc</filename>) files</title>
3610
3611       <indexterm><primary>building GHC from .hc files</primary></indexterm>
3612       <indexterm><primary>booting GHC from .hc files</primary></indexterm>
3613       <indexterm><primary>porting GHC</primary></indexterm>
3614
3615       <para>Bootstrapping GHC on a system without GHC already
3616       installed is achieved by taking the intermediate C files (known
3617       as HC files) from a GHC compilation on a supported system to the
3618       target machine, and compiling them using gcc to get a working
3619       GHC.</para>
3620
3621       <para><emphasis>NOTE: GHC versions 5.xx were hard to bootstrap
3622       from C.  We recommend using GHC 6.0.1 or
3623       later.</emphasis></para>
3624
3625       <para>HC files are platform-dependent, so you have to get a set
3626       that were generated on similar hardware.  There may be some
3627       supplied on the GHC download page, otherwise you'll have to
3628       compile some up yourself, or start from
3629       <emphasis>unregisterised</emphasis> HC files - see <xref
3630       linkend="unregisterised-porting">.</para>
3631
3632       <para>The following steps should result in a working GHC build
3633       with full libraries:</para>
3634
3635       <itemizedlist>
3636         <listitem>
3637           <para>Unpack the HC files on top of a fresh source tree
3638           (make sure the source tree version matches the version of
3639           the HC files <emphasis>exactly</emphasis>!).  This will
3640           place matching <filename>.hc</filename> files next to the
3641           corresponding Haskell source (<filename>.hs</filename> or
3642           <filename>.lhs</filename>) in the compiler subdirectory
3643           <filename>ghc/compiler</filename> and in the libraries
3644           (subdirectories of <filename>hslibs</filename> and
3645           <literal>libraries</literal>).</para>
3646         </listitem>
3647
3648         <listitem>
3649           <para>The actual build process is fully automated by the
3650           <filename>hc-build</filename> script located in the
3651           <filename>distrib</filename> directory.  If you eventually
3652           want to install GHC into the directory
3653           <replaceable>dir</replaceable>, the following
3654           command will execute the whole build process (it won't
3655           install yet):</para>
3656
3657 <Screen>
3658 foo% distrib/hc-build --prefix=<replaceable>dir</replaceable>
3659 </Screen>
3660 <indexterm><primary>--hc-build</primary></indexterm>
3661
3662           <para>By default, the installation directory is
3663           <filename>/usr/local</filename>.  If that is what you want,
3664           you may omit the argument to <filename>hc-build</filename>.
3665           Generally, any option given to <filename>hc-build</filename>
3666           is passed through to the configuration script
3667           <filename>configure</filename>.  If
3668           <filename>hc-build</filename> successfully completes the
3669           build process, you can install the resulting system, as
3670           normal, with</para>
3671
3672 <Screen>
3673 foo% make install
3674 </Screen>
3675         </listitem>
3676       </itemizedlist>
3677     </sect2>
3678
3679     <sect2 id="unregisterised-porting">
3680       <title>Porting GHC to a new architecture</title>
3681       
3682       <para>The first step in porting to a new architecture is to get
3683       an <firstterm>unregisterised</firstterm> build working.  An
3684       unregisterised build is one that compiles via vanilla C only.
3685       By contrast, a registerised build uses the following
3686       architecture-specific hacks for speed:</para>
3687
3688       <itemizedlist>
3689         <listitem>
3690           <para>Global register variables: certain abstract machine
3691           <quote>registers</quote> are mapped to real machine
3692           registers, depending on how many machine registers are
3693           available (see
3694           <filename>ghc/includes/MachRegs.h</filename>).</para>
3695         </listitem>
3696
3697         <listitem>
3698           <para>Assembly-mangling: when compiling via C, we feed the
3699           assembly generated by gcc though a Perl script known as the
3700           <firstterm>mangler</firstterm> (see
3701           <filename>ghc/driver/mangler/ghc-asm.lprl</filename>).  The
3702           mangler rearranges the assembly to support tail-calls and
3703           various other optimisations.</para>
3704         </listitem>
3705       </itemizedlist>
3706
3707       <para>In an unregisterised build, neither of these hacks are
3708       used &mdash; the idea is that the C code generated by the
3709       compiler should compile using gcc only.  The lack of these
3710       optimisations costs about a factor of two in performance, but
3711       since unregisterised compilation is usually just a step on the
3712       way to a full registerised port, we don't mind too much.</para>
3713
3714       <para>Notes on GHC portability in general: we've tried to stick
3715       to writing portable code in most parts of the system, so it
3716       should compile on any POSIXish system with gcc, but in our
3717       experience most systems differ from the standards in one way or
3718       another.  Deal with any problems as they arise - if you get
3719       stuck, ask the experts on
3720       <email>glasgow-haskell-users@haskell.org</email>.</para>
3721         
3722       <para>Lots of useful information about the innards of GHC is
3723       available in the <ulink
3724       url="http://www.cse.unsw.edu.au/~chak/haskell/ghc/comm/">GHC
3725       Commentary</ulink>, which might be helpful if you run into some
3726       code which needs tweaking for your system.</para>
3727
3728       <sect3>
3729         <title>Cross-compiling to produce an unregisterised GHC</title>
3730
3731         <para>In this section, we explain how to bootstrap GHC on a
3732         new platform, using unregisterised intermediate C files.  We
3733         haven't put a great deal of effort into automating this
3734         process, for two reasons: it is done very rarely, and the
3735         process usually requires human intervention to cope with minor
3736         porting issues anyway.</para>
3737
3738         <para>The following step-by-step instructions should result in
3739         a fully working, albeit unregisterised, GHC.  Firstly, you
3740         need a machine that already has a working GHC (we'll call this
3741         the <firstterm>host</firstterm> machine), in order to
3742         cross-compile the intermediate C files that we will use to
3743         bootstrap the compiler on the <firstterm>target</firstterm>
3744         machine.</para>
3745
3746         <itemizedlist>
3747           <listitem>
3748             <para>On the target machine:</para>
3749
3750           <itemizedlist>
3751             <listitem>
3752               <para>Unpack a source tree (preferably a released
3753               version).  We will call the path to the root of this
3754               tree <replaceable>T</replaceable>.</para>
3755             </listitem>
3756
3757             <listitem>
3758 <screen>
3759 $ ./configure --enable-hc-boot --enable-hc-boot-unregisterised
3760 </screen>
3761
3762               <para>You might need to update
3763               <filename>configure.in</filename> to recognise the new
3764               architecture, and re-generate
3765               <filename>configure</filename> with
3766               <literal>autoreconf</literal>.</para>
3767             </listitem>
3768   
3769             <listitem>
3770 <screen>
3771 $ cd <replaceable>T</replaceable>/ghc/includes
3772 $ make config.h
3773 </screen>
3774             </listitem>
3775           </itemizedlist>
3776           </listitem>
3777
3778           <listitem>
3779             <para>On the host machine:</para>
3780               
3781           <itemizedlist>
3782             <listitem>
3783               <para>Unpack a source tree (same released version).  Call
3784               this directory <replaceable>H</replaceable>.</para>
3785             </listitem>
3786  
3787             <listitem>
3788 <screen>
3789 $ cd <replaceable>H</replaceable>
3790 $ ./configure
3791 </screen>
3792             </listitem>
3793
3794             <listitem>
3795               <para>Create
3796               <filename><replaceable>H</replaceable>/mk/build.mk</filename>,
3797               with the following contents:</para>
3798
3799 <programlisting>
3800 GhcUnregisterised = YES
3801 GhcLibHcOpts = -O -H32m -keep-hc-files
3802 GhcLibWays =
3803 SplitObjs = NO
3804 GhcWithNativeCodeGen = NO
3805 GhcWithInterpreter = NO
3806 GhcStage1HcOpts = -O -H32m -fasm
3807 GhcStage2HcOpts = -O -fvia-C -keep-hc-files
3808 </programlisting>
3809             </listitem>
3810
3811             <listitem>
3812               <para>Copy
3813               <filename><replaceable>T</replaceable>/ghc/includes/config.h</filename>
3814               to
3815               <filename><replaceable>H</replaceable>/ghc/includes</filename>.
3816               Note that we are building on the host machine, using the
3817               target machine's <literal>config.h</literal> file.  This
3818               is so that the intermediate C files generated here will
3819               be suitable for compiling on the target system.</para>
3820             </listitem>
3821
3822             <listitem>
3823               <para>Edit
3824               <filename><replaceable>H</replaceable>/mk/config.mk</filename>:</para>
3825               <itemizedlist>
3826                 <listitem>
3827                   <para>change <literal>TARGETPLATFORM</literal>
3828                   appropriately.</para>
3829                 </listitem>
3830                 <listitem>
3831                   <para>copy <literal>LeadingUnderscore</literal>
3832                   setting from target.</para>
3833                 </listitem>
3834               </itemizedlist>
3835             </listitem>
3836             
3837             <listitem>
3838 <screen>
3839 $ cd <replaceable>H</replaceable>/glafp-utils && make boot && make
3840 </screen>
3841             </listitem>
3842             
3843             <listitem>
3844 <screen>
3845 $ cd <replaceable>H</replaceable>/ghc && make boot && make
3846 </screen>
3847
3848               <para>Don't worry if the build falls over in the RTS, we
3849               don't need the RTS yet.</para>
3850             </listitem>
3851
3852             <listitem>
3853 <screen>
3854 $ cd <replaceable>H</replaceable>/libraries
3855 $& make boot && make
3856 </screen>
3857             </listitem>
3858
3859             <listitem>
3860 <screen>
3861 $ cd <replaceable>H</replaceable>/ghc
3862 $ make boot stage=2 && make stage=2
3863 </screen>
3864             </listitem>
3865             
3866             <listitem>
3867               <screen>
3868 $ cd <replaceable>H</replaceable>/ghc/utils
3869 $ make clean
3870 $ make -k HC=<replaceable>H</replaceable>/ghc/compiler/stage1/ghc-inplace \
3871                 EXTRA_HC_OPTS='-O -fvia-C -keep-hc-files'
3872 </screen>
3873             </listitem>
3874             
3875             <listitem>
3876 <screen>
3877 $ cd <replaceable>H</replaceable>
3878 $ make hc-file-bundle Project=Ghc
3879 </screen>
3880             </listitem>
3881
3882             <listitem>
3883               <para>copy
3884               <filename><replaceable>H</replaceable>/*-hc.tar.gz</filename>
3885               to <filename><replaceable>T</replaceable>/..</filename>.</para>
3886             </listitem>
3887           </itemizedlist>
3888           </listitem>
3889
3890           <listitem>
3891             <para>On the target machine:</para>
3892
3893             <para>At this stage we simply need to bootstrap a compiler
3894             from the intermediate C files we generated above.  The
3895             process of bootstrapping from C files is automated by the
3896             script in <literal>distrib/hc-build</literal>, and is
3897             described in <xref linkend="sec-booting-from-hc">.</para>
3898
3899 <screen>
3900 $ ./distrib/hc-build --enable-hc-boot-unregisterised
3901 </screen>
3902
3903             <para>However, since this is a bootstrap on a new machine,
3904             the automated process might not run to completion the
3905             first time.  For that reason, you might want to treat the
3906             <literal>hc-build</literal> script as a list of
3907             instructions to follow, rather than as a fully automated
3908             script.  This way you'll be able to restart the process
3909             part-way through if you need to fix anything on the
3910             way.</para>
3911
3912             <para>Don't bother with running
3913             <literal>make&nbsp;install</literal> in the newly
3914             bootstrapped tree; just use the compiler in that tree to
3915             build a fresh compiler from scratch, this time without
3916             booting from C files.  Before doing this, you might want
3917             to check that the bootstrapped compiler is generating
3918             working binaries:</para>
3919
3920 <screen>
3921 $ cat >hello.hs
3922 main = putStrLn "Hello World!\n"
3923 ^D
3924 $ <replaceable>T</replaceable>/ghc/compiler/ghc-inplace hello.hs -o hello
3925 $ ./hello
3926 Hello World!
3927 </screen>
3928
3929             <para>Once you have the unregisterised compiler up and
3930             running, you can use it to start a registerised port.  The
3931             following sections describe the various parts of the
3932             system that will need architecture-specific tweaks in
3933             order to get a registerised build going.</para>
3934
3935           </listitem>
3936         </itemizedlist>
3937       </sect3>
3938
3939       <sect3>
3940         <title>Porting the RTS</title>
3941         
3942         <para>The following files need architecture-specific code for a
3943         registerised build:</para>
3944
3945         <variablelist>
3946           <varlistentry>
3947             <term><filename>ghc/includes/MachRegs.h</filename></term>
3948             <indexterm><primary><filename>MachRegs.h</filename></primary>
3949             </indexterm>
3950             <listitem>
3951               <para>Defines the STG-register to machine-register
3952               mapping.  You need to know your platform's C calling
3953               convention, and which registers are generally available
3954               for mapping to global register variables.  There are
3955               plenty of useful comments in this file.</para>
3956             </listitem>
3957           </varlistentry>
3958           <varlistentry>
3959             <term><filename>ghc/includes/TailCalls.h</filename></term>
3960             <indexterm><primary><filename>TailCalls.h</filename></primary>
3961             </indexterm>
3962             <listitem>
3963               <para>Macros that cooperate with the mangler (see <xref
3964               linkend="sec-mangler">) to make proper tail-calls
3965               work.</para>
3966             </listitem>
3967           </varlistentry>
3968           <varlistentry>
3969             <term><filename>ghc/rts/Adjustor.c</filename></term>
3970             <indexterm><primary><filename>Adjustor.c</filename></primary>
3971             </indexterm>
3972             <listitem>
3973               <para>Support for
3974               <literal>foreign&nbsp;import&nbsp;"wrapper"</literal>
3975               (aka
3976               <literal>foreign&nbsp;export&nbsp;dynamic</literal>).
3977               Not essential for getting GHC bootstrapped, so this file
3978               can be deferred until later if necessary.</para>
3979             </listitem>
3980           </varlistentry>
3981           <varlistentry>
3982             <term><filename>ghc/rts/StgCRun.c</filename></term>
3983             <indexterm><primary><filename>StgCRun.c</filename></primary>
3984             </indexterm>
3985             <listitem>
3986               <para>The little assembly layer between the C world and
3987               the Haskell world.  See the comments and code for the
3988               other architectures in this file for pointers.</para>
3989             </listitem>
3990           </varlistentry>
3991           <varlistentry>
3992             <term><filename>ghc/rts/MBlock.h</filename></term>
3993             <term><filename>ghc/rts/MBlock.c</filename></term>
3994             <indexterm><primary><filename>MBlock.h</filename></primary>
3995             </indexterm>
3996             <indexterm><primary><filename>MBlock.c</filename></primary>
3997             </indexterm>
3998             <listitem>
3999               <para>These files are really OS-specific rather than
4000               architecture-specific.  In <filename>MBlock.h</filename>
4001               is specified the absolute location at which the RTS
4002               should try to allocate memory on your platform (try to
4003               find an area which doesn't conflict with code or dynamic
4004               libraries).  In <filename>Mblock.c</filename> you might
4005               need to tweak the call to <literal>mmap()</literal> for
4006               your OS.</para>
4007             </listitem>
4008           </varlistentry>
4009         </variablelist>
4010       </sect3>
4011
4012       <sect3 id="sec-mangler">
4013         <title>The mangler</title>
4014         
4015         <para>The mangler is an evil Perl-script that rearranges the
4016         assembly code output from gcc to do two main things:</para>
4017
4018         <itemizedlist>
4019           <listitem>
4020             <para>Remove function prologues and epilogues, and all
4021             movement of the C stack pointer.  This is to support
4022             tail-calls: every code block in Haskell code ends in an
4023             explicit jump, so we don't want the C-stack overflowing
4024             while we're jumping around between code blocks.</para>
4025           </listitem>
4026           <listitem>
4027             <para>Move the <firstterm>info table</firstterm> for a
4028             closure next to the entry code for that closure.  In
4029             unregisterised code, info tables contain a pointer to the
4030             entry code, but in registerised compilation we arrange
4031             that the info table is shoved right up against the entry
4032             code, and addressed backwards from the entry code pointer
4033             (this saves a word in the info table and an extra
4034             indirection when jumping to the closure entry
4035             code).</para>
4036           </listitem>
4037         </itemizedlist>
4038
4039         <para>The mangler is abstracted to a certain extent over some
4040         architecture-specific things such as the particular assembler
4041         directives used to herald symbols.  Take a look at the
4042         definitions for other architectures and use these as a
4043         starting point.</para>
4044       </sect3>
4045
4046       <sect3>
4047         <title>The native code generator</title>
4048
4049         <para>The native code generator isn't essential to getting a
4050         registerised build going, but it's a desirable thing to have
4051         because it can cut compilation times in half.  The native code
4052         generator is described in some detail in the <ulink
4053         url="http://www.cse.unsw.edu.au/~chak/haskell/ghc/comm/">GHC
4054         commentary</ulink>.</para>
4055       </sect3>
4056
4057       <sect3>
4058         <title>GHCi</title>
4059
4060         <para>To support GHCi, you need to port the dynamic linker
4061         (<filename>fptools/ghc/rts/Linker.c</filename>).  The linker
4062         currently supports the ELF and PEi386 object file formats - if
4063         your platform uses one of these then you probably don't have
4064         to do anything except fiddle with the
4065         <literal>#ifdef</literal>s at the top of
4066         <filename>Linker.c</filename> to tell it about your OS.</para>
4067         
4068         <para>If your system uses a different object file format, then
4069         you have to write a linker &mdash; good luck!</para>
4070       </sect3>
4071     </sect2>
4072
4073   </sect1>
4074
4075 <sect1 id="sec-build-pitfalls">
4076 <title>Known pitfalls in building Glasgow Haskell
4077
4078 <indexterm><primary>problems, building</primary></indexterm>
4079 <indexterm><primary>pitfalls, in building</primary></indexterm>
4080 <indexterm><primary>building pitfalls</primary></indexterm></title>
4081
4082 <para>
4083 WARNINGS about pitfalls and known &ldquo;problems&rdquo;:
4084 </para>
4085
4086 <para>
4087
4088 <OrderedList>
4089 <listitem>
4090
4091 <para>
4092 One difficulty that comes up from time to time is running out of space
4093 in <literal>TMPDIR</literal>.  (It is impossible for the configuration stuff to
4094 compensate for the vagaries of different sysadmin approaches to temp
4095 space.)
4096 <indexterm><primary>tmp, running out of space in</primary></indexterm>
4097
4098 The quickest way around it is <command>setenv TMPDIR /usr/tmp</command><indexterm><primary>TMPDIR</primary></indexterm> or
4099 even <command>setenv TMPDIR .</command> (or the equivalent incantation with your shell
4100 of choice).
4101
4102 The best way around it is to say
4103
4104 <ProgramListing>
4105 export TMPDIR=&#60;dir&#62;
4106 </ProgramListing>
4107
4108 in your <filename>build.mk</filename> file.
4109 Then GHC and the other <literal>fptools</literal> programs will use the appropriate directory
4110 in all cases.
4111
4112
4113 </para>
4114 </listitem>
4115 <listitem>
4116
4117 <para>
4118 In compiling some support-code bits, e.g., in <filename>ghc/rts/gmp</filename> and even
4119 in <filename>ghc/lib</filename>, you may get a few C-compiler warnings.  We think these
4120 are OK.
4121
4122 </para>
4123 </listitem>
4124 <listitem>
4125
4126 <para>
4127 When compiling via C, you'll sometimes get &ldquo;warning: assignment from
4128 incompatible pointer type&rdquo; out of GCC.  Harmless.
4129
4130 </para>
4131 </listitem>
4132 <listitem>
4133
4134 <para>
4135 Similarly, <command>ar</command>chiving warning messages like the following are not
4136 a problem:
4137
4138 <Screen>
4139 ar: filename GlaIOMonad__1_2s.o truncated to GlaIOMonad_
4140 ar: filename GlaIOMonad__2_2s.o truncated to GlaIOMonad_
4141 ...
4142 </Screen>
4143
4144
4145 </para>
4146 </listitem>
4147 <listitem>
4148
4149 <para>
4150  In compiling the compiler proper (in <filename>compiler/</filename>), you <emphasis>may</emphasis>
4151 get an &ldquo;Out of heap space&rdquo; error message.  These can vary with the
4152 vagaries of different systems, it seems.  The solution is simple:
4153
4154
4155 <itemizedlist>
4156 <listitem>
4157
4158 <para>
4159  If you're compiling with GHC 4.00 or later, then the
4160 <emphasis>maximum</emphasis> heap size must have been reached.  This
4161 is somewhat unlikely, since the maximum is set to 64M by default.
4162 Anyway, you can raise it with the
4163 <option>-optCrts-M&lt;size&gt;</option> flag (add this flag to
4164 <constant>&lt;module&gt;&lowbar;HC&lowbar;OPTS</constant>
4165 <command>make</command> variable in the appropriate
4166 <filename>Makefile</filename>).
4167
4168 </para>
4169 </listitem>
4170 <listitem>
4171
4172 <para>
4173  For GHC &#60; 4.00, add a suitable <option>-H</option> flag to the <filename>Makefile</filename>, as
4174 above.
4175
4176 </para>
4177 </listitem>
4178
4179 </itemizedlist>
4180
4181
4182 and try again: <command>gmake</command>.  (see <Xref LinkEnd="sec-suffix"> for information about
4183 <constant>&lt;module&gt;&lowbar;HC&lowbar;OPTS</constant>.)
4184
4185 Alternatively, just cut to the chase:
4186
4187 <Screen>
4188 % cd ghc/compiler
4189 % make EXTRA_HC_OPTS=-optCrts-M128M
4190 </Screen>
4191
4192
4193 </para>
4194 </listitem>
4195 <listitem>
4196
4197 <para>
4198 If you try to compile some Haskell, and you get errors from GCC about
4199 lots of things from <filename>/usr/include/math.h</filename>, then your GCC was
4200 mis-installed.  <command>fixincludes</command> wasn't run when it should've been.
4201
4202 As <command>fixincludes</command> is now automagically run as part of GCC installation,
4203 this bug also suggests that you have an old GCC.
4204
4205
4206 </para>
4207 </listitem>
4208 <listitem>
4209
4210 <para>
4211 You <emphasis>may</emphasis> need to re-<command>ranlib</command><indexterm><primary>ranlib</primary></indexterm> your libraries (on Sun4s).
4212
4213
4214 <Screen>
4215 % cd $(libdir)/ghc-x.xx/sparc-sun-sunos4
4216 % foreach i ( `find . -name '*.a' -print` ) # or other-shell equiv...
4217 ?    ranlib $i
4218 ?    # or, on some machines: ar s $i
4219 ? end
4220 </Screen>
4221
4222
4223 We'd be interested to know if this is still necessary.
4224
4225
4226 </para>
4227 </listitem>
4228 <listitem>
4229
4230 <para>
4231 GHC's sources go through <command>cpp</command> before being compiled, and <command>cpp</command> varies
4232 a bit from one Unix to another.  One particular gotcha is macro calls
4233 like this:
4234
4235
4236 <ProgramListing>
4237 SLIT("Hello, world")
4238 </ProgramListing>
4239
4240
4241 Some <command>cpp</command>s treat the comma inside the string as separating two macro
4242 arguments, so you get
4243
4244
4245 <Screen>
4246 :731: macro `SLIT' used with too many (2) args
4247 </Screen>
4248
4249
4250 Alas, <command>cpp</command> doesn't tell you the offending file!
4251
4252 Workaround: don't put weird things in string args to <command>cpp</command> macros.
4253 </para>
4254 </listitem>
4255
4256 </OrderedList>
4257
4258 </para>
4259
4260 </sect1>
4261
4262
4263 <Sect1 id="winbuild"><Title>Notes for building under Windows</Title>
4264
4265 <para>
4266 This section summarises how to get the utilities you need on your
4267 Win95/98/NT/2000 machine to use CVS and build GHC. Similar notes for
4268 installing and running GHC may be found in the user guide. In general,
4269 Win95/Win98 behave the same, and WinNT/Win2k behave the same.
4270 You should read the GHC installation guide sections on Windows (in the user
4271 guide) before continuing to read these notes.
4272 </para>
4273
4274
4275 <sect2 id="cygwin-and-mingw"><Title>Cygwin and MinGW</Title>
4276
4277 <para> The Windows situation for building GHC is rather confusing.  This section
4278 tries to clarify, and to establish terminology.</para>
4279
4280 <sect3 id="ghc-mingw"><title>GHC-mingw</title>
4281
4282 <para> <ulink url="http://www.mingw.org">MinGW (Minimalist GNU for Windows)</ulink> 
4283 is a collection of header
4284 files and import libraries that allow one to use <command>gcc</command> and produce
4285 native Win32 programs that do not rely on any third-party DLLs. The
4286 current set of tools include GNU Compiler Collection (<command>gcc</command>), GNU Binary
4287 Utilities (Binutils), GNU debugger (Gdb), GNU make, and a assorted
4288 other utilities. 
4289 </para>
4290 <para>The GHC that we distribute includes, inside the distribution itself, the MinGW <command>gcc</command>,
4291 <command>as</command>, <command>ld</command>, and a bunch of input/output libraries.  
4292 GHC compiles Haskell to C (or to 
4293 assembly code), and then invokes these MinGW tools to generate an executable binary.
4294 The resulting binaries can run on any Win32 system.
4295 </para>
4296 <para> We will call a GHC that targets MinGW in this way <emphasis>GHC-mingw</emphasis>.</para>
4297
4298 <para> The down-side of GHC-mingw is that the MinGW libraries do not support anything like the full
4299 Posix interface.  So programs compiled with GHC-mingw cannot import the (Haskell) Posix 
4300 library; they have to do
4301 their input output using standard Haskell I/O libraries, or native Win32 bindings.
4302 </para>
4303 </sect3>
4304
4305 <sect3 id="ghc-cygwin"><title>GHC-cygwin</title>
4306
4307 <para>There <emphasis>is</emphasis> a way to get the full Posix interface, which is to use Cygwin.  
4308 <ulink url="http://www.cygwin.com">Cygwin</ulink> is a complete Unix simulation that runs on Win32.
4309 Cygwin comes with a shell, and all the usual Unix commands: <command>mv</command>, <command>rm</command>,
4310 <command>ls</command>, plus of course <command>gcc</command>, <command>ld</command> and so on.
4311 A C program compiled with the Cygwin <command>gcc</command> certainly can use all of Posix.
4312 </para>
4313 <para>So why doesn't GHC use the Cygwin <command>gcc</command> and libraries?  Because
4314 Cygwin comes with a DLL <emphasis>that must be linked with every runnable Cygwin-compiled program</emphasis>.
4315 A program compiled by the Cygwin tools cannot run at all unless Cygwin is installed. 
4316 If GHC targeted Cygwin, users would have to install Cygwin just to run the Haskell programs
4317 that GHC compiled; and the Cygwin DLL would have to be in the DLL load path.
4318 Worse, Cygwin is a moving target.  The name of the main DLL, <literal>cygwin1.dll</literal>
4319 does not change, but the implementation certainly does.  Even the interfaces to functions
4320 it exports seem to change occasionally. So programs compiled by GHC might only run with
4321 particular versions of Cygwin.  All of this seems very undesirable.
4322 </para>
4323 <para>
4324 Nevertheless, it is certainly possible to build a version of GHC that targets Cygwin;
4325 we will call that <emphasis>GHC-cygwin</emphasis>.  The up-side of GHC-cygwin is
4326 that Haskell programs compiled by GHC-cygwin can import the (Haskell) Posix library.
4327 </para>
4328 </sect3>
4329
4330 <sect3><title>HOST_OS vs TARGET_OS</title>
4331
4332 <para>
4333 In the source code you'll find various ifdefs looking like:
4334 <programlisting>
4335   #ifdef mingw32_HOST_OS
4336     ...blah blah...
4337   #endif
4338 </programlisting>
4339 and 
4340 <programlisting>
4341   #ifdef mingw32_TARGET_OS
4342     ...blah blah...
4343   #endif
4344 </programlisting>
4345 These macros are set by the configure script (via the file config.h).
4346 Which is which?  The criterion is this.  In the ifdefs in GHC's source code:
4347 <itemizedlist>
4348   <listitem> <para>
4349   The "host" system is the one on which GHC itself will be run.
4350   </para> </listitem>
4351   <listitem> <para>
4352   The "target" system is the one for which the program compiled by GHC will be run.
4353   </para> </listitem>
4354 </itemizedlist>
4355 For a stage-2 compiler, in which GHCi is available, the "host" and "target" systems must be the same.
4356 So then it doesn't really matter whether you use the HOST_OS or TARGET_OS cpp macros.
4357
4358 </para>
4359 </sect3>
4360
4361 <sect3><title>Summary</title>
4362
4363 <para>Notice that "GHC-mingw" means "GHC that <emphasis>targets</emphasis> MinGW".  It says nothing about 
4364 how that GHC was <emphasis>built</emphasis>.  It is entirely possible to have a GHC-mingw that was built
4365 by compiling GHC's Haskell sources with a GHC-cygwin, or vice versa.</para>
4366
4367 <para>We distribute only a GHC-mingw built by a GHC-mingw; supporting
4368 GHC-cygwin too is beyond our resources.  The GHC we distribute
4369 therefore does not require Cygwin to run, nor do the programs it
4370 compiles require Cygwin.</para>
4371
4372 <para>The instructions that follow describe how to build GHC-mingw. It is
4373 possible to build GHC-cygwin, but it's not a supported route, and the build system might
4374 be flaky.</para>
4375
4376 <para>In your build tree, you build a compiler called <Command>ghc-inplace</Command>.  It
4377 uses the <Command>gcc</Command> that you specify using the
4378 <option>--with-gcc</option> flag when you run
4379 <Command>configure</Command> (see below).
4380 The makefiles are careful to use <Command>ghc-inplace</Command> (not <Command>gcc</Command>)
4381 to compile any C files, so that it will in turn invoke the right <Command>gcc</Command> rather that
4382 whatever one happens to be in your path.  However, the makefiles do use whatever <Command>ld</Command> 
4383 and <Command>ar</Command> happen to be in your path. This is a bit naughty, but (a) they are only
4384 used to glom together .o files into a bigger .o file, or a .a file, 
4385 so they don't ever get libraries (which would be bogus; they might be the wrong libraries), and (b)
4386 Cygwin and Mingw use the same .o file format.  So its ok.
4387 </para>
4388 </sect3>
4389 </sect2>
4390
4391 <Sect2><Title>Installing and configuring Cygwin</Title>
4392
4393 <para>You don't need Cygwin to <emphasis>use</emphasis> GHC, 
4394 but you do need it to <emphasis>build</emphasis> GHC.</para>
4395
4396 <para> Install Cygwin from <ulink url="http://www.cygwin.com/">http://www.cygwin.com/</ulink>.
4397 The installation process is straightforward; we install it in <Filename>c:/cygwin</Filename>.
4398 During the installation dialogue, make sure that you select:
4399 <command>cvs</command>, <command>openssh</command>,
4400 <command>autoconf</command>,
4401 <command>binutils</command> (includes ld and (I think) ar),
4402 <command>gcc</command>,
4403 <command>flex</command>,
4404 <command>make</command>.
4405
4406 </para>
4407 <para> Now set the following user environment variables:
4408 <itemizedlist>
4409
4410 <listitem><para> Add <filename>c:/cygwin/bin</filename> and <filename>c:/cygwin/usr/bin</filename> to your 
4411 <constant>PATH</constant></para></listitem>
4412
4413 <listitem>
4414 <para>
4415 Set <constant>MAKE_MODE</constant> to <Literal>UNIX</Literal>. If you
4416 don't do this you get very weird messages when you type
4417 <Command>make</Command>, such as:
4418 <Screen>
4419 /c: /c: No such file or directory
4420 </Screen>
4421 </para>
4422 </listitem>
4423
4424 <listitem><para> Set <constant>SHELL</constant> to
4425 <Filename>c:/cygwin/bin/sh</Filename>. When you invoke a shell in Emacs, this
4426 <constant>SHELL</constant> is what you get.
4427 </para></listitem>
4428
4429 <listitem><para> Set <constant>HOME</constant> to point to your 
4430 home directory.  This is where, for example,
4431 <command>bash</command> will look for your <filename>.bashrc</filename>
4432 file.  Ditto <command>emacs</command> looking for <filename>.emacsrc</filename>
4433 </para></listitem>
4434 </itemizedlist>
4435 </para>
4436
4437 <para>
4438 There are a few other things to do:
4439 <itemizedlist>
4440 <listitem>
4441 <para>
4442 By default, cygwin provides the command shell <filename>ash</filename>
4443 as <filename>sh.exe</filename>. We have often seen build-system problems that 
4444 turn out to be due to bugs in <filename>ash</filename>
4445 (to do with quoting
4446 and length of command lines).  On the other hand <filename>bash</filename> seems
4447 to be rock solid.
4448 So, in <filename>cygwin/bin</filename>
4449 remove the supplied <filename>sh.exe</filename> (or rename it as <filename>ash.exe</filename>),
4450 and copy <filename>bash.exe</filename> to  <filename>sh.exe</filename>.
4451 You'll need to do this in Windows Explorer or the Windows <command>cmd</command> shell, because
4452 you can't rename a running program!
4453 </para>
4454 </listitem>
4455
4456 <listitem>
4457 <para>
4458 Some script files used in the make system start with "<Command>#!/bin/perl</Command>",
4459 (and similarly for <Command>sh</Command>).  Notice the hardwired path!
4460 So you need to ensure that your <Filename>/bin</Filename> directory has the following
4461 binaries in it:
4462 <itemizedlist>
4463 <listitem> <para><Command>sh</Command></para></listitem>
4464 <listitem> <para><Command>perl</Command></para></listitem>
4465 <listitem> <para><Command>cat</Command></para></listitem>
4466 </itemizedlist>
4467 All these come in Cygwin's <Filename>bin</Filename> directory, which you probably have
4468 installed as <Filename>c:/cygwin/bin</Filename>.  By default Cygwin mounts "<Filename>/</Filename>" as
4469 <Filename>c:/cygwin</Filename>, so if you just take the defaults it'll all work ok.
4470 (You can discover where your Cygwin
4471 root directory <Filename>/</Filename> is by typing <Command>mount</Command>.)
4472 Provided <Filename>/bin</Filename> points to the Cygwin <Filename>bin</Filename>
4473 directory, there's no need to copy anything.  If not, copy these binaries from the <filename>cygwin/bin</filename>
4474 directory (after fixing the <filename>sh.exe</filename> stuff mentioned in the previous bullet).
4475 </para>
4476 </listitem>
4477 </itemizedlist>
4478 </para>
4479
4480 <para>Finally, here are some things to be aware of when using Cygwin:
4481 <itemizedlist>
4482 <listitem> <para>Cygwin doesn't deal well with filenames that include
4483 spaces. "<filename>Program Files</filename>" and "<filename>Local files</filename>" are
4484 common gotchas.
4485 </para></listitem>
4486
4487 <listitem> <para> Cygwin implements a symbolic link as a text file with some
4488 magical text in it.  So other programs that don't use Cygwin's
4489 I/O libraries won't recognise such files as symlinks.  
4490 In particular, programs compiled by GHC are meant to be runnable
4491 without having Cygwin, so they don't use the Cygwin library, so
4492 they don't recognise symlinks.
4493 </para></listitem>
4494
4495 <listitem> <para>
4496 Win32 has a <command>find</command> command which is not the same as Cygwin's find.
4497 You will probably discover that the Win32 <command>find</command> appears in your <constant>PATH</constant>
4498 before the Cygwin one, because it's in the <emphasis>system</emphasis> <constant>PATH</constant> 
4499 environment variable, whereas you have probably modified the <emphasis>user</emphasis> <constant>PATH</constant> 
4500 variable.  You can always invoke <command>find</command> with an absolute path, or rename it.
4501 </para></listitem>
4502 </itemizedlist>
4503 </para>
4504
4505 </Sect2>
4506
4507 <Sect2 id="configure-ssh"><Title>Configuring SSH</Title>
4508
4509 <para><command>ssh</command> comes with Cygwin, provided you remember to ask for it when
4510 you install Cygwin.  (If not, the installer lets you update easily.)  Look for <command>openssh</command> 
4511 (not ssh) in the Cygwin list of applications!</para>
4512
4513 <para>There are several strange things about <command>ssh</command> on Windows that you need to know.
4514 <itemizedlist>
4515 <listitem>
4516 <para>
4517        The programs <command>ssh-keygen1</command>, <command>ssh1</command>, and <command>cvs</command>,
4518        seem to lock up <command>bash</command> entirely if they try to get user input (e.g. if
4519        they ask for a password).  To solve this, start up <filename>cmd.exe</filename> 
4520        and run it as follows:
4521        <Screen>
4522        c:\tmp> set CYGWIN32=tty
4523        c:\tmp> c:/user/local/bin/ssh-keygen1
4524        </Screen> </para>
4525 </listitem>
4526
4527 <listitem><para>
4528 <command>ssh</command> needs to access your directory <filename>.ssh</filename>, in your home directory.  
4529 To determine your home directory <command>ssh</command> first looks in 
4530 <filename>c:/cygwin/etc/passwd</filename> (or wherever you have Cygwin installed).  If there's an entry
4531 there with your userid, it'll use that entry to determine your home directory, <emphasis>ignoring
4532 the setting of the environment variable $HOME</emphasis>.  If the home directory is
4533 bogus, <command>ssh</command> fails horribly.   The best way to see what is going on is to say
4534 <programlisting>
4535   ssh -v cvs.haskell.org
4536 </programlisting>
4537 which makes <command>ssh</command> print out information about its activity.
4538 </para>
4539 <para> You can fix this problem, either by correcting the home-directory field in 
4540 <filename>c:/cygwin/etc/passwd</filename>, or by simply deleting the entire entry for your userid. If
4541 you do that, <command>ssh</command> uses the $HOME environment variable instead.
4542 </para>
4543
4544 </listitem>
4545
4546 <listitem>
4547             <para>To protect your
4548             <literal>.ssh</literal> from access by anyone else,
4549             right-click your <literal>.ssh</literal> directory, and
4550             select <literal>Properties</literal>.  If you are not on
4551             the access control list, add yourself, and give yourself
4552             full permissions (the second panel).  Remove everyone else
4553             from the access control list.  Don't leave them there but
4554             deny them access, because 'they' may be a list that
4555             includes you!</para>
4556 </listitem>
4557
4558 <listitem>
4559             <para>In fact <command>ssh</command> 3.6.1 now seems to <emphasis>require</emphasis>
4560               you to have Unix permissions 600 (read/write for owner only) 
4561               on the <literal>.ssh/identity</literal> file, else it 
4562               bombs out.  For your local C drive, it seems that <literal>chmod 600 identity</literal> works,
4563               but on Windows NT/XP, it doesn't work on a network drive (exact dteails obscure).  
4564               The solution seems to be to set the $CYGWIN environment
4565               variable to "<literal>ntsec neta</literal>".  The $CYGWIN environment variable is discussed
4566               in <ulink url="http://cygwin.com/cygwin-ug-net/using-cygwinenv.html">the Cygwin User's Guide</ulink>,
4567               and there are more details in <ulink url="http://cygwin.com/faq/faq_4.html#SEC44">the Cygwin FAQ</ulink>.
4568               </para>
4569 </listitem>
4570 </itemizedlist>
4571 </para>
4572 </sect2>
4573
4574 <Sect2><Title>Other things you need to install</Title>
4575
4576 <para>You have to install the following other things to build GHC:
4577 <itemizedlist>
4578 <listitem>
4579 <para>
4580 Install an executable GHC, from <ulink url="http://www.haskell.org/ghc">http://www.haskell.org/ghc</ulink>.
4581 This is what you will use to compile GHC.  Add it in your
4582 <constant>PATH</constant>: the installer tells you the path element
4583 you need to add upon completion.
4584 </para>
4585 </listitem>
4586
4587 <listitem>
4588 <para>
4589 Install an executable Happy, from <ulink url="http://www.haskell.org/happy">http://www.haskell.org/happy</ulink>.
4590 Happy is a parser generator used to compile the Haskell grammar.  Add it in your
4591 <constant>PATH</constant>.
4592 </para>
4593 </listitem>
4594
4595
4596 <listitem>
4597 <para>GHC uses the <emphasis>mingw</emphasis> C compiler to
4598 generate code, so you have to install that (see <xref linkend="cygwin-and-mingw">). 
4599 Just pick up a mingw bundle at
4600 <ulink url="http://www.mingw.org/">http://www.mingw.org/</ulink>.
4601 We install it in <filename>c:/mingw</filename>.
4602 </para>
4603 <para>Do <emphasis>not</emphasis> add any of the <emphasis>mingw</emphasis> binaries to your  path.
4604 They are only going to get used by explicit access (via the --with-gcc flag you
4605 give to <Command>configure</Command> later).  If you do add them to your path
4606 you are likely to get into a mess because their names overlap with Cygwin binaries.
4607 </para>
4608 </listitem>
4609
4610
4611 <listitem>
4612 <para>We use <command>emacs</command> a lot, so we install that too.
4613 When you are in <filename>fptools/ghc/compiler</filename>, you can use
4614 "<literal>make tags</literal>" to make a TAGS file for emacs.  That uses the utility
4615 <filename>fptools/ghc/utils/hasktags/hasktags</filename>, so you need to make that first.
4616 The most convenient way to do this is by going <literal>make boot</literal> in <filename>fptools/ghc</filename>.
4617 The <literal>make tags</literal> command also uses <command>etags</command>, which comes with <command>emacs</command>,
4618 so you will need to add <filename>emacs/bin</filename> to your <literal>PATH</literal>.
4619 </para>
4620 </listitem>
4621
4622
4623 <listitem>
4624 <para> Finally, check out a copy of GHC sources from
4625 the CVS repository, following the instructions above (<xref linkend="cvs-access">).
4626 </para>
4627 </listitem>
4628 </itemizedlist>
4629 </para>
4630 </sect2>
4631
4632 <Sect2><Title>Building GHC</Title>
4633
4634 <para>OK!  
4635 Now go read the documentation above on building from source (<xref linkend="sec-building-from-source">); 
4636 the bullets below only tell
4637 you about Windows-specific wrinkles.</para>
4638 <ItemizedList>
4639 <listitem>
4640 <para>
4641 Run <Command>autoconf</Command> both in <filename>fptools</filename>
4642 and in <filename>fptools/ghc</filename>.  If you omit the latter step you'll
4643 get an error when you run <filename>./configure</filename>:
4644 <Screen>
4645 ...lots of stuff...
4646 creating mk/config.h
4647 mk/config.h is unchanged
4648 configuring in ghc
4649 running /bin/sh ./configure  --cache-file=.././config.cache --srcdir=.
4650 ./configure: ./configure: No such file or directory
4651 configure: error: ./configure failed for ghc
4652 </Screen>
4653 </para>
4654 </listitem>
4655
4656 <listitem> <para><command>autoconf</command> seems to create the file <filename>configure</filename>
4657 read-only.  So if you need to run autoconf again (which I sometimes do for safety's sake),
4658 you get
4659 <screen>
4660 /usr/bin/autoconf: cannot create configure: permission denied
4661 </screen>
4662 Solution: delete <filename>configure</filename> first.
4663 </para></listitem>
4664
4665 <listitem>
4666 <para>
4667 You either need to add <filename>ghc</filename> to your
4668 <constant>PATH</constant> before you invoke
4669 <Command>configure</Command>, or use the <Command>configure</Command>
4670 option <option>--with-ghc=c:/ghc/ghc-some-version/bin/ghc</option>.
4671 </para>
4672 </listitem>
4673
4674 <listitem><para>
4675 If you are paranoid, delete <filename>config.cache</filename> if it exists.
4676 This file occasionally remembers out-of-date configuration information, which 
4677 can be really confusing.
4678 </para>
4679 </listitem>
4680
4681 <listitem>
4682   <para> 
4683     After <command>autoconf</command> run <command>./configure</command> in
4684     <filename>fptools/</filename> thus:
4685
4686 <Screen>
4687   ./configure --host=i386-unknown-mingw32 --with-gcc=c:/mingw/bin/gcc
4688 </Screen>
4689 This is the point at which you specify that you are building GHC-mingw
4690 (see <xref linkend="ghc-mingw">). </para>
4691
4692 <para> Both these options are important! It's possible to get into
4693 trouble using the wrong C compiler!</para>
4694 <para>
4695 Furthermore, it's <emphasis>very important</emphasis> that you specify a 
4696 full MinGW path for <command>gcc</command>, not a Cygwin path, because GHC (which
4697 uses this path to invoke <command>gcc</command>) is a MinGW program and won't
4698 understand a Cygwin path.  For example, if you 
4699 say <literal>--with-gcc=/mingw/bin/gcc</literal>, it'll be interpreted as
4700 <filename>/cygdrive/c/mingw/bin/gcc</filename>, and GHC will fail the first
4701 time it tries to invoke it.   Worse, the failure comes with
4702 no error message whatsoever.  GHC simply fails silently when first invoked, 
4703 typically leaving you with this:
4704 <programlisting>
4705 make[4]: Leaving directory `/cygdrive/e/fptools-stage1/ghc/rts/gmp'
4706 ../../ghc/compiler/ghc-inplace -optc-mno-cygwin -optc-O 
4707   -optc-Wall -optc-W  -optc-Wstrict-prototypes -optc-Wmissing-prototypes 
4708   -optc-Wmissing-declarations -optc-Winline -optc-Waggregate-return 
4709   -optc-Wbad-function-cast -optc-Wcast-align -optc-I../includes 
4710   -optc-I. -optc-Iparallel -optc-DCOMPILING_RTS 
4711   -optc-fomit-frame-pointer -O2 -static 
4712   -package-name rts -O -dcore-lint -c Adjustor.c -o Adjustor.o
4713 make[2]: *** [Adjustor.o] Error 1
4714 make[1]: *** [all] Error 1
4715 make[1]: Leaving directory `/cygdrive/e/fptools-stage1/ghc'
4716 make: *** [all] Error 1
4717 </programlisting>
4718 Be warned!
4719 </para>
4720
4721 <para>
4722 If you want to build GHC-cygwin (<xref linkend="ghc-cygwin">)
4723 you'll have to do something more like:
4724 <Screen>
4725   ./configure --with-gcc=...the Cygwin gcc...
4726 </Screen>
4727 </para>
4728 </listitem>
4729
4730 <listitem><para> You almost certainly want to set
4731 <programlisting>
4732   SplitObjs = NO
4733 </programlisting>
4734 in your <filename>build.mk</filename> configuration file (see <xref linkend="sec-build-config">).
4735 This tells the build system not to split each library into a myriad of little object files, one
4736 for each function.  Doing so reduces binary sizes for statically-linked binaries, but on Windows
4737 it dramatically increases the time taken to build the libraries in the first place.
4738 </para>
4739 </listitem>
4740
4741 <listitem><para> Do not attempt to build the documentation.
4742 It needs all kinds of wierd Jade stuff that we haven't worked out for
4743 Win32.</para></listitem>
4744 </ItemizedList>
4745 </Sect2>
4746
4747
4748 </sect1>
4749
4750 </Article>