<!DOCTYPE project [
<!--

    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

  <!ENTITY common SYSTEM "../../../../config/common.xml">
  <!ENTITY testcommon SYSTEM "../../../../config/properties.xml">
]>

<project name="JDBCConnector top level" default="build">
    <property name="pkg.dir" value="com/sun/jdbcra/spi"/>

    &common;
    &testcommon;
    <property file="./build.properties"/>

    <target name="build" depends="compile,assemble" />


    <!-- init. Initialization involves creating publishing directories and
         OS specific targets. -->
    <target name="init" description="${component.name} initialization">
        <tstamp>
            <format property="start.time" pattern="MM/dd/yyyy hh:mm aa"/>
        </tstamp>
        <echo message="Building component ${component.name}"/>
        <mkdir dir="${component.classes.dir}"/>
        <mkdir dir="${component.lib.home}"/>
    </target>
    <!-- compile -->
    <target name="compile" depends="init"
            description="Compile com/sun/* com/iplanet/* sources">
        <!--<echo message="Connector api resides in ${connector-api.jar}"/>-->
        <javac srcdir="${src.dir}"
               destdir="${component.classes.dir}"
               failonerror="true">
            <classpath>
                <fileset dir="${env.S1AS_HOME}/modules">
                    <include name="**/*.jar" />
                </fileset>
            </classpath>
            <include name="com/sun/jdbcra/**"/>
            <include name="com/sun/appserv/**"/>
        </javac>
    </target>

    <target name="all" depends="build"/>

   <target name="assemble">

        <jar jarfile="${component.lib.home}/jdbc.jar"
            basedir="${component.classes.dir}" includes="${pkg.dir}/**/*,
            com/sun/appserv/**/*, com/sun/jdbcra/util/**/*, com/sun/jdbcra/common/**/*"/>

        <copy file="${src.dir}/com/sun/jdbcra/spi/1.4/ra-ds.xml"
                tofile="${component.lib.home}/ra.xml" overwrite="yes">
        </copy>
           <jar jarfile="${component.lib.home}/jdbcra.rar"
                basedir="${component.lib.home}" includes="jdbc.jar">

                   <metainf dir="${component.lib.home}">
                           <include name="ra.xml"/>
                   </metainf>
           </jar>

           <delete file="${component.lib.home}/ra.xml"/>

  </target>

    <target name="clean" description="Clean the build">
        <delete includeEmptyDirs="true" failonerror="false">
            <fileset dir="${component.classes.dir}"/>
            <fileset dir="${component.lib.home}"/>
        </delete>
    </target>

</project>

