<!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="#hg">Use of Mercurial</a>
                    <ul>
                        <li><a href="#get_source">Getting the Source</a></li>
                    </ul>
                </li>
                <li><a href="#MBE">Minimum Build Environments</a></li>
                <li><a href="#SDBE">Specific Developer Build Environments</a>
                    <ul>
                        <li><a href="#fedora">Fedora Linux</a> </li>
                        <li><a href="#centos">CentOS Linux</a> </li>
                        <li><a href="#debian">Debian GNU/Linux</a></li>
                        <li><a href="#ubuntu">Ubuntu Linux</a> </li>
                        <li><a href="#opensuse">OpenSUSE</a></li>
                        <li><a href="#mandriva">Mandriva</a></li>
                        <li><a href="#opensolaris">OpenSolaris</a></li>
                    </ul>
                </li>
                <li><a href="#directories">Source Directory Structure</a> 
                    <ul>
                        <li><a href="#drops">Managing the Source Drops</a></li>
                    </ul>
                </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>
                            <ul>
                                <li><a href="#bootjdk">Bootstrap JDK</a> </li>
                                <li><a href="#importjdk">Optional Import JDK</a> </li>
                                <li><a href="#ant">Ant 1.7.1</a> </li>
                                <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
                                <li><a href="#compilers">Compilers</a>
                                    <ul>
                                        <li><a href="#msvc32">Microsoft Visual Studio Professional/Express for 32 bit</a> </li>
                                        <li><a href="#msvc64">Microsoft Visual Studio Professional for 64 bit</a> </li>
                                        <li><a href="#mssdk64">Microsoft Windows SDK for 64 bit</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>
                                        <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>
                        </li>
                    </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="hg">Use of Mercurial</a></h2>
        <blockquote>
            The OpenJDK sources are maintained with the revision control system
            <a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>.
            If you are new to Mercurial, please see the
            <a href="http://mercurial.selenic.com/wiki/BeginnersGuides">Beginner Guides</a>
            or refer to the <a href="http://hgbook.red-bean.com/">Mercurial Book</a>.
            The first few chapters of the book provide an excellent overview of
            Mercurial, what it is and how it works.
            <br>
            For using Mercurial with the OpenJDK refer to the
            <a href="http://openjdk.java.net/guide/repositories.html#installConfig">
                Developer Guide: Installing and Configuring Mercurial</a>
            section for more information.

            <!-- ------------------------------------------------------ -->
            <h3><a name="get_source">Getting the Source</a></h3>
            <blockquote>
                To get the entire set of OpenJDK Mercurial repositories
                use the script <code>get_source.sh</code> located in the root repository:
                <blockquote>
                    <tt>
                        hg clone http://hg.openjdk.java.net/jdk8/jdk8 <i>YourOpenJDK</i>
                        <br>cd <i>YourOpenJDK</i>
                        <br>sh ./get_source.sh
                    </tt>
                </blockquote>
                Once you have all the repositories, the
                script <tt>make/scripts/hgforest.sh</tt>
                can be used to repeat the same <tt>hg</tt>
                command on every repository in the forest, e.g.
                <blockquote>
                    <tt>
                        cd <i>YourOpenJDK</i>
                        <br>sh ./make/scripts/hgforest.sh pull -u
                    </tt>
                </blockquote>
            </blockquote>

        </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.3 </td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Linux X64 (64-bit)</td>
                        <td>Fedora 9</td>
                        <td>gcc 4.3 </td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris SPARC (32-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris SPARCV9 (64-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris X86 (32-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris X64 (64-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Windows X86 (32-bit)</td>
                        <td>Windows XP</td>
                        <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Windows X64 (64-bit)</td>
                        <td>Windows Server 2003 - Enterprise x64 Edition</td>
                        <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
                        <td>JDK 6u18</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</a></h3>
        <blockquote>
            <h4>Fedora 9</h4>
            <p>
            <blockquote>
                After installing <a href="http://fedoraproject.org">Fedora</a> 9
	      you need to install several build dependencies. The simplest
	      way to do it is to execute the following commands as user 
                <tt>root</tt>:
                <p/>
                <code>yum-builddep java-1.6.0-openjdk</code>
                <p/>
                <code>yum install gcc gcc-c++</code>
                <p/>
	      In addition, it's necessary to set a few environment variables for the build:

                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
            </blockquote>
            <h4>Fedora 10</h4>
            <p>
            <blockquote>
                After installing <a href="http://fedoraproject.org">Fedora</a> 10
	      you need to install several build dependencies. The simplest
	      way to do it is to execute the following commands as user 
                <tt>root</tt>:
                <p/>
                <code>yum-builddep java-1.6.0-openjdk</code>
                <p/>
                <code>yum install gcc gcc-c++</code>
                <p/>
	      In addition, it's necessary to set a few environment variables for the build:

                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
            </blockquote>
            <h4>Fedora 11</h4>
            <p>
            <blockquote>
                After installing <a href="http://fedoraproject.org">Fedora</a> 11
	      you need to install several build dependencies. The simplest
	      way to do it is to execute the following commands as user 
                <tt>root</tt>:
                <p/>
                <code>yum-builddep java-1.6.0-openjdk</code>
                <p/>
                <code>yum install gcc gcc-c++</code>
                <p/>
	      In addition, it's necessary to set a few environment variables for the build:

                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h3><a name="centos">CentOS 5.5</a></h3>
        <blockquote>
            After installing
            <a href="http://www.centos.org/">CentOS 5.5</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 (Including XFree86-devel)</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="debian">Debian</a></h3>
        <blockquote>
            <h4>Debian 5.0 (Lenny)</h4>
            <p>
            <blockquote>
		After installing <a href="http://debian.org">Debian</a> 5 
		you need to install several build dependencies. 
		The simplest way to install the build dependencies is to 
		execute the following commands as user <tt>root</tt>:
                <p/>
                <code>aptitude build-dep openjdk-6</code>
                <p/>
                <code>aptitude install openjdk-6-jdk libmotif-dev</code>
                <p/>
		In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="ubuntu">Ubuntu</a></h3>
        <blockquote>
            <h4>Ubuntu 8.04</h4>
            <p>
            <blockquote>
		After installing <a href="http://ubuntu.org">Ubuntu</a> 8.04 
		you need to install several build dependencies. 
                <p/>
		First, you need to enable the universe repository in the 
		Software Sources application and reload the repository 
		information. The Software Sources application is available 
		under the System/Administration menu. 
                <p/>
		The simplest way to install the build dependencies is to 
		execute the following commands:
                <p/>
                <code>sudo aptitude build-dep openjdk-6</code>
                <p/>
                <code>sudo aptitude install openjdk-6-jdk</code>
                <p/>
		In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
            <h4>Ubuntu 8.10</h4>
            <p>
            <blockquote>
		After installing <a href="http://ubuntu.org">Ubuntu</a> 8.10 
		you need to install several build dependencies. The simplest
		way to do it is to execute the following commands:
                <p/>
                <code>sudo aptitude build-dep openjdk-6</code>
                <p/>
                <code>sudo aptitude install openjdk-6-jdk</code>
                <p/>
		In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
            <h4>Ubuntu 9.04</h4>
            <p>
            <blockquote>
		After installing <a href="http://ubuntu.org">Ubuntu</a> 9.04 
		you need to install several build dependencies. The simplest
		way to do it is to execute the following commands:
                <p/>
                <code>sudo aptitude build-dep openjdk-6</code>
                <p/>
                <code>sudo aptitude install openjdk-6-jdk</code>
                <p/>
		In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="opensuse">OpenSUSE</a></h3>
        <blockquote>
            <h4>OpenSUSE 11.1</h4>
            <p>
            <blockquote>
		After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1 
		you need to install several build dependencies. 
		The simplest way to install the build dependencies is to 
		execute the following commands:
                <p/>
                <code>sudo zypper source-install -d java-1_6_0-openjdk</code>
                <p/>
                <code>sudo zypper install make</code>
                <p/>
		In addition, it is necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
                <p/>
		Finally, you need to unset the <code>JAVA_HOME</code> environment variable:
                <p/>
                <code>export -n JAVA_HOME</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="mandriva">Mandriva</a></h3>
        <blockquote>
            <h4>Mandriva Linux One 2009 Spring</h4>
            <p>
            <blockquote>
		After installing <a href="http://mandriva.org">Mandriva</a> Linux One 2009 Spring 
		you need to install several build dependencies. 
		The simplest way to install the build dependencies is to 
		execute the following commands as user <tt>root</tt>:
                <p/>
                <code>urpmi java-1.6.0-openjdk-devel ant make gcc gcc-c++ freetype-devel zip unzip libcups2-devel libxrender1-devel libalsa2-devel libstc++-static-devel libxtst6-devel libxi-devel</code>
                <p/>
		In addition, it is necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="opensolaris">OpenSolaris</a></h3>
        <blockquote>
            <h4>OpenSolaris 2009.06</h4>
            <p>
            <blockquote>
		After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06 
		you need to install several build dependencies. 
		The simplest way to install the build dependencies is to 
		execute the following commands:
                <p/>
                <code>pfexec pkg install SUNWgmake SUNWj6dev SUNWant sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl SUNWxorg-headers SUNWaudh SUNWfreetype2</code>
                <p/>
		In addition, it is necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_COMPILER_PATH=/opt/SunStudioExpress/bin/ ALT_CUPS_HEADERS_PATH=/usr/include/</code>
                <p/>
		Finally, you need to make sure that the build process can find the Sun Studio compilers:
                <p/>
                <code>export PATH=$PATH:/opt/SunStudioExpress/bin/</code>
            </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.

            <h3><a name="drops">Managing the Source Drops</a></h3>
            <blockquote>
                <p>
                    The repositories <tt>jaxp</tt> and <tt>jaxws</tt> actually
                    do not contain the sources for JAXP or JAX-WS.
                    These products have their own open source procedures at their
                    <a href="http://jaxp.java.net/">JAXP</a> and
                    <a href="http://jax-ws.java.net/">JAX-WS</a> home pages.
                    The OpenJDK project does need access to these sources to build
                    a complete JDK image because JAXP and JAX-WS are part of the JDK.
                    The current process for delivery of the JAXP and JAX-WS sources
                    involves so called "source drop bundles" downloaded from a public
                    website.
                    There are many reasons for this current mechanism, and it is
                    understood that this is not ideal for the open source community.
                    It is possible this process could change in the future.
                    <br>
                    <b>NOTE:</b> The <a href="http://download.java.net/openjdk/jdk8/">
                        Complete OpenJDK Source Bundles</a> <u>will</u> contain the JAXP and
                    JAX-WS sources.
                </p>

                <h4><a name="dropcreation">Creation of New Source Drop Bundles</a></h4>
                <blockquote>
                    <ol>
                        <li>
                            The JAXP or JAX-WS team prepares a new zip bundle,
                            places a copy in a public download area on java.net,
                            sends us a link and a list of CRs (Change Request Numbers).
                            The older download bundles should not be deleted.
                            It is the responsibility of the JAXP and JAX-WS team to
                            place the proper GPL legal notices on the sources
                            and do any filtering or java re-packaging for the
                            OpenJDK instances of these classes.
                        </li>
                        <li>
                            The OpenJDK team copies this new bundle into shared
                            area (e.g. <tt>/java/devtools/share/jdk8-drops</tt>).
                            Older bundles are never deleted so we retain the history.
                        </li>
                        <li>
                            The OpenJDK team edits the ant property file
                            <tt>jaxp/jaxp.properties</tt> or
                            <tt>jaxws/jaxws.properties</tt> to update the
                            base URL, the zip bundle name, and the MD5 checksum
                            of the zip bundle
                            (on Solaris: <tt>sum -c md5 <i>bundlename</i></tt>)
                        </li>
                        <li>
                            OpenJDK team reviews and commits those changes with the
                            given CRs.
                        </li>
                    </ol>
                </blockquote>

                <h4><a name="dropusage">Using Source Drop Bundles</a></h4>
                <blockquote>
                    <p>
                        The ant scripts that build <tt>jaxp</tt> and <tt>jaxws</tt>
                        will attempt to locate these zip bundles from the directory
                        in the environment variable
                        <tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt>.
                        The checksums protect from getting the wrong, corrupted, or
                        improperly modified sources.
                        Once the sources are made available, the population will not
                        happen again unless a <tt>make clobber</tt> is requested
                        or the <tt>jaxp/drop/</tt> or <tt>jaxws/drop/</tt>
                        directory is explicitly deleted.
                        <br>
                        <b>NOTE:</b> The default Makefile and ant script behavior
                        is to NOT download these bundles from the public http site.
                        In general, doing downloads
                        during the build process is not advised, it creates too much
                        unpredictability in the build process.
                        However, you can use <tt>make ALLOW_DOWNLOADS=true</tt> to
                        tell the ant script that the download of the zip bundle is
                        acceptable.
                    </p>
                    <p>
                        The recommended procedure for keeping a cache of these
                        source bundles would be to download them once, place them
                        in a directory outside the repositories, and then set
                        <tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> to refer
                        to that directory.
                        These drop bundles do change occasionally, so the newer
                        bundles may need to be added to this area from time to time.
                    </p>
                </blockquote>
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="building">Build Information</a></h2>
        <blockquote>
            Building the OpenJDK
            is done with a <a href="#gmake">GNU <tt>make</tt></a> command line
            and various
            environment or make variable settings that direct the makefile 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
                <a href="#gmake"><tt>make</tt></a> sanity &amp;&amp; <a href="#gmake"><tt>make</tt></a>
                </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>
                    You need GNU make version 3.81 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> should be 3.81 or newer
                    and should work fine for you.
                    If this version is not 3.81 or newer,
                    see the <a href="#buildgmake">"Building GNU make"</a> section.
                </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 try and 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 might be found
                    at <tt>/usr/bin/gmake</tt>.<br>
                    <b>NOTE:</b> It is very likely that this <tt>gmake</tt>
                    could be 3.80, you need 3.81, in which case,
                    see the <a href="#buildgmake">"Building GNU make"</a> section.
                </li>
                <li>
                    <strong>Windows:</strong>
                    Make sure you start your build inside a bash/sh/ksh shell
                    and are using a <tt>make.exe</tt> utility built for that
                    environment (a cygwin <tt>make.exe</tt> is not the same
                    as a <tt>make.exe</tt> built for something like
                    <a href="http://www.mkssoftware.com/">MKS</a>). 
                    <br>
                    <b>WARNING:</b> Watch out on some make 3.81 versions, it may
                    not work due to a lack of support for MS-DOS drive letter paths
                    like <tt>C:/</tt> or <tt>C:\</tt>.
                    <br>
                    You may be able to use the information at 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.
                    <br>
                    It may be possible to download the version at
                    <a href="http://www.cmake.org/files/cygwin/make.exe">
                        www.cmake.org make.exe</a>.
                    <br>
                    It might be necessary for you to build your own GNU make 3.81,
                    see the <a href="#buildgmake">"Building GNU make"</a> section
                    in that case.
                </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>.
            </p>
            <!-- ------------------------------------------------------ -->
            <h4><a name="buildgmake">Building GNU make</a></h4>
            <blockquote>
                First step is to get the GNU make 3.81 source from
                <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
                    ftp.gnu.org/pub/gnu/make/</a>.
                Building is a little different depending on the OS and unix toolset
                on Windows:
                <ul>
                    <li>
                        <strong>Linux:</strong>
                        <tt>./configure && make</tt>
                    </li>
                    <li>
                        <strong>Solaris:</strong>
                        <tt>./configure && gmake CC=gcc</tt>
                    </li>
                    <li>
                        <strong>Windows for CYGWIN:</strong>
                        <tt>./configure && make</tt>
                    </li>
                    <li>
                        <strong>Windows for MKS: (CYGWIN is recommended)</strong>
                        <tt>./configure && make -f Makefile.win32</tt>
                    </li>
                </ul>
            </blockquote>
        </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>
                    <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 1.7.1 or newer</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>
                    <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
                    <a href="#ant">Ant 1.7.1 or newer</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>
                    <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="#msvc32">Microsoft Visual Studio Compilers</a>).
                </li>
                <li>
                    Setup all environment variables for compilers 
                    (see <a href="#msvc32">compilers</a>).
                </li>
                <li>
                    Install 
                    <a href="#dxsdk">Microsoft DirectX SDK</a>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant 1.7.1 or newer</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/downloads/index.jsp"
                   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="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.7.1.
                The Ant tool is available from the 
                <a href="http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip" target="_blank">
                    Ant 1.7.1 archive 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>.
                <br>
                <b>WARNING:</b> Ant versions used from IDE tools like NetBeans
                or installed via system packages may not operate the same
                as the one obtained from the Ant download bundles.
                These system and IDE installers sometimes choose to change
                the ant installation enough to cause differences.
            </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 4.3 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://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
                        Sun Studio 12 Update 1 Compilers</a>
                    (containing version 5.10 of the C and C++ compilers) is required,
		    including specific patches.
                    <p>
		    The Solaris SPARC patch list is:
                    <ul>
                        <li>
                            118683-05: SunOS 5.10: Patch for profiling libraries and assembler
                        </li>
                        <li>
                            119963-21: SunOS 5.10: Shared library patch for C++
                        </li>
                        <li>
                            120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
                        </li>
                        <li>
                            128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
                        </li>
                        <li>
                            141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
                        </li>
                        <li>
                            141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
                        </li>
                        <li>
                            142371-01: Sun Studio 12.1 Update 1: Patch for dbx
                        </li>
                        <li>
                            143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
                        </li>
                        <li>
                            143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
                        </li>
                        <li>
                            142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
                        </li>
                    </ul>
                    <p>
                        The Solaris X86 patch list is:
                    <ul>
                        <li>
                            119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
                        </li>
                        <li>
                            119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
                        </li>
                        <li>
                            120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
                        </li>
                        <li>
                            141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
                        </li>
                        <li>
                            128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
                        </li>
                        <li>
                            142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
                        </li>
                        <li>
                            142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
                        </li>
                    </ul>
                    <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 Oracle Solaris Studio Express compilers at:
                        <a href="http://developers.sun.com/sunstudio/downloads/express.jsp" target="_blank">
                            Oracle Solaris Studio Express Download site</a>
                        are also an option, although these compilers have not
                        been extensively used yet.
                </blockquote>
                <strong><a name="msvc32">Windows i586: Microsoft Visual Studio 2010 Compilers</a></strong>
                <blockquote>
                    <p>
                        <b>BEGIN WARNING</b>: JDK 7 has transitioned to
                        use the newest VS2010 Microsoft compilers.
                        No other compilers are known to build the entire JDK,
                        including non-open portions.
                        Visual Studio 2010 Express compilers are now able to build all the
                        open source repositories, but this is 32 bit only. To build 64 bit
                        Windows binaries use the the 7.1 Windows SDK.
                        <b>END WARNING.</b>
                    <p>
                        The 32-bit OpenJDK Windows build requires
                        Microsoft Visual Studio C++ 2010 (VS2010) Professional
                        Edition or Express compiler.
                        The compiler and other tools are expected to reside
                        in the location defined by the variable
                        <tt>VS100COMNTOOLS</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.
                        This compiler also contains the Windows SDK v 7.0a,
                        which is an update to the Windows 7 SDK.
                    <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="msvc64">Windows x64: Microsoft Visual Studio 2010 Professional Compiler</a></strong>
                <blockquote>
                    For <b>X64</b>, the set up is much the same as 32 bit
                    except that you run <tt>amd64\VCVARS64.BAT</tt>
                    to set the compiler environment variables.
                    Previously 64 bit builds had to use the 64 bit compiler in
                    an unbundled Windows SDK but this is no longer necessary if
                    you have VS2010 Professional.
                </blockquote>
                <strong><a name="mssdk64">Windows x64: Microsoft Windows 7.1 SDK 64 bit compilers.</a></strong>
                For a free alternative for 64 bit builds, use the 7.1 SDK.
                Microsoft say that to set up your paths for this run
                <pre>
    c:\Program Files\Microsoft SDKs\Windows\v7.1\bin\setenv.cmd /x64.
                </pre>
                What was tested is just directly setting up LIB, INCLUDE,
                PATH and based on the installation directories using the
                DOS short name appropriate for the system, (you will
                need to set them for yours, not just blindly copy this) eg :
                <pre>
    set VSINSTALLDIR=c:\PROGRA~2\MICROS~1.0
    set WindowsSdkDir=c:\PROGRA~1\MICROS~1\Windows\v7.1
    set PATH=%VSINSTALLDIR%\vc\bin\amd64;%VSINSTALLDIR%\Common7\IDE;%WindowsSdkDir%\bin;%PATH%
    set INCLUDE=%VSINSTALLDIR%\vc\include;%WindowsSdkDir%\include
    set LIB=%VSINSTALLDIR%\vc\lib\amd64;%WindowsSdkDir%\lib\x64
                </pre>
            </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="msvcrNN"><tt>MSVCR100.DLL</tt></a></strong>
            <blockquote> 
                The OpenJDK build requires access to a redistributable
                <tt>MSVCR100.DLL</tt>.
                This is usually picked up automatically from the redist
                directories of Visual Studio 2010.
                If this cannot be found set the 
                <a href="#ALT_MSVCRNN_DLL_PATH"><tt>ALT_MSVCRNN_DLL_PATH</tt></a>
                variable to the location of this file.
                <p> 
            </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
            <blockquote>
                <ul>
                    <li><tt>solaris-sparc</tt></li>
                    <li><tt>solaris-sparcv9</tt></li>
                    <li><tt>solaris-i586</tt></li>
                    <li><tt>solaris-amd64</tt></li>
                    <li><tt>linux-i586</tt></li>
                    <li><tt>linux-amd64</tt></li>
                    <li><tt>windows-i586</tt></li>
                    <li><tt>windows-amd64</tt></li>
                </ul>
            </blockquote>
            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_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><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><tt><a name="ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> </dt>
                <dd>
                    The location of any source drop bundles
                    (see <a href="#drops">Managing the Source Drops</a>).
                    The default will be
                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/share/jdk8-drops</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_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a></dt>
                <dd>
		    The top-level directory of the libraries and include files for the platform's 
		    graphical programming environment. The default location is platform specific. 
		    For example, on Linux it defaults to <tt>/usr/X11R6/</tt>.
		</dd>
                <dt><strong>Windows specific:</strong></dt>
                <dd>
                    <dl>
                        <dt><a name="ALT_WINDOWSSDKDIR"><tt>ALT_WINDOWSSDKDIR</tt></a> </dt>
                        <dd>
                            The location of the 
                            Microsoft Windows SDK where some tools will be
			    located.
			    The default is whatever WINDOWSSDKDIR is set to
			    (or WindowsSdkDir) or the path
                            <br>
                            <tt>c:\Program Files\Microsoft SDKs\Windows\v7.0a</tt>
                        </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_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></tt> </dt>
                        <dd>
                            The location of the 
                            <a href="#msvcrNN"><tt>MSVCR100.DLL</tt></a>. 
                        </dd>
                    </dl>
                </dd>
                <dt><strong>Cross-Compilation Support:</strong></dt>
                <dd>
                    <dl>
                        <dt><a name="CROSS_COMPILE_ARCH"><tt>CROSS_COMPILE_ARCH</tt></a> </dt>
                        <dd>
                            Set to the target architecture of a cross-compilation build. If set, this
                            variable is used to signify that we are cross-compiling. The expectation
                            is that <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> is set
                            to point to the cross-compiler and that any cross-compilation specific flags
                            are passed using <a href="#EXTRA_CFLAGS"><tt>EXTRA_CFLAGS</tt></a>.
			    The <a href="#ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a> variable should 
			    also be set to point to the graphical header files (e.g. X11) provided with 
			    the cross-compiler.
                            When cross-compiling we skip execution of any demos etc that may be built, and
                            also skip binary-file verification.
                        </dd>
                        <dt><tt><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></tt> </dt>
                        <dd>
			   Used to pass cross-compilation options to the cross-compiler.
                           These are added to the <tt>CFLAGS</tt> and <tt>CXXFLAGS</tt> variables. 
			</dd>
                        <dt><tt><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></tt> </dt>
                        <dd>
                            Used primarily for cross-compilation builds (and always set in that case)
                            this variable indicates that tools from the boot JDK should be used during
                            the build process, not the tools (<tt>javac</tt>, <tt>javah</tt>, <tt>jar</tt>)
                            just built (which can't execute on the build host).
                        </dd>
                        <dt><tt><a name="HOST_CC">HOST_CC</a></tt> </dt>
                        <dd>
                            The location of the C compiler to generate programs to run on the build host.
                            Some parts of the build generate programs that are then compiled and executed
                            to produce other parts of the build. Normally the primary C compiler is used
                            to do this, but when cross-compiling that would be the cross-compiler and the
                            resulting program could not be executed. 
                            On Linux this defaults to <tt>/usr/bin/gcc</tt>; on other platforms it must be
                            set explicitly.
                        </dd>
                    </dl>
                <dt><strong>Specialized Build Options:</strong></dt>
                <dd>
                  Some build variables exist to support specialized build environments and/or specialized
                  build products. Their use is only supported in those contexts:
                    <dl>
                        <dt><tt><a name="BUILD_CLIENT_ONLY">BUILD_CLIENT_ONLY</a></tt> </dt>
                        <dd>
                            Indicates this build will only contain the Hotspot client VM. In addition to
                            controlling the Hotspot build target, it ensures that we don't try to copy
                            any server VM files/directories, and defines a default <tt>jvm.cfg</tt> file
                            suitable for a client-only environment. Using this in a 64-bit build will
                            generate a sanity warning as 64-bit client builds are not directly supported.
                        </dd>
                        <dt><tt><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</tt> </dt>
                        <dd>
                            Used when the build environment has no graphical capabilities at all. This
			    excludes building anything that requires graphical libraries to be available.
                        </dd>
                        <dt><tt><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</tt> </dt>
                        <dd>
			    Used to indicate this is a build of the Oracle Java SE Embedded product. 
			    This will enable the directives included in the SE-Embedded specific build 
			    files.
                        </dd>
                        <dt><tt><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></tt> </dt>
                        <dd>
			    If set to false, disables the use of mmap by the zip utility. Otherwise,
	                    mmap will be used.
                        </dd>
                        <dt><tt><a name="COMPRESS_JARS"></a>COMPRESS_JARS</tt> </dt>
                        <dd>
			  If set to true, causes certain jar files that would otherwise be built without
			  compression, to use compression.
                        </dd>
                    </dl>
                </dd>
            </dl>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="hints">Hints and Tips</a></h2>
        <blockquote>
            You don't have to use all these hints and tips, and in fact people do actually
            build with systems that contradict these, but they might prove to be
            helpful to some.
            <ul>
                <li>
                    If <tt>make sanity</tt> does not work, find out why, fix that
                    before going any further. Or at least understand what the
                    complaints are from it.
                </li>
                <li>
                    JDK: Keep in mind that you are building a JDK, but you need
                    a JDK (BOOTDIR JDK) to build this JDK.
                </li>
                <li>
                    Ant: The ant utility is a java application and besides having
                    ant available to you, it's important that ant finds the right
                    java to run with. Make sure you can type <tt>ant -version</tt>
                    and get clean results with no error messages.
                </li>
                <li>
                    Linux: Try and favor the system packages over building your own
                    or getting packages from other areas.
                    Most Linux builds should be possible with the system's
                    available packages.
                </li>
                <li>
                    Solaris: Typically you will need to get compilers on your systems
                    and occasionally GNU make 3.81 if a gmake binary is not available.
                    The gmake binary might not be 3.81, be careful.
                </li>
                <li>
                    Windows VS2010:
                    <ul>
                        <li>
                            Only the C++ part of VS2010 is needed.
                            Try to let the installation go to the default install directory.
                            Always reboot your system after installing VS2010.
                            The system environment variable VS100COMNTOOLS should be
                            set in your environment.
                        </li>
                        <li>
                            Make sure that TMP and TEMP are also set in the environment
                            and refer to Windows paths that exist, like <tt>C:\temp</tt>,
                            not <tt>/tmp</tt>, not <tt>/cygdrive/c/temp</tt>, and not <tt>C:/temp</tt>.
                            <tt>C:\temp</tt> is just an example, it is assumed that this area is
                            private to the user, so by default after installs you should
                            see a unique user path in these variables.
                        </li>
                        <li>
                            You need to use vsvars32.bat or vsvars64.bat to get the
                            PATH, INCLUDE, LIB, LIBPATH, and WINDOWSSDKDIR
                            variables set in your shell environment.
                            These bat files are not easy to use from a shell environment.
                            However, there is a script placed in the root jdk8 repository called
                            vsvars.sh that can help, it should only be done once in a shell
                            that will be doing the build, e.g.<br>
                            <tt>sh ./make/scripts/vsvars.sh -v10 > settings<br>
                                eval `cat settings`</tt><br>
                            Or just <tt>eval `sh ./make/scripts/vsvars.sh -v10`</tt>.
                        </li>
                    </ul>
                </li>
                <li>
                    Windows: PATH order is critical, see the
                    <a href="#paths">paths</a> section for more information.
                </li>
                <li>
                    Windows 64bit builds: Use ARCH_DATA_MODEL=64.
                </li>
            </ul>
        </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>Corrupted Bundles on Windows:</b>
                    <blockquote>
                        Some virus scanning software has been known to corrupt the
                        downloading of zip bundles.
                        It may be necessary to disable the 'on access' or 'real time'
                        virus scanning features to prevent this corruption.
                        This type of "real time" virus scanning can also slow down the
                        build process significantly.
                        Temporarily disabling the feature, or excluding the build
                        output directory may be necessary to get correct and faster builds.
                    </blockquote>
                </li>
                <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:
                        <ol>
                            <li><tt>$ su root</tt></li>
                            <li><tt># system-config-securitylevel</tt></li>
                            <li><tt>In the window that appears, select the SELinux tab</tt></li>
                            <li><tt>Disable SELinux</tt></li>
                        </ol>
                        <p>
                            Alternatively, instead of completely disabling it you could
                            disable just this one check.
                        <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>
                    </blockquote>
                </li>
                <li>
                    <b>Windows Error Messages:</b><br>
                    <tt>*** fatal error - couldn't allocate heap, ... </tt><br>
                    <tt>rm fails with "Directory not empty"</tt><br>
                    <tt>unzip fails with "cannot create ... Permission denied"</tt><br>
                    <tt>unzip fails with "cannot create ... Error 50"</tt><br>
                    <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>spawn failed</tt></b>
                    <blockquote>
                        Try rebooting the system, or there could be some kind of
                        issue with the disk or disk partition being used.
                        Sometimes it comes with a "Permission Denied" message.
                    </blockquote>
                </li>
            </ul>
        </blockquote>
        <hr>
    </body>
</html>
