<?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="ide/db" default="build" basedir=".">

    <import file="../../nbbuild/templates/projectized.xml"/>

    <target name="init" depends="projectized.init">
        <condition property="nbjdk.bootclasspath.available">
            <isset property="nbjdk.bootclasspath"/>
        </condition>
        <available property="have-jdbc-40" classname="java.sql.RowIdLifetime" classpath="${nbjdk.bootclasspath}" ignoresystemclasses="${nbjdk.bootclasspath.available}"/>
    </target>

    <target name="compile-lib" depends="init,fake-jdbc-40">
        <mkdir dir="${build.dir}/lib-classes" />
        <javac release="8" srcdir="libsrc" destdir="${build.dir}/lib-classes" deprecation="${build.compiler.deprecation}" debug="${build.compiler.debug}">
            <classpath>
                <pathelement path="${lib.cp}"/>
            </classpath>
        </javac>
        <copy todir="${build.dir}/lib-classes">
            <fileset dir="libsrc" excludes="${jar-excludes}" />
        </copy>
    </target>

    <target name="fake-jdbc-40" unless="have-jdbc-40">
        <mkdir dir="${fake-jdbc-40.src}/java/sql"/>
        <echo file="${fake-jdbc-40.src}/java/sql/RowIdLifetime.java">
            package java.sql;

            public class RowIdLifetime {}
        </echo>
        <mkdir dir="${fake-jdbc-40.build}"/>
        <javac release="8" srcdir="${fake-jdbc-40.src}" destdir="${fake-jdbc-40.build}"/>
    </target>

    <target name="jar-lib" depends="compile-lib">
        <mkdir dir="${cluster}/modules/ext" />
        <nb-ext-jar jarfile="${cluster}/modules/ext/ddl.jar" compress="false">
            <fileset dir="${build.dir}/lib-classes" />
        </nb-ext-jar>
    </target>

    <target name="compile" depends="jar-lib, projectized-common.compile" />
</project>
