<?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>

        <!-- 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="*-javadocs-*" />
						<exclude name="*-sources-*" />
					</fileset>
				</resources>
			</sort>
        </pathconvert>

        <echo message="Found jar packages at ${jarpackage}"/>

		<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="trye"
            encoding="ASCII"
            fork="yes"
            includeantruntime="false"
			excludes="org/apache/poi/hslf/**,org/apache/poi/hsmf/**,**/EmbeddedObjects.java,**/EmeddedObjects.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="*-javadocs-*" />
						<exclude name="*-sources-*" />
					</fileset>
				</resources>
			</sort>
        </pathconvert>

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