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