<?xml version="1.0"?>
<!-- 
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="POI Testbuild" default="run" basedir=".">

    <description>Test-Ant file which verifies that the Apache POI distribution build sources can be compiled successfully.
	
Before running this, you should execute the "assemble" target in the main build.xml to have the packaged files created correctly.
    </description>

    <property name="dist" value="../../build/dist"/>
    <property name="build" value="../../build/distsourcebuild"/>

    <target name="init" depends="">
    </target>

    <target name="run" depends="init,runSourceBuild,runCompileTest"/>

    <target name="runSourceBuild" depends="init">
        <!-- clean out old stuff in build-dir -->
        <delete dir="${build}"/>
        <mkdir dir="${build}"/>

        <!-- select latest built source zip -->
        <pathconvert property="srcpackage">
            <last>
                <sort>
                    <date xmlns="antlib:org.apache.tools.ant.types.resources.comparators"/>
                    <resources>
                        <fileset dir="${dist}">
                            <include name="poi-src-*.zip"/>
                        </fileset>
                    </resources>
                </sort>
            </last>
        </pathconvert>

        <echo message="Found source package at ${srcpackage}"/>
        <unzip src="${srcpackage}" dest="${build}" failOnEmptyArchive="true"/>

        <!-- look for name of sub-dir, do this dynamically as it changes with every (beta|rc)-release -->
        <pathconvert property="dirversion">
            <dirset dir="${build}">
                <include name="*"/>
            </dirset>
        </pathconvert>

        <!-- copy over required libs to avoid re-downloading them always -->
        <mkdir dir="${dirversion}/lib"/>
        <mkdir dir="${dirversion}/ooxml-lib"/>
        <mkdir dir="${dirversion}/compile-lib"/>
        <copy todir="${dirversion}/lib">
            <fileset dir="../../lib"/>
        </copy>
        <copy todir="${dirversion}/ooxml-lib">
            <fileset dir="../../ooxml-lib"/>
        </copy>
        <copy todir="${dirversion}/compile-lib">
            <fileset dir="../../compile-lib"/>
        </copy>

        <!-- finally call Ant on the extracted source to check if we can build the packages -->
        <echo message="Building in temporary dir ${dirversion}/"/>
        <ant dir="${dirversion}" target="jar" inheritAll="false" inheritRefs="false" useNativeBasedir="true"/>
    </target>

    <target name="runCompileTest" depends="init" description="Verify that we can compile most examples without including excelant or scratchpad jars">
        <!-- clean out old stuff in build-dir -->
        <delete dir="${build}"/>
        <mkdir dir="${build}"/>

        <!-- select latest built jar files without scratchpad.jar -->
        <pathconvert property="jarpackage">
            <sort>
                <resources>
                    <fileset dir="${dist}">
                        <include name="**/poi-3.*.jar"/>
                        <include name="**/poi-ooxml-3.*.jar"/>
                        <include name="**/poi-ooxml-schemas-3.*.jar"/>
                        <exclude name="**/*-javadoc*"/>
                        <exclude name="**/*-sources*"/>
                    </fileset>
                </resources>
            </sort>
        </pathconvert>

        <fail message="Did not find jar packages looking in directory ${dist}">
            <condition>
                <or>
                    <equals arg1="${jarpackage}" arg2=""/>
                    <not>
                        <isset property="jarpackage"/>
                    </not>
                </or>
            </condition>
        </fail>

        <echo message="Found jar packages at ${jarpackage}, dist: ${dist}"/>
        <path id="libs">
            <fileset dir="../../lib">
                <include name="junit*.jar"/>
            </fileset>
            <fileset dir="../../ooxml-lib">
                <include name="ooxml-schemas-*.jar"/>
                <include name="xmlbeans-*.jar"/>
                <exclude name="xmlbeans-2.3.*.jar"/>
            </fileset>
        </path>

        <echo message="Compiling examples without linking to scratchpad.jar to ensure that only some specific ones require this jar"/>
        <javac srcdir="../examples/src" destdir="${build}" 
               target="1.6" source="1.6" debug="true" 
               encoding="ASCII" fork="yes" includeantruntime="false" 
               excludes="org/apache/poi/hslf/**,org/apache/poi/hsmf/**,**/EmbeddedObjects.java,**/EmeddedObjects.java,**/LoadEmbedded.java,**/Word2Forrest.java"
               classpath="${jarpackage}" classpathref="libs">
        </javac>

        <!-- select latest built jar files with additionally scratchpad.jar -->
        <pathconvert property="jarpackagescratchpad">
            <sort>
                <resources>
                    <fileset dir="${dist}">
                        <include name="**/poi-3.*.jar"/>
                        <include name="**/poi-ooxml-3.*.jar"/>
                        <include name="**/poi-ooxml-schemas-3.*.jar"/>
                        <include name="**/poi-scratchpad-3.*.jar"/>
                        <exclude name="**/*-javadoc*"/>
                        <exclude name="**/*-sources*"/>
                    </fileset>
                </resources>
            </sort>
        </pathconvert>

        <echo message="Compiling all examples with the additional scratchpad.jar"/>
        <javac srcdir="../examples/src" destdir="${build}" 
               target="1.6" source="1.6" debug="true" 
               encoding="ASCII" fork="yes" includeantruntime="false" 
               classpath="${jarpackagescratchpad}" classpathref="libs">
        </javac>
    </target>
</project>
