<?xml version="1.0"?>
<!-- Build file for genome.ucsc.edu QA library directory -->

<project name="qa" default="baseBuild" basedir=".">
    <target name="init">

        <!-- directories -->
        <property environment="env"/>
        <!-- N.B. use MACHTYPE due since scripts ref files that maybe in diff locations on diff OSs -->
        <property name="bin.dir" value="${env.HOME}/bin/${env.MACHTYPE}"/>
        <property name="build.dir" value="."/>
        <property name="src.dir" value="src"/>
        <property name="doc.dir" value="/usr/local/apache/htdocs/qa"/>
        <property name="classes.dir" value="${build.dir}/classes"/>

        <!-- compile props -->
        <property name="build.debug" value="on" />
        <property name="build.optimize" value="off" />
        <property name="build.compiler" value="modern" />
        <property name="build.includes" value="**/*.java"/>
        <property name="build.excludes" value="edu/ucsc/genome/qa/cgiCheck/HGNearCheck.java,edu/ucsc/genome/qa/lib/ErrorFile.java"/>

        <!-- javadoc props -->
        <property name="javadoc.packages" value="*"/>
        <property name="javadoc.dir" value="${doc.dir}/api"/>
       
        <!-- classpath fun -->
        <property name="httpunit.jar" value="/usr/share/java/httpunit.jar"/>
        <property name="rhino.jar" value="/usr/share/java/rhino.jar"/>
        <property name="mysql.jar" value="/cluster/bin/java/mysql-connector-java-3.0.16-ga-bin.jar"/>

        <path id="qa.classpath">
            <pathelement location="${classes.dir}"/>
            <pathelement path="${httpunit.jar}"/>
            <pathelement path="${rhino.jar}"/>
            <pathelement path="${mysql.jar}"/>
            <pathelement path="${java.class.path}/"/>
        </path>
    </target>

    <target name="build" depends="compile, generateWrappers, javaDoc, quickTest"/>
    <target name="baseBuild" depends="compile, generateWrappers"/>

    <target name="compile" depends="init"
        	  description="Compile the source files">
       <mkdir dir="${classes.dir}" />
         <javac srcdir="${src.dir}"
                destdir="${classes.dir}"
                debug="${build.debug}"
                optimize="${build.optimize}"
                deprecation="${build.deprecation}"
                includes="${build.includes}"
                excludes="${build.excludes}"
                classpathref="qa.classpath">
        </javac>
    </target>

    <target name="javaDoc" depends="init"
           description="Build the API documentation">
        <mkdir dir="${javadoc.dir}"/>
        <javadoc destdir="${javadoc.dir}" 
                 package="true"
                 packagenames="${javadoc.packages}"
                 classpathref="qa.classpath" >
            <sourcepath>
               <pathelement path="${src.dir}"/>
            </sourcepath>
       </javadoc>
    </target>

    <target name="setQuickTest">
        <property name="test.props" 
		  value="src/edu/ucsc/genome/qa/cgiCheck/quick.props" />
    </target>

    <target name="setHourTest">
        <property name="test.props" 
		  value="src/edu/ucsc/genome/qa/cgiCheck/hour.props" />
    </target>

    <target name="setFullTest">
        <property name="test.props" 
		  value="src/edu/ucsc/genome/qa/cgiCheck/full.props" />
    </target>

    <target name="someTest">
        <java classname="edu.ucsc.genome.qa.cgiCheck.TrackCheck"
              classpathref="qa.classpath">
           <arg value="${test.props}"/>
        </java>
        <java classname="edu.ucsc.genome.qa.cgiCheck.HGGeneCheck"
              classpathref="qa.classpath">
           <arg value="${test.props}"/>
        </java>
        <java classname="edu.ucsc.genome.qa.cgiCheck.PBGeneCheck"
               classpathref="qa.classpath">
           <arg value="${test.props}"/>
        </java>
    </target>

    <target name="quickTest" depends="init,setQuickTest,someTest"
	   description="Quick test of the tests">
    </target>

    <target name="hourTest" depends="init,setHourTest,someTest"
	   description="Roughly hour long test of site">
    </target>

    <target name="fullTest" depends="init,setFullTest,someTest"
	   description="Overnight automated test of site.">
    </target>

    <target name="generateWrappers" depends="init"
	   description="Generate wrapper scripts for program classes.">
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.cgiCheck"/>
           <param name="progClass" value="HGGeneCheck"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.cgiCheck"/>
           <param name="progClass" value="HGNearCheck"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.cgiCheck"/>
           <param name="progClass" value="PBGeneCheck"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.cgiCheck"/>
           <param name="progClass" value="TrackCheck"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.linkCheck"/>
           <param name="progClass" value="LinkCheck"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.monitor"/>
           <param name="progClass" value="ApacheMonitor"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.monitor"/>
           <param name="progClass" value="ApacheReport"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.monitor"/>
           <param name="progClass" value="DatabaseMonitor"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.monitor"/>
           <param name="progClass" value="FileCheck"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.qa.filter"/>
           <param name="progClass" value="ScoreFilter"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.util"/>
           <param name="progClass" value="GetMaxCoord"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.util"/>
           <param name="progClass" value="LoadQuality"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.util"/>
           <param name="progClass" value="ScaffoldQuality"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.util"/>
           <param name="progClass" value="LiftOverTest"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.util"/>
           <param name="progClass" value="LiftOverRescue"/>
        </antcall>
        <antcall target="generateWrapper" inheritAll="yes" inheritRefs="yes">
           <param name="progPkg" value="edu.ucsc.genome.util"/>
           <param name="progClass" value="SequenceCheck"/>
        </antcall>
    </target>

    <target name="clean" depends="init">
       <delete dir="${classes.dir}" quiet="yes"/>
       <delete dir="${javadoc.dir}" quiet="yes"/>
    </target>


    <!-- target to generate a run script for one of the program classes.
     -   call with `progPkg parameter set to package name and 'progClass'
     -   set to the class name, which is also the name of the of the 
     -   wrapper to generate  -->
    <target name="generateWrapper"
	   description="Generate a wrapper script for a class.">
        <property name="run.classpath" refid="qa.classpath"/>
        <property name="wrapper" value="${bin.dir}/${progClass}"/>
    
        <dependset>
            <!-- rebuild if template or build.xml changes -->
            <srcfilelist dir="misc" files="runTemplate.sh,build.xml"/>
            <srcfilelist dir="." files=""/>
            <targetfilelist dir="${bin.dir}" files="${progClass}"/>
        </dependset>  

        <!-- should be able specify a filterset inside of the copy
          -  instead of seperately, however this didn't work
          -  in ant 1.5.4 -->
        <copy file="misc/runTemplate.sh"
              tofile="${wrapper}" overwrite="yes"/>
        <replace file="${wrapper}" token="@JAVA_HOME@" value="${java.home}"/>
        <replace file="${wrapper}" token="@CLASSPATH@" value="${run.classpath}"/>
        <replace file="${wrapper}" token="@PROG_CLASS@" value="${progPkg}.${progClass}"/>
        <chmod file="${wrapper}" perm="a+x"/>
    </target>


</project>
