<?xml version="1.0" encoding="UTF-8"?>
<!--
  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="Marvin TestClient" default="help" basedir=".">
    <description>
        This build file contains simple targets that 
        - build
        - package
        - distribute 
        the Marvin test client written in python
    </description>

    <dirname property="base.dir" file="${ant.file.Cloud Stack}/.." />
    <property name="build.dir" location="${base.dir}/build" />

    <import file="${build.dir}/build-cloud.xml" optional="false" />
    <import file="${build.dir}/developer.xml" optional="false" />

    <!-- directories for the test client code compilation-->
    <property name="dist.dir" location="${base.dir}/dist" />
    <property name="marvin.dir" location="${base.dir}/tools/marvin" />
    <property name="marvin.dist.dir" location="${base.dir}/tools/marvin/dist" />
    <property name="marvin.src.dir" location="${base.dir}/tools/marvin/marvin" />

    <target name="build-marvin" depends="build-apidocs" description="generates the cloudstackAPIs for marvin">
        <echo message="Generating Marvin API Classes"/>
        <exec dir="${marvin.src.dir}" executable="python" failonerror="true">
            <arg value="codegenerator.py" />
            <arg value="-s" />
            <arg value="${dist.dir}/commands.xml" />
        </exec>
        <echo message="API classes @ ${marvin.src.dir}/cloudstackAPI"/>
    </target>

    <target name="package-marvin" depends="build-marvin" description="create a distributable tarball of Marvin">
        <echo message="Packaging Marvin"/>
        <exec dir="${marvin.dir}" executable="python" failonerror="true">
            <arg value="setup.py" />
            <arg value="sdist" />
        </exec>
        <echo message="distributable tarball at: ${marvin.dist.dir}/Marvin-*.tar.gz"/>
    </target>

    <target name="install-marvin" depends="package-marvin" description="installs marvin on the local machine">
        <echo message="Uninstalling Marvin" />
        <exec dir="${marvin.dist.dir}" executable="pip">
            <arg line="uninstall -y marvin"/>
        </exec>
        <echo message="Installing Marvin" />
        <exec dir="${marvin.dist.dir}" executable="pip">
            <arg value="install" />
            <arg value="Marvin-0.1.0.tar.gz" />
        </exec>
    </target>
</project>
