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