1 <?xml version="1.0"?>
\r
2 <project name="Castle" xmlns="http://nant.sf.net/release/0.85/nant.xsd">
\r
4 Use this to determine if the key file CastleKey.snk should be used to
\r
5 sign the assemblies. Defaults to true since private key is present
\r
8 <property name="sign" value="true" overwrite="false" />
\r
9 <property name="key.file" value="${path::get-full-path(root.dir)}/CastleKey.snk" />
\r
11 <!-- Controls whether tests are run. Setting this is as input to the build disables *all* tests. -->
\r
12 <property name="common.run-tests" value="true" overwrite="false" />
\r
13 <property name="common.testrunner.enabled" value="${common.run-tests}" overwrite="false" />
\r
14 <property name="common.testrunner.failonerror" value="true" overwrite="false" /> <!-- Whether to keep building when tests are failing -->
\r
16 <!-- Check which nant version we're using - fail if it's not the minium -->
\r
17 <property name="current.nant-version" value="${assemblyname::get-version(assembly::get-name(nant::get-assembly()))}" />
\r
18 <property name="required.nant-version" value="0.85.2478.0" /> <!-- Nant 0.85 release version -->
\r
20 <!-- properties used to connect to database for testing -->
\r
21 <property name="ar.dialect" value="NHibernate.Dialect.MsSql2000Dialect" overwrite="false" />
\r
22 <property name="ar.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" overwrite="false" />
\r
23 <property name="ar.connection.connection_string.1" value="Server=(local);initial catalog=test;Integrated Security=SSPI" overwrite="false" />
\r
24 <property name="ar.connection.connection_string.2" value="Server=(local);initial catalog=test2;Integrated Security=SSPI" overwrite="false" />
\r
27 Path to the folder that contain the external assemblies. For net-2.0 the values will
\r
28 be lib, lib/net, and lib/net/2.0 respectively.
\r
30 <property name="lib.dir" value="SharedLibs" dynamic="true" />
\r
31 <property name="lib.family.dir" value="${path::combine(lib.dir, framework::get-family(framework::get-target-framework()))}" dynamic="true" />
\r
32 <property name="lib.framework.dir" value="${path::combine(lib.family.dir, version::to-string(framework::get-version(framework::get-target-framework())))}" dynamic="true" />
\r
37 <property name="project.version" value="1.1.0.0" overwrite="false" />
\r
38 <property name="project.major" value="${version::get-major(version::parse(project.version))}" dynamic="true" />
\r
39 <property name="project.minor" value="${version::get-minor(version::parse(project.version))}" dynamic="true" />
\r
40 <property name="project.build" value="${version::get-build(version::parse(project.version))}" dynamic="true" />
\r
41 <property name="project.revision" value="${svn.revision}" dynamic="true" />
\r
43 <property name="assembly.major" value="${version::get-major(version::parse(assembly.version))}" dynamic="true" />
\r
44 <property name="assembly.minor" value="${version::get-minor(version::parse(assembly.version))}" dynamic="true" />
\r
45 <property name="assembly.build" value="${version::get-build(version::parse(assembly.version))}" dynamic="true" />
\r
46 <property name="assembly.revision" value="${version::get-revision(version::parse(assembly.version))}" dynamic="true" />
\r
48 <property name="svn.revision" value="0" overwrite="false" />
\r
51 These are used to set the correct attributes in AssemblyInfo.cs.
\r
53 <property name="project.company" value="Castle Project" />
\r
55 <!-- debug|release -->
\r
56 <property name="build.defines" value="TRACE" />
\r
57 <property name="build.defines" value="${build.defines},STRONG" if="${sign}" />
\r
59 <!-- platform specific properties. These are the defaults -->
\r
60 <property name="current.build.defines" value="${build.defines}" />
\r
62 <!-- named project configurations -->
\r
63 <target name="set-debug-project-configuration" description="Perform a 'debug' build">
\r
64 <property name="build.debug" value="true" />
\r
65 <property name="build.optimize" value="false" overwrite="false" />
\r
68 <target name="set-release-project-configuration" description="Perform a 'release' build">
\r
69 <property name="build.debug" value="false" />
\r
70 <property name="build.optimize" value="true" overwrite="false" />
\r
73 <target name="set-project-configuration">
\r
74 <property name="project.config" value="debug" overwrite="false" />
\r
75 <if test="${not(target::exists('set-' + project.config + '-project-configuration'))}">
\r
76 <fail message="Unknown configuration: '${project.config}'" />
\r
78 <property name="build.warnaserrors" value="true" overwrite="false" />
\r
79 <property name="build.warnmissingdocs" value="false" overwrite="false" />
\r
80 <call target="set-${project.config}-project-configuration" />
\r
82 <property name="src.dir" value="${path::get-full-path(project::get-base-directory())}" />
\r
83 <property name="build.base.dir" value="${path::get-full-path(root.dir)}/build" />
\r
84 <property name="build.family.dir" value="${build.base.dir}/${nant.settings.currentframework}" />
\r
85 <property name="build.dir" value="${path::get-full-path(path::combine(build.family.dir,project.config))}" dynamic="true" />
\r
86 <property name="testresults.dir" value="${build.dir}/test-results" />
\r
87 <property name="releasenotes.dir" value="${build.dir}/ReleaseNotes" />
\r
88 <property name="docs.dir" value="${build.base.dir}/docs" />
\r
89 <property name="build.rebuild" value="false" overwrite="false" />
\r
92 <target name="set-framework-configuration">
\r
93 <if test="${not(target::exists('set-'+framework::get-target-framework()+'-framework-configuration'))}">
\r
94 <fail message="The '${framework::get-target-framework()}' framework is not supported by this version of Castle." />
\r
96 <property name="csc.keyfile" value="" />
\r
97 <property name="csc.args" value="" />
\r
98 <readregistry property="dotnet.SPlevel"
\r
99 key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v${framework::get-clr-version(framework::get-runtime-framework())}\SP"
\r
100 hive="LocalMachine"
\r
101 unless="${framework::get-family(framework::get-runtime-framework()) == 'mono'}" />
\r
102 <property name="dotnet.SPlevel" value="0" if="${framework::get-family(framework::get-runtime-framework()) == 'mono'}" />
\r
103 <call target="set-${framework::get-target-framework()}-framework-configuration" />
\r
105 <property name="build.msbuild" value="false" overwrite="false" />
\r
109 <target name="set-net-2.0-framework-configuration">
\r
110 <property name="nant.settings.currentframework" value="net-2.0" />
\r
111 <property name="current.build.defines" value="${build.defines},NET,DOTNET2" />
\r
112 <property name="current.build.defines" value="${current.build.defines},DOTNET2SP1" if="${dotnet.SPlevel == '1'}" />
\r
113 <property name="link.sdkdoc.version" value="SDK_v2_0" />
\r
114 <property name="merge.targetplatform" value="v2" />
\r
115 <property name="csc.keyfile" value="/keyfile:${key.file}" />
\r
116 <!-- If DevEnvDir exists, we grab it, otherwise we try if the default location (if it exists) -->
\r
117 <if test="${environment::variable-exists('DevEnvDir')}">
\r
118 <property name="dev.env.dir" value="${environment::get-variable('DevEnvDir')}" />
\r
120 <if test="${not environment::variable-exists('DevEnvDir')}">
\r
121 <property name="default.dev.env.dir" value="%ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE" />
\r
122 <if test="${directory::exists(default.dev.env.dir)}">
\r
123 <property name="dev.env.dir" value="${default.dev.env.dir}" />
\r
126 <property name="build.msbuild" value="false" overwrite="false" />
\r
127 <property name="project.vsproj" value="${project::get-name()}-vs2005.csproj" />
\r
130 <target name="set-net-3.5-framework-configuration">
\r
131 <property name="nant.settings.currentframework" value="net-3.5" />
\r
132 <property name="current.build.defines" value="${build.defines},NET,DOTNET35" />
\r
133 <property name="link.sdkdoc.version" value="SDK_v3_5" />
\r
134 <property name="merge.targetplatform" value="v3" />
\r
135 <property name="csc.keyfile" value="/keyfile:${key.file}" />
\r
136 <!-- If DevEnvDir exists, we grab it, otherwise we try if the default location (if it exists) -->
\r
137 <if test="${environment::variable-exists('DevEnvDir')}">
\r
138 <property name="dev.env.dir" value="${environment::get-variable('DevEnvDir')}" />
\r
140 <if test="${not environment::variable-exists('DevEnvDir')}">
\r
141 <property name="default.dev.env.dir" value="%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE" />
\r
142 <if test="${directory::exists(default.dev.env.dir)}">
\r
143 <property name="dev.env.dir" value="${default.dev.env.dir}" />
\r
146 <property name="build.msbuild" value="false" overwrite="false" />
\r
147 <property name="project.vsproj" value="${project::get-name()}-vs2008.csproj" />
\r
150 <target name="set-mono-1.0-framework-configuration">
\r
151 <property name="nant.settings.currentframework" value="mono-1.0" />
\r
152 <property name="current.build.defines" value="${build.defines},MONO,MONO1" />
\r
153 <property name="link.sdkdoc.version" value="MsdnOnline" />
\r
154 <!-- mono puts gacutil on PATH -->
\r
155 <property name="gacutil.file" value="gacutil" />
\r
156 <property name="build.warnaserrors" value="false" />
\r
159 <target name="set-mono-2.0-framework-configuration">
\r
160 <property name="nant.settings.currentframework" value="mono-2.0" />
\r
161 <property name="current.build.defines" value="${build.defines},MONO,MONO2,DOTNET2" />
\r
162 <property name="link.sdkdoc.version" value="MsdnOnline" />
\r
163 <!-- mono puts gacutil on PATH -->
\r
164 <property name="gacutil.file" value="gacutil" />
\r
165 <property name="build.warnaserrors" value="false" />
\r
168 <target name="display-current-runtime">
\r
169 <echo message="" />
\r
170 <echo message="----------------------------------------------------------" />
\r
171 <echo message=" ${framework::get-description(framework::get-target-framework())}" />
\r
172 <echo message="----------------------------------------------------------" />
\r
173 <echo message="" />
\r
174 <echo message="framework : ${framework::get-target-framework()}" />
\r
175 <echo message="description : ${framework::get-description(framework::get-target-framework())}" />
\r
176 <echo message="sdk directory : ${framework::get-sdk-directory(framework::get-target-framework())}" />
\r
177 <echo message="framework directory : ${framework::get-framework-directory(framework::get-target-framework())}" />
\r
178 <echo message="assembly directory : ${framework::get-assembly-directory(framework::get-target-framework())}" />
\r
179 <echo message="runtime engine : ${framework::get-runtime-engine(framework::get-target-framework())}" />
\r
180 <echo message="" />
\r
183 <target name="common.init"
\r
184 depends="common.check-nant-version common.find-tools set-framework-configuration set-project-configuration"
\r
185 description="Initializes build properties">
\r
187 <fileset id="project.sources" failonempty="true">
\r
188 <include name="${src.dir}/**/*.cs" />
\r
190 <resourcefileset id="project.resources" />
\r
193 <target name="common.find-svninfo">
\r
194 <!-- For adding SVN revision to builds -->
\r
195 <property name="svn.revision" value="0" overwrite="false" />
\r
196 <!-- try to update the revision -->
\r
199 commandline='info "${project::get-base-directory()}" --xml'
\r
200 output="_revision.xml"
\r
201 failonerror="false"/>
\r
203 file="_revision.xml"
\r
204 xpath="/info/entry/@revision"
\r
205 property="svn.revision"
\r
206 failonerror="false"/>
\r
207 <delete file="_revision.xml" failonerror="false" />
\r
208 <echo message="INFO: Using Subversion revision number: ${svn.revision}"/>
\r
211 <target name="common.find-nunit">
\r
212 <if test="${not property::exists('nunit.found')}">
\r
214 program="${mbunit-console}"
\r
215 resultproperty="mbunit.found"
\r
216 failonerror="false" />
\r
218 <property name="mbunit.found" value="${mbunit.found == '0' and string::to-lower(testrunner)=='mbunit'}" readonly="true" />
\r
220 <property name="nunit.found" value="-1" />
\r
222 unless="${mbunit.found}"
\r
223 program="${nunit-console2}"
\r
224 resultproperty="nunit.found"
\r
225 failonerror="false" />
\r
227 <property name="nunit-console" value="${nunit-console2}" if="${nunit.found == '0'}" />
\r
229 <exec unless="${mbunit.found or nunit.found == '0'}"
\r
230 program="${nunit-console}"
\r
231 commandline="/help"
\r
232 resultproperty="nunit.found"
\r
233 output='_nunit.txt'
\r
234 failonerror="false" />
\r
236 <property name="nunit.found" value="${nunit.found == '0'}" readonly="true" />
\r
238 <fail message="ERROR: NUnit or MBUnit not found, cannot continue." unless="${nunit.found or mbunit.found}"/>
\r
240 <echo message="INFO: Using MBUnit for running unit tests" if="${mbunit.found}"/>
\r
242 <if test="${nunit.found}"> <!-- Determine if we can use this version of NUnit -->
\r
243 <loadfile file="_nunit.txt" property="nunit_txt" />
\r
244 <delete file="_nunit.txt" failonerror="false" />
\r
245 <property name="nunit_findtxt" value="NUnit version " />
\r
246 <property name="nunit_version" value="" />
\r
247 <if test="${string::index-of( nunit_txt, nunit_findtxt) >= 0}">
\r
248 <property name="nunit_version" value="${string::trim(string::substring(nunit_txt, string::index-of( nunit_txt, nunit_findtxt) + string::get-length(nunit_findtxt),6 ))}" />
\r
250 <echo if="${string::get-length(nunit_version) == 0}">WARNING: Unable to determine NUnit version, unit tests may fail unpredictably with your version of NUnit</echo>
\r
251 <echo if="${string::get-length(nunit_version) > 0}">INFO: Found NUnit ${nunit_version}</echo>
\r
256 <target name="common.check-nant-version">
\r
257 <fail if="${current.nant-version<required.nant-version}" message="Not using minimum required Nant version: ${required.nant-version} (current version: ${current.nant-version}). Please upgrade your copy of nant." />
\r
260 <target name="common.find-tools">
\r
261 <!-- Where is MbUnit.Cons.exe ? -->
\r
262 <property name="mbunit-console" value="MbUnit.Cons.exe" overwrite="false" />
\r
264 <!-- Where is nunit-console executable(win/mono) ? -->
\r
265 <property name="nunit-console2" value="nunit-console2" overwrite="false" />
\r
266 <property name="nunit-console" value="nunit-console" overwrite="false" />
\r
268 <property name="testrunner" value="NUnit" />
\r
270 <!-- Where is WiX? -->
\r
271 <property name="wix.dir" value="${environment::get-folder-path('ProgramFiles')}\Windows Installer XML v3\bin" overwrite="false" />
\r
273 <!-- Where is Sandcastle Help File Builder (SHFB)? -->
\r
274 <property name="shfb.dir" value="${environment::get-folder-path('ProgramFiles')}\EWSoftware\Sandcastle Help File Builder" overwrite="false" />
\r
276 <!-- Where is Sandcastle? -->
\r
277 <property name="sandcastle.dir" value="${environment::get-folder-path('ProgramFiles')}\Sandcastle" overwrite="false" />
\r
279 <!-- Where is HTML Help 1.0? -->
\r
280 <property name="htmlhelp1x.dir" value="${environment::get-folder-path('ProgramFiles')}\HTML Help Workshop" overwrite="false" />
\r