| <?xml version="1.0" encoding="UTF-8"?> | |
| <!-- | |
| ~ Copyright (c) 2007, 2017, 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.) | |
| |-genrsc (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.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"> | |
| <scriptmapper language="javascript"> | |
| fs = project.getProperty("file.separator"); | |
| path = project.getProperty("build.modules"); | |
| mod = source.substr(source.lastIndexOf(fs)+1); | |
| self.addMappedName(mod + "=\"" + path + fs + mod + "\""); | |
| </scriptmapper> | |
| </pathconvert> | |
| <pathconvert property="xpatch.noquotes.rest" pathsep=" --patch-module=" refid="src.module.dirset"> | |
| <scriptmapper language="javascript"> | |
| fs = project.getProperty("file.separator"); | |
| path = project.getProperty("build.modules"); | |
| mod = source.substr(source.lastIndexOf(fs)+1); | |
| self.addMappedName(mod + "=" + path + fs + mod); | |
| </scriptmapper> | |
| </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 Solaris/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 overriden 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"> | |
| <scriptmapper language="javascript"> | |
| fs = project.getProperty("file.separator"); | |
| path_src = project.getProperty("src.dir"); | |
| path_sep = project.getProperty("path.separator"); | |
| path_gensrc = project.getProperty("build.gensrc"); | |
| mod = source.substr(source.lastIndexOf(fs)+1); | |
| self.addMappedName(mod + "=" + path_src + fs + mod + path_sep + path_gensrc + fs + mod); | |
| </scriptmapper> | |
| </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="sjavac"/> | |
| <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.dir}/intellij"> | |
| <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.dir}/intellij/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> |