<?xml version="1.0" encoding="UTF-8"?>
<!--
  ===========================================================================
     File:  build.xml
  Purpose:  Build Central build process template for Build Central components.
  Local Targets     Usage
  ................  .........................................................
  none              Default target which performs no action.
  ===========================================================================
-->
<project name="build" default="none" basedir="." xsi:noNamespaceSchemaLocation="http://9.181.3.220/developerworks/schema/4.0/dw-document-4.0.xsd">
  
  <!--
    =========================================================================
      Properties
    =========================================================================
  -->
  
  <property environment="bc" />
  
  <!--
    =========================================================================
       Target:  distribute
      Purpose:  Override default action to do nothing (for now).
    =========================================================================
  -->
  
  <target name="distribute" />
  
  <!--
    =========================================================================
       Target:  none
      Purpose:  Warn the user this file should only be called with a specific
                target in mind.
    =========================================================================
  -->
  
  <target name="none">
    
    <fail message="This script should only be called with a specific target." />
  
  </target>
  
  <!--
    =========================================================================
    =========================================================================
      Begin default targets:
    =========================================================================
    =========================================================================
  -->
      
  
  <!--
    =========================================================================
       Target:  init
      Purpose:  Common initialization target.
    =========================================================================
  -->
  
  <target name="init">
    
    <propertyfile file="${BC_BUILD_RUNLOG}">
      
      <entry key="buildcentral.steps(attempts)" type="int" default="0" operation="+" />
    
    </propertyfile>
    
    <property file="${BC_BUILD_PROPERTIES}" />
    
    <property file="${BC_BUILD_RUNLOG}" />
    
    <!-- Set local defaults for values not already defined.                -->
    
    <property name="buildcentral.boot(level)" value="${buildcentral(id)}" />
    
    <property name="BC_BUILD_SCRIPT" value="build.xml" />
    
    <property name="root" location="." />
    
    <taskdef file="${buildcentral(home)}/bctasks.properties">
      
      <classpath>
        
        <pathelement location="${buildcentral(home)}/BCAntExtensions.jar" />
        
        <pathelement location="${buildcentral(home)}/javaAPI.jar" />
      
      </classpath>
    
    </taskdef>
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  start
      Purpose:  Starts/resumes the build process.
                This is the default entry point into the build process.
    =========================================================================
  -->
  
  <target name="start" depends="setup, build, distribute, complete" />
  
  
  <!--
    =========================================================================
       Target:  setup
      Purpose:  Performs the setup steps.
    =========================================================================
  -->
  
  <target name="setup" depends="step.setup_scm, step.setup_base, step.setup_delta,                    step.setup_nls, step.setup_build, step.setup_verify" />
  
  
  <!--
    =========================================================================
       Target:  setup_scm
      Purpose:  Initializes the source code management default settings.
    =========================================================================
  -->
  
  <target name="step.setup_scm" depends="init, setup_cmvc_pw, setup_cmvc_host, setup_cmvc_level" />
  
  <target name="setup_cmvc_pw" if="buildcentral.boot(pw)">
    
    <cmvcdefaults id="cmvcinfo" family="${buildcentral.boot(family)}" release="${buildcentral.boot(release)}" root="${root}" user="${buildcentral.boot(user)}" pw="${buildcentral.boot(pw)}" />
  
  </target>
  
  <target name="setup_cmvc_host" unless="buildcentral.boot(pw)">
    
    <cmvcdefaults id="cmvcinfo" family="${buildcentral.boot(family)}" release="${buildcentral.boot(release)}" root="${root}" user="${buildcentral.boot(user)}" />
  
  </target>
  
  <target name="setup_cmvc_level" unless="buildcentral.steps.step@setup_scm.cmvc_level(complete)" depends="setup_cmvc_pw, setup_cmvc_host,                    setup_cmvc_tracks, setup_cmvc_level_populate">
    
    <propertyfile file="${BC_BUILD_RUNLOG}">
      
      <entry key="buildcentral.steps.step@setup_scm.cmvc_level(complete)" type="date" value="now" />
    
    </propertyfile>
  
  </target>
  
  <target name="setup_cmvc_tracks">
    
    <condition property="has_tracks_to_build">
      
      <not>
        
        <or>
          
          <equals arg1="${buildcentral.boot(tracks)}" arg2="" trim="true" />
          
          <equals arg1="${buildcentral.boot(tracks)}" arg2="none" trim="true" />
        
        </or>
      
      </not>
    
    </condition>
  
  </target>
  
  <target name="setup_cmvc_level_populate" if="has_tracks_to_build">
    
    <cmvclevel refid="cmvcinfo" name="${buildcentral.boot(level)}" action="create" tracks="${buildcentral.boot(tracks)}" failifempty="no" setifempty="notracks" reportfile="${buildcentral.boot(xmllog)}" />
    
    <fail if="notracks" message="No tracks available for release:  ${buildcentral.boot(release)}" />
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  setup_base
      Purpose:  Extract the base code from CMVC in preparation for a new
                build tree.
    =========================================================================
  -->
  
  <target name="step.setup_base" depends="step.setup_scm">
    
    <cmvcextract refid="cmvcinfo" reportfile="${buildcentral.boot(xmllog)}" />
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  setup_delta
      Purpose:  Extract a delta level from CMVC in preparation for a build
                tree.
    =========================================================================
  -->
  
  <target name="step.setup_delta" depends="step.setup_scm, setup_delta_extract" />
  
  <target name="setup_delta_extract" if="has_tracks_to_build">
    
    <cmvcextract refid="cmvcinfo" level="${buildcentral.boot(level)}" reportfile="${buildcentral.boot(xmllog)}" />
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  setup_nls
      Purpose:  Stub for performing NLS setup.
    =========================================================================
  -->
  
  <target name="step.setup_nls" />
  
  
  <!--
    =========================================================================
       Target:  setup_build
      Purpose:  Stub for performing build execution setup.
    =========================================================================
  -->
  
  <target name="step.setup_build" />
  
  
  <!--
    =========================================================================
       Target:  setup_verify
      Purpose:  Additional verification stub for setup steps.
    =========================================================================
  -->
  
  <target name="step.setup_verify" />
  
  
  <!--
    =========================================================================
       Target:  build
      Purpose:  Performs the build steps.
    =========================================================================
  -->
  
  <target name="build" depends="step.build_release, step.build_verify" />
  
  
  <!--
    =========================================================================
       Target:  build_release
      Purpose:  Build the product release image(s).
    =========================================================================
  -->
  
  <target name="step.build_release" depends="init">
    
    <ant dir="${root}" antfile="${BC_BUILD_SCRIPT}" inheritAll="no" />
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  build_verify
      Purpose:  Additional verification stub for build steps.
    =========================================================================
  -->
  
  <target name="step.build_verify" />
  
  
  <!--
    =========================================================================
       Target:  distribute_connect
      Purpose:  Connect to the distribution point(s).
    =========================================================================
  -->
  
  <target name="step.distribute_connect">
    
    <echo message="Connecting to share ${buildcentral.distribute(share)}, as ${buildcentral.distribute(user)}." />
    
    <netuse source="${buildcentral.distribute(share)}" target="${buildcentral.distribute(drive)}" user="${buildcentral.distribute(user)}" pwfile="${buildcentral.distribute(pwfile)}" />
    
    <mkdir dir="${buildcentral.distribute(drive)}/${buildcentral.distribute(path)}" />
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  distribute_copy
      Purpose:  Distribute the product release image(s).
    =========================================================================
  -->
  
  <target name="step.distribute_copy" depends="step.distribute_connect">
    
    <copy todir="${buildcentral.distribute(drive)}/${buildcentral.distribute(path)}">
      
      <fileset dir="${root}">
        
        <exclude name="${buildcentral.boot(logdir)}/**/*" />
      
      </fileset>
    
    </copy>
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  distribute_nls
      Purpose:  Stub for distribution of NLS files.
    =========================================================================
  -->
  
  <target name="step.distribute_nls" />
  
  
  <!--
    =========================================================================
       Target:  distribute_verify
      Purpose:  Additional verification stub for distribution steps.
    =========================================================================
  -->
  
  <target name="step.distribute_verify" />
  
  
  <!--
    =========================================================================
       Target:  complete
      Purpose:  Performs the completion steps.
    =========================================================================
  -->
  
  <target name="complete" depends="init, step.complete_scm, step.complete_stats,                    step.complete_distribute, step.complete_verify" />
  
  
  <!--
    =========================================================================
       Target:  complete_scm
      Purpose:  Complete the CMVC level for the release.
    =========================================================================
  -->
  
  <target name="step.complete_scm" depends="step.setup_scm, complete_cmvc_level" />
  
  <target name="complete_cmvc_level" if="has_tracks_to_build">
    
    <cmvclevel refid="cmvcinfo" name="${buildcentral.boot(level)}" action="complete" reportfile="${buildcentral.boot(xmllog)}" />
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  complete_stats
      Purpose:  Complete the default build statistics.
    =========================================================================
  -->
  
  <target name="step.complete_stats" unless="buildcentral.steps.complete_stats(complete)" depends="init">
    
    <!-- Generate the HTML status report on the CMVC activity.           -->
    
    <style basedir="${root}" in="${buildcentral.boot(xmllog)}" out="${buildcentral(id)}.html" style="${buildcentral(home)}/cmvc2html.xsl">
      
      <outputproperty name="indent" value="yes" />
      
      <outputproperty name="method" value="html" />
    
    </style>
    
    <!-- Generate the plain text status report on the CMVC activity.     -->
    
    <style basedir="${root}" in="${buildcentral.boot(xmllog)}" out="${buildcentral(id)}.txt" style="${buildcentral(home)}/cmvc2text.xsl">
      
      <outputproperty name="indent" value="no" />
      
      <outputproperty name="method" value="text" />
    
    </style>
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  complete_distribute
      Purpose:  Completion stub for distribution steps.
    =========================================================================
  -->
  
  <target name="step.complete_distribute" depends="step.distribute_connect">
    
    <copy todir="${buildcentral.distribute(drive)}/${buildcentral.distribute(path)}">
      
      <fileset dir="${root}">
        
        <include name="${buildcentral(id)}.html" />
        
        <include name="${buildcentral(id)}.txt" />
        
        <include name="${buildcentral.boot(logdir)}/**/*" />
      
      </fileset>
    
    </copy>
    
    <echo message="rsh dcertp70 -l csbld dce_login &quot;-k /home/csbld/csbld.keytab csbld -e /usr/bin/ksh -c &apos;( cd /:/${buildcentral.distribute(path)}/.. &amp;&amp; ./rotl -f -b ${buildcentral(id)}Build)&apos;&quot;" />
    
    <exec executable="rsh" output="${buildcentral.boot(logdir)}/rsh.log" failonerror="true">
      
      <arg line="dcertp70 -l csbld dce_login &quot;-k /home/csbld/csbld.keytab csbld -e /usr/bin/ksh -c &apos;( cd /:/${buildcentral.distribute(path)}/.. &amp;&amp; ./rotl -f -b ${buildcentral(id)}Build)&apos;&quot;" />
    
    </exec>
  
  </target>
  
  
  <!--
    =========================================================================
       Target:  complete_verify
      Purpose:  Additional verification stub for completion steps.
    =========================================================================
  -->
  
  <target name="step.complete_verify" />
  
</project>
