summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpanne <unknown>2004-08-15 20:33:05 +0000
committerpanne <unknown>2004-08-15 20:33:05 +0000
commit69907617d58f6a97f7dc0b5e03b2fa0931ee686f (patch)
treefcd82f0507f221898fc000953c3de753bc85d82b
parent53386c359c55bd6eaa13c35fe174c9274ff5888e (diff)
downloadhaskell-69907617d58f6a97f7dc0b5e03b2fa0931ee686f.tar.gz
[project @ 2004-08-15 20:32:47 by panne]
Converted the building guide to DocBook XML
-rw-r--r--docs/building/Makefile4
-rw-r--r--docs/building/building.xml (renamed from docs/building/building.sgml)144
2 files changed, 75 insertions, 73 deletions
diff --git a/docs/building/Makefile b/docs/building/Makefile
index d9400dad9a..fb9cce6ff5 100644
--- a/docs/building/Makefile
+++ b/docs/building/Makefile
@@ -1,7 +1,7 @@
TOP = ../..
include $(TOP)/mk/boilerplate.mk
-SGML_DOC = building
-INSTALL_SGML_DOC = building
+XML_DOC = building
+INSTALL_XML_DOC = building
include $(TOP)/mk/target.mk
diff --git a/docs/building/building.sgml b/docs/building/building.xml
index 3f47334517..8547e81d75 100644
--- a/docs/building/building.sgml
+++ b/docs/building/building.xml
@@ -1,8 +1,10 @@
-<!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<article id="building-guide">
-<artheader>
+<articleinfo>
<title>Building the Glasgow Functional Programming Tools Suite</title>
<author><othername>The GHC Team</othername></author>
@@ -22,10 +24,10 @@
now provided in the user guide.</para>
<para>The bulk of this guide applies to building on Unix
- systems; see <xref linkend="winbuild"> for Windows notes.</para>
+ systems; see <xref linkend="winbuild"/> for Windows notes.</para>
</abstract>
-</artheader>
+</articleinfo>
<sect1 id="sec-getting">
@@ -81,7 +83,7 @@
scratch.</para>
<para>More information about our CVS repository can be found
- in <xref linkend="sec-cvs">.</para>
+ in <xref linkend="sec-cvs"/>.</para>
</listitem>
</varlistentry>
</variablelist>
@@ -110,8 +112,8 @@
<title>Getting access to the CVS Repository</title>
<para>You can access the repository in one of two ways:
- read-only (<xref linkend="cvs-read-only">), or read-write (<xref
- linkend="cvs-read-write">).</para>
+ read-only (<xref linkend="cvs-read-only"/>), or read-write (<xref
+ linkend="cvs-read-write"/>).</para>
<sect3 id="cvs-read-only">
<title>Remote Read-only CVS Access</title>
@@ -149,7 +151,7 @@
</listitem>
<listitem>
- <para>Now go to <xref linkend="cvs-first">.</para>
+ <para>Now go to <xref linkend="cvs-first"/>.</para>
</listitem>
</orderedlist>
</sect3>
@@ -233,7 +235,7 @@ Protocol 1</programlisting>
<para>
- <emphasis>Windows users: see the notes in <xref linkend="configure-ssh"> about <command>ssh</command> wrinkles!</emphasis>
+ <emphasis>Windows users: see the notes in <xref linkend="configure-ssh"/> about <command>ssh</command> wrinkles!</emphasis>
</para>
@@ -412,7 +414,7 @@ $ cvs checkout ghc hslibs libraries</screen>
you need at least the <literal>ghc</literal>,
<literal>hslibs</literal> and <literal>libraries</literal>
modules (for a full list of the projects available, see
- <xref linkend="projects">).</para>
+ <xref linkend="projects"/>).</para>
<para>Remember that if you do not have
<literal>happy</literal> and/or <literal>Alex</literal>
@@ -863,21 +865,21 @@ $ cvs checkout nofib/spectral</screen>
<listitem>
<para>Use an appropriate machine / operating system. <xref
- linkend="sec-port-info"> lists the supported platforms; if
+ linkend="sec-port-info"/> lists the supported platforms; if
yours isn't amongst these then you can try porting GHC (see
- <xref linkend="sec-porting-ghc">).</para>
+ <xref linkend="sec-porting-ghc"/>).</para>
</listitem>
<listitem>
<para>Be sure that the &ldquo;pre-supposed&rdquo; utilities are
- installed. <xref linkend="sec-pre-supposed">
+ installed. <xref linkend="sec-pre-supposed"/>
elaborates.</para>
</listitem>
<listitem>
<para>If you have any problem when building or installing the
Glasgow tools, please check the &ldquo;known pitfalls&rdquo; (<xref
- linkend="sec-build-pitfalls">). Also check the FAQ for the
+ linkend="sec-build-pitfalls"/>). Also check the FAQ for the
version you're building, which is part of the User's Guide and
available on the <ulink url="http://www.haskell.org/ghc/" >GHC web
site</ulink>.</para>
@@ -1200,7 +1202,7 @@ $ cvs checkout nofib/spectral</screen>
<para>GHC is required to build many of the tools, including
GHC itself. If you need to port GHC to your platform
because there isn't a binary distribution of GHC available,
- then see <xref linkend="sec-porting-ghc">.</para>
+ then see <xref linkend="sec-porting-ghc"/>.</para>
<para>Which version of GHC you need will depend on the
packages you intend to build. GHC itself will normally
@@ -1413,7 +1415,7 @@ $ cvs checkout nofib/spectral</screen>
<para>More tools are required if you want to format the documentation
that comes with GHC and other fptools projects. See <xref
- linkend="building-docs">.</para>
+ linkend="building-docs"/>.</para>
</sect2>
</sect1>
@@ -1535,7 +1537,7 @@ $ make install</screen>
includes sources for the X11
<command>lndir</command>&mdash;check out
<filename>fptools/glafp-utils/lndir</filename>). See <xref
- linkend="sec-storysofar"> for a typical invocation.</para>
+ linkend="sec-storysofar"/> for a typical invocation.</para>
<para>The build tree does not need to be anywhere near the
source tree in the file system. Indeed, one advantage of
@@ -1544,7 +1546,7 @@ $ make install</screen>
support people from backing up untold megabytes of
easily-regenerated, and rapidly-changing, gubbins. The golden
rule is that (with a single exception&mdash;<xref
- linkend="sec-build-config">) <emphasis>absolutely everything in
+ linkend="sec-build-config"/>) <emphasis>absolutely everything in
the build tree is either a symbolic link to the source tree, or
else is mechanically generated</emphasis>. It should be
perfectly OK for your build tree to vanish overnight; an hour or
@@ -1618,7 +1620,7 @@ $ make install</screen>
<para>Change directory to
<constant>&dollar;(FPTOOLS&lowbar;TOP)</constant> and
issue the command</para>
-<programlisting>autoreconf</programlisting>
+<screen>$ autoreconf</screen>
<indexterm><primary>autoreconf</primary></indexterm>
<para>(with no arguments). This GNU program (recursively) converts
<filename>&dollar;(FPTOOLS&lowbar;TOP)/configure.ac</filename> and
@@ -1650,7 +1652,7 @@ $ make install</screen>
<para>Runs the newly-created <command>configure</command>
script, thus:</para>
-<programlisting>./configure <optional><parameter>args</parameter></optional></programlisting>
+<screen>$ ./configure <optional><parameter>args</parameter></optional></screen>
<para><command>configure</command>'s mission is to scurry
round your computer working out what architecture it has,
@@ -1862,7 +1864,7 @@ $ make install</screen>
<filename>myfptools</filename> (it does not have to be
called <filename>fptools</filename>). Make sure that you
have the essential files (see <xref
- linkend="sec-source-tree">).</para>
+ linkend="sec-source-tree"/>).</para>
</listitem>
<listitem>
@@ -1870,8 +1872,8 @@ $ make install</screen>
<para>(Optional) Use <command>lndir</command> or
<command>mkshadowdir</command> to create a build tree.</para>
-<programlisting>$ cd myfptools
-$ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4</programlisting>
+<screen>$ cd myfptools
+$ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4</screen>
<para>(N.B. <command>mkshadowdir</command>'s first argument
is taken relative to its second.) You probably want to give
@@ -1884,14 +1886,14 @@ $ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4</programlisting>
<para>Change directory to the build tree. Everything is
going to happen there now.</para>
-<programlisting>$ cd /scratch/joe-bloggs/myfptools-sun4</programlisting>
+<screen>$ cd /scratch/joe-bloggs/myfptools-sun4</screen>
</listitem>
<listitem>
<para>Prepare for system configuration:</para>
-<programlisting>$ autoreconf</programlisting>
+<screen>$ autoreconf</screen>
<para>(You can skip this step if you are starting from a
source distribution, and you already have
@@ -1902,7 +1904,7 @@ $ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4</programlisting>
<listitem>
<para>Do system configuration:</para>
-<programlisting>$ ./configure</programlisting>
+<screen>$ ./configure</screen>
<para>Don't forget to check whether you need to add any
arguments to <literal>configure</literal>; for example, a
@@ -1915,7 +1917,7 @@ $ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4</programlisting>
adding definitions for your desired configuration
options.</para>
-<programlisting>$ emacs mk/build.mk</programlisting>
+<screen>$ emacs mk/build.mk</screen>
</listitem>
</orderedlist>
@@ -2185,7 +2187,7 @@ $ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4</programlisting>
<para>is only available in the root directory
<constant>&dollar;(FPTOOLS&lowbar;TOP)</constant>; it has
been discussed in <xref
- linkend="sec-build-config">.</para>
+ linkend="sec-build-config"/>.</para>
</listitem>
</varlistentry>
@@ -2268,7 +2270,7 @@ $ mkshadowdir . /scratch/joe-bloggs/myfptools-sun4</programlisting>
<command>make</command> is going to rebuild everything anyway,
the following hack may be useful:</para>
-<programlisting>gmake FAST=YES</programlisting>
+<screen>$ gmake FAST=YES</screen>
<para>This tells the make system to ignore dependencies and just
build what you tell it to. In other words, it's equivalent to
@@ -2368,7 +2370,7 @@ directive.
As its name suggests, <filename>boilerplate.mk</filename>
consists of a large quantity of standard
<filename>Makefile</filename> code. We discuss this
- boilerplate in more detail in <xref linkend="sec-boiler">.
+ boilerplate in more detail in <xref linkend="sec-boiler"/>.
<indexterm><primary>include, directive in
Makefiles</primary></indexterm> <indexterm><primary>Makefile
inclusion</primary></indexterm></para>
@@ -2419,7 +2421,7 @@ directive.
(the executable binary to be built). We will discuss in
more detail what the &ldquo;standard variables&rdquo; are,
and how they affect what happens, in <xref
- linkend="sec-targets">.</para>
+ linkend="sec-targets"/>.</para>
<para>The definition for <constant>SRCS</constant> uses the
useful GNU <command>make</command> construct
@@ -2439,11 +2441,11 @@ directive.
<filename>target.mk</filename><indexterm><primary>target.mk</primary></indexterm>.
It contains the rules that tell <command>gmake</command> how
to make the standard targets (<xref
- linkend="sec-standard-targets">). Why, you ask, can't this
+ linkend="sec-standard-targets"/>). Why, you ask, can't this
standard code be part of
<filename>boilerplate.mk</filename>? Good question. We
discuss the reason later, in <xref
- linkend="sec-boiler-arch">.</para>
+ linkend="sec-boiler-arch"/>.</para>
<para>You do not <emphasis>have</emphasis> to
<literal>include</literal> the
@@ -2453,7 +2455,7 @@ directive.
canned rules in <filename>target.mk</filename>; the price
tag is that you have to understand what canned rules get
enabled, and what they do (<xref
- linkend="sec-targets">).</para>
+ linkend="sec-targets"/>).</para>
</listitem>
</orderedlist>
@@ -2509,7 +2511,7 @@ directive.
rare.) To give you the idea, here's part of the directory
structure for the (rather large) GHC project:</para>
-<screen>$(FPTOOLS_TOP)/ghc/
+<programlisting>$(FPTOOLS_TOP)/ghc/
Makefile
mk/
boilerplate.mk
@@ -2524,7 +2526,7 @@ directive.
Makefile
parser/...source files for parser...
renamer/...source files for renamer...
- ...etc...</screen>
+ ...etc...</programlisting>
<para>The sub-directories <filename>docs</filename>,
<filename>driver</filename>, <filename>compiler</filename>, and
@@ -2643,7 +2645,7 @@ directive.
<listitem>
<para><filename>target.mk</filename> contains
<command>make</command> rules for the standard targets
- described in <xref linkend="sec-standard-targets">. These
+ described in <xref linkend="sec-standard-targets"/>. These
rules are selectively included, depending on the setting of
certain <command>make</command> variables. These variables
are usually set in the middle section of the
@@ -2716,7 +2718,7 @@ directive.
</term>
<listitem>
<para>is the build configuration file we discussed at
- length in <xref linkend="sec-build-config">.</para>
+ length in <xref linkend="sec-build-config"/>.</para>
</listitem>
</varlistentry>
@@ -2927,7 +2929,7 @@ directive.
strings to pass to each program. For example, it defines
<constant>HC&lowbar;OPTS</constant><indexterm><primary>HC&lowbar;OPTS</primary></indexterm>,
the option strings to pass to the Haskell compiler. See
- <xref linkend="sec-suffix">.</para>
+ <xref linkend="sec-suffix"/>.</para>
</listitem>
</varlistentry>
@@ -2937,7 +2939,7 @@ directive.
</term>
<listitem>
<para>defines standard pattern rules&mdash;see <xref
- linkend="sec-suffix">.</para>
+ linkend="sec-suffix"/>.</para>
</listitem>
</varlistentry>
</variablelist>
@@ -3021,7 +3023,7 @@ directive.
<literal>mp</literal>. The variable
<constant>WAY&lowbar;CC&lowbar;OPTS</constant> holds
options to pass to the C compiler when compiling the
- standard way. (<xref linkend="sec-ways"> dicusses
+ standard way. (<xref linkend="sec-ways"/> dicusses
multi-way compilation.)</para>
</listitem>
</varlistentry>
@@ -3043,7 +3045,7 @@ directive.
<para>extra options to pass to all C compilations. This
is intended for command line use, thus:</para>
-<programlisting>gmake libHS.a EXTRA_CC_OPTS="-v"</programlisting>
+<screen>$ gmake libHS.a EXTRA_CC_OPTS="-v"</screen>
</listitem>
</varlistentry>
</variablelist>
@@ -3055,7 +3057,7 @@ directive.
<para><filename>target.mk</filename> contains canned rules for
all the standard targets described in <xref
- linkend="sec-standard-targets">. It is complicated by the fact
+ linkend="sec-standard-targets"/>. It is complicated by the fact
that you don't want all of these rules to be active in every
<filename>Makefile</filename>. Rather than have a plethora of
tiny files which you can include selectively, there is a single
@@ -3181,7 +3183,7 @@ directive.
<para>When <constant>SUBDIRS</constant> is defined,
<filename>target.mk</filename> includes a rather neat rule for
- the standard targets (<xref linkend="sec-standard-targets"> that
+ the standard targets (<xref linkend="sec-standard-targets"/> that
simply invokes <command>make</command> recursively in each of
the sub-directories.</para>
@@ -3271,7 +3273,7 @@ directive.
want these targets built for. The mechanism here is very
much like the recursive invocation of
<command>make</command> in sub-directories (<xref
- linkend="sec-subdirs">). It is up to you to set
+ linkend="sec-subdirs"/>). It is up to you to set
<constant>WAYS</constant> in your
<filename>Makefile</filename>; this is how you control what
ways will get built.</para>
@@ -3592,14 +3594,14 @@ $ make install</screen>
supported (or perhaps has been supported in the past, but
currently isn't). This is the easiest type of porting job,
but it still requires some careful bootstrapping. Proceed to
- <xref linkend="sec-booting-from-hc">.</para>
+ <xref linkend="sec-booting-from-hc"/>.</para>
</listitem>
<listitem>
<para>Your system's hardware architecture isn't supported by
GHC. This will be a more difficult port (though by comparison
perhaps not as difficult as porting gcc). Proceed to <xref
- linkend="unregisterised-porting">.</para>
+ linkend="unregisterised-porting"/>.</para>
</listitem>
</itemizedlist>
@@ -3625,7 +3627,7 @@ $ make install</screen>
supplied on the GHC download page, otherwise you'll have to
compile some up yourself, or start from
<emphasis>unregisterised</emphasis> HC files - see <xref
- linkend="unregisterised-porting">.</para>
+ linkend="unregisterised-porting"/>.</para>
<para>The following steps should result in a working GHC build
with full libraries:</para>
@@ -3652,7 +3654,7 @@ $ make install</screen>
command will execute the whole build process (it won't
install yet):</para>
-<screen>foo% distrib/hc-build --prefix=<replaceable>dir</replaceable></screen>
+<screen>$ distrib/hc-build --prefix=<replaceable>dir</replaceable></screen>
<indexterm><primary>--hc-build</primary></indexterm>
<para>By default, the installation directory is
@@ -3665,7 +3667,7 @@ $ make install</screen>
build process, you can install the resulting system, as
normal, with</para>
-<screen>foo% make install</screen>
+<screen>$ make install</screen>
</listitem>
</itemizedlist>
</sect2>
@@ -3879,7 +3881,7 @@ $ make hc-file-bundle Project=Ghc</screen>
from the intermediate C files we generated above. The
process of bootstrapping from C files is automated by the
script in <literal>distrib/hc-build</literal>, and is
- described in <xref linkend="sec-booting-from-hc">.</para>
+ described in <xref linkend="sec-booting-from-hc"/>.</para>
<screen>$ ./distrib/hc-build --enable-hc-boot-unregisterised</screen>
@@ -3942,7 +3944,7 @@ Hello World!</screen>
</term>
<listitem>
<para>Macros that cooperate with the mangler (see <xref
- linkend="sec-mangler">) to make proper tail-calls
+ linkend="sec-mangler"/>) to make proper tail-calls
work.</para>
</listitem>
</varlistentry>
@@ -4178,13 +4180,13 @@ above.
</itemizedlist>
-and try again: <command>gmake</command>. (see <xref linkend="sec-suffix"> for information about
+and try again: <command>gmake</command>. (see <xref linkend="sec-suffix"/> for information about
<constant>&lt;module&gt;&lowbar;HC&lowbar;OPTS</constant>.)
Alternatively, just cut to the chase:
-<screen>% cd ghc/compiler
-% make EXTRA_HC_OPTS=-optCrts-M128M</screen>
+<screen>$ cd ghc/compiler
+$ make EXTRA_HC_OPTS=-optCrts-M128M</screen>
</para>
@@ -4208,8 +4210,8 @@ this bug also suggests that you have an old GCC.
You <emphasis>may</emphasis> need to re-<command>ranlib</command><indexterm><primary>ranlib</primary></indexterm> your libraries (on Sun4s).
-<screen>% cd $(libdir)/ghc-x.xx/sparc-sun-sunos4
-% foreach i ( `find . -name '*.a' -print` ) # or other-shell equiv...
+<screen>$ cd $(libdir)/ghc-x.xx/sparc-sun-sunos4
+$ foreach i ( `find . -name '*.a' -print` ) # or other-shell equiv...
? ranlib $i
? # or, on some machines: ar s $i
? end</screen>
@@ -4465,7 +4467,7 @@ installing and running GHC may be found in the user guide. In general,
Win95/Win98 behave the same, and WinNT/Win2k behave the same.
</para>
<para>
-Make sure you read the preceding section on platforms (<xref linkend="platforms">)
+Make sure you read the preceding section on platforms (<xref linkend="platforms"/>)
before reading section.
You don't need Cygwin or MSYS to <emphasis>use</emphasis> GHC,
but you do need one or the other to <emphasis>build</emphasis> GHC.</para>
@@ -4658,7 +4660,7 @@ they don't recognise symlinks.
</para></listitem>
<listitem> <para>
-See the notes in <xref linkend="msys-install"> about <command>find</command> and <command>bzip</command>,
+See the notes in <xref linkend="msys-install"/> about <command>find</command> and <command>bzip</command>,
which apply to Cygwin too.
</para></listitem>
</itemizedlist>
@@ -4692,7 +4694,7 @@ To determine your home directory <command>ssh</command> first looks in
there with your userid, it'll use that entry to determine your home directory, <emphasis>ignoring
the setting of the environment variable $HOME</emphasis>. If the home directory is
bogus, <command>ssh</command> fails horribly. The best way to see what is going on is to say
-<programlisting>ssh -v cvs.haskell.org</programlisting>
+<screen>ssh -v cvs.haskell.org</screen>
which makes <command>ssh</command> print out information about its activity.
</para>
<para> You can fix this problem, either by correcting the home-directory field in
@@ -4756,9 +4758,9 @@ you need to add upon completion.
Install an executable Happy, from <ulink url="http://www.haskell.org/happy">http://www.haskell.org/happy</ulink>.
Happy is a parser generator used to compile the Haskell grammar. Under MSYS or Cygwin you can easily
build it from the source distribution using
-<programlisting>./configure
-make
-make install</programlisting>
+<screen>$ ./configure
+$ make
+$ make install</screen>
This should install it in <filename>/usr/local/bin</filename> (which maps to <filename>c:/msys/1.0/local/bin</filename>
on MSYS).
Make sure the installation directory is in your
@@ -4775,7 +4777,7 @@ Make sure the installation directory is in your
<listitem>
<para>GHC uses the <emphasis>mingw</emphasis> C compiler to
-generate code, so you have to install that (see <xref linkend="cygwin-and-mingw">).
+generate code, so you have to install that (see <xref linkend="cygwin-and-mingw"/>).
Just pick up a mingw bundle at
<ulink url="http://www.mingw.org/">http://www.mingw.org/</ulink>.
We install it in <filename>c:/mingw</filename>.
@@ -4802,7 +4804,7 @@ so you will need to add <filename>emacs/bin</filename> to your <literal>PATH</li
<listitem>
<para> Finally, check out a copy of GHC sources from
-the CVS repository, following the instructions above (<xref linkend="cvs-access">).
+the CVS repository, following the instructions above (<xref linkend="cvs-access"/>).
</para>
</listitem>
</itemizedlist>
@@ -4812,7 +4814,7 @@ the CVS repository, following the instructions above (<xref linkend="cvs-access"
<sect2><title>Building GHC</title>
<para>OK!
-Now go read the documentation above on building from source (<xref linkend="sec-building-from-source">);
+Now go read the documentation above on building from source (<xref linkend="sec-building-from-source"/>);
the bullets below only tell
you about Windows-specific wrinkles.</para>
<itemizedlist>
@@ -4843,9 +4845,9 @@ Solution: delete <filename>configure</filename> first.
After <command>autoreconf</command> run <command>./configure</command> in
<filename>fptools/</filename> thus:
-<screen>./configure --host=i386-unknown-mingw32 --with-gcc=c:/mingw/bin/gcc</screen>
+<screen>$ ./configure --host=i386-unknown-mingw32 --with-gcc=c:/mingw/bin/gcc</screen>
This is the point at which you specify that you are building GHC-mingw
-(see <xref linkend="ghc-mingw">). </para>
+(see <xref linkend="ghc-mingw"/>). </para>
<para> Both these options are important! It's possible to get into
trouble using the wrong C compiler!</para>
@@ -4875,9 +4877,9 @@ Be warned!
</para>
<para>
-If you want to build GHC-cygwin (<xref linkend="ghc-cygwin">)
+If you want to build GHC-cygwin (<xref linkend="ghc-cygwin"/>)
you'll have to do something more like:
-<screen>./configure --with-gcc=...the Cygwin gcc...</screen>
+<screen>$ ./configure --with-gcc=...the Cygwin gcc...</screen>
</para>
</listitem>
@@ -4890,7 +4892,7 @@ can be really confusing.
<listitem><para> You almost certainly want to set
<programlisting>SplitObjs = NO</programlisting>
-in your <filename>build.mk</filename> configuration file (see <xref linkend="sec-build-config">).
+in your <filename>build.mk</filename> configuration file (see <xref linkend="sec-build-config"/>).
This tells the build system not to split each library into a myriad of little object files, one
for each function. Doing so reduces binary sizes for statically-linked binaries, but on Windows
it dramatically increases the time taken to build the libraries in the first place.