<project name="openDA" default="help" basedir=".">
<!--
================================================================================
  Ant build file for OpenDA Java code
  install ant and type
  "ant help"
  for a list of options
================================================================================
-->
    <target name="help">
        <echo>
            ======================================================================================
            This build script assumes that the OpenDA code is located in a folder called "public".
            ======================================================================================
            ant help                     --> print this help
            ant build                    --> compile, make jar and copy resources for all platforms
            ant build-win32              --> compile, make jar, copy resources for win32
                                             remove resources for other platforms
            ant build-x64                --> compile, make jar, copy resources for x64
                                             remove resources for other platforms
            ant build-windows            --> compile, make jar, copy resources for windows
                                             remove resources for other platforms
            ant clean                    --> remove output
            ant doc                      --> collect documentation
            ant test                     --> execute unit tests (excluding broken tests)
            ant test-all                 --> execute all unit tests
            ant test-broken              --> execute broken unit tests
            ant zip                      --> creates zip files with sources, binaries,
                                             documentation and xml schemas
            ant zip-windows              --> creates zip files with sources, binaries,
                                             documentation and xml schemas for windows
            ant zip-tests                --> zip public test cases
            ant tgz                      --> creates tgz files with sources, binaries,
                                             documentation and xml schemas
            ant tgz-tests                --> zip public test cases
            ant validate-xml             --> validate xml-schemes
        </echo>
    </target>

  <property file="project.properties"/>
  <property file="version.properties"/>

    <macrodef name="testing">
	    <attribute name="v" default="NOT SET"/>
	    <sequential>
		    <echo>v is @{v}</echo>
	    </sequential>
    </macrodef>

    <target name="debug">
        <echo>
            module=${module}
            srcdir=${srcdir}
            jarname=${jarname}
            bindir=${bindir}
        </echo>
        <testing v="This is v"/>
        <testing v="This is w"/>
    </target>


<!--
===========================================================================
	Compilation
===========================================================================
-->
   <target name="build" depends="init, tests">
      <buildmodule module="core" />
      <buildmodule module="observers" />
      <buildmodule module="models" />
      <buildmodule module="algorithms" />
      <buildmodule module="application" />
      <buildmodule module="model_bmi"/>
      <buildmodule module="model_delwaq"/>
      <buildmodule module="model_delft3d"/>
      <buildmodule module="model_damflow"/>
      <buildmodule module="model_efdc" />
      <buildmodule module="model_efdc_dll"/>
      <buildmodule module="model_example_blackbox" />
      <buildmodule module="model_example_fortran" />
      <buildmodule module="model_glm" />
      <buildmodule module="model_gotm" />
      <buildmodule module="model_hspf" />
      <buildmodule module="model_metaswap"/>
      <buildmodule module="model_nemo"/>
      <buildmodule module="model_reactive_advection"/>
      <buildmodule module="model_swan"/>
      <buildmodule module="model_wflow"/>
      <buildmodule module="model_dflowfm_blackbox"/>
      <buildmodule module="model_RainfallRunoffZhang"/>
      <buildmodule module="model_openfoam"/>
      <chmod dir="${projectlib}" perm="ugo+rx" includes="**/*.sh"/>
      <chmod dir="${projectlib}" perm="ugo+rx" includes="**/*.pl"/>
   </target>

   <target name="build-win32" depends="build, copy-win32-executables, copy-jre-win32" />
   <target name="build-x64" depends="build, copy-x64-executables, copy-jre" />
   <target name="build-windows" depends="build-win32" />

   <target name="doc" depends="init">
      <docmodule module="core" />
      <docmodule module="observers" />
      <docmodule module="models" />
      <docmodule module="algorithms" />
      <docmodule module="model_bmi"/>
      <docmodule module="model_efdc"/>
      <docmodule module="model_efdc_dll"/>
      <docmodule module="model_example_blackbox" />
      <docmodule module="model_example_fortran" />
      <docmodule module="model_hspf"/>
      <docmodule module="model_swan" />
      <docmodule module="model_wflow"/>
      <docmodule module="model_delft3d"/>
      <docmodule module="model_nemo"/>
      <docmodule module="model_dflowfm_blackbox"/>
      <docmodule module="model_openfoam"/>
      <copy todir="${projectdoc}/javadoc" >
         <fileset dir="core/doc/javadoc_menu" />
      </copy>
      <copyXMLexamples module="core" />
   </target>

    <macrodef name="docmodule">
	    <attribute name="module" default="NOT SET"/>
	    <sequential>
		    <echo>doc module @{module}</echo>
		    <ant antfile="build.xml" dir="@{module}" target="javadoc" inheritAll="false" />
		    <mkdir dir="${projectdoc}/javadoc" />
		    <copy todir="${projectdoc}/javadoc" >
			    <fileset dir="@{module}/javadoc" />
		    </copy>
		    <copy todir="${projectdoc}" >
			    <fileset dir="@{module}/doc" />
		    </copy>
		    <copy todir="${xmlschemadir}" >
			    <fileset dir="@{module}/xmlSchemas" includes="**/*.xsd"  />
		    </copy>
	    </sequential>
    </macrodef>

	<macrodef name="copyXMLexamples">
		<attribute name="module" default="NOT SET"/>
		<sequential>
			<echo>${xmlschemadir}</echo>
			<copy todir="${projectdoc}/xmlSchemasHTML/xmlexample" >
				<fileset dir="@{module}/xmlSchemas/examples" includes="**/*.*"/>
			</copy>
		</sequential>
	</macrodef>

   <target name="tests" depends="init">
      <moduletests module="core" />
      <moduletests module="model_bmi" />
      <moduletests module="model_example_blackbox" />
      <moduletests module="model_swan" />
      <moduletests module="model_nemo" />
      <moduletests module="model_delft3d"/>
      <moduletests module="model_reactive_advection"/>
      <moduletests module="model_dflowfm_blackbox"/>
      <moduletests module="model_openfoam"/>      
   </target>

    <macrodef name="moduletests">
	    <attribute name="module" default="NOT SET"/>
	    <sequential>
		    <echo>tests for module @{module}</echo>
		    <mkdir dir="${projecttests}" />
		    <copy todir="${projecttests}/@{module}" >
			    <fileset dir="@{module}/tests" />
		    </copy>
	    </sequential>
    </macrodef>

    <macrodef name="buildmodule">
	    <attribute name="module" default="NOT SET"/>
	    <sequential>
		    <echo>build for module @{module}</echo>
		    <ant antfile="build.xml" dir="@{module}" target="build" inheritAll="false" />
		    <copy todir="${projectlib}" >
			    <fileset dir="@{module}/bin" />
		    </copy>
	    </sequential>
    </macrodef>

    <target name="copy-win32-executables">

      <copy  toDir="${modulebindir}" flatten="yes">
	 		    <fileset dir = "${modulebindir}/win32_ifort"/>
      </copy>

      <delete dir="${modulebindir}/win32_gfortran"/>
      <delete dir="${modulebindir}/win64_ifort"/>
      <delete dir="${modulebindir}/darwin"/>
      <delete dir="${modulebindir}/linux64_gnu"/>

    	<delete>
            <fileset dir="${modulebindir}">
                <include name="**.sh"/>
                <include name="**.csh"/>
            </fileset>
    	</delete>

    </target>

	<target name="copy-x64-executables">

		<copy  toDir="${modulebindir}" flatten="yes">
			<fileset dir = "${modulebindir}/win64_ifort"/>
		</copy>

		<delete dir="${modulebindir}/win32_gfortran"/>
		<delete dir="${modulebindir}/win32_ifort"/>
		<delete dir="${modulebindir}/darwin"/>
		<delete dir="${modulebindir}/linux32_gnu"/>
		<delete dir="${modulebindir}/linux64_gnu"/>

		<delete>
			<fileset dir="${modulebindir}">
				<include name="**.sh"/>
				<include name="**.csh"/>
			</fileset>
		</delete>

	</target>

	<target name="copy-jre-win32">
		<copy  toDir="${projectjre}">
		    <fileset dir = "thirdparty/jre/jre1.8.0_144_win32"/>
		</copy>
	</target>

	<target name="copy-jre">
		<copy  toDir="${projectjre}">
			<fileset dir = "thirdparty/jre/jre1.8.0_144_win32"/>
		</copy>
	</target>

	<!--
	===========================================================================
		Tools: init, clean, etc.
	===========================================================================
	-->
    <target name="init">
        <tstamp/>
	    <mkdir dir="${projectbin}"/>
	    <mkdir dir="${projectdoc}"/>
	    <mkdir dir="${xmlschemadir}"/>
    </target>

    <target name="clean">
    	<delete dir="${projectbin}"/>
    	<delete dir="${projectdoc}"/>
    	<delete dir="${projecttests}"/>
    	<delete dir="${xmlschemadir}"/>
    	<delete dir="${testrundir}"/>
        <delete dir="${testbuilddir}"/>
        <delete dir="${testreportdir}"/>
        <delete dir="${projectjre}"/>
    	<cleanmodule module="core" />
    	<cleanmodule module="observers" />
    	<cleanmodule module="models" />
    	<cleanmodule module="algorithms" />
        <cleanmodule module="application" />
        <cleanmodule module="model_bmi" />
        <cleanmodule module="model_damflow" />
    	<cleanmodule module="model_delft3d" />
        <cleanmodule module="model_delwaq" />
        <cleanmodule module="model_efdc" />
        <cleanmodule module="model_efdc_dll" />
        <cleanmodule module="model_example_blackbox" />
        <cleanmodule module="model_example_fortran" />
        <cleanmodule module="model_glm" />
        <cleanmodule module="model_gotm" />
        <cleanmodule module="model_hspf" />
        <cleanmodule module="model_metaswap" />
        <cleanmodule module="model_nemo" />
        <cleanmodule module="model_reactive_advection" />
        <cleanmodule module="model_swan" />
        <cleanmodule module="model_wflow" />
        <cleanmodule module="model_dflowfm_blackbox"/>
        <cleanmodule module="model_openfoam"/>
    </target>

    <macrodef name="cleanmodule">
	    <attribute name="module" default="NOT SET"/>
	    <sequential>
		    <echo>clean for module @{module}</echo>
		    <ant antfile="build.xml" dir="@{module}" target="clean" inheritAll="false" />
	    </sequential>
    </macrodef>




	<taskdef resource="org/tigris/subversion/svnant/svnantlib.xml">
		<classpath>
			<fileset dir="core/java/resources/svnant-1.3.0/lib" includes="**/*.jar" />
		</classpath>
	</taskdef>

    <available file=".git" type="dir" property="do.git" />
    <available file=".svn" type="dir" property="do.svn" />
    <target name="vc-revision" depends="git-revision,svn-revision" >
        <echo>Suversion Revision or Git commit hash: ${vc.revision}</echo>
    </target>

    <target name="svn-revision" if="do.svn">
	<svn>
            <status path="." revisionProperty="svn.revision" />
	</svn>
	<echo>Subversion Revision: ${svn.revision}</echo>
        <property name="vc.revision" value="r${svn.revision}" />
    </target>

    <target name="git-revision" if="do.git">
    <exec executable="git" outputproperty="git.revision">
      <arg value="rev-parse"/>
      <arg value="HEAD"/>
    </exec>
    <property name="vc.revision" value="${git.revision}" />
    </target> 

  <!--
  ============================================================================================================
  build archives
  ============================================================================================================
  -->
    <target name="zip" depends="vc-revision,chmod-linux-native,build,doc,zip-src,zip-bin,zip-doc,zip-schemas" />
    <target name="tgz" depends="vc-revision,chmod-linux-native,build,doc,tgz-src,tgz-bin,tgz-doc,tgz-schemas" />
    <target name="zip-win32" depends="vc-revision,build-win32,doc,zip-src,zip-bin,zip-doc,zip-schemas,zip-jre" />
    <target name="zip-x64" depends="vc-revision,build-x64,doc,zip-src,zip-bin,zip-doc,zip-schemas,zip-jre" />
    <target name="zip-windows" depends="zip-win32" />

    <target name="zip-src">
        <zip destfile="${projectname}_${version}_${vc.revision}_src.zip">
	        <zipfileset dir="core" prefix="openda_${version}/public/core" excludes="*.svn" />
	        <zipfileset dir="models" prefix="openda_${version}/public/models" excludes="*.svn" />
	        <zipfileset dir="observers" prefix="openda_${version}/public/observers" excludes="*.svn" />
	        <zipfileset dir="algorithms" prefix="openda_${version}/public/algorithms" excludes="*.svn" />
	        <zipfileset dir="application" prefix="openda_${version}/public/application" excludes="*.svn" />
	        <zipfileset dir="module_template" prefix="openda_${version}/public/module_template" excludes="*.svn" />
	        <zipfileset dir="model_bmi" prefix="openda_${version}/public/model_bmi" excludes="*.svn"/>
	        <zipfileset dir="model_delwaq" prefix="openda_${version}/public/model_delwaq" excludes="*.svn"/>
	        <zipfileset dir="model_efdc" prefix="openda_${version}/public/model_efdc" excludes="*.svn"/>
	        <zipfileset dir="model_efdc_dll" prefix="openda_${version}/public/model_efdc_dll" excludes="*.svn"/>
	        <zipfileset dir="model_example_fortran" prefix="openda_${version}/public/model_example_fortran" excludes="*.svn" />
	        <zipfileset dir="model_example_blackbox" prefix="openda_${version}/public/model_example_blackbox" excludes="*.svn" />
	        <zipfileset dir="model_glm" prefix="openda_${version}/public/model_glm" excludes="*.svn"/>
	        <zipfileset dir="model_gotm" prefix="openda_${version}/public/model_gotm" excludes="*.svn"/>
        	<zipfileset dir="model_hspf" prefix="openda_${version}/public/model_hspf" excludes="*.svn"/>
	        <zipfileset dir="model_metaswap" prefix="openda_${version}/public/model_metaswap" excludes="*.svn"/>
	        <zipfileset dir="model_nemo" prefix="openda_${version}/public/model_nemo" excludes="*.svn"/>
	        <zipfileset dir="model_mikeshe" prefix="openda_${version}/public/model_mikeshe" excludes="*.svn"/>
	        <zipfileset dir="model_swan" prefix="openda_${version}/public/model_swan" excludes="*.svn" />
	        <zipfileset dir="model_wflow" prefix="openda_${version}/public/model_wflow" excludes="*.svn"/>
	        <zipfileset dir="model_delft3d" prefix="openda_${version}/public/model_delft3d" excludes="*.svn"/>
	        <zipfileset dir="model_dflowfm_blackbox" prefix="openda_${version}/public/model_dflowfm_blackbox" excludes="*.svn"/>
	        <zipfileset dir="thirdparty" prefix="openda_${version}/public/thirdparty" excludes="*.svn" />
	        <zipfileset dir="." includes="build.xml" prefix="openda_${version}/public" />
	        <zipfileset dir="." includes="project.properties" prefix="openda_${version}/public" />
	        <zipfileset dir="." includes="unit_test_info.txt"  prefix="openda_${version}/public" />
	        <zipfileset dir="." includes="README.txt" fullpath="openda_${version}/public/README_${vc.revision}.txt"/>
	        <zipfileset dir="." includes="license.txt" fullpath="openda_${version}/public/license.txt"/>
	        <!--<zipfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/public/release-notes-2.0.pdf"/>-->
	        <zipfileset dir="." includes="select_this_version.sh"  prefix="openda_${version}/public" />
	        <zipfileset dir="." includes=".project" fullpath="openda_${version}/public/.project"/>
	        <zipfileset dir="." includes=".classpath" fullpath="openda_${version}/public/.classpath"/>
        </zip>
    </target>

    <target name="zip-bin">
        <zip destfile="${projectname}_${version}_${vc.revision}_bin.zip">
            <zipfileset dir="bin" prefix="openda_${version}/bin"/>
            <zipfileset dir="doc" prefix="openda_${version}/doc"/>
            <zipfileset dir="examples" prefix="openda_${version}/examples" excludes="*.svn" />
            <zipfileset dir="xmlSchemas" prefix="openda_${version}/xmlSchemas" excludes="*.svn" />
            <zipfileset dir="jre" prefix="openda_${version}/jre" excludes="*.svn" />
            <zipfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${vc.revision}.txt"/>
            <zipfileset dir="." includes="license.txt" fullpath="openda_${version}/license.txt"/>
            <!--<zipfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/release-notes-2.0.pdf"/>-->
            <zipfileset dir="." includes="select_this_version.sh"  prefix="openda_${version}" />
        </zip>
    </target>

    <target name="zip-doc">
        <zip destfile="${projectname}_${version}_${vc.revision}_doc.zip">
            <zipfileset dir="doc" prefix="openda_${version}/doc"/>
            <zipfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${vc.revision}.txt"/>
            <zipfileset dir="." includes="license.txt" fullpath="openda_${version}/license.txt"/>
            <!--<zipfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/release-notes-2.0.pdf"/>-->
        </zip>
    </target>

    <target name="zip-schemas">
        <zip destfile="${projectname}_${version}_${vc.revision}_schemas.zip">
            <zipfileset dir="xmlSchemas" prefix="openda_${version}" excludes="*.svn" />
            <zipfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${vc.revision}.txt"/>
            <zipfileset dir="." includes="license.txt" fullpath="openda_${version}/license.txt"/>
            <!--<zipfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/release-notes-2.0.pdf"/>-->
        </zip>
    </target>

    <target name="zip-jre" depends="vc-revision">
        <zip destfile="${projectname}_${version}_${vc.revision}_jre.zip">
            <zipfileset dir="jre" prefix="openda_${version}/jre" excludes="*.svn" />
        </zip>
    </target>

    <target name="zip-native" depends="vc-revision">
       <zip destfile="${projectname}_${version}_${vc.revision}_native.zip">
	       <zipfileset dir="core/native_bin/win64_ifort" prefix="win64_ifort"/>
       </zip>
    </target>

    <macrodef name="ziptest">
        <attribute name="testname" default="NOT SET"/>
        <sequential>
            <echo>zip example @{testname}</echo>
            <zip destfile="${projectname}_${version}_${vc.revision}_examples_@{testname}.zip">
                <zipfileset dir="examples/@{testname}"  prefix="openda_${version}/examples/@{testname}"/>
                <zipfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${rvc.evision}.txt"/>
            </zip>
        </sequential>
    </macrodef>

    <target name="zip-tests" depends="vc-revision,tests" > <!-- depends="vc-revision"> -->
        <ziptest testname="core" />
        <ziptest testname="model_example_blackbox" />
    	<ziptest testname="model_swan" />
        <ziptest testname="model_delft3d" />
        <ziptest testname="model_dflowfm_blackbox" />
    </target>

    <target name="chmod-linux-native">
	    <chmod perm="ug+rx" dir="${projectdir}/core/native_bin/" includes="*.sh" verbose="true"/>
	    <chmod perm="ug+rx" dir="${projectdir}/core/native_bin/linux64_gnu/lib" includes="**" verbose="true"/>
    </target>

    <!-- tgz archives: mainly for non-windows platforms as they preserve file-permissions -->
    <target name="tgz-bin">
        <tar compression="gzip" destfile="${projectname}_${version}_${vc.revision}_bin.tgz">
	        <tarfileset dir="bin" prefix="openda_${version}/bin" excludes="*.sh" />
	        <tarfileset dir="bin" includes="*.sh" filemode="755" prefix="openda_${version}/bin" />
            <tarfileset dir="doc" prefix="openda_${version}/doc"/>
            <tarfileset dir="examples" prefix="openda_${version}/examples" excludes="*.svn" />
            <tarfileset dir="xmlSchemas" prefix="openda_${version}/xmlSchemas" excludes="*.svn" />
            <tarfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${vc.evision}.txt"/>
            <tarfileset dir="." includes="license.txt" fullpath="openda_${version}/license.txt"/>
            <!--<tarfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/release-notes-2.0.pdf"/>-->
            <tarfileset dir="." includes="select_this_version.sh"  prefix="openda_${version}" />
        </tar>
    </target>

    <target name="tgz-src">
      <tar compression="gzip" destfile="${projectname}_${version}_${vc.revision}_src.tgz">
	    <tarfileset dir="core" prefix="openda_${version}/public/core" excludes="*.svn" >
	    <exclude name="bin_external/*.sh" />
	  </tarfileset>
	  <tarfileset dir="core/bin_external" includes="*.sh" filemode="755" prefix="openda_${version}/public/core/bin_external" excludes="*.svn" />
	  <tarfileset dir="models" prefix="openda_${version}/public/models" excludes="*.svn" />
	  <tarfileset dir="observers" prefix="openda_${version}/public/observers" excludes="*.svn" />
	  <tarfileset dir="algorithms" prefix="openda_${version}/public/algorithms" excludes="*.svn" />
	  <tarfileset dir="application" prefix="openda_${version}/public/application" excludes="*.svn" />
	  <tarfileset dir="module_template" prefix="openda_${version}/public/module_template" excludes="*.svn" />
	  <tarfileset dir="model_bmi" prefix="openda_${version}/public/model_bmi" excludes="*.svn"/>
	  <tarfileset dir="model_delwaq" prefix="openda_${version}/public/model_efdc" excludes="*.svn"/>
	  <tarfileset dir="model_efdc" prefix="openda_${version}/public/model_efdc" excludes="*.svn"/>
	  <tarfileset dir="model_efdc_dll" prefix="openda_${version}/public/model_efdc_dll" excludes="*.svn"/>
	  <tarfileset dir="model_example_fortran" prefix="openda_${version}/public/model_example_fortran" excludes="*.svn" />
	  <tarfileset dir="model_example_blackbox" prefix="openda_${version}/public/model_example_blackbox" excludes="*.svn" />
	  <tarfileset dir="model_glm" prefix="openda_${version}/public/model_glm" excludes="*.svn"/>
  	  <tarfileset dir="model_gotm" prefix="openda_${version}/public/model_gotm" excludes="*.svn"/>
      <tarfileset dir="model_hspf" prefix="openda_${version}/public/model_hspf" excludes="*.svn"/>
	  <tarfileset dir="model_metaswap" prefix="openda_${version}/public/model_metaswap" excludes="*.svn"/>
	  <tarfileset dir="model_nemo" prefix="openda_${version}/public/model_nemo" excludes="*.svn"/>
	  <tarfileset dir="model_mikeshe" prefix="openda_${version}/public/model_mikeshe" excludes="*.svn"/>
	  <tarfileset dir="model_swan" prefix="openda_${version}/public/model_swan" excludes="*.svn" />
	  <tarfileset dir="model_wflow" prefix="openda_${version}/public/model_wflow" excludes="*.svn"/>
	  <tarfileset dir="model_delft3d" prefix="openda_${version}/public/model_delf3d" excludes="*.svn"/>
	  <tarfileset dir="model_dflowfm_blackbox" prefix="openda_${version}/public/model_dflowfm_blackbox" excludes="*.svn"/>
	  <tarfileset dir="thirdparty" prefix="openda_${version}/public/thirdparty" excludes="*.svn" />
	  <tarfileset dir="." includes="build.xml" prefix="openda_${version}/public" />
	  <tarfileset dir="." includes="project.properties" prefix="openda_${version}/public" />
	  <tarfileset dir="." includes="unit_test_info.txt"  prefix="openda_${version}/public" />
	  <tarfileset dir="." includes="README.txt" fullpath="openda_${version}/public/README_${vc.revision}.txt"/>
	  <tarfileset dir="." includes="license.txt" fullpath="openda_${version}/public/license.txt"/>
	  <!--<tarfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/public/release-notes-2.0.pdf"/>-->
	  <tarfileset dir="." includes="select_this_version.sh"  prefix="openda_${version}/public" />
	  <tarfileset dir="." includes=".project" fullpath="openda_${version}/public/.project"/>
	  <tarfileset dir="." includes=".classpath" fullpath="openda_${version}/public/.classpath"/>
      </tar>
    </target>

    <target name="tgz-doc">
        <tar compression="gzip" destfile="${projectname}_${version}_${vc.revision}_doc.tgz">
            <tarfileset dir="doc" prefix="openda_${version}/doc" />
            <tarfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${vc.revision}.txt"/>
            <tarfileset dir="." includes="license.txt" fullpath="openda_${version}/license.txt"/>
            <!--<tarfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/release-notes-2.0.pdf"/>-->
        </tar>
    </target>

    <target name="tgz-schemas" depends="vc-revision" >
      <tar compression="gzip" destfile="${projectname}_${version}_${vc.revision}_schemas.tgz">
         <tarfileset dir="xmlSchemas" prefix="openda_${version}" excludes="*.svn" />
         <tarfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${vc.revision}.txt"/>
         <tarfileset dir="." includes="license.txt" fullpath="openda_${version}/license.txt"/>
         <!--<tarfileset dir="." includes="release-notes-2.0.pdf " fullpath="openda_${version}/release-notes-2.0.pdf"/>-->
      </tar>
    </target>

    <macrodef name="tgztest">
       <attribute name="testname" default="NOT SET"/>
       <sequential>
         <echo>zip example @{testname}</echo>
         <tar destfile="${projectname}_${version}_${vc.revision}_examples_@{testname}.tgz">
            <tarfileset dir="examples/@{testname}"  prefix="openda_${version}/examples/@{testname}"/>
            <tarfileset dir="." includes="README.txt" fullpath="openda_${version}/README_${vc.revision}.txt"/>
         </tar>
       </sequential>
    </macrodef>

    <target name="tgz-tests" depends="vc-revision,tests" > <!-- depends="vc-revision"> -->
        <tgztest testname="core" />
        <tgztest testname="model_example_blackbox" />
    	<tgztest testname="model_swan" />
        <tgztest testname="model_delft3d" />
        <tgztest testname="model_dflowfm_blackbox" />
    </target>
    <target name="tgz-native" depends="vc-revision,chmod-linux-native" >
       <tar compression="gzip" destfile="${projectname}_${version}_${vc.revision}_native.tgz">
	       <tarfileset dir="core/native_bin/linux64_gnu" prefix="linux64_gnu" excludes="*.svn"/>
	       <tarfileset dir="core/native_bin/darwin" prefix="darwin" excludes="*.svn"/>
       </tar>
    </target>


	<!--
	===========================================================================
	    Tests: Unit tests
	===========================================================================
	-->

     <!-- compile test classes -->
    <target name="testclasses">
        <mkdir dir="${testbuilddir}"/>
    	<buildmoduletests module="core" />
    	<buildmoduletests module="observers" />
    	<buildmoduletests module="models" />
    	<buildmoduletests module="algorithms" />
    	<buildmoduletests module="application" />
        <buildmoduletests module="model_bmi" />
        <buildmoduletests module="model_efdc" />
        <buildmoduletests module="model_efdc_dll"/>
        <buildmoduletests module="model_example_blackbox" />
        <buildmoduletests module="model_example_fortran" />
        <buildmoduletests module="model_hspf" />
        <buildmoduletests module="model_swan"/>
        <buildmoduletests module="model_wflow"/>
        <buildmoduletests module="model_delft3d"/>
        <buildmoduletests module="model_dflowfm_blackbox"/>
        <buildmoduletests module="model_openfoam"/>        
    </target>

    <target name="testclassesPPC">
        <mkdir dir="${testbuilddir}"/>
    	<buildmoduletests module="core" />
    	<buildmoduletests module="observers" />
    	<buildmoduletests module="models" />
    	<buildmoduletests module="algorithms" />
    	<buildmoduletests module="application" />
		<buildmoduletests module="model_bmi" />
        <!--<buildmoduletests module="model_efdc" />
        <buildmoduletests module="model_efdc_dll"/> -->
        <buildmoduletests module="model_example_blackbox" />
        <buildmoduletests module="model_example_fortran" />
        <buildmoduletests module="model_hspf" />
        <!--<buildmoduletests module="model_swan"/>-->
        <buildmoduletests module="model_wflow"/>
        <buildmoduletests module="model_delft3d"/>
        <buildmoduletests module="model_openfoam"/>                
    </target>


    <macrodef name="buildmoduletests">
        <attribute name="module" default="NOT SET"/>
        <sequential>
            <echo>build tests for module @{module}</echo>
            <ant antfile="build.xml" dir="@{module}" target="build-test" inheritAll="false" />
            <copy todir="${testbuilddir}" >
                <fileset dir="@{module}/build-test" />
            </copy>
        </sequential>
    </macrodef>


   <target name="test-travis" depends="build,testclasses">
        <mkdir dir="${testreportdir}"/>
        <mkdir dir="${testrundir}"/>

        <echo>Java library path = ${java.library.path}</echo>

    	<!-- <junit printsummary="withOutAndErr" dir="${projectdir}" fork="yes" timeout="1200000" maxmemory="${maxmemory}"> -->
        <junit printsummary="yes" haltonfailure="yes" fork="yes" timeout="1200000" maxmemory="${maxmemory}">
            <jvmarg value="-ea"/>
            <jvmarg value="-esa"/>
            <batchtest todir="${testreportdir}">
                <fileset dir="${testbuilddir}">
                    <include name="**/*Test.class"/>

                    <!-- BROKEN - FIX THEM -->
                   <exclude name="**/SomeBrokenTest.class"/>

                   <!-- We are testing headless, hence no GUI tests -->
                   <exclude name="**/ApplicationScreenTest.class"/>
                   <exclude name="**/OpenDaApplicationTest.class"/>
                   <exclude name="**/PlotTest.class"/>

                   <!-- Only broken in travis -->
                   <!-- <exclude name="**/KalmanFilterTest.class"/>
                   <exclude name="**/BBStochModelMaps2dNoiseModelTest.class"/>
                   <exclude name="**/BBStochModelParamDrawerTest.class"/>
                   <exclude name="**/BBStochModelParametersTest.class"/>
                   <exclude name="**/DFlowFMRestartTest.class"/>
                   <exclude name="**/SwanCalibWrapperTest.class"/>
                   <exclude name="**/swan.SwanEnKFTest.class"/>
                   <exclude name="**/DoublePendulumModelTest.class"/>
                   <exclude name="**/LorenzModelTest.class"/>
                   <exclude name="**/OscillatorModelTest.class"/> -->

                   

                   <!-- looks very broken but take them out for now -->
                   <exclude name="**/D3dWindMaskTest.class"/>
                   <exclude name="**/NetcdfD3dHisExchangeItemTest.class"/>
                   <exclude name="**/NetcdfD3dMapDataObjectTest.class"/>
                   <exclude name="**/EfdcDLLTest.class"/> 
                   <exclude name="**/EfdcGridExchangeItemLayerTest.class"/>
                   <exclude name="**/EfdcGridExchangeItemTest.class"/>
                   <exclude name="**/EfdcGridExchangeItemToxicsTest.class"/>
                   <exclude name="**/EfdcGridExchangeItemXspeciesTest.class"/>
                   <exclude name="**/EfdcModelInstanceTest.class"/>
                   <exclude name="**/EfdcRestartTest.class"/>
                   <exclude name="**/EfdcScalarExchangeItemLayerTest.class"/>
                   <exclude name="**/EfdcScalarExchangeItemTest.class"/>
                   <exclude name="**/EfdcScalarExchangeItemXspeciesTest.class"/>
                   <exclude name="**/EfdcWserExchangeItemTest.class"/>
                   <exclude name="**/SwanCalibWrapperTest.class"/>
                   <exclude name="**/SwanEnKFTest.class"/>
                   <exclude name="**/NetcdfResultWriterTest.class"/>



                   

                    <!-- ignore unit tests that fail on Teamcity because Python, PCRaster, PCRGLOBWB, THRIFT and/or ssh are not installed -->
                    <exclude name="**/AbstractModelBridgeTest.class"/>
                    <exclude name="**/AbstractIncrementModelBridgeTest.class"/>
                    <exclude name="**/ClusterPythonIncrementModelBridgeTest.class"/>
                    <exclude name="**/LocalPythonIncrementModelBridgeTest.class"/>
                    <exclude name="**/PcrglobwbBridgeTest.class"/>
                    <exclude name="**/WflowBmiBridgeTest.class"/>
                </fileset>
            </batchtest>
        	<formatter type="xml" usefile="true"/>
                <formatter type="plain" usefile="true"/>
            <classpath>
                <fileset dir="${projectbin}">
                    <include name="*.jar"/>
                </fileset>
                <pathelement path="${testbuilddir}"/>
            </classpath>
        </junit>

    </target>



    <target name="test" depends="build,testclasses">
        <mkdir dir="${testreportdir}"/>
        <mkdir dir="${testrundir}"/>

        <echo>Java library path = ${java.library.path}</echo>

        <junit printsummary="yes" dir="${projectdir}" fork="yes" timeout="1200000" maxmemory="${maxmemory}">
            <jvmarg value="-ea"/>
            <jvmarg value="-esa"/>
            <batchtest todir="${testreportdir}">
                <fileset dir="${testbuilddir}">
                    <include name="**/*Test.class"/>

                    <!-- BROKEN - FIX THEM -->
                   <exclude name="**/SomeBrokenTest.class"/>

                    <!-- ignore unit tests that fail on Teamcity because Python, PCRaster, PCRGLOBWB, THRIFT and/or ssh are not installed -->
                    <exclude name="**/AbstractModelBridgeTest.class"/>
                    <exclude name="**/AbstractIncrementModelBridgeTest.class"/>
                    <exclude name="**/ClusterPythonIncrementModelBridgeTest.class"/>
                    <exclude name="**/LocalPythonIncrementModelBridgeTest.class"/>
                    <exclude name="**/PcrglobwbBridgeTest.class"/>
                    <exclude name="**/WflowBmiBridgeTest.class"/>
                </fileset>
            </batchtest>
        	<formatter type="xml" usefile="true"/>
                <formatter type="plain" usefile="true"/>
            <classpath>
                <fileset dir="${projectbin}">
                    <include name="*.jar"/>
                </fileset>
                <pathelement path="${testbuilddir}"/>
            </classpath>
        </junit>

    </target>


    <target name="testPPC" depends="build,testclassesPPC">
        <mkdir dir="${testreportdir}"/>
        <mkdir dir="${testrundir}"/>

        <echo>Java library path = ${java.library.path}</echo>

    	<junit printsummary="withOutAndErr" dir="${projectdir}" fork="yes" timeout="1200000" maxmemory="${maxmemory}">
            <jvmarg value="-ea"/>
            <jvmarg value="-esa"/>
            <batchtest todir="${testreportdir}">
                <fileset dir="${testbuilddir}">
                    <include name="**/*Test.class"/>

                    <!-- BROKEN - FIX THEM -->
                   <!-- <exclude name="**/*SwanBBTest.class"/>
		    <exclude name="**/*EfdcDLLTest.class"/> -->
                </fileset>
            </batchtest>
        	<formatter type="xml" usefile="true"/>
            <!--<formatter type="plain" usefile="true"/>-->
            <classpath>
                <fileset dir="${projectbin}">
                    <include name="*.jar"/>
                </fileset>
                <pathelement path="${testbuilddir}"/>
            </classpath>
        </junit>

    </target>



    <target name="test-linux64-teamcity" >

	<!--
        <chmod perm="ugo+rx" dir="${projectbin}" includes="*.sh" verbose="true"/>
	<chmod perm="ugo+rx" dir="${projectbin}/linux64_gnu/bin" includes="**" verbose="true"/>
        <chmod perm="ugo+rx" dir="${projectbin}/linux64_gnu/lib" includes="**" verbose="true"/>
	-->

        <echo>Turning on X11 Windows server for GUI tests... </echo>
        <exec executable="Xvfb" os="Linux" spawn="true" searchpath="true" >
           <arg value=":1"/>
           <arg value="-screen"/>
           <arg value="0"/>
           <arg value="1024x768x24"/>
        </exec>
        <exec executable="Xvfb" os="Mac OS,Mac OS X,Darwin" spawn="true" searchpath="true">
           <arg value=":2"/>
           <arg value="-screen"/>
           <arg value="0"/>
           <arg value="1024x768x24"/>
        </exec>

        <ant target="test"/>

        <echo>Turning off X11 Windows server... </echo>
       	<exec executable="killall" os="Linux,Mac OS,Mac OS X,Darwin" searchpath="true" >
    	         <arg value="Xvfb"/>
    	</exec>
   </target>

   <target name="validate-xml">
       <validatexmlmodule module="algorithms" />
       <validatexmlmodule module="application" />
       <validatexmlmodule module="core" />
       <validatexmlmodule module="observers"/>
       <validatexmlmodule module="models" />
       <validatexmlmodule module="model_bmi"/>
       <validatexmlmodule module="model_damflow"/>
       <validatexmlmodule module="model_delft3d"/>
       <validatexmlmodule module="model_delwaq"/>
       <validatexmlmodule module="model_dflowfm_blackbox"/>
       <validatexmlmodule module="model_efdc_dll"/>
       <validatexmlmodule module="model_example_blackbox"/>
       <validatexmlmodule module="model_glm" />
       <validatexmlmodule module="model_gotm" />
       <validatexmlmodule module="model_nemo"/>
       <validatexmlmodule module="model_RainfallRunoffZhang"/>
       <validatexmlmodule module="model_reactive_advection"/>
	   <validatexmlmodule module="model_swan"/>
       <validatexmlmodule module="model_wflow"/>
     <validatexmlmodule module="model_openfoam"/>
   </target>

    <macrodef name="validatexmlmodule">
        <attribute name="module" default="NOT SET"/>
        <sequential>
            <echo>validate xml for module @{module}</echo>
            <ant antfile="build.xml" dir="@{module}" target="validate-xml" inheritAll="false" />
        </sequential>
    </macrodef>

</project>

