<?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="OFBiz Special Purpose Applications Build" default="build" basedir=".">
    <filelist id="application-builds" dir="."
        files="pos/build.xml, hhfacility/build.xml, assetmaint/build.xml"/>

    <!-- ================================================================== -->
    <!-- Removes all created files and directories                          -->
    <!-- ================================================================== -->

    <target name="refresh">
        <antcall target="clean-all"/>
        <antcall target="build"/>
    </target>

    <target name="clean-all">
        <antcall target="clean-xtra"/>
        <antcall target="clean"/>
    </target>

    <target name="clean-xtra" depends="">
        <delete verbose="on">
            <fileset dir="." includes="**/.nbattrs,**/*~,**/.#*,**/.DS_Store,**/*.rej,**/*.orig"/>
        </delete>
    </target>

    <target name="tests">
    </target>

    <target name="clean">
        <subant target="clean">
            <filelist refid="application-builds"/>
        </subant>
        <delete file="ofbiz.jar"/>
        <echo message="[clean] ========== Done Cleaning Applications =========="/>
    </target>

    <!-- ================================================================== -->
    <!-- Build Components                                                   -->
    <!-- ================================================================== -->

    <target name="build" depends="">
        <echo message="[build] ========== Start Building Applications (Compile) =========="/>

        <subant inheritall="false">
            <filelist refid="application-builds"/>
        </subant>

        <echo message="[build] ========== Done Building Applications (Compile) =========="/>
    </target>

    <!-- ================================================================== -->
    <!-- Build JavaDocs                                                     -->
    <!-- ================================================================== -->

    <target name="docs" depends="">
        <echo message="[docs] ========== Start Building Applications (JavaDoc) =========="/>

        <subant target="docs">
            <filelist refid="application-builds"/>
        </subant>

        <echo message="[docs] ========== Done Building Applications (JavaDocs) =========="/>
    </target>
</project>
