<?xml version="1.0"?>

<project name="VisAD" default="init" basedir="..">
	<description>
Build script for VisAD core packages
$Id: build.xml,v 1.6 2007/01/25 15:57:34 brucef Exp $

    init             -- print ant configuration 

    deps             -- complie VisAD dependencies

    visad            -- compile the VisAD package
    visad.examples   -- compile the visad examples

    javadoc          -- generate javadoc for all packages

    dist             -- clean, compile, and jar the entire VisAD distribution
    
    jar              -- compile and jar the entire VisAD distribution
    jar.src          -- jar the source for the entire VisAD distribution
    jar.docs         -- jar javadoc
    jar.examples     -- jar examples (binary and source)

    clean            -- clean all files generated by this build script
    visad.clean      -- clean only visad package binaries


    dods             -- compile the dods package
    loci             -- compile the loci package
    HTTPClient       -- compile the HTTPClient package
    Jama             -- compile the Jama package 
    gnu              -- compile the gnu package
    ncsa             -- compile the ncsa package
    nom              -- compile the nom package
    ucar             -- compile the ucar package
    edu              -- compile the edu package

  </description>

  <patternset id="visad.source">
  	<include name="edu/wisc/ssec/mcidas/**"/>
  	<include name="visad/*"/>
  	<include name="visad/bom/*"/>
  	<include name="visad/browser/*"/>
  	<include name="visad/collab/*"/>
  	<include name="visad/data/*"/>
  	<include name="visad/data/avi/*"/>
  	<include name="visad/data/bio/*"/>
  	<include name="visad/data/gif/*"/>
  	<include name="visad/data/ij/*"/>
  	<include name="visad/data/jai/*"/>
  	<include name="visad/data/mcidas/*"/>
  	<include name="visad/data/netcdf/*"/>
  	<include name="visad/data/qt/*"/>
  	<include name="visad/data/tiff/*"/>
  	<include name="visad/data/units/*"/>
  	<include name="visad/data/visad/*"/>
  	<include name="visad/data/visad/object/*"/>
  	<include name="visad/data/in/*"/>
  	<include name="visad/data/dods/*"/>
  	<include name="visad/data/netcdf/units/*"/>
  	<include name="visad/data/netcdf/in/*"/>
  	<include name="visad/data/netcdf/out/*"/>
  	<include name="visad/data/fits/*"/>
  	<include name="visad/data/vis5d/*"/>
  	<include name="visad/data/biorad/*"/>
  	<include name="visad/data/gis/*"/>
  	<include name="visad/data/text/*"/>
  	<include name="visad/data/hdfeos/*"/>
  	<include name="visad/data/hdfeos/hdfeosc/*"/>
  	<include name="visad/data/hdf5/hdf5objects/*"/>
  	<include name="visad/data/hdf5/*"/>
  	<include name="visad/data/amanda/*"/>
  	<include name="visad/util/*"/>
  	<include name="visad/java2d/*"/>
  	<include name="visad/java3d/*"/>
  	<include name="visad/cluster/*"/>
  	<include name="visad/python/*"/>
  	<include name="visad/matrix/*"/>
  	<include name="visad/math/*"/>
  	<include name="visad/formula/*"/>
  	<include name="visad/ss/*"/>
  	<include name="visad/jmet/*"/>
  	<include name="visad/paoloa/*"/>
  	<include name="visad/paoloa/spline/*"/>
  	<include name="visad/aune/*"/>
  	<include name="visad/benjamin/*"/>
  	<include name="visad/rabin/*"/>
  	<include name="visad/aeri/*"/>
  	<include name="visad/georef/*"/>
  	<include name="visad/meteorology/*"/>
  	<include name="visad/install/*"/>
  </patternset>

  <patternset id="HTTPClient.source">
    <include name="HTTPClient/*"/>
  </patternset>
  
  <patternset id="ucar.source">
		<include name="ucar/multiarray/*"/>
		<include name="ucar/util/*"/>
		<include name="ucar/netcdf/*"/>
		<include name="ucar/tests/*"/>  
  </patternset>

  <patternset id="dods.source">
		<include name="dods/dap/*"/>
		<include name="dods/dap/parser/*"/>
		<include name="dods/dap/Server/*"/>
		<include name="dods/util/*"/>    
  </patternset>

  <patternset id="gnu.source">
		<include name="gnu/regexp/*"/>    
  </patternset>

  <patternset id="loci.source">
		<include name="loci/formats/*"/>
	</patternset>
	
	<patternset id="nom.source">
		<include name="nom/tam/fits/*"/>
		<include name="nom/tam/util/*"/>
		<include name="nom/tam/test/*"/>	  
	</patternset>    

  <patternset id="edu.source">
		<include name="edu/wisc/ssec/mcidas/*"/>
		<include name="edu/wisc/ssec/mcidas/adde/*"/>    
  </patternset>

  <patternset id="ncsa.source">
		<include name="ncsa/hdf/hdf5lib/exceptions/*"/>
		<include name="ncsa/hdf/hdf5lib/*"/>
	</patternset>

  <patternset id="doc.packages">
    <include name="visad"/>
    <include name="visad/cluster"/>
    <include name="visad/collab"/>
    <include name="visad/java3d"/>
    <include name="visad/java2d"/>
    <include name="visad/python"/>
    <include name="visad/browser"/>
    <include name="visad/util"/>
    <include name="HTTPClient"/>
    <include name="ucar/multiarray"/>
    <include name="ucar/util"/>
    <include name="ucar/netcdf"/>
    <include name="ucar/tests"/>
    <include name="dods/dap"/>
    <include name="dods/dap/parser"/>
    <include name="dods/dap/Server"/>
    <include name="dods/util"/>
    <include name="gnu/regexp"/>
    <include name="visad/data"/>
    <include name="visad/data/in"/>
    <include name="visad/data/dods"/>
    <include name="visad/data/units"/>
    <include name="visad/data/netcdf/units"/>
    <include name="visad/data/netcdf/in"/>
    <include name="visad/data/netcdf/out"/>
    <include name="visad/data/netcdf"/>
    <include name="loci/formats"/>
    <include name="nom/tam/fits"/>
    <include name="nom/tam/util"/>
    <include name="nom/tam/test"/>
    <include name="visad/data/fits"/>
    <include name="visad/data/vis5d"/>
    <include name="edu/wisc/ssec/mcidas"/>
    <include name="edu/wisc/ssec/mcidas/adde"/>
    <include name="visad/data/mcidas"/>
    <include name="visad/data/avi"/>
    <include name="visad/data/bio"/>
    <include name="visad/data/biorad"/>
    <include name="visad/data/ij"/>
    <include name="visad/data/jai"/>
    <include name="visad/data/qt"/>
    <include name="visad/data/gif"/>
    <include name="visad/data/gis"/>
    <include name="visad/data/text"/>
    <include name="visad/data/tiff"/>
    <include name="visad/data/visad"/>
    <include name="visad/data/visad/object"/>
    <include name="visad/data/hdfeos/hdfeosc"/>
    <include name="visad/data/hdfeos"/>
    <include name="ncsa/hdf/hdf5lib/exceptions"/>
    <include name="ncsa/hdf/hdf5lib"/>
    <include name="visad/data/hdf5/hdf5objects"/>
    <include name="visad/data/hdf5"/>
    <include name="visad/matrix"/>
    <include name="visad/math"/>
    <include name="visad/formula"/>
    <include name="visad/ss"/>
    <include name="visad/jmet"/>
    <include name="visad/paoloa"/>
    <include name="visad/paoloa/spline"/>
    <include name="visad/aune"/>
    <include name="visad/benjamin"/>
    <include name="visad/rabin"/>
    <include name="visad/bom"/>
    <include name="visad/aeri"/>
    <include name="visad/data/amanda"/>
    <include name="visad/georef"/>
    <include name="visad/meteorology"/>
    <include name="visad/install"/>
  </patternset>

	<!-- files to include in the distribution jar file -->
	<patternset id="jar.include">
    <include name="visad/util/*.jhf" />
    <include name="visad/ss/*.gif" />
    <include name="loci/formats/readers.txt"/>
    <include name="loci/formats/writers.txt"/>
		<include name="DATE" />
		<include name="HTTPClient/**/*.class"/>
		<include name="visad/**/*.class"/>
		<include name="ucar/**/*.class"/>
		<include name="dods/**/*.class"/>
		<include name="gnu/**/*.class"/>
		<include name="loci/**/*.class"/>
		<include name="nom/**/*.class"/>
		<include name="ncsa/**/*.class"/>
		<include name="edu/**/*.class"/>
	</patternset>

	<!-- files to include in the source jar file -->
	<patternset id="jar.src.include">
		<include name="DATE" />
		<include name="HTTPClient/**/*.java"/>
		<include name="visad/**/*.java"/>
		<include name="ucar/**/*.java"/>
		<include name="dods/**/*.java"/>
		<include name="gnu/**/*.java"/>
		<include name="loci/**/*.java"/>
		<include name="nom/**/*.java"/>
		<include name="ncsa/**/*.java"/>
		<include name="edu/**/*.java"/>
	</patternset>

	<!-- filenames -->
	<property name="visad.jarfile" value="visad.jar" />
	<property name="visad.src.jarfile" value="visad_src.jar"/>
	<property name="examples.jarfile" value="visad_examples.jar" />
	<property name="docs.jarfile" value="visad_doc.jar" />
	<property name="date.file" value="DATE"/>

	<!-- directory settings -->
	<property name="doc.dir"        value="${basedir}/doc"/>
	<property name="visad.dir"      value="${basedir}/visad"/>
	<property name="loci.dir"       value="${basedir}/loci"/>
	<property name="dods.dir"       value="${basedir}/dods"/>
	<property name="HTTPClient.dir" value="${basedir}/HTTPClient"/>
	<property name="Jama.dir"       value="${basedir}/Jama"/>
	<property name="edu.dir"        value="${basedir}/edu"/>
	<property name="gnu.dir"        value="${basedir}/gnu"/>
	<property name="hdf5.dir"       value="${basedir}/ncsa"/>
	<property name="fits.dir"       value="${basedir}/nom"/>
	<property name="netcdf.dir"     value="${basedir}/ucar"/>
	<!-- lib.dir is relative to the basedir -->
	<property name="lib.dir"        value="${basedir}"/>

	<!-- compiler options -->
	<property name="source.ver"       value="1.4"/>
	<property name="target.ver"       value="1.4"/>
	<property name="debug.flag"       value="true"/>
	<property name="deprecation.flag" value="off"/>
	<property name="fail.flag"        value="true"/>
	<property name="max.mem"          value="512M"/>
	<!-- only used for visad target -->

	<!-- shared classpath -->
	<path id="project.classpath">
		<fileset dir="${lib.dir}">
			<include name="*.jar"/>
		</fileset>
		<pathelement path="${basedir}"/>
	</path>




	<target name="init">
		<echo>
== ANT ======================= 
ant java version: ${ant.java.version}
ant lib dir: ${ant.library.dir}
ant home: ${ant.home}
ant basedir: ${basedir} 

== JAVA ======================
java home: ${java.home}
java version: ${java.runtime.version}

== COMPILER OPTIONS ==========
source: ${source.ver}
target: ${target.ver}
debug(-g): ${debug.flag}
deprecation: ${deprecation.flag}
failonerror: ${fail.flag} 
visad Xmx: ${max.mem} 
    </echo>
	</target>




	<!-- compile dods folder -->
	<target name="dods" depends="init, ucar, gnu">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<patternset refid="dods.source"/>
			<classpath refid="project.classpath"/>
		</javac>
	</target>




	<!-- compile loci folder -->
	<target name="loci" depends="init">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<classpath refid="project.classpath"/>
			<patternset refid="loci.source"/>
		</javac>
	</target>





	<!-- compile HTTPClient folder -->
	<target name="HTTPClient" depends="init">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<classpath refid="project.classpath"/>
			<patternset refid="HTTPClient.source"/>
		</javac>
	</target>





	<!-- compile Jama folder --> 
	<target name="Jama" depends="init">
		<javac srcdir="${Jama.dir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<classpath refid="project.classpath"/>
		</javac>
	</target>






	<!-- compile gnu folder -->
	<target name="gnu" depends="init">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<patternset refid="gnu.source"/>
			<classpath refid="project.classpath"/>
		</javac>
	</target>






	<!-- compile ncsa folder -->
	<target name="ncsa" depends="init">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
      <patternset refid="ncsa.source"/>
			<classpath refid="project.classpath"/>
		</javac>
	</target>






	<!-- compile ncsa folder -->
	<target name="nom" depends="init">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<classpath refid="project.classpath"/>
			<patternset refid="nom.source"/>
		</javac>
	</target>






	<!-- compile ucar folder -->
	<target name="ucar" depends="init, HTTPClient">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<classpath refid="project.classpath"/>
			<patternset refid="ucar.source"/>
		</javac>

		<rmic base="${basedir}" verify="true">
			<include name="ucar/netcdf/*Remote*Impl.class"/>
			<include name="ucar/netcdf/NetcdfServer*.class"/>
			<classpath refid="project.classpath"/>
		</rmic>

	</target>





	<!-- compile edu folder -->
	<target name="edu">
		<javac sourcepath=""
		       srcdir="${basedir}" 
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<classpath refid="project.classpath"/>
			<patternset refid="edu.source"/>
		</javac>
	</target>




	<!-- compile visad/examples folder -->
	<target name="visad.examples" depends="init, visad">
		<javac srcdir="${visad.dir}/examples"
           source="${source.ver}" 
           target="${target.ver}"
           debug="${debug.flag}"
           deprecation="${deprecation.flag}">
			<classpath refid="project.classpath"/>
		</javac>
	</target>






	<!-- compile all the visad dependancies -->
	<target name="deps" depends="init, loci, dods, nom, ncsa, gnu"/>



  <!-- same as jar except does a clean first -->
	<target name="dist" depends="clean">
		<antcall target="jar"/>
	</target>






	<!-- compile visad package -->
	<target name="visad" depends="init">

		<!-- compile visad -->
		<javac sourcepath=""
		       srcdir="${basedir}"
           source="${source.ver}" 
           target="${target.ver}" 
           failonerror="${fail.flag}"
           debug="${debug.flag}" 
           deprecation="${deprecation.flag}"
           memoryMaximumSize="${max.mem}"
           fork="true">
			<classpath refid="project.classpath"/>
			<patternset refid="visad.source"/>
		</javac>

		<!-- generate RMI stubs -->
		<rmic base="${basedir}" verify="true">
			<include name="visad/**/*Remote*Impl.class"/>
			<classpath refid="project.classpath"/>
		</rmic>

	</target>




	<!-- Make the dist jar file -->
	<target name="jar" depends="init, deps, visad">

		<!-- write the DATE file -->
		<tstamp>
			<format property="date.value" pattern="EEE MMM dd HH:mm:ss zzz yyyy"/>
		</tstamp>
		<echo message="${date.value}" file="${basedir}/${date.file}"/>

		<!-- jar the class files -->
		<delete file="${visad.jarfile}"/>
    <jar destfile="${visad.jarfile}" filesonly="true">
      <manifest>
        <attribute name="Main-Class" value="visad.ss.SpreadSheet"/>
      </manifest>
      <fileset dir="${basedir}">
        <patternset refid="jar.include"/>
      </fileset>
    </jar>
	</target>




  <!-- make jar for all the source files -->
	<target name="jar.src" depends="init">

		<!-- write the DATE file -->
		<tstamp>
			<format property="date.value" pattern="EEE MMM dd HH:mm:ss zzz yyyy"/>
		</tstamp>
		<echo message="${date.value}" file="${basedir}/${date.file}"/>

		<!-- jar the class files -->
		<delete file="${visad.src.jarfile}"/>
    <jar destfile="${visad.src.jarfile}" filesonly="true">
      <fileset dir="${basedir}">
        <patternset refid="jar.src.include"/>
      </fileset>
    </jar>
	</target>



	<target name="jar.examples" depends="init, visad, visad.examples">
    <delete file="${examples.jarfile}"/>  
		<jar destfile="${examples.jarfile}" basedir="${visad.dir}"
        includes="examples/*.java, examples/*.class, examples/display_test.c"/>
	</target>




	<target name="jar.docs" depends="init, javadoc">
    <delete file="${docs.jarfile}"/>  
		<jar destfile="${docs.jarfile}" basedir="${basedir}">
			<include name="doc/**"/>
		</jar>
	</target>





	<target name="javadoc" depends="init">
	  
		<javadoc destdir="${doc.dir}" 
      access="private" 
      use="true" 
      notree="false" 
      nonavbar="false" 
      noindex="false" 
      splitindex="true" 
      author="true" 
      version="true" 
      nodeprecatedlist="false" 
      nodeprecated="false" 
      sourcepath="${basedir}" 
      breakiterator="yes"
      doctitle="VisAD Documentation">

			<packageset dir="${basedir}">
			  <patternset refid="doc.packages"/>
			</packageset>

			<link href="http://java.sun.com/products/java-media/3D/forDevelopers/J3D_1_3_API/j3dapi" />
			<link href="http://java.sun.com/j2se/1.4.2/docs/api" />
			<link href="http://logging.apache.org/log4j/docs/api" />

			<arg value="-J-Xmx512m"/>

			<classpath refid="project.classpath"/>
		</javadoc>
	</target>




	<target name="all" depends="init, clean, deps, visad, 
                              jar, javadoc, jar.src, jar.examples, jar.docs"/>





	<!-- Delete all files and dirs generated by this build script -->
	<target name="clean" depends="init, visad.clean, deps.clean">
		<delete failonerror="false">
			<fileset dir="${basedir}">
			  <include name="${visad.jarfile}"/>
			  <include name="${visad.src.jarfile}"/>
			  <include name="${docs.jarfile}"/>
			  <include name="${examples.jarfile}"/>
			  <include name="${date.file}"/>
		  </fileset>
		</delete>
		<delete dir="${doc.dir}" failonerror="false"/>
	</target>


  <target name="deps.clean" depends="init">
    <delete failonerror="false">
      <fileset dir="${loci.dir}" includes="**/*.class"/>
  		<fileset dir="${HTTPClient.dir}" includes="**/*.class"/>
  		<fileset dir="${Jama.dir}" includes="**/*.class"/>
  		<fileset dir="${dods.dir}" includes="**/*.class"/>
  		<fileset dir="${edu.dir}" includes="**/*.class"/>
  		<fileset dir="${gnu.dir}" includes="**/*.class"/>
  		<fileset dir="${hdf5.dir}" includes="**/*.class"/>
  		<fileset dir="${fits.dir}" includes="**/*.class"/>
  		<fileset dir="${netcdf.dir}" includes="**/*.class"/>
    </delete>
  </target>


	<!-- just cleans the VisAD package class files -->
	<target name="visad.clean" depends="init">
		<delete>
			<fileset dir="${visad.dir}" includes="**/*.class"/>
		</delete>
	</target>



</project>