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

    <property file="../../../ant.properties"/>
    <import file="${SRC_ROOT}/solenv/ant/aoo-ant.xml"/>
    
    <target name="init-project">

        <property name="jar.classpath" value="ridl.jar jurt.jar ../../lib/ ../bin/"/>
        <property name="jar.manifest" value="${SRC_ROOT}/javaunohelper/util/manifest"/>

        <!-- for creating maven bundles for distribution -->
        <property name="artifact.jar.enabled" value="true"/>
        <property name="javadoc.jar.enabled" value="true"/>
        <property name="javadoc.title" value="&lt;h1&gt;Java UNO Helper&lt;/h1&gt;"/>
        <property name="javadoc.window.title" value="Java UNO Helper"/>
        <property name="source.jar.enabled" value="true"/>
        
        <path id="main.classpath">
            <pathelement location="${OUTDIR}/bin/ridl.jar"/>
            <pathelement location="${OUTDIR}/bin/jurt.jar"/>
            <pathelement location="${OUTDIR}/bin/unoil.jar"/>
        </path>

    </target>

    <!-- custom jar target to create with version number instead of copying gbuild juh.jar -->
    <target name="jar" depends="compile" if="${artifact.jar.enabled}">
        <jar destfile="${jar.dir}/${jar.name}-${aoo.ver}.jar"
             manifest="${jar.manifest}"
             duplicate="fail">
            <manifest>
                <attribute name="Class-Path" value="${jar.classpath}" unless:blank="${jar.classpath}"/>
                <attribute name="Solar-Version" value="${RSCREVISION}"/>
            </manifest>
            <fileset dir="${main.build.dir}"/>
            <!-- Breaks trunk/test/smoketestdoc by packaging different classes with the same name: -->
            <!--            <fileset dir="${idl.build.classes.dir}" erroronmissingdir="false"/> -->
            <include name="**/*.class"/>
            <include name="**/*.properties"/>
            <include name="**/*.css"/>
            <include name="**/*.dtd"/>
            <include name="**/*.form"/>
            <include name="**/*.gif "/>
            <include name="**/*.htm"/>
            <include name="**/*.html"/>
            <include name="**/*.js"/>
            <include name="**/*.mod"/>
            <include name="**/*.sql"/>
            <include name="**/*.xml"/>
            <include name="**/*.xsl"/>
            <include name="**/*.map"/>
        </jar>
    </target>
    
    <!-- TEMP UNTIL WE USE THE ANT BUILT JAR THEN REMOVE TARGET-->
    <!-- custom main has test and copy-artifact-jar removed from depends -->
    <target name="main" depends="jar,jar-javadoc,jar-source"/>
    
</project>

