[project @ 2004-02-05 09:46:22 by simonpj]
[ghc-hetmet.git] / docs / building / building.sgml
index f0adddd..7196bf1 100644 (file)
@@ -58,7 +58,7 @@
           the parser specifications.  If you don't want to alter the
           parser then this saves you having to find and install
           <command>happy</command>. You will still need a working
-          version of GHC (preferably version 4.08+) on your machine in
+          version of GHC (version 5.x or later) on your machine in
           order to compile (most of) the sources, however.</para>
        </listitem>
       </varlistentry>
          <listitem>
            <para>Set your <literal>$CVSROOT</literal> environment variable to
             <literal>:pserver:anoncvs@glass.cse.ogi.edu:/cvs</literal></para>
+           <para>If you set <literal>$CVSROOT</literal> in a shell script, be sure not to
+             have any trailing spaces on that line, otherwise CVS will respond with 
+             a perplexing message like
+             <programlisting>
+               /cvs : no such repository
+         </programlisting></para>
          </listitem>
          <listitem>
             <para>Run the command</para>
@@ -434,8 +440,8 @@ setsockopt IPTOS_THROUGHPUT: Invalid argument
           <xref linkend="projects">).</para>
 
          <para>Remember that if you do not have
-          <literal>happy</literal> installed, you need to check it out
-          as well.</para>
+          <literal>happy</literal> and/or <literal>Alex</literal>
+          installed, you need to check them out as well.</para>
        </listitem>
       </itemizedlist>
     </sect2>
@@ -1000,12 +1006,21 @@ $ cvs checkout nofib/spectral
          <term>sparc-sun-solaris2</term>
          <indexterm><primary>sparc-sun-solaris2</primary></indexterm>
          <listitem>
-           <para>Fully supported (at least for Solaris 2.7),
+           <para>Fully supported (at least for Solaris 2.7 and 2.6),
            including native-code generator.</para>
          </listitem>
        </varlistentry>
 
        <varlistentry>
+         <term>sparc-unknown-openbsd</term>
+         <indexterm><primary>sparc-unknown-openbsd</primary></indexterm>
+         <listitem>
+           <para>Supported, including native-code generator. The
+           same should also be true of NetBSD</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
          <term>hppa1.1-hp-hpux (HP-PA boxes running HPUX 9.x)</term>
          <indexterm><primary>hppa1.1-hp-hpux</primary></indexterm>
          <listitem>
@@ -1080,8 +1095,8 @@ $ cvs checkout nofib/spectral
          <term>ia64-unknown-linux</term>
          <indexterm><primary>ia64-unknown-linux</primary></indexterm>
          <listitem>
-           <para>GHC currently works unregisterised.  A registerised
-           port is in progress.</para>
+           <para>Supported, except there is no native code
+           generator.</para>
          </listitem>
        </varlistentry>
 
@@ -1107,6 +1122,14 @@ $ cvs checkout nofib/spectral
        </varlistentry>
 
        <varlistentry>
+         <term>mips64-sgi-irix6</term>
+         <indexterm><primary>mips-sgi-irix6</primary></indexterm>
+         <listitem>
+           <para>GHC currently works unregisterised.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
          <term>powerpc-ibm-aix</term>
          <indexterm><primary>powerpc-ibm-aix</primary></indexterm>
          <listitem>
@@ -1262,22 +1285,35 @@ $ cvs checkout nofib/spectral
       </varlistentry>
 
       <varlistentry>
-       <term>Autoconf</term>
-       <indexterm><primary>pre-supposed: Autoconf</primary></indexterm>
-       <indexterm><primary>Autoconf, pre-supposed</primary></indexterm>
+       <term>Alex</term>
+       <indexterm><primary>Alex</primary></indexterm>
        <listitem>
-         <para>GNU Autoconf is needed if you intend to build from the
+         <para>Alex is a lexical-analyser generator for Haskell,
+         which GHC uses to generate its lexer.  Like Happy, Alex is
+         written in Haskell and is a project in the CVS repository.
+         Alex distributions are available from <ulink
+         url="http://www.haskell.org/alex/">Alex's Web
+         Page</ulink>.</para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term>Autoreconf</term>
+       <indexterm><primary>pre-supposed: Autoreconf</primary></indexterm>
+       <indexterm><primary>Autoreconf, pre-supposed</primary></indexterm>
+       <listitem>
+         <para>GNU Autoreconf is needed if you intend to build from the
           CVS sources, it is <emphasis>not</emphasis> needed if you
           just intend to build a standard source distribution.</para>
 
-         <para>Version 2.52 or later of autoconf is required.
+         <para>Version 2.52 or later of autoreconf is required.
          NB. vesrion 2.13 will no longer work, as of GHC version
          6.1.</para>
 
-         <para>Autoconf builds the <command>configure</command>
+         <para>Autoreconf builds the <command>configure</command>
           script from <filename>configure.ac</filename> and
           <filename>aclocal.m4</filename>.  If you modify either of
-          these files, you'll need <command>autoconf</command> to
+          these files, you'll need <command>autoreconf</command> to
           rebuild <filename>configure</filename>.</para>
        </listitem>
       </varlistentry>
@@ -1398,7 +1434,8 @@ $ cvs checkout nofib/spectral
       want a completely standard build, then the following should
       work:</para>
 
-<screen>$ ./configure
+<screen>$ autoreconf
+$ ./configure
 $ make
 $ make install
 </screen>
@@ -1570,20 +1607,27 @@ $ make install
            <para>Change directory to
             <constant>&dollar;(FPTOOLS&lowbar;TOP)</constant> and
             issue the command
-            <command>autoconf</command><indexterm><primary>autoconf</primary></indexterm>
+<ProgramListing>
+autoreconf
+</ProgramListing>
+            <indexterm><primary>autoreconf</primary></indexterm>
             (with no arguments). This GNU program converts
             <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/configure.ac</filename>
             to a shell script called
             <filename><constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>/configure</filename>.
+             If <command>autoreconf</command> bleats that it can't write the file <filename>configure</filename>,
+             then delete the latter and try again.  Note that you must use <command>autoreconf</command>,
+             and not the old <command>autoconf</command>!  If you erroneously use the latter, you'll get 
+             a message like "No rule to make target 'mk/config.h.in'".
             </para>
 
            <para>Some projects, including GHC, have their own
             configure script.  If there's an
             <constant>&dollar;(FPTOOLS&lowbar;TOP)/&lt;project&gt;/configure.ac</constant>,
-            then you need to run <command>autoconf</command> in that
+            then you need to run <command>autoreconf</command> in that
             directory too.</para>
 
-           <para>Both these steps are completely
+           <para>These steps are completely
             platform-independent; they just mean that the
             human-written file (<filename>configure.ac</filename>) can
             be short, although the resulting shell script,
@@ -1863,7 +1907,7 @@ $ cd /scratch/joe-bloggs/myfptools-sun4
          <para>Prepare for system configuration:</para>
 
 <programlisting>
-$ autoconf
+$ autoreconf
 </programlisting>
 
          <para>(You can skip this step if you are starting from a
@@ -1872,11 +1916,11 @@ $ autoconf
           <filename>mk/config.h.in</filename>.)</para>
 
          <para>Some projects, including GHC itself, have their own
-         configure scripts, so it is necessary to run autoconf again
+         configure scripts, so it is necessary to run autoreconf again
          in the appropriate subdirectories. eg:</para>
 
 <programlisting>
-$ (cd ghc; autoconf)
+$ (cd ghc; autoreconf)
 </programlisting>
        </listitem>
 
@@ -2238,7 +2282,8 @@ Foo.o : Baz.hi
       build tree.</para>
 
       <para>Happy can similarly be run from the build tree, using
-      <filename>happy/src/happy-inplace</filename>.</para>
+      <filename>happy/src/happy-inplace</filename>, and similarly for
+      Alex and Haddock.</para>
     </sect2>
 
     <sect2>
@@ -3756,6 +3801,7 @@ foo% make install
 
            <listitem>
 <screen>
+$ cd <replaceable>T</replaceable>
 $ ./configure --enable-hc-boot --enable-hc-boot-unregisterised
 </screen>
 
@@ -3809,23 +3855,18 @@ GhcStage2HcOpts = -O -fvia-C -keep-hc-files
            </listitem>
 
            <listitem>
-             <para>Copy
-             <filename><replaceable>T</replaceable>/ghc/includes/config.h</filename>
-             to
-             <filename><replaceable>H</replaceable>/ghc/includes</filename>.
-             Note that we are building on the host machine, using the
-             target machine's <literal>config.h</literal> file.  This
-             is so that the intermediate C files generated here will
-             be suitable for compiling on the target system.</para>
-           </listitem>
-
-           <listitem>
              <para>Edit
              <filename><replaceable>H</replaceable>/mk/config.mk</filename>:</para>
              <itemizedlist>
                <listitem>
                  <para>change <literal>TARGETPLATFORM</literal>
-                  appropriately.</para>
+                  appropriately, and set the variables involving
+                  <literal>TARGET</literal> to the correct values for
+                  the target platform.  This step is necessary because
+                  currently <literal>configure</literal> doesn't cope
+                  with specifying different values for the
+                  <literal>--host</literal> and
+                  <literal>--target</literal> flags.</para>
                </listitem>
                <listitem>
                  <para>copy <literal>LeadingUnderscore</literal>
@@ -3833,18 +3874,32 @@ GhcStage2HcOpts = -O -fvia-C -keep-hc-files
                </listitem>
              </itemizedlist>
            </listitem>
-           
+
            <listitem>
-<screen>
-$ cd <replaceable>H</replaceable>/glafp-utils && make boot && make
-</screen>
+             <para>Copy
+             <filename><replaceable>T</replaceable>/ghc/includes/config.h</filename>
+             to
+             <filename><replaceable>H</replaceable>/ghc/includes</filename>.
+             Note that we are building on the host machine, using the
+             target machine's <literal>config.h</literal> file.  This
+             is so that the intermediate C files generated here will
+             be suitable for compiling on the target system.</para>
+
            </listitem>
-           
+
+             <listitem>
+               <para>Touch <literal>config.h</literal>, just to make
+               sure it doesn't get replaced during the build:</para>
+<screen>
+$ touch <replaceable>H</replaceable>/ghc/includes/config.h</screen>
+             </listitem>
+
            <listitem>
+               <para>Now build the compiler:</para>
 <screen>
+$ cd <replaceable>H</replaceable>/glafp-utils && make boot && make
 $ cd <replaceable>H</replaceable>/ghc && make boot && make
 </screen>
-
              <para>Don't worry if the build falls over in the RTS, we
               don't need the RTS yet.</para>
            </listitem>
@@ -4060,10 +4115,13 @@ Hello World!
        <para>To support GHCi, you need to port the dynamic linker
        (<filename>fptools/ghc/rts/Linker.c</filename>).  The linker
        currently supports the ELF and PEi386 object file formats - if
-       your platform uses one of these then you probably don't have
-       to do anything except fiddle with the
-       <literal>#ifdef</literal>s at the top of
-       <filename>Linker.c</filename> to tell it about your OS.</para>
+       your platform uses one of these then things will be
+       significantly easier.  The majority of Unix platforms use the
+       ELF format these days.  Even so, there are some
+       machine-specific parts of the ELF linker: for example, the
+       code for resolving particular relocation types is
+       machine-specific, so some porting of this code to your
+       architecture will probaly be necessary.</para>
        
        <para>If your system uses a different object file format, then
        you have to write a linker &mdash; good luck!</para>
@@ -4395,14 +4453,37 @@ but you do need it to <emphasis>build</emphasis> GHC.</para>
 
 <para> Install Cygwin from <ulink url="http://www.cygwin.com/">http://www.cygwin.com/</ulink>.
 The installation process is straightforward; we install it in <Filename>c:/cygwin</Filename>.
-During the installation dialogue, make sure that you select:
-<command>cvs</command>, <command>openssh</command>,
-<command>autoconf</command>,
-<command>binutils</command> (includes ld and (I think) ar),
-<command>gcc</command>,
-<command>flex</command>,
-<command>make</command>.
-
+During the installation dialogue, make sure that you select all of the following:
+<itemizedlist>
+<listitem><para>
+             <command>cvs</command>, 
+</para></listitem>
+<listitem><para>
+             <command>openssh</command>,
+</para></listitem>
+<listitem><para>
+             <command>autoreconf</command>,
+</para></listitem>
+<listitem><para>
+             <command>automake</command>,
+</para></listitem>
+<listitem><para>
+             <command>binutils</command> (includes ld and (I think) ar),
+</para></listitem>
+<listitem><para>
+             <command>gcc</command>,
+</para></listitem>
+<listitem><para>
+             <command>flex</command>,
+</para></listitem>
+<listitem><para>
+             <command>make</command>.
+</para></listitem>
+</itemizedlist>
+If you miss out any of these, strange things will happen to you.   To see thse packages, 
+click on the "View" button in the "Select Packages" 
+stage of Cygwin's installation dialogue, until the view says "Full".  The default view, which is
+"Category" isn't very helpful, and the "View" button is rather unobtrousive.
 </para>
 <para> Now set the following user environment variables:
 <itemizedlist>
@@ -4422,7 +4503,7 @@ don't do this you get very weird messages when you type
 </listitem>
 
 <listitem><para> Set <constant>SHELL</constant> to
-<Filename>c:/cygwin/bin/sh</Filename>. When you invoke a shell in Emacs, this
+<Filename>c:/cygwin/bin/bash</Filename>. When you invoke a shell in Emacs, this
 <constant>SHELL</constant> is what you get.
 </para></listitem>
 
@@ -4592,6 +4673,12 @@ Happy is a parser generator used to compile the Haskell grammar.  Add it in your
 </para>
 </listitem>
 
+         <listitem>
+           <para>Install Alex.  This can be done by building from the
+           source distribution in the usual way.  Sources are
+           available from <ulink
+           url="http://www.haskell.org/alex">http://www.haskell.org/alex</ulink>.</para>
+         </listitem>
 
 <listitem>
 <para>GHC uses the <emphasis>mingw</emphasis> C compiler to
@@ -4638,7 +4725,7 @@ you about Windows-specific wrinkles.</para>
 <ItemizedList>
 <listitem>
 <para>
-Run <Command>autoconf</Command> both in <filename>fptools</filename>
+Run <Command>autoreconf</Command> both in <filename>fptools</filename>
 and in <filename>fptools/ghc</filename>.  If you omit the latter step you'll
 get an error when you run <filename>./configure</filename>:
 <Screen>
@@ -4653,11 +4740,11 @@ configure: error: ./configure failed for ghc
 </para>
 </listitem>
 
-<listitem> <para><command>autoconf</command> seems to create the file <filename>configure</filename>
-read-only.  So if you need to run autoconf again (which I sometimes do for safety's sake),
+<listitem> <para><command>autoreconf</command> seems to create the file <filename>configure</filename>
+read-only.  So if you need to run autoreconf again (which I sometimes do for safety's sake),
 you get
 <screen>
-/usr/bin/autoconf: cannot create configure: permission denied
+/usr/bin/autoreconf: cannot create configure: permission denied
 </screen>
 Solution: delete <filename>configure</filename> first.
 </para></listitem>
@@ -4680,7 +4767,7 @@ can be really confusing.
 
 <listitem>
   <para> 
-    After <command>autoconf</command> run <command>./configure</command> in
+    After <command>autoreconf</command> run <command>./configure</command> in
     <filename>fptools/</filename> thus:
 
 <Screen>