[project @ 2001-04-23 15:21:48 by rrt]
[ghc-hetmet.git] / ghc / docs / users_guide / installing.sgml
index 16914d3..ae44c33 100644 (file)
@@ -1,42 +1,87 @@
 <Chapter id="sec-installing-bin-distrib">
-<Title>Installing from binary distributions</Title>
+  <Title>Installing GHC</Title>
 <IndexTerm><Primary>binary installations</Primary></IndexTerm>
 <IndexTerm><Primary>installation, of binaries</Primary></IndexTerm>
 
 <Para>
 Installing from binary distributions is easiest, and recommended!
-(Why binaries?  Because GHC is a Haskell compiler written in Haskell,
-so you've got to ``bootstrap'' it, somehow.  We provide
-machine-generated C-files-from-Haskell for this purpose, but it's
-really quite a pain to use them.  If you must build GHC from its
-sources, using a binary-distributed GHC to do so is a sensible way to
-proceed. For the other <Literal>fptools</Literal> programs, many are written in Haskell,
-so binary distributions allow you to install them without having a Haskell compiler.)
+(Why binaries? Because GHC is a Haskell compiler written in Haskell,
+so you've got to bootstrap it somehow.  We provide machine-generated
+C-files-from-Haskell for this purpose, but it's really quite a pain to
+use them.  If you must build GHC from its sources, using a
+binary-distributed GHC to do so is a sensible way to proceed. For the
+other <Literal>fptools</Literal> programs, many are written in
+Haskell, so binary distributions allow you to install them without
+having a Haskell compiler.)
 </Para>
 
 <Para>This guide is in two parts: installing on Unix-a-likes, and installing on Windows.</Para>
 
 
-<Sect1><Title>Installing on Unix-a-likes</Title>
+  <Sect1><Title>Installing on Unix-a-likes</Title>
+
+    <sect2>
+      <title>When a platform-specific package is available</title>
+      
+      <para>For certain platforms, we provide GHC binaries packaged
+      using the native package format for the platform.  This is
+      likely to be by far the best way to install GHC for your
+      platform if one of these packages is available, since
+      dependencies will automatically be handled and the package
+      system normally provides a way to uninstall the package at a
+      later date.</para>
+
+      <para>We generally provide the following packages:</para>
+
+      <variablelist>
+       <varlistentry>
+         <term>RedHat Linux/x86</term>
+         <listitem>
+           <para>RPM source & binary packages for RedHat Linux (x86
+           only) are available for most major releases.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Debian Linux/x86</term>
+         <listitem>
+           <para>Debian packages for Linux (x86 only), also for most
+           major releases.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>FreeBSD/x86</term>
+         <listitem>
+           <para>On FreeBSD/x86, GHC can be installed using either
+           the ports tree (<literal>cd /usr/ports/lang/ghc && make
+           install</literal>) or from a pre-compiled package
+           available from your local FreeBSD mirror.</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+      
+      <para>Other platform-specific packages may be available, check
+      the GHC download page for details.</para>
+    </sect2>
 
 <Sect2>
-<Title>Bundle structure</Title>
+<Title>GHC binary distributions</Title>
 
 <Para>
 <IndexTerm><Primary>bundles of binary stuff</Primary></IndexTerm>
 </Para>
 
 <Para>
-Binary distributions come in ``bundles,'' one bundle per file called
-<Literal>&lt;bundle&gt;-&lt;platform&gt;.tar.gz</Literal>.  (See the building guide for the definition of a platform.)  Suppose that you untar a binary-distribution bundle, thus:
+Binary distributions come in &ldquo;bundles,&rdquo; one bundle per file called
+<literal><replaceable>bundle</replaceable>-<replaceable>platform</replaceable>.tar.gz</Literal>.  (See the building guide for the definition of a platform.)  Suppose that you untar a binary-distribution bundle, thus:
 </Para>
 
 <Para>
 
 <Screen>
 % cd /your/scratch/space
-% gunzip &#60; ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -
-</Screen>
+% gunzip &#60; ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -</Screen>
 
 </Para>
 
@@ -97,7 +142,7 @@ Guide and this file isn't present.
 </Para>
 </ListItem></VarListEntry>
 <VarListEntry>
-<Term><Literal>bin/&lt;platform&gt;</Literal></Term>
+           <Term><Literal>bin/<replaceable>platform</replaceable></Literal></Term>
 <ListItem>
 <Para>
 contains platform-specific executable
@@ -106,7 +151,7 @@ must end up in your path.
 </Para>
 </ListItem></VarListEntry>
 <VarListEntry>
-<Term><Literal>lib/&lt;platform&gt;/</Literal></Term>
+<Term><Literal>lib/<replaceable>platform</replaceable>/</Literal></Term>
 <ListItem>
 <Para>
 contains platform-specific support
@@ -124,7 +169,7 @@ These sub-directories have the following general structure:
 <VariableList>
 
 <VarListEntry>
-<Term><Literal>libHS.a</Literal> etc:</Term>
+<Term><Literal>libHSstd.a</Literal> etc:</Term>
 <ListItem>
 <Para>
 supporting library archives.
@@ -164,14 +209,6 @@ for the installation.  Again, there is a sub-directory for each
 </Para>
 </ListItem></VarListEntry>
 <VarListEntry>
-<Term><Literal>info/</Literal></Term>
-<ListItem>
-<Para>
-contains Emacs info documentation files (one
-sub-directory per project).
-</Para>
-</ListItem></VarListEntry>
-<VarListEntry>
 <Term><Literal>html/</Literal></Term>
 <ListItem>
 <Para>
@@ -189,42 +226,6 @@ contains Unix manual pages.
 </VariableList>
 </Para>
 
-<Para>
-This structure is designed so that you can unpack multiple bundles
-(including ones from different releases or platforms) into a single
-<Literal>fptools</Literal> directory
-<FOOTNOTE>
-
-<Para>
-this doesn't work at the
-moment
-</Para>
-
-</FOOTNOTE>
-:
-</Para>
-
-<Para>
-
-<Screen>
-% cd /your/scratch/space
-% gunzip &#60; ghc-x.xx-sun-sparc-solaris2.tar.gz | tar xvf -
-% gunzip &#60; happy-x.xx-sun-sparc-sunos4.tar.gz | tar xvf -
-</Screen>
-
-</Para>
-
-<Para>
-When you do multiple unpacks like this, the top level <Literal>Makefile</Literal>,
-<Literal>README</Literal>, and <Literal>INSTALL</Literal> get overwritten each time.
-That's fine&mdash;they should be the same.  Likewise, the
-<Literal>ANNOUNCE-&lt;bundle&gt;</Literal> and <Literal>NEWS-&lt;bundle&gt;</Literal>
-files will be duplicated across multiple platforms, so they will be
-harmlessly overwritten when you do multiple unpacks.  Finally, the
-<Literal>share/</Literal> stuff will get harmlessly overwritten when you do
-multiple unpacks for one bundle on different platforms.
-</Para>
-
 <Sect3 id="sec-install">
 <Title>Installing</Title>
 
@@ -239,9 +240,6 @@ directory to <Literal>fptools</Literal> and typing <Literal>./configure</Literal
 <Para>
 <IndexTerm><Primary>installing in-place</Primary></IndexTerm>
 <IndexTerm><Primary>in-place installation</Primary></IndexTerm>
-</Para>
-
-<Para>
 You can now either start using the tools <Emphasis>in-situ</Emphasis> without going
 through any installation process, just type <Literal>make in-place</Literal> to set the
 tools up for this. You'll also want to add the path which <Literal>make</Literal> will
@@ -328,21 +326,26 @@ documentation.
 </VariableList>
 
 The values for these variables can be set through invocation of the
-<Command>configure</Command><IndexTerm><Primary>configure</Primary></IndexTerm> script that comes with the distribution,
-but doing an optical diff to see if the values match your expectations
-is always a Good Idea.
-
-<Emphasis>Instead of running <Command>configure</Command>, it is perfectly OK to copy
-<Filename>Makefile.in</Filename> to <Filename>Makefile</Filename> and set all these variables
-directly yourself.  But do it right!</Emphasis>
+<Command>configure</Command><IndexTerm><Primary>configure</Primary></IndexTerm>
+script that comes with the distribution, but doing an optical diff to
+see if the values match your expectations is always a Good Idea.
+</para>
 
+<para>
+<Emphasis>Instead of running <Command>configure</Command>, it is
+perfectly OK to copy <Filename>Makefile.in</Filename> to
+<Filename>Makefile</Filename> and set all these variables directly
+yourself.  But do it right!</Emphasis>
 </Para>
+
 </ListItem>
 <ListItem>
 
 <Para>
-Run <Literal>make install</Literal>.  This <Emphasis> should</Emphasis> work with ordinary Unix
-<Literal>make</Literal>&mdash;no need for fancy stuff like GNU <Literal>make</Literal>. 
+Run <Literal>make install</Literal>.  This <Emphasis>
+should</Emphasis> work with ordinary Unix
+<Literal>make</Literal>&mdash;no need for fancy stuff like GNU
+<Literal>make</Literal>.
 
 </Para>
 </ListItem>
@@ -357,11 +360,11 @@ stuff in your bin directory.
 <ListItem>
 
 <Para>
- Once done, test your ``installation'' as suggested in 
+ Once done, test your &ldquo;installation&rdquo; as suggested in 
 <XRef LinkEnd="sec-GHC-test">.  Be sure to use a <Literal>-v</Literal>
 option, so you can see exactly what pathnames it's using.
 
-If things don't work as expected, check the list of know pitfalls in
+If things don't work as expected, check the list of known pitfalls in
 the building guide.
 </Para>
 </ListItem>
@@ -376,7 +379,7 @@ When installing the user-invokable binaries, this installation
 procedure will install GHC as <Literal>ghc-x.xx</Literal> where <Literal>x.xx</Literal> is the version
 number of GHC.  It will also make a link (in the binary installation
 directory) from <Literal>ghc</Literal> to <Literal>ghc-x.xx</Literal>.  If you install multiple versions
-of GHC then the last one ``wins'', and ``<Literal>ghc</Literal>'' will invoke the last
+of GHC then the last one &ldquo;wins&rdquo;, and &ldquo;<Literal>ghc</Literal>&rdquo; will invoke the last
 one installed.  You can change this manually if you want.  But
 regardless, <Literal>ghc-x.xx</Literal> should always invoke GHC version <Literal>x.xx</Literal>.
 </Para>
@@ -388,11 +391,12 @@ regardless, <Literal>ghc-x.xx</Literal> should always invoke GHC version <Litera
 <Title>What bundles there are</Title>
 
 <Para>
-<IndexTerm><Primary>bundles, binary</Primary></IndexTerm>
-There are plenty of ``non-basic'' GHC bundles.  The files for them are
-called <Literal>ghc-x.xx-&lt;bundle&gt;-&lt;platform&gt;.tar.gz</Literal>, where
-the <Literal>&lt;platform&gt;</Literal> is as above, and <Literal>&lt;bundle&gt;</Literal> is one
-of these:
+<IndexTerm><Primary>bundles, binary</Primary></IndexTerm> There are
+plenty of &ldquo;non-basic&rdquo; GHC bundles.  The files for them are
+called
+<Literal>ghc-x.xx-<replaceable>bundle</replaceable>-<replaceable>platform</replaceable>.tar.gz</Literal>,
+where the <replaceable>platform</replaceable> is as above, and
+<replaceable>bundle</replaceable> is one of these:
 </Para>
 
 <Para>
@@ -408,15 +412,6 @@ Profiling with cost-centres.  You probably want this.
 </Para>
 </ListItem></VarListEntry>
 <VarListEntry>
-<Term><Literal>conc</Literal>:</Term>
-<ListItem>
-<Para>
-Concurrent Haskell features.  You may want this.
-<IndexTerm><Primary>concurrent bundles</Primary></IndexTerm>
-<IndexTerm><Primary>bundles, concurrent</Primary></IndexTerm>
-</Para>
-</ListItem></VarListEntry>
-<VarListEntry>
 <Term><Literal>par</Literal>:</Term>
 <ListItem>
 <Para>
@@ -430,7 +425,7 @@ You'll want this if you're into that kind of thing.
 <Term><Literal>gran</Literal>:</Term>
 <ListItem>
 <Para>
-The ``GranSim'' parallel-Haskell simulator
+The &ldquo;GranSim&rdquo; parallel-Haskell simulator
 (hmm&hellip; mainly for implementors).
 <IndexTerm><Primary>bundles, gransim</Primary></IndexTerm>
 <IndexTerm><Primary>gransim bundles</Primary></IndexTerm>
@@ -440,40 +435,28 @@ The ``GranSim'' parallel-Haskell simulator
 <Term><Literal>ticky</Literal>:</Term>
 <ListItem>
 <Para>
-``Ticky-ticky'' profiling; very detailed
-information about ``what happened when I ran this program''&mdash;really
+&ldquo;Ticky-ticky&rdquo; profiling; very detailed
+information about &ldquo;what happened when I ran this program&rdquo;&mdash;really
 for implementors.
 <IndexTerm><Primary>bundles, ticky-ticky</Primary></IndexTerm>
 <IndexTerm><Primary>ticky-ticky bundles</Primary></IndexTerm>
 </Para>
 </ListItem></VarListEntry>
-<VarListEntry>
-<Term><Literal>prof-conc</Literal>:</Term>
-<ListItem>
-<Para>
-Cost-centre profiling for Concurrent Haskell.
-<IndexTerm><Primary>bundles, profiled-concurrent</Primary></IndexTerm>
-<IndexTerm><Primary>profiled-concurrent bundles</Primary></IndexTerm>
-</Para>
-</ListItem></VarListEntry>
-<VarListEntry>
-<Term><Literal>prof-ticky</Literal>:</Term>
-<ListItem>
-<Para>
-Ticky-ticky profiling for Concurrent Haskell.
-<IndexTerm><Primary>bundles, profiled-ticky</Primary></IndexTerm>
-<IndexTerm><Primary>ticky-concurrent bundles</Primary></IndexTerm>
-</Para>
-</ListItem></VarListEntry>
 </VariableList>
 </Para>
 
 <Para>
-One likely scenario is that you will grab <Emphasis>three</Emphasis> binary
-bundles&mdash;basic, profiling, and concurrent.  We don't usually make the
+One likely scenario is that you will grab <Emphasis>two</Emphasis>
+binary bundles&mdash;basic, and profiling.  We don't usually make the
 rest, although you can build them yourself from a source distribution.
 </Para>
 
+<para>The various GHC bundles are designed to be unpacked into the
+same directory; then installing as per the directions above will
+install the whole lot in one go.  Note: you <emphasis>must</emphasis>
+at least have the basic GHC binary distribution bundle, these extra
+bundles won't install on their own.</para>
+
 </Sect3>
 
 <Sect3 id="sec-GHC-test">
@@ -502,8 +485,7 @@ Compile the program, using the <Literal>-v</Literal> (verbose) flag to verify th
 libraries, etc., are being found properly:
 
 <Screen>
-% ghc -v -o hello Main.hs
-</Screen>
+% ghc -v -o hello Main.hs</Screen>
 
 </Para>
 
@@ -512,8 +494,7 @@ Now run it:
 
 <Screen>
 % ./hello
-Hello, world!
-</Screen>
+Hello, world!</Screen>
 
 </Para>
 
@@ -525,12 +506,8 @@ Some simple-but-profitable tests are to compile and run the notorious
 distributed in <Literal>ghc/misc/examples/nfib/</Literal> in a source distribution.
 </Para>
 
-<Para>
-For more information on how to ``drive'' GHC, either do <Literal>ghc -help</Literal> or
-consult the User's Guide (distributed in several pre-compiled formats
-with a binary distribution, or in source form in
-<Literal>ghc/docs/users&lowbar;guide</Literal> in a source distribution).
-</Para>
+<para>For more information on how to &ldquo;drive&rdquo; GHC, read
+on...</para>
 
 </Sect3>
 
@@ -539,517 +516,302 @@ with a binary distribution, or in source form in
 </Sect1>
 
 
-<Sect1><Title>Installing on Windows</Title>
-
-<Para>
-Getting the Glasgow Haskell Compiler(GHC) to run on Windows95/98 or
-Windows NT4 platforms can be a bit of a trying experience. This document
-tries to simplify the task by enumerating the steps you need to
-follow in order to set up and configure your machine to run GHC (at
-least that's the intention ;-)
-</Para>
-
-<Sect2><Title>System requirements</Title>
-
-<Para>
-An installation of GHC requires ca. 70M of disk space. The size of the
-installed GHC distribution is just(!) 17M, the rest is needed by
-supporting software.
-</Para>
+<Sect1 id="sec-install-windows"><Title>Installing on Windows</Title>
 
 <Para>
-To run GHC comfortably, your machine should have at least 32M of memory.
+Getting the Glasgow Haskell Compiler (GHC) to run on Windows platforms can
+be a bit of a trying experience. It should be much easier now than in the
+past, since all the software required to build and use GHC is included in
+the InstallShield.
 </Para>
 
-</Sect2>
-
-
-<Sect2><Title>Your environment variables</Title>
-
 <Para>
-Much of the Unixy stuff below involves setting environment variables.  For example, on WinNT/Win2k, to edit your <Constant>PATH</Constant> variable,
-do the following:
+An installation of GHC requires about 70M of disk space (which can be
+reduced by choosing a &ldquo;compact&rdquo; installation).
+To run GHC comfortably, your machine should have at least
+64M of memory.
 </Para>
 
-<ItemizedList>
-<ListItem><Para>Press Start/Settings/Control Panels</Para></ListItem>
-<ListItem><Para>Double-click System</Para></ListItem>
-<ListItem><Para>Press Advanced</Para></ListItem>
-<ListItem><Para>Press Environment Variables</Para></ListItem>
-<ListItem><Para>Under System Variables, select PATH</Para></ListItem>
-<ListItem><Para>Press Edit</Para></ListItem>
-<ListItem><Para>Add "<Filename>;C:/whatever/</Filename>" to the end of the string (for example)</Para></ListItem>
-<ListItem><Para>Press OK</Para></ListItem>
-</ItemizedList>
 
-<Para>
-Some environment variables are ``user variables'' and
-some are ``system variables''.  I'm not sure of the difference
-but both are changed though the same dialogue.
-</Para>
+<Sect2><Title>Installing GHC</Title>
 
 <Para>
-In addition, when running a Cygwin (see <XRef LinkEnd="sec-required">) shell
-you can set environment variables in your <Filename>.bashrc</Filename> file.
-But it is better to set your environment variables from the
-control panel (they get inherited by bash) because then they are visible
-to applications that aren't started by bash.  For example,
-when you're invoking CVS (and ssh) via Emacs keybindings;
-it invokes <Filename>cvs.exe</Filename> without going via bash.
+Download the latest GHC distribution (ghc-4.08 InstallShield installer, 19M)
+from <ULink
+URL="http://www.haskell.org/ghc/download.html">haskell.org</ULink>
+It is packaged up using an installer that should be familiar-looking to
+Windows users.
 </Para>
 
 <Para>
-On a Win9x machine you need to edit <Filename>autoexec.bat</Filename> using
-<Filename>Windows/system/Sysedit</Filename>.  You need to reboot to make
-the new settings take effect.
+Note: The Cygwin support for long file names containing
+spaces is not 100%, so make sure that you install ghc in a directory
+that has no embedded spaces (i.e., resist the temptation to put it
+in <Filename>/Program Files/</Filename>!)
 </Para>
 
-</Sect2>
-
-
-<Sect2 id="sec-required"><Title>Software required</Title>
-
-<VariableList>
-<VarListEntry>
-<Term>The cygwin toolchain (beta20.1)</Term>
-<ListItem>
 <Para>
-GHC depends at the moment on the cygwin tools to operate, which
-dresses up the Win32 environment into something more UNIX-like.
-(notably, it provides <Command>gcc</Command>, <Command>as</Command> and <Command>ld</Command>),
-so you'll need to install these tools first. You also need
-Cygwin to use CVS.
+When the installer has completed, make sure you add the location of the
+ghc <Filename>bin/</Filename> directory to your path (e.g.
+<Filename>/ghc/ghc-4.08/bin </Filename>).
+You need to do this in order to bring the various GHC binaries into scope.
+Also, if the directory <Filename>C:/TEMP</Filename> doesn't already exist,
+you should create it.
 </Para>
 
 <Para>
-Important grungy information about Cygwin:
+To test the fruits of your labour, try now to compile a simple
+Haskell program:
 </Para>
 
-<ItemizedList>
+<Screen>
+bash$ cat main.hs
+module Main(main) where
 
-<ListItem>
-<Para>
-Cygwin doesn't deal well with filenames that include
-spaces. "<Filename>Program Files</Filename>" and "<Filename>Local files</Filename>" are
-common gotchas.
-</Para>
-</ListItem>
+main = putStrLn "Hello, world!"
+bash$ ghc -o main main.hs
+..
+bash$ ./main
+Hello, world!
+bash$ </Screen>
 
-<ListItem>
 <Para>
-Cygwin implements a symbolic link as a text file with some
-magical text in it.  So programs that don't use Cygwin's
-I/O libraries won't recognise such files as symlinks.  
-In particular, programs compiled by GHC are meant to be runnable
-without having Cygwin, so they don't use the Cygwin library, so
-they don't recognise symlinks.
+OK, assuming that worked, you're all set. Go forth and write useful
+Haskell programs :-) If not, consult the installation FAQ (<XRef LinkEnd="winfaq">); if that still doesn't help then please report the problems you're experiencing (see <Xref LinkEnd="wrong">).
 </Para>
-</ListItem>
-
-</ItemizedList>
 
 <Para>
-Here's how to install Cygwin.
+Further information on using GHC under Windows can be found in <ULink
+URL="http://www.dcs.gla.ac.uk/~sof/ghc-win32.html">Sigbj&oslash;rn Finne's
+pages</ULink>. Note: ignore the installation instructions, which are rather
+out of date; the <Emphasis>Miscellaneous</Emphasis> section at the bottom of
+the page is of most interest, covering topics beyond the scope of this
+manual.
 </Para>
 
-<ItemizedList>
-
-<ListItem>
-<Para>
-Download cygwin, beta20.1 (<filename>full.exe</filename>) from
-<ULink URL="http://sourceware.cygnus.com/cygwin/">sourceware.cygnus.com</ULink>
-Install this somewhere locally.
-</Para>
-</ListItem>
+</Sect2>
 
-<ListItem>
-<Para>
-Create the following directories (if they aren't already there):
-</Para>
 
-<ItemizedList>
-<ListItem><Para><Filename>c:/etc</Filename></Para></ListItem>
-<ListItem><Para><Filename>c:/bin</Filename></Para></ListItem>
-<ListItem><Para><Filename>c:/usr/local/bin</Filename></Para></ListItem>
-</ItemizedList>
+<Sect2 id="winfaq"><title>Installing ghc-win32 FAQ</title>
 
-<Para>
-(using <Command>mkdir -p /bin</Command>, etc.)
-</Para>
-</ListItem>
+<QandASet>
 
-<ListItem>
-<Para>
-Add the two <Filename>bin</Filename> directories to your <Constant>PATH</Constant>.
-</Para>
-</ListItem>
+<QandAEntry>
 
-<ListItem>
+<Question>
 <Para>
-Copy <Filename>bash.exe</Filename> from the <Filename>bin</Filename> directory of the cygwin tree (<Filename>cygwin-b20/H-i586-cygwin32/bin/bash.exe</Filename>) to
-<Filename>/bin</Filename> as <Filename>sh.exe</Filename>.  This is where Emacs looks for a shell (I think).
+I'm having trouble with symlinks.
 </Para>
-</ListItem>
+</Question>
 
-<ListItem>
+<Answer>
 <Para>
-You might think that it was easier to use bash directly from it original
-Cygwin directory, but (a) some UNIX utils have got <FIlename>/bin/sh</FIlename> hardwired in, and (b) the path following <Literal>#!</Literal> is limited to 32 characters.
+Symlinks only work under Cygwin (<Xref LinkEnd="sec-install">), so binaries
+not linked to the Cygwin DLL, in particular those built for Mingwin, will not
+work with symlinks.
 </Para>
-</ListItem>
+</Answer>
 
-<ListItem>
-<Para>
-Add <Filename>C:\cygnus\cygwin-b20\H-i586-cygwin32\bin</Filename> to your <Constant>PATH</Constant>.
-<Command>bash</Command> needs this, and when it is invoked from <Filename>/bin</Filename> it can't
-find it.
-</Para>
-</ListItem>
+</QandAEntry>
 
-<ListItem>
-<Para>
-Set your <Constant>SHELL</Constant> user environment variable to <Filename>c:/bin/sh</Filename>.
-</Para>
-</ListItem>
+<QandAEntry>
 
-<ListItem>
+<Question>
 <Para>
-Set your <Filename>HOME</Filename> user environment variable to point to your
-home directory.  This is where, for example,
-<Command>bash</Command> will look for your <Filename>.bashrc</Filename>
-file.
+I'm getting &ldquo;permission denied&rdquo; messages from <Command>rm</Command> or
+<Command>mv</Command>.
 </Para>
-</ListItem>
+</Question>
 
-<ListItem>
+<Answer>
 <Para>
-Set your <Constant>MAKE_MODE</Constant> user environment variable to <Literal>UNIX</Literal>.  If you don't do
-this you get very weird messages when you type `<Command>make</Command>', such as:
+This can have various causes: trying to rename a directory when an Explorer
+window is open on it tends to fail. Closing the window generally cures the
+problem, but sometimes its cause is more mysterious, and logging off and back
+on or rebooting may be the quickest cure.
 </Para>
+</Answer>
 
-<Screen>
-/c: /c: No such file or directory
-</Screen>
-</ListItem>
+</QandAEntry>
 
-<ListItem>
-<Para>
-Set the <Constant>TMPDIR</Constant> user environment variable to <Filename>/tmp</Filename>. For some reason, Win2k invisibly sets this variable to point to a temporary directory in your profile, that contains embedded spaces.  If GHC sees the <Constant>TMPDIR</Constant> variable set, it tries to use it for temporary files, but
-Cygwin doesn't grok filenames with spaces, so disaster results.
-</Para>
-</ListItem>
+<QandAEntry>
 
-<ListItem>
+<Question>
 <Para>
-If you're an Emacs user and want to be able to run <Command>bash</Command>
-from within a shell buffer, see the <ULink URL="http://www.cs.washington.edu/homes/voelker/ntemacs.html">NT Emacs home page</ULink> for
-instructions on how to set this up.
+I get errors when trying to build GHC 4.08 with GHC 4.05.
 </Para>
-</ListItem>
-
-</ItemizedList>
+</Question>
 
-</ListItem>
-</VarListEntry>
+<Answer> <Para> This seems to work better if you don't use
+<Option>-O</Option> in <Constant>GhcHcOpts</Constant>. It's a bug in 4.05,
+unfortunately. Anyway, better to install 4.08 binaries and use those.
+</Para> </Answer>
 
-<VarListEntry>
-<Term>Perl5</Term>
-<ListItem><Para>
-The driver script is written in Perl, so you'll need to have this
-installed too. However, the ghc binary distribution includes a
-perl binary for you to make use of, should you not already have a
-cygwin compatible one. Note: GHC does <Emphasis>not</Emphasis>
-work with the ActiveState port of perl.
-</Para>
-</ListItem>
-</VarListEntry>
+</QandAEntry>
 
-</VariableList>
+</QandASet>
 
 </Sect2>
 
+</Sect1>
 
-<Sect2><Title>Installing the supporting software</Title>
-
-<ItemizedList>
-<ListItem>
-<Para>
-Download <ULink URL="http://sourceware.cygnus.com/cygwin/">cygwin beta20.1</ULink> (<Filename>full.exe</Filename>). Install this somewhere locally.
-</Para>
-</ListItem>
 
-<ListItem>
-<Para>
-After having successfully installed this, make sure you do the following:
-</Para>
+<Sect1 id="building-docs">
+<Title>Building the documentation</Title>
 
-<ItemizedList>
-<ListItem>
 <Para>
-Create a <Filename>/bin</Filename> directory (using <Command>mkdir -p /bin</Command>).
+We use the DocBook DTD, which is widely used. Most shrink-wrapped
+distributions seem to be broken in one way or another; thanks to
+heroic efforts by Sven Panne and Manuel Chakravarty, we now support
+most of them, plus properly installed versions.
 </Para>
-</ListItem>
 
-<ListItem>
 <Para>
-Copy <Filename>bash.exe</Filename> from the <Filename>bin</Filename> directory of the cygwin tree (<Filename>cygwin-b20/H-i586-cygwin32/bin/bash.exe</Filename>) to
-<Filename>/bin</Filename> as <Filename>sh.exe</Filename>.
+Instructions on installing and configuring the DocBook tools follow.
 </Para>
-</ListItem>
 
-<ListItem>
-<Para>
-If you haven't already got one, create a <Filename>/tmp</Filename> directory.
-</Para>
-</ListItem>
-
-<ListItem>
-<Para>
-If you're an Emacs user and want to be able to run <Command>bash</Command>
-from within a shell buffer, see the <ULink URL="http://www.cs.washington.edu/homes/voelker/ntemacs.html">NT Emacs home page</ULink> for
-instructions on how to set this up.
-</Para>
-</ListItem>
-
-</ItemizedList>
-
-</ListItem>
-
-</ItemizedList>
-
-<Para>
-With the supporting software in place, we can finally get on to installing GHC itself.
-</Para>
+<Sect2>
+<Title>Installing the DocBook tools from RPMs</Title>
+
+<Para> If you're using a system that can handle RedHat RPM packages,
+you can probably use the <ULink
+URL="http://sourceware.cygnus.com/docbook-tools/">Cygnus DocBook
+tools</ULink>, which is the most shrink-wrapped SGML suite that we
+could find. You need all the RPMs except for psgml (i.e.
+<Filename>docbook</Filename>, <Filename>jade</Filename>,
+<Filename>jadetex</Filename>, <Filename>sgmlcommon</Filename> and
+<Filename>stylesheets</Filename>). Note that most of these RPMs are
+architecture neutral, so are likely to be found in a
+<Filename>noarch</Filename> directory. The SuSE RPMs also work; the
+RedHat ones <Emphasis>don't</Emphasis> in RedHat 6.2 (7.0 and later
+should be OK), but they are easy to fix: just make a symlink from
+<Filename>/usr/lib/sgml/stylesheets/nwalsh-modular/lib/dblib.dsl</Filename>
+to <Filename>/usr/lib/sgml/lib/dblib.dsl</Filename>. </Para>
 
 </Sect2>
 
+    <sect2>
+      <title>Installing DocBook on FreeBSD</title>
 
-<Sect2><Title>Installing GHC</Title>
+      <para>On FreeBSD systems, the easiest way to get DocBook up and
+      running is to install it from the ports tree or a pre-compiled
+      package (packages are available from your local FreeBSD mirror
+      site).</para>
 
-<Para>
-Download a GHC distribution:
-</Para>
-
-<VariableList>
+      <para>To use the ports tree, do this:
+<screen>
+      $ cd /usr/ports/textproc/docproj
+      $ make install
+</screen>
+      This installs the FreeBSD documentation project tools, which
+      includes everything needed to format the GHC
+      documentation.</para>
+    </sect2>
 
-<VarListEntry>
-<Term>ghc-4.045&mdash;InstallShield installer, 10M: <ULink URL="http://www.dcs.gla.ac.uk/~sof/ghc-4.045-win32-IS.zip">http</ULink> or <ULink URL="ftp://ftp.dcs.gla.ac.uk/pub/haskell/glasgow/4.04/ghc-4.045-win32-IS.zip">ftp</ULink>
-</Term>
-
-<ListItem>
-<Para>
-(The version number may change.) It is packaged up using an installer that should be familiar-looking to Windows users. Unpack and double click on <Filename>setup.exe</Filename>.
-</Para>
-
-<Para>
-Note: The cygwin support for long file names containing
-spaces is not 100%, so make sure that you install ghc in a directory
-that has no embedded spaces (i.e., resist the temptation to put it
-in <Filename>/Program Files/</Filename>!)
-</Para>
-
-<Para>
-When the installer has completed its job, you may delete the
-<Filename>ghcInstall</Filename> directory.
-</Para>
-
-<Para>
-When the installer has completed, make sure you add the location of the
-ghc <Filename>bin/</Filename> directory to your path (i.e. <Filename>/path/to/wherever/ghc-4.05/bin </Filename>).
-You need to do this in order to bring the various GHC DLLs into scope;
-if not, then you need to copy the DLLs into a directory that is (the
-system directory, for example).
-</Para>
+<Sect2>
+<Title>Installing from binaries on Windows</Title>
 
 <Para>
-Note: In case you haven't got perl already installed,
-you will have to manually copy the <Filename>perl.exe</Filename> binary from the
-ghc <Filename>bin/</Filename> into your <Filename>/bin</Filename> directory before continuing&mdash;the installer will not currently do this.
+It's a good idea to use Norman Walsh's <ULink
+URL="http://nwalsh.com/docbook/dsssl/doc/install.html">installation
+notes</ULink> as a guide. You should get version 3.1 of DocBook, and note
+that his file <Filename>test.sgm</Filename> won't work, as it needs version
+3.0. You should unpack Jade into <Filename>\Jade</Filename>, along with the
+entities, DocBook into <Filename>\docbook</Filename>, and the DocBook
+stylesheets into <Filename>\docbook\stylesheets</Filename> (so they actually
+end up in <Filename>\docbook\stylesheets\docbook</Filename>).
 </Para>
-</ListItem>
-
-</VarListEntry>
 
-<VarListEntry>
-<Term>
-ghc-4.045 - gzip'ed tarfile, 7.5M: <ULink URL="http://www.dcs.gla.ac.uk/~sof/ghc-4.045-win32.tar.gz">
-http</ULink> or <ULink URL="ftp://ftp.dcs.gla.ac.uk/pub/haskell/glasgow/4.04/ghc-4.045-win32.tar.gz">ftp</ULink>
-</Term>
+</Sect2>
 
-<ListItem>
-<Para>
-A `normal' GHC binary distribution packaged up as a compressed tar file.
-If you're already accustomed to installing and using GHC distributions
-on other platforms, the setup should be familiar to you, I
-hope. Unpack and read the INSTALL file contained in the
-distribution for instructions on how to set it up.
-</Para>
 
-<Para>
-Notice that the top directory of the distribution contains
-(rather clumsily) a perl binary (version 5.005_02). If you
-haven't already got a working perl, install this somewhere
-along your path too.
-</Para>
-</ListItem>
+<Sect2>
+<Title>Installing the DocBook tools from source</Title>
 
-</VarListEntry>
-</VariableList>
+<Sect3>
+<Title>Jade</Title>
 
 <Para>
-To test the fruits of your labour, try now to compile a simple
-Haskell program:
-</Para>
+Install <ULink URL="http://openjade.sourceforge.net/">OpenJade</ULink> (Windows binaries are available as well as sources). If you want DVI, PS, or PDF then install JadeTeX from the <Filename>dsssl</Filename>
+subdirectory. (If you get the error:
 
 <Screen>
-bash$ cat main.hs
-module Main(main) where
-
-main = putStrLn "Hello, world!"
-bash$ /path/to/the/ghc/bin/directory/ghc-4.05 -o main main.hs
-..
-bash$ ./main
-Hello, world!
-bash$ 
+! LaTeX Error: Unknown option implicit=false' for package hyperref'.
 </Screen>
 
-<Para>
-OK, assuming that worked, you're all set. Go forth and write useful
-Haskell programs :-) If not, consult the installation FAQ (<XRef LinkEnd="winfaq">); if that still doesn't help then please report the problems you're experiencing (see <Xref LinkEnd="wrong">).
-</Para>
-
-<Para>
-Further information on using GHC under Windows can be found in <ULink URL="http://www.dcs.gla.ac.uk/~sof/ghc-win32.html">Sigbj&oslash;rn Finne's pages</ULink>.
-</Para>
-
-</Sect2>
-
-</Sect1>
-
-
-<Sect1 id="winfaq"><title>Installing ghc-win32 FAQ</title>
-
-<QandASet>
-
-<QandAEntry>
-
-<Question>
-<Para>
-Invoking ghc doesn't seem to do anything, it immediately returns without having compiled the input file.
-</Para>
-</Question>
-
-<Answer>
-<Para>
-One cause of this is that <Filename>/bin/sh</Filename> is missing. To verify, open up a
-bash session and type <Command>ls -l /bin/sh.exe</Command>. If <Filename>sh.exe</Filename> is 
-reported as not being there, copy <Filename>bash.exe</Filename> (which you'll find
-inside the cygwin installation tree as <Filename>H-i586-cygwin32/bin/bash.exe</Filename>)
-to <Filename>/bin/sh.exe</Filename>.
+your version of <Command>hyperref</Command> is out of date; download it from
+CTAN (<Filename>macros/latex/contrib/supported/hyperref</Filename>), and
+make it, ensuring that you have first removed or renamed your old copy. If
+you start getting file not found errors when making the test for
+<Command>hyperref</Command>, you can abort at that point and proceed
+straight to <Command>make install</Command>, or enter them as
+<Filename>../</Filename><Emphasis>filename</Emphasis>.)
 </Para>
 
 <Para>
-All being well, ghc should then start to function.
-</Para>
-</Answer>
-
-</QandAEntry>
-
-<QandAEntry>
-
-<Question>
-<Para>
-When compiling up the <Literal>Hello World</Literal> example, the following happens:
+Make links from <Filename>virtex</Filename> to <Filename>jadetex</Filename>
+and <Filename>pdfvirtex</Filename> to <Filename>pdfjadetex</Filename>
+(otherwise DVI, PostScript and PDF output will not work). Copy
+<Filename>dsssl/*.{dtd,dsl}</Filename> and <Filename>catalog</Filename> to <Filename>/usr/[local/]lib/sgml</Filename>.
 </Para>
 
-<Screen>
-bash$ /ghc/ghc-4.05/bin/ghc-4.05 main.hs
-&lt;stdin&gt;:0:25: Character literal '{-# LINE 1 "main.hs" -}' too long
-&lt;stdin&gt;:0:25:  on input: "'"
-bash$ 
-</Screen>
-
-<Para>
-or
-</Para>
+</Sect3>
 
-<Screen>
-bash$ /ghc/ghc-4.05/bin/ghc-4.05 main.hs
-Program too big fit into memory under NT
-bash$ 
-</Screen>
-</Question>
+<Sect3>
+<Title>DocBook and the DocBook stylesheets</Title>
 
-<Answer>
 <Para>
-The cause of this is that you're using a version of <Command>perl</Command> that employs the Microsoft <Command>cmd</Command>/<Command>command</Command> shell when launching sub-processes to execute <Function>system()</Function> calls.
+Get a Zip of <ULink
+URL="http://www.oasis-open.org/docbook/sgml/3.1/index.html">DocBook</ULink> 
+and install the contents in <Filename>/usr/[local/]/lib/sgml</Filename>.
 </Para>
 
 <Para>
-The GHC driver really needs a <Command>perl</Command> which uses a `UNIX'y  shell instead, so
-make sure that the version you're using is of an compatible ilk. In particular, 
-if <Command>perl -v</Command> reports that you've got a copy of the (otherwise fine) port
-of perl done by ActiveState, you're in trouble.
+Get the <ULink URL="http://nwalsh.com/docbook/dsssl/">DocBook
+stylesheets</ULink> and install in
+<Filename>/usr/[local/]lib/sgml/stylesheets</Filename> (thereby creating a
+subdirectory docbook). For indexing, copy or link <Filename>collateindex.pl</Filename> from the DocBook stylesheets archive in <Filename>bin</Filename> into a directory on your <Constant>PATH</Constant>.
 </Para>
 
 <Para>
-If you're stuck with an incompatible <Command>perl</Command>, the GHC installation comes with a very basic <Command>perl</Command> binary for you to use. Simply copy it into the <Command>/bin</Command> directory.
+Download the <ULink
+URL="http://www.oasis-open.org/cover/ISOEnts.zip">ISO
+entities</ULink> into <Filename>/usr/[local/]lib/sgml</Filename>.
 </Para>
 
-<Para>
-Notice that copying <Filename>perl.exe</Filename> into <Filename>/bin</Filename> will not cause
-the GHC install to suddenly start functioning. If you don't want to
-re-run the InstallShield installer again, you need to edit the following
-files within the directory tree that the installer created:
-</Para>
+</Sect3>
 
-<Screen>
-bin/ghc-4.xx   -- where xx is the minor release number
-bin/stat2resid
-bin/hstags
-lib/mkdependHS
-</Screen>
+</Sect2>
 
-<Para>
-For each of these files, you need to edit the first line from instead
-saying <Command>#!/path/to/your/other/perl/install</Command> to <Command>#!/bin/perl</Command>.
-Once that is done, try compiling up the Hello, World example again.
-</Para>
+<Sect2>
+<Title>Configuring the DocBook tools</Title>
 
 <Para>
-Should you want to pick up a complete installation of a ghc-friendly port
-of perl instead, a <ULink URL="http://cygutils.netpedia.net/">cygwin port</ULink> is available.
+Once the DocBook tools are installed, the configure script will detect them and set up the build system accordingly. If you have a system that isn't supported, let us know, and we'll try to help.
 </Para>
-</Answer>
 
-</QandAEntry>
+</Sect2>
 
-<QAndAEntry>
+<Sect2>
+<Title>Remaining problems</Title>
 
-<Question>
 <Para>
-<Function>System.getArgs</Function> always return the empty list, i.e. the following program always prints <Screen>"[]"</Screen>:
-</Para>
+If you install from source, you'll get a pile of warnings of the form
 
-<ProgramListing>
-module Main(main) where
-import qualified System
-main = System.getArgs >>= print
-</ProgramListing>
+<Screen>DTDDECL catalog entries are not supported</Screen>
 
-</Question>
-
-<Answer>
-<Para>
-This is a bug with the RTS DLL that comes with ghc-4.03. To fix, upgrade to
-ghc-4.05.
+every time you build anything. These can safely be ignored, but if you find them tedious you can get rid of them by removing all the <Constant>DTDDECL</Constant> entries from <Filename>docbook.cat</Filename>.
 </Para>
-</Answer>
 
-</QAndAEntry>
-
-</QandASet>
+</Sect2>
 
 </Sect1>
 
 </Chapter>
+
+<!-- Emacs stuff:
+     ;;; Local Variables: ***
+     ;;; mode: sgml ***
+     ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
+     ;;; End: ***
+ -->