<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="./tools/antipede/resources/stylesheets/layout.xsl"?>
<!DOCTYPE project [
  <!-- antipede -->    
  <!ENTITY import-antipede  SYSTEM "./tools/antipede/build.xtarget"> 

  <!ELEMENT project  ANY>
  <!ATTLIST project default CDATA #REQUIRED
                    basedir CDATA #IMPLIED
                    name CDATA #IMPLIED>  
                    
]>
<project default="interactive" basedir="." name="project build file">

<description>
                   * ===================================== *
                   |   Krysalis Centipede Build System     |
                   * ===================================== *
                                     by               
                                             
                   Nicola Ken Barozzi (nicolaken@apache.org)
                   Marc Johnson (mjohnson@apache.org)       
                   
                   
                   For a simple interactive build, simply 
                   run the build script (build.bar or build.sh)
</description>
 
  <!-- =================================================================== -->
  <!-- Basic build targets for the project                                 -->
  <!-- =================================================================== -->

  <!-- =================================================================== -->
  <!-- Interactive build                                                   -->
  <!-- =================================================================== -->
  <target name="interactive" description="Interactive Build" depends="-init">          
    <echo> 
    --------------------------------------------------------------

          ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor}   [${YEAR}]

    --------------------------------------------------------------
     Using ${ant.version}
     Build file ${ant.file}
    --------------------------------------------------------------   
     These are the most common build targets.   
     You can also invoke them directly; see build.xml for more info. 
     Builds will be in /build directory, distributions in /dist.        
        
     all -------------- creates the jars and the site      
     compile ---------- compiles the source code      
     test ------------- performs the jUnit tests       
     jar -------------- create the jar files
     docs ------------- generates the html docs - clean not needed        
     javadocs --------- generates the API documentation   
     site ------------- generates the html site (docs+reports)    
     clean ------------ cleans the build directory    
     dist ------------- creates src and bin distributions    
     scratchpad ------- build-run scratchpad code       
     contrib ---------- build-run contributed code    
     generate-records - generate excel records    
     generate-types --- generate word types    

    </echo>
    <property name="input.selection" value="all"/>        
    <centipede-user-input name="input.selection">Please select a target </centipede-user-input>   
    
    <antcall target="call-cent">
      <param name="cent-name"   value="centipede"/> 
      <param name="cent-target" value="splash"/> 
    </antcall>
 
    <antcall target="${input.selection}"/>
    
  </target>



  <!-- =================================================================== -->
  <!-- Interactive scratchpad builds                                       -->
  <!-- =================================================================== -->
  <target name="scratchpad" depends="compile" description="Interactive Scratchpad Build">
    <echo> 
    --------------------------------------------------------------
         
              ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor} SCRATCHPAD 
         
    --------------------------------------------------------------  
    Building with ${ant.version}  
    using build file ${ant.file}  
    --------------------------------------------------------------   
             
     These are SCRATCHPAD BUILDS. They are not guaranteed to work.
     You have been warned. 
     
     -
     -
     -
     -
     -
     -
     
    </echo> 
    <property name="input.selection" value=""/>
    <centipede-user-input name="input.selection">Please select a target </centipede-user-input>

    <ant antfile="${xlayout.source.scratchpad.targets.dir}/${input.selection}/xbuild.xml"/>

  </target>

  <!-- =================================================================== -->
  <!-- Interactive contrib builds                                       -->
  <!-- =================================================================== -->
  <target name="contrib" depends="compile" description="Interactive Contributors' Build">
    <echo> 
    --------------------------------------------------------------
         
              ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor}  CONTRIB
         
    --------------------------------------------------------------
    Building with ${ant.version}  
    using build file ${ant.file}  
    --------------------------------------------------------------   
             
     These are CONTRIB BUILDS. They are not guaranteed to work.
     You have been warned. 
     
     poibrowser - POIBrowser 0.10 GUI POI Viewer
     -
     -
     -
     -
     -
     
    </echo> 

    <property name="input.selection" value="poibrowser"/>
    <centipede-user-input name="input.selection">Please select a target </centipede-user-input>

    <ant antfile="${xlayout.source.contributions.targets.dir}/${input.selection}/xbuild.xml"/>
    
  </target>


  <!-- ================================== -->
  <!--              Compile               -->
  <!-- ================================== -->

  <target  name="compile"   depends="-init"
           description="Compile java source code">
           
    <antcall target="call-cent">
      <param name="cent-name"   value="centipede"/> 
      <param name="cent-target" value="compile"/> 
    </antcall>
    
  </target>               

  
  <!-- ================================== -->
  <!--             Build jars             -->
  <!-- ================================== -->

  <target  name="jar"   depends="-init"
           description="Compile java source code">

    <antcall target="call-cent">
      <param name="cent-name"   value="centipede"/> 
      <param name="cent-target" value="package"/> 
    </antcall>
    
  </target>     

  <!-- ====================================== -->
  <!--  dist target wo single build checks    -->
  <!-- ====================================== -->

  <target  name="dist"   depends="-init, clean, test, jar, site"
           description="Build distribution packages wo single build checks">

    <antcall target="call-cent">
      <param name="cent-name"   value="centipede"/> 
      <param name="cent-target" value="dist"/> 
    </antcall>
    
  </target>    
  
    
  <!-- ================================== -->
  <!--         Clean build dir            -->
  <!-- ================================== -->

  <target  name="clean"   depends="-init"
           description="Compile java source code">

    <antcall target="call-cent">
      <param name="cent-name"   value="centipede"/> 
      <param name="cent-target" value="clean"/> 
    </antcall>
    
  </target>     

  <!-- ================================== -->
  <!--         Run Junit tests            -->
  <!-- ================================== -->
  
  <target  name="test"   depends="-init, compile"
           description="Compile java source code">

 
    <antcall target="call-cent">
      <param name="cent-name"   value="junit"/> 
      <param name="cent-target" value="test"/> 
    </antcall>
 
    <antcall target="call-cent">
      <param name="cent-name"   value="junit"/> 
      <param name="cent-target" value="report"/> 
    </antcall>
   
  </target>     

  <!-- ================================== -->
  <!--      Generate project metrics      -->
  <!-- ================================== -->
  
  <target  name="metrics"   depends="-init, compile"
           description="Generate project metrics">

    <antcall target="call-cent">
      <param name="cent-name"   value="jdepend"/>
      <param name="cent-target" value="jdepend-html"/> 
    </antcall>
 
 </target>     

  
  <!-- ================================== -->
  <!--    Generates the documentation     -->
  <!-- ================================== -->
  
  <target  name="docs"   depends="-init"
           description="Compile java source code">

    <antcall target="call-cent">
      <param name="cent-name"   value="forrest"/> 
      <param name="cent-target" value="docs"/> 
    </antcall>
 
  </target>     

  <!-- ================================== -->
  <!--    Generates the site              -->
  <!-- ================================== -->
  
  <target  name="site"
           description="Makes all the site doco"
           depends="docs, 
                    test,
                    javadocs,  
                    metrics"/>

  
  <!-- ================================== -->
  <!--       Generates the java docs      -->
  <!-- ================================== -->
  
  <target  name="javadocs"   depends="-init"
           description="Compile java source code">

    <antcall target="call-cent">
      <param name="cent-name"   value="centipede"/> 
      <param name="cent-target" value="javadocs"/> 
    </antcall>

    <antcall target="call-cent">
      <param name="cent-name"   value="umldoclet"/> 
      <param name="cent-target" value="doclet"/> 
    </antcall>
        
  </target>     

  <!-- ================================== -->
  <!--       Check style                  -->
  <!-- ================================== -->
  
  <target  name="checkstyle"  depends="-init"
           description="generate-uml">
    
    <antcall target="call-cent">
      <param name="cent-name"   value="checkstyle"/> 
      <param name="cent-target" value="check"/> 
    </antcall>

  </target> 

  <!-- ================================== -->
  <!--       Generate records                -->
  <!-- ================================== -->
  
  <target  name="try"   depends="-init">

    <antcall target="call-cent">
      <param name="cent-name"   value="javasrc"/> 
      <param name="cent-target" value="javasrc"/> 
    </antcall>
    
  </target>     
    
  <!-- ================================== -->
  <!--       Generate records                -->
  <!-- ================================== -->
  
  <target  name="generate-records"   depends="-init"
           description="generate-records">

    <ant antfile="${xlayout.source.targets.dir}/record-generation/xbuild.xml"
            target="generate-records"/>
    
  </target>     

  <!-- ================================== -->
  <!--       Generate types                -->
  <!-- ================================== -->
  
  <target  name="generate-types"   depends="-init"
           description="generate-types">

    <ant antfile="${xlayout.source.targets.dir}/record-generation/xbuild.xml"
            target="generate-types"/>
    
  </target>     

  <!-- ================================== -->
  <!--    Test the main module stuff      -->
  <!-- ================================== -->
  
  <target  name="testmodule"   
           depends="clean, docs, compile, test, jar, metrics, javadocs"
           description="Testing that all major targets work; useful before a commit"/>

  <!-- ================================== -->
  <!--    Test the main module stuff  2   -->
  <!-- ================================== -->
  
  <target  name="testtargets"
           description="Testing that all major targets work indipendently; useful before a commit">
           
      <antcall target="clean"/>
      <antcall target="compile"/>
      <antcall target="clean"/>
      <antcall target="test"/>
      <antcall target="clean"/>
      <antcall target="jar"/>
      <antcall target="clean"/>
      <antcall target="docs"/>
      <antcall target="clean"/>
      <antcall target="metrics"/>
      <antcall target="clean"/>
      <antcall target="javadocs"/>

  </target>

  <!-- ================================== -->
  <!--         Test 4 distribution        -->
  <!-- ================================== -->

  <target  name="testall" depends="-init"
           description="Make big full test">
           
    <antcall target="gump"/>
    <antcall target="quickdist"/>
    
  </target>       
                      
  <!-- ================================== -->
  <!--        Target used by Gump         -->
  <!-- ================================== -->
  
  <target  name="gump"   
           depends="testmodule"
           description="Target used by Gump">
           
      <antcall target="testtargets"/>
      <antcall target="testmodule"/>
      <antcall target="all"/>
      
  </target>

  <!-- ================================== -->
  <!--        Generate all                -->
  <!-- ================================== -->
  
  <target  name="all"   
           depends="-init, jar, site"
           description="Generate all"/>
                      
  <!-- ================================== -->
  <!--   Create a cent.jar package        -->
  <!--   using an already deployed cent   -->
  <!-- ================================== -->
  
  <target  name="jar-cent"   depends="-init"
           description="Compile java source code">

    <antcall target="call-cent">
      <param name="cent-name"   value="centipede"/> 
      <param name="cent-target" value="jar-cent"/> 
    </antcall>
    
  </target>     

  <!-- =================================================================== -->
  <!-- Import Ant-Centipede -init targets - sets up basic build stuff                          -->
  <!-- =================================================================== -->
  <!--  
        This is the target that initializes tasks and properties used
        commonly in every other target.
        
        Remember to add depends="-init" to every target, so that this
        target is called before any other.
                 
        This target is internal; to make it unusable from the commandline,
        its name starts with a hyphen. To make it invisible when
        using -projecthelp, it lacks a description.
  -->      

    &import-antipede;
      
</project>