build.xml revision 841
4880N/A<?
xml version="1.0" encoding="UTF-8"?>
0N/A Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. 0N/A DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A This code is free software; you can redistribute it and/or modify it 0N/A under the terms of the GNU General Public License version 2 only, as 0N/A published by the Free Software Foundation. Oracle designates this 0N/A particular file as subject to the "Classpath" exception as provided 0N/A by Oracle in the LICENSE file that accompanied this code. 0N/A This code is distributed in the hope that it will be useful, but WITHOUT 0N/A ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A version 2 for more details (a copy is included in the LICENSE file that 0N/A accompanied this code). 2362N/A You should have received a copy of the GNU General Public License version 2362N/A 2 along with this work; if not, write to the Free Software Foundation, 2362N/A Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 4892N/A Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 0N/A This is the main build file for the complete langtools repository. 0N/A It is used when building JDK (in which case it is invoked from the 0N/A Makefile), and it can be used when working on the tools themselves, 0N/A in an IDE such as NetBeans. 0N/A External dependencies are specified via properties. These can be given 0N/A location of the version of JDK used to build this repository. Additional 0N/A properties may be required, depending on the targets that are built. 0N/A For example, to run any of the jtreg tests you must set jtreg.home, 0N/A For the most part, javac can be built using the previous version of JDK. 0N/A However, a small number of javac files require access to the latest JDK, 0N/A which may not yet have been compiled. To compile these files, you can do 0N/A one of the following: 0N/A or to jdk source repository. In the latter case, stub files will 0N/A automatically be generated and used for the required API, to avoid 0N/A unnecessary compilation of the source repository. 0N/A If you do neither, the relevant files will not be built. 0N/A The main build happens in two phases: 0N/A (This implies a constraint on the source code that they can be compiled 0N/A with the previous version of JDK. 0N/A - Second, all required classes are compiled with the latest javac, created 0N/A in the previous step. 0N/A The first phase is called the bootstrap phase. All targets, properties and 0N/A tasks that are specific to that phase have "bootstrap" in their name. 0N/A For more details on the JDK build, see 0N/A For more details on the stub generator, see 0N/A Internal details ... 0N/A Interim build products are created in the build/ directory. 0N/A Final build products are created in the dist/ directory. 0N/A suitable for compiling downstream parts of JDK 0N/A - Source files and class files for inclusion in the JDK being built 0N/A - Separate jar files for each of the separate langtools components 0N/A - Simple scripts to invoke the tools by executing the corresponding 0N/A These jar files and scripts are "for developer use only". 0N/A This file is organized into sections as follows: 0N/A - global property definitions 0N/A - general top level targets 0N/A - groups of targets for each tool: javac, javadoc, doclets, javah, javap, apt 0N/A Within each group, the following targets are provided, where applicable 0N/A build-bootstrap-TOOL build the bootstrap version of the tool 0N/A build-classes-TOOL build the classes for the tool 0N/A build-TOOL build the jar file and script for the tool 0N/A jtreg-TOOL build the tool and run the appropriate tests 4176N/A findbugs-TOOL run findbugs on the tool's source oode 4176N/A TOOL build the tool, run the tests, and run findbugs 4176N/A<
project name="langtools" default="build" basedir="..">
4880N/A **** Global property definitions. 4176N/A property is set. This must be BEFORE the include of 4880N/A <!-- The following locations can be used to override default property values. --> 0N/A <!-- Use this location for customizations specific to this instance of this workspace --> 4176N/A <!-- Use this location for customizations common to all OpenJDK langtools workspaces --> 4176N/A <!-- Use this location for customizations common to all OpenJDK workspaces --> 4176N/A <!-- Convenient shorthands for standard locations within the workspace. --> 4176N/A executables; regrettably, that is OS-specific. --> 0N/A <
os family="windows"/>
1178N/A <!-- Standard property values, if not overriden by earlier settings. --> 4880N/A the tools' jar files. If it has not already been set, then 0N/A quietly default to simply use "java". --> 4176N/A <!-- Logic for handling access import jdk classes, if available. 4176N/A Based on the value, if any, set up default values for javac's sourcepath, 4176N/A classpath and bootclasspath. Note: the default values are overridden 4176N/A in the build-bootstrap-classes macro. --> 0N/A ignoresystemclasses="true" 0N/A <!-- Set the default bootclasspath option used for javac. 0N/A Note that different variants of the option are used, meaning we can't just 4176N/A define the value for the option. 4176N/A This is because Ant is not clever enough to handle direct use of : or ; --> 0N/A ignoresystemclasses="true" 0N/A <!-- Set the default value of the sourcepath used for javac. --> 0N/A <!-- Set the default value of the classpath used for javac. --> 1178N/A **** General top level targets. 0N/A <!-- Standard target to build deliverables for JDK build. --> 4176N/A <
target name="build" depends="build-bootstrap-tools,build-all-classes">
1178N/A <
target name="build-bootstrap-tools" 1178N/A depends="build-bootstrap-javac,build-bootstrap-javadoc,build-bootstrap-doclets,build-bootstrap-javah" 4880N/A <
target name="build-all-tools" 4176N/A depends="build-javac,build-javadoc,build-doclets,build-javah,build-javap,build-apt" 4176N/A <
target name="build-all-classes" depends="build-bootstrap-javac,-create-import-jdk-stubs">
4880N/A <
target name="clean" description="Delete all generated files">
0N/A <!-- Additional targets for running tools on the build --> 0N/A <
target name="jtreg" depends="build-all-tools,-def-jtreg">
0N/A <
target name="findbugs" depends="-def-findbugs,build-all-tools">
4176N/A <
arg value="-longBugCodes"/>
0N/A <
target name="coverage" depends="-def-cobertura,build-all-classes,instrument-classes,jtreg,coverage-report"/>
0N/A <
target name="instrument-classes" depends="-def-cobertura">
0N/A <!-- only define the following property when we want coverage info --> 0N/A includes="**/*.class" excludes="**/resources/*.class"/>
0N/A <
target name="coverage-report" depends="-def-cobertura">
0N/A <
target name="diags-examples" depends="build-javac">
0N/A <!-- can override the following on the command line if desired. --> 0N/A <
arg value="examples"/>
0N/A <
arg value="-showFiles"/>
0N/A <
arg value="-title"/>
0N/A <
arg value="Examples of javac diagnostics"/>
0N/A <!-- a patching facility to speed up incorporating the langtools' classfiles 0N/A patching the jdk used for jtreg and other tests. 0N/A <
target name="patch" depends="build-all-classes">
4176N/A <!-- standard JDK target --> 4176N/A description="display settings of configuration values">
0N/A <
target name="post-sanity" depends="-def-jtreg,sanity,build" 0N/A description="perform basic validation after a standard build">
4880N/A <!-- use vizant tool to generate graphical image of this Ant file.--> 4880N/A <
target name="vizant" depends="-def-vizant">
4880N/A <
exec executable="${dot}" >
4880N/A <
target name="diagnostics">
4880N/A <
target name="build-bootstrap-javac" 4880N/A depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
4880N/A <
build-
bootstrap-
tool name="javac"/>
4880N/A <
target name="build-classes-javac" depends="build-bootstrap-javac,-create-import-jdk-stubs">
4880N/A <
target name="build-javac" depends="build-classes-javac">
4880N/A <
target name="javadoc-javac" depends="build-javac,-def-javadoc-tool">
4880N/A <
target name="jtreg-javac" depends="build-javac,build-javap,-def-jtreg">
4880N/A <
target name="findbugs-javac" depends="build-javac,-def-findbugs">
4892N/A <
findbugs-
tool name="javac"/>
0N/A <
target name="javac" depends="build-javac,jtreg-javac,findbugs-javac"/>
4880N/A <
target name="build-bootstrap-javadoc" depends="build-bootstrap-javac">
4880N/A <
build-
bootstrap-
tool name="javadoc"/>
4880N/A <
target name="build-classes-javadoc" depends="build-classes-javac">
4880N/A <
target name="build-javadoc" depends="build-javac,build-classes-javadoc">
0N/A <
build-
tool name="javadoc"/>
0N/A <
target name="javadoc-javadoc" depends="build-javadoc,-def-javadoc-tool">
0N/A <
target name="jtreg-javadoc" depends="build-javadoc,-def-jtreg">
0N/A <
target name="findbugs-javadoc" depends="build-javadoc,-def-findbugs">
1178N/A <
findbugs-
tool name="javadoc"/>
0N/A <
target name="javadoc" depends="build-javadoc,jtreg-javadoc,findbugs-javadoc"/>
0N/A **** doclets targets. 0N/A <
target name="build-bootstrap-doclets" depends="build-bootstrap-javadoc,-def-build-bootstrap-jar">
0N/A <
target name="build-classes-doclets" depends="build-classes-javadoc">
1178N/A <
target name="build-doclets" depends="build-javadoc,build-classes-doclets">
0N/A <!-- just jar, no bin for doclets --> 0N/A <!-- (no javadoc for doclets) --> 4176N/A <
target name="jtreg-doclets" depends="build-doclets,-def-jtreg">
4176N/A <
target name="findbugs-doclets" depends="build-doclets,-def-findbugs">
4176N/A <
findbugs-
tool name="doclets"/>
4176N/A <
target name="doclets" depends="build-doclets,jtreg-doclets,findbugs-doclets"/>
0N/A <
target name="build-bootstrap-javah" depends="build-bootstrap-javadoc">
1178N/A <
build-
bootstrap-
tool name="javah"/>
0N/A <
target name="build-javah" depends="build-javac,build-classes-javah">
0N/A <
build-
tool name="javah"/>
1178N/A <
target name="build-classes-javah" depends="build-classes-javadoc">
0N/A <!-- (no javadoc for javah) --> 1178N/A <
target name="jtreg-javah" depends="build-javah,-def-jtreg">
0N/A <
target name="findbugs-javah" depends="build-javah,-def-findbugs">
0N/A <
findbugs-
tool name="javah"/>
0N/A <
target name="javah" depends="build-javah,jtreg-javah,findbugs-javah"/>
<
target name="build-bootstrap-javap" depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
<
build-
bootstrap-
tool name="javap"/>
<
target name="build-classes-javap" depends="build-classes-javac">
<
target name="build-javap" depends="build-javac,build-classes-javap">
<
build-
tool name="javap"/>
<!-- (no javadoc for javap) --> <
target name="jtreg-javap" depends="build-javap,-def-jtreg">
<
target name="findbugs-javap" depends="build-javap,-def-findbugs">
<
findbugs-
tool name="javap"/>
<
target name="javap" depends="build-javap,jtreg-javap,findbugs-javap"/>
<
target name="build-bootstrap-apt" depends="build-bootstrap-javac">
<
build-
bootstrap-
tool name="apt"/>
<
target name="build-apt" depends="build-javac,build-classes-apt">
<
target name="build-classes-apt" depends="build-classes-javac">
<
target name="javadoc-apt" depends="build-apt,-def-javadoc-tool">
<
target name="jtreg-apt" depends="build-apt,-def-jtreg">
<
jtreg-
tool name="apt" tests="${apt.tests}"/>
<
target name="findbugs-apt" depends="build-apt,-def-findbugs">
<
findbugs-
tool name="apt"/>
<
target name="apt" depends="build-apt,jtreg-apt,findbugs-apt"/>
**** Create import JDK stubs. **** "-check-*" targets check that a required property is set, and set to a reasonable value. **** A user friendly message is generated if not, and the build exits. <
target name="-check-vizant" depends="-def-check">
<
check name="dot" property="dot"/>
**** Targets for Ant macro and task definitions. <
target name="-def-build-tool">
<
macrodef name="build-tool">
<
filterset begintoken="#" endtoken="#">
<
filter token="PROGRAM" value="@{name}"/>
<
filter token="TARGET_JAVA" value="@{java}"/>
<
chmod file="@{bin.dir}/@{name}" perm="ugo+rx"/>
<
target name="-def-build-jar">
<
macrodef name="build-jar">
<
attribute name="includes"/>
<
attribute name="jarclasspath" default=""/>
<
jar destfile="@{lib.dir}/@{name}.jar" <
attribute name="Main-Class" value="@{jarmainclass}"/>
<
attribute name="Class-Path" value="@{jarclasspath}"/>
<
target name="-def-build-classes" depends="-def-pcompile">
<
macrodef name="build-classes">
<
attribute name="includes"/>
<
attribute name="release" default="${release}"/>
<
echo level="verbose" message="build-classes: excludes=@{excludes}"/>
<
echo level="verbose" message="build-classes: classpath=@{classpath}"/>
<
echo level="verbose" message="build-classes: sourcepath=@{sourcepath}"/>
<
globmapper from="*.properties-template" to="*.properties"/>
<
filterset begintoken="$(" endtoken=")">
<
filter token="RELEASE" value="@{release}"/>
includes="**/*.properties"/>
sourcepath="@{sourcepath}" <
compilerarg value="-implicit:none"/>
<
compilerarg value="-Xprefer:source"/>
<
fileset dir="${src.classes.dir}" includes="@{includes}" excludes="@{excludes}">
<
exclude name="**/*.java"/>
<
exclude name="**/*.properties"/>
<
exclude name="**/*-template"/>
<
presetdef name="build-bootstrap-tool">
<
target name="-def-build-bootstrap-jar" depends="-def-build-jar">
<
presetdef name="build-bootstrap-jar">
<
target name="-def-build-bootstrap-classes" depends="-def-build-classes">
<
presetdef name="build-bootstrap-classes">
<
target name="-def-pcompile">
includeantruntime="false"/>
classname="CompilePropertiesTask" includeantruntime="false"/>
classname="GenStubs$$Ant" <
macrodef name="javadoc-tool">
<
attribute name="includes"/>
<
attribute name="options" default=""/>
<
attribute name="source" default="1.5"/>
<!-- FIXME --> <
property name="javadoc.options" value=""/>
<!-- default, can be overridden per user or per project --> <!-- Note: even with this default value, includes <
property name="javadoc.packagenames" value="none"/>
<!-- default, can be overridden per user or per project --> <
header><
![CDATA[<strong>Unofficial Javadoc</strong> generated from developer sources for preview purposes only]]></
header>
<!-- XXX just <fileset> (restricted further to **/*.java) and no <packageset> --> <!-- means that {@link some.package} will not work, which is no good. --> <!-- (It correctly skips excluded single classes, but not if packageset is also included, --> <!-- which also causes duplicates in the class index for included files.) --> <
filename name="javax/"/>
<
macrodef name="jtreg-tool">
<
attribute name="tests"/>
<
attribute name="samevm" default="true"/>
<
attribute name="keywords" default="-keywords:!ignore"/>
samevm="@{samevm}" verbose="@{verbose}" failonerror="false" resultproperty="jtreg.@{name}.result" <
arg line="@{keywords}"/>
<!-- the next two properties are for convenience, when only a single instance of jtreg will be invoked. --> <
equals arg1="${jtreg.@{name}.result}" arg2="0"/>
<
include name="lib/**/*.jar"/>
<
macrodef name="findbugs-tool">
<
attribute name="output" default="emacs"/>
<
attribute name="outputFile" default=""/>
<
attribute name="reportLevel" default="high"/>
outputFile="@{outputFile}" reportLevel="@{reportLevel}" errorProperty="findbugs.@{name}.errors" warningsProperty="findbugs.@{name}.warnings" <
class location="${dist.dir}/lib/@{name}.jar"/>
<
target name="-def-vizant" unless="vizant.defined" depends="-check-vizant">
<
target name="-def-check">
<
attribute name="property"/>
<
attribute name="marker" default=""/>
<
fail message="Cannot locate @{name}: please set @{property} to its location">
<
isset property="@{property}"/>
<
fail message="@{name} is not installed in ${@{property}}">
<
equals arg1="@{marker}" arg2=""/>
<
available file="${@{property}}/@{marker}"/>