## 6.2 Acquiring the Required Packages

Package Directory

We will install all our packages in a new directory we create especially for them. Say this directory is `/opt/packages`. Whatever it is, we will refer to it as packages throughout this document. Furthermore, we populate the packages directory with the following subdirectories:

Directory | Purpose
--- | ---
`dlls` | For the Dynamically Linked Libraries (DLLs).
`include` | For the packages' C/C++ header files (`.h`).
`lib` | For the libraries (`.a`).

Furthermore, we create a separate directory for the builds, for example, `/tmp/build`. We will refer to this as build.

Required Packages

The following table lists the packages we need, along with their versions and the place where they can be downloaded.

Package | Version | Location
--- | --- | ---
GNU MP | 4.1.2 | `ftp://ftp.gnu.org/pub/gnu/gmp/gmp-4.1.2.tar.gz`
zlib | 1.1.4 | `http://www.gzip.org/zlib.tar.gz`
Tcl/Tk | 8.4.6.0 | `http://aspn.activestate.com/ASPN/Downloads/ActiveTcl/`
GDBM | 1.8.3 | `ftp://ftp.gnu.org/pub/gnu/gdbm/gdbm-1.8.3.tar.gz`
regex | 0.12 | `ftp://ftp.gnu.org/pub/gnu/regex/regex-0.12.tar.gz`

Note that these are all source packages except for Tcl/Tk. You'll soon find out why.

Build Flags

The remainder of this chapter will use CFLAGS to indicate a meaningful set of flags for the C/C++ compilers. For instance, you can use the following, which we used for the last releases:

> `-mno-cygwin -O3 -fomit-frame-pointer -march=i586 -mcpu=i686`

It is imperative that you include `-mno-cygwin`!

A Note for the Lazy

There's some good news: If you are lazy enough that you would trust the packages I built, you can just obtain a copy of my packages directory from `http://www.mozart-oz.org/download/mozart-ftp/extras/packages.tgz` and skip most of the following sections (in fact, all but those about the msvcrt and Emacs). Be sure to adapt the included `tclConfig.sh` and `tkConfig.sh` files to reflect your system's paths!

### 6.2.1 Microsoft Visual C++ Runtime

This one is easy: You already have it! It is located in `$SYSTEMROOT/system32/` (at least under Windows 2000; if you're running 9x, then you'll have to locate it yourself). So we just copy it to our packages`/dlls` directory:

> `cp $SYSTEMROOT/system32/msvcrt.dll` packages`/dlls`

### 6.2.2 GNU MP

Unpack it, configure it, build it, and install it thus:

> `cd` build`
> tar zxvf gmp-4.1.2.tar.gz
> cd gmp-4.1.2
> ./configure --prefix=`packages`--disable-shared CFLAGS="`CFLAGS`"
> make
> make install`

You should end up with the following files:

packages`/include/gmp.h`
packages`/lib/libgmp.a`

### 6.2.3 zlib

Unpack it, configure it, build it, and install it thus:

> `cd` build`
> tar zxvf zlib-1.1.4.tar.gz
> cd zlib-1.1.4
> CFLAGS="`CFLAGS`" ./configure --prefix=`packages`
> make
> make install`

You should end up with the following files:

packages`/include/zlib.h`
packages`/include/zconf.h`
packages`/lib/libz.a`

### 6.2.4 Tcl/Tk

Install your Tcl/Tk distribution (for example, ActiveTcl). Copy the following files and directories from the installed location:

packages`/include/tcl.h`
packages`/include/tclDecls.h`
packages`/include/tclPlatDecls.h`
packages`/include/tk.h`
packages`/include/tkDecls.h`
packages`/include/tkIntXlibDecls.h`
packages`/include/tkPlatDecls.h`
packages`/include/X11/*`
packages`/lib/tk8.4/*`
packages`/lib/tcl8.4/*`
packages`/dlls/tcl84.dll`
packages`/dlls/tclpip84.dll`
packages`/dlls/tk84.dll`

Unfortunately, Windows Tcl/Tk distributions come without the all-important `tclConfig.sh` and `tkConfig.sh` files, which we therefore have to create manually (directly in the packages directory). `tclConfig.sh` should have the following contents:

> `# tclConfig.sh --
> TCL_VERSION='8.4'
> TCL_PREFIX='`packages`'
> TCL_LIBS=''
> TCL_LIB_SPEC='`packages`/dlls/tcl84.dll'`

Whereas `tkConfig.sh` ought to look like this:

> `# tkConfig.sh --
> TK_VERSION='8.4'
> TK_PREFIX='`packages`'
> TK_LIBS=''
> TK_LIB_SPEC='`packages`/dlls/tk84.dll'
> TK_XINCLUDES=''`

(Don't forget to substitute your actual packages directory for packages in these files!)

### 6.2.5 GDBM

Unpack it thus:

> `cd` packages`
> tar zxvf gdbm-1.8.3.tar.gz
> cd gdbm-1.8.3`

GDBM does not compile out-of-the-box for MinGW, so we have to apply a patch. Copy the file gdbm-1.8.3-patch.diff, then patch it, configure it, build it, and install it thus:

> `patch < gdbm-1.8.3-patch.diff
> CFLAGS="`CFLAGS`" ./configure --disable-shared
> make CFLAGS="`CFLAGS`"
> make prefix=`packages `install`

You should end up with the following files:

packages`/include/gdbm.h`
packages`/lib/libgdbm.a`

### 6.2.6 regex

Unpack it thus:

> `cd` packages`
> tar zxvf regex-0.12.tar.gz
> cd regex-0.12`

Like GDBM, the regex package needs a patch regex-0.12-patch.diff. Patch the package, configure it, build it, and install it thus:

> `patch < regex-0.12-patch.diff
> CFLAGS="`CFLAGS`" ./configure --prefix=`packages`
> make CFLAGS="`CFLAGS`"
> make prefix=`packages `install`

You should end up with the following files:

packages`/include/regex.h`
packages`/lib/libregex.a`

### 6.2.7 Emacs

You need an installed Emacs. You can get it at `http://www.gnu.org/software/emacs/windows/`. Unpack it somewhere, for example to `/cygdrive/c/Program\ Files/` and execute the `addpm.exe` binary in the `bin` subdirectory. We will refer to the directory where Emacs is installed as emacs.