4527dc67be
Reviewed-by: cstein, erikj, jjg
389 lines
17 KiB
XML
389 lines
17 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
~ Copyright (c) 2007, 2020, Oracle and/or its affiliates. All rights reserved.
|
|
~ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
~
|
|
~ This code is free software; you can redistribute it and/or modify it
|
|
~ under the terms of the GNU General Public License version 2 only, as
|
|
~ published by the Free Software Foundation. Oracle designates this
|
|
~ particular file as subject to the "Classpath" exception as provided
|
|
~ by Oracle in the LICENSE file that accompanied this code.
|
|
~
|
|
~ This code is distributed in the hope that it will be useful, but WITHOUT
|
|
~ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
~ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
~ version 2 for more details (a copy is included in the LICENSE file that
|
|
~ accompanied this code).
|
|
~
|
|
~ You should have received a copy of the GNU General Public License version
|
|
~ 2 along with this work; if not, write to the Free Software Foundation,
|
|
~ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
~
|
|
~ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
~ or visit www.oracle.com if you need additional information or have any
|
|
~ questions.
|
|
-->
|
|
|
|
<!--
|
|
This is a convenience build file supporting development in the langtools
|
|
repository. It can be run either standalone, or from IDEs. This build script
|
|
is for a developer use only, it is not used to build the production version
|
|
of javac or other langtools tools.
|
|
|
|
External dependencies are specified via properties. These can be given
|
|
on the command line, or by providing a local build.properties file.
|
|
(They can also be edited into make/build.properties, although that is not
|
|
recommended.) At a minimum, langtools.jdk.home must be set to the installed
|
|
location of the version of JDK used to build this repository. Additional
|
|
properties may be required, depending on the targets that are built.
|
|
For example, to run any of the jtreg tests you must set jtreg.home.
|
|
|
|
The output of the build is as follows:
|
|
|
|
build
|
|
|-bin (scripts to invoke various tools, javac etc.)
|
|
|-gensrc (generated sources - i.e. properties)
|
|
|-modules (compiled classes in a modular layout)
|
|
|-jtreg (test work/results)
|
|
|-toolclasses (tools used for building - like the property compiler)
|
|
|
|
This file is organized into sections as follows:
|
|
- global property definitions
|
|
- primary top level targets (cleaning, building)
|
|
- utility definitions
|
|
-->
|
|
|
|
<project name="langtools" default="build" basedir="../..">
|
|
<!--
|
|
**** Global property definitions.
|
|
-->
|
|
|
|
<!-- The following locations can be used to override default property values. -->
|
|
|
|
<!-- Use this location for customizations specific to this instance of this workspace -->
|
|
<property file="make/langtools/build.properties"/>
|
|
|
|
<!-- Use this location for customizations common to all OpenJDK langtools workspaces -->
|
|
<property file="${user.home}/.openjdk/${ant.project.name}-build.properties"/>
|
|
|
|
<!-- Use this location for customizations common to all OpenJDK workspaces -->
|
|
<property file="${user.home}/.openjdk/build.properties"/>
|
|
|
|
<!-- Convenient shorthands for standard locations within the workspace. -->
|
|
<property name="src.dir" location="src"/>
|
|
<property name="test.dir" location="test"/>
|
|
<property name="make.dir" location="make/langtools"/>
|
|
<property name="make.idea.dir" location="make/ide/idea/langtools"/>
|
|
<property name="make.conf.dir" location="${make.dir}/conf"/>
|
|
<property name="make.tools.dir" location="${make.dir}/tools"/>
|
|
<property name="build.dir" location="build/langtools"/>
|
|
<property name="build.modules" location="${build.dir}/modules"/>
|
|
<property name="build.gensrc" location="${build.dir}/gensrc"/>
|
|
<property name="build.tools" location="${build.dir}/toolclasses"/>
|
|
<property name="build.bin" location="${build.dir}/bin"/>
|
|
<property name="build.jtreg" location="${build.dir}/jtreg"/>
|
|
<property name="build.prevsrc" location="${build.dir}/prevsrc"/>
|
|
|
|
<dirset id="src.module.dirset" dir="${src.dir}" includes="${module.names}"/>
|
|
|
|
<pathconvert pathsep="," property="src.module.dirs" refid="src.module.dirset"/>
|
|
|
|
<pathconvert property="xpatch.rest" pathsep=" --patch-module=" refid="src.module.dirset">
|
|
<regexpmapper from="^.*(/|\\)([^/\\]*)$" to='\2="${build.modules}\1\2"' />
|
|
</pathconvert>
|
|
|
|
<pathconvert property="xpatch.noquotes.rest" pathsep=" --patch-module=" refid="src.module.dirset">
|
|
<regexpmapper from="^([^/\\]*)(/|\\).*" to="\1=${build.modules}\2\1" />
|
|
</pathconvert>
|
|
|
|
<property name="xpatch.cmd" value="--patch-module=${xpatch.rest}"/>
|
|
<property name="xpatch.noquotes.cmd" value="--patch-module=${xpatch.noquotes.rest}"/>
|
|
|
|
<!-- java.marker is set to a marker file to check for within a Java install dir.
|
|
The best file to check for across Linux/Windows/MacOS is one of the
|
|
executables; regrettably, that is OS-specific. -->
|
|
<condition property="java.marker" value="bin/java">
|
|
<os family="unix"/>
|
|
</condition>
|
|
<condition property="java.marker" value="bin/java.exe">
|
|
<os family="windows"/>
|
|
</condition>
|
|
|
|
<!-- Standard property values, if not overridden by earlier settings. -->
|
|
<property file="${make.dir}/build.properties"/>
|
|
|
|
<condition property="langtools.jdk.home" value="${jdk.home}">
|
|
<isset property="jdk.home" />
|
|
</condition>
|
|
|
|
<!-- launcher.java is used in the launcher scripts provided to run
|
|
the tools' jar files. If it has not already been set, then
|
|
default it to use ${langtools.jdk.home}, if available, otherwise
|
|
quietly default to simply use "java". -->
|
|
<condition property="launcher.java"
|
|
value="${langtools.jdk.home}/bin/java" else="java">
|
|
<isset property="langtools.jdk.home"/>
|
|
</condition>
|
|
|
|
<!--
|
|
**** Check targets
|
|
-->
|
|
|
|
<target name="-def-check">
|
|
<macrodef name="check">
|
|
<attribute name="name"/>
|
|
<attribute name="property"/>
|
|
<attribute name="marker" default=""/>
|
|
<sequential>
|
|
<fail message="Cannot locate @{name}: please set @{property} to its location">
|
|
<condition>
|
|
<not>
|
|
<isset property="@{property}"/>
|
|
</not>
|
|
</condition>
|
|
</fail>
|
|
<fail message="@{name} is not installed in ${@{property}}">
|
|
<condition>
|
|
<and>
|
|
<not>
|
|
<equals arg1="@{marker}" arg2=""/>
|
|
</not>
|
|
<not>
|
|
<available file="${@{property}}/@{marker}"/>
|
|
</not>
|
|
</and>
|
|
</condition>
|
|
</fail>
|
|
</sequential>
|
|
</macrodef>
|
|
</target>
|
|
|
|
<target name="-check-langtools.jdk.home" depends="-def-check">
|
|
<check name="target java" property="langtools.jdk.home" marker="${java.marker}"/>
|
|
</target>
|
|
|
|
<target name="-check-jtreg.home" depends="-def-check">
|
|
<check name="jtreg" property="jtreg.home" marker="lib/jtreg.jar"/>
|
|
</target>
|
|
|
|
<!--
|
|
**** Primary targets
|
|
-->
|
|
|
|
<target name="clean" description="Delete all generated files">
|
|
<delete dir="${build.dir}"/>
|
|
</target>
|
|
|
|
<target name="build" depends="build-all-tools"/>
|
|
|
|
<target name="-prepare-build" depends="-check-langtools.jdk.home">
|
|
<mkdir dir="${build.modules}"/>
|
|
<mkdir dir="${build.tools}"/>
|
|
<mkdir dir="${build.gensrc}"/>
|
|
<mkdir dir="${build.bin}"/>
|
|
<mkdir dir="${build.prevsrc}"/>
|
|
</target>
|
|
|
|
<target name="generate-sources-internal">
|
|
<basename property="module.name" file="${basedir}"/>
|
|
<mkdir dir="${build.gensrc}/${module.name}"/>
|
|
<pparse destdir="${build.gensrc}/${module.name}" includes="${langtools.resource.includes}">
|
|
<src path="./share/classes"/>
|
|
</pparse>
|
|
<pcompile destdir="${build.gensrc}/${module.name}" includes="**/*.properties">
|
|
<src path="./share/classes"/>
|
|
</pcompile>
|
|
</target>
|
|
|
|
<target name="generate-sources" depends="-prepare-build,-def-pparse,-def-pcompile">
|
|
<subant inheritall="true" target="generate-sources-internal" genericantfile="${make.dir}/build.xml">
|
|
<dirset refid="src.module.dirset"/>
|
|
</subant>
|
|
</target>
|
|
|
|
<target name="build-all-classes" depends="generate-sources">
|
|
<pathconvert property="xpatch.src.rest" pathsep=" --patch-module=" refid="src.module.dirset">
|
|
<regexpmapper from="^.*(/|\\)([^/\\]*)$" to="\2=${src.dir}\1\2/share/classes${path.separator}${build.gensrc}\1\2" />
|
|
</pathconvert>
|
|
<property name="xpatch.src.cmd" value="--patch-module=${xpatch.src.rest}"/>
|
|
<pathconvert pathsep="," property="gensrc.module.dirs">
|
|
<dirset dir="${build.gensrc}" includes="${module.names}"/>
|
|
</pathconvert>
|
|
<multirootfileset id="source.fileset" basedirs="${src.module.dirs},${gensrc.module.dirs}">
|
|
<include name="**/*.java"/>
|
|
<different targetdir="${build.prevsrc}" ignoreFileTimes="true"/>
|
|
</multirootfileset>
|
|
<pathconvert pathsep=" " property="source.files" refid="source.fileset"/>
|
|
<echo file="${build.dir}/sources.txt">${source.files}</echo>
|
|
<exec executable="${langtools.jdk.home}/bin/javac" failonerror="true">
|
|
<arg value="-d" />
|
|
<arg value="${build.modules}" />
|
|
<arg line="${javac.opts}" />
|
|
<arg line="${xpatch.src.cmd}" />
|
|
<arg line="--module-source-path ." />
|
|
<arg line="@${build.dir}/sources.txt" />
|
|
</exec>
|
|
<delete file="${build.dir}/sources.txt"/>
|
|
<delete>
|
|
<fileset dir="${build.modules}" includes="**/module-info.class"/>
|
|
</delete>
|
|
<!-- workaround for incremental compilation -->
|
|
<copy todir="${build.prevsrc}" >
|
|
<multirootfileset refid="source.fileset"/>
|
|
</copy>
|
|
</target>
|
|
|
|
<target name="build-all-tools" depends="build-all-classes, -def-build-tool">
|
|
<build-tool name="javac"/>
|
|
<build-tool name="javadoc"/>
|
|
<build-tool name="javap"/>
|
|
<build-tool name="jdeps"/>
|
|
<build-tool name="jshell"/>
|
|
</target>
|
|
|
|
<target name="jtreg" depends="build-all-tools,-def-jtreg">
|
|
<jtreg-tool name="all" tests="${jtreg.tests}"/>
|
|
</target>
|
|
|
|
<!--
|
|
**** IDE support
|
|
-->
|
|
|
|
<target name="idea" depends="-check-langtools.jdk.home">
|
|
<mkdir dir=".idea"/>
|
|
<copy todir=".idea" >
|
|
<fileset dir="${make.idea.dir}/template">
|
|
<exclude name="**/src/**"/>
|
|
<exclude name="**/utils/**"/>
|
|
</fileset>
|
|
</copy>
|
|
<condition property="idea.jtreg.home" value="${jtreg.home}" else = "[jtreg.home]">
|
|
<isset property="jtreg.home"/>
|
|
</condition>
|
|
<condition property="idea.target.jdk" value="${langtools.jdk.home}" else = "$JDKPath$">
|
|
<isset property="langtools.jdk.home"/>
|
|
</condition>
|
|
<replace file=".idea/ant.xml" token="@IDEA_TARGET_JDK@" value="${idea.target.jdk}"/>
|
|
<replace dir=".idea/runConfigurations" token="@IDEA_TARGET_JDK@" value="${idea.target.jdk}"/>
|
|
<replace dir=".idea/runConfigurations" token="@XPATCH@" value="${xpatch.cmd}"/>
|
|
<replace file=".idea/misc.xml" token="@IDEA_JTREG_HOME@" value="${idea.jtreg.home}"/>
|
|
<replace file=".idea/misc.xml" token="@IDEA_TARGET_JDK@" value="${idea.target.jdk}"/>
|
|
<replace file=".idea/misc.xml" token="@XPATCH@" value="${xpatch.cmd}"/>
|
|
<mkdir dir=".idea/classes"/>
|
|
<javac source="${javac.build.source}"
|
|
target="${javac.build.target}"
|
|
srcdir="${make.idea.dir}/template/src"
|
|
destdir=".idea/classes"/>
|
|
</target>
|
|
|
|
<!--
|
|
**** Utility definitions
|
|
-->
|
|
|
|
<target name="-def-pparse">
|
|
<copy todir="${build.tools}/propertiesparser" >
|
|
<fileset dir="${make.tools.dir}/propertiesparser" includes="**/resources/**"/>
|
|
</copy>
|
|
<javac source="${javac.build.source}"
|
|
target="${javac.build.target}"
|
|
srcdir="${make.tools.dir}"
|
|
includes="propertiesparser/* anttasks/PropertiesParser* anttasks/PathFileSet*"
|
|
destdir="${build.tools}"
|
|
classpath="${ant.core.lib}"
|
|
bootclasspath="${langtools.jdk.home}/jre/lib/rt.jar"
|
|
includeantruntime="false">
|
|
<compilerarg line="${javac.build.opts} -XDstringConcat=inline"/>
|
|
</javac>
|
|
<taskdef name="pparse"
|
|
classname="anttasks.PropertiesParserTask"
|
|
classpath="${build.tools}"/>
|
|
</target>
|
|
|
|
<target name="-def-pcompile">
|
|
<javac
|
|
source="${javac.build.source}"
|
|
target="${javac.build.target}"
|
|
srcdir="${make.tools.dir}"
|
|
includes="compileproperties/* anttasks/CompileProperties* anttasks/PathFileSet*"
|
|
destdir="${build.dir}/toolclasses/"
|
|
classpath="${ant.core.lib}"
|
|
includeantruntime="false">
|
|
<compilerarg line="${javac.build.opts} -XDstringConcat=inline"/>
|
|
</javac>
|
|
<taskdef name="pcompile"
|
|
classname="anttasks.CompilePropertiesTask"
|
|
classpath="${build.tools}"/>
|
|
</target>
|
|
|
|
<target name="-def-build-tool">
|
|
<macrodef name="build-tool">
|
|
<attribute name="name"/>
|
|
<attribute name="compilation.kind" default=""/>
|
|
<attribute name="bin.dir" default="${build.bin}"/>
|
|
<attribute name="java" default="${launcher.java}"/>
|
|
<attribute name="main.class" default="${tool.@{name}.main.class}"/>
|
|
<attribute name="xpatch" default="${xpatch.cmd}"/>
|
|
<sequential>
|
|
<mkdir dir="@{bin.dir}"/>
|
|
<copy file="${make.dir}/launcher.sh-template" tofile="@{bin.dir}/@{name}">
|
|
<filterset begintoken="#" endtoken="#">
|
|
<filter token="PROGRAM" value="@{main.class}"/>
|
|
<filter token="TARGET_JAVA" value="@{java}"/>
|
|
<filter token="PS" value="${path.separator}"/>
|
|
<filter token="XPATCH" value="${xpatch.cmd}"/>
|
|
</filterset>
|
|
</copy>
|
|
<chmod file="@{bin.dir}/@{name}" perm="ugo+rx"/>
|
|
</sequential>
|
|
</macrodef>
|
|
</target>
|
|
|
|
<target name="-def-jtreg" unless="jtreg.defined" depends="-check-jtreg.home,-check-langtools.jdk.home">
|
|
<taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant">
|
|
<classpath>
|
|
<pathelement location="${jtreg.home}/lib/jtreg.jar"/>
|
|
<pathelement location="${jtreg.home}/lib/javatest.jar"/>
|
|
</classpath>
|
|
</taskdef>
|
|
<macrodef name="jtreg-tool">
|
|
<attribute name="name"/>
|
|
<attribute name="tests"/>
|
|
<attribute name="jdk" default="${langtools.jdk.home}"/>
|
|
<attribute name="agentvm" default="true"/>
|
|
<attribute name="verbose" default="${default.jtreg.verbose}"/>
|
|
<attribute name="options" default="${other.jtreg.options}"/>
|
|
<attribute name="ignore" default="-keywords:!ignore -exclude:${test.dir}/ProblemList.txt"/>
|
|
<attribute name="jpda.jvmargs" default=""/>
|
|
<attribute name="extra.jvmargs" default=""/>
|
|
<attribute name="build.modules" default="${build.modules}"/>
|
|
<sequential>
|
|
<property name="coverage.options" value=""/> <!-- default -->
|
|
<property name="coverage.classpath" value=""/> <!-- default -->
|
|
<property name="default.jtreg.verbose" value="summary"/> <!-- default -->
|
|
<property name="other.jtreg.options" value=""/> <!-- default -->
|
|
<property name="jtreg.classfiles.to.modules" value="@{agentvm}"/>
|
|
<jtreg
|
|
dir="${test.dir}"
|
|
workDir="${build.jtreg}/@{name}/work"
|
|
reportDir="${build.jtreg}/@{name}/report"
|
|
jdk="@{jdk}"
|
|
agentvm="@{agentvm}" verbose="@{verbose}"
|
|
failonerror="false" resultproperty="jtreg.@{name}.result"
|
|
vmoptions="${coverage.options} @{extra.jvmargs} ${xpatch.noquotes.cmd}">
|
|
<arg value="-debug:@{jpda.jvmargs}"/>
|
|
<arg line="@{ignore}"/>
|
|
<arg line="@{options}"/>
|
|
<arg line="@{tests}"/>
|
|
</jtreg>
|
|
<!-- the next two properties are for convenience, when only
|
|
a single instance of jtreg will be invoked. -->
|
|
<condition property="jtreg.passed">
|
|
<equals arg1="${jtreg.@{name}.result}" arg2="0"/>
|
|
</condition>
|
|
<property name="jtreg.report" value="${build.jtreg}/@{name}/report"/>
|
|
</sequential>
|
|
</macrodef>
|
|
<property name="jtreg.defined" value="true"/>
|
|
</target>
|
|
</project>
|