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