<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="http://www.movabletype.org/" />
<title>Kelly O'Hair's Blog: JDK6 Build Cheat Sheet</title>
<link rel="stylesheet" href="http://weblogs.java.net/blog/styles-site.css" type="text/css" />
<link rel="stylesheet" href="http://www.java.net/css/main.css" type="text/css">
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://weblogs.java.net/blog/kellyohair/index.rdf" />
<link rel="alternate" type="application/atom+xml" title="Atom" href="http://weblogs.java.net/blog/kellyohair/atom.xml" />
<link rel="start" href="http://weblogs.java.net/blog/kellyohair/" title="Home" />
<link rel="prev" href="http://weblogs.java.net/blog/kellyohair/archive/2006/11/my_dog_is_now_o.html" title="My Dog is now Open Source" />
<link rel="next" href="http://weblogs.java.net/blog/kellyohair/archive/2007/01/my_ant_adventur.html" title="My Ant Adventure (Updated 1/23/2007)" />
<!-- Begin SiteCatalyst code -->
<script language="JavaScript">
<!--
var s_channel="Kelly O'Hair's Blog";
//--></script>
<!-- End SiteCatalyst code -->
</head>
<body>
<!-- Masthead -->
<div class="topline">
<div class="topbar">
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="25">
<tr>
<td width="100%" rowspan="2"><a href="http://www.java.net"><img src="/images/header_jnet_new.jpg" width="500" height="60" border="0" alt="The Source for Java Technology Collaboration"></a></td>
<td nowrap="nowrap" style="vertical-align:middle">
<div id="login">
<form name="loginform" id="loginform" action="https://www.dev.java.net/servlets/TLogin" method="post">
<input type="hidden" name="redir" value="http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html">
<div>
<strong>User:</strong>
<input type="text" name="loginID" id="loginID" value="" size="7" maxlength="32" />
<strong>Password:</strong>
<input type="password" name="password" id="password" value="" size="7" maxlength="32" />
<input type="submit" name="Login" class="buttonred" id="Button" value="Login" /> </div>
<div class="small" align="right"><strong> <a href="https://www.dev.java.net/servlets/Join">Register</a> | <a href="https://www.dev.java.net/servlets/TLogin">Login help</a> </strong></div>
</form>
</div>
</td>
</tr>
</table>
</div>
<!-- Tabs -->
<noindex>
<div class="tabs" id="toptabs">
<table cellspacing=0 cellpadding=4 border=0>
<tbody>
<tr>
<td><a href="https://www.dev.java.net/servlets/StartPage">My pages</a> </td>
<td><a href="http://community.java.net/projects/">Projects</a></td>
<td><a href="http://community.java.net">Communities</a> </td>
<th><a href="http://www.java.net">java.net</a></th>
</tr></tbody></table></div>
</noindex>
<table id="main" cellspacing="2" cellpadding="2" width="100%" border="0">
<tbody>
<tr valign=top>
<td id="leftcol" width="150" rowspan="2">
<img src="http://today.java.net/im/a.gif" width="150" height="1"><br />
<div id="navcolumn">
<!-- COMMUNITY LINKS -->
<noindex>
<div class="toolgroup" id="communitylinks">
<div class="label"><strong>Get Involved</strong></div>
<div class="body">
<div><a href="https://java-net.dev.java.net/">java-net Project</a></div>
<div><a href="http://www.java.net/request_project.csp">Request a Project</a></div>
<div><a href="http://community.java.net/help_wanted/">Project Help Wanted Ads</a></div>
<div><a href="http://community.java.net/projects/publicize.csp">Publicize your Project</a></div>
<!-- <div><a href="#">Success Stories</a></div> -->
<div><a href="http://today.java.net/cs/user/create/bl">Submit Content</a></div>
</div>
</div>
<div class="toolgroup" id="communitylinks">
<div class="label"><strong>Get Informed</strong></div>
<div class="body">
<div><a href="http://www.java.net/about.csp">About java.net</a></div>
<div><a href="http://today.java.net/pub/q/articles">Articles</a></div>
<div><a href="http://weblogs.java.net/">Blogs</a></div>
<div><a href="http://www.java.net/events">Events</a></div>
<div><a href="http://today.java.net/today/alsotoday.csp">Also in Java Today</a></div>
<div><a href="http://safari.java.net">java.net Online Books</a></div>
<div><a href="http://today.java.net/today/archive/">java.net Archives</a></div>
</div>
</div>
<div class="toolgroup" id="communitylinks">
<div class="label"><strong>Get Connected</strong></div>
<div class="body">
<div><a href="http://forums.java.net">java.net Forums</a></div>
<div><a href="http://wiki.java.net/">Wiki</a> and <a href="http://wiki.java.net/bin/view/Javapedia/WebHome">Javapedia</a></div>
<div><a href="http://wiki.java.net/bin/view/People/WebHome">People</a>, <a href="http://partners.java.net">Partners</a>, and <a href="http://wiki.java.net/bin/view/Javanet/JobsWiki">Jobs</a> </div>
<div><a href="http://community.java.net/jugs/listing.csp">Java User Groups</a></div>
<div><!-- <a href="https://java-net.dev.java.net/servlets/ProjectMailingListList">Newsletters</a> and --><a href="http://today.java.net/pub/q/rsschannels">RSS Feeds</a></div>
</div>
</div>
<div class="toolgroup" id="communitylinks">
<div class="label"><b>Search</b></div>
<div class="body">
<form action="http://onesearch.sun.com/search/onesearch/index.jsp">
<div>Web and Projects:</div>
<div><input type="text" name="qt" class="medium" size="14" onfocus="if( this.value==this.defaultValue ) this.value='';" value=""/>
<input type="hidden" name="col" value="all-unfiltered">
<input type="hidden" name="qt" value="+url:java.net">
<input type="submit" border="0" class="buttonred" value=" » "></div>
</form>
<div>Online Books:</div>
<form action="http://safari.java.net/search" method="post" name="searchForm" id="form_searchForm">
<input name="__formName" value="searchForm" type="hidden" />
<input value="simple" name="searchmode" id="searchmode" type="hidden" />
<input value="0" name="page" id="page" type="hidden" />
<input value="summary" name="searchview" id="searchview" type="hidden" />
<input value="rank" name="sort" id="sort" type="hidden" />
<input value="desc" name="order" id="order" type="hidden" />
<input value="1" name="NewSearch" id="NewSearch" type="hidden" />
<div>
<input name="searchtextbox" id="searchtextbox" type="text" value="" class="medium" size="14" />
<input class="buttonred" value=" » " border="0" type="submit"></div>
</form>
<div><a href="http://www.java.net/search.csp">Advanced Search</a></div>
</div>
</div>
</noindex>
</div>
<br />
</td>
<td height="3" colspan="2"><img src="http://today.java.net/images/a.gif" width="1" height="3"><br /></td>
</tr>
<tr>
<td width="10"><img src="http://today.java.net/images/a.gif" width="10" height="1"></td>
<td width="100%" valign="top">
<div class="link-note">
<a href="http://weblogs.java.net/blog/kellyohair/index.rdf"><img src="http://www.java.net/images/icons/feed.png" width="16" height="16" vspace="4" hspace="10" border="0" alt="Syndicate this blog (XML)" align="right" /></a><br />
</div>
<img src="/images/people/kelly_ohair.jpg" border="0" height="68" width="99" alt="Kelly O'Hair" align="left" vspace="3" hspace="6" />
<h2><a href="http://weblogs.java.net/blog/kellyohair/">Kelly O'Hair's Blog</a></h2>
<div class="small" align="right">
<a href="http://weblogs.java.net/blog/kellyohair/archive/2006/11/my_dog_is_now_o.html">«My Dog is now Open Source</a> |
<a href="http://weblogs.java.net/blog/kellyohair/">Main</a>
| <a href="http://weblogs.java.net/blog/kellyohair/archive/2007/01/my_ant_adventur.html">My Ant Adventure (Updated 1/23/2007) »</a>
</div>
<div class="grayline"></div>
<h3>JDK6 Build Cheat Sheet</h3>
<span class="ltcaption1">Posted by <b>kellyohair</b> on December 15, 2006 at 11:04 AM</a> | <a href="http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html#comments">Comments (2)</a>
</span>
<br /><br />
<html>
<body>
<h2> JDK6 Build Cheat Sheet </h2>
<p>
Just thought I'd list a few ways that the JDK can be built.
These apply to JDK6 and JDK7, JDK5 building is a little different
but has some of the same settings.
The <code>gnumake</code> used here is the GNU make 3.78.1 or newer.
<ul>
<li>
On Solaris systems with the Companion CD installed, it can
usually be found
with the name <code>gmake</code> in <code>/usr/sfw/bin/</code> or
<code>/opt/sfw/bin/</code>.
</li>
<li>
On Linux just use <code>make</code> from <code>/usr/bin/</code>
</li>
<li>
On Windows and using CYGWIN, just use <code>make</code> from CYGWIN's
<code>/usr/bin/</code>
(but make sure it's not 3.81, which seems to have taken away the ability
to use paths with the ':' character, like <code>C:/anything</code>.)
</li>
<li>
On Windows with MKS, you will need a GNU make built for MKS.
</li>
</ul>
<p>
See
<a href=http://download.java.net/jdk6/6u1/promoted/b01/docs/build/README-builds.html#gnumake>
the JDK build instructions for more information.</a>
<br>
<B>NOTE:</b> Any variables described below that start with
<code>ALT_</code> can be set on the <code>gnumake</code>
command line, or be set in your environment. None of the Makefiles
should be setting these variables internally, so no internal
make variable setting should change your environment variable
setting of them. The command line variable settings will override
any setting inside the Makefiles.
<h3> Control Builds </h3>
<p>
>From the control/make/Makefile:
<ul>
<li>
Build everything for a developer:
<p>
<code>gnumake dev</code>
<br> OR <br>
<code>gnumake DEV_ONLY=true</code>
</li>
<li>
Skip the fastdebug build (just builds the product bits):
<p>
<code>gnumake SKIP_FASTDEBUG_BUILD=true DEV_ONLY=true</code>
</li>
<li>
Don't build the fastdebug bits, and skip the hotspot and deploy areas:
<p>
<code>gnumake BUILD_HOTSPOT=false BUILD_DEPLOY=false ALT_JDK_IMPORT=/jdk1.6.0 SKIP_FASTDEBUG_BUILD=true DEV_ONLY=true</code>
</li>
<li>
Build just the j2se debug image:
<p>
<code>gnumake BUILD_HOTSPOT=false BUILD_DEPLOY=false ALT_JDK_IMPORT=/jdk1.6.0 SKIP_FASTDEBUG_BUILD=true SKIP_DEBUG_BUILD=false DEV_ONLY=true debug_build</code>
</li>
</ul>
<p>
Here is a short list of the make variables that can be set on the
<code>gnumake</code> command line:
<ul>
<li>
<code>BUILD_HOTSPOT</code>
<p>
Set to <code>false</code> to avoid building the hotspot VM, but you will
need to also set <code>ALT_JDK_IMPORT_PATH</code> to a built jdk
product of the same version you are building.
I recommend setting this to <code>false</code>
all the time, unless you are changing the hotspot VM.
</li>
<li>
<code>BUILD_DEPLOY</code>
<p>
Set to <code>false</code> to avoid building javaws or the plugins.
I recommend setting this to <code>false</code> all the time.
</li>
<li>
<code>BUILD_INSTALL</code>
<p>
Set to <code>false</code> to avoid building install bundles
(you should never need to do this).
I recommend setting this to <code>false</code> all the time.
</li>
<li>
<code>BUILD_J2SE</code>
<p>
Set to <code>false</code> to avoid the core j2se, which is unlikely
you'd want to do this. I'd leave this one alone, unless you are
only working on the hotspot VM.
</li>
<li>
<code>BUILD_MOTIF</code>
<p>
Set to <code>false</code> to avoid building the Motif libraries,
but you would need to then set
<code>ALT_MOTIF_DIR</code> to where to get the built Motif libraries.
This doesn't take long to build so I have never played with this,
and I'm not even sure it's necessary
</li>
<li>
<code>NO_DOCS</code>
<p>
Set to <code>true</code> to avoid any javadoc generation.
</li>
<li>
<code>NO_IMAGES</code>
<p>
Set to <code>true</code> to avoid any images generation.
This means the creation of the more formal JDK install-like image
with the rt.jar and tools.jar files.
When the images are not built, the JDK is left in the
<code>OUTPUTDIR</code> area as a simple set of <code>bin</code>,
<code>lib</code>, <code>include</code>, and <code>classes</code>
directories. Which can be run as-is, but do not represent the
form that a JDK install image will take.
The creation of the images is mostly a disk movement activity, and
on some machines this is very fast, and with others it can be slow.
</li>
<li>
<code>SKIP_FASTDEBUG_BUILD</code>
<p>
Set to <code>true</code> to skip building any fastdebug bits
(a set of -g -O built images with full runtime assert checking enabled).
</li>
<li>
<code>SKIP_DEBUG_BUILD</code>
<p>
Set to <code>false</code> to build the debug images (-g with full
runtime assert checking).
</li>
<li>
<code>DEV_ONLY</code>
<p>
Set to <code>true</code> to get the settings:
<code>SKIP_COMPARE_IMAGES=true BUILD_INSTALL=false NO_DOCS=true</code>.
</li>
<li>
<code>SKIP_COMPARE_IMAGES</code>
<p>
Set to <code>true</code> to avoid a comparison of previous release
build bundles with the ones you have created.
You normally won't want this, so always set this to <code>true</code>.
</li>
<li>
<code>ALT_OUTPUTDIR</code>
<p>
Alternative output directory rather than
<code>control/build</code>.
I recommend that the sources and this output directory be on your
build machines local disk, for best build time performance.
</li>
<li>
<code>ALT_BOOTDIR</code>
<p>
Alternative location for a bootstrap JDK, or install image of the
previously released JDK (e.g. jdk1.5.0 for building jdk1.6.0).
You really should set this all the time, just to make sure you get a
local disk copy, for best build time performance.
In theory, this doesn't have to be jak1.5.0, but could be a
newer JDK, even the same version being built. But normally
it's the previously release JDK.
</li>
<li>
<code>ALT_JDK_IMPORT_PATH</code>
<p>
Alternative location for a JDK build of the same release as what
you are building.
If you skip building some components, the Makefiles will try and
copy over the pre-built bits from this location, e.g.
if you use BUILD_HOTSPOT=false (or don't have a <code>hotspot</code>
directory), then the hotspot built images will be copied from this
location.
</li>
</ul>
<p>
Also try running <code>gnumake help</code> for more help
on building options.
<h3> J2SE Builds </h3>
<p>
If you only want to work with the j2se and not the VM, you might
consider just going into the <code>j2se/make</code> directory
and running <code>gnumake</code> from there.
Just run <code>gnumake help</code> for some help.
<p>
I'd recommend setting <code>ALT_BOOTDIR</code> and
<code>ALT_JDK_IMPORT_DIR</code> (as described above).
<h3> Hotspot Builds </h3>
<p>
If you only want to work with the hotspot and not the VM, you might
consider just going into the <code>hotspot/make</code> directory
and running <code>gnumake</code> from there.
Just run <code>gnumake help</code> for some help.
<p>
I'd recommend setting <code>ALT_BOOTDIR</code> and
<code>ALT_JDK_IMPORT_DIR</code> (as described above).
<p>
Traditionally the hotspot build procedure have differed greatly
from the rest of the JDK. This is mostly
due to the fact that for the most part, it's more like building
a large C++ library rather than anything else.
Building each of the platforms was slightly different,
for example on Windows the tool <code>NMAKE.EXE</code>
was used instead of <code>gnumake</code>.
It's the Makefiles and build scripts in the hotspot/build
directory that contain the "real" hotspot build procedures.
In JDK6 a <code>gnumake</code> Makefile was added at
<code>hotspot/make/Makefile</code> which will use the Makefiles
in the <code>hotspot/build</code> area, providing you a more
generic hotspot building experience.
More experienced hotspot builders may prefer to dive into
the <code>hotspot/build</code> area.
<h3> Summary </h3>
<p>
So as you can see, some similarities, some differences between
these build rules.
<p>
Hope this was helpful, if you have more questions please post comments.
<p>
-kto
</body>
</html>
<div id="a006182more"><div id="more">
</div></div>
<br />
Bookmark blog post: <a href="http://del.icio.us/post?title=JDK6 Build Cheat Sheet&url=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html"><img src="/images/icons/delicious.gif" alt="del.icio.us" border="0" height="16" hspace="8" vspace="1" width="16" /></a> <a href="http://del.icio.us/post?title=JDK6 Build Cheat Sheet&url=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html">del.icio.us</a> <a href="http://digg.com/submit?phase=2&title=JDK6 Build Cheat Sheet"><img src="/images/icons/digg.gif" alt="Digg" border="0" height="14" hspace="8" width="16" /></a> <a href="http://digg.com/submit?phase=2&title=JDK6 Build Cheat Sheet&url=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html">Digg</a> <a href="http://www.dzone.com/links/add.html?url=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html&title=JDK6 Build Cheat Sheet"><img src="/images/icons/dzone.gif" alt="DZone" border="0" height="16" hspace="8" width="16" /></a> <a href="http://www.dzone.com/links/add.html?url=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html&title=JDK6 Build Cheat Sheet">DZone</a> <a href="http://www.furl.net/storeIt.jsp?t=JDK6 Build Cheat Sheet&u=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html"><img src="/images/icons/furl.gif" alt="Furl" border="0" height="17" hspace="8" width="16" /></a> <a href="http://www.furl.net/storeIt.jsp?t=JDK6 Build Cheat Sheet&u=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html">Furl</a> <a href="http://reddit.com/submit?title=JDK6 Build Cheat Sheet&url=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html"><img src="/images/icons/reddit.gif" alt="Reddit" border="0" height="18" hspace="8" width="18" /></a> <a href="http://reddit.com/submit?title=JDK6 Build Cheat Sheet&url=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html">Reddit</a>
<br />
<div class="grayline"></div>
<a name="comments"></a>
<h5>Comments</h5>
<span class="small">Comments are listed in date ascending order (oldest first) | <a href="#post">Post Comment</a></span>
<br /><br />
<ul>
<li>
<a name="21140"></a>
<div id="c21140">
Thank you, Kelly, the write up is nice. I was wondering if there is a way to build the vm with just the interpreter, as I assume that's what you'd do when you start porting it.
---
<br />
<b>
You will need to talk to the HotSpot team about this, try sending email to one of the aliases documented at: https://openjdk.dev.java.net/hotspot/.
<br />
-kto
</b>
<p class="posted"><span class="ltcaption1">Posted by: robilad on December 15, 2006 at 09:00 PM</span></p>
</div>
</li>
</ul>
<ul>
<li>
<a name="21205"></a>
<div id="c21205">
Very nice! ALT_MOTIF_DIR was created so static/and or different builds of motif could be used. Motif used to cause a lot of problems on platforms such as ppc etc. We (even before blackdown.org) added motif patches for the jdk so needed our own libraries. ALT_MOTIF_DIR didn't need to be set in the past, it was just an easy method to use different libraries if needed :-) (Just for historical sake)... It was also a bit hard to follow the logic of the thing (how ALT_MOTIF_DIR worked).
<br />
<b>
I have found that figuring out the ALT_MOTIF_DIR layout was bizarre too.
Hopefully, someday, we can just use the shared library versions on the system.
I am not a fan of using static libraries, unless there is a critical reason for it.
<br />
-kto
</b>
<p class="posted"><span class="ltcaption1">Posted by: scotthutinger on December 18, 2006 at 02:25 PM</span></p>
</div>
</li>
</ul>
<br /><br />
<form method="post" action="http://weblogs.java.net/mt/comments" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="6182" />
<a name="post"></a>
<b>Only logged in users may post comments. <a href="/cs/user/login?x-redirect=http://weblogs.java.net/blog/kellyohair/archive/2006/12/jdk6_build_chea.html">Login Here</a>.</b>
<!-- TS: var- -->
<!-- TS: cfg- -->
<!-- TS: vars- -->
<!-- TS: test - -->
<!-- TS: cpt - -->
</form>
</MTIfCommentsAllowed>
<br />
<div class="footer" align="right">This work is licensed under a
<a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">Creative Commons License</a>.<br />
<a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"><img src="http://creativecommons.org/images/public/somerights.gif" alt="Creative Commons License" border="0" height="31" width="88" hspace="2" vspace="2" /></a>
</div>
<br />
<div id="powered" align="right">
<b>Powered by</b><br />
<a href="http://www.movabletype.org">Movable Type 3.01D</a><br />
</div>
</td></tr></table>
<!-- BEGIN VNV5 FOOTER -->
<!-- BEGIN VNV5 FOOTER -->
<table border="0" cellpadding="0" cellspacing="10" width="100%">
<tr>
<td>
<a href="http://today.java.net/pub/q/java_net_rss"><img src="/images/icons/feed.png" border="0" width="16" height="16" alt="Feed" align="absmiddle"></a> <a href="http://today.java.net/pub/q/java_net_rss">java.net RSS Feeds</a><br />
<div class="grayline"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%" class="vatop">
<tr>
<td><img src="/im/a.gif" width="190" height="1" border="0" alt=" " /><br />
<a href="http://www.sun.com"><img src="/im/logo_sun_small.gif" width="61" height="29" border="0" alt=" " vspace="5"/></a></td>
<td width="60%" valign="top">
<div class="footer">
<a href="https://java-net.dev.java.net/feedback.html">Feedback</a> | <a href="http://java.net/faq.csp">FAQ</a> | <a href="http://java.net/presscenter/">Press</a> | <a href="http://java.net/terms.csp">Terms of Use</a><br />
<a href="http://www.sun.com/privacy/">Privacy</a> |
<a href="http://www.sun.com/suntrademarks/">Trademarks</a> | <a href="https://java-net.dev.java.net/sitemap.html">Site Map</a>
<br /><span class="sp5"> </span><br />
Your use of this web site or any of its content or software indicates your agreement to be bound by these <a href="http://java.net/terms.csp">Terms of Participation</a>.<br />
<span class="sp5"> </span><br />
Copyright © 1995-2007 Sun Microsystems, Inc.
</div></td>
<td width="40%" valign="top" align="right"><div class="footer">
<a href="http://www.oreilly.com"><img src="/images/montague_logo_oreilly.gif" width="74" height="19" border="0" alt="Oreilly Logo"></a><a href="http://www.collab.net/"><img src="/images/montague_logo_collabnet.gif" width="85" height="19" border="0" alt="Collabnet Logo"></a><br>
Powered by Sun Microsystems, Inc.,<br /> O'Reilly and CollabNet
</div></td></tr>
<!-- <tr><td colspan="3" valign="top" class="grey3"><img src="/im/a.gif" width="1" height="2" border="0" alt=" " /></td></tr> -->
</table>
<div class="grayline"></div>
</td></tr>
</table>
<!-- END VNV5 FOOTER -->
<!-- Begin SiteCatalyst code -->
<script language="JavaScript" src="http://www.java.net/s_code_remote.js"></script>
<!-- End SiteCatalyst code -->
</body>
</html>