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

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

    <goal name="default">
        <attainGoal name="jar:install"/>
    </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.api.jarfile}"/>
        <property name="jdoutil" value="${jdo.jdoutil.jarfile}"/>
        <property name="jdomodel" value="${jdo.jdomodel.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.api.jarfile}"/>
        <property name="jdoutil" value="${jdo.jdoutil.jarfile}"/>
        <property name="jdomodel" value="${jdo.jdomodel.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.api.jarfile}"/>
        <property name="jdoutil" value="${jdo.jdoutil.jarfile}"/>
        <property name="jdomodel" value="${jdo.jdomodel.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>
