A. Build File Examples

This appendix presents some examples of how to write master and slave build files. A complete example project can be downloaded from Agamura's developer site .

      
<?xml version="1.0"?>

<project
  name="helloworld"
  default="build">

  <sysinfo />

  <!-- global framework settings -->
  <property
    name="target.framework"
    value="${framework::get-target-framework()}" />
  <property
    name="assembly.dir"
    value="${framework::get-assembly-directory(target.framework)}" />

  <!-- global project settings -->
  <property
    name="project.version"
    value="1.0" />
  <property
    name="build.dir"
    value="build" />
  <property
    name="install.dir"
    value="/usr/local"
    if="${platform::is-unix()}" />
  <property
    name="install.dir"
    value="${sys.env.ProgramFiles}"
    if="${platform::is-win32()}" />

  <!-- default configuration -->
  <property
    name="project.config"
    value="debug" /> <!-- debug|release -->
  <property
    name="package.config"
    value="dist" /> <!-- dist|src -->

  <!-- named configurations -->
  <target
    name="init"
    description="Initializes building properties">
    <call target="${project.config}" />
  </target>

  <target
    name="init-package"
    description="Initializes packaging properties">
    <call target="${package.config}" />
  </target>

  <target
    name="debug"
    description="Configures a debug build">
    <property
      name="build.debug"
      value="true" />
    <property
      name="package.name"
      value="${nant.project.name}-${project.version}-${project.config}" />
  </target>

  <target
    name="release"
    description="Configures a release build">
    <property
      name="project.config"
      value="release" />
    <property
      name="build.debug"
      value="false"/>
    <property
      name="package.name"
      value="${nant.project.name}-${project.version}" />
  </target>

  <target
    name="dist"
    description="Configures a distribution package">
    <property
      name="dist"
      value="true" />
    <property
      name="src"
      value="false" />
    <property
      name="archive.name"
      value="${package.name}.zip" />
    <fileset
      id="archive.set"
      basedir="${build.dir}">
      <include name="../AUTHORS" />
      <include name="../COPYRIGHT" />
      <include name="../LICENSE" />
      <include name="${package.name}/**" />
    </fileset>
  </target>

  <target
    name="src"
    description="Configures a source package">
    <property
      name="package.config"
      value="src" />
    <property
      name="dist"
      value="false" />
    <property
      name="src"
      value="true" />
    <property
      name="temp.dir"
      value="/tmp"
      if="${platform::is-unix()}" />
    <property
      name="temp.dir"
      value="${sys.env.TEMP}"
      if="${platform::is-win32()}" />
    <property
      name="archive.src.dir"
      value="${temp.dir}/${nant.project.name}-${project.version}" />
    <property
      name="archive.name"
      value="${nant.project.name}-${project.version}.src.zip" />
    <fileset
      id="archive.set"
      basedir="${temp.dir}">
      <include name="${nant.project.name}-${project.version}/**" />
    </fileset>
  </target>

  <!-- build tasks -->
  <target
    name="build"
    depends="init"
    description="Builds the binaries for the current configuration">
    <nant target="${project.config} build">
      <buildfiles basedir="src">
        <include name="**/*.build" />
      </buildfiles>
    </nant>
  </target>

  <target
    name="test"
    depends="init"
    description="Tests the current configuration">
    <nant
      target="${project.config} ${target::get-current-target()}">
      <buildfiles basedir="src">
        <include name="**/*.build" />
      </buildfiles>
    </nant>
  </target>

  <target
    name="clean"
    depends="init"
    description="Deletes the current configuration">
    <delete
      dir="${build.dir}/${package.name}"
      failonerror="false" />
  </target>

  <target
    name="clean-all"
    description="Deletes all the configurations">
    <delete
      dir="${build.dir}"
      failonerror="false" />
    <delete failonerror="false">
      <fileset basedir=".">
        <include name="*.zip" />
      </fileset>
    </delete>
  </target>

  <target
    name="install"
    depends="build"
    description="Installs the current configuration">
    <mkdir
      dir="${install.dir}/${package.name}"
      failonerror="false" />
    <copy
      todir="${install.dir}/${package.name}"
      overwrite="true">
      <fileset basedir="${build.dir}/${package.name}">
        <include name="doc/**" />
        <include name="bin/*.dll" />
        <include name="bin/*.exe" />
      </fileset>
    </copy>
  </target>

  <target
    name="uninstall"
    depends="init"
    description="Uninstalls the current configuration">
    <delete
      dir="${install.dir}/${package.name}"
      failonerror="false" />
  </target>

  <target
    name="package"
    depends="init init-package"
    description="Creates a zip archive for the current configuration">
    <delete
      file="${archive.name}"
      failonerror="false" />
    <if test="${src}">
      <mkdir
        dir="${archive.src.dir}"
        failonerror="false" />
      <copy
        todir="${archive.src.dir}"
        overwrite="true">
        <fileset basedir=".">
          <include name="**" />
          <exclude name="*.zip" />
          <exclude name="**/build/**" />
        </fileset>
      </copy>
    </if>
    <if test="${dist}">
      <call target="build" />
    </if>
    <zip zipfile="${archive.name}">
      <fileset refid="archive.set" />
    </zip>
    <if test="${src}">
      <delete
        dir="${archive.src.dir}"
        failonerror="false" />
    </if>
    <echo
      message=
        "Created archive at file://${nant.project.basedir}/${archive.name}" />
  </target>
</project>