blob: 568f4d3ca3ac263c7509e8041af0f533877b06a6 [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://nant.sourceforge.net/release/0.85/nant.xsd">
<!-- ============================================================================================ -->
<!-- P R O P E R T Y D E F I N I T I O N S -->
<!-- ============================================================================================ -->
<!-- global project settings -->
<property name="project.cls.compliant" value="true" unless="${property::exists('project.cls.compliant')}" />
<property name="project.release.type" value="SNAPSHOT" unless="${property::exists('project.release.type')}" />
<property name="project.version.full" value="${project.version + if(project.release.type == 'snapshot', '-' + project.release.type, '')}" dynamic="true" />
<property name="project.startyear" value="2005" />
<property name="build.dir" value="${basedir}/build" />
<property name="doc.dir" value="${build.dir}/doc" />
<property name="lib.dir" value="${path::combine(basedir, 'lib')}" dynamic="true" />
<property name="lib.family.dir" value="${path::combine(lib.dir, framework::get-family(framework::get-target-framework()))}" dynamic="true" />
<property name="lib.framework.dir" value="${path::combine(lib.family.dir, version::to-string(framework::get-version(framework::get-target-framework())))}" dynamic="true" />
<property name="package.dir" value="${basedir}/package" />
<property name="src.package.name" value="${project.name + '-' + project.version + if(project.release.type == 'SNAPSHOT', '-' + project.release.type, '') + '-src.zip'}" />
<property name="bin.package.name" value="${project.name + '-' + project.version + if(project.release.type == 'SNAPSHOT', '-' + project.release.type, '') + '-bin.zip'}" />
<!-- default configuration -->
<property name="build.defines" value="" />
<property name="build.noskip" value="false" />
<property name="build.skip" value="false" />
<property name="build.skip.release" value="false" unless="${property::exists('build.skip.release')}" />
<property name="compile.skip" value="false" unless="${property::exists('compile.skip')}" />
<property name="current.build.config" value="${if(project.release.type == 'release', 'release', 'debug')}" overwrite="false" />
<property name="current.build.framework" value="${framework::get-target-framework()}" overwrite="false" />
<property name="current.build.defines" value="${build.defines}" />
<property name="build.framework.strings" value="net-2.0,net-3.5,net-4.0,mono-2.0,netcf-2.0,netcf-3.5" unless="${property::exists('build.framework.strings')}"/>
<property name="current.build.framework.assembly.dir" value="${framework::get-assembly-directory(framework::get-target-framework())}" dynamic="true" />
<property name="build.config.strings" value="${if(property::exists('configuration'), configuration, if(build.skip.release == 'true', 'debug', 'debug,release'))}" dynamic="true" />
<!-- Figure out the user's HOME directory -->
<property name="user.home" value="${environment::get-variable('HOME')}"
if="${environment::variable-exists('HOME') and platform::is-unix()}"
unless="${property::exists('user.home')}" />
<property name="user.home" value="${environment::get-variable('USERPROFILE')}"
if="${environment::variable-exists('USERPROFILE') and platform::is-windows()}"
unless="${property::exists('user.home')}" />
<fail message="The HOME environment variable is not defined. Please set it to your home directory."
unless="${property::exists('user.home')}" if="${platform::is-unix()}" />
<fail message="The USERPROFILE environment variable is not defined. Please set it to your home directory."
unless="${property::exists('user.home')}" if="${platform::is-windows()}" />
<!-- Figure out the NANT repositories -->
<property name="nant.remote.repo" value="${environment::get-variable('NANT_REMOTE_REPO')}"
if="${environment::variable-exists('NANT_REMOTE_REPO')}"
unless="${property::exists('nant.remote.repo')}" />
<property name="nant.local.repo" value="${environment::get-variable('NANT_REPO')}/local"
if="${environment::variable-exists('NANT_REPO')}"
unless="${property::exists('nant.local.repo')}" />
<property name="nant.local.repo" value="${user.home}/.nant/repository/local"
unless="${property::exists('nant.local.repo')}" />
<!-- Figure out the keyfile location -->
<property name="snk.file" value="${environment::get-variable('ACTIVEMQ_DOTNET_SNK')}"
if="${environment::variable-exists('ACTIVEMQ_DOTNET_SNK')}"
unless="${property::exists('snk.file')}" />
<property name="snk.file" value="${basedir}/keyfile/NMSKey.snk"
if="${not property::exists('snk.file')}" />
<!-- ============================================================================================ -->
<!-- I N I T I A L I Z A T I O N T A R G E T S -->
<!-- ============================================================================================ -->
<target name="init" description="Initializes build properties">
<!-- enabled the release or debug configuration -->
<call target="set-${current.build.config}-configuration" />
<!-- Check to see if our build setup for the target framework -->
<if test="${not(target::exists('set-'+current.build.framework+'-framework-configuration'))}">
<fail message="The '${current.build.framework}' framework is not supported by this version of ActiveMQ .NET" />
</if>
<call target="set-${current.build.framework}-framework-configuration" />
<!-- Check to see current platform supports the target framework -->
<if test="${framework::exists(current.build.framework)}">
<property name="build.skip" value="false" />
</if>
<if test="${not framework::exists(current.build.framework)}">
<if test="${build.noskip}">
<fail message="${current.build.framework.name} is not available." />
</if>
<if test="${not(build.noskip)}">
<echo message="${current.build.framework.name} is not available. Build skipped." />
<property name="build.skip" value="true" />
</if>
</if>
<!-- Check to see if we should skip this build framework. -->
<if test="${not(build.skip)}">
<if test="${property::exists('build.'+current.build.framework+'.skip')}">
<property name="build.skip" value="true" />
<echo message="The '${current.build.framework}' framework is not supported by this version of ActiveMQ .NET" />
</if>
</if>
<property name="current.build.keysign" value="${current.build.framework.sign}" />
<property name="build.bin.dir" value="${build.dir}/${current.build.framework}/${current.build.config}" />
<if test="${not(build.skip)}">
<echo message="Doing ${if(current.build.keysign,'a signed','an unsigned')} ${current.build.config} build for the ${current.build.framework.name} framework" />
<mkdir dir="${build.bin.dir}" />
</if>
<call target="dependency-init" />
</target>
<!-- Generate four-digit build number -->
<target name="generate-build-number">
<if test="${not property::exists('project.version.numeric')}">
<script language="C#">
<imports>
<import namespace="System.Globalization" />
<import namespace="System.Threading" />
</imports>
<code>
<!-- Format for assembly revision is the number of days from the year the project 'started', property project.startyear. -->
<![CDATA[
public static void ScriptMain(Project project)
{
int startYear = Convert.ToInt32(project.Properties["project.startyear"]);
DateTime start = new DateTime(startYear, 1, 1);
TimeSpan ts = DateTime.Now - start;
project.Properties["project.version.numeric"] = project.Properties["project.version"].ToString() + "." + ts.Days.ToString();
}
]]>
</code>
</script>
</if>
</target>
<!-- Generate assemblyinfo.cs files -->
<target name="generate-assemblyinfo" depends="generate-build-number" description="Generate the assembly info for the path in assemblyinfo.filename">
<asminfo output="${assemblyinfo.filename}" language="CSharp">
<imports>
<import namespace="System" />
<import namespace="System.Reflection" />
<import namespace="System.Runtime.InteropServices" />
</imports>
<attributes>
<attribute type="ComVisibleAttribute" value="false" />
<attribute type="CLSCompliantAttribute" value="${project.cls.compliant}" />
<attribute type="AssemblyTitleAttribute" value="${project.short_description}" />
<attribute type="AssemblyDescriptionAttribute" value="${project.description}" />
<attribute type="AssemblyConfigurationAttribute" value="${project.release.type}" />
<attribute type="AssemblyCompanyAttribute" value="http://activemq.apache.org/nms" />
<attribute type="AssemblyProductAttribute" value="${project.short_description}" />
<attribute type="AssemblyCopyrightAttribute" value="Copyright (C) ${project.startyear}-${datetime::get-year(datetime::now())} Apache Software Foundation" />
<attribute type="AssemblyTrademarkAttribute" value="" />
<attribute type="AssemblyCultureAttribute" value="" />
<attribute type="AssemblyVersionAttribute" value="${project.version.numeric}" />
<attribute type="AssemblyInformationalVersionAttribute" value="${project.version}" />
</attributes>
</asminfo>
</target>
<!-- ============================================================================================ -->
<!-- C O N F I G U R A T I O N T A R G E T S -->
<!-- ============================================================================================ -->
<target name="set-noskip-configuration" description="Disable skipping builds">
<property name="project.noskip" value="true" />
</target>
<target name="set-debug-configuration" description="Enabled 'debug' builds">
<property name="current.build.config" value="debug" />
<property name="current.build.config.debug" value="true" />
<property name="current.build.config.release" value="false" />
<property name="current.build.defines" value="${build.defines}DEBUG,TRACE," dynamic="true" />
<property name="csc.debug" value="Full" />
<property name="csc.optimize" value="false" />
</target>
<target name="set-release-configuration" description="Enabled 'release' builds">
<property name="current.build.config" value="release" />
<property name="current.build.config.release" value="true" />
<property name="current.build.config.debug" value="false" />
<property name="csc.debug" value="Full" />
<property name="csc.optimize" value="true" />
</target>
<target name="set-net-2.0-framework-configuration">
<property name="current.build.framework" value="net-2.0" />
<property name="current.build.framework.name" value=".NET 2.0" />
<property name="current.build.defines" value="${build.defines}NET,NET_2_0" dynamic="true" />
<property name="current.build.framework.sign" value="true" />
<property name="link.sdkdoc.version" value="SDK_v2_0" />
<property name="link.sdkdoc.web" value="true" />
<!-- Use the .NET 3.5 compiler for improved language features. Still targets same runtime. -->
<if test="${framework::exists('net-3.5')}">
<property name="nant.settings.currentframework" value="net-3.5" />
</if>
</target>
<target name="set-net-3.5-framework-configuration">
<property name="current.build.framework" value="net-3.5" />
<property name="current.build.framework.name" value=".NET 3.5" />
<property name="current.build.defines" value="${build.defines}NET,NET_2_0,NET_3_5" dynamic="true" />
<property name="current.build.framework.sign" value="true" />
<property name="link.sdkdoc.version" value="SDK_v6_1" />
<property name="link.sdkdoc.web" value="true" />
<if test="${framework::exists(current.build.framework)}">
<property name="nant.settings.currentframework" value="${current.build.framework}" />
</if>
</target>
<target name="set-net-4.0-framework-configuration">
<property name="current.build.framework" value="net-4.0" />
<property name="current.build.framework.name" value=".NET 4.0" />
<property name="current.build.defines" value="${build.defines}NET,NET_2_0,NET_3_5,NET_4_0" dynamic="true" />
<property name="current.build.framework.sign" value="true" />
<property name="link.sdkdoc.version" value="SDK_v7_0" />
<property name="link.sdkdoc.web" value="true" />
<property name="nant.settings.currentframework" value="${current.build.framework}" />
</target>
<target name="set-netcf-2.0-framework-configuration">
<property name="current.build.framework" value="netcf-2.0" />
<property name="current.build.framework.name" value=".NET Compact Framework 2.0" />
<property name="current.build.defines" value="${build.defines}PocketPC,NETCF,NETCF_2_0" dynamic="true" />
<property name="current.build.framework.sign" value="true" />
<property name="link.sdkdoc.version" value="SDK_v1_1" />
<property name="link.sdkdoc.web" value="true" />
<if test="${framework::exists(current.build.framework)}">
<property name="nant.settings.currentframework" value="${current.build.framework}" />
</if>
</target>
<target name="set-netcf-3.5-framework-configuration">
<property name="current.build.framework" value="netcf-3.5" />
<property name="current.build.framework.name" value=".NET Compact Framework 3.5" />
<property name="current.build.defines" value="${build.defines}PocketPC,NETCF,NETCF_3_5" dynamic="true" />
<property name="current.build.framework.sign" value="true" />
<property name="link.sdkdoc.version" value="SDK_v3_5" />
<property name="link.sdkdoc.web" value="true" />
<if test="${framework::exists(current.build.framework)}">
<property name="nant.settings.currentframework" value="${current.build.framework}" />
</if>
</target>
<target name="set-mono-2.0-framework-configuration">
<property name="current.build.framework" value="mono-2.0" />
<property name="current.build.framework.name" value="Mono 2.0" />
<property name="current.build.defines" value="${build.defines}MONO,MONO_2_0" dynamic="true" />
<property name="current.build.framework.sign" value="true" />
<property name="link.sdkdoc.version" value="SDK_v1_1" />
<property name="link.sdkdoc.web" value="true" />
<if test="${framework::exists(current.build.framework)}">
<property name="nant.settings.currentframework" value="${current.build.framework}" />
</if>
</target>
<!-- ============================================================================================ -->
<!-- C O M P I L E T A R G E T S -->
<!-- ============================================================================================ -->
<target name="compile-all" description="Compile all build configurations for all runtime configurations">
<echo message="Compiling all build configurations for all runtime configurations." />
<foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
<foreach item="String" in="${build.config.strings}" delim="," property="current.build.config">
<call target="compile-target" />
</foreach>
</foreach>
</target>
<target name="compile-target" depends="init, download-vendor, conditional-compile" />
<target name="conditional-compile" depends="init" unless="${build.skip or compile.skip}"
description="Conditionaly compiles all the modules if build framework and type are supported">
<call target="compile" />
</target>
<target name="compile" description="Compile everything">
<call target="compile-main" cascade="false" />
<call target="compile-test" cascade="false" />
</target>
<target name="compile-main" depends="init" description="Build the main library">
<echo message="Building the ${project.name} library" />
<property name="assemblyinfo.filename" value="src/main/csharp/CommonAssemblyInfo.cs" />
<call target="generate-assemblyinfo" />
<csc if="${current.build.keysign}" keyfile="${snk.file}" target="library"
define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
output="${build.bin.dir}/${project.name}.dll" doc="${build.bin.dir}/${project.name}.xml">
<nowarn>
<warning number="1591" /> <!-- do not report warnings for missing XML comments -->
</nowarn>
<sources failonempty="true">
<include name="src/main/csharp/**.cs" />
</sources>
<references refid="dependencies" />
</csc>
<csc if="${not current.build.keysign}" target="library"
define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
output="${build.bin.dir}/${project.name}.dll" doc="${build.bin.dir}/${project.name}.xml">
<nowarn>
<warning number="1591" /> <!-- do not report warnings for missing XML comments -->
</nowarn>
<sources failonempty="true">
<include name="src/main/csharp/**.cs" />
</sources>
<references refid="dependencies" />
</csc>
<call target="copy-content" />
</target>
<!-- Compile the nms-test module -->
<target name="compile-test" depends="compile-main" description="Build the test library">
<echo message="Building the ${project.name}.Test library" />
<property name="assemblyinfo.filename" value="src/test/csharp/CommonAssemblyInfo.cs" />
<call target="generate-assemblyinfo" />
<csc if="${current.build.keysign}" keyfile="${snk.file}" target="library"
define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
output="${build.bin.dir}/${project.name}.Test.dll" doc="${build.bin.dir}/${project.name}.Test.xml">
<nowarn>
<warning number="1591" /> <!-- do not report warnings for missing XML comments -->
<warning number="3016" /> <!-- do not report warnings for array parameters -->
</nowarn>
<sources failonempty="true">
<include name="src/test/csharp/**.cs" />
</sources>
<references refid="test.dependencies" />
</csc>
<csc if="${not current.build.keysign}" target="library"
define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
output="${build.bin.dir}/${project.name}.Test.dll" doc="${build.bin.dir}/${project.name}.Test.xml">
<nowarn>
<warning number="1591" /> <!-- do not report warnings for missing XML comments -->
<warning number="3016" /> <!-- do not report warnings for array parameters -->
</nowarn>
<sources failonempty="true">
<include name="src/test/csharp/**.cs" />
</sources>
<references refid="test.dependencies" />
</csc>
<call target="copy-content" />
</target>
<target name="copy-content">
<foreach item="File" property="content.filename">
<in>
<items refid="content.filenames" />
</in>
<do>
<copy todir="${build.bin.dir}" file="${content.filename}" if="${not file::up-to-date(content.filename, '${build.bin.dir}/${content.filename}')}" />
</do>
</foreach>
</target>
<!-- ============================================================================================ -->
<!-- I N S T A L L T A R G E T S -->
<!-- ============================================================================================ -->
<target name="install-all" description="Install all build configurations for all runtime configurations">
<echo message="Installing all build configurations for all runtime configurations." />
<foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
<foreach item="String" in="${build.config.strings}" delim="," property="current.build.config">
<call target="install" />
</foreach>
</foreach>
</target>
<!-- Install the modules to the local repo -->
<target name="install" depends="init, compile-target, conditional-install"
description="Install the artifacts into the nant repo" />
<target name="conditional-install" unless="${build.skip}"
description="Install the artifacts into the nant repo">
<property name="path" value="${project.group}/${project.name}/${project.version.full}/${current.build.framework}/${current.build.config}" />
<foreach item="File" property="install.filename">
<in>
<items refid="install.filenames" />
</in>
<do>
<property name="repo.task.artifact" value="${path}/${path::get-file-name(install.filename)}" />
<property name="repo.task.src" value="${install.filename}" />
<property name="repo.task.dest" value="${nant.local.repo}/${repo.task.artifact}" />
<mkdir dir="${directory::get-parent-directory(repo.task.dest)}" />
<copy file="${repo.task.src}" tofile="${repo.task.dest}" />
</do>
</foreach>
</target>
<!-- ============================================================================================ -->
<!-- R E P O D O W N L O A D T A R G E T S -->
<!-- ============================================================================================ -->
<target name="download-vendor-all" description="Download vendor files for all runtime configurations">
<echo message="Downloading vendor files for all runtime configurations." />
<property name="current.build.config" value="release" />
<foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
<call target="download-vendor" />
</foreach>
</target>
<target name="download-vendor" depends="vendor-init, conditional-download"
description="Download the vendor artifacts from the nant repo" />
<target name="conditional-download" unless="${build.skip}"
description="Download the artifacts from the nant repo">
<!-- Iterate over the defined vendor filesets. -->
<foreach item="String" in="${vendor.fileset.names}" delim="," property="current.vendor">
<property name="vendor.name" value="${property::get-value(current.vendor + '.name')}" />
<property name="vendor.group" value="${property::get-value(current.vendor + '.group')}" />
<property name="vendor.version" value="${property::get-value(current.vendor + '.version')}" />
<property name="vendor.filenames" value="${property::get-value(current.vendor + '.filenames')}" />
<property name="local.repo.vendor.path" value="${nant.local.repo}/${vendor.group}/${vendor.name}/${vendor.version}/${current.build.framework}/${current.build.config}" />
<property name="lib.path" value="lib/${vendor.name}/${current.build.framework}" />
<!--
Update the LIB folder with the latest version of the file. If there is a newer version
installed in the local repository, then that version will be copied into the LIB folder.
-->
<foreach item="String" in="${vendor.filenames}" delim="," property="repo.task.artifact">
<property name="lib.task.dest" value="${lib.path}/${repo.task.artifact}" />
<mkdir dir="${directory::get-parent-directory(lib.task.dest)}" />
<property name="repo.task.src" value="${local.repo.vendor.path}/${repo.task.artifact}" />
<copy file="${repo.task.src}" tofile="${lib.task.dest}" if="${file::exists(repo.task.src)}" />
<if test="${not file::exists(lib.task.dest)}">
<echo message="Required dependent assembly ${repo.task.artifact} from ${vendor.name} for ${current.build.framework.name} is not available. Build skipped." />
<property name="build.skip" value="true" />
</if>
</foreach>
</foreach>
</target>
<!-- ============================================================================================ -->
<!-- T E S T T A R G E T S -->
<!-- ============================================================================================ -->
<target name="test" depends="test-debug" description="Alias test target to test-debug" />
<target name="test-all" depends="test-debug, test-release" description="Test all build configurations for all runtime configurations" />
<target name="test-debug" depends="" description="Test debug build configurations for all runtime configurations">
<property name="current.build.config" value="debug" />
<call target="test-frameworks" />
</target>
<target name="test-release" depends="" description="Test release build configurations for all runtime configurations">
<property name="current.build.config" value="release" />
<call target="test-frameworks" />
</target>
<target name="test-frameworks">
<foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
<call target="init" />
<if test="${not build.skip}">
<exec program="nunit-console" failonerror="true" workingdir="build/${current.build.framework}/${current.build.config}">
<arg value="${NUnit.Projectfile}" />
<arg value="-labels" />
<arg value="-exclude=Manual" />
<arg value="-xml=Nunit.TestOutput.xml" />
</exec>
</if>
</foreach>
</target>
<!-- ============================================================================================ -->
<!-- M I S C E L L A N E O U S T A R G E T S -->
<!-- ============================================================================================ -->
<target name="build" depends="default" description="Build the project." />
<target name="rebuild" depends="clean,build" description="Rebuild the project." />
<target name="clean" description="Deletes build">
<if test="${target::exists('clean-init')}">
<call target="clean-init" />
</if>
<delete dir="build" if="${directory::exists('build')}" />
<delete dir="obj" if="${directory::exists('obj')}" />
<delete dir="package" if="${directory::exists('package')}" />
</target>
<target name="package" description="Bundle the source and binary distributions.">
<mkdir dir="${package.dir}"
if="${not directory::exists(package.dir)}" />
<zip zipfile="${package.dir}/${bin.package.name}">
<fileset refid="bin.package.contents"/>
</zip>
<zip zipfile="${package.dir}/${src.package.name}">
<fileset refid="src.package.contents"/>
</zip>
</target>
<target name="doc" depends="build">
<mkdir dir="${doc.dir}" />
<ndoc failonerror="false">
<assemblies basedir="${build.bin.dir}">
<include name="${project.name}.dll" />
</assemblies>
<summaries basedir="${basedir}/src/main/ndoc">
<include name="NamespaceSummary.xml" />
</summaries>
<documenters>
<documenter name="MSDN">
<property name="OutputDirectory" value="${doc.dir}" />
<property name="HtmlHelpName" value="${project.name}" />
<property name="HtmlHelpCompilerFilename" value="hhc.exe" />
<property name="IncludeFavorites" value="False" />
<property name="Title" value="${project.short_description}" />
<property name="SplitTOCs" value="False" />
<property name="DefaulTOC" value="" />
<!--
<property name="ShowVisualBasic" value="True" />
<property name="ShowMissingSummaries" value="True" />
<property name="ShowMissingRemarks" value="True" />
<property name="ShowMissingParams" value="True" />
<property name="ShowMissingReturns" value="True" />
<property name="ShowMissingValues" value="True" />
-->
<property name="DocumentInternals" value="False" />
<property name="DocumentProtected" value="True" />
<property name="DocumentPrivates" value="False" />
<property name="DocumentEmptyNamespaces" value="False" />
<property name="IncludeAssemblyVersion" value="True" />
<property name="CopyrightText" value="" />
<property name="CopyrightHref" value="" />
</documenter>
</documenters>
</ndoc>
</target>
<target name="sandcastle" depends="set-release-configuration, init, conditional-compile">
<!-- Directories -->
<property name="sandcastle.style" value="vs2005" unless="${property::exists('sandcastle.style')}" />
<property name="documentation.dir" value="${build.bin.dir}" />
<property name="bin.intern.dir" value="${build.bin.dir}" />
<property name="bin.extern.dir" value="${basedir}\lib\NUnit\net-2.0" />
<property name="sandcastle.dir" value="${environment::get-variable('DXROOT')}" />
<property name="sandcastle.workingdir" value="${build.dir}\doc\${sandcastle.style}" />
<property name="sandcastle.output.dir" value="${sandcastle.workingdir}\Output" />
<!-- Executables -->
<property name="sandcastle.mrefbuilder.exe" value="${sandcastle.dir}\productiontools\mrefbuilder.exe" />
<property name="sandcastle.buildassembler.exe" value="${sandcastle.dir}\productiontools\buildassembler.exe" />
<property name="sandcastle.xsltransform.exe" value="${sandcastle.dir}\productiontools\xsltransform.exe" />
<property name="sandcastle.productiontransforms.dir" value="${sandcastle.dir}\ProductionTransforms" />
<!-- Create or Cleanup Working Directory -->
<mkdir dir="${sandcastle.workingdir}"
if="${not directory::exists(sandcastle.workingdir)}" />
<delete>
<fileset basedir="${sandcastle.workingdir}">
<include name="**\*" />
</fileset>
</delete>
<!-- Copy configuration file, and hard code references -->
<copy file="${sandcastle.dir}/Presentation/${sandcastle.style}/Configuration/Sandcastle.config"
tofile="${sandcastle.workingdir}/Sandcastle.config">
<filterchain>
<replacestring from="&quot;..\..\" to="&quot;${sandcastle.dir}\" />
<replacestring from="&quot;..\" to="&quot;${sandcastle.dir}\Examples\" />
<replacestring from="&quot;.\comments.xml" to="&quot;${documentation.dir}\${project.name}.xml" />
<replacestring from="&quot;%DXROOT%\Presentation\${sandcastle.style}\content\feedback_content.xml&quot;" to="&quot;${basedir}/src/main/sandcastle/feedback_content.xml&quot;" />
</filterchain>
</copy>
<!-- Run MRefBuilder (introspection on assemblies) to create basic Reflection XML -->
<exec program="${sandcastle.mrefbuilder.exe}" workingdir="${sandcastle.workingdir}">
<arg value="${bin.intern.dir}/${project.name}.dll" />
<arg value="/out:reflection.int.xml" />
<arg value="/dep:${bin.extern.dir}\*.dll" />
</exec>
<!-- Create Reflection XML -->
<exec program="${sandcastle.xsltransform.exe}" workingdir="${sandcastle.workingdir}">
<arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\ApplyVSDocModel.xsl&quot;" if="${sandcastle.style != 'prototype'}" />
<arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\ApplyPrototypeDocModel.xsl&quot;" if="${sandcastle.style == 'prototype'}" />
<arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\AddFriendlyFilenames.xsl&quot;" /> <!-- if="${sandcastle.style != 'prototype'}" /> -->
<arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\AddGuidFilenames.xsl&quot;" if="${sandcastle.style == 'disabled'}" />
<arg value="reflection.int.xml" />
<arg value="/out:reflection.xml" />
<arg value="/arg:IncludeAllMembersTopic=true" />
<arg value="/arg:IncludeInheritedOverloadTopics=true" />
</exec>
<!-- Create Manifest (list of Topics) -->
<exec program="${sandcastle.xsltransform.exe}" workingdir="${sandcastle.workingdir}">
<arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\ReflectionToManifest.xsl&quot;" />
<arg value="reflection.xml" />
<arg value="/out:manifest.xml" />
</exec>
<!-- Create Output Environment -->
<mkdir dir="${sandcastle.output.dir}" />
<mkdir dir="${sandcastle.output.dir}/html" />
<copy todir="${sandcastle.output.dir}">
<fileset basedir="${sandcastle.dir}/Presentation/${sandcastle.style}">
<include name="icons/*" />
<include name="media/*" />
<include name="scripts/*" />
<include name="styles/*" />
</fileset>
</copy>
<!-- Run BuildAssembler (create html topic files) -->
<exec program="${sandcastle.buildassembler.exe}" workingdir="${sandcastle.workingdir}">
<arg value="/config:Sandcastle.config" />
<arg value="manifest.xml" />
</exec>
</target>
<target name="sandcastle-all" description="Generate all formats of the Sandcastle documentation files.">
<foreach item="String" in="vs2005,prototype,hana" delim="," property="sandcastle.style">
<call target="sandcastle" />
</foreach>
</target>
</project>