<!--
* © 2016 and later: Unicode, Inc. and others.
* License & terms of use: http://www.unicode.org/copyright.html#License
*******************************************************************************
* Copyright (C) 2009-2016, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
-->
<project name="common-targets" basedir=".">
    <dirname property="common-targets.dir" file="${ant.file.common-targets}"/>
    <property file="${common-targets.dir}/locations.properties"/>

    <!-- global (top-level) propeties - need locations.properties loaded first -->
    <property file="${global.build-local.properties}"/>
    <property file="${global.build.properties}"/>

    <property file="${common-targets.dir}/common.properties"/>
    <property environment="env"/>

    <!-- common targets -->

    <target name="@clean">
        <delete dir="${out.dir}"/>
    </target>

    <target name="@compile">
        <echo message="build-local:     ${global.build-local.properties}"/>
        <!-- set java 7 bootclasspath to empty if not set -->
        <property name="java7.bootclasspath" value=""/>

        <condition property="javac.bootclasspath" value="${java7.bootclasspath}" else="">
            <equals arg1="${javac.target}" arg2="1.7"/>
        </condition>

        <echo message="--- java compiler arguments ------------------------"/>
        <echo message="source dir:     ${basedir}/${src.dir}"/>
        <echo message="output dir:     ${basedir}/${bin.dir}"/>
        <echo message="bootclasspath:  ${javac.bootclasspath}"/>
        <echo message="classpath:      ${toString:javac.classpathref}"/>
        <echo message="source:         ${javac.source}"/>
        <echo message="target:         ${javac.target}"/>
        <echo message="debug:          ${javac.debug}"/>
        <echo message="encoding:       ${java.src.encoding}"/>
        <echo message="compiler arg:   ${javac.compilerarg}"/>
        <echo message="----------------------------------------------------"/>

        <mkdir dir="${bin.dir}"/>
        <javac
            srcdir="${src.dir}"
            destdir="${bin.dir}"
            bootclasspath="${javac.bootclasspath}"
            classpathref="javac.classpathref"
            source="${javac.source}"
            target="${javac.target}"
            debug="${javac.debug}"
            encoding="${java.src.encoding}"
            includeAntRuntime="no">
            <compilerarg value="${javac.compilerarg}"/>
        </javac>
    </target>

    <target name="@copy">
        <mkdir dir="${bin.dir}"/>
        <copy todir="${bin.dir}">
            <fileset dir="${src.dir}" defaultexcludes="yes">
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>

    <target name="@jar">
        <mkdir dir="${jar.dir}"/>

        <copy file="manifest.stub" todir="${out.dir}">
            <filterset>
                <filter token="SPECVERSION" value="${jar.spec.version}"/>
                <filter token="IMPLVERSION" value="${jar.impl.version}"/>
                <filter token="COPYRIGHT" value="${jar.copyright.info}"/>
                <filter token="EXECENV" value="${jar.exec.env}"/>
            </filterset>
        </copy>

        <jar jarfile="${jar.dir}/${jar.name}" manifest="${out.dir}/manifest.stub" compress="true">
            <fileset dir="${bin.dir}" includes="**/*"/>
            <fileset dir="${shared.dir}/licenses">
                <include name="LICENSE"/>
            </fileset>
        </jar>
    </target>

    <target name="@src-jar">
        <mkdir dir="${jar.dir}"/>
        <jar jarfile="${jar.dir}/${src.jar.name}" compress="true">
            <fileset dir="${src.dir}" includes="**/*.java"/>
            <fileset dir="${shared.dir}/licenses">
                <include name="LICENSE"/>
            </fileset>
        </jar>
    </target>

    <target name="@build-all">
        <antcall target="_all.${ant.project.name}"/>
    </target>

    <target name="@full-locale-names">
        <echo message="Generating ${res.dir}/fullLocaleNames.lst"/>
        <pathconvert pathsep="${line.separator}" property="full.locale.names">
            <fileset dir="${res.dir}">
                <include name="??.res"/>
                <include name="??_*.res"/>
                <include name="???.res"/>
                <include name="???_*.res"/>
                <include name="root.res"/>
                <exclude name="res_index.res"/>
            </fileset>
            <chainedmapper>
                <flattenmapper/>
                <globmapper from="*.res" to="*"/>
            </chainedmapper>
        </pathconvert>
        <echo message="${full.locale.names}" file="${res.dir}/fullLocaleNames.lst"/>
    </target>

    <!-- FindBugs targets -->
    <target name="_findbugs_init">
        <property name="findbugs.home" value="${env.FINDBUGS_HOME}"/>
        <echo message="----------------------------------------------------"/>
        <echo message="findbugs.home:  ${findbugs.home}"/>
        <echo message="----------------------------------------------------"/>

        <fail message="FindBugs task not found. Set environment variable FINDBUGS_HOME properly.">
            <condition>
                <not>
                    <or>
                        <available classname="edu.umd.cs.findbugs.anttask.FindBugsTask" property="_findbugs.task.available" />
                        <available file="${findbugs.home}/lib/findbugs-ant.jar" />
                    </or>
                </not>
            </condition>
        </fail>
        <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
            classpath="${findbugs.home}/lib/findbugs-ant.jar"/>

        <property name="aux.classpath" value="${toString:javac.classpathref}"/>
        <condition property="empty.aux.classpath">
            <length string="${aux.classpath}" when="eq" length="0"/>
        </condition>
    </target>

    <target name="_findbugs_empty_aux_classpath" if="empty.aux.classpath">
        <findbugs
            home="${findbugs.home}"
            output="html"
            outputFile="${out.dir}/fb-${ant.project.name}.html"
            excludeFilter="findbugs-exclude.xml">
 
            <sourcePath path="${src.dir}"/>
            <class location="${jar.dir}/${jar.name}"/>
        </findbugs>
    </target>

    <target name="_findbugs_non_empty_aux_classpath" unless="empty.aux.classpath">
        <findbugs
            home="${findbugs.home}"
            output="html"
            outputFile="${out.dir}/fb-${ant.project.name}.html"
            excludeFilter="findbugs-exclude.xml">
 
            <sourcePath path="${src.dir}"/>
            <class location="${jar.dir}/${jar.name}"/>
            <auxClasspath path="${aux.classpath}"/>
        </findbugs>
    </target>

    <target name="@findbugs" depends="_findbugs_init, @build-all, _findbugs_empty_aux_classpath, _findbugs_non_empty_aux_classpath"/>

    <!-- Dependencies -->

    <!-- collate -->
    <path id="javac.classpathref.collate">
        <pathelement location="${icu4j.core.jar}"/>
    </path>

    <target name="_all.collate" depends="_all.core">
        <ant dir="${icu4j.collate.dir}" inheritAll="false"/>
    </target>

    <!-- core -->
    <path id="javac.classpathref.core"/>

    <target name="_all.core">
        <ant dir="${icu4j.core.dir}" inheritAll="false"/>
    </target>

    <!-- charset -->
    <path id="javac.classpathref.charset">
        <pathelement location="${icu4j.core.jar}"/>
    </path>

    <target name="_all.charset" depends="_all.core">
        <ant dir="${icu4j.charset.dir}" inheritAll="false"/>
    </target>

    <!-- currdata -->
    <path id="javac.classpathref.currdata">
        <pathelement location="${icu4j.core.jar}"/>
    </path>

    <target name="_all.currdata" depends="_all.core">
        <ant dir="${icu4j.currdata.dir}" inheritAll="false"/>
    </target>

    <!-- langdata -->
    <path id="javac.classpathref.langdata">
        <pathelement location="${icu4j.core.jar}"/>
    </path>

    <target name="_all.langdata" depends="_all.core">
        <ant dir="${icu4j.langdata.dir}" inheritAll="false"/>
    </target>

    <!-- localespi -->
    <path id="javac.classpathref.localespi">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.collate.jar}"/>
    </path>

    <target name="_all.localespi" depends="_all.core, _all.collate">
        <ant dir="${icu4j.localespi.dir}" inheritAll="false"/>
    </target>

    <!-- regiondata -->
    <path id="javac.classpathref.regiondata">
        <pathelement location="${icu4j.core.jar}"/>
    </path>

    <target name="_all.regiondata" depends="_all.core">
        <ant dir="${icu4j.regiondata.dir}" inheritAll="false"/>
    </target>

    <!-- translit -->
    <path id="javac.classpathref.translit">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.translit.jar}"/>
    </path>

    <target name="_all.translit" depends="_all.core">
        <ant dir="${icu4j.translit.dir}" inheritAll="false"/>
    </target>

    <!-- test-framework -->
    <path id="javac.classpathref.test-framework">
        <pathelement location="${icu4j.core.jar}"/>
    </path>

    <target name="_all.test-framework" depends="_all.core">
        <ant dir="${icu4j.test-framework.dir}" inheritAll = "false"/>
    </target>

    <!-- core-tests -->
    <path id="javac.classpathref.core-tests">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
    </path>

    <target name="_all.core-tests" depends="_all.core, _all.test-framework">
        <ant dir="${icu4j.core-tests.dir}" inheritAll="false"/>
    </target>

    <!-- collate-tests -->
    <path id="javac.classpathref.collate-tests">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.collate.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
    </path>

    <target name="_all.collate-tests" depends="_all.core, _all.collate, _all.test-framework">
        <ant dir="${icu4j.collate-tests.dir}" inheritAll="false"/>
    </target>

    <!-- charset-tests -->
    <path id="javac.classpathref.charset-tests">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
    </path>

    <target name="_all.charset-tests" depends="_all.core, _all.charset, _all.test-framework">
        <ant dir="${icu4j.charset-tests.dir}" inheritAll="false"/>
    </target>

    <!-- localespi-tests -->
    <path id="javac.classpathref.localespi-tests">
        <pathelement location="${icu4j.core.jar}"/>
	<pathelement location="${icu4j.collate.jar}"/>
        <pathelement location="${icu4j.localespi.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
    </path>

    <target name="_all.localespi-tests" depends="_all.core, _all.collate, _all.localespi, _all.test-framework">
        <ant dir="${icu4j.localespi-tests.dir}" inheritAll="false"/>
    </target>

    <!-- packaging-tests -->
    <path id="javac.classpathref.packaging-tests">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
    </path>

    <target name="_all.packaging-tests" depends="_all.core, _all.charset, _all.test-framework">
        <ant dir="${icu4j.packaging-tests.dir}" inheritAll="false"/>
    </target>

    <!-- translit-tests -->
    <path id="javac.classpathref.translit-tests">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.translit.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
    </path>

    <target name="_all.translit-tests" depends="_all.core, _all.translit, _all.test-framework">
        <ant dir="${icu4j.translit-tests.dir}" inheritAll="false"/>
    </target>

    <!-- testall -->
    <path id="javac.classpathref.testall">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
    </path>

    <target name="_all.testall" depends="_all.core, _all.test-framework">
        <ant dir="${icu4j.testall.dir}" inheritAll="false"/>
    </target>


    <!-- build-tools -->
    <path id="javac.classpathref.build-tools">
        <pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
    </path>

    <target name="_all.build-tools">
        <ant dir="${icu4j.build-tools.dir}" inheritAll="false"/>
    </target>

    <!-- tools -->
    <path id="javac.classpathref.tools">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.collate.jar}"/>
        <pathelement location="${icu4j.translit.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
        <pathelement location="${icu4j.core-tests.jar}"/>
        <pathelement location="${icu4j.translit-tests.jar}"/>
    </path>

    <target name="_all.tools" depends="_all.core, _all.collate, _all.translit, _all.test-framework, _all.core-tests, _all.translit-tests">
        <ant dir="${icu4j.tools.dir}" inheritAll="false"/>
    </target>

    <!-- demos -->
    <path id="javac.classpathref.demos">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.translit.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
    </path>

    <target name="_all.demos" depends="_all.core, _all.translit, _all.charset">
        <ant dir="${icu4j.demos.dir}" inheritAll="false"/>
    </target>

    <!-- samples -->
    <path id="javac.classpathref.samples">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.collate.jar}"/>
        <pathelement location="${icu4j.translit.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
    </path>

    <target name="_all.samples" depends="_all.core, _all.collate, _all.translit, _all.charset">
        <ant dir="${icu4j.samples.dir}" inheritAll="false"/>
    </target>

    <!-- perf -->
    <path id="javac.classpathref.perf-tests">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4j.collate.jar}"/>
        <pathelement location="${icu4j.tools.jar}"/>
    </path>

    <target name="_all.perf-tests" depends="_all.core, _all.charset, _all.collate, _all.tools">
        <ant dir="${icu4j.perf-tests.dir}" inheritAll="false"/>
    </target>

</project>
