[project @ 1998-02-04 20:49:58 by sof]
[ghc-hetmet.git] / docs / installing.vsgml
1 <!doctype linuxdoc system>
2 <article>
3
4 <title>Building and Installing the Glasgow Functional Programming Tools Suite
5 Version 3.00
6 <author>The GHC Team,
7 Department of Computing Science,
8 University of Glasgow,
9 Glasgow, Scotland,
10 G12 8QQ.
11
12 Email: @glasgow-haskell-{users,bugs}@@dcs.gla.ac.uk@
13 <date>November 1997</date>
14
15 <abstract>
16
17 This guide is intended for people who want to install or modify
18 programs from the Glasgow @fptools@ suite (as distinct from those
19 who merely want to <em/run/ them).
20
21 The whole install-and-make system was completely re-done between GHC
22 2.01 and 2.02, so it will be worth your while to re-read this guide
23 even if you have read earlier versions.
24 </abstract>
25
26 <toc>
27
28 <sect>Getting the Glasgow @fptools@ suite
29 <label id="sec:getting">
30 <p>
31
32 Building the Glasgow tools <em/can/ be complicated, mostly because
33 there are so many permutations of what/why/how, e.g., ``Build Happy
34 with HBC, everything else with GHC, leave out profiling, and test it
35 all on the `real' NoFib programs.''  Yeeps!
36
37 Happily, such complications don't apply to most people.  A few common
38 ``strategies'' serve most purposes.  Pick one and proceed
39 as suggested:
40
41 <descrip>
42
43 <tag><idx>Binary distribution</idx>.</tag>
44  If your only purpose is to install some of the @fptools@ suite
45 then the easiest thing to do is to get a binary distribution. In the
46 binary distribution everything is pre-compiled for your particular
47 machine architecture and operating system, so all you should have to
48 do is install the binaries and libraries in suitable places.  Section
49 <ref id="sec:installing-bin-distrib" name="Installing a Binary
50 Distribution"> describes how to do this.
51
52 A binary distribution may not work for you for two reasons.  First, we
53 may not have built the suite for the particular architecture/OS
54 platform you want. That may be due to lack of time and energy (in
55 which case you can get a source distribution and build from it; see
56 below).  Alternatively, it may be because we haven't yet ported the
57 suite to your architecture, in which case you are considerably worse
58 off.
59
60 The second reason a binary distribution may not be what you want is
61 if you want to read or modify the souce code.
62
63 <tag><idx>Source distribution</idx>.</tag> You have a supported
64 platform, but (a)~you like the warm fuzzy feeling of compiling things
65 yourself; (b)~you want to build something ``extra''---e.g., a set of
66 libraries with strictness-analysis turned off; or (c)~you want to hack
67 on GHC yourself.
68
69 A source distribution contains complete sources for the @fptools@
70 suite.  Not only that, but the more awkward machine-independent steps
71 are done for you.  For example, if you don't have @flex@<ncdx/flex/
72 you'll find it convenient that the source distribution contains the
73 result of running @flex@ on the lexical analyser specification.  If
74 you don't want to alter the lexical analyser then this saves you
75 having to find and install @flex@. You will still need a working
76 version of GHC on your machine in order to compile (most of) the
77 sources, however.
78
79 We make source distributions more frequently than binary
80 distributions; a release that comes with pre-compiled binaries
81 is considered a major release, i.e., a release that we have some
82 confidence will work well by having tested it (more) thoroughly.
83
84 Source-only distributions are either bugfix releases or snapshots of
85 current state of development. The release has undergone some testing.
86 Source releases of 2.0x can be compiled up using 2.07 (or subsequent
87 bugfix releases) or the Good Old Compiler, GHC~0.29. Compiling with
88 0.29 is recommended if you're a performance junkie, as 0.29 (still)
89 generates zippier code, but GHC~2.0x is catching up.
90
91 <tag/Build GHC from intermediate C @.hc@ files<nidx/hc files/:/ You
92 need a working GHC to use a source distribution. What if you don't
93 have a working GHC? Then you have no choice but to ``bootstrap'' up
94 from the intermediate C (@.hc@) files that we provide.  Building GHC
95 on an unsupported platform falls into this category.  Please see
96 Section <ref id="sec:booting-from-C" name="Booting From C">.
97
98 Once you have built GHC, you can build the other Glasgow tools with
99 it.
100
101 In theory, you can (could?) build GHC with another Haskell compiler
102 (e.g., HBC). We haven't tried to do this for ages and it almost
103 certainly doesn't work any more (for tedious reasons).
104
105 <tag/The CVS repository./
106
107 We make source distributions slightly more often than binary
108 distributions; but still infrequently.  If you want more up-to-the
109 minute (but less tested) source code then you need to get access to
110 our CVS repository.
111
112 All the @fptools@ source code is held in a CVS repository. CVS is a
113 pretty good source-code control system, and best of all it works over
114 the network.
115
116 The repository holds source code only. It holds no mechanically
117 generated files at all.  So if you check out a source tree from CVS
118 you will need to install every utility so that you can build all the
119 derived files from scratch.
120
121 Giving you access to the repository entails some systems administration
122 at our end; and we are a bit nervous about being submerged in bug reports
123 about our current working copy (which is, by definition, in flux).  So
124 we are a bit cautious about offering CVS access.  Feel free to ask though!
125 </descrip>
126
127 If you are going to do any building from sources (either from a source
128 distribution or the CVS repository) then you need to read all of this
129 manual in detail.
130
131 <sect>Things to check before you start typing
132 <p>
133
134 Here's a list of things to check before you get started.
135 <enum>
136 <item>
137 <idx>Disk space needed</idx>: About 30MB (five hamburgers' worth) of disk space
138 for the most basic binary distribution of GHC; more for some
139 platforms, e.g., Alphas.  An extra ``bundle'' (e.g., concurrent
140 Haskell libraries) might take you to 8--10 hamburgers.
141
142 You'll need over 100MB (say, 20 hamburgers' worth) if you need to
143 build the basic stuff from scratch.
144
145
146 All of the above are <em/estimates/ of disk-space needs.(I don't yet
147 know the disk requirements for the non-GHC tools).
148
149 <item>
150 Use an appropriate machine, compilers, and things.
151
152 SPARC boxes, DEC Alphas running OSF/1, and PCs running Linux, FreeBSD,
153 or Solaris are all fully supported.  MIPS, AIX, Win32 and HP boxes are
154 in pretty good shape.  Section <ref id="sec:port-info" name="Port Info">
155 gives the full run-down on ports or lack thereof.
156
157 <item> Be sure that the ``pre-supposed'' utilities are installed.
158 Section <ref id="sec:pre-supposed" name="Installing Pre-Supposed
159 Utilities"> elaborates.
160
161 <item> If you have any problem when building or installing the Glasgow
162 tools, please check the ``known pitfalls'' (Section <ref
163 id="sec:build-pitfalls" name="Building Pitfalls">).  Also check the
164 known bugs page: <url
165 url="http://www.dcs.gla.ac.uk/fp/software/ghc/ghc-bugs.html">.
166 <nidx/known bugs/
167 <nidx/bugs, known/
168
169 If you feel there is still some shortcoming in our procedure or
170 instructions, please report it.
171
172 For GHC, please see the bug-reporting section of the User's guide
173 (separate document), to maximise the usefulness of your report.
174 <nidx/bugs, reporting/
175
176 If in doubt, please send a message to @glasgow-haskell-bugs@@dcs.gla.ac.uk@.
177 <nidx/bugs, mailing list/
178 </enum>
179
180
181 <sect>What machines the Glasgow tools run on
182 <label id="sec:port-info">
183 <p>
184 <nidx>ports, GHC</nidx>
185 <nidx>GHC ports</nidx>
186 <nidx>supported platforms</nidx>
187 <nidx>platforms, supported</nidx>
188
189 The main question is whether or not the Haskell compiler (GHC) runs on
190 your platform.
191
192 A ``platform'' is a architecture/manufacturer/operating-system
193 combination, such as @sparc-sun-solaris2@.  Other common ones are
194 @alpha-dec-osf2@, @hppa1.1-hp-hpux9@, @i386-unknown-linux@,
195 @i386-unknown-solaris2@, @i386-unknown-freebsd@,
196 @i386-unknown-cygwin32@, @m68k-sun-sunos4@, @mips-sgi-irix5@,
197 @sparc-sun-sunos4@, @sparc-sun-solaris2@, @powerpc-ibm-aix@.
198
199 Bear in mind that certain ``bundles'', e.g. parallel Haskell, may not
200 work on all machines for which basic Haskell compiling is supported.
201
202 Some libraries may only work on a limited number of platforms; for
203 example, a sockets library is of no use unless the operating system
204 supports the underlying BSDisms.
205
206 <sect1>What platforms the Haskell compiler (GHC) runs on
207 <p>
208 <nidx>fully-supported platforms</nidx>
209 <nidx>native-code generator</nidx>
210 <nidx>registerised ports</nidx>
211 <nidx>unregisterised ports</nidx>
212
213 The GHC hierarchy of Porting Goodness: (a)~Best is a native-code
214 generator; (b)~next best is a ``registerised''
215 port; (c)~the bare minimum is an ``unregisterised'' port.
216 (``Unregisterised'' is so terrible that we won't say more about it).
217
218 We use Sparcs running Solaris 2.5, x86 boxes running FreeBSD and
219 Linux, and DEC~Alphas running OSF/1~V2.0, so those are the
220 ``fully-supported'' platforms, unsurprisingly.  All have native-code
221 generators, for quicker compilations.  The native-code generator for
222 iX86 platforms (e.g., Linux ELF) is <em/nearly/ working; but is not
223 turned on by default.
224
225 Here's everything that's known about GHC ports.  We identify platforms
226 by their ``canonical'' CPU/Manufacturer/OS triple.
227
228 Note that some ports are fussy about which GCC version you use; or
229 require GAS; or ...
230
231 <descrip>
232 <tag/alpha-dec-osf1:/
233 <nidx>alpha-dec-osf1: fully supported</nidx>
234
235 (We have OSF/1 V3.0.) Fully supported, including native-code
236 generator.  We recommend GCC 2.6.x or later.
237
238 <tag/sparc-sun-sunos4:/
239 <nidx>sparc-sun-sunos4: fully supported</nidx>
240
241 Fully supported, including native-code generator.
242
243 <tag/sparc-sun-solaris2:/ 
244 <nidx>sparc-sun-solaris2: fully supported</nidx>
245
246 Fully supported, including native-code generator.  A couple of quirks,
247 though: (a)~the profiling libraries are bizarrely huge when compiled
248 with object splitting; (b)~the default @xargs@<ncdx/xargs/ program is
249 atrociously bad for building GHC libraries (see Section <ref
250 id="sec:pre-supposed" name="Installing Pre-Supposed Utilities"> for
251 details).
252
253 <tag/HP-PA box running HP/UX 9.x:/
254 <nidx>hppa1.1-hp-hpux: registerised port</nidx>
255
256 Works registerised.  No native-code generator.  For GCC, you're best
257 off with one of the Utah releases of GCC~2.6.3 (`u3' or later), from
258 @jaguar.cs.utah.edu@.  We think a straight GCC 2.7.x works,
259 too.
260
261 Concurrent/Parallel Haskell probably don't work (yet).
262 <nidx>hppa1.1-hp-hpux: concurrent---no</nidx>
263 <nidx>hppa1.1-hp-hpux: parallel---no</nidx>
264
265 <tag/i386-*-linux (PCs running Linux---ELF format):/
266 <nidx>i386-*-linux: registerised port</nidx>
267
268 GHC works registerised.  You <em/must/ have GCC 2.7.x or later.  The
269 iX86 native-code generator is <em/nearly/ there, but it isn't turned
270 on by default.
271
272 Profiling works, and Concurrent Haskell works.
273 <nidx>i386-*-linux: profiling---yes</nidx>
274 <nidx>i386-*-linux: concurrent---yes</nidx>
275 Parallel Haskell probably works.
276 <nidx>i386-*-linux: parallel---maybe</nidx>
277
278 On old Linux a.out systems: should be the same.
279 <nidx>i386-*-linuxaout: registerised port</nidx>
280
281 <tag>i386-*-freebsd (PCs running FreeBSD 2.2 or higher, and
282 NetBSD/OpenBSD using FreeBSD emulation):</tag> 
283 <nidx>i386-*-freebsd:registerised port</nidx> 
284
285 GHC works registerised. Supports same set of bundles as the above.
286
287 <nidx>i386-*-freebsd: profiling---yes</nidx>
288 <nidx>i386-*-freebsd: concurrent---yes</nidx>
289 <nidx>i386-*-freebsd: parallel---maybe</nidx>
290
291 <tag/i386-unknown-cygwin32:/
292 <nidx>i386-unknown-cygwin32: fully supported</nidx>
293
294 Fully supported under Win95/NT, including a native code
295 generator. Requires the @cygwin32@ compatibility library and a
296 healthy collection of GNU tools (i.e., gcc, GNU ld, bash etc.)
297 Profiling works, so does Concurrent Haskell.  
298
299 <nidx>i386-*-cygwin32: profiling---yes</nidx> 
300 <nidx>i386-*-cygwin32: concurrent---yes</nidx>
301
302 <tag/mips-sgi-irix5:/
303 <nidx>mips-sgi-irix5: registerised port</nidx>
304
305 GHC works registerised (no native-code generator).  I suspect any
306 GCC~2.6.x (or later) is OK.  The GCC that I used was built with
307 @--with-gnu-as@; turns out that is important!
308
309 Concurrent/Parallel Haskell probably don't work (yet).
310 Profiling might work, but it is untested.
311 <nidx>mips-sgi-irix5: concurrent---no</nidx>
312 <nidx>mips-sgi-irix5: parallel---no</nidx>
313 <nidx>mips-sgi-irix5: profiling---maybe</nidx>
314
315 <tag/mips-sgi-irix6:/
316 <nidx>mips-sgi-irix6: registerised port</nidx>
317
318 Thanks to the fine efforts of Tomasz Cholewo <htmlurl
319 url="mailto:tjchol01@@mecca.spd.louisville.edu"
320 name="tjchol01@@mecca.spd.louisville.edu">, GHC works registerised (no
321 native code generator) under IRIX 6.2 and 6.3. Depends on having
322 specially tweaked version of gcc-2.7.2 around, which can be downloaded
323 from <url url="http://mecca.spd.louisville.edu/~tjchol01/software/">.
324
325 Profiling works, Concurrent/Parallel Haskell might work (AFAIK, untested).
326 <nidx>mips-sgi-irix6: concurrent---maybe</nidx>
327 <nidx>mips-sgi-irix6: parallel---maybe</nidx>
328 <nidx>mips-sgi-irix6: profiling---yes</nidx>
329
330 <tag/powerpc-ibm-aix:/
331 <nidx>powerpc-ibm-aix: registerised port</nidx>
332 GHC works registerised (no native-code generator..yet).
333 I suspect 2.7.x is what you need together with this.
334
335 Concurrent/Parallel Haskell probably don't work (yet).
336 Profiling might work, but it is untested.
337 <nidx>mips-sgi-irix5: concurrent---no</nidx>
338 <nidx>mips-sgi-irix5: parallel---no</nidx>
339 <nidx>mips-sgi-irix5: profiling---maybe</nidx>
340
341 <tag/m68k-apple-macos7 (Mac, using MPW):/
342 <nidx>m68k-apple-macos7: historically ported</nidx>
343 Once upon a time, David Wright in Tasmania has actually
344 gotten GHC to run on a Macintosh.  Ditto James Thomson here at Glasgow.
345 You may be able to get Thomson's from here.  (Not sure that it will
346 excite you to death, but...)
347
348 No particularly recent GHC is known to work on a Mac.
349
350 <tag/m68k-next-nextstep3:/
351 <nidx>m68k-next-nextstep3: historically ported</nidx>
352 Carsten Schultz succeeded with a ``registerised'' port of GHC~0.29.
353 There's probably a little bit-rot since then, but otherwise it should
354 still be fine.
355
356 Concurrent/Parallel Haskell probably won't work (yet).
357 <nidx>m68k-next-nextstep3: concurrent---no</nidx>
358 <nidx>m68k-next-nextstep3: parallel---no</nidx>
359
360 <tag/m68k-sun-sunos4 (Sun3):/
361 <nidx>m68k-sun-sunos4: registerised port</nidx>
362 GHC 2.0x hasn't been tried on a Sun3.  GHC~0.26 worked registerised.
363 No native-code generator.
364
365 Concurrent/Parallel Haskell probably don't work (yet).
366 <nidx>m68k-sun-sunos4: concurrent---no</nidx>
367 <nidx>m68k-sun-sunos4: parallel---no</nidx>
368 </descrip>
369
370 <sect1>What machines the other tools run on
371 <p>
372
373 Unless you hear otherwise, the other tools work if GHC works.
374
375 Haggis requires Concurrent Haskell to work.
376 <nidx>Haggis, Concurrent Haskell</nidx>
377
378
379 <sect>Installing from binary distributions
380 <p>
381 <label id="sec:installing-bin-distrib">
382 <nidx>binary installations</nidx>
383 <nidx>installation, of binaries</nidx>
384
385 Installing from binary distributions is easiest, and recommended!
386 (Why binaries?  Because GHC is a Haskell compiler written in Haskell,
387 so you've got to ``bootstrap'' it, somehow.  We provide
388 machine-generated C-files-from-Haskell for this purpose, but it's
389 really quite a pain to use them.  If you must build GHC from its
390 sources, using a binary-distributed GHC to do so is a sensible way to
391 proceed. For the other @fptools@ programs, many are written in Haskell,
392 so binary distributions allow you to install them without having a Haskell compiler.)
393
394
395 <sect1>Bundle structure<p>
396 <nidx>bundles of binary stuff</nidx>
397
398 Binary distributions come in ``bundles,'' one bundle per file called
399 @<bundle>-<platform>.tar.gz@.  (See Section <ref
400 id="sec:port-info" name="Porting Information"> for what a platform
401 is.)  Suppose that you untar a binary-distribution bundle, thus:
402
403 <tscreen><verb>
404   % cd /your/scratch/space
405   % gunzip < ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -
406 </verb></tscreen>
407
408 Then you should find a single directory, @fptools@, with the following
409 structure:
410
411 <nidx>binary distribution, layout</nidx>
412 <nidx>directory layout (binary distributions)</nidx>
413 <descrip>
414
415 <tag>@Makefile.in@</tag> the raw material from which the @Makefile@
416 will be made (Section <ref id="sec:install" name="Installation">).
417
418 <tag>@configure@</tag> the configuration script (Section <ref
419 id="sec:install" name="Installing">).
420
421 <tag>@README@</tag> Contains this file summary.
422
423 <tag>@INSTALL@</tag> Contains this description of how to install
424 the bundle.
425
426 <tag>@ANNOUNCE@</tag> The announcement message for the bundle.
427
428 <tag>@NEWS@</tag> release notes for the bundle -- a longer version
429 of @ANNOUNCE@.  For GHC, the release notes are contained in the User
430 Guide and this file isn't present.
431
432 <tag>@bin/<platform>@</tag> contains platform-specific executable
433 files to be invoked directly by the user.  These are the files that
434 must end up in your path.
435
436 <tag>@lib/<platform>/@</tag> contains platform-specific support
437 files for the installation.  Typically there is a subdirectory for
438 each @fptools@ project, whose name is the name of the project with its
439 version number.  For example, for GHC there would be a sub-directory
440 @ghc-x.xx@/ where @x.xx@ is the version number of GHC in the bundle.
441
442 These sub-directories have the following general structure:
443
444 <descrip>
445 <tag>@libHS.a@ etc:</tag> supporting library archives.
446 <tag>@ghc-iface.prl@ etc:</tag> support scripts.
447 <tag>@import/@</tag> <idx>Interface files</idx> (@.hi@) for the prelude.
448 <tag>@include/@</tag> A few C @#include@ files.
449 </descrip>
450
451 <tag>@share/@</tag> contains platform-independent support files
452 for the installation.  Again, there is a sub-directory for each
453 @fptools@ project.
454
455 <tag>@info/@</tag> contains Emacs info documentation files (one
456 sub-directory per project).
457
458 <tag>@html/@</tag> contains HTML documentation files (one
459 sub-directory per project).
460
461 <tag>@man/@</tag> contains Unix manual pages.
462
463 </descrip>
464
465 This structure is designed so that you can unpack multiple bundles
466 (including ones from different releases or platforms) into a single
467 @fptools@ directory<footnote>this doesn't work at the
468 moment</footnote>:
469
470 <tscreen><verb>
471   % cd /your/scratch/space
472   % gunzip < ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -
473   % gunzip < happy-x.xx-sun-sparc-sunos4.tar.gz | tar xvf -
474 </verb></tscreen>
475
476 When you do multiple unpacks like this, the top level @Makefile@,
477 @README@, and @INSTALL@ get overwritten each time.
478 That's fine -- they should be the same.  Likewise, the
479 @ANNOUNCE-<bundle>@ and @NEWS-<bundle>@
480 files will be duplicated across multiple platforms, so they will be
481 harmlessly overwritten when you do multiple unpacks.  Finally, the
482 @share/@ stuff will get harmlessly overwritten when you do
483 multiple unpacks for one bundle on different platforms.
484
485 <sect2>Installing<p>
486 <label id="sec:install">
487
488 OK, so let's assume that you have unpacked your chosen bundles into a
489 scratch directory @fptools@. What next? Well, you will at least need
490 to run the @configure@<ncdx/configure/ script by changing your
491 directory to @fptools@ and typing @./configure@.  That should convert
492 @Makefile.in@ to @Makefile@.
493
494 <nidx/installing in-place/
495 <nidx/in-place installation/
496
497 You can now either start using the tools <em/in-situ/ without going
498 through any installation process, just type @make in-place@ to set the
499 tools up for this. You'll also want to add the path which @make@ will
500 now echo to your @PATH@ environment variable. This option is useful if
501 you simply want to try out the package and/or you don't have the
502 necessary priviledges (or inclination) to properly install the tools
503 locally. Note that if you do decide to install the package `properly'
504 at a later date, you have to go through the installation steps that
505 follows.
506
507 To install an @fptools@ package, you'll have to do the following:
508
509 <enum>
510 <item> Edit the @Makefile@ and check the settings of the following variables:
511
512 <nidx/directories, installation/
513 <nidx/installation directories/
514
515 <descrip>
516 <tag>@platform@</tag> the platform you are going to install for.
517
518 <tag>@bindir@</tag> the directory in which to install user-invokable
519 binaries.
520
521 <tag>@libdir@</tag> the directory in which to install
522 platform-dependent support files.
523
524 <tag>@datadir@</tag> the directory in which to install
525 platform-independent support files.
526
527 <tag>@infodir@</tag> the directory in which to install Emacs info
528 files.
529
530 <tag>@htmldir@</tag> the directory in which to install HTML
531 documentation.
532
533 <tag>@dvidir@</tag> the directory in which to install DVI
534 documentation.
535 </descrip>
536
537 The values for these variables can be set through invocation of the
538 @configure@<ncdx/configure/ script that comes with the distribution,
539 but doing an optical diff to see if the values match your expectations
540 is always a Good Idea.
541
542 <em>Instead of running @configure@, it is perfectly OK to copy
543 @Makefile.in@ to @Makefile@ and set all these variables
544 directly yourself.  But do it right!</em>
545
546 <item>Run @make install@.  This <em/ should/ work with ordinary Unix
547 @make@ -- no need for fancy stuff like GNU @make@. 
548
549 <item>@rehash@ (t?csh or zsh users), so your shell will see the new
550 stuff in your bin directory.
551
552 <item> Once done, test your ``installation'' as suggested in Section
553 <ref id="sec:GHC-test" name="Testing GHC">.  Be sure to use a @-v@
554 option, so you can see exactly what pathnames it's using.
555
556 If things don't work as expected, check the list of know pitfalls in
557 Section <ref id="sec:build-pitfalls" name="Building Pitfalls">.
558 </enum>
559
560 <nidx/link, installed as ghc/
561 When installing the user-invokable binaries, this installation
562 procedure will install GHC as @ghc-x.xx@ where @x.xx@ is the version
563 number of GHC.  It will also make a link (in the binary installation
564 directory) from @ghc@ to @ghc-x.xx@.  If you install multiple versions
565 of GHC then the last one ``wins'', and ``@ghc@'' will invoke the last
566 one installed.  You can change this manually if you want.  But
567 regardless, @ghc-x.xx@ should always invoke GHC version @x.xx@.
568
569 <sect1>What bundles there are
570 <p>
571
572 <nidx/bundles, binary/
573 There are plenty of ``non-basic'' GHC bundles.  The files for them are
574 called @ghc-x.xx-<bundle>-<platform>.tar.gz@, where
575 the @<platform>@ is as above, and @<bundle>@ is one
576 of these:
577
578 <descrip>
579
580 <tag>@prof@:</tag>  Profiling with cost-centres.  You probably want this.
581 <nidx/profiling bundles/
582 <nidx/bundles, profiling/
583
584 <tag>@conc@:</tag> Concurrent Haskell features.  You may want this.
585 <nidx/concurrent bundles/
586 <nidx/bundles, concurrent/
587
588 <tag>@par@:</tag> Parallel Haskell features (sits on top of PVM).
589 You'll want this if you're into that kind of thing.
590 <nidx/parallel bundles/
591 <nidx/bundles, parallel/
592
593 <tag>@gran@:</tag> The ``GranSim'' parallel-Haskell simulator
594 (hmm... mainly for implementors).
595 <nidx/bundles, gransim/
596 <nidx/gransim bundles/
597
598 <tag>@ticky@:</tag> ``Ticky-ticky'' profiling; very detailed
599 information about ``what happened when I ran this program''---really
600 for implementors.
601 <nidx/bundles, ticky-ticky/
602 <nidx/ticky-ticky bundles/
603
604 <tag>@prof-conc@:</tag> Cost-centre profiling for Concurrent Haskell.
605 <nidx/bundles, profiled-concurrent/
606 <nidx/profiled-concurrent bundles/
607
608 <tag>@prof-ticky@:</tag>  Ticky-ticky profiling for Concurrent Haskell.
609 <nidx/bundles, profiled-ticky/
610 <nidx/ticky-concurrent bundles/
611 </descrip>
612
613 One likely scenario is that you will grab <em/three/ binary
614 bundles---basic, profiling, and concurrent.  We don't usually make the
615 rest, although you can build them yourself from a source distribution.
616
617 <sect1>Testing that GHC seems to be working
618 <label id="sec:GHC-test">
619 <p>
620 <nidx>testing a new GHC</nidx>
621
622 The way to do this is, of course, to compile and run <em/this/ program
623 (in a file @Main.hs@):
624
625 <tscreen><verb>
626 main = putStr "Hello, world!\n"
627 </verb></tscreen>
628
629 Compile the program, using the @-v@ (verbose) flag to verify that
630 libraries, etc., are being found properly:
631 <tscreen><verb>
632 % ghc -v -o hello Main.hs
633 </verb></tscreen>
634
635 Now run it:
636 <tscreen><verb>
637 % ./hello
638 Hello, world!
639 </verb></tscreen>
640
641 Some simple-but-profitable tests are to compile and run the notorious
642 @nfib@<ncdx/nfib/ program, using different numeric types.  Start with
643 @nfib :: Int -> Int@, and then try @Integer@, @Float@, @Double@,
644 @Rational@ and maybe @Complex Float@.  Code for this is distributed in
645 @ghc/misc/examples/nfib/@ in a source distribution.
646
647 For more information on how to ``drive'' GHC, either do @ghc -help@ or
648 consult the User's Guide (distributed in several pre-compiled formats
649 with a binary distribution, or in source form in
650 @ghc/docs/users_guide@ in a source distribution).
651
652 <sect>Installing pre-supposed utilities
653 <label id="sec:pre-supposed">
654 <nidx>pre-supposed utilities</nidx>
655 <nidx>utilities, pre-supposed</nidx>
656 <p>
657
658 Here are the gory details about some utility programs you may need;
659 @perl@ and @gcc@ are the only important ones. (<idx/PVM/ is important
660 if you're going for Parallel Haskell.)  The <tt><cdx/configure/</tt>
661 script will tell you if you are missing something.
662
663 <descrip>
664 <tag>Perl:</tag>
665 <nidx>pre-supposed: Perl</nidx>
666 <nidx>Perl, pre-supposed</nidx>
667 <em/You have to have Perl to proceed!/ Perl is a language quite good
668 for doing shell-scripty tasks that involve lots of text processing.
669 It is pretty easy to install.
670
671 Perl~5 is the current version; GHC is Perl~4 friendly though.  For
672 Win32 platforms, Perl~5 is recommended, we even strongly suggest you
673 pick up a port of Perl~5 for @cygwin32@, as the common Hip/ActiveWare
674 port of Perl is not Cool Enough for our purposes.
675
676 Perl should be put somewhere so that it can be invoked by the @#!@
677 script-invoking mechanism. (I believe @/usr/bin/perl@ is preferred;
678 we use @/usr/local/bin/perl@ at Glasgow.)  The full pathname should
679 be less than 32 characters long.
680
681 <tag>GNU C (@gcc@):</tag>
682 <nidx>pre-supposed: GCC (GNU C compiler)</nidx>
683 <nidx>GCC (GNU C compiler), pre-supposed</nidx>
684 The current version is 2.7.2.
685
686 If your GCC dies with ``internal error'' on some GHC source file,
687 please let us know, so we can report it and get things improved.
688 (Exception: on @iX86@ boxes---you may need to fiddle with GHC's
689 @-monly-N-regs@ option; ask if confused...)
690
691 <nidx/EGCS/
692 EGCS (the Enhanced GNU Compiler Suite) may or may not work, we haven't
693 tested it fully yet.
694
695 <tag>PVM version 3:</tag>
696 <nidx>pre-supposed: PVM3 (Parallel Virtual Machine)</nidx>
697 <nidx>PVM3 (Parallel Virtual Machine), pre-supposed</nidx>
698 PVM is the Parallel Virtual Machine on which Parallel Haskell programs
699 run.  (You only need this if you plan to run Parallel Haskell.  
700 Concurent Haskell, which runs concurrent threads on a uniprocessor
701 doesn't need it.)
702 Underneath PVM, you can have (for example) a network of
703 workstations (slow) or a multiprocessor box (faster).
704
705 The current version of PVM is 3.3.11; we use 3.3.7.  It is readily
706 available on the net; I think I got it from @research.att.com@, in
707 @netlib@.
708
709 A PVM installation is slightly quirky, but easy to do.  Just follow
710 the @Readme@ instructions.
711
712 <tag>@xargs@ on Solaris2:</tag>
713 <nidx>xargs, presupposed (Solaris only)</nidx>
714 <nidx>Solaris: alternative xargs</nidx>
715 The GHC libraries are put together with something like:
716 <tscreen><verb>
717 find bunch-of-dirs -name '*.o' -print | xargs ar q ...
718 </verb></tscreen>
719 Unfortunately the Solaris @xargs@ (the shell-script equivalent
720 of @map@) only ``bites off'' the @.o@ files a few at a
721 time---with near-infinite rebuilding of the symbol table in
722 the @.a@ file.
723
724 The best solution is to install a sane @xargs@ from the GNU
725 findutils distribution.  You can unpack, build, and install the GNU
726 version in the time the Solaris @xargs@ mangles just one GHC
727 library.
728
729 <tag>Autoconf:</tag>
730 <nidx>pre-supposed: Autoconf</nidx>
731 <nidx>Autoconf, pre-supposed</nidx>
732 GNU Autoconf is used to build the @configure@ script from
733 @configure.in@ in a source distribution.  If you modify @configure.in@, you'll need @autoconf@ to regenerate @configure@.
734
735 <tag>@bash@ (Parallel Haskell only):</tag>
736 <nidx>bash, presupposed (Parallel Haskell only)</nidx>
737 Sadly, the @gr2ps@ script, used to convert ``parallelism profiles''
738 to PostScript, is written in Bash (GNU's Bourne Again shell).
739 This bug will be fixed (someday).
740
741 <tag>Flex:</tag>
742 <nidx>pre-supposed: flex</nidx>
743 <nidx>flex, pre-supposed</nidx>
744 This is a quite-a-bit-better-than-Lex lexer.  Used in the
745 literate-programming stuff.  You won't need it unless you're hacking
746 on some of our more obscure stuff.  On our machines, the version in
747 @/bin@ doesn't work; you need the GNU version.  Find out by saying
748 @flex --version@ (our current version is 2.5.3, but maybe earlier ones
749 will work).  If it doesn't know about the @--version@ flag, it ain't
750 the right @flex@.
751
752 <tag>Yacc:</tag>
753 <nidx>pre-supposed: non-worthless Yacc</nidx>
754 <nidx>Yacc, pre-supposed</nidx>
755 If you mess with the Haskell parser, you'll need a Yacc that can cope.
756 The unbundled @/usr/lang/yacc@ is OK; the GNU @bison@ is OK;
757 Berkeley yacc, @byacc@, is not OK.
758
759 <tag>@sed@</tag>
760 <nidx>pre-supposed: sed</nidx>
761 <nidx>sed, pre-supposed</nidx>
762 You need a working @sed@ if you are going to build from sources.
763 The build-configuration stuff needs it.
764 GNU sed version 2.0.4 is no good! It has a bug in it that is tickled
765 by the build-configuration.  2.0.5 is ok. Others are probably ok too
766 (assuming we don't create too elaborate configure scripts..)
767 </descrip>
768
769 One @fptools@ projects is worth a quick note at this point, because
770 it is useful for all the others:
771 <itemize>
772 <item> @glafp-utils@ contains several utilities which aren't
773 particularly Glasgow-ish, but Occasionally Indispensable. Like
774 @lndir@ for creating symbolic link trees.
775 </itemize>
776
777 <sect1> Tools for building the Documentation
778 <label id="pre-supposed-doc-tools">
779 <p>
780
781 The following additional tools are required if you want to format the
782 documentation that comes with the @fptools@ projects:
783
784 <descrip>
785 <tag>SGML-Tools:</tag>
786 <nidx>pre-supposed: SGML-Tools</nidx>
787 <nidx>SGML-Tools, pre-supposed</nidx>
788 All our documentation is written in SGML, using the LinuxDoc DTD that
789 comes with the SGML-Tools, which is the most shrink-wrapped SGML suite
790 that we could find.  Should unpack and build painlessly on most
791 architectures, and you can use it to generate HTML, Info, LaTeX (and
792 hence DVI and Postscript), Groff, and plain text output from any
793 LinuxDoc source file (including this manual).  Sources are available
794 from <url name="The SGML-Tools Web Page"
795 url="http://www.xs4all.nl/~cg/sgmltools/">.
796
797 <tag>TeX:</tag>
798 <nidx>pre-supposed: TeX</nidx>
799 <nidx>TeX, pre-supposed</nidx>
800 A decent TeX distribution is required if you want to produce printable
801 documentation.  We recomment teTeX, which includes just about
802 everything you need.
803 </descrip>
804
805
806 <sect>Building from source
807 <label id="sec:building-from-source">
808 <nidx>Building from source</nidx>
809 <nidx>Source, building from</nidx>
810 <p>
811
812 You've been rash enough to want to build some of
813 the Glasgow Functional Programming tools (GHC, Happy,
814 nofib, etc) from source.  You've slurped the source,
815 from the CVS repository or from a source distribution, and
816 now you're sitting looking at a huge mound of bits, wondering
817 what to do next.
818
819 Gingerly, you type @make all@.  Wrong already!
820
821 This rest of this guide is intended for duffers like me, who aren't really
822 interested in Makefiles and systems configurations, but who need
823 a mental model of the interlocking pieces so that they can 
824 make them work, extend them consistently when adding new
825 software, and lay hands on them gently when they don't work.
826
827 <sect1>Your source tree
828 <label id="sec:source-tree">
829 <p>
830
831 The source code is held in your <em/source tree/.
832 The root directory of your source tree <em/must/
833 contain the following directories and files:
834
835 <itemize>
836 <item> @Makefile@: the root Makefile.
837 <item> @mk/@: the directory that contains the
838 main Makefile code, shared by all the
839 @fptools@ software.
840 <item> @configure.in@, @config.sub@, @config.guess@:
841 these files support the configuration process.
842 <item> @install-sh@.
843 </itemize>
844
845 All the other directories are individual <em/projects/ of the
846 @fptools@ system --- for example, the Glasgow Haskell Compiler
847 (@ghc@), the Happy parser generator (@happy@), the @nofib@ benchmark
848 suite, and so on.  You can have zero or more of these.  Needless to
849 say, some of them are needed to build others.  For example, you need
850 @literate@ (or an installed copy of the tools) in order to format the
851 GHC documentation.
852
853 The important thing to remember is that even if you want only one
854 project (@happy@, say), you must have a source tree whose root
855 directory contains @Makefile@, @mk/@, @configure.in@, and the
856 project(s) you want (@happy/@ in this case).  You cannot get by with
857 just the @happy/@ directory.
858
859 <sect1>Build trees
860 <nidx/build trees/
861 <nidx/link trees, for building/
862 <p>
863
864 While you can build a system in the source tree, we don't recommend it.
865 We often want to build multiple versions of our software
866 for different architectures, or with different options (e.g. profiling).
867 It's very desirable to share a single copy of the source code among
868 all these builds.
869
870 So for every source tree we have zero or more <em/build trees/.  Each
871 build tree is initially an exact copy of the source tree, except that
872 each file is a symbolic link to the source file, rather than being a
873 copy of the source file.  There are ``standard'' Unix utilities that
874 make such copies, so standard that they go by different names:
875 @lndir@<ncdx/lndir/, @mkshadowdir@<ncdx/mkshadowdir/ are two (If you
876 don't have either, the source distribution includes sources for the
877 @X11@ @lndir@ --- check out @fptools/glafp-utils/lndir@ ).
878
879 The build tree does not need to be anywhere near the source tree in
880 the file system.  Indeed, one advantage of separating the build tree
881 from the source is that the build tree can be placed in a
882 non-backed-up partition, saving your systems support people from
883 backing up untold megabytes of easily-regenerated, and
884 rapidly-changing, gubbins.  The golden rule is that (with a single
885 exception -- Section~<ref id="sec:build-config" name="Build
886 Configuration"> <em/absolutely everything in the build tree is either
887 a symbolic link to the source tree, or else is mechanically
888 generated/.  It should be perfectly OK for your build tree to vanish
889 overnight; an hour or two compiling and you're on the road again.
890
891 You need to be a bit careful, though, that any new files you create
892 (if you do any development work) are in the source tree, not a build tree!
893
894 Remember, that the source files in the build tree are <em/symbolic
895 links/ to the files in the source tree.  (The build tree soon
896 accumulates lots of built files like @Foo.o@, as well.)  You
897 can <em/delete/ a source file from the build tree without affecting
898 the source tree (though it's an odd thing to do).  On the other hand,
899 if you <em/edit/ a source file from the build tree, you'll edit the
900 source-tree file directly.  (You can set up Emacs so that if you edit
901 a source file from the build tree, Emacs will silently create an
902 edited copy of the source file in the build tree, leaving the source
903 file unchanged; but the danger is that you think you've edited the
904 source file whereas actually all you've done is edit the build-tree
905 copy.  More commonly you do want to edit the source file.)
906
907 Like the source tree, the top level of your build tree must (a linked
908 copy of) the root directory of the @fptools@ suite.  Inside Makefiles,
909 the root of your build tree is called
910 @$(FPTOOLS_TOP)@<ncdx/FPTOOLS_TOP/.  In the rest of this document path
911 names are relative to @$(FPTOOLS_TOP)@ unless otherwise stated.  For
912 example, the file @ghc/mk/target.mk@ is actually
913 @$(FPTOOLS_TOP)/ghc/mk/target.mk@.
914
915
916 <sect1>Getting the build you want
917 <label id="sec:build-config">
918 <p>
919
920 When you build @fptools@ you will be compiling code on a particular
921 <em/host platform/, to run on a particular <em/target platform/
922 (usually the same as the host platform)<nidx>platform</nidx>.  The
923 difficulty is that there are minor differences between different
924 platforms; minor, but enough that the code needs to be a bit different
925 for each.  There are some big differences too: for a different
926 architecture we need to build GHC with a different native-code
927 generator.
928
929 There are also knobs you can turn to control how the @fptools@
930 software is built.  For example, you might want to build GHC optimised
931 (so that it runs fast) or unoptimised (so that you can compile it fast
932 after you've modified it.  Or, you might want to compile it with
933 debugging on (so that extra consistency-checking code gets included)
934 or off.  And so on.
935
936 All of this stuff is called the <em/configuration/ of your build.
937 You set the configuration using an exciting three-step process.
938 <descrip>
939
940 <tag>Step 1: get ready for configuration.</tag> Change directory to
941 @$(FPTOOLS_TOP)@ and issue the command @autoconf@<ncdx/autoconf/ (with
942 no arguments). This GNU program converts @$(FPTOOLS_TOP)/configure.in@
943 to a shell script called @$(FPTOOLS_TOP)/configure@.
944
945 Both these steps are completely platform-independent; they just mean
946 that the human-written file (@configure.in@) can be short, although
947 the resulting shell script, @configure@, and @mk/config.h.in@, are
948 long.
949
950 In case you don't have @autoconf@ we distribute the results,
951 @configure@, and @mk/config.h.in@, with the source distribution.  They
952 aren't kept in the repository, though.
953
954 <tag>Step 2: system configuration.</tag>
955 Runs the newly-created @configure@ script, thus:
956 <tscreen><verb>
957   ./configure
958 </verb></tscreen>
959 @configure@'s mission is to scurry round your computer working out
960 what architecture it has, what operating system, whether it has the
961 @vfork@ system call, where @yacc@ is kept, whether @gcc@ is available,
962 where various obscure @#include@ files are, whether it's a leap year,
963 and what the systems manager had for lunch.  It communicates these
964 snippets of information in two ways:
965
966 <itemize>
967
968 <item> It translates @mk/config.mk.in@<ncdx/config.mk.in/ to
969 @mk/config.mk@<ncdx/config.mk/, substituting for things between
970 ``@@@@@@@@}'' brackets.  So, ``@@HaveGcc@@'' will be replaced by
971 ``@YES@'' or ``@NO@'' depending on what @configure@ finds.
972 @mk/config.mk@ is included by every Makefile (directly or indirectly),
973 so the configuration information is thereby communicated to all
974 Makefiles.
975
976 <item> It translates @mk/config.h.in@<ncdx/config.h.in/ to
977 @mk/config.h@<ncdx/config.h/.  The latter is @#include@d by various C
978 programs, which can thereby make use of configuration information.
979
980 </itemize>
981
982 @configure@ caches the results of its run in @config.cache@.  Quite
983 often you don't want that; you're running @configure@ a second time
984 because something has changed.  In that case, simply delete
985 @config.cache@.
986
987 <tag>Step 3: build configuration.</tag>
988
989  Next, you say how this build of @fptools@ is to differ from the
990 standard defaults by creating a new file @mk/build.mk@<ncdx/build.mk/
991 <em/in the build tree/.  This file is the one and only file you edit
992 in the build tree, precisely because it says how this build differs
993 from the source.  (Just in case your build tree does die, you might
994 want to keep a private directory of @build.mk@ files, and use a
995 symbolic link in each build tree to point to the appropriate one.)  So
996 @mk/build.mk@ never exists in the source tree --- you create one in
997 each build tree from the template.  We'll discuss what to put in it
998 shortly.  
999
1000 </descrip>
1001
1002 And that's it for configuration. Simple, eh?
1003
1004 What do you put in your build-specific configuration file
1005 @mk/build.mk@?  <em/For almost all purposes all you will do is put
1006 make variable definitions that override those in/ @mk/config.mk.in@.
1007 The whole point of @mk/config.mk.in@ --- and its derived counterpart
1008 @mk/config.mk@ --- is to define the build configuration. It is heavily
1009 commented, as you will see if you look at it.  So generally, what you
1010 do is look at @mk/config.mk.in@, and add definitions in @mk/build.mk@
1011 that override any of the @config.mk@ definitions that you want to
1012 change.  (The override occurs because the main boilerplate file,
1013 @mk/boilerplate.mk@<ncdx/boilerplate.mk/, includes @build.mk@ after
1014 @config.mk@.)
1015
1016 For example, @config.mk.in@ contains the definition:
1017
1018 <tscreen><verb>
1019   ProjectsToBuild = glafp-utils literate ghc hslibs
1020 </verb></tscreen>
1021
1022 The accompanying comment explains that this is the list of enabled
1023 projects; that is, if (after configuring) you type @gmake all@ in
1024 @FPTOOLS_TOP@ four specified projects will be made.  If you want to
1025 add @green-card@, you can add this line to @build.mk@:
1026
1027 <tscreen><verb>
1028   ProjectsToBuild += green-card
1029 </verb></tscreen>
1030
1031 or, if you prefer,
1032
1033 <tscreen><verb>
1034   ProjectsToBuild = glafp-utils literate ghc hslibs green-card
1035 </verb></tscreen>
1036
1037 (GNU @make@ allows existing definitions to have new text appended
1038 using the ``@+=@'' operator, which is quite a convenient feature.)
1039
1040 When reading @config.mk.in@, remember that anything between
1041 ``@@...@@'' signs is going to be substituted by @configure@
1042 later.  You <em/can/ override the resulting definition if you want,
1043 but you need to be a bit surer what you are doing.  For example,
1044 there's a line that says: 
1045
1046 <tscreen><verb>
1047   YACC = @YaccCmd@
1048 </verb></tscreen>
1049
1050 This defines the Make variables @YACC@ to the pathname for a Yacc that
1051 @configure@ finds somewhere.  If you have your own pet Yacc you want
1052 to use instead, that's fine. Just add this line to @mk/build.mk@:
1053
1054 <tscreen><verb>
1055   YACC = myyacc
1056 </verb></tscreen>
1057
1058 You do not <em/have/ to have a @mk/build.mk@ file at all; if you
1059 don't, you'll get all the default settings from @mk/config.mk.in@.
1060
1061 You can also use @build.mk@ to override anything that @configure@ got
1062 wrong.  One place where this happens often is with the definition of
1063 @FPTOOLS_TOP_ABS@: this variable is supposed to be the canonical path
1064 to the top of your source tree, but if your system uses an automounter
1065 then the correct directory is hard to find automatically.  If you find
1066 that @configure@ has got it wrong, just put the correct definition in
1067 @build.mk@.
1068
1069 <sect1>The story so far
1070 <p>
1071
1072 Let's summarise the steps you need to carry to get yourself
1073 a fully-configured build tree from scratch.
1074
1075 <enum>
1076
1077 <item> Get your source tree from somewhere (CVS repository or source
1078 distribution).  Say you call the root directory @myfptools@ (it
1079 does not have to be called @fptools@).  Make sure that you have
1080 the essential files (see Section~<ref id="sec:source-tree"
1081 name="Source Tree">).
1082
1083 <item> Use @lndir@ or @mkshadowdir@ to create a build tree.
1084 <tscreen><verb>
1085     cd myfptools
1086     mkshadowdir . /scratch/joe-bloggs/myfptools-sun4
1087 </verb></tscreen>
1088 You probably want to give the build tree a name that
1089 suggests its main defining characteristic (in your mind at least),
1090 in case you later add others.
1091
1092 <item> Change directory to the build tree.  Everything is going
1093 to happen there now.
1094 <tscreen><verb>
1095     cd /scratch/joe-bloggs/myfptools-sun4
1096 </verb></tscreen>
1097 <item> Prepare for system configuration:
1098 <tscreen><verb>
1099     autoconf
1100 </verb></tscreen>
1101 (You can skip this step if you are starting from a source distribution,
1102 and you already have @configure@ and @mk/config.h.in@.)
1103
1104 <item> Do system configuration:
1105 <tscreen><verb>
1106     ./configure
1107 </verb></tscreen>
1108
1109 <item> Create the file @mk/build.mk@, 
1110 adding definitions for your desired configuration options.
1111 <tscreen><verb>
1112     emacs mk/build.mk
1113 </verb></tscreen>
1114 </enum>
1115 You can make subsequent changes to @mk/build.mk@ as often 
1116 as you like.  You do not have to run any further configuration 
1117 programs to make these changes take effect.
1118 In theory you should, however, say @gmake clean@, @gmake all@,
1119 because configuration option changes could affect anything --- but in practice you are likely to know what's affected.
1120
1121 <sect1>Making things
1122 <p>
1123
1124 At this point you have made yourself a fully-configured build tree,
1125 so you are ready to start building real things.
1126
1127 The first thing you need to know is that 
1128 <em/you must use GNU @make@, usually called @gmake@, not standard Unix @make@/.
1129 If you use standard Unix @make@ you will get all sorts of error messages
1130 (but no damage) because the @fptools@ @Makefiles@ use GNU @make@'s facilities
1131 extensively.
1132
1133 <sect1>Standard Targets
1134 <label id="sec:standard-targets">
1135 <nidx/targets, standard makefile/
1136 <nidx/makefile targets/
1137 <p>
1138
1139 In any directory you should be able to make the following:
1140 <descrip>
1141 <tag>@boot@:</tag> does the one-off preparation required to get ready
1142 for the real work.  Notably, it does @gmake depend@ in all directories
1143 that contain programs.  But @boot@ does more.  For example, you can't
1144 do @gmake depend@ in a directory of C program until you have converted
1145 the literate @.lh@ header files into standard @.h@ header files.
1146 Similarly, you can't convert a literate file to illiterate form until
1147 you have built the @literate@ tools.  @boot@ takes care of these
1148 inter-directory dependencies.
1149
1150 You should say @gmake boot@ right after configuring your build tree,
1151 but note that this is a one-off, i.e., there's no need to re-do
1152 @gmake boot@ if you should re-configure your build tree at a later
1153 stage (no harm caused if you do though).
1154
1155 <tag>@all@:</tag> makes all the final target(s) for this Makefile.
1156 Depending on which directory you are in a ``final target'' may be an
1157 executable program, a library archive, a shell script, or a Postscript
1158 file.  Typing @gmake@ alone is generally the same as typing @gmake
1159 all@.
1160
1161 <tag>@install@:</tag> installs the things built by @all@.  Where does it
1162 install them?  That is specified by @mk/config.mk.in@; you can 
1163 override it in @mk/build.mk@.
1164
1165 <tag>@uninstall@:</tag> reverses the effect of @install@.
1166
1167 <tag>@clean@:</tag> remove all easily-rebuilt files.
1168
1169 <tag>@veryclean@:</tag> remove all files that can be rebuilt at all.
1170 There's a danger here that you may remove a file that needs a more
1171 obscure utility to rebuild it (especially if you started from a source
1172 distribution).
1173
1174 <tag>@check@:</tag> run the test suite.
1175
1176 </descrip>
1177
1178 All of these standard targets automatically recurse into
1179 sub-directories.  Certain other standard targets do not:
1180
1181 <descrip>
1182
1183 <tag>@configure@:</tag> is only available in the root directory
1184 @$(FPTOOLS_TOP)@; it has been discussed in Section~<ref
1185 id="sec:build-config" name="Build Configuration">.
1186
1187 <tag>@depend@:</tag> make a @.depend@ file in each directory that needs
1188 it. This @.depend@ file contains mechanically-generated dependency
1189 information; for example, suppose a directory contains a Haskell 
1190 source module @Foo.lhs@ which imports another module @Baz@.
1191 Then the generated @.depend@ file will contain the dependency:
1192
1193 <tscreen><verb>
1194   Foo.o : Baz.hi
1195 </verb></tscreen>
1196
1197 which says that the object file @Foo.o@ depends on the interface file
1198 @Baz.hi@ generated by compiling module @Baz@.  The @.depend@ file is
1199 automatically included by every Makefile.
1200
1201 <tag>@binary-dist@:</tag> make a binary distribution.  This is the
1202 target we use to build the binary distributions of GHC and Happy.
1203
1204 <tag>@dist@:</tag> make a source distribution.  You must be in a
1205 linked buid tree to make this target.
1206 </descrip>
1207
1208 Most @Makefiles@ have targets other than these.  You can find
1209 this out by looking in the @Makefile@ itself.
1210
1211 <sect1>Fast Making
1212 <ncdx/fastmake/
1213 <nidx/dependencies, omitting/
1214 <nidx/FAST, makefile variable/
1215 <p>
1216
1217 Sometimes the dependencies get in the way: if you've made a small
1218 change to one file, and you're absolutely sure that it won't affect
1219 anything else, but you know that @make@ is going to rebuid everything
1220 anyway, the following hack may be useful:
1221
1222 <tscreen> <verb>
1223 gmake FAST=YES
1224 </verb> </tscreen>
1225
1226 This tells the make system to ignore dependencies and just build what
1227 you tell it to.  In other words, it's equivalent to temporarily
1228 removing the @.depend@ file in the current directory (where
1229 @mkdependHS@ and friends store their dependency information).
1230
1231 A bit of history: GHC used to come with a @fastmake@ script that did
1232 the above job, but GNU make provides the features we need to do it
1233 without resorting to a script.  Also, we've found that fastmaking is
1234 less useful since the advent of GHC's recompilation checker (see the
1235 User's Guide section on "Separate Compilation").
1236
1237 <sect>The @Makefile@ architecture
1238 <nidx/makefile architecture/
1239 <p>
1240
1241 @make@ is great if everything works --- you type @gmake install@ and,
1242 lo, the right things get compiled and installed in the right places.
1243 Our goal is to make this happen often, but somehow it often doesn't;
1244 instead some wierd error message eventually emerges from the bowels of
1245 a directory you didn't know existed.
1246
1247 The purpose of this section is to give you a road-map to help you figure
1248 out what is going right and what is going wrong.
1249
1250 <sect1>A small project
1251 <p>
1252
1253 To get started, let us look at the @Makefile@ for an imaginary small
1254 @fptools@ project, @small@.  Each project in @fptools@ has its own
1255 directory in @FPTOOLS_TOP@, so the @small@ project will have its own
1256 directory @FPOOLS_TOP/small/@.  Inside the @small/@ directory there
1257 will be a @Makefile@, looking something like this:
1258
1259 <nidx/Makefile, minimal/
1260 <tscreen><verb>
1261   #     Makefile for fptools project "small"
1262
1263   TOP = ..
1264   include $(TOP)/mk/boilerplate.mk
1265
1266   SRCS = $(wildcard *.lhs) $(wildcard *.c)
1267   HS_PROG = small
1268
1269   include $(TOP)/target.mk
1270 </verb></tscreen>
1271
1272 This @Makefile@ has three sections:
1273
1274 <enum>
1275
1276 <item> The first section includes<footnote>One of the most important
1277 features of GNU @make@ that we use is the ability for a @Makefile@ to
1278 include another named file, very like @cpp@'s @#include@
1279 directive.</footnote> a file of ``boilerplate'' code from the level
1280 above (which in this case will be
1281 @FPTOOLS_TOP/mk/boilerplate.mk@<ncdx/boilerplate.mk/).  As its name
1282 suggests, @boilerplate.mk@ consists of a large quantity of standard
1283 @Makefile@ code.  We discuss this boilerplate in more detail in
1284 Section~<ref id="sec:boiler" name="Boilerplate">.
1285 <nidx/include, directive in Makefiles/
1286 <nidx/Makefile inclusion/
1287
1288 Before the @include@ statement, you must define the @make@ variable
1289 @TOP@<ncdx/TOP/ to be the directory containing the @mk@ directory in
1290 which the @boilerplate.mk@ file is.  It is <em/not/ OK to simply say
1291
1292 <tscreen><verb>
1293   include ../mk/boilerplate.mk  # NO NO NO
1294 </verb></tscreen>
1295
1296 Why?  Because the @boilerplate.mk@ file needs to know where it is, so
1297 that it can, in turn, @include@ other files.  (Unfortunately, when an
1298 @include@d file does an @include@, the filename is treated relative to
1299 the directory in which @gmake@ is being run, not the directory in
1300 which the @included@ sits.)  In general, <em>every file @foo.mk@
1301 assumes that @$(TOP)/mk/foo.mk@ refers to itself.</em> It is up to the
1302 @Makefile@ doing the @include@ to ensure this is the case.
1303
1304 Files intended for inclusion in other @Makefile@s are written to have
1305 the following property: <em/after @foo.mk@ is @include@d, it leaves
1306 @TOP@ containing the same value as it had just before the @include@
1307 statement/.  In our example, this invariant guarantees that the
1308 @include@ for @target.mk@ will look in the same directory as that for
1309 @boilerplate.mk@.
1310
1311 <item> The second section defines the following standard @make@
1312 variables: @SRCS@<ncdx/SRCS/ (the source files from which is to be
1313 built), and @HS_PROG@<ncdx/HS_PROG/ (the executable binary to be
1314 built).  We will discuss in more detail what the ``standard
1315 variables'' are, and how they affect what happens, in Section~<ref
1316 id="sec:targets" name="Targets">.
1317
1318 The definition for @SRCS@ uses the useful GNU @make@ construct
1319 @$(wildcard@~$pat$@)@<ncdx/wildcard/, which expands to a list of all
1320 the files matching the pattern @pat@ in the current directory.  In
1321 this example, @SRCS@ is set to the list of all the @.lhs@ and @.c@
1322 files in the directory.  (Let's suppose there is one of each,
1323 @Foo.lhs@ and @Baz.c@.)
1324
1325 <item> The last section includes a second file of standard code,
1326 called @target.mk@<ncdx/target.mk/.  It contains the rules that tell
1327 @gmake@ how to make the standard targets (Section~<ref
1328 id="sec:standard-targets" name="Standard Targets">).  Why, you ask,
1329 can't this standard code be part of @boilerplate.mk@?  Good question.
1330 We discuss the reason later, in Section~<ref id="sec:boiler-arch"
1331 name="Boilerplate Architecture">.
1332
1333 You do not <em/have/ to @include@ the @target.mk@ file.  Instead, you
1334 can write rules of your own for all the standard targets.  Usually,
1335 though, you will find quite a big payoff from using the canned rules
1336 in @target.mk@; the price tag is that you have to understand what
1337 canned rules get enabled, and what they do (Section~<ref
1338 id="sec:targets" name="Targets">.
1339
1340 </enum>
1341
1342 In our example @Makefile@, most of the work is done by the two
1343 @include@d files.  When you say @gmake all@, the following things
1344 happen:
1345
1346 <itemize>
1347
1348 <item> @gmake@ figures out that the object files are @Foo.o@ and
1349 @Baz.o@.
1350
1351 <item> It uses a boilerplate pattern rule to compile @Foo.lhs@ to
1352 @Foo.o@ using a Haskell compiler.  (Which one?  That is set in the
1353 build configuration.)
1354
1355 <item> It uses another standard pattern rule to compile @Baz.c@ to
1356 @Baz.o@, using a C compiler.  (Ditto.)
1357
1358 <item> It links the resulting @.o@ files together to make @small@,
1359 using the Haskell compiler to do the link step.  (Why not use @ld@?
1360 Because the Haskell compiler knows what standard librarise to link in.
1361 How did @gmake@ know to use the Haskell compiler to do the link,
1362 rather than the C compiler?  Because we set the variable @HS_PROG@
1363 rather than @C_PROG@.)
1364
1365 </itemize>
1366
1367 All @Makefile@s should follow the above three-section format.
1368
1369 <sect1>A larger project
1370 <p>
1371
1372 Larger projects are usually structured into a nummber of sub-directories,
1373 each of which has its own @Makefile@.  (In very large projects, this
1374 sub-structure might be iterated recursively, though that is rare.)
1375 To give you the idea, here's part of the directory structure for
1376 the (rather large) @ghc@ project:
1377
1378 <tscreen><verb>
1379   $(FPTOOLS_TOP)/ghc/
1380     Makefile
1381
1382     mk/
1383       boilerplate.mk
1384       rules.mk
1385
1386     docs/
1387       Makefile
1388       ...source files for documentation...
1389
1390     driver/
1391       Makefile
1392       ...source files for driver...
1393
1394     compiler/
1395       Makefile
1396       parser/...source files for parser...
1397       renamer/...source files for renamer...
1398       ...etc...
1399 </verb></tscreen>
1400
1401 The sub-directories @docs@, @driver@, @compiler@, and so on, each
1402 contains a sub-component of @ghc@, and each has its own @Makefile@.
1403 There must also be a @Makefile@ in @$(FPTOOLS_TOP)/ghc@.  It does most
1404 of its work by recursively invoking @gmake@ on the @Makefile@s in the
1405 sub-directories.  We say that @ghc/Makefile@ is a <em/non-leaf
1406 @Makefile@/, because it does little except organise its children,
1407 while the @Makefile@s in the sub-directories are all <em/leaf
1408 @Makefile@s/.  (In principle the sub-directories might themselves
1409 contain a non-leaf @Makefile@ and several sub-sub-directories, but
1410 that does not happen in @ghc@.)
1411
1412 The @Makefile@ in @ghc/compiler@ is considered a leaf @Makefile@ even
1413 though the @ghc/compiler@ has sub-directories, because these sub-directories
1414 do not themselves have @Makefile@s in them.  They are just used to structure
1415 the collection of modules that make up @ghc@, but all are managed by the
1416 single @Makefile@ in @ghc/compiler@.
1417
1418 You will notice that @ghc/@ also contains a directory @ghc/mk/@.  It
1419 contains @ghc@-specific @Makefile@ boilerplate code.  More precisely:
1420
1421 <itemize> 
1422
1423 <item> @ghc/mk/boilerplate.mk@ is included at the top of
1424 @ghc/Makefile@, and of all the leaf @Makefile@s in the
1425 sub-directories.  It in turn @include@s the main boilerplate file
1426 @mk/boilerplate.mk@.
1427
1428
1429 <item> @ghc/mk/target.mk@ is @include@d at the bottom of
1430 @ghc/Makefile@, and of all the leaf @Makefiles@ in the
1431 sub-directories.  It in turn @include@s the file @mk/target.mk@.
1432
1433 </itemize>
1434
1435 So these two files are the place to look for @ghc@-wide customisation
1436 of the standard boilerplate.
1437
1438 <sect1>Boilerplate architecture
1439 <nidx/boilerplate architecture/
1440 <label id="sec:boiler-arch">
1441 <p>
1442
1443 Every @Makefile@ includes a @boilerplate.mk@<ncdx/boilerplate.mk/ file
1444 at the top, and @target.mk@<ncdx/target.mk/ file at the bottom.  In
1445 this section we discuss what is in these files, and why there have to
1446 be two of them.  In general:
1447
1448 <itemize>
1449
1450 <item> @boilerplate.mk@ consists of:
1451 <itemize>
1452 <item> <em/Definitions of millions of @make@ variables/ that
1453 collectively specify the build configuration.  Examples:
1454 <tt><cdx/HC_OPTS/</tt>, the options to feed to the Haskell compiler;
1455 <tt><cdx/NoFibSubDirs/</tt>, the sub-directories to enable within the
1456 @nofib@ project; <tt><cdx/GhcWithHc/</tt>, the name of the Haskell
1457 compiler to use when compiling @GHC@ in the @ghc@ project.  <item>
1458 <em/Standard pattern rules/ that tell @gmake@ how to construct one
1459 file from another.
1460 </itemize>
1461
1462 @boilerplate.mk@ needs to be @include@d at the <em/top/
1463 of each @Makefile@, so that the user can replace the
1464 boilerplate definitions or pattern rules by simply giving a new
1465 definition or pattern rule in the @Makefile@.  @gmake@
1466 simply takes the last definition as the definitive one.
1467
1468 Instead of <em/replacing/ boilerplate definitions, it is also quite
1469 common to <em/augment/ them. For example, a @Makefile@ might say:
1470
1471 <tscreen><verb>
1472   SRC_HC_OPTS += -O
1473 </verb></tscreen>
1474
1475 thereby adding ``@-O@'' to the end of <tt><cdx/SRC_HC_OPTS/</tt>.
1476
1477 <item> @target.mk@ contains @make@ rules for the standard
1478 targets described in Section~<ref id="sec:standard-targets"
1479 name="Standard Targets">.  These rules are selectively included,
1480 depending on the setting of certain @make@ variables.  These
1481 variables are usually set in the middle section of the
1482 @Makefile@ between the two @include@s.
1483
1484 @target.mk@ must be included at the end (rather than being part of
1485 @boilerplate.mk@) for several tiresome reasons:
1486
1487 <itemize>
1488 <item> @gmake@ commits target and dependency lists earlier than
1489 it should.  For example, @target.mk@ has a rule that looks like
1490 this: 
1491
1492 <tscreen><verb>
1493   $(HS_PROG) : $(OBJS)
1494         $(HC) $(LD_OPTS) $< -o $@
1495 </verb></tscreen>
1496
1497 If this rule was in @boilerplate.mk@ then @$(HS_PROG)@<ncdx/HS_PROG/
1498 and @$(OBJS)@<ncdx/OBJS/ would not have their final values at the
1499 moment @gmake@ encountered the rule.  Alas, @gmake@ takes a snapshot
1500 of their current values, and wires that snapshot into the rule.  (In
1501 contrast, the commands executed when the rule ``fires'' are only
1502 substituted at the moment of firing.)  So, the rule must follow the
1503 definitions given in the @Makefile@ itself.
1504
1505 <item> Unlike pattern rules, ordinary rules cannot be overriden or
1506 replaced by subsequent rules for the same target (at least not without an
1507 error message).  Including ordinary rules in @boilerplate.mk@ would
1508 prevent the user from writing rules for specific targets in specific cases.
1509
1510 <item> There are a couple of other reasons I've forgotten, but it doesn't
1511 matter too much.
1512 </itemize>
1513 </itemize>
1514
1515 <sect1>The main @mk/boilerplate.mk@ file
1516 <label id="sec:boiler">
1517 <ncdx/boilerplate.mk/
1518 <p>
1519
1520 If you look at @$(FPTOOLS_TOP)/mk/boilerplate.mk@ you will find
1521 that it consists of the following sections, each held in a separate
1522 file: 
1523
1524 <descrip> 
1525
1526 <tag><tt><cdx/config.mk/</tt></tag> is the build configuration file we
1527 discussed at length in Section~<ref id="sec:build-config" name="Build
1528 Configuration">.
1529
1530 <tag><tt><cdx/paths.mk/</tt></tag> defines @make@ variables for
1531 pathnames and file lists.  In particular, it gives definitions for:
1532
1533 <descrip>
1534 <tag><tt><cdx/SRCS/</tt>:</tag> all source files in the current directory.
1535 <tag><tt><cdx/HS_SRCS/</tt>:</tag> all Haskell source files in the current directory.
1536 It is derived from @$(SRCS)@, so if you override @SRCS@ with a new value
1537 @HS_SRCS@ will follow suit.
1538 <tag><tt><cdx/C_SRCS/</tt>:</tag> similarly for C source files.
1539 <tag><tt><cdx/HS_OBJS/</tt>:</tag> the @.o@ files derived from @$(HS_SRCS)@.
1540 <tag><tt><cdx/C_OBJS/</tt>:</tag> similarly for @$(C_SRCS)@.
1541 <tag><tt><cdx/OBJS/</tt>:</tag> the concatenation of @$(HS_OBJS)@ and @$(C_OBJS)@.
1542 </descrip>
1543
1544 Any or all of these definitions can easily be overriden by giving new
1545 definitions in your @Makefile@.  For example, if there are things in
1546 the current directory that look like source files but aren't, then
1547 you'll need to set @SRCS@ manually in your @Makefile@.  The other
1548 definitions will then work from this new definition.
1549
1550 What, exactly, does @paths.mk@ consider a ``source file'' to be.  It's
1551 based the file's suffix (e.g. @.hs@, @.lhs@, @.c@, @.lc@, etc), but
1552 this is the kind of detail that changes more rapidly, so rather than
1553 enumerate the source suffices here the best thing to do is to look in
1554 @paths.mk@.
1555
1556 <tag><tt><cdx/opts.mk/</tt></tag> defines @make@ variables for option
1557 strings to pass to each program. For example, it defines
1558 <tt><cdx/HC_OPTS/</tt>, the option strings to pass to the Haskell
1559 compiler.  See Section~<ref id="sec:suffix" name="Pattern Rules and
1560 Options">.
1561
1562 <tag><tt><cdx/suffix.mk/</tt></tag> defines standard pattern rules --
1563 see Section~<ref id="sec:suffix" name="Pattern Rules and Options">.
1564 </descrip>
1565
1566 Any of the variables and pattern rules defined by the boilerplate file
1567 can easily be overridden in any particular @Makefile@, because the
1568 boilerplace @include@ comes first.  Definitions after this @include@
1569 directive simply override the default ones in @boilerplate.mk@.
1570
1571 <sect1>Pattern rules and options
1572 <label id="sec:suffix">
1573 <nidx/Pattern rules/
1574 <p>
1575
1576 The file @suffix.mk@<ncdx/suffix.mk/ defines standard <em/pattern
1577 rules/ that say how to build one kind of file from another, for
1578 example, how to build a @.o@ file from a @.c@ file.  (GNU @make@'s
1579 <em/pattern rules/ are more powerful and easier to use than Unix
1580 @make@'s <em/suffix rules/.)
1581
1582 Almost all the rules look something like this:
1583
1584 <tscreen><verb>
1585 %.o : %.c
1586         $(RM) $@
1587         $(CC) $(CC_OPTS) -c $< -o $@
1588 </verb></tscreen>
1589
1590 Here's how to understand the rule.  It says that
1591 <em/something/@.o@ (say @Foo.o@) can be built from
1592 <em/something/@.c@ (@Foo.c@), by invoking the C compiler
1593 (path name held in @$(CC)@), passing to it the options
1594 @$(CC_OPTS)@ and the rule's dependent file of the rule
1595 @$<@ (@Foo.c@ in this case), and putting the result in
1596 the rule's target @$@@@ (@Foo.o@ in this case).
1597
1598 Every program is held in a @make@ variable defined in
1599 @mk/config.mk@ --- look in @mk/config.mk@ for the
1600 complete list.  One important one is the Haskell compiler, which is
1601 called @$(HC)@.
1602
1603 Every programs options are are held in a @make@ variables called
1604 @<prog>_OPTS@.  the @<prog>_OPTS@ variables are defined in
1605 @mk/opts.mk@.  Almost all of them are defined like this:
1606
1607 <tscreen><verb>
1608   CC_OPTS = $(SRC_CC_OPTS) $(WAY$(_way)_CC_OPTS) $($*_CC_OPTS) $(EXTRA_CC_OPTS)
1609 </verb></tscreen>
1610
1611 The four variables from which @CC_OPTS@ is built have the following meaning:
1612
1613 <descrip>
1614
1615 <tag><tt><cdx/SRC_CC_OPTS/</tt>:</tag> options passed to all C
1616 compilations.
1617
1618 <tag>@WAY_<way>_CC_OPTS@:</tag> options passed to C
1619 compilations for way @<way>@. For example,
1620 @WAY_mp_CC_OPTS@ gives options to pass to the C compiler when
1621 compiling way @mp@.  The variable @WAY_CC_OPTS@ holds
1622 options to pass to the C compiler when compiling the standard way.
1623 (Section~<ref id="sec:ways" name="Ways"> dicusses multi-way
1624 compilation.)  <tag>@<module>_CC_OPTS@:</tag> options to
1625 pass to the C compiler that are specific to module @<module>@.  For example, @SMap_CC_OPTS@ gives the specific options
1626 to pass to the C compiler when compiling @SMap.c@.
1627
1628 <tag><tt><cdx/EXTRA_CC_OPTS/</tt>:</tag> extra options to pass to all
1629 C compilations.  This is intended for command line use, thus;
1630
1631 <tscreen><verb>
1632   gmake libHS.a EXTRA_CC_OPTS="-v"
1633 </verb></tscreen>
1634 </descrip>
1635
1636 <sect1>The main @mk/target.mk@ file
1637 <label id="sec:targets">
1638 <ncdx/target.mk/
1639 <p>
1640
1641 @target.mk@ contains canned rules for all the standard targets
1642 described in Section~<ref id="sec:standard-targets" name="Standard
1643 Targets">.  It is complicated by the fact that you don't want all of
1644 these rules to be active in every @Makefile@.  Rather than have a
1645 plethora of tiny files which you can include selectively, there is a
1646 single file, @target.mk@, which selectively includes rules based on
1647 whether you have defined certain variables in your @Makefile@.  This
1648 section explains what rules you get, what variables control them, and
1649 what the rules do.  Hopefully, you will also get enough of an idea of
1650 what is supposed to happen that you can read and understand any wierd
1651 special cases yourself.
1652
1653 <descrip>
1654 <tag><tt><cdx/HS_PROG/</tt>.</tag> If @HS_PROG@ is defined, you get
1655 rules with the following targets:
1656 <descrip>
1657 <tag><tt><cdx/HS_PROG/</tt></tag> itself.  This rule links @$(OBJS)@
1658 with the Haskell runtime system to get an executable called
1659 @$(HS_PROG)@.
1660 <tag><tt><cdx/install/</tt></tag> installs @$(HS_PROG)@
1661 in @$(bindir)@ with the execute bit set.
1662 </descrip>
1663
1664 <tag><tt><cdx/C_PROG/</tt></tag> is similar to @HS_PROG@, except that
1665 the link step links @$(C_OBJS)@ with the C runtime system.
1666
1667 <tag><tt><cdx/LIBRARY/</tt></tag> is similar to @HS_PROG@, except that
1668 it links @$(LIB_OBJS)@ to make the library archive @$(LIBRARY)@, and
1669 @install@ installs it in @$(libdir)@, with the execute bit not set.
1670
1671 <tag><tt><cdx/LIB_DATA/</tt></tag> ...
1672 <tag><tt><cdx/LIB_EXEC/</tt></tag> ...
1673
1674 <tag><tt><cdx/HS_SRCS/</tt>, <tt><cdx/C_SRCS/</tt>.</tag> If @HS_SRCS@
1675 is defined and non-empty, a rule for the target @depend@ is included,
1676 which generates dependency information for Haskell programs.
1677 Similarly for @C_SRCS@.
1678 </descrip>
1679
1680 All of these rules are ``double-colon'' rules, thus
1681
1682 <tscreen><verb>
1683   install :: $(HS_PROG)
1684         ...how to install it...
1685 </verb></tscreen>
1686
1687 GNU @make@ treats double-colon rules as separate entities.  If there
1688 are several double-colon rules for the same target it takes each in
1689 turn and fires it if its dependencies say to do so.  This means that
1690 you can, for example, define both @HS_PROG@ and @LIBRARY@, which will
1691 generate two rules for @install@.  When you type @gmake install@ both
1692 rules will be fired, and both the program and the library will be
1693 installed, just as you wanted.
1694
1695 <sect1>Recursion
1696 <label id="sec:subdirs">
1697 <nidx/recursion, in makefiles/
1698 <nidx/Makefile, recursing into subdirectories/
1699 <p>
1700
1701 In leaf @Makefiles@ the variable @SUBDIRS@<ncdx/SUBDIRS/ is undefined.
1702 In non-leaf @Makefiles@, @SUBDIRS@ is set to the list of
1703 sub-directories that contain subordinate @Makefile@s.  <em/It is up to
1704 you to set @SUBDIRS@ in the @Makefile@./ There is no automation here
1705 --- @SUBDIRS@ is too important automate.
1706
1707 When @SUBDIRS@ is defined, @target.mk@ includes a rather
1708 neat rule for the standard targets (Section~<ref
1709 id="sec:standard-targets" name="Standard Targets"> that simply invokes
1710 @make@ recursively in each of the sub-directories.
1711
1712 <em/These recursive invocations are guaranteed to occur in the order
1713 in which the list of directories is specified in @SUBDIRS@./ This
1714 guarantee can be important.  For example, when you say @gmake boot@ it
1715 can be important that the recursive invocation of @make boot@ is done
1716 in one sub-directory (the include files, say) before another (the
1717 source files).  Generally, put the most independent sub-directory
1718 first, and the most dependent last.
1719
1720 <sect1>Way management
1721 <label id="sec:ways">
1722 <nidx/way management/
1723 <p>
1724
1725 We sometimes want to build essentially the same system in several
1726 different ``ways''.  For example, we want to build @ghc@'s @Prelude@
1727 libraries with and without profiling, with and without concurrency,
1728 and so on, so that there is an appropriately-built library archive to
1729 link with when the user compiles his program.  It would be possible to
1730 have a completely separate build tree for each such ``way'', but it
1731 would be horribly bureaucratic, especially since often only parts of
1732 the build tree need to be constructed in multiple ways.
1733
1734 Instead, the @target.mk@<ncdx/target.mk/ contains some clever magic to
1735 allow you to build several versions of a system; and to control
1736 locally how many versions are built and how they differ.  This section
1737 explains the magic.
1738
1739 The files for a particular way are distinguished by munging the
1740 suffix.  The ``normal way'' is always built, and its files have the
1741 standard suffices @.o@, @.hi@, and so on.  In addition, you can build
1742 one or more extra ways, each distinguished by a <em/way tag/.  The
1743 object files and interface files for one of these extra ways are
1744 distinguished by their suffix.  For example, way @mp@ has files
1745 @.mp_o@ and @.mp_hi@.  Library archives have their way tag the other
1746 side of the dot, for boring reasons; thus, @libHS_mp.a@.
1747
1748 A @make@ variable called @way@ holds the current way tag.  <em/@way@
1749 is only ever set on the command line of a recursive invocation of
1750 @gmake@./ It is never set inside a @Makefile@.  So it is a global
1751 constant for any one invocation of @gmake@.  Two other @make@
1752 variables, @way_@ and @_way@ are immediately derived from @$(way)@ and
1753 never altered.  If @way@ is not set, then neither are @way_@ and
1754 @_way@, and the invocation of @make@ will build the ``normal way''.
1755 If @way@ is set, then the other two variables are set in sympathy.
1756 For example, if @$(way)@ is ``@mp@'', then @way_@ is set to ``@mp_@''
1757 and @_way@ is set to ``@_mp@''.  These three variables are then used
1758 when constructing file names.
1759
1760 So how does @make@ ever get recursively invoked with @way@ set?  There
1761 are two ways in which this happens:
1762
1763 <itemize>
1764
1765 <item> For some (but not all) of the standard targets, when in a leaf
1766 sub-directory, @make@ is recursively invoked for each way tag in
1767 @$(WAYS)@.  You set @WAYS@ to the list of way tags you want these
1768 targets built for.  The mechanism here is very much like the recursive
1769 invocation of @make@ in sub-directories (Section~<ref id="sec:subdirs"
1770 name="Subdirectories">).
1771
1772 It is up to you to set @WAYS@ in your @Makefile@; this is how you
1773 control what ways will get built.  <item> For a useful collection of
1774 targets (such as @libHS_mp.a@, @Foo.mp_o@) there is a rule which
1775 recursively invokes @make@ to make the specified target, setting the
1776 @way@ variable.  So if you say @gmake Foo.mp_o@ you should see a
1777 recursive invocation @gmake Foo.mp_o way=mp@, and <em/in this
1778 recursive invocation the pattern rule for compiling a Haskell file
1779 into a @.o@ file will match/.  The key pattern rules (in @suffix.mk@)
1780 look like this:
1781
1782 <tscreen><verb>
1783   %.$(way_)o : %.lhs
1784         $(HC) $(HC_OPTS) $< -o $@
1785 </verb></tscreen>
1786
1787 Neat, eh?
1788 </itemize>
1789
1790
1791 <sect1>When the canned rule isn't right
1792 <p>
1793
1794 Sometimes the canned rule just doesn't do the right thing.  For
1795 example, in the @nofib@ suite we want the link step to print out
1796 timing information.  The thing to do here is <em/not/ to define
1797 @HS_PROG@ or @C_PROG@, and instead define a special purpose rule in
1798 your own @Makefile@.  By using different variable names you will avoid
1799 the canned rules being included, and conflicting with yours.
1800
1801
1802 <sect>Booting/porting from C (@.hc@) files
1803 <label id="sec:booting-from-C">
1804 <nidx>building GHC from .hc files</nidx>
1805 <nidx>booting GHC from .hc files</nidx>
1806 <nidx>porting GHC</nidx>
1807 <p>
1808
1809 This section is for people trying to get GHC going by using the
1810 supplied intermediate C (@.hc@) files.  This would probably be because
1811 no binaries have been provided, or because the machine is not ``fully
1812 supported.''
1813
1814 The intermediate C files are normally made available together with a
1815 source release, please check the announce message for exact directions
1816 of where to find them. If we've haven't made them available or you
1817 can't find them, please ask.
1818
1819 Assuming you've got them, unpack them on top of a fresh source tree.
1820 Then follow the `normal' instructions in Section~<ref
1821 id="sec:building-from-source" name="Buiding From Source"> for setting
1822 up a build tree and configuring it. The only extra thing to remember
1823 when booting from @.hc@ files is to add the following line to the
1824 @build.mk@ file:
1825
1826 <tscreen><verb>
1827 GhcWithHscBuiltViaC=YES
1828 </verb></tscreen>
1829 <ncdx/GhcWithHscBuiltViaC/
1830
1831 and proceed with doing a @make boot@ followed by a @make all@.
1832
1833 That's the mechanics of the boot process, but, of course, if you're
1834 trying to boot on a platform that is not supported and significantly
1835 `different' from any of the supported ones, this is only the start of
1836 the adventure...(ToDo: porting tips - stuff to look out for, etc.)
1837
1838 <sect>Known pitfalls in building Glasgow Haskell
1839 <label id="sec:build-pitfalls">
1840 <nidx>problems, building</nidx>
1841 <nidx>pitfalls, in building</nidx>
1842 <nidx>building pitfalls</nidx>
1843 <p>
1844
1845 WARNINGS about pitfalls and known ``problems'':
1846
1847 <enum>
1848
1849 <item>
1850 One difficulty that comes up from time to time is running out of space
1851 in @/tmp@.  (It is impossible for the configuration stuff to
1852 compensate for the vagaries of different sysadmin approaches re temp
1853 space.)
1854 <nidx/tmp, running out of space in/
1855
1856 The quickest way around it is @setenv TMPDIR /usr/tmp@<ncdx/TMPDIR/ or
1857 even @setenv TMPDIR .@ (or the equivalent incantation with the shell
1858 of your choice).
1859
1860 The best way around it is to say
1861 <tscreen><verb>
1862 export TMPDIR=<dir>
1863 </verb></tscreen>
1864 in your @build.mk@ file.
1865 Then GHC and the other @fptools@ programs will use the appropriate directory
1866 in all cases.
1867
1868
1869 <item>
1870 In compiling some support-code bits, e.g., in @ghc/runtime/gmp@ and
1871 even in @ghc/lib@, you may get a few C-compiler warnings.  We think
1872 these are OK.
1873
1874 <item>
1875 When compiling via C, you'll sometimes get ``warning: assignment from
1876 incompatible pointer type'' out of GCC.  Harmless.
1877
1878 <item>
1879 Similarly, @ar@chiving warning messages like the following are not
1880 a problem:
1881 <tscreen><verb>
1882 ar: filename GlaIOMonad__1_2s.o truncated to GlaIOMonad_
1883 ar: filename GlaIOMonad__2_2s.o truncated to GlaIOMonad_
1884 ...
1885 </verb></tscreen>
1886
1887
1888 <item>
1889 Also harmless are some specialisation messages that you may see when
1890 compiling GHC; e.g.:
1891 <tscreen><verb>
1892 SPECIALISATION MESSAGES (Desirable):
1893 *** INSTANCES
1894 {-# SPECIALIZE instance Eq [Class] #-}
1895 {-# SPECIALIZE instance Eq (Class, [Class]) #-}
1896 {-# SPECIALIZE instance Outputable [ClassOp] #-}
1897 {-# SPECIALIZE instance Outputable [Id] #-}
1898 </verb></tscreen>
1899
1900
1901 <item> In compiling the compiler proper (in @compiler/@), you <em/may/
1902 get an ``Out of heap space'' error message.  These can vary with the
1903 vagaries of different systems, it seems.  The solution is simple:
1904 (1)~add a suitable @-H@ flag to the @<module>_HC_OPTS@ @make@ variable
1905 in the appropriate @Makefile@; (2)~try again: @gmake@.  (Section~<ref
1906 id="sec:suffix" name="Pattern Rules and Options">.)
1907
1908 Alternatively, just cut to the chase scene:
1909 <tscreen><verb>
1910 % cd ghc/compiler
1911 % make EXTRA_HC_OPTS=-H32m  # or some nice big number
1912 </verb></tscreen>
1913
1914
1915 <item>
1916 Not too long into the build process, you may get a huge complaint
1917 of the form:
1918 <tscreen><verb>
1919 Giant error 'do'ing getopts.pl:  at ./lit2pgm.BOOT line 27.
1920 </verb></tscreen>
1921 This indicates that your @perl@ was mis-installed; the binary is
1922 unable to find the files for its ``built-in'' library.  Speak to your
1923 perl installer, then re-try.
1924
1925
1926 <item>
1927 If you try to compile some Haskell, and you get errors from GCC about
1928 lots of things from @/usr/include/math.h@, then your GCC was
1929 mis-installed.  @fixincludes@ wasn't run when it should've been.
1930
1931 As @fixincludes@ is now automagically run as part of GCC installation,
1932 this bug also suggests that you have an old GCC.
1933
1934
1935 <item>
1936 You <em/may/ need to re-@ranlib@<ncdx/ranlib/ your libraries (on Sun4s).
1937
1938 <tscreen><verb>
1939 % cd $(libdir)/ghc-x.xx/sparc-sun-sunos4
1940 % foreach i ( `find . -name '*.a' -print` ) # or other-shell equiv...
1941 ?    ranlib $i
1942 ?    # or, on some machines: ar s $i
1943 ? end
1944 </verb></tscreen>
1945
1946 We'd be interested to know if this is still necessary.
1947
1948
1949 <item>
1950 If you end up making documents that involve (La)TeX and/or @tib@
1951 (Simon's favourite), the odds are that something about your/our setup
1952 will reach out and bite you.  Yes, please complain; meanwhile, you can
1953 do @make -n whatever.dvi@ to see the intended commands, then try to
1954 muddle through, doing them by hand.
1955
1956
1957 <item>
1958 GHC's sources go through @cpp@ before being compiled, and @cpp@ varies
1959 a bit from one Unix to another.  One particular gotcha is macro calls
1960 like this:
1961
1962 <tscreen><verb>
1963   SLIT("Hello, world")
1964 </verb></tscreen>
1965
1966 Some @cpp@s treat the comma inside the string as separating two macro
1967 arguments, so you get
1968
1969 <tscreen><verb>
1970   :731: macro `SLIT' used with too many (2) args
1971 </verb></tscreen>
1972
1973 Alas, @cpp@ doesn't tell you the offending file!
1974
1975 Workaround: don't put wierd things in string args to @cpp@ macros.
1976 </enum>
1977
1978 </article>