Next Previous Contents

5. Installing pre-supposed utilities

Here are the gory details about some utility programs you may need; perl and gcc are the only important ones. (PVM is important if you're going for Parallel Haskell.) The configure script will tell you if you are missing something.

Perl:

You have to have Perl to proceed! Perl is a language quite good for doing shell-scripty tasks that involve lots of text processing. It is pretty easy to install.

Perl 5 is the current version; GHC is Perl 4 friendly though. For Win32 platforms, Perl 5 is recommended, we even strongly suggest you pick up a port of Perl 5 for cygwin32, as the common Hip/ActiveWare port of Perl is not Cool Enough for our purposes.

Perl should be put somewhere so that it can be invoked by the #! script-invoking mechanism. (I believe /usr/bin/perl is preferred; we use /usr/local/bin/perl at Glasgow.) The full pathname should be less than 32 characters long.

GNU C (gcc):

The current version is 2.7.2.

If your GCC dies with ``internal error'' on some GHC source file, please let us know, so we can report it and get things improved. (Exception: on iX86 boxes---you may need to fiddle with GHC's -monly-N-regs option; ask if confused...)

EGCS (the Enhanced GNU Compiler Suite) may or may not work, we haven't tested it fully yet.

PVM version 3:

PVM is the Parallel Virtual Machine on which Parallel Haskell programs run. (You only need this if you plan to run Parallel Haskell. Concurent Haskell, which runs concurrent threads on a uniprocessor doesn't need it.) Underneath PVM, you can have (for example) a network of workstations (slow) or a multiprocessor box (faster).

The current version of PVM is 3.3.11; we use 3.3.7. It is readily available on the net; I think I got it from research.att.com, in netlib.

A PVM installation is slightly quirky, but easy to do. Just follow the Readme instructions.

xargs on Solaris2:

The GHC libraries are put together with something like:

find bunch-of-dirs -name '*.o' -print | xargs ar q ...
Unfortunately the Solaris xargs (the shell-script equivalent of map) only ``bites off'' the .o files a few at a time---with near-infinite rebuilding of the symbol table in the .a file.

The best solution is to install a sane xargs from the GNU findutils distribution. You can unpack, build, and install the GNU version in the time the Solaris xargs mangles just one GHC library.

Autoconf:

GNU Autoconf is used to build the configure script from configure.in in a source distribution. If you modify configure.in, you'll need autoconf to regenerate configure.

bash (Parallel Haskell only):

Sadly, the gr2ps script, used to convert ``parallelism profiles'' to PostScript, is written in Bash (GNU's Bourne Again shell). This bug will be fixed (someday).

Makeindex:

You won't need this unless you are re-making our documents. Makeindex normally comes with a TeX distribution, but if not, we can provide the latest and greatest.

Tgrind:

This is required only if you remake lots of our documents and you use the -t tgrind option with lit2latex (also literate programming), to do ``fancy'' typesetting of your code. Unlikely.

Flex:

This is a quite-a-bit-better-than-Lex lexer. Used in the literate-programming stuff. You won't need it unless you're hacking on some of our more obscure stuff. On our machines, the version in /bin doesn't work; you need the GNU version. Find out by saying flex --version (our current version is 2.5.3, but maybe earlier ones will work). If it doesn't know about the --version flag, it ain't the right flex.

Yacc:

If you mess with the Haskell parser, you'll need a Yacc that can cope. The unbundled /usr/lang/yacc is OK; the GNU bison is OK; Berkeley yacc, byacc, is not OK.

sed

You need a working sed if you are going to build from sources. The build-configuration stuff needs it. GNU sed version 2.0.4 is no good! It has a bug in it that is tickled by the build-configuration. 2.0.5 is ok. Others are probably ok too (assuming we don't create too elaborate configure scripts..)

Two fptools projects are worth a quick note at this point, because they are useful for all the others:


Next Previous Contents