<?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="OFBiz - SQL" default="jar" basedir=".">
    <import file="../../common.xml"/>

    <!-- ================================================================== -->
    <!-- Initialization of all property settings                            -->
    <!-- ================================================================== -->

    <property name="desc" value="SQL Component"/>
    <property name="name" value="ofbiz-sql"/>
    <property name="ofbiz.home.dir" value="../.."/>

    <path id="local.class.path">
        <fileset dir="../base/lib" includes="*.jar"/>
        <fileset dir="../base/build/lib" includes="*.jar"/>
    </path>
    <patternset id="src-dirs">
        <include name="build/gen-src/javacc"/>
        <include name="build/gen-src/jjtree"/>
    </patternset>
    <path id="test.class.path">
        <path refid="local.class.path"/>
       <fileset dir="../base/lib" includes="*.jar"/>
       <fileset dir="../base/lib/commons" includes="*.jar"/>
       <fileset dir="../base/lib/j2eespecs" includes="*.jar"/>
       <pathelement location="config"/>
       <pathelement location="src"/>
    </path>
    <filelist id="test.classes" dir="${src.dir}">
        <file name="org/ofbiz/sql/test/ValuesTest.java"/>
        <file name="org/ofbiz/sql/test/ConditionsTest.java"/>
        <file name="org/ofbiz/sql/test/SelectTest.java"/>
        <file name="org/ofbiz/sql/test/SQLTest.java"/>
    </filelist>

    <!-- ================================================================== -->
    <!-- Compilation of the source files                                                                                                                         -->
    <!-- ================================================================== -->

    <target name="gen-src">
        <ofbiz-javacc dir="org/ofbiz/sql" file="Parser"/>
    </target>

    <target name="classes" depends="prepare,gen-src">
        <javac16/>
    </target>

    <target name="jar" depends="classes">
        <main-jar/>
        <test-jar/>
    </target>

    <!-- ================================================================== -->
    <!-- Build JavaDoc                                                      -->
    <!-- ================================================================== -->

    <target name="docs" depends="prepare-docs">
        <default-javadoc>
            <fileset dir="build/gen-src/javacc" defaultexcludes="yes">
                <patternset refid="src.inc.set"/>
                <patternset refid="src.exc.set"/>
            </fileset>
            <fileset dir="${src.dir}" defaultexcludes="yes">
                <patternset refid="src.inc.set"/>
                <patternset refid="src.exc.set"/>
            </fileset>
        </default-javadoc>
    </target>
</project>
