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