<?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

       http://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.
-->
<project name="launch-build" default="launch">

    <description>
        Build file be able to launch the boostrap build of Ant on every supported platform
    </description>
    
    <property name="default-args" value="allclean test -Dignore.tests.failed=true -Doptional.jars.whenmanifestonly=skip" />
    <condition property="args" value="${default-args} -Djenkins=t">
      <isset property="jenkins"/>
    </condition>
    <property name="args" value="${default-args}" />

    <condition property="launch.cmd" value="${basedir}/build.sh">
        <os family="unix" />
    </condition>
    <condition property="launch.cmd" value="${basedir}/build.bat">
        <os family="windows" />
    </condition>

    <target name="launch">
        <fail unless="launch.cmd" message="Unsupported build platform" />
        <echo message="Launching ${launch.cmd} ${args}" />
        <exec executable="${launch.cmd}" failonerror="true">
            <arg line="${args}" />
        </exec>
    </target>
</project>
