<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<!--
Interim build-snippet.

The original of this snippet is maintained in the antlib-common project. 
-->
<project default="bootstrap" xmlns:unless="ant:unless" xmlns:if="ant:if">

  <!-- Which released version of AntUnit to use, where to download, where to store. -->
  <property name="antunit.version" value="1.3"/>
  <property name="antunit.url" value="https://repo1.maven.org/maven2/org/apache/ant/ant-antunit/${antunit.version}/ant-antunit-${antunit.version}.jar"/>
  <property name="antunit.file" value="ant-antunit.jar"/>

  <!-- Skip unnecessary tasks. -->
  <available property="antunit.present" file="${antunit.file}"/>

  <target name="update-prepare-script">
    <echo>updating prepare.xml</echo>
    <copy file="common/prepare.xml" tofile="prepare.xml"/>
  </target>

  <target name="get-antunit" unless="antunit.present">
    <echo>updating AntUnit</echo>
    <get src="${antunit.url}" dest="${antunit.file}" usetimestamp="true"/>
  </target>
  
  
  <!-- Use a 'bootstrap-phase' so changes of the preparation could be catched in the same CI-cycle. -->
  <target name="bootstrap" 
          depends="update-prepare-script"
          description="Bootstraps the preparation script by updating this script from common."
  >
    <echo>Bootstrap done. Next step:</echo> 
    <echo>  ant -f prepare.xml prepare</echo>
  </target>
          
  <target name="prepare" 
          depends="get-antunit"
          description="Prepare the build by 'preparing' the infrastructure"
  >
    <echo>Preparation done. Next steps:</echo>
    <echo> ant clean distribution</echo>
    <echo> ant -lib ${antunit.file} -lib build/lib test</echo>
  </target>

</project>
