| <project name="common" xmlns:if="ant:if" xmlns:unless="ant:unless"> |
| <!-- it's okay for this not to exist, but it gives a place to store |
| personal property settings, if any, persistently. For example, you |
| might use it to set gwt.junit.testcase.includes to a narrower subset |
| of test cases to exercise. --> |
| <property file="local.ant.properties"/> |
| |
| <!-- gwt.build.iscasesensitivefs is true if the filesystem of the |
| build machine is case-sensitive, false otherwise. Update with |
| new lines for any supported platforms with case-insensitive |
| filesystems |
| --> |
| <condition property="gwt.build.iscasesensitivefs" else="false"> |
| <not> |
| <or> |
| <os family="windows"/> |
| </or> |
| </not> |
| </condition> |
| |
| <property name="test.ant.file" location="${gwt.root}/${project.tail}/build.xml"/> |
| <condition property="project.valid"> |
| <equals arg1="${ant.file}" arg2="${test.ant.file}" |
| casesensitive="${gwt.build.iscasesensitivefs}"/> |
| </condition> |
| <fail unless="project.valid" |
| message="This build file is in an inconsistent state (${ant.file} != ${test.ant.file})."/> |
| |
| <!-- Global Properties --> |
| <!-- |
| Now that Java8 is the baseline, this property indicates that the build should target the |
| baseline, excluding 11+ tests, etc. This is temporary, to remove Java7 support, but not yet |
| remove the various places that version may matter, while Java 9+ support is pending. |
| --> |
| <property name="isJava8" value="true" /> |
| <property environment="env"/> |
| <condition property="gwt.version" value="${env.GWT_VERSION}" else="0.0.0"> |
| <isset property="env.GWT_VERSION"/> |
| </condition> |
| <condition property="gwt.tools.check" value="${env.GWT_TOOLS}" else="${gwt.root}/../tools"> |
| <isset property="env.GWT_TOOLS"/> |
| </condition> |
| <property name="gwt.tools" location="${gwt.tools.check}"/> |
| <property name="gwt.tools.lib" location="${gwt.tools}/lib"/> |
| <property name="gwt.tools.antlib" location="${gwt.tools}/antlib"/> |
| <property name="gwt.tools.redist" location="${gwt.tools}/redist"/> |
| <property name="gwt.build" location="${gwt.root}/build"/> |
| <property name="gwt.build.out" location="${gwt.build}/out"/> |
| <property name="gwt.build.lib" location="${gwt.build}/lib"/> |
| <property name="gwt.build.jni" location="${gwt.build}/jni"/> |
| <property name="gwt.build.staging" location="${gwt.build}/staging"/> |
| <property name="gwt.build.dist" location="${gwt.build}/dist"/> |
| <!-- gwt.threadsPerProcessor supercedes gwt.threadCount unless set to 0 --> |
| <property name="gwt.threadsPerProcessor" value="1"/> |
| <property name="gwt.threadCount" value="1"/> |
| <property name="project.build" location="${gwt.build.out}/${project.tail}"/> |
| <property name="project.lib" location="${gwt.build.lib}/gwt-${ant.project.name}.jar"/> |
| <property name="project.jni" location="${gwt.build}/${project.tail}"/> |
| <property name="javac.out" location="${project.build}/bin"/> |
| <property name="javac.junit.out" location="${project.build}/bin-test"/> |
| <property name="javac.emma.out" location="${project.build}/bin-emma"/> |
| <property name="javac.debug" value="true"/> |
| <property name="javac.debuglevel" value="lines,vars,source"/> |
| <property name="javac.encoding" value="utf-8"/> |
| <property name="javac.source" value="8"/> |
| <property name="javac.target" value="8"/> |
| <property name="javac.nowarn" value="true"/> |
| |
| <!-- javac and errorprone instructions from https://errorprone.info/docs/installation#ant --> |
| <property name="errorprone.javac.jar" location="${gwt.tools.lib}/errorprone/javac-9+181-r4173-1.jar"/> |
| <path id="errorprone.processorpath.ref"> |
| <pathelement location="${gwt.tools.lib}/errorprone/error_prone_core-2.9.0-with-dependencies.jar"/> |
| <pathelement location="${gwt.tools.lib}/errorprone/jFormatString-3.0.0.jar"/> |
| <pathelement location="${gwt.tools.lib}/errorprone/dataflow-errorprone-3.15.0.jar"/> |
| </path> |
| |
| <property name="junit.out" location="${project.build}/test"/> |
| <property name="emma.dir" value="${gwt.tools.redist}/emma"/> |
| <property name="emma.filter.exclude" value=""/> |
| |
| <!-- Sanity check --> |
| <available file="${gwt.tools}" type="dir" property="gwt.tools.exists"/> |
| <fail unless="gwt.tools.exists" |
| message="Cannot find '${gwt.tools}' tools directory; perhaps you should define the GWT_TOOLS environment variable"/> |
| |
| <!-- Platform identification --> |
| <condition property="build.host.islinux"> |
| <and> |
| <os family="unix"/> |
| <not> |
| <contains string="${os.name}" substring="mac" casesensitive="false"/> |
| </not> |
| </and> |
| </condition> |
| <condition property="build.host.platform" value="linux"> |
| <isset property="build.host.islinux"/> |
| </condition> |
| |
| <condition property="build.host.ismac"> |
| <and> |
| <os family="unix"/> |
| <contains string="${os.name}" substring="mac" casesensitive="false"/> |
| </and> |
| </condition> |
| <condition property="build.host.platform" value="mac"> |
| <isset property="build.host.ismac"/> |
| </condition> |
| |
| <condition property="build.host.iswindows"> |
| <os family="windows"/> |
| </condition> |
| <condition property="build.host.platform" value="windows"> |
| <isset property="build.host.iswindows"/> |
| </condition> |
| <fail unless="build.host.platform" message="Building on ${os.name} is not supported"/> |
| |
| <!-- JUnit support --> |
| <property name="gwt.junit.port" value="8888"/> |
| <property name="gwt.junit.testcase.includes" value="**/*Suite.class"/> |
| |
| <!-- Shared class paths --> |
| <path id="project.classpath.class"> |
| <pathelement location="${javac.out}"/> |
| </path> |
| <path id="project.classpath.src"> |
| <pathelement location="${gwt.root}/${project.tail}/src"/> |
| </path> |
| |
| <!-- Pulls in tasks defined in ant-contrib, i.e. foreach --> |
| <taskdef resource="net/sf/antcontrib/antlib.xml"> |
| <classpath> |
| <pathelement location="${gwt.tools.antlib}/ant-contrib-1.0b3.jar"/> |
| </classpath> |
| </taskdef> |
| |
| |
| <!-- Pulls in tasks defined in antcount, i.e. countfilter --> |
| <taskdef resource="net/sf/antcount/antlib.xml"> |
| <classpath> |
| <pathelement location="${gwt.tools.antlib}/antcount-1.2.jar"/> |
| </classpath> |
| </taskdef> |
| |
| |
| <!-- Global Custom Tasks --> |
| <presetdef name="gwt.ant"> |
| <ant inheritall="false" target="${target}"> |
| <propertyset> |
| <propertyref name="gwt.version"/> |
| <propertyref name="gwt.junit.port"/> |
| <propertyref name="gwt.remote.browsers"/> |
| <propertyref name="emma.enabled"/> |
| <propertyref name="emma.compiled"/> |
| </propertyset> |
| </ant> |
| </presetdef> |
| |
| <macrodef name="gwt.javac"> |
| <attribute name="srcdir" default="src" /> |
| <attribute name="destdir" default="${javac.out}" /> |
| <attribute name="source" default="${javac.source}" /> |
| <attribute name="target" default="${javac.target}" /> |
| <attribute name="excludes" default="" /> |
| <attribute name="processorpath" default="" /> |
| <attribute name="errorprone.args" default="" /> |
| <element name="javaccontents" implicit="true" optional="true" /> |
| |
| <sequential> |
| <path id="mergedprocessorpath.ref"> |
| <path refid="errorprone.processorpath.ref"/> |
| <path refid="@{processorpath}" unless:blank="@{processorpath}" /> |
| </path> |
| <mkdir dir="@{destdir}"/> |
| <javac srcdir="@{srcdir}" sourcepath="@{srcdir}" destdir="@{destdir}" debug="${javac.debug}" |
| debuglevel="${javac.debuglevel}" source="@{source}" target="@{target}" |
| nowarn="${javac.nowarn}" encoding="${javac.encoding}" includeantruntime="false" |
| fork="true" compiler="modern" excludes="@{excludes}"> |
| <compilerarg value="-J-Xbootclasspath/p:${errorprone.javac.jar}" if:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED" unless:true="${isJava8}"/> |
| <compilerarg value="-XDcompilePolicy=simple"/> |
| <compilerarg value="-processorpath"/> |
| <compilerarg pathref="mergedprocessorpath.ref"/> |
| <compilerarg value="-Xplugin:ErrorProne @{errorprone.args}" /> |
| <javaccontents /> |
| </javac> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="gwt.jar"> |
| <attribute name="destfile" default="${project.lib}"/> |
| <attribute name="duplicate" default="fail"/> |
| <attribute name="update" default="true"/> |
| <element name="jarcontents" implicit="true"/> |
| <sequential> |
| <jar destfile="@{destfile}" duplicate="@{duplicate}" filesonly="false" |
| index="true" update="@{update}"> |
| <jarcontents/> |
| </jar> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="gwt.junit"> |
| <!-- TODO: Because dev has core, oophm splits, the "common pattern" here doesn't work |
| for it (and we use extraclasspaths entries instead). Once we lose SWT, we can |
| consolidate dev/core and dev/oophm, and that can instead more to the normal |
| pattern. Note also special casing regarding (dev/) core/test. --> |
| <attribute name="test.args" default=""/> |
| <attribute name="test.jvmargs" default=""/> |
| <attribute name="test.out" default=""/> |
| <attribute name="test.reports" default="@{test.out}/reports"/> |
| <attribute name="test.emma.coverage" default="@{test.out}/emma-coverage"/> |
| <attribute name="test.cases" default=""/> |
| <attribute name="test.name" default=""/> |
| <attribute name="test.extra.jvmargs" default=""/> |
| <attribute name="haltonfailure" default="true"/> |
| <element name="extraclasspaths" optional="true"/> |
| <sequential> |
| <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"> |
| <classpath> |
| <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar"/> |
| <pathelement location="${gwt.tools.antlib}/ant-junit-1.6.5.jar"/> |
| <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar"/> |
| </classpath> |
| </taskdef> |
| |
| <echo message="Writing test results to @{test.reports} for @{test.cases}"/> |
| <mkdir dir="@{test.reports}"/> |
| |
| <antcall target="-create.emma.coverage.if.enabled"> |
| <param name="test.emma.coverage" value="@{test.emma.coverage}"/> |
| </antcall> |
| <condition property="emma.lib" value="${emma.dir}/emma-2.0.5312-patched.jar" |
| else="${emma.dir}/no-emma-requested"> |
| <isset property="emma.enabled"/> |
| </condition> |
| |
| <junit dir="@{test.out}" fork="yes" printsummary="yes" |
| failureproperty="junit.failure" tempdir="@{test.out}"> |
| <jvmarg line="-Xmx1024m"/> |
| <jvmarg line="-Xss4M"/> |
| <jvmarg value="-Demma.coverage.out.file=@{test.emma.coverage}/coverage.emma"/> |
| <jvmarg value="-Demma.coverage.out.merge=true"/> |
| <jvmarg value="-Dcom.google.gwt.junit.reportPath=reports"/> |
| <jvmarg line="@{test.jvmargs}"/> |
| <sysproperty key="gwt.args" value="@{test.args}"/> |
| <sysproperty key="java.awt.headless" value="true"/> |
| <classpath> |
| <path refid="project.classpath.src"/> |
| <pathelement location="${gwt.root}/${project.tail}/super"/> |
| <pathelement location="${gwt.root}/${project.tail}/test"/> |
| <!-- TODO: this is here because e.g. ClassPathEntryTest otherwise fails, |
| expecting the src entry (core/test) to be earlier than the bin entry |
| (${javac.junit.out}). --> |
| <pathelement location="${gwt.root}/${project.tail}/core/test"/> |
| <!-- Emma compiled classes must appear before non-emma compiled |
| classes to generate code coverage stats. javac.emma.out is |
| empty unless emma is enabled. --> |
| <pathelement location="${javac.emma.out}"/> |
| <pathelement location="${javac.junit.out}"/> |
| <path refid="project.classpath.class"/> |
| <pathelement location="${emma.lib}"/> |
| <pathelement location="${gwt.dev.staging.jar}"/> |
| <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar"/> |
| <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar"/> |
| <pathelement location="${gwt.tools.lib}/w3c/sac/sac-1.3.jar"/> |
| <pathelement location="${gwt.tools.lib}/w3c/flute/flute-1.3-gg2.jar"/> |
| <extraclasspaths/> |
| </classpath> |
| |
| <formatter type="plain"/> |
| <formatter type="xml"/> |
| |
| <batchtest todir="@{test.reports}"> |
| <fileset refid="@{test.cases}"/> |
| </batchtest> |
| </junit> |
| |
| <emma enabled="${emma.enabled}"> |
| <report sourcepath="${project.classpath.src}"> |
| <fileset file="${javac.emma.out}/metadata.emma"/> |
| <fileset dir="@{test.emma.coverage}"> |
| <include name="*.emma"/> |
| </fileset> |
| <txt outfile="@{test.emma.coverage}/coverage.txt"/> |
| <html outfile="@{test.emma.coverage}/coverage.html"/> |
| <xml outfile="@{test.emma.coverage}/coverage.xml"/> |
| </report> |
| </emma> |
| |
| <condition property="junit.stop.build" value="true"> |
| <and> |
| <istrue value="@{haltonfailure}"/> |
| <isset property="junit.failure"/> |
| </and> |
| </condition> |
| <fail |
| message="One or more junit tests failed for target: @{test.name} @{test.args}" |
| if="junit.stop.build" status="2"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="gwt.getgitinfo" description="Identifies the GIT info of a workspace"> |
| <sequential> |
| <exec executable="git" searchpath="true" outputproperty="gwt.gitrev"> |
| <arg line="rev-parse --short HEAD"/> |
| </exec> |
| <!-- Generally, filtering requires a sentinel file so that changes to git rev will |
| be noticed as invalidating the previously-generated filter output. This property |
| names where such a sentinel lives; it is tested with <available/> and created |
| with <touch/> --> |
| <mkdir dir="${project.build}/sentinels"/> |
| <property name="filter.sentinel" |
| location="${project.build}/sentinels/gwt-${gwt.version}-git-${gwt.gitrev}"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="gwt.revfilter" description="Filters files for versioning"> |
| <attribute name="todir" description="Destination for the filtered copy"/> |
| |
| <element name="src.fileset" implicit="true" |
| description="Source for the filtered copy"/> |
| <sequential> |
| <!-- These files must be filtered for versioning --> |
| <echo message="Branding as GWT version ${gwt.version}, GIT commit ${gwt.gitrev}"/> |
| <mkdir dir="@{todir}"/> |
| <copy todir="@{todir}" overwrite="true"> |
| <src.fileset/> |
| <filterset> |
| <filter token="GWT_VERSION" value="${gwt.version}"/> |
| <filter token="GWT_GITREV" value="${gwt.gitrev}"/> |
| </filterset> |
| </copy> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="gwt.checkstyle"> |
| <attribute name="outputdirectory" default="${project.build}"/> |
| <element name="sourcepath" implicit="yes" optional="true"/> |
| <sequential> |
| <taskdef resource="checkstyletask.properties" |
| classpath="${gwt.tools.antlib}/checkstyle-6.0-all.jar"/> |
| <mkdir dir="@{outputdirectory}"/> |
| <checkstyle config="${gwt.root}/eclipse/settings/code-style/gwt-checkstyle.xml" maxErrors="0" |
| failOnViolation="false" failureProperty="gwt.checkstyle.failed"> |
| <formatter type="xml" toFile="@{outputdirectory}/checkstyle_log.xml"/> |
| <property key="checkstyle.header.file" |
| file="${gwt.root}/eclipse/settings/code-style/google.header"/> |
| <sourcepath/> |
| </checkstyle> |
| <fail |
| message="Checkstyle errors exist, and are reported at @{outputdirectory}/checkstyle_log.xml" |
| if="gwt.checkstyle.failed"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="gwt.checkstyle.tests"> |
| <attribute name="outputdirectory" default="${project.build}"/> |
| <element name="sourcepath" implicit="yes" optional="true"/> |
| <sequential> |
| <taskdef resource="checkstyletask.properties" |
| classpath="${gwt.tools.antlib}/checkstyle-6.0-all.jar"/> |
| <mkdir dir="@{outputdirectory}"/> |
| <checkstyle config="${gwt.root}/eclipse/settings/code-style/gwt-checkstyle-tests.xml" |
| maxErrors="0" failOnViolation="false" |
| failureProperty="gwt.checkstyle-tests.failed"> |
| <formatter type="xml" toFile="@{outputdirectory}/checkstyle_tests_log.xml"/> |
| <property key="checkstyle.header.file" |
| file="${gwt.root}/eclipse/settings/code-style/google.header"/> |
| <sourcepath/> |
| </checkstyle> |
| <fail |
| message="Checkstyle errors exist in tests, and are reported at @{outputdirectory}/checkstyle_tests_log.xml" |
| if="gwt.checkstyle-tests.failed"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="property.ensure"> |
| <attribute name="name"/> |
| <attribute name="location"/> |
| <attribute name="message" default="Cannot find dependency ${@{name}}"/> |
| <attribute name="unless" default="__nonexistent_property__"/> |
| <sequential> |
| <property name="@{name}" location="@{location}"/> |
| <condition property="@{name}.exists"> |
| <or> |
| <available file="${@{name}}"/> |
| <isset property="@{unless}"/> |
| </or> |
| </condition> |
| <fail unless="@{name}.exists" message="@{message}"/> |
| </sequential> |
| </macrodef> |
| |
| <!-- Targets for emma support. To run tests with emma enabled, use |
| ant <test-target> -Demma.enabled=true --> |
| <path id="emma.taskdef.lib"> |
| <pathelement location="${emma.dir}/emma-2.0.5312-patched.jar"/> |
| <pathelement location="${emma.dir}/emma_ant-2.0.5312.jar"/> |
| </path> |
| |
| <taskdef resource="emma_ant.properties" classpathref="emma.taskdef.lib"/> |
| |
| <!-- Instruments emma classes --> |
| <target name="compile.emma.if.enabled" unless="emma.compiled"> |
| <delete dir="${javac.emma.out}"/> |
| <property name="emma.compiled" value="true"/> |
| <antcall target="-compile.emma.if.enabled"/> |
| </target> |
| |
| <!-- Instruments emma classes --> |
| <target name="-compile.emma.if.enabled" if="emma.enabled"> |
| <mkdir dir="${javac.emma.out}"/> |
| <path id="emma.classpath"> |
| <pathelement location="${javac.out}"/> |
| </path> |
| <emma enabled="${emma.enabled}"> |
| <instr instrpathref="emma.classpath" destdir="${javac.emma.out}" |
| metadatafile="${javac.emma.out}/metadata.emma" merge="false"> |
| <filter includes="com.google.*"/> |
| <filter excludes="${emma.filter.exclude}"/> |
| </instr> |
| </emma> |
| </target> |
| |
| <!-- Create the emma coverage directory --> |
| <target name="-create.emma.coverage.if.enabled" if="emma.enabled"> |
| <delete dir="${test.emma.coverage}"/> |
| <mkdir dir="${test.emma.coverage}"/> |
| </target> |
| |
| <!-- Default implementations of the required targets; projects should |
| override the ones that matter --> |
| <target name="all" depends="verify"/> |
| <target name="verify" depends="checkstyle, test" |
| description="Runs tests and checkstyle static analysis"/> |
| <target name="checkstyle"/> |
| <target name="compile.tests"/> |
| <target name="test" depends="build"/> |
| <target name="build"/> |
| |
| <target name="clean"> |
| <delete dir="${project.build}"/> |
| </target> |
| |
| </project> |