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