<!--
Copyright 2004 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 name="Any" default="build">
    <property environment="env"/>

    <path id="Any.path">
        <path refid="xmlbeans.path"/>
        <fileset dir="build/lib" includes="*.jar"/>
        <pathelement path="build/classes"/>
    </path>

    <target name="init">
        <property name="xmlbeans.home" value="${env.XMLBEANS_HOME}"/>
        <echo message="xmlbeans.home: ${xmlbeans.home}"/>

        <!-- check for xmlbeans-*.jar from binary distribution -->
        <pathconvert property="xmlbeans.lib" setonempty="false" pathsep=" ">
            <path><fileset dir="${xmlbeans.home}/libs" includes="xmlbeans-*.jar" /></path>
        </pathconvert>

        <fail message="Set XMLBEANS_HOME in your enviornment." unless="xmlbeans.lib"/>

        <echo message="xmlbeans.lib: ${xmlbeans.lib}"/>

        <path id="xmlbeans.path">
            <fileset dir="${xmlbeans.home}/libs" includes="*.jar"/>
        </path>

        <taskdef name="xmlbean"
            classname="org.apache.xmlbeans.impl.tool.XMLBean"
            classpathref="xmlbeans.path"/>
    </target>

    <!-- ========================== clean ==== -->

    <target name="clean">
        <delete dir="build"/>
    </target>

    <!-- ========================== build ==== -->

    <target name="build" depends="init,schemas.jar,Any.classes">
    </target>

    <target name="schemas.check">
        <uptodate property="schemas.notRequired"
            targetfile="build/lib/schemas.jar">
            <srcfiles dir="schemas" includes="**/*.xsd"/>
        </uptodate>
    </target>

    <target name="schemas.jar" depends="init,schemas.check"
        unless="schemas.notRequired">
        <mkdir dir="build/lib"/>

        <xmlbean schema="schemas"
            destfile="build/lib/schemas.jar"
            srcgendir="build/generated-sources"
            classpathref="xmlbeans.path"
            debug="on"
            />
    </target>

    <target name="Any.classes" depends="init">
        <mkdir dir="build/classes"/>
        <mkdir dir="build/generated-sources"/>

        <pathconvert property="exe" setonempty="false">
            <fileset dir="${env.JAVA_HOME}/bin" includes="javac, javac.exe"/>
        </pathconvert>
        <pathconvert property="exe" setonempty="false">
            <fileset dir="${env.JAVA_HOME}/../bin" includes="javac, javac.exe"/>
        </pathconvert>

        <javac
            destdir="build/classes"
            classpathref="Any.path"
            debug="on"
            source="1.8"
            executable="${exe}"
            fork="yes"
            >
            <src path="src"/>
            <src path="build/generated-sources"/>
        </javac>
    </target>

    <!-- ========================== run ==== -->

    <target name="run" depends="init,build">
        <echo message="============================== running Any"/>
        <java
            classname="org.apache.xmlbeans.samples.anytype.Any"
            classpathref="Any.path"
            fork="true">
            <arg line="xml/any.xml"/>
        </java>
    </target>

    <!-- ========================== test ==== -->

    <target name="test" depends="init,build">
        <echo message="============================== testing Any"/>
        <java
            classname="org.apache.xmlbeans.samples.anytype.AnyTest"
            classpathref="Any.path"
            fork="true">
            <arg line="xml/any.xml"/>
        </java>
    </target>

</project>
