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