<?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>
Messung V0.5 in Prozent C=93 H=98 G=95
¤ Dauer der Verarbeitung: 0.8 Sekunden
¤
*© Formatika GbR, Deutschland