<?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="assemble" 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-4.*.jar"/>
                        <include name="**/poi-ooxml-4.*.jar"/>
                        <include name="**/poi-ooxml-schemas-4.*.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"/>
                <include name="commons-compress*.jar"/>
            </fileset>
            <fileset dir="../../ooxml-lib">
                <include name="ooxml-schemas-*.jar"/>
                <include name="xmlbeans-3.*.jar"/>
                <exclude name="xmlbeans-2.*.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.8" source="1.8" 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-4.*.jar"/>
                        <include name="**/poi-ooxml-4.*.jar"/>
                        <include name="**/poi-ooxml-schemas-4.*.jar"/>
                        <include name="**/poi-scratchpad-4.*.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.8" source="1.8" debug="true"
               encoding="ASCII" fork="yes" includeantruntime="false" 
               classpath="${jarpackagescratchpad}" classpathref="libs">
        </javac>
    </target>
</project>
