<Term><IndexTerm><Primary>Binary distribution</Primary></IndexTerm>Binary distribution.</Term>
<ListItem>
<para>
-If your only purpose is to install some of the <Literal>fptools</Literal> suite then the easiest thing to do is to get a binary distribution. In the
-binary distribution everything is pre-compiled for your particular
-machine architecture and operating system, so all you should have to
-do is install the binaries and libraries in suitable places. The user guide
-describes how to do this.
+If your only purpose is to install some of the
+<Literal>fptools</Literal> suite then the easiest thing to do is to
+get a binary distribution. In the binary distribution everything is
+pre-compiled for your particular machine architecture and operating
+system, so all you should have to do is install the binaries and
+libraries in suitable places. The user guide describes how to do this.
</para>
<para>
</Sect1>
<Sect1 id="sec-build-checks">
-<Title>Things to check before you start typing</Title>
+<Title>Things to check before you start</Title>
<para>
Here's a list of things to check before you get started.
<IndexTerm><Primary>i386-*-linux</Primary></IndexTerm>
<ListItem>
-<para>GHC works registerised, has a native code generator. You
+<para>GHC works registerised and has a native code generator. You
<Emphasis>must</Emphasis> have GCC 2.7.x or later. NOTE about
<literal>glibc</literal> versions: GHC binaries built on a system
running <literal>glibc 2.0</literal> won't work on a system running
<IndexTerm><Primary>Perl, pre-supposed</Primary></IndexTerm>
<ListItem>
<para>
-<Emphasis>You have to have Perl to proceed!</Emphasis> Perl is a
-language quite good for doing shell-scripty tasks that involve lots of
-text processing. It is pretty easy to install.
+<Emphasis>You have to have Perl to proceed!</Emphasis>
+It is pretty easy to install.
</para>
<para>
Perl 5 is required. For Win32 platforms, you should use the binary
-supplied in the InstallShield (copy it to <filename>cygwin/bin</filename>).
-The Cygwin-supplied Perl seems not to work (it has problems with line
-endings).
+supplied in the InstallShield (copy it to <filename>/bin</filename>).
+The Cygwin-supplied Perl seems not to work.
</para>
<para>
</VariableList>
</para>
+ <para>
+ In order to actually build any documentation, you need to set
+ <constant>SGMLDocWays</constant> in your
+ <filename>build.mk</filename>. Valid values to add to this
+ list are: <literal>dvi</literal>, <literal>ps</literal>,
+ <literal>pdf</literal>, <literal>html</literal>, and
+ <literal>rtf</literal>.
+ </para>
+
</Sect2>
<Sect2 id="pre-supposed-other-tools">
<varlistentry>
<term><literal>--with-hc=<parameter>path</parameter></literal></term>
- <indexterm><primary><literal>--with-hhc</literal></primary>
+ <indexterm><primary><literal>--with-hc</literal></primary>
</indexterm>
<listitem>
<para>Specifies the path to any installed Haskell
use <literal>ghc</literal>.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><literal>--with-gcc=<parameter>path</parameter></literal></term>
+ <indexterm><primary><literal>--with-gcc</literal></primary>
+ </indexterm>
+ <listitem>
+ <para>Specifies the path to the installed
+ GCC. This compiler will be used to compile all C
+ files, <emphasis>except</emphasis> any generated
+ by the installed Haskell compiler, which will have
+ its own idea of which C compiler (if any) to use.
+ The default is to use <literal>gcc</literal>.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
<para><command>configure</command> caches the results of
</OrderedList>
-You can make subsequent changes to <filename>mk/build.mk</filename> as often
-as you like. You do not have to run any further configuration
-programs to make these changes take effect.
-In theory you should, however, say <Command>gmake clean</Command>, <Command>gmake all</Command>,
-because configuration option changes could affect anything—but in practice you are likely to know what's affected.
+You can make subsequent changes to <filename>mk/build.mk</filename> as often
+as you like. You do not have to run any further configuration programs to
+make these changes take effect. In theory you should, however, say
+<Command>gmake clean</Command>, <Command>gmake all</Command>, because
+configuration option changes could affect anything—but in practice you
+are likely to know what's affected.
</para>
</Sect2>
<Term><Literal>install</Literal>:</Term>
<ListItem>
<para>
-installs the things built by <Literal>all</Literal>. Where does it
+installs the things built by <Literal>all</Literal> (except for the documentation). Where does it
install them? That is specified by
<filename>mk/config.mk.in</filename>; you can override it in
<filename>mk/build.mk</filename>, or by running
</para>
</ListItem></VarListEntry>
<VarListEntry>
+<Term><Literal>install-docs</Literal>:</Term>
+<ListItem>
+<para>
+installs the documentation. Otherwise behaves just like <literal>install</literal>.
+</para>
+</ListItem></VarListEntry>
+<VarListEntry>
<Term><Literal>uninstall</Literal>:</Term>
<ListItem>
<para>
</para>
<para>
-Before you start, make sure you've installed the Cygwin packages
-<filename>openssh</filename>, <filename>openssl</filename>,
-<filename>cvs</filename>, <filename>m4</filename> and
-<filename>autoconf</filename>. You also need to make sure that the
-user environment variable <Constant>MAKE_MODE</Constant> is set to <Literal>UNIX</Literal>. If you don't do
-this you get very weird messages when you type <Command>make</Command>, such as:
-</para><Screen>
-/c: /c: No such file or directory</Screen>
-
-<Sect2><Title>Configuring ssh</Title>
-
-<ItemizedList>
-
-<ListItem>
-<para>
-On a Win2k machine, open up a bash and do
-</para>
-
-<Screen>
-foo$ cd /etc
-foo$ mkpasswd -l > passwd
-</Screen>
-
-<para>
-Check that your login entry is on the first line
-of that file. If not, move it to the top. It's OK
-for 'Administrator' to be the first entry, assuming you are one.
+Because of various hard-wired infelicities, you need to copy
+<Filename>bash.exe</Filename> (from GHC's <Filename>extra-bin</Filename>
+directory), and <Filename>perl.exe</Filename> and
+<Filename>cat.exe</Filename> (from GHC's <Filename>bin</Filename> directory)
+to <Filename>/bin</Filename> (discover where your Cygwin root directory is
+by typign <Command>mount</Command>).
</para>
<para>
-However, Win9x doesn't support the calls that <Command>mkpasswd</Command> relies on
-(e.g., <Function>NetUserEnum</Function>). If you run <Command>mkpasswd</Command> you
-get errors like:
+Before you start, you need to make sure that the user environment variable
+<Constant>MAKE_MODE</Constant> is set to <Literal>UNIX</Literal>. If you
+don't do this you get very weird messages when you type
+<Command>make</Command>, such as:
</para>
-
<Screen>
-linked to missing export netapi32.dll:NetUserEnum
-</Screen>
-
-<para>
-The passwd file is used
-by ssh in a fairly rudimentary manner, so I'd simply
-synthesise/copy an existing Unix <filename>/etc/passwd</filename>, i.e., create
-an <filename>/etc/passwd</filename> file containing the line
-</para>
+/c: /c: No such file or directory</Screen>
-<Screen>
-<login>::500:513:::/bin/sh
-</Screen>
+<Sect2><Title>Configuring ssh</Title>
-<para>
-where <Literal><login></Literal> is your login id.
-</para>
-</ListItem>
+<ItemizedList>
<ListItem>
<para>
<ListItem>
<para>
-<Constant>CVS_RSH</Constant>: <filename>c:/path_to_Cygwin/bin/ssh</filename>
+<Constant>CVS_RSH</Constant>: <filename>c:/path_to_ghc/extra-bin/ssh</filename>
</para>
</ListItem>
<Constant>CVSEDITOR</Constant>: <filename>bin/gnuclient.exe</filename> if you want to use an Emacs buffer for typing in those long commit messages.
</para>
</ListItem>
+
+<ListItem>
+<para>
+<Constant>SHELL</Constant>: To use bash as the shell in Emacs, you need to
+set this to point to <Filename>bash.exe</Filename>.
+</para>
+</ListItem>
+
</ItemizedList>
</ListItem>
<para>
Try doing <Command>cvs co fpconfig</Command>. All being well, bytes should
start to trickle through, leaving a directory <filename>fptools</filename>
-in your current directory. (You can <Command>rm</Command> it if you don't want to keep it.) The following messages appear to be harmless:
+in your current directory. (You can <Command>rm</Command> it if you don't
+want to keep it.) The following messages appear to be harmless:
</para>
<Screen>
<para>
At this point I found that CVS tried to invoke a little dialogue with
-me (along the lines of `do you want to talk to this host'), but
-somehow bombed out. This was from a bash shell running in emacs.
+me (along the lines of `do you want to talk to this host?'), but
+for some reason bombed out. This was from a bash shell running in Emacs.
I solved this by invoking a Cygnus shell, and running CVS from there.
-Once things are dialogue free, it seems to work OK from within emacs.
+Once things are dialogue free, it seems to work OK from within Emacs.
</para>
</ListItem>
</Sect2>
-<Sect2><Title>Building GHC</Title>
-
-<ItemizedList>
+ <Sect2><Title>Building GHC</Title>
+
+ <ItemizedList>
-<ListItem>
-<para>
-In the <filename>./configure</filename> output, ignore
-"<Literal>
-checking whether #! works in shell scripts...
-./configure: ./conftest: No such file or directory</Literal>",
-and "<Literal>not updating unwritable cache ./config.cache</Literal>".
-Nobody knows why these happen, but they seem to be harmless.
-</para>
-</ListItem>
+ <ListItem>
+ <para>
+ You should give the option
+ <option>--host=i386-unknown-mingw32</option> to
+ <command>autoconf</command>, so that it doesn't try to
+ build for Cygwin (unless that's what you really
+ want). Since it's possible to get into trouble using the
+ wrong C compiler, it's wise either to avoid installing
+ Cygwin gcc, or to explicitly specify
+ <option>--with-gcc=/mingw/bin/gcc</option>.
+ </para>
+ </ListItem>
<ListItem>
<para>
<ListItem>
<para>
You need <filename>ghc</filename> to be in your <Constant>PATH</Constant> before you run
-<Command>configure</Command>. The default GHC InstallShield creates only
-<filename>ghc-4.08</filename>, so you may need to duplicate this file as <filename>ghc</filename>
-in the same directory, in order that <Command>configure</Command> will see it (or
-just rename <filename>ghc-4.08</filename> to <filename>ghc</filename>.
-And make sure that the directory is in your path.
+<Command>configure</Command>. The InstallShield tells you the path
+when you install it.
</para>
</ListItem>
</Sect2>
+ <sect2>
+ <title>Building the Windows InstallShield® Installer</title>
+
+ <para>
+ This section is intended for GHC developers only; no-one else
+ should need to build an InstallShield.
+ </para>
+
+ <para>
+ Having built a second-stage tree and done <command>make
+ install</command> on it, open the InstallShield
+ (<filename>.ism</filename>) file. Open the Project screen, and
+ then the Project subfolder of the Path variables folder, and
+ set <literal>SourceFiles</literal> to the top of your
+ tree. You might also need to set <literal>GHCBITS</literal> to
+ point to the tree of various external bits that are added into
+ the IS mix. You should then be able to build an InstallShield.
+ </para>
+
+ <sect3>
+ <title>Extra features of the InstallShield</title>
+
+ <para>
+ The InstallShield has some IS-specific twiddles:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Two registry entries are set under
+ <literal>HKEY_LOCAL_MACHINE\SOFTWARE\GHC</literal>:
+ <literal>Path</literal> and
+ <literal>Version</literal>, which record respectively
+ the directory in which GHC was installed, and the
+ version number.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The InstallShield adds some entries to the Program
+ menu, for GHCi and for the documentation. See under
+ Setup Design and the individual components (each
+ component can add entries to the menu).
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>External add-ins</title>
+
+ <para>
+ The external add-ins consist of Mingwin gcc and Mingwin
+ Perl. The layout of the add-ins tree is as follows:
+
+ <screen>
+extra-bin/
+ gcc.exe
+ perl.exe (Mingwin perl)
+ perl56.dll
+gcc-lib/
+ Mingwin gcc binaries, libraries and headers
+imports/
+ com/
+ imports for HDirect's com library
+include/
+ Mingwin includes
+</screen>
+ </para>
+ </sect3>
+
+ </sect2>
+
</Sect1>
</Article>