<?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="groovy-local-ast-transformation-example" default="compile-transform">

    <!-- necessary groovy jars are assumed to be on your classpath. -->
    <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" />
    
    
    <target name="init" description="cleanup old class files">
        <delete dir="examples"/>
    </target>

    <target name="compile-transform" depends="init" description="Compiles the AST Transformation">
    
        <groovyc destdir="."
                srcdir="."
                includes="LoggingASTTransformation.groovy,WithLogging.groovy" 
                listfiles="true">
        </groovyc>
        
        <echo>You can now run "groovy LoggingExample.groovy" to see that the transformation worked.</echo>
    </target>

</project>

