<?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=".">

  <!--
    =========================================================================
      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 '( 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>
  
  <!--
    =========================================================================
       Target:  complete_verify

      Purpose:  Additional verification stub for completion steps.
    =========================================================================
  -->
  <target name="step.complete_verify"/>
  </project>
