[project @ 2002-06-25 12:05:14 by simonmar]
[ghc-hetmet.git] / ghc / docs / users_guide / installing.sgml
index ae44c33..42f48c1 100644 (file)
@@ -15,10 +15,19 @@ 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>
+<Para>This guide is in several parts:</para>
+<itemizedlist>
+<listitem> <para> Installing on Unix-a-likes (<Xref LinkEnd="sec-unix-a-likes">). </para>  </listitem>
+<listitem> <para> Installing on Windows  (<Xref LinkEnd="sec-install-windows">).   </para> </listitem>
+<listitem> <para> The layout of installed files  (<Xref LinkEnd="sec-install-files">).  
+You don't need to know this to install GHC,
+but it's useful if you are changing the implementation.   </para>  </listitem>
+<listitem> <para> Installing or building the documentation (<Xref LinkEnd="building-docs">).  </para> </listitem>
+</itemizedlist>
 
 
-  <Sect1><Title>Installing on Unix-a-likes</Title>
+  
+  <Sect1 id="sec-unix-a-likes"><Title>Installing on Unix-a-likes</Title>
 
     <sect2>
       <title>When a platform-specific package is available</title>
@@ -35,10 +44,11 @@ having a Haskell compiler.)
 
       <variablelist>
        <varlistentry>
-         <term>RedHat Linux/x86</term>
+         <term>RedHat or SuSE Linux/x86</term>
          <listitem>
-           <para>RPM source & binary packages for RedHat Linux (x86
-           only) are available for most major releases.</para>
+           <para>RPM source & binary packages for RedHat and SuSE
+           Linux (x86 only) are available for most major
+           releases.</para>
          </listitem>
        </varlistentry>
 
@@ -86,8 +96,9 @@ Binary distributions come in &ldquo;bundles,&rdquo; one bundle per file called
 </Para>
 
 <Para>
-Then you should find a single directory, <Literal>fptools</Literal>, with the following
-structure:
+Then you should find a single directory,
+<Literal>ghc-<replaceable>version</replaceable></Literal>, with the
+following structure:
 </Para>
 
 <Para>
@@ -248,7 +259,7 @@ you simply want to try out the package and/or you don't have the
 necessary privileges (or inclination) to properly install the tools
 locally. Note that if you do decide to install the package `properly'
 at a later date, you have to go through the installation steps that
-follows.
+follow.
 </Para>
 
 <Para>
@@ -518,47 +529,64 @@ on...</para>
 
 <Sect1 id="sec-install-windows"><Title>Installing on Windows</Title>
 
-<Para>
-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>
-
-<Para>
-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>
-
-
-<Sect2><Title>Installing GHC</Title>
-
-<Para>
-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>
-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>
+Getting the Glasgow Haskell Compiler (post 5.02) to run on Windows platforms is
+a snap: the Installshield does everything you need.  
+</para>
 
-<Para>
-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>
+<Sect2><Title>Installing GHC on Windows</Title>
 
+<para>
+To install GHC, use the following steps:
+</para>
+<itemizedlist>
+<listitem><para>Download the Installshield <Filename>setup.exe</Filename>
+from the GHC download page
+<ULink
+URL="http://www.haskell.org/ghc">haskell.org</ULink>.
+</para></listitem>
+
+<listitem><para>Run <Filename>setup.exe</Filename>.
+(If you have a previous version of GHC, Installshield will offer to "modify", 
+or "remove" GHC.  Choose "remove"; then run <Filename>setup.exe</Filename> a
+second time.  This time it should offer to install.)
+</para>
+<para>
+At this point you should find GHCi and the GHC documentation are 
+available in your Start menu under "Start/Programs/Glasgow Haskell Compiler".
+</para>
+</listitem>
+
+<listitem><para>
+The final dialogue box from the install process tells you where GHC has
+been installed.  If you want to invoke GHC from a command line, add this 
+to your PATH environment variable.  Usually, GHC installs into
+<Filename>c:/ghc/ghc-5.02</Filename>, though the last part of this path
+depends on which version of GHC you are installing, of course. 
+You need to add <Filename>c:/ghc/ghc-5.02/bin</Filename> to your path if yo
+</para></listitem>
+
+<listitem><para>
+GHC needs a directory in which to create, and later delete, temporary files.
+It uses the standard Windows procedure <literal>GetTempPath()</literal> to
+find a suitable directory.  This procedure returns:
+<itemizedlist>
+<listitem><para>The path in environment variable TMP, 
+if TMP is set.</para></listitem>
+<listitem><para>Otherwise, the path in environment variable TEMP, 
+if TEMP is set.</para></listitem>
+<listitem><para>Otherwise, there is a per-user default which varies
+between versions of Windows. On NT and XP-ish versions, it might 
+be:
+<Filename>c:\Documents and Settings\&lt;username&gt;\Local Settings\Temp</filename>
+</para></listitem>
+</itemizedlist>
+The main point is that if you don't do anything GHC will work fine;
+but if you want to control where the directory is, you can do so by
+setting TMP or TEMP.
+</para></listitem>
+
+<listitem>
 <Para>
 To test the fruits of your labour, try now to compile a simple
 Haskell program:
@@ -574,23 +602,36 @@ bash$ ghc -o main main.hs
 bash$ ./main
 Hello, world!
 bash$ </Screen>
+</listitem>
+</itemizedlist>
 
+<para>
+You do <emphasis>not</emphasis> need the Cygwin toolchain, or anything
+else, to install and run GHC.
+</para>
 <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">).
+An installation of GHC requires about 140M of disk space.
+To run GHC comfortably, your machine should have at least
+64M of memory.
 </Para>
+</sect2>
 
+<Sect2><title>Moving GHC around</title>
 <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>. 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.
+At the moment, GHC installs in a fixed place (<Filename>c:/ghc/ghc-x.yy</Filename>,
+but once it is installed, you can freely move the entire GHC tree just by copying
+the <Filename>ghc-x.yy</Filename> directory.   (You may need to fix up 
+the links in "Start/Programs/Glasgow Haskell Compiler" if you do this.)
+</para>
+<para>
+It is OK to put GHC tree in a directory whose path involves spaces.  However,
+don't do this if you use want to use GHC with the Cygwin tools, 
+because Cygwin can get confused when this happpens.
+We havn't quite got to the bottom of this, but so far as we know it's not 
+a problem with GHC itself.  Nevertheless, just to keep life simple we usually
+put GHC in a place with a space-free path.
 </Para>
-
-</Sect2>
-
+</sect2>
 
 <Sect2 id="winfaq"><title>Installing ghc-win32 FAQ</title>
 
@@ -618,7 +659,7 @@ work with symlinks.
 
 <Question>
 <Para>
-I'm getting &ldquo;permission denied&rdquo; messages from <Command>rm</Command> or
+I'm getting &ldquo;permission denied&rdquo; messages from the <Command>rm</Command> or
 <Command>mv</Command>.
 </Para>
 </Question>
@@ -634,46 +675,209 @@ on or rebooting may be the quickest cure.
 
 </QandAEntry>
 
-<QandAEntry>
+</QandASet>
 
-<Question>
 <Para>
-I get errors when trying to build GHC 4.08 with GHC 4.05.
+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>
-</Question>
+</Sect2>
 
-<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>
+</Sect1>
 
-</QandAEntry>
 
-</QandASet>
+<Sect1 id="sec-install-files"><Title>The layout of installed files</Title>
 
-</Sect2>
+<para>
+This section describes what files get installed where.  You don't need to know it
+if you are simply installing GHC, but it is vital information if you are changing
+the implementation.
+</para>
+<para> GHC is installed in two directory trees:</para>
+<variablelist>
+<varlistentry>
+<term>Binary directory</term>
+<listitem> <para> known as <Filename>$(bindir)</Filename>, holds executables that 
+the user is expected to invoke.  Notably,
+<Filename>ghc</Filename> and <Filename>ghci</FileName>.  On Unix, this directory
+is typically something like <Filename>/usr/local/bin</Filename>.  On Windows,
+however, this directory is always <Filename>$(libdir)/bin</Filename>.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Library directory,</term>
+<listitem> <para> known as <Filename>$(libdir)</Filename>, holds all the 
+support files needed to run GHC.  On Unix, this 
+directory is usually something like <Filename>/usr/lib/ghc/ghc-5.02</Filename>. </para>
+</listitem>
+</varlistentry>
+</variablelist>
 
-</Sect1>
+<para>
+When GHC runs, it must know where its library directory is.
+It finds this out in one of two ways:
+</para>
+<itemizedlist>
+<listitem>
+<para>
+<Filename>$(libdir)</Filename> is passed to GHC using the <option>-B</option> flag.
+On Unix (but not Windows), the installed <filename>ghc</filename> is just a one-line 
+shell script that invokes the real GHC, passing a suitable <option>-B</option> flag. 
+[All the user-supplied flags
+follow, and a later <option>-B</option> flag overrides an earlier one, so a user-supplied
+one wins.]
+</para>
+</listitem>
+<listitem>
+<para> On Windows (but not Unix), if no <option>-B</option> flag is given, GHC uses a system
+call to find the directory in which the running GHC executable lives, and derives 
+<Filename>$(libdir)</Filename> from that. [Unix lacks such a system call.]
+</para>
+</listitem>
+</itemizedlist>
+
+<sect2> <title>Layout of the library directory</title>
+
+<para>The layout of the library directory is almost identical on
+Windows and Unix, as follows: layout:</para>
+
+<programlisting>
+  $(libdir)/
+    package.conf           GHC package configuration
+    ghc-usage.txt          Message displayed by ghc &ndash;&ndash;help
+    
+    bin/                   [Win32 only]  User-visible binaries
+         ghc.exe
+         ghci.bat
+
+    unlit                  Remove literate markup
+    
+    touchy.exe             [Win32 only]
+    perl.exe               [Win32 only]
+    gcc.exe                [Win32 only]
+   
+    ghc-x.xx               GHC executable [Unix only]
+   
+    ghc-split              Asm code splitter
+    ghc-asm               Asm code mangler
+
+    gcc-lib/               [Win32 only] Support files for gcc
+        specs              gcc configuration
+        cpp0.exe           gcc support binaries
+        as.exe
+        ld.exe
+
+        crt0.o              Standard
+          ..etc..          binaries
+        
+        libmingw32.a        Standard
+          ..etc..          libraries
+
+        *.h                 Include files
+
+    imports/                GHC interface files
+        std/*.hi              'std' library
+       lang/*.hi             'lang' library
+        ..etc..
+
+    include/                 C header files
+        StgMacros.h           GHC-specific
+        ..etc...              header files
+
+        mingw/*.h            [Win32 only] Mingwin header files
+
+    libHSrts.a              GHC library archives
+    libHSstd.a
+    libHSlang.a
+      ..etc..
+
+    HSstd1.o                GHC library linkables
+    HSstd2.o                  (used by ghci, which does
+    HSlang.o                  not grok .a files yet)
+</programlisting>
+
+<para>Note that:</para>
+<itemizedlist>
+<listitem>
+<para>On Win32, the <filename>$(libdir)/bin</filename> directory contains user-visible binaries; 
+add it to your <filename>PATH</filename>.  The <filename>ghci</filename> executable is a <filename>.bat</filename>
+file which invokes <filename>ghc</filename>.   </para>
+
+<para>The GHC executable is the Real Thing (no intervening
+shell scripts or <filename>.bat</filename> files).  
+Reason: we sometimes invoke GHC with very long command lines,
+and <filename>cmd.exe</filename> (which executes <filename>.bat</filename> files)
+truncates them.  [We assume people won't invoke ghci with very long
+command lines.]</para>
+
+<para>On Unix, the user-invokable <filename>ghc</filename> invokes <filename>$(libdir)/ghc-<replaceable>version</replaceable></filename>,
+passing a suitable <option>-B</option> flag. 
+</para>
+</listitem>
+
+       <listitem>
+         <para><filename>$(libdir)</filename> also contains support
+          binaries.  These are <emphasis>not</emphasis> expected to be
+          on the user's <filename>PATH</filename>, but and are invoked
+          directly by GHC.  In the Makefile system, this directory is
+          also called <filename>$(libexecdir)</filename>, but
+          <emphasis>you are not free to change it</emphasis>.  It must
+          be the same as <filename>$(libdir)</filename>.</para>
+       </listitem>
+
+<listitem>
+<para>We distribute <filename>gcc</filename> with the Win32 distribution of GHC, so that users
+don't need to install <filename>gcc</filename>, nor need to care about which version it is.
+All <filename>gcc</filename>'s support files are kept in  <filename>$(libdir)/gcc-lib/</filename>.
+</para> 
+</listitem>
+
+<listitem>
+<para>Similarly, we distribute <filename>perl</filename> and a <filename>touch</filename> 
+replacement (<filename>touchy.exe</filename>)
+with the Win32 distribution of GHC. </para> 
+</listitem>
+
+       <listitem>
+         <para>The support programs <filename>ghc-split</filename>
+          and <filename>ghc-asm</filename> are Perl scripts.  The
+          first line says <literal>#!/bin/perl</literal>; on Unix, the
+          script is indeed invoked as a shell script, which invokes
+          Perl; on Windows, GHC invokes
+          <filename>$(libdir)/perl.exe</filename> directly, which
+          treats the <literal>#!/bin/perl</literal> as a comment.
+          Reason: on Windows we want to invoke the Perl distributed
+          with GHC, rather than assume some installed one.  </para>
+       </listitem>
+</itemizedlist>
+
+</sect2>
+
+</sect1>
 
 
 <Sect1 id="building-docs">
 <Title>Building the documentation</Title>
 
-<Para>
-We use the DocBook DTD, which is widely used. Most shrink-wrapped
+<Para>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>
 
-<Para>
-Instructions on installing and configuring the DocBook tools follow.
+<Para>Instructions on installing and configuring the DocBook tools follow.
 </Para>
 
 <Sect2>
 <Title>Installing the DocBook tools from RPMs</Title>
 
-<Para> If you're using a system that can handle RedHat RPM packages,
+<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
@@ -711,8 +915,7 @@ to <Filename>/usr/lib/sgml/lib/dblib.dsl</Filename>. </Para>
 <Sect2>
 <Title>Installing from binaries on Windows</Title>
 
-<Para>
-It's a good idea to use Norman Walsh's <ULink
+<Para>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
@@ -731,8 +934,7 @@ end up in <Filename>\docbook\stylesheets\docbook</Filename>).
 <Sect3>
 <Title>Jade</Title>
 
-<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>
+<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>
@@ -748,8 +950,7 @@ straight to <Command>make install</Command>, or enter them as
 <Filename>../</Filename><Emphasis>filename</Emphasis>.)
 </Para>
 
-<Para>
-Make links from <Filename>virtex</Filename> to <Filename>jadetex</Filename>
+<Para>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>.
@@ -760,21 +961,18 @@ and <Filename>pdfvirtex</Filename> to <Filename>pdfjadetex</Filename>
 <Sect3>
 <Title>DocBook and the DocBook stylesheets</Title>
 
-<Para>
-Get a Zip of <ULink
+<Para>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>
-Get the <ULink URL="http://nwalsh.com/docbook/dsssl/">DocBook
+<Para>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>
-Download the <ULink
+<Para>Download the <ULink
 URL="http://www.oasis-open.org/cover/ISOEnts.zip">ISO
 entities</ULink> into <Filename>/usr/[local/]lib/sgml</Filename>.
 </Para>
@@ -786,8 +984,7 @@ entities</ULink> into <Filename>/usr/[local/]lib/sgml</Filename>.
 <Sect2>
 <Title>Configuring the DocBook tools</Title>
 
-<Para>
-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>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>
 
 </Sect2>
@@ -795,8 +992,7 @@ Once the DocBook tools are installed, the configure script will detect them and
 <Sect2>
 <Title>Remaining problems</Title>
 
-<Para>
-If you install from source, you'll get a pile of warnings of the form
+<Para>If you install from source, you'll get a pile of warnings of the form
 
 <Screen>DTDDECL catalog entries are not supported</Screen>