blob: 7f9bd21cd05bd900922eca29c49723b72a273f7c [file] [log] [blame]
<?xml version="1.0"?>
<!--
Copyright (c) 2010 Stephan Herrmann and others.
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:
Stephan Herrmann - initial API and implementation
-->
<project name="Main Object Teams Build and Test Automation" default="INFO">
<target name="showGivenProperties"
description="Show values of all properties that should be passed from our caller.">
<echo>Properties passed into this script:
------------------------------------------------------------------------------
path of eclipse SDK:
eclipse-app.tgz = ${eclipse-app.tgz}
path of eclipse test framework:
eclipse.tests.zip= ${eclipse.tests.zip}
path of published updates:
published.updates= ${published.updates}
should sources be built (true|false)?
do.build.all = ${do.build.all}
should test be run (true|false)?
do.run.tests = ${do.run.tests}
directory for tempory files during testing:
test.tmpDir = ${test.tmpDir}
------------------------------------------------------------------------------
</echo>
</target>
<target name="setupProperties" depends="showGivenProperties">
<dirname property="_toplevelDir" file="${ant.file}"/>
<!-- main configuration file (version dependent names etc.): -->
<loadproperties srcfile="${_toplevelDir}/run.properties" />
<!-- versions of test plugins, also find org.eclipse.test here: -->
<loadproperties srcfile="${_toplevelDir}/test.properties" />
<!-- ======== Directories (indentation shows structure): ======== -->
<!-- build scripts: -->
<property name="OTScriptDir" value="${_toplevelDir}" />
<property name="buildfile" value="${OTScriptDir}/build.xml" />
<property name="builder-otcompiler" value="${OTScriptDir}/OT-Compiler" />
<property name="builder-otdt" value="${OTScriptDir}/OTDT-Build" />
<!-- directories for the build: -->
<property name="build.root.dir" value="${user.dir}/build-root" />
<!-- These names are hard coded in pde-build: -->
<property name="buildDirectory" value="${build.root.dir}/src" />
<property name="baseLocation" value="${build.root.dir}/eclipse" />
<!-- directories for testing: -->
<property name="test.root.dir" value="${user.dir}/test-root" />
<!-- This name is used in individual test.xml of test plugins: -->
<property name="test.eclipseDir" value="${test.root.dir}/eclipse" />
<!-- directories for update sites: -->
<property name="otdtUpdatesDir" value="${user.dir}/updateSite"/>
<property name="testsUpdatesDirBase" value="${user.dir}/updateSiteTests"/>
<!-- will have sub directories "eclipse" and "otdt" -->
<!-- ======== More Configuration Details: ======== -->
<!-- maybe obsolete: file prefix to distinguish output files. -->
<property name="file-id" value="XXX" />
<!-- Configure Java for STAGE 1 and STAGE 2 building: -->
<property name="vm" value="java" />
<property name="vm.args" value="-Xmx912m" />
<property name="vm.args2" value="-XX:MaxPermSize=128m" />
<property name="installmode" value="clean" />
<property name="saxon.jar.name" value="saxon8.jar" />
<property name="saxon.jar.path" value="${user.home}/.ant/lib/${saxon.jar.name}" />
<available file="${saxon.jar.path}" property="_hasSaxon.jar" />
<!-- ant's os.arch is slightly different than osgi's arch -->
<condition property="arch" value="x86_64"> <!-- HACK: hard coding 64-bit architecture -->
<os arch="i386" />
</condition>
<condition property="arch" value="ppc64"> <!-- HACK: hard coding 64-bit architecture -->
<os arch="ppc" />
</condition>
<condition property="arch" value="x86_64"> <!-- Map ant's arch to OSGi arch -->
<os arch="amd64" />
</condition>
<!-- if not set above, set it to os.arch -->
<property name="arch" value="${os.arch}" />
</target>
<target name="INFO">
<echo>Usage:
ant -f run.xml ot-junit-all -> runs OTDT Build and Testprocess
ant -f run.xml ot-junit-otdt -> runs OTDT Build and Testprocess excluding jdt tests
ant -f run.xml ot-junit-build -> runs just OTDT Buildprocess
ant -f run.xml ot-compiler-build -> just build the compiler
ant -f run.xml ot-junit-run -> runs just OTDT Tests w/o TestSetup
</echo>
</target>
<target name="ot-junit-all" depends="setupProperties,checkOS" description="Build all and run all tests.">
<echo message="Starting BuildProcess and Testrun in ${build.root.dir}"/>
<antcall target="verifyAntInstall"/>
<antcall target="setupTests" />
<antcall target="runAllTests"/>
</target>
<target name="ot-junit-otdt" depends="setupProperties,checkOS" description="Build all and run otdt tests.">
<echo message="Starting BuildProcess and Testrun in ${build.root.dir}"/>
<antcall target="verifyAntInstall"/>
<antcall target="setupTests" />
<antcall target="runOTDTTests"/>
</target>
<target name="ot-junit-build" depends="setupProperties,checkOS" description="build everything without running tests">
<echo message="Starting BuildProcess in ${build.root.dir}"/>
<antcall target="verifyAntInstall"/>
<antcall target="createOTDTEclipse"/>
</target>
<target name="ot-compiler-build" depends="setupProperties,checkOS" description="build only the compiler (for debugging the build)">
<echo message="Starting BuildProcess in ${build.root.dir}"/>
<antcall target="verifyAntInstall"/>
<antcall target="createOTCompilerEclipse"/>
</target>
<target name="ot-junit-run" depends="setupProperties,checkOS" description="Run tests without building">
<echo message="Starting Testrun ${test.root.dir}"/>
<antcall target="runAllTests" />
</target>
<!-- =================== END Public Targets ==================== -->
<!-- === Setup Targets: === -->
<target name="verifyAntInstall" unless="_hasSaxon.jar">
<copy failonerror="true" overwrite="false" file="${OTScriptDir}/${saxon.jar.name}" tofile="${saxon.jar.path}"></copy>
<echo message="Needed to copy saxon8.jar to ${saxon.jar.path}. Please restart the build." />
<echo message="For an explanation, see http://ant.apache.org/faq.html#delegating-classloader-1.6" />
<fail message="See above. Please restart the build."/>
</target>
<!-- checks on which os ant is run, set ${os} and ${ws} accordingly -->
<target name="determineOS">
<condition property="os.isWindows">
<os family="windows"/>
</condition>
<condition property="os.isLinux">
<os name="Linux" />
</condition>
</target>
<target name="checkOS" depends="determineOS,windows,linux"/>
<target name="windows" if="os.isWindows">
<echo message="OS is Windows"/>
<property name="os" value="win32" />
<property name="ws" value="win32" />
</target>
<target name="linux" unless="os.isWindows" >
<echo message="OS is Linux"/>
<!-- eclipse-app.tgz is already passed from the calling script -->
<property name="os" value="linux" />
<property name="ws" value="gtk" />
</target>
<target name="setupForCompile" depends="checkOS" unless="_hasCreatedOTDTEclipse">
<antcall target="UnzipEclipse"/>
<antcall target="AddPluginsToEclipse"/>
</target>
<target name="UnzipEclipse">
<echo message="Extracting Eclipse (${eclipse-app.tgz}) in ${build.root.dir}..."/>
<mkdir dir="${build.root.dir}"/>
<untar compression="gzip" src="${eclipse-app.tgz}" dest="${build.root.dir}"/>
</target>
<target name="AddPluginsToEclipse" description="Add git.pde.build plugins to the base Eclipse">
<mkdir dir="${baseLocation}/dropins/plugins"/>
<copy file="${OTScriptDir}/lib/${git.pde.build}" todir="${baseLocation}/dropins/plugins" />
</target>
<!-- ==== BUILDING AND RUNNING: ==== -->
<!-- ==== BUILD STAGE 1: ==== -->
<!-- setting an empty inputstring is a workaround for http://issues.apache.org/bugzilla/show_bug.cgi?id=34461 -->
<target name="createOTCompilerEclipse" depends="setupForCompile" description="create the bootstrapping Eclipse with OT/J compiler">
<echo message="Invoke pdebuild for creating the OT-Compiler"/>
<java
inputstring=""
dir="${baseLocation}"
fork="true"
classname="org.eclipse.equinox.launcher.Main"
classpath="${baseLocation}/plugins/${org.eclipse.equinox.launcher_jar}">
<arg value="-Dosgi.ws=${ws}"/>
<arg value="-Dosgi.os=${os}"/>
<arg value="-Dosgi.arch=${arch}"/>
<arg value="-application"/>
<arg value="org.eclipse.ant.core.antRunner"/>
<arg value="-buildfile"/>
<arg value="${buildfile}"/>
<arg value="-Dbuild.root.dir=${build.root.dir}"/>
<arg value="-DbaseLocation=${baseLocation}"/>
<arg value="-DOTScriptDir=${OTScriptDir}"/>
<arg value="-Drun.eclipseScriptDir=${run.eclipseScriptDir}"/>
<arg value="-Dbuilder=${builder-otcompiler}"/>
<arg value="-D${installmode}=true"/> <!-- <- obsolete? -->
<arg value="-Dcomponent.short=OT-Compiler"/>
<arg value="-DotdtUpdatesDir=${otdtUpdatesDir}"/>
<arg value="-Dconfigs=*,*,*"/>
<arg value="-Dbaseos=${os}"/>
<arg value="-Dbasews=${ws}"/>
<arg value="-Dbasearch=${arch}"/>
<arg value="-Dtest.root.dir=${test.root.dir}"/>
<arg value="-Dtest.eclipseDir=${test.eclipseDir}"/>
<arg value="-DmapVersionTag=${mapVersionTag}"/>
<arg value="-Dmap.file.path=${map.file.path}"/>
<arg value="-Declipse-app.tgz=${eclipse-app.tgz}"/>
<arg value="-Declipse.tests.zip=${eclipse.tests.zip}"/>
<!--arg value="-verbose" /-->
<jvmarg value="${vm.args}"/>
<jvmarg value="${vm.args2}"/>
</java>
<!-- Now we should have an update site with the patch feature, time to install it into base: -->
<ant antfile="${OTScriptDir}/p2helper.xml" target="installFeature" dir="${baseLocation}">
<property name="feature" value="org.eclipse.objectteams.otdt.core.patch.feature.group"/>
<property name="sourceUpdatesDir" value="${otdtUpdatesDir}"/>
<property name="targetEclipseDir" value="${baseLocation}"/>
</ant>
</target>
<!-- ==== BUILD STAGE 2: ==== -->
<!-- setting an empty inputstring is a workaround for http://issues.apache.org/bugzilla/show_bug.cgi?id=34461 -->
<target name="createOTDTEclipse" depends="createOTCompilerEclipse" unless="_hasCreatedOTDTEclipse">
<!-- Make org.eclipse.test.performance available while compiling test projects: -->
<echo message="Pre-installing Eclipse Test Framework into OTCompilerEclipse..."/>
<mkdir dir="${testsUpdatesDirBase}/eclipse"/>
<unzip dest="${testsUpdatesDirBase}/eclipse" src="${eclipse.tests.zip}"/>
<ant antfile="${OTScriptDir}/p2helper.xml" target="installFeature" dir="${baseLocation}">
<property name="feature" value="org.eclipse.test.feature.group"/>
<property name="sourceUpdatesDir" value="${testsUpdatesDirBase}/eclipse"/>
<property name="targetEclipseDir" value="${baseLocation}"/>
</ant>
<!-- pre-load updateSite with published releases: -->
<mkdir dir="${otdtUpdatesDir}/plugins"/>
<mkdir dir="${otdtUpdatesDir}/features"/>
<exec executable="/bin/sh">
<arg value="-c"/>
<arg value="ln -s ${published.updates}/features/* ${otdtUpdatesDir}/features/"/>
</exec>
<exec executable="/bin/sh">
<arg value="-c"/>
<arg value="ln -s ${published.updates}/plugins/* ${otdtUpdatesDir}/plugins/"/>
</exec>
<!-- pre-load category-less metadata: -->
<copy failonerror="false" flatten="true" toDir="${otdtUpdatesDir}">
<fileset dir="${user.dir}/metadata">
<include name="*.xml"/>
</fileset>
</copy>
<echo message="Invoke pdebuild for creating a full OTDT"/>
<java
inputstring=""
dir="${baseLocation}"
fork="true"
classname="org.eclipse.equinox.launcher.Main"
classpath="${baseLocation}/plugins/${org.eclipse.equinox.launcher_jar}">
<arg value="-clean"/>
<arg value="-Dosgi.ws=${ws}"/>
<arg value="-Dosgi.os=${os}"/>
<arg value="-Dosgi.arch=${arch}"/>
<arg value="-application"/>
<arg value="org.eclipse.ant.core.antRunner"/>
<arg value="-buildfile"/>
<arg value="${buildfile}"/>
<arg value="-Dbuild.root.dir=${build.root.dir}"/>
<arg value="-DbaseLocation=${baseLocation}"/>
<arg value="-Drun.eclipseScriptDir=${run.eclipseScriptDir}"/>
<arg value="-DOTScriptDir=${OTScriptDir}"/>
<arg value="-Dbuilder=${builder-otdt}"/>
<arg value="-D${installmode}=true"/>
<arg value="-Dcomponent.short=OTDT-Build"/>
<arg value="-DotdtUpdatesDir=${otdtUpdatesDir}"/>
<arg value="-DtestsUpdatesDirBase=${testsUpdatesDirBase}"/>
<arg value="-Dbaseos=${os}"/>
<arg value="-Dbasews=${ws}"/>
<arg value="-Dbasearch=${arch}"/>
<arg value="-Dtest.root.dir=${test.root.dir}"/>
<arg value="-Dtest.eclipseDir=${test.eclipseDir}"/>
<arg value="-Dmap.file.path=${map.file.path}"/>
<arg value="-DmapVersionTag=${mapVersionTag}"/>
<arg value="-Ddo.run.tests=${do.run.tests}"/>
<arg value="-Ddo.build.all=${do.build.all}"/>
<arg value="-Declipse-app.tgz=${eclipse-app.tgz}"/>
<arg value="-Declipse.tests.zip=${eclipse.tests.zip}"/>
<!--arg value="-verbose" /-->
<jvmarg value="${vm.args}"/>
<jvmarg value="${vm.args2}"/>
<!-- arg value="${verboseAnt}"/ -->
<!-- arg value="-debug" / -->
</java>
<!-- At this point a local update site exists, thanks to p2gathering=true -->
<ant antfile="${OTScriptDir}/p2helper.xml" target="patchMetadata" dir="${otdtUpdatesDir}"/>
<property name="_hasCreatedOTDTEclipse" value="true" />
</target>
<!-- TESTING at STAGE 3: -->
<target name="setupTests" depends="createOTDTEclipse" description="Install the tests into an fresh OTDT">
<available file="${buildDirectory}/label.properties" property="label.properties.exists" />
<ant antfile="${OTScriptDir}/test.xml" target="setupTests" dir="${build.root.dir}">
<property name="os" value="${os}" />
<property name="ws" value="${ws}" />
<property name="arch" value="${arch}" />
<property name="baseos" value="${os}" />
<property name="basews" value="${ws}" />
<property name="basearch" value="${arch}" />
<property name="eclipse-app.tgz" value="${eclipse-app.tgz}" />
<property file="${buildDirectory}/label.properties" />
<property name="otdtUpdatesDir" value="${otdtUpdatesDir}" />
<property name="testsUpdatesDirBase" value="${testsUpdatesDirBase}" />
</ant>
</target>
<target name="runAllTests" description="Delegate to the next level script to perform the actual testing.">
<ant antfile="${OTScriptDir}/test.xml" target="all" dir="${build.root.dir}">
<property name="os" value="${os}" />
<property name="ws" value="${ws}" />
<property name="arch" value="${arch}" />
<property name="baseos" value="${os}" />
<property name="basews" value="${ws}" />
<property name="basearch" value="${arch}" />
<property name="otdtUpdatesDir" value="${otdtUpdatesDir}" />
<property name="testsUpdatesDirBase" value="${testsUpdatesDirBase}" />
<property name="test.tmpDir" value="${test.tmpDir}"/>
<property name="vmargs" value="${vmargs}" />
</ant>
</target>
<target name="runOTDTTests" description="Delegate to the next level script to perform the actual testing.">
<ant antfile="${OTScriptDir}/test.xml" target="otdt-tests" dir="${build.root.dir}">
<property name="os" value="${os}" />
<property name="ws" value="${ws}" />
<property name="arch" value="${arch}" />
<property name="baseos" value="${os}" />
<property name="basews" value="${ws}" />
<property name="basearch" value="${arch}" />
<property name="otdtUpdatesDir" value="${otdtUpdatesDir}" />
<property name="testsUpdatesDirBase" value="${testsUpdatesDirBase}" />
<property name="test.tmpDir" value="${test.tmpDir}"/>
<property name="vmargs" value="${vmargs}" />
</ant>
</target>
<!-- currently unused target name="collectResults">
<ant target="collect" antfile="${test.eclipseDir}/plugins/${org.eclipse.test}/library.xml" dir="${otresults}">
<property name="includes" value="org.*.xml"/>
<property name="output-file" value="AllTestSuites.xml"/>
</ant>
</target -->
</project>