<!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>
                    <ul>
                        <li><a href="#fedora">Fedora Linux</a> </li>
                        <li><a href="#centos">CentOS Linux</a> </li>
                        <li><a href="#ubuntu">Ubuntu Linux</a> </li>
                    </ul>
                <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><a href="#jibx">JIBX Libraries</a> </li>
                            <li>Linux and Solaris:
                                <ul>
                                    <li><a href="#cups">CUPS Include files</a> </li>
                                    <li><a href="#xrender">XRender 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 this 
	    specific release of 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>C/C++ Compiler</th>
                        <th>BOOT JDK</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Linux X86 (32-bit)</td>
                        <td>Fedora 9</td>
                        <td>gcc 4 </td>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                    <tr>
                        <td>Linux X64 (64-bit)</td>
                        <td>Fedora 9</td>
                        <td>gcc 4 </td>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                    <tr>
                        <td>Solaris SPARC (32-bit)</td>
                        <td>Solaris 10u2 + 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>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                    <tr>
                        <td>Solaris SPARCV9 (64-bit)</td>
                        <td>Solaris 10u2 + 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>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                    <tr>
                        <td>Solaris X86 (32-bit)</td>
                        <td>Solaris 10u2 + 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>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                    <tr>
                        <td>Solaris X64 (64-bit)</td>
                        <td>Solaris 10u2 + 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>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                    <tr>
                        <td>Windows X86 (32-bit)</td>
                        <td>Windows XP</td>
                        <td>Microsoft Visual Studio C++ 2008 Standard Edition</td>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                    <tr>
                        <td>Windows X64 (64-bit)</td>
                        <td>Windows Server 2003 - Enterprise x64 Edition</td>
                        <td>Microsoft Platform SDK - April 2005</td>
                        <td>JDK 6u14 FCS </td>
                    </tr>
                </tbody>
            </table>
	    <p>
	    These same sources do indeed build on many more systems than the
	    above older generation systems, again the above is just a minimum.
	    <p>
	    Compilation problems with newer or different C/C++ compilers is a
	    common problem.
	    Similarly, compilation problems related to changes to the
	    <tt>/usr/include</tt> or system header files is also a
	    common problem with newer or unreleased OS versions.
	    Please report these types of problems as bugs so that they
	    can be dealt with accordingly.
        </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 9</a></h3>
        <blockquote>
            After installing
            <a href="http://www.fedoraproject.org/">Fedora 9</a>
            you need to make sure you have
            the "Software Development" bundle installed, plus the
            following packages:
            <blockquote>
                <ul>
                    <li>cups devel: Cups Development Package</li>
                    <li>freetype 2.3+ devel: Freetype 2.3 Development Package</li>
                    <li>hg: Mercurial, if you need to clone or manage source repositories</li>
                    <li>ksh: May be needed when using <tt>webrev</tt></li>
                </ul>
            </blockquote>
            <p>
            Always a good idea to do a complete Software Update/Refresh
            after you get all the packages installed.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h3><a name="centos">CentOS 5.2</a></h3>
        <blockquote>
            After installing
            <a href="http://www.centos.org/">CentOS 5.2</a>
            you need to make sure you have
            the following Development bundles installed:
            <blockquote>
                <ul>
                    <li>Development Libraries</li>
                    <li>Development Tools</li>
                    <li>Java Development</li>
                    <li>X Software Development</li>
                </ul>
            </blockquote>
            <p>
            Plus the following packages:
            <blockquote>
                <ul>
                    <li>cups devel: Cups Development Package</li>
                    <li>alsa devel: Alsa Development Package</li>
                    <li>ant: Ant Package</li>
                    <li>Xi devel: libXi.so Development Package</li>
                </ul>
            </blockquote>
            <p>
            The freetype 2.3 packages don't seem to be available,
            but the freetype 2.3 sources can be downloaded, built,
            and installed easily enough from
            <a href="http://downloads.sourceforge.net/freetype">
            the freetype site</a>.
            Build and install with something like:
            <blockquote>
                <tt>./configure && make && sudo -u root make install</tt>
            </blockquote>
            <p>
            Mercurial packages could not be found easily, but a Google
            search should find ones, and they usually include Python if
            it's needed.
        </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.
                    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 the
                    <a href="#jibx">JIBX Libraries</a>, set
                    <tt><a href="#ALT_JIBX_LIBS_PATH">ALT_JIBX_LIBS_PATH</a></tt>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant</a>, 
                    make sure it is in your PATH.
                </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 64-bit 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 the <a href="#xrender">XRender Include files</a>.
                </li>
                <li>
                    Install the
                    <a href="#jibx">JIBX Libraries</a>, set
                    <tt><a href="#ALT_JIBX_LIBS_PATH">ALT_JIBX_LIBS_PATH</a></tt>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant</a>, 
                    make sure it is in your PATH.
                </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 32-bit 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 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 Compilers</a> (32-bit).
                </li>
                <li>
                    Install 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 the
                    <a href="#jibx">JIBX Libraries</a>, set
                    <tt><a href="#ALT_JIBX_LIBS_PATH">ALT_JIBX_LIBS_PATH</a></tt>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant</a>, 
                    make sure it is in your PATH and 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" target="_blank">
                Ant download site</a>.
                You should always make sure <tt>ant</tt> is in your PATH, and
                on Windows you may also need to 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>.
            </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="jibx">JIBX</a></h4>
            <blockquote>
                JIBX libraries version 1.1.5 is required for building the OpenJDK.
                Namely, the following JAR files from the JIBX distribution package
                are required:
                <ul>
                    <li>bcel.jar
                    <li>jibx-bind.jar
                    <li>jibx-run.jar
                    <li>xpp3.jar
                </ul>
                <p>
                You can download the package from the
                <a href="http://jibx.sourceforge.net" target="_blank">JIBX site</a>.
                <p>
                You will need to set the
                <tt><a href="#ALT_JIBX_LIBS_PATH">ALT_JIBX_LIBS_PATH</a></tt>
                environment variable to refer to place where the JAR files,
                above, are located.
            </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 4 or newer.
                    The compiler used should be the default compiler installed
                    in <tt>/usr/bin</tt>.
                </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 Compilers</a></strong>
                <blockquote>
                    The 32-bit OpenJDK Windows build
                    requires 
                    Microsoft Visual Studio C++ 2008 (VS2008) Standard
                    Edition compiler. 
                    The compiler and other tools are expected to reside
                    in the location defined by the variable 
                    <tt>VS90COMNTOOLS</tt> which
                    is set by the Microsoft Visual Studio installer.
                    <p> 
                    Once the compiler is installed, 
                    it is recommended that you run <tt>VCVARS32.BAT</tt> 
                    to set the compiler environment variables
                    <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>
                    <b>WARNING:</b> Make sure you check out the
                    <a href="#cygwin">CYGWIN link.exe WARNING</a>.
                    The path <tt>/usr/bin</tt> must be after the path to the
                    Visual Studio product.
                </blockquote>
                <strong><a name="mssdk">Windows: Microsoft Platform SDK</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>
                    This Platform SDK compiler is only used on X64 builds
                    but other parts of the Platform SDK may be used 
                    for the X86 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="xrender">XRender Extension Headers (Solaris &amp; Linux)</a></h4>
            <blockquote>
                <p>
                <strong>Solaris:</strong>
                XRender header files are required for building the 
                OpenJDK on Solaris.
                The XRender header file is included with the other X11 header files
                in the package <strong>SFWxwinc</strong> on new enough versions of
                Solaris and will be installed in
	        <tt>/usr/X11/include/X11/extensions/Xrender.h</tt>
                </p><p>
                <strong>Linux:</strong>
                XRender header files are required for building the 
                OpenJDK on Linux.
                The Linux header files are usually available from a "Xrender"
                development package, it's recommended that you try and use
                the package provided by the particular distribution of Linux that
                you are using.
	        </p>
            </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>Category</td>
                                <td>Package</td>
                                <td>Description</td>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>ar.exe</td>
                                <td>Devel</td>
                                <td>binutils</td>
                                <td>The GNU assembler, linker and binary
                                utilities</td>
                            </tr>
                            <tr>
                                <td>make.exe</td>
                                <td>Devel</td>
                                <td>make</td>
                                <td>The GNU version of the 'make' utility built for CYGWIN.<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</td>
                                <td>GNU implementation of the traditional Unix macro
                                processor</td>
                            </tr>
                            <tr>
                                <td>cpio.exe</td>
                                <td>Utils</td>
                                <td>cpio</td>
                                <td>A program to manage archives of files</td>
                            </tr>
                            <tr>
                                <td>gawk.exe</td>
                                <td>Utils</td>
                                <td>awk</td>
                                <td>Pattern-directed scanning and processing language</td>
                            </tr>
                            <tr>
                                <td>file.exe</td>
                                <td>Utils</td>
                                <td>file</td>
                                <td>Determines file type using 'magic' numbers</td>
                            </tr>
                            <tr>
                                <td>zip.exe</td>
                                <td>Archive</td>
                                <td>zip</td>
                                <td>Package and compress (archive) files</td>
                            </tr>
                            <tr>
                                <td>unzip.exe</td>
                                <td>Archive</td>
                                <td>unzip</td>
                                <td>Extract compressed files in a ZIP archive</td>
                            </tr>
                            <tr>
                                <td>free.exe</td>
                                <td>System</td>
                                <td>procps</td>
                                <td>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>.
                <p>
                <b>WARNING:</b>
                Be very careful with <b><tt>link.exe</tt></b>, it will conflict
                with the Visual Studio version. You need the Visual Studio
                version of <tt>link.exe</tt>, not the CYGWIN one.
                So it's important that the Visual Studio paths in PATH preceed
                the CYGWIN path <tt>/usr/bin</tt>.
            </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 32-bit build requires access to a redistributable
                <tt>MSVCRT.DLL</tt>.
                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 of this file.
                <p> 
                <strong>X64 only:</strong>
                The OpenJDK 64-bit build requires access to a redistributable
                <tt>MSVCRT.DLL</tt>, 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 of this file.
            </blockquote>
            <strong><tt><a name="msvcr90">MSVCR90.DLL</a></tt></strong>
            <blockquote>
                <strong>i586 only:</strong>
                The 
                OpenJDK
                build requires access to a redistributable
                <tt>MSVCR90.DLL</tt> which should be
                supplied by the
                <a href="#msvc">Visual Studio product</a>.
                If the <tt>MSVCR90.DLL</tt> is not available from the
                Visual Studio product
                set the 
                <a href="#ALT_MSVCR90_DLL_PATH"><tt>ALT_MSVCR90_DLL_PATH</tt></a>
                variable to the location of this file.
            </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="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>
                <dt><tt>MILESTONE</tt> </dt>
                <dd>
                    The milestone name for the build (<i>e.g.</i>"beta"). 
                    The default value is "internal".
                </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><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><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_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_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_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_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><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><tt><a name="ALT_JIBX_LIBS_PATH">ALT_JIBX_LIBS_PATH</a></tt></dt>
                <dd>
                    The location of the <a href="#jibx">JIBX libraries</a> file.
                    The default value is
                    <tt>$(ALT_SLASH_JAVA)/devtools/share/jibx/lib</tt>.
                </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><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_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_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><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>, 
                    and on Windows with CYGWIN
                    <tt>/usr/bin</tt>.
                </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_SLASH_JAVA"><tt>ALT_SLASH_JAVA</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_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><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><strong>Windows specific:</strong></dt>
                <dd>
                    <dl>
                        <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt>
                        <dd>
                            The location of the 
                            Microsoft Visual Studio
                            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_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt>
                        <dd>
                            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><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt>
                        <dd>
                            The location of the 
                            <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>. 
                        </dd>
                        <dt><tt><a name="ALT_MSVCR90_DLL_PATH">ALT_MSVCR90_DLL_PATH</a></tt> </dt>
                        <dd>
                            <strong>i586 only:</strong>
                            The location of the 
                            <a href="#msvcr90"><tt>MSVCR90.DLL</tt></a>. 
                        </dd>
                    </dl>
                </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 64-bit Linux versions (e.g. Fedora)
                        only install the 64-bit 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>
