<defaults>
  <default name="init">
  <!--
    =========================================================================
       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>
  </default>


  <default name="start">
  <!--
    =========================================================================
       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"/>
  </default>


  <default name="setup">
  <!--
    =========================================================================
       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"/>
  </default>


  <default name="step.setup_scm">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.setup_base">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.setup_delta">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.setup_nls">
  <!--
    =========================================================================
       Target:  setup_nls

      Purpose:  Stub for performing NLS setup.
    =========================================================================
  -->
  <target name="step.setup_nls"/>
  </default>

  <default name="step.setup_build">
  <!--
    =========================================================================
       Target:  setup_build

      Purpose:  Stub for performing build execution setup.
    =========================================================================
  -->
  <target name="step.setup_build"/>
  </default>


  <default name="step.setup_verify">
  <!--
    =========================================================================
       Target:  setup_verify

      Purpose:  Additional verification stub for setup steps.
    =========================================================================
  -->
  <target name="step.setup_verify"/>
  </default>


  <default name="build">
  <!--
    =========================================================================
       Target:  build

      Purpose:  Performs the build steps.
    =========================================================================
  -->
  <target name="build"
          depends="step.build_release, step.build_verify"/>
  </default>


  <default name="step.build_release">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.build_verify">
  <!--
    =========================================================================
       Target:  build_verify

      Purpose:  Additional verification stub for build steps.
    =========================================================================
  -->
  <target name="step.build_verify"/>
  </default>


  <default name="distribute">
  <!--
    =========================================================================
       Target:  distribute

      Purpose:  Performs the distribution steps.
    =========================================================================
  -->
  <target name="distribute"
          depends="init, step.distribute_connect, step.distribute_copy,
                   step.distribute_nls, step.distribute_verify"/>
  </default>


  <default name="step.distribute_connect">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.distribute_copy">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.distribute_nls">
  <!--
    =========================================================================
       Target:  distribute_nls

      Purpose:  Stub for distribution of NLS files.
    =========================================================================
  -->
  <target name="step.distribute_nls"/>
  </default>


  <default name="step.distribute_verify">
  <!--
    =========================================================================
       Target:  distribute_verify

      Purpose:  Additional verification stub for distribution steps.
    =========================================================================
  -->
  <target name="step.distribute_verify"/>
  </default>


  <default name="complete">
  <!--
    =========================================================================
       Target:  complete

      Purpose:  Performs the completion steps.
    =========================================================================
  -->
  <target name="complete"
          depends="init, step.complete_scm, step.complete_stats,
                   step.complete_distribute, step.complete_verify"/>
  </default>


  <default name="step.complete_scm">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.complete_stats">
  <!--
    =========================================================================
       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>
  </default>


  <default name="step.complete_distribute">
  <!--
    =========================================================================
       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 '( cd /:/${buildcentral.distribute(path)}/.. &amp;&amp; ./rotl -f -b ${buildcentral(id)}Build)'&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 '( cd /:/${buildcentral.distribute(path)}/.. &amp;&amp; ./rotl -f -b ${buildcentral(id)}Build)'&quot;"/>
    </exec>
  </target>
  </default>


  <default name="step.complete_verify">
  <!--
    =========================================================================
       Target:  complete_verify

      Purpose:  Additional verification stub for completion steps.
    =========================================================================
  -->
  <target name="step.complete_verify"/>
  </default>
</defaults>

