org.aspectj/build/build-properties.xml
2006-06-01 10:46:14 +00:00

485 lines
18 KiB
XML

<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
<!-- ========================================================================= -->
<!-- Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC). -->
<!-- Copyright (c) 2003, 2005 Contributors. -->
<!-- All rights reserved. -->
<!-- This program and the accompanying materials are made available -->
<!-- under the terms of the Eclipse Public License v1.0 -->
<!-- which accompanies this distribution and is available at -->
<!-- http://www.eclipse.org/legal/epl-v10.html -->
<!-- -->
<!-- Contributors: -->
<!-- Xerox/PARC initial implementation -->
<!-- A Colyer / G Harley eclipse plugin dirs -->
<!-- ========================================================================= -->
<!-- include as common entity for module build scripts -->
<!-- should only need to edit version properties -->
<project name="build-properties" default="init-properties">
<target name="init-properties"
unless="init-properties.done">
<!-- callers should define aspectj.modules.dir -->
<property name="aspectj.modules.dir" location="${basedir}/.."/>
<require-available property="local-properties"
path="${aspectj.modules.dir}/build/local.properties"/>
<property file="${aspectj.modules.dir}/build/local.properties"/>
<!--
Changing version:
- base should always be 1.1 (used for manifests, other version-parsing code)
- Others should be DEVELOPMENT unless testing/doing release builds, when
they should be (e.g.,) 1.1b3 or 1.1beta3
- Changing version here causes org/aspectj/bridge/Version.java to be updated
- also change org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/messages.properties
- build.version.eclipse.plugins should be set to "9.9.9" for "DEVELOPMENT", and
- the same as build.version.long (in major.minor.service form) for releases.
-->
<property name="min.vm" value="13"/>
<property name="max.vm" value="15"/>
<property name="build.verbose" value="false"/>
<property name="build.version" value="DEVELOPMENT"/>
<property name="build.version.base" value="1.2"/>
<property name="build.version.long" value="DEVELOPMENT"/>
<property name="build.version.short" value="DEVELOPMENT"/>
<!-- formats comply with SimpleDateFormat -->
<property name="build.time.format" value="EEEE MMM d, yyyy 'at' HH:mm:ss z"/>
<property name="build.date.format" value="EEEE MMM d, yyyy"/>
<tstamp>
<format property="build.date"
pattern="${build.date.format}"
timezone="GMT"/>
<format property="build.time"
pattern="${build.time.format}"
timezone="GMT"/>
</tstamp>
<property name="company.name" value="aspectj.org"/>
<property name="copyright.allRights.from1998"
value="Copyright (c) 1998-2001 Xerox Corporation, 2002 Palo Alto Research Center, Incorporated, 2003-2005 Contributors. All rights reserved." />
<!-- aj... names are generated, can be mutated/cleaned -->
<!-- these names are known to BuildModule.java and common to all -->
<property name="aj.build.dir"
location="${aspectj.modules.dir}/aj-build"/>
<property name="aj.temp.dir"
location="${aj.build.dir}/temp"/>
<property name="aj.jar.dir"
location="${aj.build.dir}/jars"/>
<property name="aj.dist.dir"
location="${aj.build.dir}/dist"/>
<property name="aj.webDeploy.dir"
location="${aj.build.dir}/webDeploy"/>
<property name="aj.install.dir"
location="${aj.build.dir}/install"/>
<property name="aj.build.allresults.dir"
location="${aj.build.dir}/allresults"/>
<property name="aj.build.allfailures.file"
location="${aj.build.allresults.dir}/allfailures.txt"/>
<property name="aj.build.results.dir"
location="${aj.build.dir}/results"/>
<property name="aj.failure.file"
location="${aj.build.results.dir}/failures.txt"/>
<property name="aj.build-id.file"
location="${aj.build.results.dir}/build-id.txt"/>
<property name="aj.junit.dir"
location="${aj.build.results.dir}/junit"/>
<property name="aj.logs.dir"
location="${aj.build.results.dir}/logs"/>
<!-- aspectj... names are sources, not to be mutated -->
<property name="aspectj.modules.lib.dir"
location="${aspectj.modules.dir}/lib"/>
<property name="aspectj.modules.build.dir"
location="${aspectj.modules.dir}/build"/>
<property name="aspectj.modules.docs.dir"
location="${aspectj.modules.dir}/docs"/>
<property name="aspectj.modules.tests.dir"
location="${aspectj.modules.dir}/tests"/>
<!-- BuildModule.java assumes products are here -->
<property name="aspectj.products.dir"
location="${aspectj.modules.build.dir}/products"/>
<property name="aspectj.modules.tests.dir"
location="${aspectj.modules.dir}/tests"/>
<property file="${aspectj.modules.build.dir}/junit-patterns.properties"/>
<property name="aspectj.tools.modules.13"
value="ajbrowser,ajde,ajdoc,asm,bridge,loadtime,org.aspectj.ajdt.core,runtime,taskdefs,util,weaver"/>
<property name="aspectj.tools.modules.15"
value="loadtime5,aspectj5rt,weaver5"/>
<condition property="aspectj.tools.modules"
value="${aspectj.tools.modules.13},${aspectj.tools.modules.15}">
<equals arg1="1.5" arg2="${ant.java.version}"/>
</condition>
<condition property="aspectj.tools.modules"
value="${aspectj.tools.modules.13}">
<not>
<equals arg1="1.5" arg2="${ant.java.version}"/>
</not>
</condition>
<property name="aspectj.test.modules"
value="build,testing,testing-client,testing-drivers,testing-util,tests"/>
<property name="aspectj.compilerTest.modules"
value="tests"/>
<property name="aspectj.other.modules"
value="docs,eclipse.plugin"/>
<jar-property name="junit.jar"
location="${aspectj.modules.lib.dir}/junit/junit.jar"/>
<!-- TODO need version-specific JDK? -->
<guarded-property name="jdk.tools.jar"
location="${java.home}/../lib/tools.jar"/>
<guarded-property name="jdk.tools.jar"
location="${java.home}/lib/tools.jar"/>
<guarded-property name="lib.test.aspectjrt.jar"
location="${aspectj.modules.lib.dir}/test/aspectjrt.jar"/>
<property name="init-properties.done" value="true"/>
</target>
<target name="init-taskdefs"
depends="init-properties"
unless="init-taskdefs.done" >
<jar-property name="aspectj.build.jar"
location="${aspectj.modules.lib.dir}/build/build.jar"/>
<jar-property name="lib.ant.jar"
location="${aspectj.modules.lib.dir}/ant/lib/ant.jar"/>
<taskdef resource="org/aspectj/internal/tools/ant/taskdefs/taskdefs.properties"
classpath="${aspectj.build.jar}"/>
<path id="ant.lib.path">
<fileset dir="${aspectj.modules.lib.dir}/ant/lib">
<include name="**/*.jar"/>
</fileset>
</path>
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"
classpathref="ant.lib.path"/>
<available classname="org.apache.xalan.processor.TransformerFactoryImpl"
property="xalan.available"
value="true">
<classpath refid="ant.lib.path"/>
</available>
<condition property="junitreport.available" value="true">
<istrue value="${xalan.available}"/>
</condition>
<echo message="junitreport.available: ${junitreport.available}"/>
<antcall target="init-junitreport"/>
</target>
<target name="init-junitreport" depends="init-properties"
if="xalan.available">
<taskdef name="junitreport"
classname="org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator"
classpathref="ant.lib.path"/>
</target>
<target name="init-directories"
depends="init-properties"
description="ensure dirs, possibly many times in a build">
<mkdir dir="${aj.build.dir}" />
<mkdir dir="${aj.temp.dir}" />
<mkdir dir="${aj.jar.dir}" />
<mkdir dir="${aj.dist.dir}" />
<mkdir dir="${aj.install.dir}" />
<mkdir dir="${aj.logs.dir}" />
</target>
<target name="init-filters"
depends="init-properties"
unless="init-filters.done" >
<!-- build.version and build.date used in filters throughout, and
build.version.base used in filtering manifest, but
others used mainly for installer-resources/properties.txt -->
<filter token="build.version" value="${build.version}"/>
<filter token="build.version.base" value="${build.version.base}"/>
<filter token="build.version.long" value="${build.version.long}"/>
<filter token="build.version.short" value="${build.version.short}"/>
<filter token="build.time.format" value="${build.time.format}"/>
<filter token="build.date.format" value="${build.date.format}"/>
<filter token="build.date" value="${build.date}"/>
<filter token="build.time" value="${build.time}"/>
<filter token="company.name" value="${company.name}"/>
<filter token="copyright.allRights.from1998"
value="${copyright.allRights.from1998}" />
<property name="init-filters.done" value="done"/>
</target>
<target name="clean-directories" depends="init-properties">
<delete quiet="on">
<fileset dir="${aj.build.dir}" includes="*,**/*"/>
</delete>
<antcall target="init-directories"/>
</target>
<target name="clean-jars"
depends="init-directories"
unless="clean-jars.done" >
<delete quiet="on">
<fileset dir="${aj.jar.dir}" includes="*"/>
</delete>
<property name="clean-jars.done" value="done"/>
</target>
<target name="clean-keep-results" depends="init-properties">
<delete>
<fileset dir="${aj.build.dir}">
<exclude name="results/*"/>
<exclude name="results/**"/>
<exclude name="allresults/*"/>
<exclude name="allresults/**"/>
</fileset>
</delete>
</target>
<target name="clean-default-results" depends="init-properties">
<delete>
<fileset dir="${aj.build.results.dir}" includes="*,**/*"/>
</delete>
</target>
<target name="clean-result" depends="init-properties">
<delete quiet="on">
<fileset dir="${aj.build.results.dir}" includes="*,**/*"/>
</delete>
</target>
<macrodef name="save-build-id"
description="save ${id} to ${aj.build-id.file}">
<attribute name="id"/>
<sequential>
<echo message="@{id}" file="${aj.build-id.file}"/>
</sequential>
</macrodef>
<macrodef name="load-build-id">
<attribute name="property"/>
<sequential>
<available property="aj.build-id.file.available"
file="${aj.build-id.file}"/>
<antcall target="ensure-build-id"/>
<loadfile srcfile="${aj.build-id.file}" property="@{property}"/>
</sequential>
</macrodef>
<target name="ensure-build-id" unless="aj.build-id.file.available"
description="create datestamp build id in ${aj.build-id.file} if n/a">
<tstamp>
<format property="build.id.name"
timezone="GMT+10"
pattern="yyyyMMdd-hhmmss"
/>
</tstamp>
<echo file="${aj.build-id.file}" message="${build.id.name}"/>
</target>
<target name="save-result" depends="init-properties">
<load-build-id property="build.id"/>
<copy todir="${aj.build.allresults.dir}/${build.id}">
<fileset dir="${aj.build.results.dir}" />
</copy>
</target>
<target name="echo-properties" depends="init-properties">
<echo>
Build Properties
build.date = ${build.date}
build.time = ${build.time}
build.version = ${build.version}
build.version.long = ${build.version.long}
build.version.short = ${build.version.short}
aspectj.modules.dir = ${aspectj.modules.dir}
aj.build.dir = ${aj.build.dir}
ant.home = ${ant.home}
java.home = ${java.home}
java11.home = ${java11.home}
java13.home = ${java13.home}
java14.home = ${java14.home}
java15.home = ${java15.home}
</echo>
</target>
<macrodef name="guarded-property"
description="set property {name} to {location} if unset and {location} exists">
<attribute name="name"/>
<attribute name="location"/>
<sequential>
<property name="@{name}.path"
location="@{location}"/>
<condition property="@{name}"
value="${@{name}.path}">
<and>
<not>
<isset property="@{name}"/>
</not>
<available file="${@{name}.path}"/>
</and>
</condition>
</sequential>
</macrodef>
<macrodef name="clean-dir">
<attribute name="dir"/>
<sequential>
<mkdir dir="@{dir}"/>
<delete>
<fileset dir="@{dir}" includes="*,**/*"/>
</delete>
<mkdir dir="@{dir}"/>
</sequential>
</macrodef>
<!--
Reporting failures
Failure-reports supports running multiple build targets in sequence for a
configuration, saving off those results, doing it over, etc., and then
checking the result (of the current builds or all builds), i.e.,
# first set of builds
- build, report-if-failed ...
- build, report-if-failed ...
...
- {save-build-id} first-set
- save-result
- clean-keep-results
- clean-default-results
# second set of builds
- build, report-if-failed ...
...
- save-result
# fail build if anything in either set failed
- fail-if-allresults-allfailures
Clients call
<report-if-failed property="failed" text="JUnit failed"/>
to signal failure. This goes into results/failures.txt, to be read later.
Many clients can call this, across many (current) build invocations, so
results just accumulate. Clients should never call <fail> directly; while
the cruise-control script can handle build failures, they won't be recorded
in a way that supports easy evaluation.
To fail if the current builds fail, do
<antcall target="fail-if-results-failures"/>
You can do a sequence of builds (e.g., in 1.3), save the results off,
and do it again (e.g., in 1.4), save the results, and then compare them.
Use save-result to store the current build results in ../allresults.
Between such builds, you can do a clean-keep-results (to clear out jars
and such), followed by clean-default-results (to clear the current results).
(The normal clean also cleans out any results, so avoid that when saving
results from multiple builds.)
Each build can be named using save-build-id. This name must be a valid
directory name. When the results are saved to ../allresults, the directory
name will use the most recent build-id. If none has been saved, then this
creates a name out of the date (down to the second).
To fail if any of the saved builds has failed, do fail-if-allresults-allfailures.
This target ignores the current builds (if they are unsaved).
-->
<macrodef name="report-if-failed">
<attribute name="property"/>
<attribute name="text"/>
<sequential>
<echo level="debug" message="property: @{property}: ${@{property}}"/>
<echo level="debug" message="text: @{text}: ${@{text}}"/>
<condition property="failed" value="true">
<isset property="@{property}"/>
</condition>
<echo level="debug" message="failed: ${failed}"/>
<antcall target="do-report-fail">
<param name="text" value="@{text}"/>
</antcall>
</sequential>
</macrodef>
<target name="do-report-fail"
if="failed">
<echo append="true" file="${aj.failure.file}">${text}
</echo>
</target>
<target name="fail-if-results-failures" depends="init-properties">
<fail-if-failures failureFile="${aj.failure.file}"/>
</target>
<target name="fail-if-allresults-allfailures" depends="init-properties">
<concat destfile="${aj.build.allfailures.file}">
<fileset dir="${aj.build.allresults.dir}"
includes="*/failures.txt"/>
</concat>
<fail-if-failures failureFile="${aj.build.allfailures.file}"/>
</target>
<macrodef name="fail-if-failures"
description="fail if ${failureFile} exists and is not empty">
<attribute name="failureFile"/>
<sequential>
<loadfile
failonerror="false"
property="failures"
srcfile="@{failureFile}"/>
<fail>
<condition>
<length file="@{failureFile}"
when="greater" length="0"/>
</condition>
# @{failureFile} failures:
${failures}
</fail>
</sequential>
</macrodef>
<macrodef name="jar-property">
<attribute name="name"/>
<attribute name="location"/>
<sequential>
<property name="@{name}"
location="@{location}"/>
<available file="${@{name}}"
property="@{name}.available"
value="${@{name}}"/>
<fail unless="@{name}.available"
message="unable to find @{name}: ${@{name}}"/>
</sequential>
</macrodef>
<macrodef name="set-available"
description="set property and property.available if path exists">
<attribute name="property"/>
<attribute name="path"/>
<sequential>
<property name="@{property}.location"
location="@{path}"/>
<available property="@{property}"
file="${@{property}.location}"
value="${@{property}.location}"/>
<condition property="@{property}.available">
<equals arg1="${@{property}.location}" arg2="${@{property}}"/>
</condition>
</sequential>
</macrodef>
<macrodef name="require-available">
<attribute name="property"/>
<attribute name="path"/>
<attribute name="message" default=""/>
<sequential>
<set-available property="@{property}" path="@{path}"/>
<fail unless="@{property}.available">
@{message} (property "@{property}" not at "@{path}")
</fail>
</sequential>
</macrodef>
</project>