<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright 2005 The Apache Software Foundation

    Licensed 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 default="default"
    xmlns:j="jelly:core"
    xmlns:ant="jelly:ant"
    xmlns:maven="jelly:maven"
    >

    <!-- ==================== -->
    <!-- Default Global Goals -->
    <!-- ==================== -->

    <goal name="default">
        <attainGoal name="jar:install-snapshot"/>
    </goal>

    <goal name="build">
        <attainGoal name="default"/>
    </goal>

    <goal name="rebuild">
        <attainGoal name="clean"/>
        <attainGoal name="build"/>
    </goal>

    <postGoal name="clean:clean">
        <ant dir="${basedir}/test/sempdept" target="clean" inheritAll="false"/>
    </postGoal>

    <goal name="clobber" prereqs="clean">
        <delete>
            <fileset dir="." defaultexcludes="no" includes="**/*~"/>
        </delete>
        <ant dir="${basedir}/test/sempdept" target="mrproper" inheritAll="false"/>
    </goal>

    <!-- ================== -->
    <!-- Running test cases -->
    <!-- ================== -->

    <goal name="runtest">
        <attainGoal name="Generator"/>
        <attainGoal name="Enhancer"/>
    </goal>

    <!-- Generator tests 
    -->
    
    <goal name="Generator">
      <ant dir="${basedir}/test/sempdept" antfile="build.xml" target="all_gen" inheritAll="false">
        <property name="jdoapi" value="${jdo.jdoapi.jarfile}"/>
        <property name="jdocore" value="${jdo.jdocore.jarfile}"/>
        <property name="jdoenhancer" value="${maven.build.dir}/classes"/>
        <property name="logging" value="${logging.jarfile}"/>
        <property name="xmlparser" value="${xmlparser}"/>
        <property name="verbose" value="${verbose}"/>
      </ant>
    </goal>
    
    <!-- Enhancer tests 
    -->
    
    <goal name="Enhancer">
      <ant dir="${basedir}/test/sempdept" antfile="build.xml" target="compile" inheritAll="false">
        <property name="jdoapi" value="${jdo.jdoapi.jarfile}"/>
        <property name="jdocore" value="${jdo.jdocore.jarfile}"/>
        <property name="jdoenhancer" value="${maven.build.dir}/classes"/>
        <property name="logging" value="${logging.jarfile}"/>
        <property name="xmlparser" value="${xmlparser}"/>
        <property name="verbose" value="${verbose}"/>
      </ant>
      <ant dir="${basedir}/test/sempdept" antfile="build.xml" target="all_enh" inheritAll="false">
        <property name="jdoapi" value="${jdo.jdoapi.jarfile}"/>
        <property name="jdocore" value="${jdo.jdocore.jarfile}"/>
        <property name="jdoenhancer" value="${maven.build.dir}/classes"/>
        <property name="logging" value="${logging.jarfile}"/>
        <property name="xmlparser" value="${xmlparser}"/>
        <property name="verbose" value="${verbose}"/>
      </ant>
    </goal>
    
</project>
