<?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="idl" xmlns:if="ant:if" xmlns:unless="ant:unless">

    <dirname property="idl.basedir" file="${ant.file.idl}"/>

    <!-- global properties -->
    <property file="${idl.basedir}/../../ant.properties"/>



    <property name="idl.build.dir" location="${build.base.dir}/idl"/>
    <property name="idl.urd.build.dir" location="${idl.build.dir}/urd"/>
    <property name="idl.rdb.build.dir" location="${idl.build.dir}/rdb"/>
    <property name="idl.classes.build.dir" location="${idl.build.dir}/classes"/>
    <property name="idl.javamaker.flag" location="${idl.build.dir}/idl.javamaker.flag"/>

    <target name="idl">
        <check-idl/>
        <build-idl unless:set="idl.uptodate"/>
    </target>

    <target name="unoprivateapi-cppumaker">
        <property name="idl.cppumaker.flag" location="${unoprivateapi.outdir}/idl.cppumaker.flag"/>
        <check-idl-cppumaker/>
        <build-idl-cppumaker unless:set="idl.cppumaker.uptodate"/>
    </target>

    <macrodef name="check-idl">
        <sequential>
            <local name="idl.files.exist"/>
            <condition property="idl.files.exist">
                <resourcecount refid="idl.files" when="greater" count="0"/>
            </condition>

            <uptodate property="idl.uptodate" targetfile="${idl.javamaker.flag}" if:set="idl.files.exist">
                <srcresources>
                    <resources refid="idl.files"/>
                </srcresources>
            </uptodate>
            <property name="idl.uptodate" value="true" unless:set="idl.files.exist"/>
        </sequential>
    </macrodef>

    <macrodef name="check-idl-cppumaker">
        <sequential>
            <uptodate property="idl.cppumaker.uptodate" targetfile="${idl.cppumaker.flag}">
                <srcresources>
                    <file name="${unoprivateapi.idl}"/>
                </srcresources>
            </uptodate>
        </sequential>
    </macrodef>

    <macrodef name="build-idl">
        <sequential>
            <idlc urdDirectory="${idl.urd.build.dir}">
                <idlFiles>
                    <resources refid="idl.files"/>
                </idlFiles>
            </idlc>
            <regmerge
                urdDirectory="${idl.urd.build.dir}"
                rdbDirectory="${idl.rdb.build.dir}"/>
            <javamaker
                inputRdb="${idl.rdb.build.dir}/registry.rdb"
                outputDirectory="${idl.classes.build.dir}"
                noDependentTypes="true"
                excludes="${OUTDIR}/bin/types.rdb"/>
            <touch file="${idl.javamaker.flag}"/>
        </sequential>
    </macrodef>

    <macrodef name="build-idl-cppumaker">
        <sequential>
            <idlc urdDirectory="${unoprivateapi.outdir}/urd">
                <idlFiles>
                    <file name="${unoprivateapi.idl}"/>
                </idlFiles>
            </idlc>
            <regmerge
                urdDirectory="${unoprivateapi.outdir}/urd"
                rdbDirectory="${unoprivateapi.outdir}/rdb"/>
            <cppumaker
                inputRdb="${unoprivateapi.outdir}/rdb/registry.rdb"
                outputDirectory="${unoprivateapi.outdir}/inc"/>
            <touch file="${idl.cppumaker.flag}"/>
        </sequential>
    </macrodef>

    <macrodef name="idlc">
        <element name="idlFiles"/>
        <attribute name="urdDirectory"/>
        <sequential>
            <mkdir dir="@{urdDirectory}"/>
            <apply executable="${OUTDIR}/bin/idlc" failonerror="true">
                <env key="LD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <env key="DYLD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <arg value="-I${OUTDIR}/idl"/>
                <arg value="-O"/>
                <arg value="@{urdDirectory}"/>
                <arg value="-verbose"/>
                <arg value="-cid"/>
                <arg value="-we"/>
                <resources>
                    <idlFiles/>
                </resources>
            </apply>
        </sequential>
    </macrodef>

    <macrodef name="regmerge">
        <attribute name="urdDirectory"/>
        <attribute name="rdbDirectory"/>
        <sequential>
            <mkdir dir="@{rdbDirectory}"/>
            <delete file="@{rdbDirectory}/registry.rdb"/>
            <apply executable="${OUTDIR}/bin/regmerge" failonerror="true">
                <env key="LD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <env key="DYLD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <arg value="@{rdbDirectory}/registry.rdb"/>
                <arg value="/UCR"/>
                <fileset dir="@{urdDirectory}" includes="**/*.urd"/>
            </apply>
        </sequential>
    </macrodef>

    <macrodef name="javamaker">
        <attribute name="inputRdb"/>
        <attribute name="outputDirectory"/>
        <attribute name="noDependentTypes" default="false"/>
        <attribute name="excludes" default=""/>
        <sequential>
            <mkdir dir="@{outputDirectory}"/>
            <exec executable="${OUTDIR}/bin/javamaker" failonerror="true">
                <env key="LD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <env key="DYLD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <arg value="-O@{outputDirectory}"/>
                <arg value="-BUCR"/>
                <arg value="-nD"
                    if:true="@{noDependentTypes}"/>
                <arg value="@{inputRdb}"/>
                <arg value="-X@{excludes}"
                    unless:blank="@{excludes}"/>
            </exec>
        </sequential>
    </macrodef>

    <macrodef name="cppumaker">
        <attribute name="inputRdb"/>
        <attribute name="outputDirectory"/>
        <sequential>
            <mkdir dir="@{outputDirectory}"/>
            <exec executable="${OUTDIR}/bin/cppumaker" failonerror="true">
                <env key="LD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <env key="DYLD_LIBRARY_PATH" value="${OUTDIR}/lib"/>
                <arg value="-O@{outputDirectory}"/>
                <arg value="-BUCR"/>
                <arg value="-C"/>
                <arg value="@{inputRdb}"/>
                <arg value="${OUTDIR}/bin/udkapi.rdb"/>
            </exec>
        </sequential>
    </macrodef>
</project>

