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