Support multiple service models for a component. WindsorServiceHostFactory will...
[castle.git] / common.xml
blob2054e3bb51675e0fb3e1663de64f78bb84e9dc3e
1 <?xml version="1.0"?>\r
2 <project name="Castle" xmlns="http://nant.sf.net/release/0.85/nant.xsd">\r
3         <!-- \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
6                 in SVN.\r
7         -->\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
26         <!-- \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
29         -->\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
33         <property name="lib.framework.ext.dir" value="${path::combine(lib.family.dir, string::replace(framework::get-target-framework(), framework::get-family(framework::get-target-framework()) + '-', ''))}" dynamic="true" />\r
35         <!-- \r
36                 Versioning\r
37         -->\r
38         <property name="project.version"        value="1.1.0.0" overwrite="false" />\r
39         <property name="project.major"          value="${version::get-major(version::parse(project.version))}"          dynamic="true" />\r
40         <property name="project.minor"          value="${version::get-minor(version::parse(project.version))}"          dynamic="true" />\r
41         <property name="project.build"          value="${version::get-build(version::parse(project.version))}"          dynamic="true" />\r
42         <property name="project.revision"       value="${svn.revision}"                                                                                         dynamic="true" />\r
44         <property name="assembly.major"         value="${version::get-major(version::parse(assembly.version))}"         dynamic="true" />\r
45         <property name="assembly.minor"         value="${version::get-minor(version::parse(assembly.version))}"         dynamic="true" />\r
46         <property name="assembly.build"         value="${version::get-build(version::parse(assembly.version))}"         dynamic="true" />\r
47         <property name="assembly.revision"      value="${version::get-revision(version::parse(assembly.version))}"      dynamic="true" />\r
48         \r
49         <property name="svn.revision" value="0" overwrite="false" />\r
51         <!-- \r
52                 These are used to set the correct attributes in AssemblyInfo.cs.  \r
53         -->\r
54         <property name="project.company" value="Castle Project" />\r
56         <!-- debug|release -->\r
57         <property name="build.defines" value="TRACE" />\r
58         <property name="build.defines" value="${build.defines},STRONG" if="${sign}" />\r
60         <!-- platform specific properties. These are the defaults -->\r
61         <property name="current.build.defines" value="${build.defines}" />\r
63         <!-- named project configurations -->\r
64         <target name="set-debug-project-configuration" description="Perform a 'debug' build">\r
65                 <property name="build.debug"    value="true" />\r
66                 <property name="build.optimize" value="false" overwrite="false" />\r
67         </target>\r
68         \r
69         <target name="set-release-project-configuration" description="Perform a 'release' build">\r
70                 <property name="build.debug"    value="false" />\r
71                 <property name="build.optimize" value="true" overwrite="false" />\r
72         </target>\r
74         <target name="set-project-configuration">\r
75                 <property name="project.config" value="debug" overwrite="false" />\r
76                 <if test="${not(target::exists('set-' + project.config + '-project-configuration'))}">\r
77                         <fail message="Unknown configuration: '${project.config}'" />\r
78                 </if>\r
79                 <property name="build.warnaserrors" value="true" overwrite="false" />\r
80                 <property name="build.warnmissingdocs" value="false" overwrite="false" />\r
81                 <call target="set-${project.config}-project-configuration" />\r
83                 <property name="src.dir"                        value="${path::get-full-path(project::get-base-directory())}" />\r
84                 <property name="build.base.dir"         value="${path::get-full-path(root.dir)}/build" />\r
85                 <property name="build.family.dir"       value="${build.base.dir}/${nant.settings.currentframework}" />\r
86                 <property name="build.dir"                      value="${path::get-full-path(path::combine(build.family.dir,project.config))}" dynamic="true" />\r
87                 <property name="testresults.dir"        value="${build.dir}/test-results" />\r
88                 <property name="releasenotes.dir"       value="${build.dir}/ReleaseNotes" />\r
89                 <property name="docs.dir"                       value="${build.base.dir}/docs" />\r
90                 <property name="build.rebuild"          value="false" overwrite="false" />\r
91         </target>\r
93         <target name="set-framework-configuration">\r
94                 <if test="${not(target::exists('set-'+framework::get-target-framework()+'-framework-configuration'))}">\r
95                         <fail message="The '${framework::get-target-framework()}' framework is not supported by this version of Castle." />\r
96                 </if>\r
97                 <property name="csc.keyfile"    value="" />\r
98                 <property name="csc.args"               value="" />\r
99                 <readregistry property="dotnet.SPlevel" \r
100                                           key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v${framework::get-clr-version(framework::get-runtime-framework())}\SP"\r
101                                           hive="LocalMachine"\r
102                                           unless="${framework::get-family(framework::get-runtime-framework()) == 'mono'}" />\r
103                 <property name="dotnet.SPlevel" value="0" if="${framework::get-family(framework::get-runtime-framework()) == 'mono'}" />\r
104                 <call target="set-${framework::get-target-framework()}-framework-configuration" />\r
106                 <property name="build.msbuild"  value="false" overwrite="false" />\r
108         </target>\r
110         <target name="set-net-2.0-framework-configuration">\r
111                 <property name="nant.settings.currentframework" value="net-2.0" />\r
112                 <property name="current.build.defines" value="${build.defines},NET,DOTNET2" />\r
113                 <property name="current.build.defines" value="${current.build.defines},DOTNET2SP1" if="${dotnet.SPlevel == '1'}" />\r
114                 <property name="link.sdkdoc.version" value="SDK_v2_0" />\r
115                 <property name="merge.targetplatform" value="v2" />\r
116                 <property name="csc.keyfile" value="/keyfile:${key.file}" />\r
117                 <!-- If DevEnvDir exists, we grab it, otherwise we try if the default location (if it exists) -->\r
118                 <if test="${environment::variable-exists('DevEnvDir')}">\r
119                         <property name="dev.env.dir" value="${environment::get-variable('DevEnvDir')}" />\r
120                 </if>\r
121                 <if test="${not environment::variable-exists('DevEnvDir')}">\r
122                         <property name="default.dev.env.dir" value="%ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE" />\r
123                         <if test="${directory::exists(default.dev.env.dir)}">\r
124                                 <property name="dev.env.dir" value="${default.dev.env.dir}" />\r
125                         </if>\r
126                 </if>\r
127                 <property name="build.msbuild"  value="false" overwrite="false" />\r
128                 <property name="project.vsproj" value="${project::get-name()}-vs2005.csproj" />\r
129         </target>\r
131         <target name="set-net-3.5-framework-configuration">\r
132                 <property name="nant.settings.currentframework" value="net-3.5" />\r
133                 <property name="current.build.defines" value="${build.defines},NET,DOTNET35" />\r
134                 <property name="link.sdkdoc.version" value="SDK_v3_5" />\r
135                 <property name="merge.targetplatform" value="v3" />\r
136                 <property name="csc.keyfile" value="/keyfile:${key.file}" />\r
137                 <!-- If DevEnvDir exists, we grab it, otherwise we try if the default location (if it exists) -->\r
138                 <if test="${environment::variable-exists('DevEnvDir')}">\r
139                         <property name="dev.env.dir" value="${environment::get-variable('DevEnvDir')}" />\r
140                 </if>\r
141                 <if test="${not environment::variable-exists('DevEnvDir')}">\r
142                         <property name="default.dev.env.dir" value="%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE" />\r
143                         <if test="${directory::exists(default.dev.env.dir)}">\r
144                                 <property name="dev.env.dir" value="${default.dev.env.dir}" />\r
145                         </if>\r
146                 </if>\r
147                 <property name="build.msbuild"  value="false" overwrite="false" />\r
148                 <property name="project.vsproj" value="${project::get-name()}-vs2008.csproj" />\r
149         </target>\r
151         <target name="set-mono-1.0-framework-configuration">\r
152                 <property name="nant.settings.currentframework" value="mono-1.0" />\r
153                 <property name="current.build.defines" value="${build.defines},MONO,MONO1" />\r
154                 <property name="link.sdkdoc.version" value="MsdnOnline" />\r
155                 <!-- mono puts gacutil on PATH -->\r
156                 <property name="gacutil.file" value="gacutil" />\r
157                 <property name="build.warnaserrors" value="false" />\r
158         </target>\r
159         \r
160         <target name="set-mono-2.0-framework-configuration">\r
161                 <property name="nant.settings.currentframework" value="mono-2.0" />\r
162                 <property name="current.build.defines" value="${build.defines},MONO,MONO2,DOTNET2" />\r
163                 <property name="link.sdkdoc.version" value="MsdnOnline" />\r
164                 <!-- mono puts gacutil on PATH -->\r
165                 <property name="gacutil.file" value="gacutil" />\r
166                 <property name="build.warnaserrors" value="false" />\r
167         </target>\r
169         <target name="display-current-runtime">\r
170                 <echo message="" />\r
171                 <echo message="----------------------------------------------------------" />\r
172                 <echo message=" ${framework::get-description(framework::get-target-framework())}" />\r
173                 <echo message="----------------------------------------------------------" />\r
174                 <echo message="" />\r
175                 <echo message="framework : ${framework::get-target-framework()}" />\r
176                 <echo message="description : ${framework::get-description(framework::get-target-framework())}" />\r
177                 <echo message="sdk directory : ${framework::get-sdk-directory(framework::get-target-framework())}" />\r
178                 <echo message="framework directory : ${framework::get-framework-directory(framework::get-target-framework())}" />\r
179                 <echo message="assembly directory : ${framework::get-assembly-directory(framework::get-target-framework())}" />\r
180                 <echo message="runtime engine : ${framework::get-runtime-engine(framework::get-target-framework())}" />\r
181                 <echo message="" />\r
182         </target>\r
184         <target name="common.init"\r
185                 depends="common.check-nant-version common.find-tools set-framework-configuration set-project-configuration"\r
186                 description="Initializes build properties">\r
188                 <fileset id="project.sources" failonempty="true">\r
189                         <include name="${src.dir}/**/*.cs" />\r
190                 </fileset>\r
191                 <resourcefileset id="project.resources" />\r
192         </target>\r
193         \r
194         <target name="common.find-svninfo">\r
195                 <!-- For adding SVN revision to builds -->\r
196                 <property name="svn.revision" value="0" overwrite="false" />\r
197                 <!-- try to update the revision -->\r
198                 <exec\r
199                         program="svn"\r
200                         commandline='info "${project::get-base-directory()}" --xml'\r
201                         output="_revision.xml"\r
202                         failonerror="false"/>\r
203                 <xmlpeek\r
204                         file="_revision.xml"\r
205                         xpath="/info/entry/@revision"\r
206                         property="svn.revision"\r
207                         failonerror="false"/>\r
208                 <delete file="_revision.xml" failonerror="false" />\r
209                 <echo message="INFO: Using Subversion revision number: ${svn.revision}"/>\r
210         </target>\r
212         <target name="common.find-nunit">\r
213                 <if test="${not property::exists('nunit.found')}">\r
214                         <exec \r
215                                 program="${mbunit-console}" \r
216                                 resultproperty="mbunit.found"\r
217                                 failonerror="false" />\r
219                         <property name="mbunit.found" value="${mbunit.found == '0' and string::to-lower(testrunner)=='mbunit'}" readonly="true" />\r
220                         \r
221                         <property name="nunit.found" value="-1" />\r
222                         <exec\r
223                                 unless="${mbunit.found}"\r
224                                 program="${nunit-console2}" \r
225                                 resultproperty="nunit.found"\r
226                                 failonerror="false" />\r
228                         <property name="nunit-console" value="${nunit-console2}" if="${nunit.found == '0'}" />\r
230                         <exec unless="${mbunit.found or nunit.found == '0'}"\r
231                                 program="${nunit-console}" \r
232                                 commandline="/help"\r
233                                 resultproperty="nunit.found"\r
234                                 output='_nunit.txt'\r
235                                 failonerror="false" />\r
237                         <property name="nunit.found" value="${nunit.found == '0'}" readonly="true" />\r
238                         \r
239                         <fail message="ERROR: NUnit or MBUnit not found, cannot continue." unless="${nunit.found or mbunit.found}"/>\r
241                         <echo message="INFO: Using MBUnit for running unit tests" if="${mbunit.found}"/>\r
242                         \r
243                         <if test="${nunit.found}"> <!-- Determine if we can use this version of NUnit -->\r
244                                 <loadfile file="_nunit.txt" property="nunit_txt" />\r
245                                 <delete file="_nunit.txt" failonerror="false" />\r
246                                 <property name="nunit_findtxt" value="NUnit version " />\r
247                                 <property name="nunit_version" value="" />\r
248                                 <if test="${string::index-of( nunit_txt, nunit_findtxt) >= 0}">\r
249                                         <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                                 </if>\r
251                                 <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
252                                 <echo if="${string::get-length(nunit_version) > 0}">INFO: Found NUnit ${nunit_version}</echo>\r
253                         </if>\r
254                 </if>\r
255         </target>\r
257         <target name="common.check-nant-version">\r
258                 <fail if="${current.nant-version&lt;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
259         </target>\r
261         <target name="common.find-tools">\r
262                 <!-- Where is MbUnit.Cons.exe ? -->\r
263                 <property name="mbunit-console" value="MbUnit.Cons.exe" overwrite="false" />\r
265                 <!-- Where is nunit-console executable(win/mono) ? -->\r
266                 <property name="nunit-console2" value="nunit-console2" overwrite="false" />\r
267                 <property name="nunit-console" value="nunit-console" overwrite="false" />\r
269                 <property name="testrunner" value="NUnit" />\r
271                 <!-- Where is WiX? -->\r
272                 <property name="wix.dir" value="${environment::get-folder-path('ProgramFiles')}\Windows Installer XML v3\bin" overwrite="false" />\r
274                 <!-- Where is Sandcastle Help File Builder (SHFB)? -->\r
275                 <property name="shfb.dir" value="${environment::get-folder-path('ProgramFiles')}\EWSoftware\Sandcastle Help File Builder" overwrite="false" />\r
276                 \r
277                 <!-- Where is Sandcastle? -->\r
278                 <property name="sandcastle.dir" value="${environment::get-folder-path('ProgramFiles')}\Sandcastle" overwrite="false" />\r
280                 <!-- Where is HTML Help 1.0? -->\r
281                 <property name="htmlhelp1x.dir" value="${environment::get-folder-path('ProgramFiles')}\HTML Help Workshop" overwrite="false" />         \r
282         </target>\r
284 </project>\r