<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>OpenJDK Build README</title>
    </head>
    <body style="background-color:lightcyan">
        <!-- ====================================================== -->
        +        <table width="100%">
            <tr>
                <td align="center">
                    <img alt="OpenJDK" 
                         src="http://openjdk.java.net/images/openjdk.png" 
                         width=256 />
                </td>
            </tr>
            <tr>
                <td align=center>
                    <h1>OpenJDK Build README</h1>
                </td>
            </tr>
        </table>
        <!-- ------------------------------------------------------ --> 
        <hr>
        <h2><a name="introduction">Introduction</a></h2>
        <blockquote>
            <p>
            This README file contains build instructions for the 
            <a href="http://openjdk.java.net"  target="_blank">OpenJDK</a>.
            Building the source code for the 
            OpenJDK
            requires
            a certain degree of technical expertise.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="contents">Contents</a></h2>
        <blockquote>
            <ul>
                <li><a href="#introduction">Introduction</a></li>
                <li><a href="#MBE">Minimum Build Environments</a></li>
                <li><a href="#SDBE">Specific Developer Build Environments</a></li>
                <li><a href="#directories">Source Directory Structure</a> </li>
                <li><a href="#building">Build Information</a>
                    <ul>
                        <li><a href="#gmake">GNU Make (<tt><i>gmake</i></tt>)</a> </li>
                        <li><a href="#linux">Basic Linux System Setup</a> </li>
                        <li><a href="#solaris">Basic Solaris System Setup</a> </li>
                        <li><a href="#windows">Basic Windows System Setup</a> </li>
                        <li><a href="#dependencies">Build Dependencies</a> </li>
                        <ul>
                            <li><a href="#bootjdk">Bootstrap JDK</a> </li>
                            <li><a href="#binaryplugs">Binary Plugs</a> </li>
                            <li><a href="#importjdk">Optional Import JDK</a> </li>
                            <li><a href="#ant">Ant</a> </li>
                            <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
                            <li><a href="#compilers">Compilers</a> 
                                <ul>
                                    <li><a href="#msvc">Microsoft Visual Studio</a> </li>
                                    <li><a href="#mssdk">Microsoft Platform SDK</a> </li>
                                    <li><a href="#gcc">Linux gcc/binutils</a> </li>
                                    <li><a href="#studio">Sun Studio</a> </li>
                                </ul>
                            </li>
                            <li><a href="#zip">Zip and Unzip</a> </li>
                            <li><a href="#freetype">FreeType2 Fonts</a> </li>
                            <li>Linux and Solaris:
                                <ul>
                                    <li><a href="#cups">CUPS Include files</a> </li>
                                </ul>
                            </li>
                            <li>Linux only:
                                <ul>
                                    <li><a href="#alsa">ALSA files</a> </li>
                                </ul>
                            </li>
                            <li>Windows only:
                                <ul>
                                    <li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>)</li>
                                    <li><a href="#dxsdk">DirectX 9.0 SDK</a> </li>
                                </ul>
                            </li>
                        </ul>
                    </ul>
                </li>
                <li><a href="#creating">Creating the Build</a> </li>
                <li><a href="#testing">Testing the Build</a> </li>
                <li><a href="#variables">Environment/Make Variables</a></li>
                <li><a href="#troubleshooting">Troubleshooting</a></li>
            </ul>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="MBE">Minimum Build Environments</a></h2>
        <blockquote>
            This file often describes specific requirements for what we call the
            "minimum build environments" (MBE) for the JDK.
            Building with the MBE will generate the most compatible
            bits that install on, and run correctly on, the most variations
            of the same base OS and hardware architecture.
            These usually represent what is often called the
            least common denominator platforms.
            It is understood that most developers will NOT be using these 
            specific platforms, and in fact creating these specific platforms
            may be difficult due to the age of some of this software.
            <p>
            The minimum OS and C/C++ compiler versions needed for building the
            OpenJDK:
            <p>
            <table border="1">
                <thead>
                    <tr>
                        <th>Base OS and Architecture</th>
                        <th>OS</th>
                        <th>Compiler</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Linux X86 (32bit)</td>
                        <td>Red Hat Enterprise Linux 4 </td>
                        <td>gcc 4 </td>
                    </tr>
                    <tr>
                        <td>Linux X64 (64bit)</td>
                        <td>Red Hat Enterprise Linux 4 </td>
                        <td>gcc 4 </td>
                    </tr>
                    <tr>
                        <td>Solaris SPARC (32bit)</td>
                        <td>Solaris 10 + patches 
                            <br>
                            See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
                            SunSolve</a> for patch downloads.
                        </td>
                        <td>Sun Studio 12</td>
                    </tr>
                    <tr>
                        <td>Solaris SPARCV9 (64bit)</td>
                        <td>Solaris 10 + patches
                            <br>
                            See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
                            SunSolve</a> for patch downloads.
                        </td>
                        <td>Sun Studio 12</td>
                    </tr>
                    <tr>
                        <td>Solaris X86 (32bit)</td>
                        <td>Solaris 10 + patches
                            <br>
                            See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
                            SunSolve</a> for patch downloads.
                        </td>
                        <td>Sun Studio 12</td>
                    </tr>
                    <tr>
                        <td>Solaris X64 (64bit)</td>
                        <td>Solaris 10 + patches
                            <br>
                            See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
                            SunSolve</a> for patch downloads.
                        </td>
                        <td>Sun Studio 12</td>
                    </tr>
                    <tr>
                        <td>Windows X86 (32bit)</td>
                        <td>Windows XP</td>
                        <td>Microsoft Visual Studio .NET 2003 Professional</td>
                    </tr>
                    <tr>
                        <td>Windows X64 (64bit)</td>
                        <td>Windows Server 2003 - Enterprise x64 Edition</td>
                        <td>Microsoft Platform SDK - April 2005</td>
                    </tr>
                </tbody>
            </table>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="SDBE">Specific Developer Build Environments</a></h2>
        <blockquote>
            We won't be listing all the possible environments, but
            we will try to provide what information we have available to us.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h3><a name="fedora">Fedora</a></h3>
        <blockquote>
            TBD
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h3><a name="debian">Debian</a></h3>
        <blockquote>
            TBD
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h3><a name="ubuntu">Ubuntu</a></h3>
        <blockquote>
            In addition to needing the Bootstrap JDK and the Binary Plugs, 
            when building on Ubuntu you will need to
            make sure certain packages are installed.
            In particular, certain X11 packages, make, m4, gawk, gcc 4, 
            binutils, cups, freetype
            and alsa.
            <!-- ------------------------------------------------------ -->
            <h4>Ubuntu 6.06</h4>
            <p>
            The following list of packages for Ubuntu 6.06 is a working set that
            does appear to work. 
            <p>
            <b>Note that it's quite possible that some of these
                packages are not required, so anyone discovering that some of the
                packages listed below are NOT required,
                please let the
                OpenJDK
            team know.</b>
            <p>
            All the packages below can be installed with the
            Synaptic Package manager provided with the base Ubuntu 6.06 release.
            <blockquote>
                <ul>
                    <li>binutils (2.16.1cvs20060117-1ubuntu2.1)</li>
                    <li>cpp (4:4.0.3-1)</li>
                    <li>cpp-4.0 (4.0.3-1ubuntu5)</li>
                    <li>libfreetype6-dev</li>
                    <li>g++ (4:4.0.3-1)</li>
                    <li>g++-4.0 (4.0.3-1ubuntu5)</li>
                    <li>gawk (1:3.1.5-2build1)</li>
                    <li>gcc (4:4.0.3-1)</li>
                    <li>gcc-4.0 (4.0.3-1ubuntu5)</li>
                    <li>libasound2-dev (1.0.10-2ubuntu4)</li>
                    <li>libc6 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li>
                    <li>libc6-dev (2.3.6-0ubuntu20.4)</li>
                    <li>libc6-i686 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li>
                    <li>libcupsys2-dev (1.2.2-0ubuntu0.6.06)</li>
                    <li>libgcrypt11-dev (1.2.2-1)</li>
                    <li>libgnutls-dev (1.2.9-2ubuntu1.1)</li>
                    <li>libgnutls12 (1.2.9-2ubuntu1) to 1.2.9-2ubuntu1.1</li>
                    <li>libgpg-error-dev (1.1-4)</li>
                    <li>libice-dev (2:1.0.0-0ubuntu2)</li>
                    <li>liblockfile1 (1.06.1)</li>
                    <li>libopencdk8-dev (0.5.7-2)</li>
                    <li>libpopt-dev (1.7-5)</li>
                    <li>libsm-dev (2:1.0.0-0ubuntu2)</li>
                    <li>libstdc++6-4.0-dev (4.0.3-1ubuntu5)</li>
                    <li>libtasn1-2-dev (0.2.17-1ubuntu1)</li>
                    <li>libx11-dev (2:1.0.0-0ubuntu9)</li>
                    <li>libxau-dev (1:1.0.0-0ubuntu4)</li>
                    <li>libxaw-headers (2:1.0.1-0ubuntu3)</li>
                    <li>libxaw7-dev (2:1.0.1-0ubuntu3)</li>
                    <li>libxdmcp-dev (1:1.0.0-0ubuntu2)</li>
                    <li>libxext-dev (2:1.0.0-0ubuntu4)</li>
                    <li>libxi-dev (2:1.0.0-0ubuntu3) </li>
                    <li>libxmu-dev (2:1.0.0-0ubuntu3)</li>
                    <li>libxmu-headers (2:1.0.0-0ubuntu3)</li>
                    <li>libxmuu-dev (2:1.0.0-0ubuntu3)</li>
                    <li>libxp-dev (6.8.2-11ubuntu2)</li>
                    <li>libxpm-dev (1:3.5.4.2-0ubuntu3)</li>
                    <li>libxrandr-dev (1:1.1.0.2-0ubuntu4)</li>
                    <li>libxt-dev (1:1.0.0-0ubuntu3)</li>
                    <li>libxtrap-dev (2:1.0.0-0ubuntu2)</li>
                    <li>libxtst-dev (2:1.0.1-0ubuntu2)</li>
                    <li>libxv-dev (2:1.0.1-0ubuntu3)</li>
                    <li>linux-kernel-headers (2.6.11.2-0ubuntu18)</li>
                    <li>m4 (1.4.4-1)</li>
                    <li>make (3.80+3.81.b4-1)</li>
                    <li>ssl-cert (1.0.13)</li>
                    <li>x-dev (7.0.4-0ubuntu2)</li>
                    <li>x11proto-core-dev (7.0.4-0ubuntu2)</li>
                    <li>x11proto-input-dev (1.3.2-0ubuntu2)</li>
                    <li>x11proto-kb-dev (1.0.2-0ubuntu2)</li>
                    <li>x11proto-randr-dev (1.1.2-0ubuntu2)</li>
                    <li>x11proto-record-dev (1.13.2-0ubuntu2)</li>
                    <li>x11proto-trap-dev (3.4.3-0ubuntu2)</li>
                    <li>x11proto-video-dev (2.2.2-0ubuntu2)</li>
                    <li>x11proto-xext-dev (7.0.2-0ubuntu2)</li>
                    <li>xlibs-dev (7.0.0-0ubuntu45)</li>
                    <li>zlib1g-dev (1:1.2.3-6ubuntu4)</li>
                </ul>
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4>Ubuntu 7.04</h4>
            <p>
            Using the Synaptic Package Manager, download the following
            packages (double indented packages are automatically aquired
            due to package dependencies):
            <blockquote>
                <ul>
                    <li>build-essential</li>
                    <ul>
                        <li>dpkg-dev</li>
                        <li>g++</li>
                        <li>g++-4.1</li>
                        <li>libc6-dev</li>
                        <li>libstdc++6.4.1-dev</li>
                        <li>linux-libc-dev</li>
                    </ul>
                    <li>gawk</li>
                    <li>m4</li>
                    <li>libasound2-dev</li>
                    <li>libcupsys2-dev</li>
                    <ul>
                        <li>libgcrypt11-dev</li>
                        <li>lgnutls-dev</li>
                        <li>libgpg-error-dev</li>
                        <li>liblzo-dev</li>
                        <li>libopencdk8-dev</li>
                        <li>libpopt-dev</li>
                        <li>libtasn1-3-dev</li>
                        <li>zlib1g-dev</li>
                    </ul>
                    <li>sun-java6-jdk</li>
                    <ul>
                        <li>java-common</li>
                        <li>libltdl3</li>
                        <li>odbcinst1debian1</li>
                        <li>sun-java6-bin</li>
                        <li>sun-java6-jre</li>
                        <li>unixodbc</li>
                    </ul>
                    <li>xlibs-dev</li>
                    <ul>
                        <li>(many)</li>
                    </ul>
                    <li>x11proto-print-dev</li>
                    <li>libxaw7-dev</li>
                    <ul>
                        <li>libxaw-headers</li>
                    </ul>
                    <li>libxp-dev</li>
                    <li>libfreetype6-dev</li>
                </ul>
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="directories">Source Directory Structure</a></h2>
        <blockquote>
            <p>
            The source code for the OpenJDK is delivered in a set of
            directories:
            <tt>hotspot</tt>, 
            <tt>langtools</tt>, 
            <tt>corba</tt>, 
            <tt>jaxws</tt>, 
            <tt>jaxp</tt>, 
            and
            <tt>jdk</tt>.
            The <tt>hotspot</tt> directory contains the source code and make
            files for building the OpenJDK Hotspot Virtual Machine. 
            The <tt>langtools</tt> directory contains the source code and make
            files for building the OpenJDK javac and language tools.
            The <tt>corba</tt> directory contains the source code and make
            files for building the OpenJDK Corba files.
            The <tt>jaxws</tt> directory contains the source code and make
            files for building the OpenJDK JAXWS files.
            The <tt>jaxp</tt> directory contains the source code and make
            files for building the OpenJDK JAXP files.
            The <tt>jdk</tt> directory contains the source code and make files for
            building the OpenJDK runtime libraries and misc files.
            The top level <tt>Makefile</tt>
            is used to build the entire OpenJDK.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="building">Build Information</a></h2>
        <blockquote>
            Building the OpenJDK
            is done with a <tt><i>gmake</i></tt>
            command line and various
            environment or make variable settings that direct the make rules
            to where various components have been installed.
            Where possible the makefiles will attempt to located the various
            components in the default locations or any component specific 
            variable settings.
            When the normal defaults fail or components cannot be found,
            the various
            <tt>ALT_*</tt> variables (alternates)
            can be used to help the makefiles locate components.
            <p>
            Refer to the bash/sh/ksh setup file
            <tt>jdk/make/jdk_generic_profile.sh</tt>
            if you need help in setting up your environment variables.
            A build could be as simple as:
            <blockquote>
                <pre><tt>
                bash
                . jdk/make/jdk_generic_profile.sh
                <i>gmake</i> sanity &amp;&amp; <i>gmake</i>
                </tt></pre>
            </blockquote>
            <p>
            Of course ksh or sh would work too.
            But some customization will probably be necessary.
            The <tt>sanity</tt> rule will make some basic checks on build
            dependencies and generate appropriate warning messages
            regarding missing, out of date, or newer than expected components
            found on your system.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="gmake">GNU make (<tt><i>gmake</i></tt>)</a></h3>
        <blockquote>
            The Makefiles in the OpenJDK are only valid when used with the 
            GNU version of the utility command <tt>make</tt>
            (<tt><i>gmake</i></tt>).
            A few notes about using GNU make:
            <ul>
                <li>
                    In general, you need GNU make version 3.78.1 or newer.
                </li>
                <li>
                    Place the location of the GNU make binary in the <tt>PATH</tt>. 
                </li>
                <li>
                    <strong>Linux:</strong>
                    The <tt>/usr/bin/make</tt> command should work fine for you.
                </li>
                <li>
                    <strong>Solaris:</strong>
                    Do NOT use <tt>/usr/bin/make</tt> on Solaris.
                    If your Solaris system has the software
                    from the Solaris Companion CD installed, 
                    you should use <tt>gmake</tt>
                    which will be located in either the <tt>/opt/sfw/bin</tt> or 
                    <tt>/usr/sfw/bin</tt> directory.
                    In more recent versions of Solaris GNU make can be found
                    at <tt>/usr/bin/gmake</tt>. 
                </li>
                <li>
                    <strong>Windows:</strong>
                    Make sure you start your build inside a bash/sh/ksh shell.
                    <br>
                    <b>WARNING:</b> Watch out for make version 3.81, it may
                    not work due to a lack of support for MS-DOS drive letter paths
                    like <tt>C:/</tt> or <tt>C:\</tt>.
                    Use a 3.80 version, or find a newer
                    version that has this problem fixed, like 3.82.
                    The older 3.80 version of make.exe can be downloaded with this
                    <a href="http://cygwin.paracoda.com/release/make/make-3.80-1.tar.bz2" target="_blank">
                    link</a>.
                    Use of this older 3.80 make.exe may require that you install the
                    libintl2.dll library or libintl2 cygwin package which is
                    no longer installed by default by the cygwin installer.
                    <br>
                    Also see the
                    <a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank">
                    mozilla developer center</a>
                    on this topic.
                    <br>
                    It's hoped that when make 3.82 starts shipping in a future cygwin
                    release that this MS-DOS path issue will be fixed.
                    In addition to the above 3.80 make.exe you can download 
                    this
                    <a href="http://www.cmake.org/files/cygwin/make.exe">
                    www.cmake.org make.exe</a> which will not have a libintl2.dll
                    dependency.
                </li>
            </ul>
            <p>
            Information on GNU make, and access to ftp download sites, are
            available on the
            <a href="http://www.gnu.org/software/make/make.html" target="_blank">
                GNU make web site
            </a>.
            The latest source to GNU make is available at
            <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
            ftp.gnu.org/pub/gnu/make/</a>.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="linux">Basic Linux System Setup</a></h3>
        <blockquote>
            <strong>i586 only:</strong>
            The minimum recommended hardware for building the Linux version
            is a Pentium class processor or better, at least 256 MB of RAM, and
            approximately 1.5 GB of free disk space.
            <p> 
            <strong>X64 only:</strong>
            The minimum recommended hardware for building the Linux
            version is an AMD Opteron class processor, at least 512 MB of RAM, and
            approximately 4 GB of free disk space.
            <p> 
            The build will use the tools contained in 
            <tt>/bin</tt> and 
            <tt>/usr/bin</tt>
            of a standard installation of the Linux operating environment. 
            You should ensure that these directories are in your 
            <tt>PATH</tt>.
            <p>
            Note that some Linux systems have a habit of pre-populating
            your environment variables for you, for example <tt>JAVA_HOME</tt>
            might get pre-defined for you to refer to the JDK installed on
            your Linux system. 
            You will need to unset <tt>JAVA_HOME</tt>.
            It's a good idea to run <tt>env</tt> and verify the
            environment variables you are getting from the default system
            settings make sense for building the 
            OpenJDK.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4><a name="linux_checklist">Basic Linux Check List</a></h4>
        <blockquote>
            <ol>
                <li>
                    Install the
                    <a href="#bootjdk">Bootstrap JDK</a>, set
                    <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
                </li>
                <li>
                    Install the
                    <a href="#binaryplugs">Binary Plugs</a>, set
                    <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.
                </li>
                <li>
                    <a href="#importjdk">Optional Import JDK</a>, set
                    <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
                </li>
                <li>
                    Install or upgrade the <a href="#freetype">FreeType development
                    package</a>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant</a>, set
                    <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
                </li>
            </ol>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="solaris">Basic Solaris System Setup</a></h3>
        <blockquote>
            The minimum recommended hardware for building the
            Solaris SPARC version is an UltraSPARC with 512 MB of RAM. 
            For building
            the Solaris x86 version, a Pentium class processor or better and at
            least 512 MB of RAM are recommended. 
            Approximately 1.4 GB of free disk
            space is needed for a 32-bit build.
            <p>
            If you are building the 64bit version, you should
            run the command "isainfo -v" to verify that you have a
            64-bit installation, it should say <tt>sparcv9</tt> or
            <tt>amd64</tt>.
            An additional 7 GB of free disk space is needed
            for a 64-bit build.
            <p> 
            The build uses the tools contained in <tt>/usr/ccs/bin</tt>
            and <tt>/usr/bin</tt> of a standard developer or full installation of
            the Solaris operating environment.
            <p> 
            Solaris patches specific to the JDK can be downloaded from the 
            <a href="http://sunsolve.sun.com/show.do?target=patches/JavaSE" target="_blank">
            SunSolve JDK Solaris patches download page</a>.
            You should ensure that the latest patch cluster for
            your version of the Solaris operating environment has also
            been installed.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4><a name="solaris_checklist">Basic Solaris Check List</a></h4>
        <blockquote>
            <ol>
                <li>
                    Install the
                    <a href="#bootjdk">Bootstrap JDK</a>, set
                    <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
                </li>
                <li>
                    Install the
                    <a href="#binaryplugs">Binary Plugs</a>, set
                    <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.
                </li>
                <li>
                    <a href="#importjdk">Optional Import JDK</a>, set
                    <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
                </li>
                <li>
                    Install the
                    <a href="#studio">Sun Studio Compilers</a>, set
                    <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
                </li>
                <li>
                    Install the
                    <a href="#cups">CUPS Include files</a>, set
                    <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant</a>, set
                    <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
                </li>
            </ol>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="windows">Basic Windows System Setup</a></h3>
        <blockquote> 
            <strong>i586 only:</strong>
            The minimum recommended hardware for building the 32bit or X86
            Windows version is an Pentium class processor or better, at least
            512 MB of RAM, and approximately 600 MB of free disk space.
            <strong>
                NOTE: The Windows 2000 build machines need to use the
                file system NTFS. 
                Build machines formatted to FAT32 will not work 
                because FAT32 doesn't support case-sensitivity in file names.
            </strong>
            <p> 
            <strong>X64 only:</strong>
            The minimum recommended hardware for building
            the Windows X64 version is an AMD Opteron class processor, at least 1
            GB of RAM, and approximately 10 GB of free disk space.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4><a name="paths">Windows Paths</a></h4>
        <blockquote>
            <strong>Windows:</strong>
            Note that GNU make is a historic utility and is based very
            heavily on shell scripting, so it does not tolerate the Windows habit
            of having spaces in pathnames or the use of the <tt>\</tt>characters in pathnames.
            Luckily on most Windows systems, you can use <tt>/</tt>instead of \, and
            there is always a 'short' pathname without spaces for any path that 
            contains spaces.
            Unfortunately, this short pathname can be somewhat dynamic and the
            formula is difficult to explain.
            You can use <tt>cygpath</tt> utility to map pathnames with spaces
            or the <tt>\</tt>character into the <tt>C:/</tt> style of pathname
            (called 'mixed'), e.g.
            <tt>cygpath -s -m "<i>path</i>"</tt>.
            <p>
            The makefiles will try to translate any pathnames supplied
            to it into the <tt>C:/</tt> style automatically.
            <p>
            Note that use of CYGWIN creates a unique problem with regards to
            setting <a href="#path"><tt>PATH</tt></a>. Normally on Windows
            the <tt>PATH</tt> variable contains directories
            separated with the ";" character (Solaris and Linux uses ":").
            With CYGWIN, it uses ":", but that means that paths like "C:/path"
            cannot be placed in the CYGWIN version  of <tt>PATH</tt> and
            instead CYGWIN uses something like <tt>/cygdrive/c/path</tt>
            which CYGWIN understands, but only CYGWIN understands.
            So be careful with paths on Windows.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4><a name="windows_checklist">Basic Windows Check List</a></h4>
        <blockquote>
            <ol>
                <li>
                    Install the
                    <a href="#cygwin">CYGWIN product</a>. 
                </li>
                <li>
                    Install the 
                    <a href="#bootjdk">Bootstrap JDK</a>, set
                    <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
                </li>
                <li>
                    Install the
                    <a href="#binaryplugs">Binary Plugs</a>, set
                    <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>..
                </li>
                <li>
                    <a href="#importjdk">Optional Import JDK</a>, set
                    <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
                </li>
                <li>
                    Install the
                    <a href="#msvc">Microsoft Visual Studio .NET 2003 Professional</a> or the 
                    <a href="#mssdk">Microsoft Platform SDK</a>.
                </li>
                <li>
                    Setup all environment variables for compilers 
                    (see <a href="#msvc">compilers</a>).
                </li>
                <li>
                    Install 
                    <a href="#dxsdk">Microsoft DirectX SDK</a>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant</a>, set
                    <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
                </li>
            </ol>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="dependencies">Build Dependencies</a></h3>
        <blockquote>
            Depending on the platform, the OpenJDK build process has some basic
            dependencies on components not part of the OpenJDK sources.
            Some of these are specific to a platform, some even specific to
            an architecture.
            Each dependency will have a set of ALT variables that can be set
            to tell the makefiles where to locate the component.
            In most cases setting these ALT variables may not be necessary
            and the makefiles will find defaults on the system in standard
            install locations or through component specific variables.
            <!-- ------------------------------------------------------ -->
            <h4><a name="bootjdk">Bootstrap JDK</a></h4>
            <blockquote>
                All OpenJDK builds require access to the previously released 
                JDK 6, this is often called a bootstrap JDK.
                The JDK 6 binaries can be downloaded from Sun's 
                <a href="http://java.sun.com/javase/1.6.0/download.html" target="_blank">JDK 6 download site</a>.
                For build performance reasons
                is very important that this bootstrap JDK be made available on the
                local disk of the machine doing the build.
                You should always set 
                <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>
                to point to the location of
                the bootstrap JDK installation, this is the directory pathname
                that contains a <tt>bin, lib, and include</tt>
                It's also a good idea to also place its <tt>bin</tt> directory
                in the <tt>PATH</tt> environment variable, although it's
                not required.
                <p>
                <strong>Solaris:</strong>
                Some pre-installed JDK images may be available to you in the
                directory <tt>/usr/jdk/instances</tt>.
                If you don't set
                <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>
                the makefiles will look in that location for a JDK it can use.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="binaryplugs">Binary Plugs</a></h4>
            <blockquote>
                Not all of the source code that makes up the JDK is available
                under an open-source license.
                This is a temporary situation and these binary plugs will be
                replaced with fully open source replacements as soon as possible.
                So currently, in order to build a complete OpenJDK image,
                you must first download and install the appropriate
                binary plug bundles for the OpenJDK, go to the
                <a href="http://openjdk.java.net" target="_blank">OpenJDK</a> site and select
                the "<b>Bundles(7)</b>" link and download the binaryplugs for
                your particular platform.
                The file downloaded is a jar file that must be extracted by running
                the jar file with:
                <blockquote>
                    <pre>
            <tt><b>java -jar jdk-7-ea-plug-b<i>nn</i>-<i>os</i>-<i>arch</i>-<i>dd</i>_<i>month</i>_<i>year</i>.jar</b></tt>
                    </pre>
                </blockquote>
                A prompt will be issued for acceptance of these binary plug files.
                During the OpenJDK build process these "binary plugs"
                for the encumbered components will be copied into your
                resulting OpenJDK binary build image.
                These binary plug files are only for the purpose of
                building an OpenJDK binary.
                Make sure you set
                <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>
                to the root of this installation.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="importjdk">Optional Import JDK</a></h4>
            <blockquote>
                The <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>
                setting is only needed if you are not building the entire
                JDK. For example, if you have built the entire JDK once, and
                wanted to avoid repeatedly building the Hotspot VM, you could
                set this to the location of the previous JDK install image
                and the build will copy the needed files from this import area.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="ant">Ant</a></h4>
            <blockquote>
                All OpenJDK builds require access to least Ant 1.6.5.
                The Ant tool is available from the 
                <a href="http://ant.apache.org/antlibs/bindownload.cgi" target="_blank">
                Ant download site</a>.
                You should always set 
                <tt><a href="#ANT_HOME">ANT_HOME</a></tt>
                to point to the location of
                the Ant installation, this is the directory pathname
                that contains a <tt>bin and lib</tt>.
                It's also a good idea to also place its <tt>bin</tt> directory
                in the <tt>PATH</tt> environment variable, although it's
                not absolutely required.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="cacerts">Certificate Authority File (cacert)</a></h4>
            <blockquote>
                See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank">
                http://en.wikipedia.org/wiki/Certificate_Authority</a>
                for a better understanding of the Certificate Authority (CA).
                A certificates file named "cacerts"
                represents a system-wide keystore with CA certificates. 
                In JDK and JRE
                binary bundles, the "cacerts" file contains root CA certificates from
                several public CAs (e.g., VeriSign, Thawte, and Baltimore).
                The source contain a cacerts file
                without CA root certificates. 
                Formal JDK builders will need to secure
                permission from each public CA and include the certificates into their
                own custom cacerts file. 
                Failure to provide a populated cacerts file
                will result in verification errors of a certificate chain during runtime.
                The variable 
                <tt><a href="#ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt>
                can be used to override the default location of the
                cacerts file that will get placed in your build.
                By default an empty cacerts file is provided and that should be
                fine for most JDK developers.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="compilers">Compilers</a></h4>
            <blockquote>
                <strong><a name="gcc">Linux gcc/binutils</a></strong>
                <blockquote>
                    The GNU gcc compiler version should be 3.2.2 or newer.
                    The binutils package should be 2.11.93.0.2-11 or newer.
                    The compiler used should be the default compiler installed
                    in <tt>/usr/bin</tt>.
                    <p>
                    Older Linux systems may require a gcc and bunutils update.
                    The Redhat Enterprise Advanced Server 2.1 update 2 system
                    is one of these systems.
                    RedHat Linux users can obtain this binutils package from 
                    <a href="http://www.redhat.com" 
                       target="_blank">Redhat web site</a>. 
                    You will need to remove the default compiler and binutils
                    packages and install the required packages
                    into the default location on the system.
                    However if you have a new video card driver, like 
                    Geforce 4 it is best to use
                    the same compiler as the kernel was built with to 
                    build the new video card driver module.
                    So you should build the modules before making this change.
                </blockquote>
                <strong><a name="studio">Solaris: Sun Studio</a></strong>
                <blockquote>
                    At a minimum, the
                    <a href="http://developers.sun.com/sunstudio/index.jsp" target="_blank">
                    Sun Studio 12 Compilers</a>
                    (containing version 5.9 of the C and C++ compilers) is required,
                    with patches from the
                    <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access" target="_blank">
                    SunSolve web site</a>.
                    <p> 
                    Set 
                    <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>
                    to point to the location of
                    the compiler binaries, and place this location in the <tt>PATH</tt>.
                    <p>
                    The Sun Studio Express compilers at:
                    <a href="http://developers.sun.com/sunstudio/downloads/express.jsp" target="_blank">
                    Sun Studio Express Download site</a>
                    are also an option, although these compilers have not
                    been extensively used yet.
                </blockquote>
                <strong><a name="msvc">Windows i586: Microsoft Visual Studio .NET 2003 Professional</a></strong>
                <blockquote>
                    The 32-bit OpenJDK Windows build
                    requires Microsoft Visual Studio .NET 2003 (VS2003) Professional
                    Edition compiler. 
                    The compiler and other tools are expected to reside
                    in the location defined by the variable <tt>VS71COMNTOOLS</tt> which
                    is set by the Microsoft Visual Studio .NET installer.
                    <p> 
                    Once the compiler is installed, 
                    it is recommended that you run <tt>VCVARS32.BAT</tt> 
                    to set the compiler environment variables
                    <tt>MSVCDIR</tt>, 
                    <tt>INCLUDE</tt>,
                    <tt>LIB</tt>, and
                    <tt>PATH</tt> 
                    prior to building the 
                    OpenJDK.
                    The above environment variables <b>MUST</b> be set.
                    <p>
                    The Microsoft Visual Studio .NET 2005 (VS2005) compiler
                    will not work at this time due to the new runtime dll
                    and the manifest requirements.
                </blockquote>
                <strong><a name="mssdk">Windows X64: Microsoft Platform SDK April 2005</a></strong>
                <blockquote>
                    On <b>X64</b>, the Microsoft Platform Software
                    Development Kit (SDK), April 2005 Edition compiler,
                    is required for building the OpenJDK
                    because it contains the C/C++ compiler. 
                    You will need to minimally install the Core SDK and
                    the MDAC SDK features of this compiler.
                    <p>
                    Once the Platform SDK is installed,
                    it is recommended that you run <tt>SetEnv.Cmd /X64</tt> 
                    to set the compiler environment variables
                    <tt>MSSDK</tt>, 
                    <tt>MSTOOLS</tt>,
                    <tt>INCLUDE</tt>,
                    <tt>LIB</tt>, and
                    <tt>PATH</tt> 
                    prior to building the 
                    OpenJDK.
                    The above environment variables <b>MUST</b> be set.
                    <p>
                    Note that this compiler may say it's version is a
                    Microsoft Visual Studio .NET 2005 (VS2005), but be careful,
                    it will not match the official VS2005 product.
                    This Platform SDK compiler is only used on X64 builds.
                </blockquote>
            </blockquote>
            <!-- ------------------------------------------------------ --> 
            <h4><a name="zip">Zip and Unzip</a></h4>
            <blockquote>
                Version 2.2 (November 3rd 1997) or newer of the zip utility 
                and version 5.12 or newer of the unzip utility is needed 
                to build the JDK.
                With Solaris, Linux, and Windows CYGWIN, the zip and unzip
                utilities installed on the system should be fine.
                Information and the source code for
                ZIP.EXE and UNZIP.EXE is available on the
                <a href="http://www.info-zip.org" 
                   target="_blank">info-zip web site</a>.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="cups">Common UNIX Printing System (CUPS) Headers (Solaris &amp; Linux)</a></h4>
            <blockquote>
                <strong>Solaris:</strong>
                CUPS header files are required for building the 
                OpenJDK on Solaris.
                The Solaris header files can be obtained by installing 
                the package <strong>SFWcups</strong> from the Solaris Software
                Companion CD/DVD, these often will be installed into 
                <tt>/opt/sfw/cups</tt>.
                <p>
                <strong>Linux:</strong>
                CUPS header files are required for building the 
                OpenJDK on Linux.
                The Linux header files are usually available from a "cups"
                development package, it's recommended that you try and use
                the package provided by the particular version of Linux that
                you are using.
                <p>
                The CUPS header files can always be downloaded from 
                <a href="http://www.cups.org" target="_blank">www.cups.org</a>.
                The variable 
                <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>
                can be used to override the default location of the
                CUPS Header files.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="freetype">FreeType 2</a></h4>
            <blockquote>
                Version 2.3 or newer of FreeType is required for building the OpenJDK.
                On Unix systems required files can be available as part of your
                distribution (while you still may need to upgrade them).
                Note that you need development version of package that 
                includes both FreeType library and header files.
                <p>
                You can always download latest FreeType version from the
                <a href="http://www.freetype.org" target="_blank">FreeType website</a>.
                <p>
                Makefiles will try to pick FreeType from /usr/lib and /usr/include.
                In case it is installed elsewhere you will need to set environment
                variables 
                <tt><a href="#ALT_FREETYPE_LIB_PATH">ALT_FREETYPE_LIB_PATH</a></tt>
                and 
                <tt><a href="#ALT_FREETYPE_HEADERS_PATH">ALT_FREETYPE_HEADERS_PATH</a></tt>
                to refer to place where library and header files are installed.
                <p>
                Building the freetype 2 libraries from scratch is also possible,
                however on Windows refer to the
                <a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
                Windows FreeType DLL build instructions</a>.
                <p>
                Note that by default FreeType is built with byte code hinting
                support disabled due to licensing restrictions.
                In this case, text appearance and metrics are expected to
                differ from Sun's official JDK build.
                See
                <a href="http://freetype.sourceforge.net/freetype2/index.html">
                    the SourceForge FreeType2 Home Page
                </a>
                for more information.
            </blockquote>    
            <!-- ------------------------------------------------------ -->
            <h4><a name="alsa">Advanced Linux Sound Architecture (ALSA) (Linux only)</a></h4>
            <blockquote>
                <strong>Linux only:</strong>
                Version 0.9.1 or newer of the ALSA files are
                required for building the OpenJDK on Linux.
                These Linux files are usually available from an "alsa"
                of "libasound"
                development package, it's highly recommended that you try and use
                the package provided by the particular version of Linux that
                you are using.
                The makefiles will check this emit a sanity error if it is
                missing or the wrong version.
                <p>
                In particular, older Linux systems will likely not have the
                right version of ALSA installed, for example
                Redhat AS 2.1 U2 and SuSE 8.1 do not include a sufficiently 
                recent ALSA distribution.
                On rpm-based systems, you can see if ALSA is installed by 
                running this command:
                <pre>
                    <tt>rpm -qa | grep alsa</tt>
                </pre>
                Both <tt>alsa</tt> and <tt>alsa-devel</tt> packages are needed.
                <p> 
                If your distribution does not come with ALSA, and you can't
                find ALSA packages built for your particular system,
                you can try to install the pre-built ALSA rpm packages from
                <a href="http://www.freshrpms.net/" target="_blank">
                <tt>www.freshrpms.net</tt></a>. 
                Note that installing a newer ALSA could
                break sound output if an older version of ALSA was previously
                installed on the system, but it will enable JDK compilation.
                <blockquote>
                    Installation: execute as root<br>
                    [i586]: <code>rpm -Uv --force alsa-lib-devel-0.9.1-rh61.i386.rpm</code><br>
                    [x64]: <code>rpm -Uv --force alsa-lib-devel-0.9.8-amd64.x86_64.rpm</code><br>
                    Uninstallation:<br>
                    [i586]: <code>rpm -ev alsa-lib-devel-0.9.1-rh61</code><br>
                    [x64]:<code>rpm -ev alsa-lib-devel-0.9.8-amd64</code><br>
                    Make sure that you do not link to the static library
                    (<tt>libasound.a</tt>),
                    by verifying that the dynamic library (<tt>libasound.so</tt>) is
                    correctly installed in <tt>/usr/lib</tt>.
                </blockquote>
                As a last resort you can go to the
                <a href="http://www.alsa-project.org" target="_blank">
                Advanced Linux Sound Architecture Site</a> and build it from
                source.
                <blockquote>
                    Download driver and library
                    source tarballs from 
                    <a href="http://www.alsa-project.org" target="_blank">ALSA's homepage</a>. 
                    As root, execute the following
                    commands (you may need to adapt the version number):
                    <pre>
                        <tt>
                            $ tar xjf alsa-driver-0.9.1.tar.bz2
                            $ cd alsa-driver-0.9.1
                            $ ./configure
                            $ make install
                            $ cd ..
                            $ tar xjf alsa-lib-0.9.1.tar.bz2
                            $ cd alsa-lib-0.9.1
                            $ ./configure
                            $ make install
                        </tt>
                    </pre>
                    Should one of the above steps fail, refer to the documentation on
                    ALSA's home page.
                </blockquote>
                Note that this is a minimum install that enables
                building the JDK platform. To actually use ALSA sound drivers, more
                steps are necessary as outlined in the documentation on ALSA's homepage.
                <p>
                ALSA can be uninstalled by executing <tt>make uninstall</tt> first in
                the <tt>alsa-lib-0.9.1</tt> directory and then in 
                <tt>alsa-driver-0.9.1</tt>.
            </blockquote>
            There are no ALT* variables to change the assumed locations of ALSA,
            the makefiles will expect to find the ALSA include files and library at:
            <tt>/usr/include/alsa</tt> and <tt>/usr/lib/libasound.so</tt>.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4>Windows Specific Dependencies</h4>
        <blockquote>
            <strong>Unix Command Tools (<a name="cygwin">CYGWIN</a>)</strong>
            <blockquote> 
                The OpenJDK requires access to a set of unix command tools
                on Windows which can be supplied by 
                <a href="http://www.cygwin.com" target="_blank">CYGWIN</a>. 
                <p>
                The OpenJDK build requires CYGWIN version 1.5.12 or newer. 
                Information about CYGWIN can
                be obtained from the CYGWIN website at 
                <a href="http://www.cygwin.com" target="_blank">www.cygwin.com</a>. 
                <p>
                By default CYGWIN doesn't install all the tools required for building
                the OpenJDK.
                Along with the default installation, you need to install
                the following tools.
                <blockquote>
                    <table border="1">
                        <thead>
                            <tr>
                                <td>Binary Name</td>
                                <td>Package</td>
                                <td>Description</td>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>ar.exe</td>
                                <td>Devel</td>
                                <td>binutils: The GNU assembler, linker and binary
                                utilities</td>
                            </tr>
                            <tr>
                                <td>make.exe</td>
                                <td>Devel</td>
                                <td>make: The GNU version of the 'make' utility<br>
                                <b>NOTE</b>: See <a href="#gmake">the GNU make section</a></td>
                            </tr>
                            <tr>
                                <td>m4.exe</td>
                                <td>Interpreters</td>
                                <td>m4: GNU implementation of the traditional Unix macro
                                processor</td>
                            </tr>
                            <tr>
                                <td>cpio.exe</td>
                                <td>Utils</td>
                                <td>cpio: A program to manage archives of files</td>
                            </tr>
                            <tr>
                                <td>gawk.exe</td>
                                <td>Utils</td>
                                <td>awk: Pattern-directed scanning and processing language</td>
                            </tr>
                            <tr>
                                <td>file.exe</td>
                                <td>Utils</td>
                                <td>file: Determines file type using 'magic' numbers</td>
                            </tr>
                            <tr>
                                <td>zip.exe</td>
                                <td>Archive</td>
                                <td>zip: Package and compress (archive) files</td>
                            </tr>
                            <tr>
                                <td>unzip.exe</td>
                                <td>Archive</td>
                                <td>unzip: Extract compressed files in a ZIP archive</td>
                            </tr>
                            <tr>
                                <td>free.exe</td>
                                <td>Procps</td>
                                <td>free: Display amount of free and used memory in the system</td>
                            </tr>
                        </tbody>
                    </table>
                </blockquote>
                <p>
                Note that the CYGWIN software can conflict with other non-CYGWIN
                software on your Windows system.
                CYGWIN provides a
                <a href="http://cygwin.com/faq/faq.using.html" target="_blank">FAQ</a> for
                known issues and problems, of particular interest is the
                section on
                <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
                BLODA (applications that interfere with CYGWIN)</a>.
            </blockquote>
            <strong><a name="dxsdk">Microsoft DirectX 9.0 SDK header files and libraries</a></strong>
            <blockquote>
                Microsoft DirectX 9.0 SDK (Summer 2004)
                headers are required for building
                OpenJDK.
                This SDK can be downloaded from 
                <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FD044A42-9912-42A3-9A9E-D857199F888E&amp;displaylang=en" target="_blank">
                Microsoft DirectX 9.0 SDK (Summer 2004)</a>.
                If the link above becomes obsolete, the SDK can be found from 
                <a href="http://download.microsoft.com" target="_blank">the Microsoft Download Site</a>
                (search with "DirectX 9.0 SDK Update Summer 2004"). 
                The location of this SDK can be set with 
                <tt><a href="#ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt>
                but it's normally found via the DirectX environment variable
                <tt>DXSDK_DIR</tt>.
            </blockquote>
            <strong><a name="msvcrt"><tt>MSVCRT.DLL</tt></a></strong>
            <blockquote> 
                <strong>i586 only:</strong>
                The OpenJDK 32bit build requires access to
                <tt>MSVCRT.DLL</tt> version 6.00.8337.0 or newer.
                If the <tt>MSVCRT.DLL</tt> is not installed in 
                the system32 directory set the 
                <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a>
                variable to the location.
                <p> 
                <strong>X64 only:</strong>
                The OpenJDK 64bit build requires access to
                <tt>MSVCRT.DLL</tt> version 7.0.3790.0 or newer, which is
                usually supplied by the
                <a href="#mssdk">Platform SDK</a>.
                If it is not available from the Platform SDK,
                set the 
                <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a>
                variable to the location.
            </blockquote>
            <strong><tt><a name="msvcr71">MSVCR71.DLL</a></tt></strong>
            <blockquote>
                <strong>i586 only:</strong>
                The 
                OpenJDK
                build requires access to 
                MSVCR71.DLL version 7.10.3052.4 or newer which should be
                supplied by the
                <a href="#msvc">Visual Studio product</a>
                If the <tt>MSVCR71.DLL</tt> is not available from the
                Visual Studio product
                set the 
                <a href="#ALT_MSVCR71_DLL_PATH"><tt>ALT_MSVCR71_DLL_PATH</tt></a>
                variable to the location.
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="creating">Creating the Build</a></h2>
        <blockquote>
            Once a machine is setup to build the OpenJDK,
            the steps to create the build are fairly simple.
            The various ALT settings can either be made into  variables
            or can be supplied on the 
            <a href="#gmake"><tt><i>gmake</i></tt></a> 
            command.
            <ol>
                <li>Use the sanity rule to double check all the ALT settings:
                    <blockquote>
                        <tt>
                            <i>gmake</i> 
                            sanity
                            [ARCH_DATA_MODEL=<i>32 or 64</i>]
                            [other "ALT_" overrides]
                        </tt>
                    </blockquote>
                </li>
                <li>Start the build with the command:
                    <blockquote>
                        <tt>
                            <i>gmake</i> 
                            [ARCH_DATA_MODEL=<i>32 or 64</i>]
                            [ALT_OUTPUTDIR=<i>output_directory</i>] 
                            [other "ALT_" overrides] 
                        </tt>
                    </blockquote>
                </li>
            </ol>
            <p>
            <strong>Solaris:</strong>
            Note that ARCH_DATA_MODEL is really only needed on Solaris to
            indicate you want to built the 64-bit version.
            And before the Solaris 64-bit binaries can be used, they
            must be merged with the binaries from a separate 32-bit build. 
            The merged binaries may then be used in either 32-bit or 64-bit mode, with
            the selection occurring at runtime 
            with the <tt>-d32</tt> or <tt>-d64</tt> options. 
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="testing">Testing the Build</a></h2>
        <blockquote>
            When the build is completed, you should see the generated
            binaries and associated files in the <tt>j2sdk-image</tt> 
            directory in the output directory. 
            The default output directory is
            <tt>build/<i>platform</i></tt>,
            where <tt><i>platform</i></tt> is one of
            <tt><ul>
                    <li>solaris-sparc</li>
                    <li>solaris-sparcv9</li>
                    <li>solaris-i586</li>
                    <li>solaris-amd64</li>
                    <li>linux-i586</li>
                    <li>linux-amd64</li>
                    <li>windows-i586</li>
                    <li>windows-amd64</li>
            </ul></tt>
            In particular, the 
            <tt>build/<i>platform</i>/j2sdk-image/bin</tt>
            directory should contain executables for the 
            OpenJDK tools and utilities.
            <p>
            You can test that the build completed properly by using the build
            to run the various demos that you will find in the 
            <tt>build/<i>platform</i>/j2sdk-image/demo</tt>
            directory.
            <p>
            The provided regression tests can be run with the <tt>jtreg</tt>
            utility from 
            <a href="http://openjdk.java.net/jtreg/" target="_blank">the jtreg site</a>.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="variables">Environment/Make Variables</a></h2>
        <p>
        Some of the
        environment or make variables (just called <b>variables</b> in this
        document) that can impact the build are:
        <blockquote>
            <dl>
                <dt><a name="ALT_BINARY_PLUGS_PATH"><tt>ALT_BINARY_PLUGS_PATH</tt></a></dt>
                <dd>
                    The location of the binary plugs installation.
                    See <a href="#binaryplugs">Binary Plugs</a> for more information.
                    You should always have a local copy of a
                    recent Binary Plugs install image
                    and set this variable to that location.
                </dd>
                <dt><a name="ALT_BOOTDIR"><tt>ALT_BOOTDIR</tt></a></dt>
                <dd>
                    The location of the bootstrap JDK installation. 
                    See <a href="#bootjdk">Bootstrap JDK</a> for more information.
                    You should always install your own local Bootstrap JDK and
                    always set <tt>ALT_BOOTDIR</tt> explicitly.
                </dd>
                <dt><a name="ALT_BUILD_BINARY_PLUGS_PATH"><tt>ALT_BUILD_BINARY_PLUGS_PATH</tt></a></dt>
                <dd>
                    These are useful in managing builds on multiple platforms.
                    The default network location for all of the binary plug images
                    for all platforms. 
                    If <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>
                    is not set, this directory will be used and should contain 
                    the following directories:
                    <tt>solaris-sparc</tt>,
                    <tt>solaris-i586</tt>,
                    <tt>solaris-sparcv9</tt>,
                    <tt>solaris-amd64</tt>,
                    <tt>linux-i586</tt>,
                    <tt>linux-amd64</tt>,
                    <tt>windows-i586</tt>,
                    and
                    <tt>windows-amd64</tt>.
                    Where each of these directories contain the binary plugs image
                    for that platform.
                </dd>
                <dt><a name="ALT_BUILD_JDK_IMPORT_PATH"><tt>ALT_BUILD_JDK_IMPORT_PATH</tt></a></dt>
                <dd>
                    These are useful in managing builds on multiple platforms.
                    The default network location for all of the import JDK images
                    for all platforms. 
                    If <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>
                    is not set, this directory will be used and should contain 
                    the following directories:
                    <tt>solaris-sparc</tt>,
                    <tt>solaris-i586</tt>,
                    <tt>solaris-sparcv9</tt>,
                    <tt>solaris-amd64</tt>,
                    <tt>linux-i586</tt>,
                    <tt>linux-amd64</tt>,
                    <tt>windows-i586</tt>,
                    and
                    <tt>windows-amd64</tt>.
                    Where each of these directories contain the import JDK image
                    for that platform.
                </dd>
                <dt><tt><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt></dt>
                <dd>
                    The location of the <a href="#cacerts">cacerts</a> file.
                    The default will refer to 
                    <tt>jdk/src/share/lib/security/cacerts</tt>.
                </dd>
                <dt><a name="ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> </dt>
                <dd>
                    The location of the C/C++ compiler.
                    The default varies depending on the platform. 
                </dd>
                <dt><a name="ALT_CUPS_HEADERS_PATH"><tt>ALT_CUPS_HEADERS_PATH</tt></a> </dt>
                <dd>
                    The location of the CUPS header files.
                    See <a href="#cups">CUPS information</a> for more information.
                    If this path does not exist the fallback path is 
                    <tt>/usr/include</tt>.
                </dd>
                <dt><tt><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></tt> </dt>
                <dd>
                    The location of tools like the 
                    <a href="#zip"><tt>zip</tt> and <tt>unzip</tt></a>
                    binaries, but might also contain the GNU make utility
                    (<tt><i>gmake</i></tt>).
                    So this area is a bit of a grab bag, especially on Windows.
                    The default value depends on the platform and
                    Unix Commands being used.
                    On Linux the default will be 
                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</tt>, 
                    on Solaris
                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</tt>, 
                    on Windows with MKS
                    <tt>%SYSTEMDRIVE%/UTILS</tt>, 
                    and on Windows with CYGWIN
                    <tt>/usr/bin</tt>.
                </dd>
                <dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt>
                <dd>
                    <strong>Windows Only:</strong>
                    The location of the 
                    <a href="#dxsdk">Microsoft DirectX 9 SDK</a>.
                    The default will be to try and use the DirectX environment
                    variable <tt>DXSDK_DIR</tt>,
                    failing that, look in <tt>C:/DXSDK</tt>.
                </dd>
                <dt><a name="ALT_FREETYPE_HEADERS_PATH"><tt>ALT_FREETYPE_HEADERS_PATH</tt></a></dt>
                <dd>
                    The location of the FreeType header files.
                    See <a href="#freetype">FreeType information</a> for details. 
                </dd>
                <dt><a name="ALT_FREETYPE_LIB_PATH"><tt>ALT_FREETYPE_LIB_PATH</tt></a></dt>
                <dd>
                    The location of the FreeType shared library. 
                    See <a href="#freetype">FreeType information</a> for details. 
                </dd>
                <dt><a name="ALT_JDK_DEVTOOLS_PATH"><tt>ALT_JDK_DEVTOOLS_PATH</tt></a></dt>
                <dd>
                    The default root location of the devtools.
                    The default value is 
                    <tt>$(ALT_SLASH_JAVA)/devtools</tt>.
                </dd>
                <dt><a name="ALT_JDK_IMPORT_PATH"><tt>ALT_JDK_IMPORT_PATH</tt></a></dt>
                <dd>
                    The location of a previously built JDK installation. 
                    See <a href="#importjdk">Optional Import JDK</a> for more information.
                </dd>
                <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt>
                <dd>
                    <strong>Windows Only:</strong>
                    The location of the Microsoft Visual Studio .NET 2003
                    tools 'bin' directory.
                    The default is usually derived from
                    <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
                </dd>
                <dt><tt><a name="ALT_MSVCR71_DLL_PATH">ALT_MSVCR71_DLL_PATH</a></tt> </dt>
                <dd>
                    <strong>Windows i586 only:</strong>
                    The location of the 
                    <a href="#msvcr71"><tt>MSVCR71.DLL</tt></a>. 
                </dd>
                <dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt>
                <dd>
                    <strong>Windows Only:</strong>
                    The location of the 
                    <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>. 
                </dd>
                <dt><a name="ALT_OUTPUTDIR"><tt>ALT_OUTPUTDIR</tt></a> </dt>
                <dd>
                    An override for specifying the (absolute) path of where the
                    build output is to go.
                    The default output directory will be build/<i>platform</i>.
                </dd>
                <dt><a name="ALT_SLASHJAVA"><tt>ALT_SLASHJAVA</tt></a></dt>
                <dd>
                    The default root location for many of the ALT path locations
                    of the following ALT variables.
                    The default value is 
                    <tt>"/java"</tt> on Solaris and Linux, 
                    <tt>"J:"</tt> on Windows.
                </dd>
                <dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt>
                <dd>
                    <strong>Solaris only:</strong>
                    An override for specifying where the Unix CCS
                    command set are located.
                    The default location is <tt>/usr/ccs/bin</tt> 
                </dd>
                <dt><a name="ALT_UNIXCOMMAND_PATH"><tt>ALT_UNIXCOMMAND_PATH</tt></a> </dt>
                <dd>
                    An override for specifying where the
                    Unix command set are located. 
                    The default location varies depending on the platform,
                    <tt>"%SYSTEMDRIVE%/MKSNT"</tt> or
                    <tt>$(ROOTDIR)</tt> on Windows with MKS, otherwise it's 
                    <tt>"/bin"</tt> or <tt>/usr/bin</tt>.
                </dd>
                <dt><a name="ALT_USRBIN_PATH"><tt>ALT_USRBIN_PATH</tt></a></dt>
                <dd>
                    An override for specifying where the
                    Unix <tt>/usr/bin</tt> commands are located. You usually do not need
                    to set this variable: the default location is <tt>/usr/bin</tt>)
                </dd>
                <dt><a name="ANT_HOME"><tt>ANT_HOME</tt></a></dt>
                <dd>
                    The location of the Ant installation. 
                    See <a href="#ant">Ant</a> for more information.
                    You should always set <tt>ANT_HOME</tt> explicitly.
                </dd>
                <dt><a name="arch_data_model"><tt>ARCH_DATA_MODEL</tt></a></dt>
                <dd>The <tt>ARCH_DATA_MODEL</tt> variable
                    is used to specify whether the build is to generate 32-bit or 64-bit
                    binaries. 
                    The Solaris build supports either 32-bit or 64-bit builds, but
                    Windows and Linux will support only one, depending on the specific
                    OS being used.
                    Normally, setting this variable is only necessary on Solaris.
                    Set <tt>ARCH_DATA_MODEL</tt> to <tt>32</tt> for generating 32-bit binaries, 
                    or to <tt>64</tt> for generating 64-bit binaries.
                </dd>
                <dt><tt>BUILD_NUMBER</tt> </dt>
                <dd>
                    The build number for the build (<i>e.g.</i> "b27"). 
                    The default value is "b00".
                </dd>
                <dt><tt>MILESTONE</tt> </dt>
                <dd>
                    The milestone name for the build (<i>e.g.</i>"beta"). 
                    The default value is "internal".
                </dd>
                <dt><a name="path"><tt>PATH</tt></a> </dt>
                <dd>Typically you want to set the <tt>PATH</tt> to include:
                    <ul>
                        <li>The location of the GNU make binary</li>
                        <li>The location of the Bootstrap JDK <tt>java</tt> 
                        (see <a href="#bootjdk">Bootstrap JDK</a>)</li>
                        <li>The location of the C/C++ compilers 
                        (see <a href="#compilers"><tt>compilers</tt></a>)</li>
                        <li>The location or locations for the Unix command utilities
                        (e.g. <tt>/usr/bin</tt>)</li>
                    </ul>
                </dd>
            </dl>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="troubleshooting">Troubleshooting</a></h2>
        <blockquote>
            A build can fail for any number of reasons. 
            Most failures
            are a result of trying to build in an environment in which all the
            pre-build requirements have not been met. 
            The first step in
            troubleshooting a build failure is to recheck that you have satisfied
            all the pre-build requirements for your platform.
            Look for the check list of the platform you are building on in the
            <a href="#contents">Table of Contents</a>.
            <p>
            You can validate your build environment by using the <tt>sanity</tt>
            target.
            Any errors listed
            will stop the build from starting, and any warnings may result in
            a flawed product build.
            We strongly encourage you to evaluate every
            sanity check warning and fix it if required, before you proceed
            further with your build.
            <p>
            Some of the more common problems with builds are briefly described
            below, with suggestions for remedies.
            <ul>
                <li>
                    <b>Slow Builds:</b>
                    <blockquote>
                        If your build machine seems to be overloaded from too many
                        simultaneous C++ compiles, try setting the <tt>HOTSPOT_BUILD_JOBS</tt>
                        variable to <tt>1</tt> (if you're using a multiple CPU
                        machine, setting it to more than the the number of CPUs is probably
                        not a good idea).
                        <p>
                        Creating the javadocs can be very slow, if you are running
                        javadoc, consider skipping that step.
                        <p>
                        Faster hardware and more RAM always helps too.
                        The VM build tends to be CPU intensive (many C++ compiles),
                        and the rest of the JDK will often be disk intensive.
                        <p>
                        Faster compiles are possible using a tool called
                        <a href="http://ccache.samba.org/" target="_blank">ccache</a>.
                    </blockquote>
                </li>
                <li>
                    <b>File time issues:</b>
                    <blockquote>
                        If you see warnings that refer to file time stamps, e.g.
                        <blockquote>
                            <i>Warning message:</i><tt> File `xxx' has modification time in
                            the future.</tt>
                            <br>
                            <i>Warning message:</i> <tt> Clock skew detected. Your build may
                            be incomplete.</tt> 
                        </blockquote>
                        These warnings can occur when the clock on the build machine is out of
                        sync with the timestamps on the source files. Other errors, apparently
                        unrelated but in fact caused by the clock skew, can occur along with
                        the clock skew warnings. These secondary errors may tend to obscure the
                        fact that the true root cause of the problem is an out-of-sync clock.
                        For example, an out-of-sync clock has been known to cause an old
                        version of javac to be used to compile some files, resulting in errors
                        when the pre-1.4 compiler ran across the new <tt>assert</tt> keyword
                        in the 1.4 source code.
                        <p>
                        If you see these warnings, reset the clock on the build
                        machine, run "<tt><i>gmake</i> clobber</tt>" or delete the directory
                        containing the build output, and restart the build from the beginning.
                    </blockquote>
                </li>
                <li>
                    <b>Error message: <tt>Trouble writing out table to disk</tt></b>
                    <blockquote>
                        Increase the amount of swap space on your build machine.
                    </blockquote>
                </li>
                <li>
                    <b>Error Message: <tt>libstdc++ not found:</tt></b>
                    <blockquote>
                        This is caused by a missing libstdc++.a library.
                        This is installed as part of a specific package
                        (e.g. libstdc++.so.devel.386).
                        By default some 64bit Linux versions (e.g. Fedora)
                        only install the 64bit version of the libstdc++ package.
                        Various parts of the JDK build require a static
                        link of the C++ runtime libraries to allow for maximum
                        portability of the built images.
                    </blockquote>
                </li>
                <li>
                    <b>Error Message: <tt>cannot restore segment prot after reloc</tt></b>
                    <blockquote>
                        This is probably an issue with SELinux (See
                        <a href="http://en.wikipedia.org/wiki/SELinux" target="_blank">
                        http://en.wikipedia.org/wiki/SELinux</a>).
                        Parts of the VM is built without the <tt>-fPIC</tt> for
                        performance reasons.
                        <p>
                        To completely disable SELinux:
                        <tt>
                            <ol>
                                <li>$ su root</li>
                                <li># system-config-securitylevel</li>
                                <li>In the window that appears, select the SELinux tab</li>
                                <li>Disable SELinux</li>
                            </ol>
                        </tt>
                        <p>
                        Alternatively, instead of completely disabling it you could
                        disable just this one check.
                        <tt>
                            <ol>
                                <li>Select System->Administration->SELinux Management</li>
                                <li>In the SELinux Management Tool which appears, 
                                select "Boolean" from the menu on the left</li>
                                <li>Expand the "Memory Protection" group</li>
                                <li>Check the first item, labeled
                                "Allow all unconfined executables to use libraries requiring text relocation ..."</li>
                            </ol>
                        </tt>
                    </blockquote>
                </li>
                <li>
                    <b>Windows Error Message: <tt>*** fatal error - couldn't allocate heap, ... </tt></b>
                    <blockquote>
                        The CYGWIN software can conflict with other non-CYGWIN
                        software. See the CYGWIN FAQ section on
                        <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
                        BLODA (applications that interfere with CYGWIN)</a>.
                    </blockquote>
                </li>
                <li>
                    <b>Windows Error Message: <tt>*** multiple target patterns.  Stop.</tt></b>
                    <blockquote>
                        The CYGWIN make version 3.81 may not like the Windows <tt>C:/</tt>
                        style paths, it may not like the ':' character in the path
                        when used in a makefile target definition.
                        See the <a href="#gmake"><tt><i>gmake</i></tt></a> section.
                    </blockquote>
                </li>
            </ul>
        </blockquote>
        <hr>
    </body>
</html>
