blob: f6ee40ef515dddae70c4f823c9d6f3ee38a7237b [file] [log] [blame]
<?xml version="1.0"?>
<!--
Copyright (c) 2011-2013 Eike Stepper (Berlin, Germany) 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:
Eike Stepper - initial API and implementation
-->
<project name="CDO" default="all">
<property file="local.properties" />
<property file="build.properties" />
<property environment="env" />
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="${ant.contrib}" />
</classpath>
</taskdef>
<!-- ========= -->
<!-- Clean Dir -->
<!-- ========= -->
<macrodef name="cleandir">
<attribute name="dir" />
<attribute name="mkdir" default="true" />
<sequential>
<delete includeemptydirs="true" failonerror="false" verbose="false">
<fileset dir="@{dir}" defaultexcludes="false">
<include name="**" />
</fileset>
</delete>
<if>
<equals arg1="@{mkdir}" arg2="true" />
<then>
<mkdir dir="@{dir}" />
</then>
</if>
</sequential>
</macrodef>
<!-- ======= -->
<!-- Eclipse -->
<!-- ======= -->
<macrodef name="eclipse">
<attribute name="app" />
<element name="properties" optional="true" />
<element name="args" optional="true" />
<sequential>
<!-- Find launcher -->
<property name="@{app}.deploy.dir" value="${tools}/@{app}" />
<pathconvert property="@{app}.launcher">
<first count="1">
<sort>
<fileset dir="${@{app}.deploy.dir}/plugins" includes="**/org.eclipse.equinox.launcher_*.jar" />
<reverse xmlns="antlib:org.apache.tools.ant.types.resources.comparators">
<date />
</reverse>
</sort>
</first>
</pathconvert>
<!-- Run launcher -->
<java fork="true" jar="${@{app}.launcher}" dir="${@{app}.deploy.dir}" failonerror="true">
<env key="no_proxy" value="${no.proxy}" />
<properties />
<args />
</java>
</sequential>
</macrodef>
<!-- =========== -->
<!-- Buckminster -->
<!-- =========== -->
<macrodef name="buckminster">
<attribute name="command" />
<attribute name="workspace" default="${ws}" />
<element name="sysproperties" optional="true" />
<element name="globargs" optional="true" />
<element name="cmdargs" optional="true" />
<sequential>
<!-- Create buckminster.properties -->
<property name="buckminster.properties" location="${result}/buckminster.properties" />
<echoproperties destfile="${buckminster.properties}">
<propertyset negate="true">
<propertyref name="basedir" />
<propertyref name="eclipse.home" />
<propertyref name="buckminster.properties" />
<propertyref name="line.separator" />
<propertyref name="path.separator" />
<propertyref prefix="ant." />
<propertyref prefix="file." />
<propertyref prefix="java." />
<propertyref prefix="sun." />
<propertyref prefix="user." />
</propertyset>
</echoproperties>
<!-- Launch Buckminster -->
<eclipse app="buckminster">
<properties>
<sysproperties />
</properties>
<args>
<jvmarg value="-XX:MaxPermSize=256M" />
<jvmarg value="-Xmx4g" />
<jvmarg value="-Dsite.pack200=false" />
<jvmarg value="-Dsite.retain.unpacked=true" />
<jvmarg value="-Dorg.eclipse.update.jarprocessor.pack200=${jarprocessor.dir}" />
<jvmarg value="-Declipse.p2.MD5Check=false" />
<jvmarg value="-Declipse.p2.mirrors=${p2.mirrors}" />
<jvmarg value="-Declipse.p2.unsignedPolicy=allow" />
<jvmarg value="-Dgit.clone=${git.clone}" />
<arg value="-data" />
<arg value="@{workspace}" />
<arg value="--loglevel" />
<arg value="${loglevel}" />
<arg value="--displaystacktrace" />
<globargs />
<arg value="@{command}" />
<arg value="-P" />
<arg value="${buckminster.properties}" />
<cmdargs />
</args>
</eclipse>
</sequential>
</macrodef>
<!-- ======================= -->
<!-- Replace Product Version -->
<!-- ======================= -->
<macrodef name="replace.product.version">
<attribute name="feature" />
<attribute name="profile" />
<attribute name="version" />
<sequential>
<replace file="${features}/@{feature}-feature/@{profile}.product" token=".qualifier" value=".@{version}" />
</sequential>
</macrodef>
<!-- ============= -->
<!-- Generate Site -->
<!-- ============= -->
<macrodef name="generate.site">
<attribute name="feature" />
<attribute name="todir" default="${build.root}" />
<sequential>
<echo message="Generating site" />
<!-- Clean -->
<delete includeemptydirs="true" failonerror="false">
<fileset dir="@{todir}" defaultexcludes="false">
<include name="binary/**" />
<include name="features/**" />
<include name="plugins/**" />
<include name="artifacts.jar" />
<include name="content.jar" />
</fileset>
</delete>
<!-- Prepare Buckminster -->
<cleandir dir="${buckminster.output.root}" />
<cleandir dir="${buckminster.temp.root}" />
<!-- Perform Buckminster -->
<buckminster command="perform">
<cmdargs>
<arg value="@{feature}#site.p2" />
</cmdargs>
</buckminster>
<cleandir dir="${buckminster.temp.root}" mkdir="false" />
<!-- Determine site.p2 directory -->
<pathconvert property="@{feature}.dir">
<dirset dir="${buckminster.output.root}">
<filename name="@{feature}_*-eclipse.feature/site.p2" />
</dirset>
</pathconvert>
<!-- Move site.p2 contents -->
<copy todir="@{todir}" overwrite="true" includeemptydirs="true" preservelastmodified="true" failonerror="true">
<fileset dir="${@{feature}.dir}">
<include name="**" />
</fileset>
</copy>
</sequential>
</macrodef>
<!-- ============= -->
<!-- Generate Help -->
<!-- ============= -->
<macrodef name="generate.help">
<sequential>
<echo message="" />
<echo message="Generating help center" />
<cleandir dir="${build.root}/help" mkdir="false" />
<copy todir="${build.root}">
<fileset dir="${releng}">
<include name="help/**" />
</fileset>
</copy>
</sequential>
</macrodef>
<!-- ============== -->
<!-- Generate Index -->
<!-- ============== -->
<macrodef name="generate.index">
<sequential>
<echo message="" />
<echo message="Generating repository index" />
<unzip src="${build.root}/content.jar" dest="${build.root}" />
<property name="content.xml" location="${build.root}/content.xml" />
<xslt style="xsl/content2html.xsl" in="${content.xml}" out="${build.root}/index.html" />
<xslt style="xsl/content2xml.xsl" in="${content.xml}" out="${build.root}/index.xml" />
<delete file="${content.xml}" />
</sequential>
</macrodef>
<!-- =================== -->
<!-- Generate Booksmarks -->
<!-- =================== -->
<macrodef name="generate.bookmarks">
<sequential>
<echo message="" />
<echo message="Generating dependency bookmarks" />
<property name="bookmarks.tmp" location="${build.root}/bookmarks.tmp" />
<xslt style="xsl/bom2bookmarks.xsl" in="${build.root}/bom.xml" out="${bookmarks.tmp}" />
<replace file="${bookmarks.tmp}" token="http://dev.eclipse.org" value="file://to-be-removed" />
<replace file="${bookmarks.tmp}" token="file:/home/data/httpd/" value="http://" />
<property name="bookmarks.xml" location="${build.root}/bookmarks.xml" />
<concat destfile="${bookmarks.xml}">
<header filtering="false">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;bookmarks&gt;
</header>
<union>
<sort>
<tokens>
<file file="${bookmarks.tmp}" />
<linetokenizer includedelims="true" />
</tokens>
</sort>
</union>
<filterchain>
<linecontains>
<contains value="http://" />
</linecontains>
</filterchain>
<footer filtering="false">&lt;/bookmarks&gt;
</footer>
</concat>
<delete file="${bookmarks.tmp}" />
</sequential>
</macrodef>
<!-- ================ -->
<!-- Generate Dropins -->
<!-- ================ -->
<macrodef name="generate.dropins">
<sequential>
<echo message="" />
<echo message="Generating dropin archives" />
<property name="temp.dropins" location="${result}/temp.dropins" />
<cleandir dir="${temp.dropins}" />
<copy todir="${temp.dropins}" failonerror="true">
<fileset dir="${features}/org.eclipse.emf.cdo.server.product-feature/rootfiles">
<include name="epl-v10.html" />
<include name="notice.html" />
</fileset>
</copy>
<copy todir="${temp.dropins}/features" flatten="true">
<fileset dir="${buckminster.output.root}">
<include name="*-eclipse.feature/jar/*" />
<include name="*-eclipse.feature/source.jar/*" />
<exclude name="org.eclipse.emf.cdo.site*/**/*" />
<exclude name="org.eclipse.emf.cdo.epp*/**/*" />
<exclude name="org.eclipse.emf.cdo.license*/**/*" />
</fileset>
</copy>
<copy todir="${temp.dropins}/plugins" flatten="true">
<fileset dir="${buckminster.output.root}">
<include name="*-osgi.bundle/jar/*" />
<include name="*-osgi.bundle/source.jar/*" />
</fileset>
</copy>
<mkdir dir="${zips}" />
<zip destfile="${zips}/emf-cdo-${build.qualifier}-Dropins.zip">
<fileset dir="${temp.dropins}">
<include name="**/*" />
</fileset>
</zip>
<echo message=" for use with a &lt;a href=&quot;http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/p2_dropins_format.html&quot;&gt;dropins&lt;/a&gt; folder."
file="${zips}/emf-cdo-${build.qualifier}-Dropins.properties" />
</sequential>
</macrodef>
<!-- ============ -->
<!-- Generate API -->
<!-- ============ -->
<macrodef name="generate.apireports">
<sequential>
<echo message="" />
<echo message="Generating API reports" />
<buckminster command="perform">
<cmdargs>
<arg value="-D" />
<arg value="api.report=${build.root}/api.xml" />
<arg value="org.eclipse.emf.cdo.releng#generate.apireports" />
</cmdargs>
</buckminster>
<echo message="Converting to HTML" />
<java classname="org.eclipse.emf.cdo.releng.Api2Html">
<classpath>
<pathelement location="${releng}/bin/" />
<pathelement location="/opt/public/common/apache-ant-1.7.1/lib/xercesImpl.jar" />
</classpath>
<arg value="${build.root}" />
<arg value="${build.qualifier}" />
<arg value="${plugins}" />
<arg value="${tp}/plugins" />
</java>
<copy file="${releng}/hudson/api.css" todir="${build.root}" overwrite="true" />
</sequential>
</macrodef>
<!-- ================= -->
<!-- Generate Products -->
<!-- ================= -->
<macrodef name="generate.products">
<sequential>
<property name="temp.products" location="${result}/temp.products" />
<cleandir dir="${temp.products}" />
<if>
<not>
<equals arg1="${skip.generate.products.server}" arg2="true" />
</not>
<then>
<generate.product id="org.eclipse.emf.cdo.server.product.tcp_h2" profile="CDOServer" priority="4" />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.products.explorer}" arg2="true" />
</not>
<then>
<generate.product id="org.eclipse.emf.cdo.explorer.product" profile="CDOExplorer" priority="3" />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.products.setup}" arg2="true" />
</not>
<then>
<generate.product id="org.eclipse.emf.cdo.releng.setup.installer.product" profile="Setup" priority="2" />
</then>
</if>
</sequential>
</macrodef>
<!-- ================ -->
<!-- Generate Product -->
<!-- ================ -->
<macrodef name="generate.product">
<attribute name="id" />
<attribute name="profile" />
<attribute name="priority" />
<sequential>
<if>
<not>
<equals arg1="${skip.generate.products.windows}" arg2="true" />
</not>
<then>
<generate.product.platform id="@{id}"
profile="@{profile}"
platform="Windows"
os="win32"
ws="win32"
arch="x86_64"
priority="@{priority}50" />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.products.windows32}" arg2="true" />
</not>
<then>
<generate.product.platform id="@{id}"
profile="@{profile}"
platform="Windows-32bit"
os="win32"
ws="win32"
arch="x86"
priority="@{priority}45" />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.products.linux}" arg2="true" />
</not>
<then>
<generate.product.platform id="@{id}"
profile="@{profile}"
platform="Linux"
os="linux"
ws="gtk"
arch="x86_64"
priority="@{priority}40" />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.products.macos}" arg2="true" />
</not>
<then>
<generate.product.platform id="@{id}"
profile="@{profile}"
platform="Mac"
os="macosx"
ws="cocoa"
arch="x86_64"
priority="@{priority}30"
extension=".app" />
</then>
</if>
</sequential>
</macrodef>
<!-- ========================= -->
<!-- Generate Product Platform -->
<!-- ========================= -->
<macrodef name="generate.product.platform">
<attribute name="id" />
<attribute name="profile" />
<attribute name="platform" />
<attribute name="os" />
<attribute name="ws" />
<attribute name="arch" />
<attribute name="priority" />
<attribute name="extension" default="" />
<sequential>
<if>
<or>
<not>
<isset property="platform" />
</not>
<equals arg1="${platform}" arg2="@{platform}" />
</or>
<then>
<echo message="" />
<echo message="Generating @{profile} for @{platform}" />
<mkdir dir="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}" />
<eclipse app="director">
<properties>
<sysproperty key="org.eclipse.update.jarprocessor.pack200" value="/shared/common/jdk1.6.0-latest/bin" />
<sysproperty key="eclipse.p2.mirrors" value="false" />
<sysproperty key="eclipse.p2.MD5Check" value="false" />
</properties>
<args>
<arg value="-r" />
<arg value="file:${build.root}" />
<arg value="-r" />
<arg value="http://download.eclipse.org/releases/${train}" />
<arg value="-r" />
<arg value="http://download.eclipse.org/releases/${train.previous}" />
<arg value="-r" />
<arg value="http://download.eclipse.org/eclipse/updates/${eclipse}" />
<arg value="-r" />
<arg value="http://download.eclipse.org/eclipse/updates/${eclipse}-I-builds" />
<arg value="-d" />
<arg value="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}" />
<arg value="-p" />
<arg value="@{profile}" />
<arg value="-profileProperties" />
<arg value="org.eclipse.update.install.features=true" />
<arg value="-i" />
<arg value="@{id}" />
<arg value="-p2.os" />
<arg value="@{os}" />
<arg value="-p2.ws" />
<arg value="@{ws}" />
<arg value="-p2.arch" />
<arg value="@{arch}" />
<arg value="-roaming" />
<arg value="-purgeHistory" />
</args>
</eclipse>
<delete includeemptydirs="true" failonerror="false" quiet="true">
<fileset dir="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}">
<include name="readme/**" />
<include name="artifacts.xml" />
<include name="launcher.exe" />
<include name="eclipsec.exe" />
</fileset>
</delete>
<if>
<equals arg1="${build.type}" arg2="N" />
<then>
<if>
<available file="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}/setup-eclipse.ini" />
<then>
<echo file="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}/setup-eclipse.ini" message="-Dreleng.url=${env.JOB_URL}lastSuccessfulBuild/artifact" append="true" />
<replaceregexp file="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}/setup-eclipse.ini" match="-Dreleng.url=https://" replace="-Dreleng.url=http://" byline="true" />
</then>
</if>
<if>
<available file="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}/Contents/MacOS/@{profile}-eclipse.ini" />
<then>
<echo file="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}/Contents/MacOS/@{profile}-eclipse.ini" message="-Dreleng.url=${env.JOB_URL}lastSuccessfulBuild/artifact" append="true" />
<replaceregexp file="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}/Contents/MacOS/@{profile}-eclipse.ini" match="-Dreleng.url=https://" replace="-Dreleng.url=http://" byline="true" />
</then>
</if>
</then>
</if>
<!--
<copy todir="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}" failonerror="true">
<fileset dir="${features}/org.eclipse.emf.cdo.server.product-feature/rootfiles">
<include name="epl-v10.html" />
<include name="notice.html" />
</fileset>
</copy>
-->
<echo message="build = ${build.qualifier}" file="${temp.products}/@{profile}-@{platform}/@{profile}@{extension}/version.txt" />
<mkdir dir="${zips}" />
<zip destfile="${zips}/@{profile}-@{platform}.zip" >
<zipfileset filemode="755" dir="${temp.products}/@{profile}-@{platform}" includes="@{profile}@{extension}/Contents/MacOS/*-eclipse" />
<zipfileset filemode="755" dir="${temp.products}/@{profile}-@{platform}" includes="@{profile}@{extension}/*-eclipse" />
<zipfileset dir="${temp.products}/@{profile}-@{platform}">
<include name="@{profile}@{extension}/**" />
<exclude name="@{profile}@{extension}/Contents/MacOS/*-eclipse" />
<exclude name="@{profile}@{extension}/*-eclipse" />
</zipfileset>
</zip>
<echo message="description=for execution on @{platform}.${line.separator}priority=@{priority}${line.separator}build=${build.qualifier}"
file="${zips}/@{profile}-@{platform}.properties" />
</then>
</if>
</sequential>
</macrodef>
<!-- ==================== -->
<!-- Check Commit Message -->
<!-- ==================== -->
<target name="check.commit.msg" if="GERRIT_CHANGE_SUBJECT">
<condition property="commit.msg.ok" value="true">
<matches pattern="^\[[1-9][0-9]*\] .*$" string="${GERRIT_CHANGE_SUBJECT}"/>
</condition>
<fail message="The commit message is not of the form '[bug-id] bug-subject'." unless="commit.msg.ok"/>
</target>
<!-- =========== -->
<!-- Init Hudson -->
<!-- =========== -->
<target name="init.hudson" if="env.HUDSON_URL" depends="check.commit.msg">
<property name="build.root" value="${env.WORKSPACE}" />
<property name="build.location" value="hudson" />
<property name="build.timestamp" value="${env.BUILD_ID}" />
<property name="loglevel" value="${env.LOG_LEVEL}" />
<property name="jarprocessor.dir" value="${env.org.eclipse.update.jarprocessor.pack200}" />
<property name="p2.mirrors" value="false" />
<property name="generate.products" value="${env.GENERATE_PRODUCTS}" />
<!-- skip.generate.products -->
<condition property="skip.generate.products" value="false" else="true">
<equals arg1="${env.GENERATE_PRODUCTS}" arg2="true" />
</condition>
<!-- build.trigger -->
<if>
<not>
<isset property="build.trigger" />
</not>
<then>
<xmlproperty keeproot="false">
<url url="${env.BUILD_URL}/api/xml?tree=actions[causes[shortDescription]]" />
</xmlproperty>
<loadresource property="build.trigger">
<propertyresource name="action.cause.shortDescription" />
<filterchain>
<replaceregex pattern="^Triggered by " replace="" />
<replaceregex pattern="^Gerrit: .*" replace="gerrit" />
<replaceregex pattern="^Started by " replace="" />
<replaceregex pattern="^Gestartet durch " replace="" />
<replaceregex pattern="Benutzer" replace="user" />
</filterchain>
</loadresource>
</then>
</if>
<!-- build.type -->
<if>
<equals arg1="${env.BUILD_TYPE}" arg2="&lt;default&gt;" />
<then>
<condition property="build.type" value="${weekly}" else="N">
<equals arg1="${build.trigger}" arg2="timer" />
</condition>
</then>
<else>
<property name="build.type" value="${env.BUILD_TYPE}" />
</else>
</if>
<!-- site.signing -->
<condition property="site.signing" value="true" else="false">
<and>
<not>
<equals arg1="${build.type}" arg2="N" />
</not>
<or>
<equals arg1="${env.HUDSON_URL}" arg2="https://hudson.eclipse.org/cdo/" />
<equals arg1="${env.HUDSON_URL}" arg2="https://hudson.eclipse.org/hudson/" />
</or>
</and>
</condition>
<!-- eclipse.staging.area -->
<if>
<equals arg1="${site.signing}" arg2="true" />
<then>
<property name="eclipse.staging.area" value="/shared/download-staging.priv/modeling/emf/cdo/${env.JOB_NAME}" />
</then>
</if>
</target>
<!-- ========== -->
<!-- Init Local -->
<!-- ========== -->
<target name="init.local" unless="env.HUDSON_URL">
<fail unless="build.root" message="The property 'build.root' must be defined in a 'local.properties' file" />
<property name="build.location" value="local" />
<property name="build.trigger" value="manual" />
<property name="site.signing" value="false" />
<property name="git.clone" value="${build.root}/git" />
<!-- build.timestamp -->
<tstamp>
<format property="build.timestamp" pattern="yyyy-MM-dd_HH-mm-ss" />
</tstamp>
<!-- git.clone -->
<if>
<and>
<equals arg1="${keep.git}" arg2="true" />
<available file="${git.clone}" type="dir" />
</and>
<then>
<echo message="Keeping Git clone" />
</then>
<else>
<echo message="Copying Git clone from ${original.git.dir}" />
<cleandir dir="${git.clone}" />
<copy todir="${git.clone}">
<fileset dir="${original.git.dir}" defaultexcludes="false">
<exclude name="**/*.class" />
</fileset>
</copy>
</else>
</if>
</target>
<!-- =============== -->
<!-- Init Properties -->
<!-- =============== -->
<target name="init.properties" depends="init.hudson,init.local">
<condition property="no.proxy" value="${env.no_proxy}, dev.eclipse.org" else="dev.eclipse.org">
<isset property="env.no_proxy" />
</condition>
<property name="git.clone" location="${build.root}/git" />
<property name="features" location="${git.clone}/features" />
<property name="plugins" location="${git.clone}/plugins" />
<property name="releng" location="${plugins}/org.eclipse.emf.cdo.releng" />
<property name="test.report" location="${build.root}/test-report.xml" />
<property name="tools" location="${build.root}/tools" />
<property name="zips" location="${build.root}/zips" />
<property name="result" location="${build.root}/result" />
<property name="ws" location="${result}/ws" />
<property name="tp" location="${result}/tp" />
<property name="buckminster.output.root" location="${result}/output" />
<property name="buckminster.temp.root" location="${result}/temp" />
<!-- build.qualifier -->
<tempfile property="build.qualifier.tmp"
destdir="${java.io.tmpdir}"
prefix="build-qualifier-"
suffix=".tmp"
deleteonexit="true" />
<echo message="build.qualifier.date=${build.timestamp}" file="${build.qualifier.tmp}" />
<replaceregexp file="${build.qualifier.tmp}">
<regexp pattern="([0-9]*)-([0-9]*)-([0-9]*)_([0-9]*)-([0-9]*)-([0-9]*)" />
<substitution expression="\1\2\3-\4\5" />
</replaceregexp >
<property file="${build.qualifier.tmp}" />
<property name="build.qualifier" value="${build.type}${build.qualifier.date}" />
<property name="build.version" value="v${build.qualifier.date}" />
<!-- build-info.xml -->
<echoxml file="${build.root}/build-info.xml">
<build stream="${stream}"
branch="${branch}"
train="${train}"
eclipse="${eclipse}"
emf="${emf}"
type="${build.type}"
timestamp="${build.timestamp}"
qualifier="${build.qualifier}"
trigger="${build.trigger}"
hudson="${env.HUDSON_URL}"
revision="${env.GIT_COMMIT}"
job="${env.JOB_NAME}"
number="${env.BUILD_NUMBER}" />
</echoxml>
<!-- Echo -->
<echo message="stream = ${stream}" />
<echo message="branch = ${branch}" />
<echo message="train = ${train}" />
<echo message="build.type = ${build.type}" />
<echo message="build.location = ${build.location}" />
<echo message="build.trigger = ${build.trigger}" />
<echo message="build.timestamp = ${build.timestamp}" />
<echo message="build.qualifier = ${build.qualifier}" />
<echo message="site.signing = ${site.signing}" />
</target>
<!-- ========== -->
<!-- Init Tools -->
<!-- ========== -->
<target name="init.tools" depends="init.properties">
<if>
<and>
<equals arg1="${keep.tools}" arg2="true" />
<available file="${tools}/director" type="dir" />
<available file="${tools}/buckminster" type="dir" />
</and>
<then>
<echo message="Keeping tool installation" />
</then>
<else>
<!-- Delete existing tool installations -->
<delete includeemptydirs="true" failonerror="false">
<fileset dir="${tools}" defaultexcludes="false">
<include name="director/**" />
<include name="buckminster/**" />
</fileset>
</delete>
<!-- Install director -->
<echo message="" />
<echo message="Installing director" />
<tempfile destdir="${java.io.tmpdir}"
prefix="director-"
suffix=".zip"
property="director.zip"
deleteonexit="true" />
<get src="http://download.eclipse.org/tools/buckminster/products/director_latest.zip" dest="${director.zip}" />
<mkdir dir="${tools}" />
<unzip src="${director.zip}" dest="${tools}" />
<delete file="${director.zip}" />
<!-- Install buckminster -->
<echo message="" />
<echo message="Installing buckminster" />
<eclipse app="director">
<properties>
<sysproperty key="org.eclipse.update.jarprocessor.pack200" value="/shared/common/jdk1.6.0-latest/bin" />
<sysproperty key="eclipse.p2.mirrors" value="false" />
<sysproperty key="eclipse.p2.MD5Check" value="false" />
</properties>
<args>
<arg value="-r" />
<arg value="http://download.eclipse.org/tools/buckminster/headless-4.3" />
<arg value="-r" />
<arg value="http://download.eclipse.org/releases/kepler/201402280900" />
<arg value="-d" />
<arg value="${tools}/buckminster" />
<arg value="-p" />
<arg value="Buckminster" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.cmdline.product" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.core.headless.feature.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.pde.headless.feature.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.git.headless.feature.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.ant.launching" />
<arg value="-i" />
<arg value="org.eclipse.pde.api.tools.ee.feature.feature.group" />
</args>
</eclipse>
<!--
<eclipse app="director">
<properties>
<sysproperty key="org.eclipse.update.jarprocessor.pack200" value="/shared/common/jdk1.6.0-latest/bin" />
<sysproperty key="eclipse.p2.mirrors" value="false" />
<sysproperty key="eclipse.p2.MD5Check" value="false" />
</properties>
<args>
<arg value="-r" />
<arg value="http://download.eclipse.org/modeling/emf/cdo/updates/integration" />
<arg value="-d" />
<arg value="${tools}/buckminster" />
<arg value="-p" />
<arg value="Buckminster" />
<arg value="-i" />
<arg value="org.eclipse.emf.cdo.releng.version.headless.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.emf.cdo.releng.apireports.feature.group" />
</args>
</eclipse>
-->
<!-- See http://wiki.eclipse.org/Hudson#Configuring_a_proxy_for_the_p2_director -->
<copy file="${releng}/${build.location}/org.eclipse.core.net.prefs"
todir="${tools}/buckminster/configuration/.settings"
overwrite="true" />
</else>
</if>
</target>
<!-- ========= -->
<!-- Provision -->
<!-- ========= -->
<target name="provision" depends="init.tools" description="Imports projects and binaries">
<if>
<not>
<equals arg1="${skip.provision}" arg2="true" />
</not>
<then>
<!-- Cleanup build.root -->
<delete failonerror="false" includeemptydirs="true">
<fileset dir="${build.root}" defaultexcludes="false">
<include name="zips/**" />
<include name="*.css" />
<include name="*.html" />
<include name="*.xml" />
<include name="*.log" />
<include name="*.txt" />
<exclude name="build-info.xml" />
</fileset>
</delete>
<!-- Test Report -->
<copy file="${releng}/hudson/test-report-empty.xml" tofile="${test.report}" overwrite="true" verbose="true" />
<!-- Workspace -->
<echo message="Initializing workspace" />
<delete includeemptydirs="true" failonerror="false">
<fileset dir="${result}" defaultexcludes="false">
<include name="ws/**" />
<include name="*.properties" />
</fileset>
</delete>
<mkdir dir="${result}" />
<unzip dest="${ws}" src="${releng}/hudson/workspace.zip" />
<!-- API Baseline -->
<if>
<equals arg1="${build.location}" arg2="local" />
<then>
<echo message="Using local baseline ${baseline.dir}" />
<replaceregexp file="${releng}/hudson/api_baseline.xml"
match="path=&quot;[^&quot;]+&quot;"
replace="path=&quot;${baseline.dir}&quot;" />
</then>
</if>
<copy file="${releng}/hudson/api_baseline.xml" tofile="${releng}/hudson/api_baseline.target" verbose="true" />
<!-- Target Platform -->
<if>
<and>
<equals arg1="${keep.tp}" arg2="true" />
<available file="${tp}" type="dir" />
</and>
<then>
<echo message="Keeping target platform ${tp}" />
</then>
<else>
<echo message="Purging target platform ${tp}" />
<delete failonerror="false" includeemptydirs="true">
<fileset dir="${result}" defaultexcludes="false">
<include name="tp/**" />
</fileset>
</delete>
</else>
</if>
<echo message="Importing binaries into ${tp}" />
<mkdir dir="${tp}" />
<!-- Import MSpec -->
<echo message="Importing projects into ${ws}" />
<buckminster command="setpref">
<cmdargs>
<arg value="maxParallelResolutions=1" />
</cmdargs>
</buckminster>
<buckminster command="import">
<cmdargs>
<arg value="-B" />
<arg value="${build.root}/bom.xml" />
<arg value="-P" />
<arg value="${basedir}/build.properties" />
<!-- Last argument: -->
<arg value="${basedir}/build.mspec" />
</cmdargs>
</buckminster>
<echo message="" />
<echo message="Setting API baseline" />
<buckminster command="addbaseline">
<cmdargs>
<arg value="-A" />
<arg value="CDO Baseline" />
</cmdargs>
</buckminster>
<replace.product.version feature="org.eclipse.emf.cdo.explorer.product" profile="CDOExplorer" version="${build.version}" />
<replace.product.version feature="org.eclipse.emf.cdo.server.product" profile="CDOServer" version="${build.version}" />
<replace.product.version feature="org.eclipse.emf.cdo.releng.setup.installer" profile="Setup" version="${build.version}" />
</then>
</if>
</target>
<!-- ===== -->
<!-- Build -->
<!-- ===== -->
<target name="build" depends="provision" description="Builds all projects and generates build-infos.xml">
<if>
<not>
<equals arg1="${skip.build}" arg2="true" />
</not>
<then>
<echo message="Building all projects in workspace ${ws}" />
<buckminster command="build">
<cmdargs>
<arg value="--thorough" />
<arg value="--logfile" />
<arg value="${build.root}/build-log.txt" />
</cmdargs>
</buckminster>
<delete failonerror="false" includeemptydirs="true">
<fileset dir="${plugins}">
<exclude name="org.eclipse.emf.cdo.releng.doc/**" />
<include name="*.doc/bin/**" />
<include name="*.help/bin/**" />
</fileset>
</delete>
</then>
</if>
</target>
<!-- ==== -->
<!-- Test -->
<!-- ==== -->
<target name="test" depends="build" description="Runs the tests">
<if>
<equals arg1="${skip.test}" arg2="true" />
<then>
<echo message="Skipping test" />
</then>
<else>
<condition property="launch.config"
value="org.eclipse.emf.cdo.tests.all/CDO GerritTests"
else="org.eclipse.emf.cdo.tests.db/CDO AllTests (H2 ALL)">
<isset property="GERRIT_CHANGE_ID" />
</condition>
<echo message="Running ${launch.config}" />
<buckminster command="junit">
<cmdargs>
<arg value="-l" />
<arg value="${launch.config}.launch" />
<arg value="-o" />
<arg value="${test.report}" />
<arg value="--terseXML" />
<arg value="--flatXML" />
</cmdargs>
</buckminster>
</else>
</if>
</target>
<!-- ======== -->
<!-- Generate -->
<!-- ======== -->
<target name="generate" depends="build" description="Generates the site and other artifacts">
<if>
<or>
<isset property="GERRIT_CHANGE_ID" />
<equals arg1="${skip.generate}" arg2="true" />
</or>
<then>
<echo message="Skipping generate" />
</then>
<else>
<if>
<not>
<equals arg1="${skip.generate.site}" arg2="true" />
</not>
<then>
<generate.site feature="org.eclipse.emf.cdo.site" />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.help}" arg2="true" />
</not>
<then>
<generate.help />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.index}" arg2="true" />
</not>
<then>
<generate.index />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.bookmarks}" arg2="true" />
</not>
<then>
<generate.bookmarks />
</then>
</if>
<if>
<not>
<equals arg1="${skip.generate.dropins}" arg2="true" />
</not>
<then>
<generate.dropins />
</then>
</if>
<!--
<if>
<not>
<equals arg1="${skip.generate.apireports}" arg2="true" />
</not>
<then>
<generate.apireports />
</then>
</if>
-->
<if>
<not>
<equals arg1="${skip.generate.products}" arg2="true" />
</not>
<then>
<generate.products />
</then>
</if>
</else>
</if>
</target>
<target name="generate.products.only" depends="init.properties" >
<generate.products/>
</target>
<!-- === -->
<!-- All -->
<!-- === -->
<target name="all" depends="test,generate" description="Runs the tests and generates the site and other artifacts" />
</project>