<?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.
  -->
<!--
  Sample ant commands:
  "ant clean"                                 - cleans up
  "ant install"                               - runs the build
  "ant deploy"                                - deploys artifacts in apache m2 snapshots repo
  "ant -Doffline=true clean"                  - offline clean up
  "ant -Doffline=true install"                - offline build
  "ant -Dskip=true install"                   - run the build, but skip the tests
  "ant -Dskip=true install"                   - run the build, but skip the tests
  "ant -Dskip=true deploy"                    - deploys artifacts, but skip the tests
  "ant -Doffline=true -Dskip=true install"    - run the build in the offline and skips the tests
  -->
<project name="axis2_build" default="install">

    <!-- set the property to indicate that JAVA_HOME is set -->
    <target name="cond_check">
        <property environment="env"/>
        <condition property="JAVA_HOME_SET">
            <isset property="env.JAVA_HOME"/>
        </condition>
    </target>

    <!-- fail if JAVA_HOME isn't set, otherwise we don't execute the body -->
    <target name="check_environment" unless="JAVA_HOME_SET" depends="cond_check">
        <fail message="The environment variable JAVA_HOME is not set. Set this variable to the directory where the JDK is installed."/>
    </target>

    <!-- set the property to indicate that MAVEN_HOME is set -->
    <target name="cond_check2">
        <property environment="env"/>
        <condition property="MAVEN_HOME_SET">
            <isset property="env.MAVEN_HOME"/>
        </condition>
    </target>

    <!-- fail if MAVEN_HOME isn't set, otherwise we don't execute the body -->
    <target name="check_environment2" unless="MAVEN_HOME_SET" depends="cond_check2">
        <fail message="The environment variable MAVEN_HOME is not set. Set this variable to the directory where Maven is installed."/>
    </target>

    <!-- initialize properties -->
    <target name="init" depends="check_environment, check_environment2">
        <!--macro for maven -->
        <condition property="maven.executable" value="cmd.exe">
            <os family="windows"/>
        </condition>

        <condition property="maven.line1" value="/c ${env.MAVEN_HOME}/bin/mvn.bat">
            <os family="windows"/>
        </condition>

        <condition property="maven.line2"
                   value="--offline">
            <istrue value="${offline}"/>
        </condition>

        <condition property="maven.line3"
                   value="-Dtest=false">
            <istrue value="${skip}"/>
        </condition>

        <property name="maven.executable" value="mvn"/>
        <property name="maven.line1" value=""/>
        <property name="maven.line2" value=""/>
        <property name="maven.line3" value=""/>

        <presetdef name="mvn">
            <exec failonerror="true" executable="${maven.executable}">
                <env key="MAVEN_TERMINATE_CMD" value="on"/>
                <arg line="${maven.line1}"/>
                <arg line="${maven.line2}"/>
                <arg line="${maven.line3}"/>
            </exec>
        </presetdef>
    </target>

    <target name="clean" depends="init">
        <mvn>
            <arg value="clean"/>
        </mvn>
    </target>

    <target name="install" depends="init">
        <mvn searchpath="true" dir="${basedir}/modules/tool/axis2-aar-maven-plugin" failonerror="true">
            <arg line="install"/>
        </mvn>
        <mvn searchpath="true" dir="${basedir}/modules/tool/axis2-mar-maven-plugin" failonerror="true">
            <arg line="install"/>
        </mvn>
        <mvn searchpath="true" dir="${basedir}" failonerror="true">
            <arg line="-Drelease install"/>
        </mvn>
    </target>

    <target name="deploy" depends="init">
        <mvn searchpath="true" dir="${basedir}/modules/tool/axis2-aar-maven-plugin" failonerror="true">
            <arg line="deploy"/>
        </mvn>
        <mvn searchpath="true" dir="${basedir}/modules/tool/axis2-mar-maven-plugin" failonerror="true">
            <arg line="deploy"/>
        </mvn>
        <mvn searchpath="true" dir="${basedir}" failonerror="true">
            <arg line="-Drelease deploy"/>
        </mvn>
    </target>
</project>

