aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Prebuild
diff options
context:
space:
mode:
Diffstat (limited to 'Prebuild')
-rw-r--r--Prebuild/AUTHORS10
-rw-r--r--Prebuild/COPYING65
-rw-r--r--Prebuild/ChangeLog461
-rw-r--r--Prebuild/INSTALL236
-rw-r--r--Prebuild/NEWS200
-rw-r--r--Prebuild/README274
-rw-r--r--Prebuild/THANKS18
-rw-r--r--Prebuild/TODO43
-rwxr-xr-xPrebuild/clean.bat1
-rwxr-xr-xPrebuild/clean.sh1
-rw-r--r--Prebuild/doc/prebuild-example1.xml300
-rw-r--r--Prebuild/doc/prebuild-example2.xml72
-rw-r--r--Prebuild/doc/prebuild-example3.xml113
-rw-r--r--Prebuild/doc/prebuild-example4.xml715
-rw-r--r--Prebuild/doc/prebuild-example5.xml187
-rwxr-xr-xPrebuild/prebuild2
-rw-r--r--Prebuild/prebuild.xml75
-rwxr-xr-xPrebuild/scripts/Clean.bat2
-rwxr-xr-xPrebuild/scripts/Clean.sh4
-rwxr-xr-xPrebuild/scripts/Help.bat2
-rwxr-xr-xPrebuild/scripts/MonoDevelop.sh2
-rw-r--r--Prebuild/scripts/Prebuild.nsi231
-rwxr-xr-xPrebuild/scripts/SharpDevelop.bat4
-rwxr-xr-xPrebuild/scripts/SharpDevelop2.bat4
-rwxr-xr-xPrebuild/scripts/VS2002.bat4
-rwxr-xr-xPrebuild/scripts/VS2003.bat4
-rwxr-xr-xPrebuild/scripts/VS2005.bat4
-rwxr-xr-xPrebuild/scripts/VS2008.bat4
-rw-r--r--Prebuild/scripts/VS2010.bat4
-rwxr-xr-xPrebuild/scripts/autotools.bat4
-rwxr-xr-xPrebuild/scripts/autotools.sh5
-rwxr-xr-xPrebuild/scripts/makefile.bat4
-rwxr-xr-xPrebuild/scripts/makefile.sh10
-rwxr-xr-xPrebuild/scripts/nant.bat4
-rwxr-xr-xPrebuild/scripts/nant.sh2
-rwxr-xr-xPrebuild/scripts/xcode.bat4
-rwxr-xr-xPrebuild/scripts/xcode.sh2
-rw-r--r--Prebuild/src/App.icobin0 -> 4286 bytes
-rw-r--r--Prebuild/src/Core/Attributes/DataNodeAttribute.cs72
-rw-r--r--Prebuild/src/Core/Attributes/OptionNodeAttribute.cs71
-rw-r--r--Prebuild/src/Core/Attributes/TargetAttribute.cs71
-rw-r--r--Prebuild/src/Core/FatalException.cs85
-rw-r--r--Prebuild/src/Core/Interfaces/IDataNode.cs47
-rw-r--r--Prebuild/src/Core/Interfaces/ITarget.cs51
-rw-r--r--Prebuild/src/Core/Kernel.cs832
-rw-r--r--Prebuild/src/Core/Nodes/AuthorNode.cs87
-rw-r--r--Prebuild/src/Core/Nodes/CleanFilesNode.cs80
-rw-r--r--Prebuild/src/Core/Nodes/CleanupNode.cs85
-rw-r--r--Prebuild/src/Core/Nodes/ConfigurationNode.cs225
-rw-r--r--Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs71
-rw-r--r--Prebuild/src/Core/Nodes/DataNode.cs117
-rw-r--r--Prebuild/src/Core/Nodes/DatabaseProjectNode.cs93
-rw-r--r--Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs63
-rw-r--r--Prebuild/src/Core/Nodes/DescriptionNode.cs87
-rw-r--r--Prebuild/src/Core/Nodes/ExcludeNode.cs89
-rw-r--r--Prebuild/src/Core/Nodes/FileNode.cs292
-rw-r--r--Prebuild/src/Core/Nodes/FilesNode.cs238
-rw-r--r--Prebuild/src/Core/Nodes/MatchNode.cs378
-rw-r--r--Prebuild/src/Core/Nodes/OptionsNode.cs634
-rw-r--r--Prebuild/src/Core/Nodes/ProcessNode.cs108
-rw-r--r--Prebuild/src/Core/Nodes/ProjectNode.cs587
-rw-r--r--Prebuild/src/Core/Nodes/ReferenceNode.cs144
-rw-r--r--Prebuild/src/Core/Nodes/ReferencePathNode.cs97
-rw-r--r--Prebuild/src/Core/Nodes/SolutionNode.cs382
-rw-r--r--Prebuild/src/Core/Parse/IfContext.cs154
-rw-r--r--Prebuild/src/Core/Parse/Preprocessor.cs652
-rw-r--r--Prebuild/src/Core/Targets/AutotoolsTarget.cs1070
-rw-r--r--Prebuild/src/Core/Targets/DebugTarget.cs102
-rw-r--r--Prebuild/src/Core/Targets/MakefileTarget.cs469
-rw-r--r--Prebuild/src/Core/Targets/MonoDevelopTarget.cs515
-rw-r--r--Prebuild/src/Core/Targets/NAntTarget.cs752
-rw-r--r--Prebuild/src/Core/Targets/SharpDevelop2Target.cs82
-rw-r--r--Prebuild/src/Core/Targets/SharpDevelopTarget.cs425
-rw-r--r--Prebuild/src/Core/Targets/ToolInfo.cs197
-rw-r--r--Prebuild/src/Core/Targets/VS2002Target.cs87
-rw-r--r--Prebuild/src/Core/Targets/VS2003Target.cs593
-rw-r--r--Prebuild/src/Core/Targets/VS2005Target.cs147
-rw-r--r--Prebuild/src/Core/Targets/VS2008Target.cs127
-rw-r--r--Prebuild/src/Core/Targets/VS2010Target.cs140
-rw-r--r--Prebuild/src/Core/Targets/VSGenericTarget.cs972
-rw-r--r--Prebuild/src/Core/Targets/VSVersion.cs54
-rw-r--r--Prebuild/src/Core/Targets/XcodeTarget.cs594
-rw-r--r--Prebuild/src/Core/UnknownLanguageException.cs63
-rw-r--r--Prebuild/src/Core/Utilities/CommandLineCollection.cs152
-rw-r--r--Prebuild/src/Core/Utilities/CurrentDirectory.cs68
-rw-r--r--Prebuild/src/Core/Utilities/Helper.cs575
-rw-r--r--Prebuild/src/Core/Utilities/Log.cs276
-rw-r--r--Prebuild/src/Core/WarningException.cs84
-rw-r--r--Prebuild/src/Prebuild.cs165
-rw-r--r--Prebuild/src/Prebuild.snkbin0 -> 596 bytes
-rw-r--r--Prebuild/src/Properties/AssemblyInfo.cs113
-rw-r--r--Prebuild/src/data/autotools.xml790
-rw-r--r--Prebuild/src/data/dnpb-1.0.xsd183
-rw-r--r--Prebuild/src/data/dnpb-1.1.xsd184
-rw-r--r--Prebuild/src/data/dnpb-1.2.xsd198
-rw-r--r--Prebuild/src/data/dnpb-1.3.xsd206
-rw-r--r--Prebuild/src/data/dnpb-1.4.xsd212
-rw-r--r--Prebuild/src/data/dnpb-1.5.xsd215
-rw-r--r--Prebuild/src/data/prebuild-1.10.xsd338
-rw-r--r--Prebuild/src/data/prebuild-1.6.xsd231
-rw-r--r--Prebuild/src/data/prebuild-1.7.xsd350
-rw-r--r--Prebuild/src/data/prebuild-1.8.xsd331
-rw-r--r--Prebuild/src/data/prebuild-1.9.xsd336
-rw-r--r--Prebuild/tests/Makefile24
-rw-r--r--Prebuild/tests/README.txt5
-rw-r--r--Prebuild/tests/include-001.expected46
-rw-r--r--Prebuild/tests/include-001.include33
-rw-r--r--Prebuild/tests/include-001.prebuild22
-rw-r--r--Prebuild/tests/include-002-2.include8
-rw-r--r--Prebuild/tests/include-002.expected26
-rw-r--r--Prebuild/tests/include-002.include14
-rw-r--r--Prebuild/tests/include-002.prebuild7
112 files changed, 20550 insertions, 0 deletions
diff --git a/Prebuild/AUTHORS b/Prebuild/AUTHORS
new file mode 100644
index 0000000..9e86ac0
--- /dev/null
+++ b/Prebuild/AUTHORS
@@ -0,0 +1,10 @@
1Dave Hudson (jendave@yahoo.com),
2Matthew Holmes (matthew@wildfiregames.com)
3Dan Moorehead (dan05a@gmail.com)
4Rob Loach (http://www.robloach.net)
5C.J. Adams-Collier (cjac@colliertech.org)
6
7Patch Contributers
8lbsa71
9chi11ken
10sdague
diff --git a/Prebuild/COPYING b/Prebuild/COPYING
new file mode 100644
index 0000000..d3cdf7e
--- /dev/null
+++ b/Prebuild/COPYING
@@ -0,0 +1,65 @@
1BSD License
2Copyright (c)2004-2008
3
4See AUTHORS file for list of copyright holders
5
6Dave Hudson (jendave@yahoo.com),
7Matthew Holmes (matthew@wildfiregames.com)
8Dan Moorehead (dan05a@gmail.com)
9Rob Loach (http://www.robloach.net)
10C.J. Adams-Collier (cjac@colliertech.org)
11
12http://dnpb.sourceforge.net
13All rights reserved.
14
15Redistribution and use in source and binary forms, with or without
16modification, are permitted provided that the following conditions
17are met:
18
191. Redistributions of source code must retain the above copyright notice,
20 this list of conditions and the following disclaimer.
21
222. Redistributions in binary form must reproduce the above copyright notice,
23 this list of conditions and the following disclaimer in the documentation
24 and/or other materials provided with the distribution.
25
263. The names of the authors may not be used to endorse or promote
27 products derived from this software without specific prior written
28 permission.
29
30 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
33 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
34 COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
35 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
36 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
38 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
39 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
40 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 POSSIBILITY OF SUCH DAMAGE.
42
43---
44
45Portions of src/Core/Targets/AutotoolsTarget.cs
46// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
47//
48// Permission is hereby granted, free of charge, to any person obtaining
49// a copy of this software and associated documentation files (the
50// "Software"), to deal in the Software without restriction, including
51// without limitation the rights to use, copy, modify, merge, publish,
52// distribute, sublicense, and/or sell copies of the Software, and to
53// permit persons to whom the Software is furnished to do so, subject to
54// the following conditions:
55//
56// The above copyright notice and this permission notice shall be
57// included in all copies or substantial portions of the Software.
58//
59// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
60// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
61// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
62// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
63// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
64// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
65// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Prebuild/ChangeLog b/Prebuild/ChangeLog
new file mode 100644
index 0000000..bb8e7b0
--- /dev/null
+++ b/Prebuild/ChangeLog
@@ -0,0 +1,461 @@
12008-12-09T02:15 D. Moonfire <d.moonfire@mfgames.com>
2 * src/Core/Kernel.cs
3 - Added a /ppi target to get the results of processing but before
4 processing the actual results.
5 * src/Core/Preprocessor.cs
6 - Applied the patch from kanato with formatting changes.
7 - Uses the <?include file="" ?> format.
8 * tests/
9 - Added some lightweight tests to test the functionality of the
10 include patch.
11
122008-06-19T09:37 John Anderson <sontek@gmail.com>
13 * src/Core/Kernel.cs
14 - Only Loop through targets that are not abstract.
15 * src/Core/Targets/VSGenericTarget.cs
16 - Marked abstract and removed the Target attribute.
17
182008-06-16T17:37 John Anderson <sontek@gmail.com>
19 * src/Core/Nodes/ProjectNode.cs,data/prebuild-1.7.xsd
20 - Added the ability to hardcode guid's in the projects
21
222008-05-21T0737 C.J. Adams-Collier <cjac@colliertech.org>
23 * src/Core/Targets/AutotoolsTarget.cs
24 - catch exception when unable to compile AssemblyInfo.cs
25
262008-05-07T17:29 John Anderson <sontek@gmail.com>
27 * src/Core/Targets/VSGenericTarget.cs
28 - Generate asp.net output in bin\ folder (asp.net requires it there)
29
302008-04-30T17:29 John Anderson <sontek@gmail.com>
31 * src/Core/Nodes/DatabaseReferenceNode.cs,
32 src/Core/Nodes/Datanode.cs,
33 src/Core/Nodes/FileNode.cs,
34 src/Core/Nodes/FileNodes.cs,
35 src/Core/Nodes/MatchNode.cs,
36 src/Core/Targets/VS2008Target.cs,
37 src/data/prebuild-1.7.xsd
38 - Refactored the project generation code to handle web projects and more
39 logically handle embedded resources and designer files.
40
412008-04-30T17:29 Joseph Lombrozo <digitaljeebus@gmail.com>
42 * src/Core/Nodes/SolutionNode.cs
43 - Had solutions inherit Configurations in the same way that Projects do.
44
452008-04-29T06:35 Joseph Lombrozo <digitaljeebus@gmail.com>
46 * src/Core/Targets/VS2008Target.cs,
47 src/Core/Nodes/DatabaseProjectNode.cs,
48 src/Core/Nodes/DatabaseReferenceNode.cs,
49 src/data/prebuild-1.7.xsd
50 - Added database references to database projects.
51 - Prevented nested solutions from being written to disk.
52
532008-04-29T05:43 Joseph Lombrozo <digitaljeebus@gmail.com>
54 * src/Core/Targets/VS2008Target.cs
55 - Enabled embedded solutions to contain Files.
56
572008-04-29T04:13 Joseph Lombrozo <digitaljeebus@gmail.com>
58 * src/Core/VSVersion.cs
59 - Fixed spelling mistake in enum comment.
60 * src/Core/Attributes/DataNodeAttribute.cs
61 - Allowed the DataNodeAttribute to be attached to a single class
62 more than once, allowing one class to be used to parse more than
63 one node at a time.
64 * src/Core/Kernel.cs
65 - Changed CacheNodeTypes() to allow for multiple DataNodeAttribute
66 instances in one class. Refactored ProcessFile(...) to return Solutions,
67 rather than adding them to the Kernel.
68 * src/Core/Nodes/SolutionNode.cs
69 - Added Guid (for embedded folders)
70 - Added DatabaseProjects, Solutions and Processes to the SolutionNode
71 when parsing.
72 * src/Core/Nodes/ProjectNode.cs
73 - Added FrameworkVersion property to allow for 2.0/3.0/3.5 differentiation.
74 * src/Core/Targets/VS2008Target.cs, src/data/prebuild-1.7.xsd
75 - Added ability to have embedded solutions, and externally referenced
76 prebuild scripts.
77
782008-04-24T04:33 John M. Anderson <sontek@gmail.com>
79 * src/Core/Targets/VS2003Target.cs, src/Core/Targets/VSVersion.cs
80 - Moved the VSVersion enum into its own file.
81 * src/Core/Targets/VS2008Target.cs
82 - added support for VS2008
83 * src/Core/Nodes/ProjectNode.cs
84 - Added initial support for ASP.NET projects
85 * src/Core/Nodes/DatabaseProjectNode.cs
86 - Added support for Visual Studio database projects
87
882008-02-19T07:08 C.J. Adams-Collier <cjac@colliertech.org>
89 * TODO
90 - added some tasks from Sam Hocevar
91 * src/Core/Targets/AutotoolsTarget.cs
92 - added a missing end paren
93 * COPYING
94 - Removed Randy Ridge's name from the copyright. Looks to me like
95 his name was present only because the file was nabbed from Tao
96
972008-02-09T20:29 C.J. Adams-Collier <cjac@colliertech.org>
98 * COPYING
99 - added MIT/X11 license due to inclusion of code from Monodevelop
100 * THANKS
101 - added Lluis Sanchez Gual and Todd Berman - I yoinked code from
102 their pkg-config .pc file parser to build AutotoolsTarget.cs.
103 Sorry it took me so long to remember to add mention of you guys!
104 * src/Core/Targets/AutotoolsTarget.cs
105 - added MIT/X11 license. see above.
106
1072008-02-07T08:27 C.J. Adams-Collier <cjac@colliertech.org>
108 * AUTHORS
109 - consolidated names and contact info found laying around the
110 source
111 * src/Core/Kernel.cs
112 - updated copyright date
113 - re-formatted license for 80-column editor
114 - updated log banner to indicate new date, new authors
115 * src/Core/Targets/AutotoolsTarget.cs
116 - clarified reasoning behind use of constants in
117 AutotoolsTarget.ParsePCFile
118 - reduced length of some long lines using newline/indent
119 - added log messages for parsing .pc files, emitting solutions,
120 projects
121 - robustified the inter-package dependency resolution target
122 - log warning when we can't find assembly for <Reference />
123 - clarified code for case of inability to find embedded
124 autotools.xml
125 * src/data/autotools.xml
126 - adding system lookup of resgen2 to configure.ac
127 - fixed .resource -> .resources typo
128 - added a rule to create <foo>.response file containing all sources
129 - using @<foo>.response on $(CSC) command line instead of listing
130 all source files
131 * src/Properties/AssemblyInfo.cs
132 - re-formatted license for an 80-column editor
133 - added more authors to the AssemblyCopyright attribute
134 - bumped version to 2.0.3
135 * prebuild.xml
136 - bumped version to 2.0.3
137 * scripts/autotools.sh
138 - if 'mono' is in the path, run Prebuild.exe with it
139 - using dirname to capture correct path to prebuild.xml &c
140
1412008-02-06T17:18 C.J. Adams-Collier <cjac@colliertech.org>
142 * src/Core/Targets/NAntTarget.cs
143 - re-formatted the license for an 80-column editor
144 - added myself to the copyright
145 - added a fix submitted by Gryc Ueusp <gryc.ueusp@gmail.com>
146 * src/Core/Targets/AutotoolsTarget.cs
147 - updated copyright to include 2008
148 * THANKS
149 - created file, added Gryc Ueusp <gryc.ueusp@gmail.com>
150
1512008-01-01T14:50 C.J. Adams-Collier <cjac@colliertech.org>
152 * src/data/autotools.xml
153 - fixed .resx -> .resource compilation
154 - fixed failing edge case where Project is an unsigned Library
155 - added $(RESOURCE_SRC) to list of extra dist files
156 * src/Core/Targets/AutotoolsTarget.cs
157 - removed embeddedResources from extraDistFiles list
158
1592007-04-18T07:49 C.J. Adams-Collier <cjac@colliertech.org>
160 * src/data/prebuild-1.7.xsd
161 - removed default version from references
162
1632007-04-06T12:42 C.J. Adams-Collier <cjac@colliertech.org>
164 * src/data/autotools.xml
165 - added support for /doc: output when XmlDocFile is not empty
166 - not printing \t \\n on lines that have no content
167 - gacutil now installs the root assembly instead of the one under
168 bin/Debug or whatever
169
1702007-04-04T22:12 C.J. Adams-Collier <cjac@colliertech.org>
171 * src/Core/Targets/AutotoolsTarget.cs
172 - removed debugging Console.WriteLine()
173 * src/data/autotools.xml
174 - ensuring that install-sh and missing get distributed
175 - explicitly stating that the sources, snk, resources and binary
176 references live under $(srcdir)
177 - corrected uninstall target
178 - verified distcheck completes successfully
179
1802007-04-03T21:56 C.J. Adams-Collier <cjac@colliertech.org>
181 * src/Core/Targets/AutotoolsTarget.cs
182 - added a using for System.Diagnostics
183 - added enum ClrVersion for use with the pkg-config parser
184 - added class SystemPackage for use with the pkg-config parser
185 - removed explicit "private" property of members since it is implied
186 - flushing the stream-writer before it's closed
187 - removed excess braces around an if statement
188 ! NormalizeAsmName(), AddAssembly(), GetAssembliesWithLibInfo(),
189 GetAssembliesWithoutLibInfo(), ProcessPiece(),
190 GetVariableFromPkgConfig(), ParsePCFile(),
191 RegisterSystemAssemblies(), RunInitialization()
192 - pulled the above from MonoDevelop to parse the system pkgconfig
193 files and determine /pkg: arguments. Original sources are here:
194 http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/SystemAssemblyService.cs
195 http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/ClrVersion.cs
196 ! WriteProject()
197 - now gathering project version from AssemblyInfo.cs if it is part
198 of the project
199 - changed the declaration of the ArrayList's in the method
200 - now copying assembly .config files to the project, distributing,
201 installing
202 - making sure all needed files live under the Project directory
203 - copying strongname keys to project directory
204 - parsing AssemblyInfo.cs to determine assembly version
205 - removing all references to ".."
206 - removed superfluous if(project.References.Count > 0) around
207 for(int refNum = 0; refNum < project.References.Count; refNum++)
208 - removed use of runtimeLibs
209 - adding hook to copy sibling project's generated assemblies to
210 this project during Make time
211 - added extra dist target to ensure all files required to build
212 get distributed during "make dist"
213 - added new xslt processing args:
214 -- assemblyName
215 -- extraDistFiles
216 -- pkgLibs (/pkg:foo)
217 -- localCopyTargets (to copy sibling assemblies at Make time)
218 -- projectVersion (if determined from AssemblyInfo.cs)
219 -- hasAssemblyConfig (if there's a assembly.exe.config present)
220 ! Write()
221 - calling RunInitialization() to gather pkg-config data
222 * src/data/autotools.xml
223 - accepting new args passed from AutotoolsTarget.cs
224 - modernized configure.ac a bit
225 - using a version of tar that allows >99-char filenames
226 - added ASSEMBLY_NAME variable
227 - using assembly name rather than project name for gac installation
228 - generated assembly is now assembly name and not project name
229 - accepting /pkg: flags gathered from AutotoolsTarget.cs
230 - adding Makefile targets to copy sibling project assemblies to .
231 - fixed Debug, Release targets
232 - adding support for strongname key signing
233 - adding /unsafe support
234 - adding a clean make target
235 - only running gacutil /u if the assembly being uninstalled is in gac
236 - added some templates to determine each Configuration's .snk
237 - added explanation as to why .exe assemblies live in $prefix/lib
238 * src/Properties/AssemblyInfo.cs
239 - bumped assembly version
240 * prebuild.xml
241 - bumped assembly version
242
2432007-03-29T18:03 C.J. Adams-Collier <cjac@colliertech.org>
244 * src/Core/Targets/AutotoolsTarget.cs
245 ! WriteProject()
246 - re-named incorrectly-named variable gacLibs to systemLibs
247 - added another reference list, runtimeLibs which contains the
248 libs we will need at runtime. we use this to build a MONO_PATH
249 - added monoPath to the xslt args list
250 * src/data/autotools.xml
251 ! <ProjectMakefileAm />
252 - renamed gacLibs to systemLibs
253 - added the sources to the dist list
254 - added logic to install libs that aren't strongnamed
255 ! <ProjectWrapperScriptIn />
256 - accepting a param to update the MONO_PATH
257
2582007-03-28T19:46 C.J. Adams-Collier <cjac@colliertech.org>
259 * src/Core/Targets/MonoDevelopTarget.cs
260 ! CleanProject()
261 - using Assembly.LoadWithPartialName to locate the assembly
262 * src/Core/Targets/AutotoolsTarget.cs
263 ! WriteCombine()
264 - no longer using $PWD to determine a project's source dir; this
265 doesn't work with <Process /> elements
266 - passing the solution name to all templates - fixes
267 multi-solution prebuild systems
268 ! WriteProject()
269 - no longer using $PWD to determine a project's source dir; this
270 doesn't work with <Process /> elements
271 - passing the solution name to all templates - fixes
272 multi-solution prebuild systems
273 - copying strongname key to the autotools directory
274 - using Assembly.LoadWithPartialName to locate assemblies
275 * src/data/autotools.xml
276 ! <ProjectConfigureAc />
277 - fixed the .pc AC_CONFIG_FILES macro
278 ! <ProjectMakefileAm />
279 - added solution name param
280 - wrapping if type=exe check around script install macro
281 - added type=lib check and .pc file install macro
282 - added support for Configuration-specific builds (Debug, Release, etc)
283 - added strongname keyfile code
284 - TODO: support non-strongnamed library installation
285 ! <ProjectWrapperScriptIn />
286 - added space preservation attribute to stylesheet element
287 - added a lower-case project name variable
288 - added solution name param
289 - made for-each template more specific
290 ! <SolutionAutogenSh />
291 - added solution name param
292 ! <SolutionConfigureAc />
293 - added solution name param
294 ! <SolutionMakefileAm />
295 - added solution name param
296 ! <ProjectPcIn />
297 - added solution name param
298
2992007-03-27T09:33 C.J. Adams-Collier <cjac@colliertech.org>
300 * src/Core/Targets/AutotoolsTarget.cs
301 - now processing the wrapper script if type is "Exe" or "WinExe"
302 * src/data/autotools.xml
303 ! <ProjectConfigureAc />
304 - being more exact about where text escaping is used
305 - using the correct variable name for the GACUTIL_FLAGS template
306 - using correct test="" for the AC_CONFIG_FILES macros
307 ! <ProjectMakefileAm />
308 - uncommented the bin_SCRIPTS section now that the script is being
309 generated correctly
310 ! <ProjectWrapperScriptIn />
311 - fixed whitespace at beginning of file, before #!
312 - using lower-case packageName to indicate installation location
313
3142007-03-27T09:33 C.J. Adams-Collier <cjac@colliertech.org>
315 * src/data/autotools.xml
316 ! <ProjectConfigureAc />
317 * added a lcProjectName which is $projectName lower-cased
318 * moved autoconf template specifier near AC_OUTPUT
319 * AC_OUTPUT with args is deprecated. now using AC_CONFIG_FILES
320 * placed AC_CONFIG_FILES() calls for wrapper script or pkg-config
321 file in xslt project type checks
322 ! <ProjectMakefileAm />
323 * commented out bin_SCRIPTS
324 * added a lcProjectName which is $projectName lower-cased
325 * using $lcProjectName instead of the longer version
326
3272007-03-27T08:39 C.J. Adams-Collier <cjac@colliertech.org>
328 * src/data/autotools.xml
329 ! <ProjectMakefileAm />
330 - added whitespace-preservation
331 - added the missing projectName param
332 - replaced bin_SCRIPTS with something that worked
333
3342007-03-27T07:56 C.J. Adams-Collier <cjac@colliertech.org>
335 * src/data/autotools.xml
336 ! <ProjectConfigureAc />
337 - cleaned up duplicate checks
338 - placed initialization macros above system check macros
339 - added some more messages about what's going on
340 - added GACUTIL_FLAGS variable including /package option
341 ! <ProjectMakefileAm />
342 - added an incomplete bin_SCRIPTS
343 - RCS check says "building" instead of "compiling"
344 ! <SolutionConfigureAc />
345 - removed macros that are useful only for projects
346 ! <ProjectWrapperScriptIn />
347 - created this element on this revision
348 - this is a wrapper shell script that lives in the $PATH and runs
349 the CIL assembly
350
3512007-03-26T20:18 C.J. Adams-Collier <cjac@colliertech.org>
352 * src/Core/Targets/AutotoolsTarget.cs
353 - creating new template arguments to contain the list of libs to
354 reference: source, binary & GAC
355 - source libs are included as part of this solution (untested)
356 - binary libs are distributed with the source (untested)
357 - GAC libs are assumed to be in the GAC or other lib path (tested)
358 * src/data/autotools.xml
359 - created new params through which to accept reference info
360 - created a working $(CSC) line
361 - added a TODO item for ordering project dependency for
362 AC_CONFIG_SUBDIRS code
363
3642007-03-26T08:41 C.J. Adams-Collier <cjac@colliertech.org>
365 * src/Core/Targets/AutotoolsTarget.cs
366 - now creating list of source files in managed code and passing
367 them to the template via <xsl:param>s
368 * src/data/prebuild-1.7.xsd
369 - updated the header comment to 2007
370 * src/data/autotools.xml
371 ! <ProjectConfigureAc>
372 - copied checks from Solution-level configure.ac
373 - copied solution-level config status
374 ! <ProjectMakefileAm>
375 - added <xsl:param> elements for file list to be passed through
376 - made a temporary target for the assembly we're building
377 - added this target to the deps of "all:"
378 ! <SolutionConfigureAc>
379 - changed status header/footer from "- - -" to "==="
380
3812007-03-23T08:33 C.J. Adams-Collier <cjac@colliertech.org>
382 Added version attribute handling code for Property element
383 Added description element handling code
384 * prebuild.xml
385 - added /Prebuild/Solution/Property/@version attribute
386 - added /Prebuild/Solution/Property/Description element
387 * src/Core/Nodes/ProjectNode.cs
388 - added some docs where they were missing and obvious
389 - added code to handle @version
390 * src/Core/Nodes/DescriptionNode.cs
391 - new file. Used to handle /Prebuild/Solution/Property/Description
392 * src/Core/Targets/AutotoolsTarget.cs
393 - added mkdirDashP(), a recursive directory creation method
394 - WriteProject() now copies the files to autotools/
395 * src/data/prebuild-1.7.xsd
396 - added /Prebuild/Solution/Property/Description element
397 - added /Prebuild/Solution/Property/@version attribute
398 * src/data/autotools.xml
399 - removed excess <xsl:value-of select="$projectName"/>
400 - explicitly using dnpb: prefix
401
4022007-03-23T04:31 C.J. Adams-Collier <cjac@colliertech.org>
403 Merged code from my stripped-down test
404 Adding support for the /Prebuild/Solution/Project/Author element
405 * prebuild.xml
406 - added Author elements
407 - cleaned up the really long Project element
408 * src/Core/Nodes/ProjectNode.cs
409 - added Author tag processing code
410 * src/Core/Nodes/AuthorNode.cs
411 - Created to process Author elements
412 - based off of ReferencePathNode.cs
413 * src/Core/Targets/AutotoolsTarget.cs
414 - merged code from https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/test.cs
415 - renamed old WriteCombine to WriteCombineOld
416 - renamed old WriteProject to WriteProjectOld
417 * src/data/prebuild-1.7.xsd
418 - added Author element to Project
419 * src/data/autotools.xml
420 - lower-cased utf
421
422
4232007-03-22T13:58 C.J. Adams-Collier <cjac@colliertech.org>
424 Exposing an XmlDocument that represents the prebuild.xml file
425 passed to the program
426
427 * src/Core/Kernel.cs
428 - created an object member called XmlDocument m_CurrentDoc
429 - created a property to access its value
430 - using m_CurrentDoc to load up the prebuild.xml file rather than
431 a local variable called "doc"
432
4332007-03-22 C.J. Adams-Collier <cjac@colliertech.org>
434 * prebuild.xml
435 - added autotools.xml created at https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/autotools.xml
436 * src/data/autotools.xml
437 - the same
438 * src/Core/Targets/MonoDevelopTarget.cs
439 - fixed bug introduced in r206
440
4412007-03-07 C.J. Adams-Collier <cjcollier@colliertech.org>
442 * src/data/prebuild-1.7.xsd
443 - added version attribute to Solution and Project elements
444
4452006-11-04T00:38 C.J. Adams-Collier <cjcollier@colliertech.org>
446 * placing AssemblyInfo.cs into Properties/
447 * Fixed double-mention of the package name
448
4492006-11-03T15:23 C.J. Adams-Collier <cjcollier@colliertech.org>
450 * corrected a problem in the Include.am generation code
451 * created the new .exe
452 * copied it to the root of the build
453
4542006-11-03T14:57 C.J. Adams-Collier <cjcollier@colliertech.org>
455 * Updated the .exe file
456
4572006-11-03 C.J. Adams-Collier <cjcollier@colliertech.org>
458 * Added a TODO file
459 * Added a ChangeLog file
460 * applied some fixes for autotools gac and pkg-config installation
461 problems
diff --git a/Prebuild/INSTALL b/Prebuild/INSTALL
new file mode 100644
index 0000000..23e5f25
--- /dev/null
+++ b/Prebuild/INSTALL
@@ -0,0 +1,236 @@
1Installation Instructions
2*************************
3
4Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
5Software Foundation, Inc.
6
7This file is free documentation; the Free Software Foundation gives
8unlimited permission to copy, distribute and modify it.
9
10Basic Installation
11==================
12
13These are generic installation instructions.
14
15 The `configure' shell script attempts to guess correct values for
16various system-dependent variables used during compilation. It uses
17those values to create a `Makefile' in each directory of the package.
18It may also create one or more `.h' files containing system-dependent
19definitions. Finally, it creates a shell script `config.status' that
20you can run in the future to recreate the current configuration, and a
21file `config.log' containing compiler output (useful mainly for
22debugging `configure').
23
24 It can also use an optional file (typically called `config.cache'
25and enabled with `--cache-file=config.cache' or simply `-C') that saves
26the results of its tests to speed up reconfiguring. (Caching is
27disabled by default to prevent problems with accidental use of stale
28cache files.)
29
30 If you need to do unusual things to compile the package, please try
31to figure out how `configure' could check whether to do them, and mail
32diffs or instructions to the address given in the `README' so they can
33be considered for the next release. If you are using the cache, and at
34some point `config.cache' contains results you don't want to keep, you
35may remove or edit it.
36
37 The file `configure.ac' (or `configure.in') is used to create
38`configure' by a program called `autoconf'. You only need
39`configure.ac' if you want to change it or regenerate `configure' using
40a newer version of `autoconf'.
41
42The simplest way to compile this package is:
43
44 1. `cd' to the directory containing the package's source code and type
45 `./configure' to configure the package for your system. If you're
46 using `csh' on an old version of System V, you might need to type
47 `sh ./configure' instead to prevent `csh' from trying to execute
48 `configure' itself.
49
50 Running `configure' takes awhile. While running, it prints some
51 messages telling which features it is checking for.
52
53 2. Type `make' to compile the package.
54
55 3. Optionally, type `make check' to run any self-tests that come with
56 the package.
57
58 4. Type `make install' to install the programs and any data files and
59 documentation.
60
61 5. You can remove the program binaries and object files from the
62 source code directory by typing `make clean'. To also remove the
63 files that `configure' created (so you can compile the package for
64 a different kind of computer), type `make distclean'. There is
65 also a `make maintainer-clean' target, but that is intended mainly
66 for the package's developers. If you use it, you may have to get
67 all sorts of other programs in order to regenerate files that came
68 with the distribution.
69
70Compilers and Options
71=====================
72
73Some systems require unusual options for compilation or linking that the
74`configure' script does not know about. Run `./configure --help' for
75details on some of the pertinent environment variables.
76
77 You can give `configure' initial values for configuration parameters
78by setting variables in the command line or in the environment. Here
79is an example:
80
81 ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
82
83 *Note Defining Variables::, for more details.
84
85Compiling For Multiple Architectures
86====================================
87
88You can compile the package for more than one kind of computer at the
89same time, by placing the object files for each architecture in their
90own directory. To do this, you must use a version of `make' that
91supports the `VPATH' variable, such as GNU `make'. `cd' to the
92directory where you want the object files and executables to go and run
93the `configure' script. `configure' automatically checks for the
94source code in the directory that `configure' is in and in `..'.
95
96 If you have to use a `make' that does not support the `VPATH'
97variable, you have to compile the package for one architecture at a
98time in the source code directory. After you have installed the
99package for one architecture, use `make distclean' before reconfiguring
100for another architecture.
101
102Installation Names
103==================
104
105By default, `make install' installs the package's commands under
106`/usr/local/bin', include files under `/usr/local/include', etc. You
107can specify an installation prefix other than `/usr/local' by giving
108`configure' the option `--prefix=PREFIX'.
109
110 You can specify separate installation prefixes for
111architecture-specific files and architecture-independent files. If you
112pass the option `--exec-prefix=PREFIX' to `configure', the package uses
113PREFIX as the prefix for installing programs and libraries.
114Documentation and other data files still use the regular prefix.
115
116 In addition, if you use an unusual directory layout you can give
117options like `--bindir=DIR' to specify different values for particular
118kinds of files. Run `configure --help' for a list of the directories
119you can set and what kinds of files go in them.
120
121 If the package supports it, you can cause programs to be installed
122with an extra prefix or suffix on their names by giving `configure' the
123option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
124
125Optional Features
126=================
127
128Some packages pay attention to `--enable-FEATURE' options to
129`configure', where FEATURE indicates an optional part of the package.
130They may also pay attention to `--with-PACKAGE' options, where PACKAGE
131is something like `gnu-as' or `x' (for the X Window System). The
132`README' should mention any `--enable-' and `--with-' options that the
133package recognizes.
134
135 For packages that use the X Window System, `configure' can usually
136find the X include and library files automatically, but if it doesn't,
137you can use the `configure' options `--x-includes=DIR' and
138`--x-libraries=DIR' to specify their locations.
139
140Specifying the System Type
141==========================
142
143There may be some features `configure' cannot figure out automatically,
144but needs to determine by the type of machine the package will run on.
145Usually, assuming the package is built to be run on the _same_
146architectures, `configure' can figure that out, but if it prints a
147message saying it cannot guess the machine type, give it the
148`--build=TYPE' option. TYPE can either be a short name for the system
149type, such as `sun4', or a canonical name which has the form:
150
151 CPU-COMPANY-SYSTEM
152
153where SYSTEM can have one of these forms:
154
155 OS KERNEL-OS
156
157 See the file `config.sub' for the possible values of each field. If
158`config.sub' isn't included in this package, then this package doesn't
159need to know the machine type.
160
161 If you are _building_ compiler tools for cross-compiling, you should
162use the option `--target=TYPE' to select the type of system they will
163produce code for.
164
165 If you want to _use_ a cross compiler, that generates code for a
166platform different from the build platform, you should specify the
167"host" platform (i.e., that on which the generated programs will
168eventually be run) with `--host=TYPE'.
169
170Sharing Defaults
171================
172
173If you want to set default values for `configure' scripts to share, you
174can create a site shell script called `config.site' that gives default
175values for variables like `CC', `cache_file', and `prefix'.
176`configure' looks for `PREFIX/share/config.site' if it exists, then
177`PREFIX/etc/config.site' if it exists. Or, you can set the
178`CONFIG_SITE' environment variable to the location of the site script.
179A warning: not all `configure' scripts look for a site script.
180
181Defining Variables
182==================
183
184Variables not defined in a site shell script can be set in the
185environment passed to `configure'. However, some packages may run
186configure again during the build, and the customized values of these
187variables may be lost. In order to avoid this problem, you should set
188them in the `configure' command line, using `VAR=value'. For example:
189
190 ./configure CC=/usr/local2/bin/gcc
191
192causes the specified `gcc' to be used as the C compiler (unless it is
193overridden in the site shell script). Here is a another example:
194
195 /bin/bash ./configure CONFIG_SHELL=/bin/bash
196
197Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
198configuration-related scripts to be executed by `/bin/bash'.
199
200`configure' Invocation
201======================
202
203`configure' recognizes the following options to control how it operates.
204
205`--help'
206`-h'
207 Print a summary of the options to `configure', and exit.
208
209`--version'
210`-V'
211 Print the version of Autoconf used to generate the `configure'
212 script, and exit.
213
214`--cache-file=FILE'
215 Enable the cache: use and save the results of the tests in FILE,
216 traditionally `config.cache'. FILE defaults to `/dev/null' to
217 disable caching.
218
219`--config-cache'
220`-C'
221 Alias for `--cache-file=config.cache'.
222
223`--quiet'
224`--silent'
225`-q'
226 Do not print messages saying which checks are being made. To
227 suppress all normal output, redirect it to `/dev/null' (any error
228 messages will still be shown).
229
230`--srcdir=DIR'
231 Look for the package's source code in directory DIR. Usually
232 `configure' can determine that directory automatically.
233
234`configure' also accepts some other, not widely useful, options. Run
235`configure --help' for more details.
236
diff --git a/Prebuild/NEWS b/Prebuild/NEWS
new file mode 100644
index 0000000..bea28da
--- /dev/null
+++ b/Prebuild/NEWS
@@ -0,0 +1,200 @@
1Prebuild is an XML-driven pre-build tool allowing developers to easily generate project or make files for major IDE's and .NET development tools including: Visual Studio 2005, Visual Studio 2003, Visual Studio 2002, SharpDevelop, MonoDevelop, and NAnt.
2
3Documentation and downloads are available at http://dnpb.sourceforge.net.
4
5Prebuild is licensed under the BSD license.
6
7[ XXXXXXX XX, XXX - 1.3.2 ]
8 + Added Keyfile signing to NAnt target and VS2005 target
9 + Updated XSD file to 1.7
10 + Boo and VisualBasic Language support in VS2005 target
11 + Added basic Autotools target. It creates a non-recursive Autotools system.
12 ! Multiple files can be excluded from the Match node
13 ! VS2005 now handles .resx files correctly.
14 ! NAnt and Autotools now handle defines
15 ! NAnt and Autotools now handle resources
16 + Conditional XML variables can be passed through the command line.
17 + Added /install and /remove command line flags to install and remove assemblies from the GAC
18 + Many fixes to VS2005 target
19
20[ July 21, 2006 - 1.3.1 ]
21 ! VS2005 fixes from Rob Loach
22 ! NAnt fixes from Rob Loach and David Hudson
23 ! XML doc fixes from Rob Loach
24 + Added SharpDevelop2 target (really just uses VS2005 target)
25 ! Fixed bug with BuildEvents in Monodevelop target
26 + Passing /yes will default to answering yes to any warnings
27
28[ February 28, 2006 - 1.3 ]
29 + Added MonoDevelop target.
30 + Added NAnt target.
31 + Lots of fixes to all targets.
32 * Cleaned up the code using FXCop.
33 * Updated schema to 1.6 to fix a typo and add a new parameter.
34 * jendave is now the maintainer of the project. RobLoach has been added as a developer.
35 * Removed references to 'dnpb'.
36 + Added rudimentary support for pre- and post- build scripts
37 * Updated examples.
38
39[ August 5, 2004 - 1.2 ]
40 + Added Visual Studio Express (vs2005express) target contributed by Borrillis and modified for use with different languages
41 + Added the allowedgroups command line option followed by a pipe-delimited list of project group filter flags (eg. Group1|Group2) allow optional filtering of all projects that dont have at least one of these flags
42 + Added the filterGroups XML attribute to the project node and updated the scheme to v1.5 for this addition, it is used to specified the delimited list of filter groups to which a project belongs
43 * Modified the removedir command line option to allow for a pipe-delimited list of directory names
44 ! Modified the resource loading code to search for resourced without the prepended namespace (as Visual Studio .NET does it) to allow for it to be compiled with SharpDevelop as well
45 + Added the GenerateXmlDocFile boolean option to the Options XML element
46 * Changed the behavior of the XmlDocFile option so that if not specified it uses the assemblyName (without file extension) + .xml for the file name instead of just not generating the file since the new GenerateXmlDocFile takes care of this
47
48[ January 3, 2004 - 1.1 ]
49 ! Replaced regex use for more efficient manual parsing to allow use on non-windows platforms with Mono which has Regex problems
50 + Added the checkOsVars attribute to the root element for enabling interpolation for Enviroment variables in the form ${var}, otherwise no checking is performed for efficiency-sake
51 * Make the version attribute on the root element optional as it isn't used and not needed since the schema url contains the version
52
53[ December 30, 2004 - 1.1 ]
54 ! Applied Leed's fix for SharpDevelop references
55 + Rewrote much of the processing for better validation and without the use of a temp file
56 + Added support for configurations at the project level which are named All. They now apply changes to all Solution level defined configs
57 * Changed all spaces into tabs
58 + Added support for the None build action
59 * Replaced all sequence's in the XML schema for all's because the order doesn't matter since the xml file is loaded into an XmlDocument
60
61[ December 25, 2004 - 1.0 ]
62 + Added the /removedir option for cleaning directories like obj before file releases
63 + Changed WriteTempXml() and the new DeleteTempXml() methods to be compiled only in DEBUG builds
64 * Made path optional for Match elements (defaults to current directory) and updates schema for it
65 ! Fixed XML example in the readme.txt
66 + Added example xml files to docs directory
67 * Updated license.txt to add Dan Moorehead and update copyright years
68 + Updated prebuild.xml to take advantage of the default path attribute for match elements
69 + Updated Clean to delete the obj directories
70
71[ December 25, 2004 - 0.13 ]
72 + Added dnpb.exe so that it can be used to generate the project files
73 + Added dnpb.ico
74 * Added parameterless Write statement to Log for writing a single line
75 * Changed scehema to version 1.3 for support of icon attribute
76 * Added support for All configuration name under a Project node signifying common settings for all configurations
77 ! Fixed the SupressWarnings by adding the corresponding field to OptionsNode
78 * Wrote documentation in docs/readme.txt
79 * Added Dan Moorehead to copyrights and extended date from 2004 to 2004-2005
80 * Updated prebuild.xml
81 * Optimized Log class
82 * Updated OutputUsage()
83 * /clean targets all by default
84 * No log file is used by default, /log without value specified uses default file name
85 + Added support for the /pause which pauses the utility after execution to observe output
86
87
88[ September 27, 2004 - 0.12.2a ]
89 ! Fixed a nasty bug when trying to delete our temp file for pre-processing.
90
91[ September 15, 2004 - 0.12.2 ]
92 + Expanded platform identification, thanks to the NAnt guys for shedding some
93 light on how to properly check for UNIX platforms! Thanks guys!
94 * POSIX OS identifier changed to UNIX. Valid OS names are now "Win32", "UNIX",
95 and "Unknown".
96 ! Fixed SharpDevelop target to properly use the 'rootNamespace' attribute of
97 the Project tag.
98 + New command-line switch, /ppo, forces DNPB to pre-process the file and write
99 the pre-processed file. This allows you to test/debug your pre-processor
100 macros. No other processing will be done. You can specify a target file as
101 a paramter for the /ppo switch, or DNPB will write the file 'preprocessed.xml'
102 if you do not specify a file.
103 + The Match tag now has a 'buildAction' attribute which functions exactly like
104 the attribute of the same name for the File tag.
105
106[ August 5, 2004 - 0.12.1 ]
107 + Added environment variable expansion for all values. Environment variables
108 should be listed in the form ${VAR}.
109
110[ July 30, 2004 - 0.12.0 ]
111 + Added preprocessing via XML processing information tags. Available tags
112 are: <?if <exp> ?>, <?elseif <exp> ?>, <?else ?> and <?endif ?>. The
113 current expression parser is very basic, but will be replaced with a more
114 capable parser over time. Current operators available are: =, !=, <, >,
115 <=, >=. Current test variables available: OS, RuntimeVersion, RuntimeMajor,
116 RuntimeMinor, RuntimeRevision.
117
118[ July 27, 2004 - 0.11.4 ]
119 + Added 'useRegex' attribute to the Match tag. Matches can now use regular
120 expressions to match filenames.
121 + Added the 'assemblyName' attribute to the Project tag. Projects can now
122 set their output assembly name.
123 ! Fixed several bugs in the way that Project tags inheirt their parent
124 Solutions configuration options. This operation should now work fully as
125 intended.
126 ! Due to some wierdness, Project Guid's are now stored as part of the Project
127 node and created at parse time.
128
129[ May 11, 2004 - 0.11.3 ]
130 ! Fixed a bug where I was writing the wrong property name for a projects root
131 namespace.
132 ! Removed a DEBUG statement I had left in the code in 0.11.2.
133 ! Fixed a bug in the VS2002 writer which caused the version variables to not
134 be overriden correctly.
135 + Added the rootNamespace property to the <Project> element, allowing you to
136 specify the root namespace.
137 * /target and /clean are now mutually exclusive command line switches, and
138 they both now take the all option. In the case of /target all, all build
139 file for all targets will be created. In the case of /clean all, the user
140 will be prompted to make sure they want to do it, and if so, will clean
141 all build files for all targets.
142
143[ April 22, 2004 - 0.11.2 ]
144 ! Fixed a bug with the /file command-line operator. Was using the unresolved
145 file path rather then the resolved one, was making the attempt to open the
146 dnpb file fail.
147 ! Fixed a bug in the schema that required at least 1 solution and 1 reference
148 path. We can do just fine with 0 of either of these. Some files may be all
149 <Process> statements and not have any <Solution> tags.
150 ! Fixed a bug that caused the project references not to be written with the
151 SharpDevelop target.
152 * Changed the schema to version 1.2, allowing for Configuration nodes to exist
153 under project nodes. The inheritance of values is hierarchical. Meaning, if
154 you define a configuration named Debug at the Soltion level, and one by the
155 same name at the Project level, the one at the Project level will first
156 inherit the options of the Solution level configuration, then set it's own
157 options. If you define a configuration at the Project level and it does not
158 exist at the Solution level, it will be created at the Solution level.
159 * Project references should now work correctly across the board. Note that due
160 to a restriction in Visual Studio, you can only reference projects in the same
161 solution.
162
163[ April 21, 2004 - 0.11.1 ]
164 ! Fixed a problem with resolving paths in various targets. Was not properly
165 setting the CWD.
166 * Schema updated to 1.1, moving the ReferencePath element from the Options
167 element to the Project element. This makes more logical sense, given that
168 reference paths are resolved relative to the project path. Any prebuild.xml
169 file referecning verison 1.0 will fail! Please update to the 1.1 schema.
170
171[ April 19, 2004 - 0.11.0 ]
172 * Added several attributes across the code to make FxCop happy
173 ! Fixed bugs in reference paths being written in the VS targets.
174 ! Fixed a bug in ProjectNode which was doing two CWDStack.Push() calls instead of
175 a Push/Pop pair. Was wreaking havoc with <Process> tags.
176 ! Fixed some bugs in the path tracking, both the Project and Solution nodes now
177 have a FullPath property, which is the full path to the file resolved at load
178 time. This should fix all path relativity problems.
179 + Added new /clean switch, allowing the target to clean up any files it generated.
180 in accordance, the ITarget interface has been updated to support a new Clean()
181 method.
182 + Completed addition of the <Process> tag, to allow the referencing of external
183 prebuild.xml files.
184 + Added the runtime attribute to the Project element. This allows the developer
185 to specify which runtime a project should target (Mono or Microsoft). This is
186 of course ignored in certain targets like the Visual Studio targets.
187 + Added the SharpDevelop target.
188
189[ April 13, 2004 - 0.10.1a ]
190 + Added the buildAction attribute to the File node. This is needed for dnpb
191 to even be able to bootstrap itself (dnpb-1.0.xsd must be an embedded resource)
192
193[ April 13, 2004 - 0.10.1 ]
194 * First Release
195
196[ Key ]
197* = Change or information
198+ = Addition
199! = Bug Fix
200
diff --git a/Prebuild/README b/Prebuild/README
new file mode 100644
index 0000000..2b05fb5
--- /dev/null
+++ b/Prebuild/README
@@ -0,0 +1,274 @@
1Prebuild Instructions
2
3Prebuild is an XML-driven pre-build tool allowing developers to easily generate project or make files for major IDE's and .NET development tools including: Visual Studio 2005, Visual Studio 2003, Visual Studio 2002, SharpDevelop, SharpDevelop2, MonoDevelop, and NAnt.
4
5_______________________________________________________________________________
6Overview
7
8Prebuild can be either be run from the command line to generate the
9project and make files or you can execute the included batch (*.bat)
10and Unix Shell script (*.sh) files.
11
12_______________________________________________________________________________
13The currently supported developement tools and their associated batch
14and shell script files.
15
16Visual Studio .NET 2005 (VS2005.bat)
17Visual Studio .NET 2003 (VS2003.bat)
18Visual Studio .NET 2002 (VS2002.bat)
19SharpDevelop (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
20SharpDevelop2 (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
21MonoDevelop (MonoDevelop.sh) - http://www.monodevelop.com/
22NAnt (nant.sh and nant.bat) - http://nant.sourceforge.net/
23Autotools (autotools.bat and autotools.sh) - http://en.wikipedia.org/wiki/GNU_build_system
24
25Notes:
26
27A Unix Shell script is provided for MonoDevelop, as it does not run on
28Windows at this time.
29
30Visual Studio .NET 2005 and the Visual Express IDE's can import
31solutions from older versions of Visual Studio .NET.
32
33Makefiles are not currently supported.
34
35_______________________________________________________________________________
36Command Line Syntax:
37
38Example:
39> Prebuild /target vs2003
40
41This will generate the project files for Visual Studio.NET 2003 and
42place the redirect the log to a file named PrebuildLog.txt in the
43parent directory
44
45
46The syntax structure is as below, where commandParameter is optional
47depending on the command and you can provide several option-value
48pairs.
49
50Note: The '> ' signifies the command prompt, do not enter this literally
51
52> Prebuild /<option> <commandParameter>
53
54> Prebuild /target vs2003 /pause
55
56> Prebuild /target vs2003 /log ../Log.txt /pause /ppo /file ProjectConfig.xml
57
58> Prebuild /target sharpdev /log
59
60> Prebuild /removedir obj|bin
61
62> Prebuild /target vs2003 /allowedgroups Group1|Group2
63
64> Prebuild /clean
65
66> Prebuild /clean /yes
67
68> Prebuild /clean vs2003
69
70_______________________________________________________________________________
71Command Line Options:
72
73/usage - Shows the help information on how to use Prebuild and what
74the different options are and what they do
75
76/clean - The project files generated for the target type specified as
77a parameter for this option will be deleted. If no value is specified
78or if 'all' is specified, then project files for all the target types
79will be deleted.
80
81/target - Specified the name of the development tool for which project
82or make files will be generated. Possible parameter values include:
83vs2003, vs2002, sharpdev
84
85/file - Specifies the name of the XML which defines what files are to
86be referenced by the generated project files as well as configures the
87options for them. If not specified, prebuild.xml in the current
88directory will be used as the default.
89
90/log - Specified the log file that should be written to for build
91errors. If this option is not specified, no log file is generated,
92but if just no value is specified, then the defaul filename will be
93used for the log (Prebuild.log).
94
95/ppo - Preprocesses the xml file to test for syntax errors or problems
96but doesn't generate the files
97
98/pause - Shows the console until you press a key so that you can view
99the messages written while performing the specified actions.
100
101This allows you to check if an errors occurred and - if so - what it
102was.
103
104/showtargets - Shows a list of all the targets that can be specified
105as values for the /clean and /target commands.
106
107/allowedgroups - This is followed by a pipe-delimited list of project
108group filter flags (eg. Group1|Group2) allow optional filtering of all
109projects that dont have at least one of these flags
110
111/removedir - This is followed by a pipe-delimited list of directory
112names that will be deleted while recursivly searching the directory of
113the prebuild application and its child directories (eg. use obj|bin to
114delete all output and temporary directories before file releases)
115
116/yes - Answer yes to any warnings (e.g. when cleaning all projects).
117
118_______________________________________________________________________________
119Example Batch Files and Shell Scripts
120
121NOTE: Common batch and shell script files are included with Prebuild source and file releases.
122______________________________
123MonoDevelop
124
125#!/bin/sh
126# Generates a solution (.mds) and a set of project files (.mdp)
127
128# for MonoDevelop, a Mono port of SharpDevelop
129# (http://icsharpcode.net/OpenSource/SD/Default.aspx)
130
131./Prebuild /target monodev /pause
132
133______________________________
134Visual Studio .NET 2003
135
136@rem Generates a solution (.sln) and a set of project files (.csproj)
137@rem for Microsoft Visual Studio .NET 2002
138Prebuild /target vs2003 /pause
139
140Notes:
141Text after lines that start with @rem are comments and are not evaluated
142You can also place pause on the last line instead of specifing the /pause command.
143
144_______________________________________________________________________________
145Example XML Configuration File
146
147Note:
148
149XML Comments (<!-- Comment -->) are used to markup the prebuild.xml
150file with notes
151
152The below file may be out-of-date, however the RealmForge Prebuild
153file serves as an up-to-date and extensive example.
154
155It can be viewed using Tigris.org's WebSVN
156(http://realmforge.tigris.org/source/browse/realmforge/trunk/src/prebuild.xml)
157by just clicking on the "view file" link for the latest revision.
158
159_________________________________
160
161<?xml version="1.0" encoding="utf-8"?>
162 <!--The version of the XML schema specified in the version and xmlns attributes should match the one for which the version of Prebuild.exe used was compiled for. In this example it is the version 1.3 schema, you can find the XSD schema file at the url specified in the xmlns attribute. -->
163<Prebuild version="1.6" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
164 <Solution name="RealmForge"> <!--The title and file name for the solution, combine, workspace, or project group (depending on what development tool you are using)-->
165 <!--Configurations found as children of Solution are used as templates for the configurations found in the project, this allows you to avoid writing the same options in each project (and maintaining each of these). You can provide defaults and then override them in the configurations defined for each project. All options are optional.-->
166 <Configuration name="Debug">
167 <Options>
168 <!-- simple logically expressions can be evaluated, if, else, elseif, and endif are valid statements. Note that it is not neccisary to define POSIX or WIN32 -->
169 <?if OS = "Win32" ?>
170 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
171 <?else ?>
172 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
173 <?endif ?>
174 <OptimizeCode>false</OptimizeCode>
175 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
176 <AllowUnsafe>false</AllowUnsafe>
177 <WarningLevel>4</WarningLevel>
178 <!-The filter for the number of warnings or errors shown and the tolerance level as to what is an error. This is value from 0 to 4 where 4 is the most strict (least tolerent).-->
179
180 <WarningsAsErrors>false</WarningsAsErrors>
181 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
182 <!-- A semicolon ';' delimited list of the warnings that are filtered and not shown in the output window during compiling a project. Only include the number portion of the warning codes that are shown in output during compilation (eg CS1591, should be entered as 1591)-->
183
184 <OutputPath>..\bin</OutputPath>
185 <DebugInformation>true</DebugInformation>
186 <RegisterComInterop>false</RegisterComInterop>
187 <IncrementalBuild>true</IncrementalBuild>
188 <BaseAddress>285212672</BaseAddress>
189 <FileAlignment>4096</FileAlignment>
190 <NoStdLib>false</NoStdLib>
191 <XmlDocFile>Docs.xml</XmlDocFile>
192 </Options>
193 </Configuration>
194 <Configuration name="Release"> <!-- You can define multple configurations that projects can have, but there is no way to define which one is selected by default as this is a part of the user preferences for a project, not the solution or project files -->
195 <Options>
196 <CompilerDefines>TRACE</CompilerDefines>
197 <OptimizeCode>true</OptimizeCode>
198 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
199 <AllowUnsafe>false</AllowUnsafe>
200 <WarningLevel>4</WarningLevel>
201 <WarningsAsErrors>false</WarningsAsErrors>
202 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
203 <OutputPath>..\bin</OutputPath>
204 <DebugInformation>false</DebugInformation>
205 <RegisterComInterop>false</RegisterComInterop>
206 <IncrementalBuild>true</IncrementalBuild>
207 <BaseAddress>285212672</BaseAddress>
208 <FileAlignment>4096</FileAlignment>
209 <NoStdLib>false</NoStdLib>
210 <GenerateXmlDocFile>true</GenerateXmlDocFile>
211 <XmlDocFile>Docs.xml</XmlDocFile>
212 </Options>
213 </Configuration>
214
215 <!-- One of the projects that is included in the Solution -->
216 <Project name="RealmForge.Utility" Language="VisualBasic" path="Utility" type="Library" assemblyName="RealmForge.Utility" rootNamespace="RealmForge">
217 <Configuration name="Debug">
218 <Options>
219 <OutputPath>..\bin\lib\Utility</OutputPath>
220 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
221 </Options>
222 </Configuration>
223 <Configuration name="Release">
224 <Options>
225 <OutputPath>..\bin\lib\Utility</OutputPath>
226 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
227 </Options>
228 </Configuration>
229 <ReferencePath>../bin</ReferencePath>
230 <Reference name="System"/>
231 <Reference name="System.Data"/>
232 <Reference name="System.Drawing"/>
233 <Reference name="System.Xml"/>
234 <Reference name="System.Runtime.Serialization.Formatters.Soap"/>
235 <Reference name="ICSharpCode.SharpZipLib"/>
236 <Files>
237 <Match path="." pattern="*.vb" recurse="true"/>
238 </Files>
239 </Project>
240
241 <!-- Another projects that is included in the Solution -->
242 <Project name="DemoGame" Language="C#" path="DemoGame" type="WinExe" icon="..\bin\RealmForge.ico" assemblyName="DemoGame" rootNamespace="RealmForge">
243 <!-- icon is used to define the location of the .ico file that is embeeded in the assembly when the project is compiled. This is relative to the project path -->
244 <!--type defines the type of project, valid types are Library (.dll), WinExe (.exe), and Exe (.exe). WinExe is not windows specific, it just defines that it is a GUI application and that no Console or Command window will show when it is started-->
245
246 <Configuration name="Debug">
247 <Options>
248 <OutputPath>..\bin</OutputPath>
249 <XmlDocFile>DemoGame.xml</XmlDocFile>
250 </Options>
251 </Configuration>
252 <Configuration name="Release">
253 <Options>
254 <OutputPath>..\bin</OutputPath>
255 <XmlDocFile>DemoGame.xml</XmlDocFile>
256 </Options>
257 </Configuration>
258 <ReferencePath>../bin</ReferencePath>
259 <Reference name="System"/> <!-- Assemblies that are located in the GAC (installed, global) can be referenced-->
260 <Reference name="ode"/> <!-- Assemblies that are located in the output directory to which the file is built can be referenced -->
261 <Reference name="RealmForge.Utility"/> <!-- When you reference the name of another project, then that project (and it's output) will be referenced instead of looking for a pre-built assembly-->
262 <Files>
263 <Match path="." pattern="*.cs" recurse="true"/>
264 <Match path="." pattern="*.bmp" recurse="true" buildAction="EmbeddedResource"/>
265 <Match path="." pattern="[^a]*\.(png|jpg)" useRegex="true" buildAction="EmbeddedResource"/>
266
267 <!-- Uses a regex or regular expression to find all files that end with .png or .jpg but dont have the letter 'a' in their name and add them to the project as EmbeddedResource's. Because recurse enabled (default is false), only the values in the files in that are directly in the project directory (not child directories) are checked.-->
268 <!--EmbeddedResource, Content, and Compile are valid buildAction's-->
269 </Files>
270 </Project>
271
272 </Solution>
273</Prebuild>
274
diff --git a/Prebuild/THANKS b/Prebuild/THANKS
new file mode 100644
index 0000000..576467c
--- /dev/null
+++ b/Prebuild/THANKS
@@ -0,0 +1,18 @@
1Gryc Ueusp <gryc.ueusp@gmail.com>
2
3 caught a problem with the NAnt target's .build output which caused
4 the Ubuntu build servers to choke on prebuild-generated packages
5
6Todd Berman <tberman@sevenl.net>
7Lluis Sanchez Gual <lluis@novell.com>
8
9 pkg-config .pc file parser used in AutotoolsTarget.cs was ripped off
10 from work contributed to MonoDevelop by Lluis and Todd. It came
11 from
12
13src/core/MonoDevelop.Core/MonoDevelop.Core/SystemPackage.cs (Lluis)
14
15 and
16
17src/core/MonoDevelop.Core/MonoDevelop.Core/SystemAssemblyService.cs
18 (Lluis && Todd)
diff --git a/Prebuild/TODO b/Prebuild/TODO
new file mode 100644
index 0000000..33b19a1
--- /dev/null
+++ b/Prebuild/TODO
@@ -0,0 +1,43 @@
1* monodev target should be able to detect whether the project is 1.x
2 or 2.x runtime
3
4* remove target which links ../project/foo.dll to each project's build
5 root
6
7* generate .config files
8
9* Fix the autotools target so that
10sub generate_project_files { ... }
11sub generate_solution_files { ... }
12sub generate_multi_solution_files { ... }
13sub generate_project {
14 ...
15 generate_project_files();
16}
17sub generate_solution {
18 foreach $project ( @projects ){
19 mkdir "$project/";
20 pushd "$project/";
21 generate_project();
22 popd;
23 }
24 generate_solution_files();
25}
26sub generate_multi_solution {
27 foreach $solution ( @solutions ){
28 mkdir "$solution/";
29 pushd "$solution/";
30 generate_solution();
31 popd;
32 }
33 generate_multi_solution_files();
34}
35
36if(numProjects == 1){
37 generate_project();
38}elsif(numSolutions == 1){
39 generate_solution();
40}else{
41 generate_multi_solution();
42}
43
diff --git a/Prebuild/clean.bat b/Prebuild/clean.bat
new file mode 100755
index 0000000..1d71cbf
--- /dev/null
+++ b/Prebuild/clean.bat
@@ -0,0 +1 @@
NAnt.exe clean \ No newline at end of file
diff --git a/Prebuild/clean.sh b/Prebuild/clean.sh
new file mode 100755
index 0000000..900b6ed
--- /dev/null
+++ b/Prebuild/clean.sh
@@ -0,0 +1 @@
nant clean
diff --git a/Prebuild/doc/prebuild-example1.xml b/Prebuild/doc/prebuild-example1.xml
new file mode 100644
index 0000000..a2cee42
--- /dev/null
+++ b/Prebuild/doc/prebuild-example1.xml
@@ -0,0 +1,300 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Prebuild version="1.6" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
3 <Solution name="RealmForge">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>TRACE;DEBUG</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
9 <AllowUnsafe>false</AllowUnsafe>
10 <WarningLevel>4</WarningLevel>
11 <WarningsAsErrors>false</WarningsAsErrors>
12 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
13 <OutputPath>..\bin</OutputPath>
14 <DebugInformation>true</DebugInformation>
15 <RegisterComInterop>false</RegisterComInterop>
16 <IncrementalBuild>true</IncrementalBuild>
17 <BaseAddress>285212672</BaseAddress>
18 <FileAlignment>4096</FileAlignment>
19 <NoStdLib>false</NoStdLib>
20 <XmlDocFile>Docs.xml</XmlDocFile>
21 </Options>
22 </Configuration>
23 <Configuration name="Release">
24 <Options>
25 <CompilerDefines>TRACE</CompilerDefines>
26 <OptimizeCode>true</OptimizeCode>
27 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
28 <AllowUnsafe>false</AllowUnsafe>
29 <WarningLevel>4</WarningLevel>
30 <WarningsAsErrors>false</WarningsAsErrors>
31 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
32 <OutputPath>..\bin</OutputPath>
33 <DebugInformation>false</DebugInformation>
34 <RegisterComInterop>false</RegisterComInterop>
35 <IncrementalBuild>true</IncrementalBuild>
36 <BaseAddress>285212672</BaseAddress>
37 <FileAlignment>4096</FileAlignment>
38 <NoStdLib>false</NoStdLib>
39 <XmlDocFile>Docs.xml</XmlDocFile>
40 </Options>
41 </Configuration>
42
43 <Project name="RealmForge.Utility" path="Utility" type="Library" assemblyName="RealmForge.Utility" rootNamespace="RealmForge">
44 <Configuration name="Debug">
45 <Options>
46 <OutputPath>..\bin\lib\Utility</OutputPath>
47 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
48 </Options>
49 </Configuration>
50 <Configuration name="Release">
51 <Options>
52 <OutputPath>..\bin\lib\Utility</OutputPath>
53 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
54 </Options>
55 </Configuration>
56 <ReferencePath>../bin</ReferencePath>
57 <Reference name="System"/>
58 <Reference name="System.Data"/>
59 <Reference name="System.Drawing"/>
60 <Reference name="System.Xml"/>
61 <Reference name="System.Runtime.Serialization.Formatters.Soap"/>
62 <Reference name="ICSharpCode.SharpZipLib"/>
63 <Files>
64 <Match pattern="*.cs" recurse="true"/>
65 </Files>
66 </Project>
67
68 <Project name="RealmForge.Framework" path="Framework" type="Library" assemblyName="RealmForge.Framework" rootNamespace="RealmForge">
69 <Configuration name="Debug">
70 <Options>
71 <OutputPath>..\bin\lib\Framework</OutputPath>
72 <XmlDocFile>RealmForge.Framework.xml</XmlDocFile>
73 </Options>
74 </Configuration>
75 <Configuration name="Release">
76 <Options>
77 <OutputPath>..\bin\lib\Framework</OutputPath>
78 <XmlDocFile>RealmForge.Framework.xml</XmlDocFile>
79 </Options>
80 </Configuration>
81 <ReferencePath>../bin</ReferencePath>
82 <Reference name="System"/>
83 <Reference name="System.Data"/>
84 <Reference name="System.Xml"/>
85 <Reference name="System.Windows.Forms"/>
86 <Reference name="System.Drawing"/>
87 <Reference name="Axiom.MathLib"/>
88 <Reference name="RealmForge.Utility"/>
89 <Reference name="Tao.OpenAl"/>
90 <Reference name="ICSharpCode.SharpZipLib"/>
91 <Reference name="csogg"/>
92 <Reference name="csvorbis"/>
93 <Files>
94 <Match pattern="*.cs" recurse="true"/>
95 <Match pattern="*.txt" recurse="true"/>
96 </Files>
97 </Project>
98
99 <Project name="RealmForge.Genres" path="Genres" type="Library" assemblyName="RealmForge.Genres" rootNamespace="RealmForge">
100 <Configuration name="Debug">
101 <Options>
102 <OutputPath>..\bin\lib\Genres</OutputPath>
103 <XmlDocFile>RealmForge.Genres.xml</XmlDocFile>
104 </Options>
105 </Configuration>
106 <Configuration name="Release">
107 <Options>
108 <OutputPath>..\bin\lib\Genres</OutputPath>
109 <XmlDocFile>RealmForge.Genres.xml</XmlDocFile>
110 </Options>
111 </Configuration>
112 <ReferencePath>../bin</ReferencePath>
113 <Reference name="System"/>
114 <Reference name="System.Data"/>
115 <Reference name="System.Xml"/>
116 <Reference name="System.Windows.Forms"/>
117 <Reference name="System.Drawing"/>
118 <Reference name="Axiom.MathLib"/>
119 <Reference name="RealmForge.Utility"/>
120 <Reference name="RealmForge.Framework"/>
121 <Files>
122 <Match pattern="*.cs" recurse="true"/>
123 </Files>
124 </Project>
125
126 <Project name="RealmForge.UI.Forms" path="Forms" type="Library" assemblyName="RealmForge.UI.Forms" rootNamespace="RealmForge">
127 <Configuration name="Debug">
128 <Options>
129 <OutputPath>..\bin\lib\Forms</OutputPath>
130 <XmlDocFile>RealmForge.UI.Forms.xml</XmlDocFile>
131 <AllowUnsafe>true</AllowUnsafe>
132 </Options>
133 </Configuration>
134 <Configuration name="Release">
135 <Options>
136 <OutputPath>..\bin\lib\Forms</OutputPath>
137 <XmlDocFile>RealmForge.UI.Forms.xml</XmlDocFile>
138 <AllowUnsafe>true</AllowUnsafe>
139 </Options>
140 </Configuration>
141 <ReferencePath>../bin</ReferencePath>
142 <Reference name="System"/>
143 <Reference name="System.Drawing"/>
144 <Reference name="System.Data"/>
145 <Reference name="System.Design"/>
146 <Reference name="System.Windows.Forms"/>
147 <Reference name="System.Xml"/>
148 <Reference name="Axiom.MathLib"/>
149 <Reference name="wx.NET"/>
150 <Reference name="RealmForge.Framework"/>
151 <Reference name="RealmForge.Utility"/>
152 <Files>
153 <File buildAction="EmbeddedResource">IDE\Resources\ImagesCaptionIDE.bmp</File>
154 <File buildAction="EmbeddedResource">IDE\Resources\ImagesCaptionPlain.bmp</File>
155 <File buildAction="EmbeddedResource">IDE\Resources\ImagesMenuControl.bmp</File>
156 <File buildAction="EmbeddedResource">IDE\Resources\ImagesPopupMenu.bmp</File>
157 <File buildAction="EmbeddedResource">IDE\Resources\ImagesTabbedGroups.bmp</File>
158 <File buildAction="EmbeddedResource">IDE\Resources\ImagesTabControl.bmp</File>
159 <File buildAction="EmbeddedResource">IDE\Resources\LibraryIcon.ico</File>
160 <File buildAction="EmbeddedResource">IDE\Resources\TabbedInvalid.cur</File>
161 <File buildAction="EmbeddedResource">IDE\Resources\TabbedValid.cur</File>
162 <File buildAction="EmbeddedResource">IDE\Resources\WizardPicture.bmp</File>
163 <File buildAction="EmbeddedResource">Controls\Trees\tv_minus.bmp</File>
164 <File buildAction="EmbeddedResource">Controls\Trees\tv_plus.bmp</File>
165 <File buildAction="EmbeddedResource">Controls\Trees\treeview.bmp</File>
166 <File buildAction="EmbeddedResource">Controls\Trees\listview.bmp</File>
167 <File buildAction="EmbeddedResource">IDE\Menus\MenuControl.bmp</File>
168 <File buildAction="EmbeddedResource">IDE\Controls\InertButton.bmp</File>
169 <File buildAction="EmbeddedResource">IDE\Controls\TabbedGroups.bmp</File>
170 <File buildAction="EmbeddedResource">IDE\Controls\TabCOntrol.bmp</File>
171 <File buildAction="EmbeddedResource">IDE\Controls\WizardControl.bmp</File>
172 <File buildAction="EmbeddedResource">Forms\IDETest.resx</File>
173 <File buildAction="EmbeddedResource">Forms\IDEWindow.resx</File>
174 <File buildAction="EmbeddedResource">Forms\Launcher.resx</File>
175 <File buildAction="EmbeddedResource">Forms\MainRenderFrame.resx</File>
176 <Match pattern="*.cs" recurse="true"/>
177 </Files>
178 </Project>
179
180 <Project name="RealmForge.RAGE" path="RAGE" type="Library" assemblyName="RealmForge.RAGE" rootNamespace="RealmForge">
181 <Configuration name="Debug">
182 <Options>
183 <OutputPath>..\bin\lib\RAGE</OutputPath>
184 <XmlDocFile>RealmForge.RAGE.xml</XmlDocFile>
185 </Options>
186 </Configuration>
187 <Configuration name="Release">
188 <Options>
189 <OutputPath>..\bin\lib\RAGE</OutputPath>
190 <XmlDocFile>RealmForge.RAGE.xml</XmlDocFile>
191 </Options>
192 </Configuration>
193 <ReferencePath>../bin</ReferencePath>
194 <ReferencePath>../bin</ReferencePath>
195 <Reference name="System"/>
196 <Reference name="System.XML"/>
197 <Reference name="System.Windows.Forms"/>
198 <Reference name="System.Drawing"/>
199 <Reference name="Axiom.Plugins.CgProgramManager"/>
200 <Reference name="Axiom.Engine"/>
201 <Reference name="Axiom.MathLib"/>
202 <Reference name="Axiom.Plugins.ParticleFX"/>
203 <Reference name="Axiom.Platforms.Win32"/>
204 <Reference name="Axiom.RenderSystems.DirectX9"/>
205 <Reference localCopy="false" name="Axiom.RenderSystems.OpenGL"/>
206 <Reference name="Axiom.SceneManagers.Octree"/>
207 <Reference name="ICSharpCode.SharpZipLib"/>
208 <Reference name="System.Data"/>
209 <Reference name="RealmForge.Framework"/>
210 <Reference name="RealmForge.Utility"/>
211 <Reference name="ode"/>
212 <Files>
213 <Match pattern="*.cs" recurse="true"/>
214 </Files>
215 </Project>
216
217
218 <Project name="RealmForge.ScriptLibrary" path="ScriptLibrary" type="Library" assemblyName="RealmForge.ScriptLibrary" rootNamespace="RSL">
219 <Configuration name="Debug">
220 <Options>
221 <OutputPath>..\bin\ScriptLibrary</OutputPath>
222 <XmlDocFile>RealmForge.ScriptLibrary.xml</XmlDocFile>
223 </Options>
224 </Configuration>
225 <Configuration name="Release">
226 <Options>
227 <OutputPath>..\bin\ScriptLibrary</OutputPath>
228 <XmlDocFile>RealmForge.ScriptLibrary.xml</XmlDocFile>
229 </Options>
230 </Configuration>
231 <ReferencePath>../bin</ReferencePath>
232 <Reference name="System"/>
233 <Reference name="System.XML"/>
234 <Reference name="System.Windows.Forms"/>
235 <Reference name="System.Drawing"/>
236 <Reference name="Axiom.MathLib"/>
237 <Reference name="wx.NET"/>
238 <Reference name="RealmForge.UI.Forms"/>
239 <Reference name="RealmForge.RAGE"/>
240 <Reference name="RealmForge.Framework"/>
241 <Reference name="RealmForge.Utility"/>
242 <Files>
243 <Match pattern="*.cs" recurse="true"/>
244 </Files>
245 </Project>
246
247
248 <Project name="Updater" path="Updater" type="WinExe" icon="..\bin\Updater.ico" assemblyName="Updater" rootNamespace="RealmForge">
249 <Configuration name="Debug">
250 <Options>
251 <OutputPath>..\bin\lib\Updater</OutputPath>
252 <XmlDocFile>Updater.xml</XmlDocFile>
253 </Options>
254 </Configuration>
255 <Configuration name="Release">
256 <Options>
257 <OutputPath>..\bin\lib\Updater</OutputPath>
258 <XmlDocFile>Updater.xml</XmlDocFile>
259 </Options>
260 </Configuration>
261 <ReferencePath>../bin</ReferencePath>
262 <Reference name="System"/>
263 <Reference name="RealmForge.UI.Forms"/>
264 <Reference name="RealmForge.Framework"/>
265 <Reference name="RealmForge.Utility"/>
266 <Files>
267 <Match pattern="*.cs" recurse="true"/>
268 </Files>
269 </Project>
270
271
272 <Project name="DemoGame" path="DemoGame" type="WinExe" icon="..\bin\RealmForge.ico" assemblyName="DemoGame" rootNamespace="RealmForge">
273 <Configuration name="Debug">
274 <Options>
275 <OutputPath>..\bin</OutputPath>
276 <XmlDocFile>DemoGame.xml</XmlDocFile>
277 </Options>
278 </Configuration>
279 <Configuration name="Release">
280 <Options>
281 <OutputPath>..\bin</OutputPath>
282 <XmlDocFile>DemoGame.xml</XmlDocFile>
283 </Options>
284 </Configuration>
285 <ReferencePath>../bin</ReferencePath>
286 <Reference name="System"/>
287 <Reference name="RealmForge.UI.Forms"/>
288 <Reference name="RealmForge.ScriptLibrary"/>
289 <Reference name="RealmForge.RAGE"/>
290 <Reference name="RealmForge.Framework"/>
291 <Reference name="RealmForge.Utility"/>
292 <Files>
293 <Match pattern="*.cs" recurse="true"/>
294 </Files>
295 </Project>
296
297 </Solution>
298</Prebuild>
299
300
diff --git a/Prebuild/doc/prebuild-example2.xml b/Prebuild/doc/prebuild-example2.xml
new file mode 100644
index 0000000..bd23c4f
--- /dev/null
+++ b/Prebuild/doc/prebuild-example2.xml
@@ -0,0 +1,72 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
3 <Solution name="Prebuild">
4 <Configuration name="Debug">
5 <Options>
6 <?if OS = "Win32" ?>
7 <CompilerDefines>DEBUG;TRACE;WIN32;NET</CompilerDefines>
8 <?else ?>
9 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
10 <?endif ?>
11 <OptimizeCode>false</OptimizeCode>
12 <OutputPath>bin\Debug</OutputPath>
13 <DebugInformation>true</DebugInformation>
14 <SuppressWarnings>1595</SuppressWarnings>
15 </Options>
16 </Configuration>
17 <Configuration name="Release">
18 <Options>
19 <?if OS = "Win32" ?>
20 <CompilerDefines>TRACE;WIN32;NET</CompilerDefines>
21 <?else ?>
22 <CompilerDefines>TRACE;POSIX</CompilerDefines>
23 <?endif ?>
24 <OutputPath>bin\Release</OutputPath>
25 <OptimizeCode>true</OptimizeCode>
26 <DebugInformation>false</DebugInformation>
27 <SuppressWarnings>1595</SuppressWarnings>
28 </Options>
29 </Configuration>
30 <Files>
31 <File>prebuild.xml</File>
32 <Match path="doc" pattern="*.txt"/>
33 </Files>
34 <Project name="Prebuild" path="src" language="C#" assemblyName="Prebuild" icon="App.ico" type="Exe" rootNamespace="Prebuild" startupObject="Prebuild.Prebuild">
35 <Configuration name="Debug">
36 <Options>
37 <?if OS = "Win32" ?>
38 <CompilerDefines>DEBUG;TRACE;WIN32;NET</CompilerDefines>
39 <?else ?>
40 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
41 <?endif ?>
42 <OptimizeCode>false</OptimizeCode>
43 <OutputPath>bin\Debug</OutputPath>
44 <DebugInformation>true</DebugInformation>
45 <XmlDocFile>Prebuild.xml</XmlDocFile>
46 <SuppressWarnings>1595</SuppressWarnings>
47 </Options>
48 </Configuration>
49 <Configuration name="Release">
50 <Options>
51 <?if OS = "Win32" ?>
52 <CompilerDefines>TRACE;WIN32;NET</CompilerDefines>
53 <?else ?>
54 <CompilerDefines>TRACE;POSIX</CompilerDefines>
55 <?endif ?>
56 <OutputPath>bin\Release</OutputPath>
57 <OptimizeCode>true</OptimizeCode>
58 <DebugInformation>false</DebugInformation>
59 <XmlDocFile>Prebuild.xml</XmlDocFile>
60 <SuppressWarnings>1595</SuppressWarnings>
61 </Options>
62 </Configuration>
63 <Reference name="System.Xml" />
64 <Reference name="System" />
65 <Files>
66 <Match pattern="App.ico" buildAction="EmbeddedResource"/>
67 <Match path="data" pattern="prebuild-1.6.xsd" buildAction="EmbeddedResource"/>
68 <Match pattern="*.cs" recurse="true"/>
69 </Files>
70 </Project>
71 </Solution>
72</Prebuild>
diff --git a/Prebuild/doc/prebuild-example3.xml b/Prebuild/doc/prebuild-example3.xml
new file mode 100644
index 0000000..0111562
--- /dev/null
+++ b/Prebuild/doc/prebuild-example3.xml
@@ -0,0 +1,113 @@
1<?xml version="1.0" encoding="utf-8"?>
2 <!--The version of the XML schema specified in the version and xmlns attributes should match the one for which the version of Prebuild.exe used was compiled for. In this example it is the version 1.6 schema, you can find the XSD schema file at the url specified in the xmlns attribute. -->
3 <Prebuild version="1.6" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
4 <Solution name="RealmForge"> <!--The title and file name for the solution, combine, workspace, or project group (depending on what development tool you are using)-->
5 <!--Configurations found as children of Solution are used as templates for the configurations found in the project, this allows you to avoid writing the same options in each project (and maintaining each of these). You can provide defaults and then override them in the configurations defined for each project. All options are optional.-->
6 <Configuration name="Debug">
7 <Options>
8 <!-- simple logically expressions can be evaluated, if, else, elseif, and endif are valid statements. Note that it is not neccisary to define POSIX or WIN32 -->
9 <?if OS = "Win32" ?>
10 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
11 <?else ?>
12 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
13 <?endif ?>
14 <OptimizeCode>false</OptimizeCode>
15 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
16 <AllowUnsafe>false</AllowUnsafe>
17 <WarningLevel>4</WarningLevel>
18 <!--The filter for the number of warnings or errors shown and the tolerance level as to what is an error. This is value from 0 to 4 where 4 is the most strict (least tolerent).-->
19
20 <WarningsAsErrors>false</WarningsAsErrors>
21 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
22 <!-- A semicolon ';' delimited list of the warnings that are filtered and not shown in the output window during compiling a project. Only include the number portion of the warning codes that are shown in output during compilation (eg CS1591, should be entered as 1591)-->
23
24 <OutputPath>..\bin</OutputPath>
25 <DebugInformation>true</DebugInformation>
26 <RegisterComInterop>false</RegisterComInterop>
27 <IncrementalBuild>true</IncrementalBuild>
28 <BaseAddress>285212672</BaseAddress>
29 <FileAlignment>4096</FileAlignment>
30 <NoStdLib>false</NoStdLib>
31 <XmlDocFile>Docs.xml</XmlDocFile>
32 </Options>
33 </Configuration>
34 <Configuration name="Release"> <!-- You can define multple configurations that projects can have, but there is no way to define which one is selected by default as this is a part of the user preferences for a project, not the solution or project files -->
35 <Options>
36 <CompilerDefines>TRACE</CompilerDefines>
37 <OptimizeCode>true</OptimizeCode>
38 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
39 <AllowUnsafe>false</AllowUnsafe>
40 <WarningLevel>4</WarningLevel>
41 <WarningsAsErrors>false</WarningsAsErrors>
42 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
43 <OutputPath>..\bin</OutputPath>
44 <DebugInformation>false</DebugInformation>
45 <RegisterComInterop>false</RegisterComInterop>
46 <IncrementalBuild>true</IncrementalBuild>
47 <BaseAddress>285212672</BaseAddress>
48 <FileAlignment>4096</FileAlignment>
49 <NoStdLib>false</NoStdLib>
50 <XmlDocFile>Docs.xml</XmlDocFile>
51 </Options>
52 </Configuration>
53
54 <!-- One of the projects that is included in the Solution -->
55 <Project name="RealmForge.Utility" path="Utility" type="Library" assemblyName="RealmForge.Utility" rootNamespace="RealmForge">
56 <Configuration name="Debug">
57 <Options>
58 <OutputPath>..\bin\lib\Utility</OutputPath>
59 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
60 </Options>
61 </Configuration>
62 <Configuration name="Release">
63 <Options>
64 <OutputPath>..\bin\lib\Utility</OutputPath>
65 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
66 </Options>
67 </Configuration>
68 <ReferencePath>../bin</ReferencePath>
69 <Reference name="System"/>
70 <Reference name="System.Data"/>
71 <Reference name="System.Drawing"/>
72 <Reference name="System.Xml"/>
73 <Reference name="System.Runtime.Serialization.Formatters.Soap"/>
74 <Reference name="ICSharpCode.SharpZipLib"/>
75 <Files>
76 <Match pattern="*.cs" recurse="true"/>
77 </Files>
78 </Project>
79
80 <!-- Another projects that is included in the Solution -->
81 <Project name="DemoGame" path="DemoGame" type="WinExe" icon="..\bin\RealmForge.ico" assemblyName="DemoGame" rootNamespace="RealmForge">
82 <!-- icon is used to define the location of the .ico file that is embeeded in the assembly when the project is compiled. This is relative to the project path -->
83 <!--type defines the type of project, valid types are Library (.dll), WinExe (.exe), and Exe (.exe). WinExe is not windows specific, it just defines that it is a GUI application and that no Console or Command window will show when it is started-->
84
85 <Configuration name="Debug">
86 <Options>
87 <OutputPath>..\bin</OutputPath>
88 <XmlDocFile>DemoGame.xml</XmlDocFile>
89 </Options>
90 </Configuration>
91 <Configuration name="Release">
92 <Options>
93 <OutputPath>..\bin</OutputPath>
94 <XmlDocFile>DemoGame.xml</XmlDocFile>
95 </Options>
96 </Configuration>
97 <ReferencePath>../bin</ReferencePath>
98 <Reference name="System"/> <!-- Assemblies that are located in the GAC (installed, global) can be referenced-->
99 <Reference name="ode"/> <!-- Assemblies that are located in the output directory to which the file is built can be referenced -->
100 <Reference name="RealmForge.Utility"/> <!-- When you reference the name of another project, then that project (and it's output) will be referenced instead of looking for a pre-built assembly-->
101 <Files>
102 <!-- path defaults to . or the directory that prebuild.exe resides in -->
103 <Match path="." pattern="*.cs" recurse="true"/>
104 <Match pattern="*.bmp" recurse="true" buildAction="EmbeddedResource"/>
105 <Match pattern="[^a]*\.(png|jpg)" useRegex="true" buildAction="EmbeddedResource"/>
106
107 <!-- Uses a regex or regular expression to find all files that end with .png or .jpg but dont have the letter 'a' in their name and add them to the project as EmbeddedResource's. Because recurse enabled (default is false), only the values in the files in that are directly in the project directory (not child directories) are checked.-->
108 <!--EmbeddedResource, Content, and Compile are valid buildAction's-->
109 </Files>
110 </Project>
111
112 </Solution>
113</Prebuild>
diff --git a/Prebuild/doc/prebuild-example4.xml b/Prebuild/doc/prebuild-example4.xml
new file mode 100644
index 0000000..e5861b8
--- /dev/null
+++ b/Prebuild/doc/prebuild-example4.xml
@@ -0,0 +1,715 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd" version="1.6">
3 <Solution name="SdlDotNet">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <AllowUnsafe>false</AllowUnsafe>
9 <OutputPath>bin\Debug</OutputPath>
10 <DebugInformation>true</DebugInformation>
11 <WarningLevel>4</WarningLevel>
12 <SuppressWarnings>1595</SuppressWarnings>
13 </Options>
14 </Configuration>
15 <Configuration name="Release">
16 <Options>
17 <CompilerDefines>TRACE</CompilerDefines>
18 <OptimizeCode>true</OptimizeCode>
19 <AllowUnsafe>false</AllowUnsafe>
20 <OutputPath>bin\Release</OutputPath>
21 <DebugInformation>false</DebugInformation>
22 <WarningLevel>1</WarningLevel>
23 <SuppressWarnings>1595</SuppressWarnings>
24 </Options>
25 </Configuration>
26 <Files>
27 <File buildAction="Content">SdlDotNet.build</File>
28 <File buildAction="Content">prebuild.xml</File>
29 </Files>
30 <Project name="SdlDotNet" path="src" language="C#" type="Library" assemblyName="SdlDotNet" rootNamespace="SdlDotNet">
31 <Configuration name="Debug">
32 <Options>
33 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
34 <OptimizeCode>false</OptimizeCode>
35 <AllowUnsafe>false</AllowUnsafe>
36 <OutputPath>bin\Debug</OutputPath>
37 <DebugInformation>true</DebugInformation>
38 <XmlDocFile>SdlDotNet.xml</XmlDocFile>
39 <WarningLevel>4</WarningLevel>
40 <SuppressWarnings>1595</SuppressWarnings>
41 </Options>
42 </Configuration>
43 <Configuration name="Release">
44 <Options>
45 <CompilerDefines>TRACE</CompilerDefines>
46 <OptimizeCode>true</OptimizeCode>
47 <AllowUnsafe>false</AllowUnsafe>
48 <OutputPath>bin\Release</OutputPath>
49 <XmlDocFile>SdlDotNet.xml</XmlDocFile>
50 <DebugInformation>false</DebugInformation>
51 <WarningLevel>1</WarningLevel>
52 <SuppressWarnings>1595</SuppressWarnings>
53 </Options>
54 </Configuration>
55 <Reference name="System" />
56 <Reference name="System.Windows.Forms" />
57 <Reference name="System.Drawing" />
58 <Reference name="Tao.Sdl" localCopy="true" path="..\\lib"/>
59 <Files>
60 <Match path="." pattern="SurfaceControl.cs" subType="Component" recurse="true"/>
61 <Match path="." pattern="*.bmp" buildAction="EmbeddedResource" recurse="true"/>
62 <Match path="." pattern="*.cs" recurse="true">
63 <Exclude name="SurfaceControl.cs"/>
64 </Match>
65 </Files>
66 </Project>
67 <Project name="Rectangles" path="examples\\Rectangles" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.Rectangles.Rectangles" assemblyName="Rectangles" rootNamespace="SdlDotNet.Examples.Rectangles" icon="App.ico">
68 <Configuration name="Debug">
69 <Options>
70 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
71 <OptimizeCode>false</OptimizeCode>
72 <AllowUnsafe>false</AllowUnsafe>
73 <OutputPath>bin\Debug</OutputPath>
74 <DebugInformation>true</DebugInformation>
75 <XmlDocFile>Rectangles.xml</XmlDocFile>
76 <WarningLevel>4</WarningLevel>
77 <SuppressWarnings>1595</SuppressWarnings>
78 </Options>
79 </Configuration>
80 <Configuration name="Release">
81 <Options>
82 <CompilerDefines>TRACE</CompilerDefines>
83 <OptimizeCode>true</OptimizeCode>
84 <AllowUnsafe>false</AllowUnsafe>
85 <OutputPath>bin\Release</OutputPath>
86 <DebugInformation>false</DebugInformation>
87 <XmlDocFile>Rectangles.xml</XmlDocFile>
88 <WarningLevel>1</WarningLevel>
89 <SuppressWarnings>1595</SuppressWarnings>
90 </Options>
91 </Configuration>
92 <Reference name="System" />
93 <Reference name="System.Drawing" />
94 <Reference name="SdlDotNet" localCopy="true"/>
95 <Files>
96 <File buildAction="EmbeddedResource">App.ico</File>
97 <Match path="." pattern="*.cs" recurse="true"/>
98 </Files>
99 </Project>
100 <Project name="Gears" path="examples\\Gears" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.Gears.Gears" assemblyName="Gears" rootNamespace="SdlDotNet.Examples.Gears" icon="App.ico">
101 <Configuration name="Debug">
102 <Options>
103 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
104 <OptimizeCode>false</OptimizeCode>
105 <AllowUnsafe>false</AllowUnsafe>
106 <OutputPath>bin\Debug</OutputPath>
107 <DebugInformation>true</DebugInformation>
108 <XmlDocFile>Gears.xml</XmlDocFile>
109 <WarningLevel>4</WarningLevel>
110 <SuppressWarnings>1595</SuppressWarnings>
111 </Options>
112 </Configuration>
113 <Configuration name="Release">
114 <Options>
115 <CompilerDefines>TRACE</CompilerDefines>
116 <OptimizeCode>true</OptimizeCode>
117 <AllowUnsafe>false</AllowUnsafe>
118 <OutputPath>bin\Release</OutputPath>
119 <DebugInformation>false</DebugInformation>
120 <XmlDocFile>Gears.xml</XmlDocFile>
121 <WarningLevel>1</WarningLevel>
122 <SuppressWarnings>1595</SuppressWarnings>
123 </Options>
124 </Configuration>
125 <Reference name="System" />
126 <Reference name="System.Drawing" />
127 <Reference name="SdlDotNet" localCopy="true"/>
128 <Reference name="Tao.OpenGl" localCopy="true" path="..\\..\\lib"/>
129 <Files>
130 <File buildAction="EmbeddedResource">App.ico</File>
131 <Match path="." pattern="*.cs" recurse="true"/>
132 </Files>
133 </Project>
134 <Project name="CDPlayer" path="examples\\CDPlayer" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.CDPlayer.CDPlayer" assemblyName="CDPlayer" rootNamespace="SdlDotNet.Examples.CDPlayer" icon="App.ico">
135 <Configuration name="Debug">
136 <Options>
137 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
138 <OptimizeCode>false</OptimizeCode>
139 <AllowUnsafe>false</AllowUnsafe>
140 <OutputPath>bin\Debug</OutputPath>
141 <DebugInformation>true</DebugInformation>
142 <XmlDocFile>CDPlayer.xml</XmlDocFile>
143 <WarningLevel>4</WarningLevel>
144 <SuppressWarnings>1595</SuppressWarnings>
145 </Options>
146 </Configuration>
147 <Configuration name="Release">
148 <Options>
149 <CompilerDefines>TRACE</CompilerDefines>
150 <OptimizeCode>true</OptimizeCode>
151 <AllowUnsafe>false</AllowUnsafe>
152 <OutputPath>bin\Release</OutputPath>
153 <DebugInformation>false</DebugInformation>
154 <XmlDocFile>CDPlayer.xml</XmlDocFile>
155 <WarningLevel>1</WarningLevel>
156 <SuppressWarnings>1595</SuppressWarnings>
157 </Options>
158 </Configuration>
159 <Reference name="System" />
160 <Reference name="System.Drawing" />
161 <Reference name="System.Windows.Forms" />
162 <Reference name="SdlDotNet" localCopy="true"/>
163 <Files>
164 <File buildAction="EmbeddedResource">App.ico</File>
165 <File subType="Form">CDPlayer.cs</File>
166 <Match path="." pattern="*.cs" recurse="true">
167 <Exclude name="CDPlayer.cs"/>
168 </Match>
169 </Files>
170 </Project>
171 <Project name="MoviePlayer" path="examples\\MoviePlayer" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.MoviePlayer.MoviePlayer" assemblyName="MoviePlayer" rootNamespace="SdlDotNet.Examples.MoviePlayer" icon="App.ico">
172 <Configuration name="Debug">
173 <Options>
174 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
175 <OptimizeCode>false</OptimizeCode>
176 <AllowUnsafe>false</AllowUnsafe>
177 <OutputPath>bin\Debug</OutputPath>
178 <DebugInformation>true</DebugInformation>
179 <XmlDocFile>MoviePlayer.xml</XmlDocFile>
180 <WarningLevel>4</WarningLevel>
181 <SuppressWarnings>1595</SuppressWarnings>
182 </Options>
183 </Configuration>
184 <Configuration name="Release">
185 <Options>
186 <CompilerDefines>TRACE</CompilerDefines>
187 <OptimizeCode>true</OptimizeCode>
188 <AllowUnsafe>false</AllowUnsafe>
189 <OutputPath>bin\Release</OutputPath>
190 <DebugInformation>false</DebugInformation>
191 <XmlDocFile>MoviePlayer.xml</XmlDocFile>
192 <WarningLevel>1</WarningLevel>
193 <SuppressWarnings>1595</SuppressWarnings>
194 </Options>
195 </Configuration>
196 <Reference name="System" />
197 <Reference name="System.Drawing" />
198 <Reference name="SdlDotNet" localCopy="true"/>
199 <Files>
200 <File buildAction="EmbeddedResource">App.ico</File>
201 <Match path="." pattern="*.cs" recurse="true"/>
202 </Files>
203 </Project>
204 <Project name="SimpleGame" path="examples\\SimpleGame" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.SimpleGame.GameMain" assemblyName="SimpleGame" rootNamespace="SdlDotNet.Examples.SimpleGame" icon="App.ico">
205 <Configuration name="Debug">
206 <Options>
207 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
208 <OptimizeCode>false</OptimizeCode>
209 <AllowUnsafe>false</AllowUnsafe>
210 <OutputPath>bin\Debug</OutputPath>
211 <DebugInformation>true</DebugInformation>
212 <XmlDocFile>SimpleGame.xml</XmlDocFile>
213 <WarningLevel>4</WarningLevel>
214 <SuppressWarnings>1595</SuppressWarnings>
215 </Options>
216 </Configuration>
217 <Configuration name="Release">
218 <Options>
219 <CompilerDefines>TRACE</CompilerDefines>
220 <OptimizeCode>true</OptimizeCode>
221 <AllowUnsafe>false</AllowUnsafe>
222 <OutputPath>bin\Release</OutputPath>
223 <DebugInformation>false</DebugInformation>
224 <XmlDocFile>SimpleGame.xml</XmlDocFile>
225 <WarningLevel>1</WarningLevel>
226 <SuppressWarnings>1595</SuppressWarnings>
227 </Options>
228 </Configuration>
229 <Reference name="System" />
230 <Reference name="System.Drawing" />
231 <Reference name="SdlDotNet" localCopy="true"/>
232 <Files>
233 <File buildAction="EmbeddedResource">App.ico</File>
234 <Match path="." pattern="*.cs" recurse="true"/>
235 </Files>
236 </Project>
237 <Project name="BombRun" path="examples\\BombRun" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.BombRun.BombRun" assemblyName="BombRun" rootNamespace="SdlDotNet.Examples.BombRun" icon="App.ico">
238 <Configuration name="Debug">
239 <Options>
240 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
241 <OptimizeCode>false</OptimizeCode>
242 <AllowUnsafe>false</AllowUnsafe>
243 <OutputPath>bin\Debug</OutputPath>
244 <DebugInformation>true</DebugInformation>
245 <XmlDocFile>BombRun.xml</XmlDocFile>
246 <WarningLevel>4</WarningLevel>
247 <SuppressWarnings>1595</SuppressWarnings>
248 </Options>
249 </Configuration>
250 <Configuration name="Release">
251 <Options>
252 <CompilerDefines>TRACE</CompilerDefines>
253 <OptimizeCode>true</OptimizeCode>
254 <AllowUnsafe>false</AllowUnsafe>
255 <OutputPath>bin\Release</OutputPath>
256 <DebugInformation>false</DebugInformation>
257 <XmlDocFile>BombRun.xml</XmlDocFile>
258 <WarningLevel>1</WarningLevel>
259 <SuppressWarnings>1595</SuppressWarnings>
260 </Options>
261 </Configuration>
262 <Reference name="System" />
263 <Reference name="System.Drawing" />
264 <Reference name="SdlDotNet" localCopy="true"/>
265 <Files>
266 <File buildAction="EmbeddedResource">App.ico</File>
267 <Match path="." pattern="*.cs" recurse="true"/>
268 </Files>
269 </Project>
270 <Project name="SnowDemo" path="examples\\SnowDemo" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.SnowDemo.SnowDemo" assemblyName="SnowDemo" rootNamespace="SdlDotNet.Examples.SnowDemo" icon="App.ico">
271 <Configuration name="Debug">
272 <Options>
273 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
274 <OptimizeCode>false</OptimizeCode>
275 <AllowUnsafe>false</AllowUnsafe>
276 <OutputPath>bin\Debug</OutputPath>
277 <DebugInformation>true</DebugInformation>
278 <XmlDocFile>SnowDemo.xml</XmlDocFile>
279 <WarningLevel>4</WarningLevel>
280 <SuppressWarnings>1595</SuppressWarnings>
281 </Options>
282 </Configuration>
283 <Configuration name="Release">
284 <Options>
285 <CompilerDefines>TRACE</CompilerDefines>
286 <OptimizeCode>true</OptimizeCode>
287 <AllowUnsafe>false</AllowUnsafe>
288 <OutputPath>bin\Release</OutputPath>
289 <DebugInformation>false</DebugInformation>
290 <XmlDocFile>SnowDemo.xml</XmlDocFile>
291 <WarningLevel>1</WarningLevel>
292 <SuppressWarnings>1595</SuppressWarnings>
293 </Options>
294 </Configuration>
295 <Reference name="System" />
296 <Reference name="System.Drawing" />
297 <Reference name="SdlDotNet" localCopy="true"/>
298 <Files>
299 <File buildAction="EmbeddedResource">App.ico</File>
300 <Match path="." pattern="*.cs" recurse="true"/>
301 </Files>
302 </Project>
303 <Project name="BounceSprites" path="examples\\BounceSprites" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.BounceSprites.BounceSprites" assemblyName="BounceSprites" rootNamespace="SdlDotNet.Examples.BounceSprites" icon="App.ico">
304 <Configuration name="Debug">
305 <Options>
306 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
307 <OptimizeCode>false</OptimizeCode>
308 <AllowUnsafe>false</AllowUnsafe>
309 <OutputPath>bin\Debug</OutputPath>
310 <DebugInformation>true</DebugInformation>
311 <XmlDocFile>BounceSprites.xml</XmlDocFile>
312 <WarningLevel>4</WarningLevel>
313 <SuppressWarnings>1595</SuppressWarnings>
314 </Options>
315 </Configuration>
316 <Configuration name="Release">
317 <Options>
318 <CompilerDefines>TRACE</CompilerDefines>
319 <OptimizeCode>true</OptimizeCode>
320 <AllowUnsafe>false</AllowUnsafe>
321 <OutputPath>bin\Release</OutputPath>
322 <DebugInformation>false</DebugInformation>
323 <XmlDocFile>BounceSprites.xml</XmlDocFile>
324 <WarningLevel>1</WarningLevel>
325 <SuppressWarnings>1595</SuppressWarnings>
326 </Options>
327 </Configuration>
328 <Reference name="System" />
329 <Reference name="System.Drawing" />
330 <Reference name="SdlDotNet" localCopy="true"/>
331 <Files>
332 <File buildAction="EmbeddedResource">App.ico</File>
333 <Match path="." pattern="*.cs" recurse="true"/>
334 </Files>
335 </Project>
336 <Project name="Triad" path="examples\\Triad" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.Triad.MainObject" assemblyName="Triad" rootNamespace="SdlDotNet.Examples.Triad" icon="App.ico">
337 <Configuration name="Debug">
338 <Options>
339 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
340 <OptimizeCode>false</OptimizeCode>
341 <AllowUnsafe>false</AllowUnsafe>
342 <OutputPath>bin\Debug</OutputPath>
343 <DebugInformation>true</DebugInformation>
344 <XmlDocFile>Triad.xml</XmlDocFile>
345 <WarningLevel>4</WarningLevel>
346 <SuppressWarnings>1595</SuppressWarnings>
347 </Options>
348 </Configuration>
349 <Configuration name="Release">
350 <Options>
351 <CompilerDefines>TRACE</CompilerDefines>
352 <OptimizeCode>true</OptimizeCode>
353 <AllowUnsafe>false</AllowUnsafe>
354 <OutputPath>bin\Release</OutputPath>
355 <DebugInformation>false</DebugInformation>
356 <XmlDocFile>Triad.xml</XmlDocFile>
357 <WarningLevel>1</WarningLevel>
358 <SuppressWarnings>1595</SuppressWarnings>
359 </Options>
360 </Configuration>
361 <Reference name="System" />
362 <Reference name="System.Drawing" />
363 <Reference name="SdlDotNet" localCopy="true"/>
364 <Reference name="nunit.framework" localCopy="true" path="..\\..\\lib"/>
365 <Files>
366 <File buildAction="EmbeddedResource">App.ico</File>
367 <Match path="." pattern="*.cs" recurse="true"/>
368 </Files>
369 </Project>
370 <Project name="GuiExample" path="examples\\GuiExample" language="C#" type="Library" assemblyName="GuiExample" rootNamespace="SdlDotNet.Examples.GuiExample">
371 <Configuration name="Debug">
372 <Options>
373 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
374 <OptimizeCode>false</OptimizeCode>
375 <AllowUnsafe>false</AllowUnsafe>
376 <OutputPath>bin\Debug</OutputPath>
377 <DebugInformation>true</DebugInformation>
378 <XmlDocFile>GuiExample.xml</XmlDocFile>
379 <WarningLevel>4</WarningLevel>
380 <SuppressWarnings>1595</SuppressWarnings>
381 </Options>
382 </Configuration>
383 <Configuration name="Release">
384 <Options>
385 <CompilerDefines>TRACE</CompilerDefines>
386 <OptimizeCode>true</OptimizeCode>
387 <AllowUnsafe>false</AllowUnsafe>
388 <OutputPath>bin\Release</OutputPath>
389 <DebugInformation>false</DebugInformation>
390 <XmlDocFile>GuiExample.xml</XmlDocFile>
391 <WarningLevel>1</WarningLevel>
392 <SuppressWarnings>1595</SuppressWarnings>
393 </Options>
394 </Configuration>
395 <Reference name="System" />
396 <Reference name="System.Drawing" />
397 <Reference name="SdlDotNet" localCopy="true"/>
398 <Files>
399 <Match path="." pattern="*.cs" recurse="true"/>
400 </Files>
401 </Project>
402 <Project name="SpriteGuiDemos" path="examples\\SpriteGuiDemos" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.SpriteGuiDemos.SdlDemo" assemblyName="SpriteGuiDemo" rootNamespace="SdlDotNet.Examples.SpriteGuiDemos" icon="App.ico">
403 <Configuration name="Debug">
404 <Options>
405 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
406 <OptimizeCode>false</OptimizeCode>
407 <AllowUnsafe>false</AllowUnsafe>
408 <OutputPath>bin\Debug</OutputPath>
409 <DebugInformation>true</DebugInformation>
410 <XmlDocFile>SpriteGuiDemos.xml</XmlDocFile>
411 <WarningLevel>4</WarningLevel>
412 <SuppressWarnings>1595</SuppressWarnings>
413 </Options>
414 </Configuration>
415 <Configuration name="Release">
416 <Options>
417 <CompilerDefines>TRACE</CompilerDefines>
418 <OptimizeCode>true</OptimizeCode>
419 <AllowUnsafe>false</AllowUnsafe>
420 <OutputPath>bin\Release</OutputPath>
421 <DebugInformation>false</DebugInformation>
422 <XmlDocFile>SpriteGuiDemos.xml</XmlDocFile>
423 <WarningLevel>1</WarningLevel>
424 <SuppressWarnings>1595</SuppressWarnings>
425 </Options>
426 </Configuration>
427 <Reference name="System" />
428 <Reference name="System.Drawing" />
429 <Reference name="SdlDotNet" localCopy="true"/>
430 <Reference name="GuiExample" localCopy="true"/>
431 <Files>
432 <File buildAction="EmbeddedResource">App.ico</File>
433 <Match path="." pattern="*.cs" recurse="true"/>
434 </Files>
435 </Project>
436 <Project name="Tests" path="tests" language="C#" type="Library" assemblyName="SdlDotNet.Tests" rootNamespace="SdlDotNet.Tests">
437 <Configuration name="Debug">
438 <Options>
439 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
440 <OptimizeCode>false</OptimizeCode>
441 <AllowUnsafe>false</AllowUnsafe>
442 <OutputPath>bin\Debug</OutputPath>
443 <DebugInformation>true</DebugInformation>
444 <XmlDocFile>SdlDotNet.Tests.xml</XmlDocFile>
445 <WarningLevel>4</WarningLevel>
446 <SuppressWarnings>1595</SuppressWarnings>
447 </Options>
448 </Configuration>
449 <Configuration name="Release">
450 <Options>
451 <CompilerDefines>TRACE</CompilerDefines>
452 <OptimizeCode>true</OptimizeCode>
453 <AllowUnsafe>false</AllowUnsafe>
454 <OutputPath>bin\Release</OutputPath>
455 <DebugInformation>false</DebugInformation>
456 <XmlDocFile>SdlDotNet.Tests.xml</XmlDocFile>
457 <WarningLevel>1</WarningLevel>
458 <SuppressWarnings>1595</SuppressWarnings>
459 </Options>
460 </Configuration>
461 <Reference name="System" />
462 <Reference name="System.Drawing" />
463 <Reference name="SdlDotNet" localCopy="true"/>
464 <Reference name="Tao.Sdl" localCopy="true" path="..\\lib"/>
465 <Reference name="GuiExample" localCopy="true"/>
466 <Reference name="nunit.framework" localCopy="true" path="..\\lib"/>
467 <Files>
468 <Match path="." pattern="*.cs" recurse="true"/>
469 </Files>
470 </Project>
471 <Project name="AudioExample" path="examples\\AudioExample" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.AudioExample.AudioExample" assemblyName="AudioExample" rootNamespace="SdlDotNet.Examples.AudioExample" icon="App.ico">
472 <Configuration name="Debug">
473 <Options>
474 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
475 <OptimizeCode>false</OptimizeCode>
476 <AllowUnsafe>false</AllowUnsafe>
477 <OutputPath>bin\Debug</OutputPath>
478 <DebugInformation>true</DebugInformation>
479 <XmlDocFile>AudioExample.xml</XmlDocFile>
480 <WarningLevel>4</WarningLevel>
481 <SuppressWarnings>1595</SuppressWarnings>
482 </Options>
483 </Configuration>
484 <Configuration name="Release">
485 <Options>
486 <CompilerDefines>TRACE</CompilerDefines>
487 <OptimizeCode>true</OptimizeCode>
488 <AllowUnsafe>false</AllowUnsafe>
489 <OutputPath>bin\Release</OutputPath>
490 <DebugInformation>false</DebugInformation>
491 <XmlDocFile>AudioExample.xml</XmlDocFile>
492 <WarningLevel>1</WarningLevel>
493 <SuppressWarnings>1595</SuppressWarnings>
494 </Options>
495 </Configuration>
496 <Reference name="System" />
497 <Reference name="System.Drawing" />
498 <Reference name="SdlDotNet" localCopy="true"/>
499 <Files>
500 <File buildAction="EmbeddedResource">App.ico</File>
501 <Match path="." pattern="*.cs" recurse="true"/>
502 </Files>
503 </Project>
504 <Project name="SdlDotNet.Particles" path="extras\\Particles" language="C#" type="Library" assemblyName="SdlDotNet.Particles" rootNamespace="SdlDotNet.Particles">
505 <Configuration name="Debug">
506 <Options>
507 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
508 <OptimizeCode>false</OptimizeCode>
509 <AllowUnsafe>false</AllowUnsafe>
510 <OutputPath>bin\Debug</OutputPath>
511 <DebugInformation>true</DebugInformation>
512 <XmlDocFile>SdlDotNet.Particles.xml</XmlDocFile>
513 <WarningLevel>4</WarningLevel>
514 <SuppressWarnings>1595</SuppressWarnings>
515 </Options>
516 </Configuration>
517 <Configuration name="Release">
518 <Options>
519 <CompilerDefines>TRACE</CompilerDefines>
520 <OptimizeCode>true</OptimizeCode>
521 <AllowUnsafe>false</AllowUnsafe>
522 <OutputPath>bin\Release</OutputPath>
523 <DebugInformation>false</DebugInformation>
524 <XmlDocFile>SdlDotNet.Particles.xml</XmlDocFile>
525 <WarningLevel>1</WarningLevel>
526 <SuppressWarnings>1595</SuppressWarnings>
527 </Options>
528 </Configuration>
529 <Reference name="System" />
530 <Reference name="System.Drawing" />
531 <Reference name="SdlDotNet" localCopy="true"/>
532 <Files>
533 <Match path="." pattern="*.cs" recurse="true"/>
534 </Files>
535 </Project>
536 <Project name="ParticlesExample" path="examples\\ParticlesExample" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.ParticlesExample.ParticlesExample" assemblyName="ParticlesExample" rootNamespace="SdlDotNet.Examples.ParticlesExample" icon="App.ico">
537 <Configuration name="Debug">
538 <Options>
539 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
540 <OptimizeCode>false</OptimizeCode>
541 <AllowUnsafe>false</AllowUnsafe>
542 <OutputPath>bin\Debug</OutputPath>
543 <DebugInformation>true</DebugInformation>
544 <XmlDocFile>ParticlesExample.xml</XmlDocFile>
545 <WarningLevel>4</WarningLevel>
546 <SuppressWarnings>1595</SuppressWarnings>
547 </Options>
548 </Configuration>
549 <Configuration name="Release">
550 <Options>
551 <CompilerDefines>TRACE</CompilerDefines>
552 <OptimizeCode>true</OptimizeCode>
553 <AllowUnsafe>false</AllowUnsafe>
554 <OutputPath>bin\Release</OutputPath>
555 <DebugInformation>false</DebugInformation>
556 <XmlDocFile>ParticlesExample.xml</XmlDocFile>
557 <WarningLevel>1</WarningLevel>
558 <SuppressWarnings>1595</SuppressWarnings>
559 </Options>
560 </Configuration>
561 <Reference name="System" />
562 <Reference name="System.Drawing" />
563 <Reference name="SdlDotNet" localCopy="true"/>
564 <Reference name="SdlDotNet.Particles" localCopy="true"/>
565 <Files>
566 <File buildAction="EmbeddedResource">App.ico</File>
567 <Match path="." pattern="*.cs" recurse="true"/>
568 </Files>
569 </Project>
570 <!--<Project name="SdlDotNet.Gui" path="extras\\Gui" language="C#" type="Library" assemblyName="SdlDotNet.Gui" rootNamespace="SdlDotNet.Gui">
571 <Configuration name="Debug">
572 <Options>
573 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
574 <OptimizeCode>false</OptimizeCode>
575 <AllowUnsafe>false</AllowUnsafe>
576 <OutputPath>bin\Debug</OutputPath>
577 <DebugInformation>true</DebugInformation>
578 <XmlDocFile>SdlDotNet.Gui.xml</XmlDocFile>
579 <WarningLevel>4</WarningLevel>
580 </Options>
581 </Configuration>
582 <Configuration name="Release">
583 <Options>
584 <CompilerDefines>TRACE</CompilerDefines>
585 <OptimizeCode>true</OptimizeCode>
586 <AllowUnsafe>false</AllowUnsafe>
587 <OutputPath>bin\Release</OutputPath>
588 <DebugInformation>false</DebugInformation>
589 <XmlDocFile>SdlDotNet.Gui.xml</XmlDocFile>
590 <WarningLevel>1</WarningLevel>
591 </Options>
592 </Configuration>
593 <Reference name="System" />
594 <Reference name="System.Drawing" />
595 <Reference name="SdlDotNet" localCopy="true"/>
596 <Files>
597 <Match path="." pattern="*.cs" recurse="true"/>
598 </Files>
599 </Project>-->
600 <Project name="NeHe" path="examples\\NeHe" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.NeHe.NeHe" assemblyName="NeHe" rootNamespace="SdlDotNet.Examples.NeHe" icon="App.ico">
601 <Configuration name="Debug">
602 <Options>
603 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
604 <OptimizeCode>false</OptimizeCode>
605 <AllowUnsafe>false</AllowUnsafe>
606 <OutputPath>bin\Debug</OutputPath>
607 <DebugInformation>true</DebugInformation>
608 <XmlDocFile>NeHe.xml</XmlDocFile>
609 <WarningLevel>4</WarningLevel>
610 <SuppressWarnings>1595</SuppressWarnings>
611 </Options>
612 </Configuration>
613 <Configuration name="Release">
614 <Options>
615 <CompilerDefines>TRACE</CompilerDefines>
616 <OptimizeCode>true</OptimizeCode>
617 <AllowUnsafe>false</AllowUnsafe>
618 <OutputPath>bin\Release</OutputPath>
619 <DebugInformation>false</DebugInformation>
620 <XmlDocFile>NeHe.xml</XmlDocFile>
621 <WarningLevel>1</WarningLevel>
622 <SuppressWarnings>1595</SuppressWarnings>
623 </Options>
624 </Configuration>
625 <Reference name="System" />
626 <Reference name="System.Drawing" />
627 <Reference name="System.Windows.Forms" />
628 <Reference name="SdlDotNet" localCopy="true"/>
629 <Reference name="Tao.OpenGl" localCopy="true" path="..\\..\\lib"/>
630 <Reference name="Tao.OpenGl.Glu" localCopy="true" path="..\\..\\lib"/>
631 <Reference name="Tao.Platform.Windows" localCopy="true" path="..\\..\\lib"/>
632 <Files>
633 <File buildAction="EmbeddedResource">App.ico</File>
634 <File subType="Form">NeHe.cs</File>
635 <Match path="." pattern="*.cs" recurse="true">
636 <Exclude name="NeHe.cs"/>
637 </Match>
638 </Files>
639 </Project>
640 <Project name="RedBook" path="examples\\RedBook" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.RedBook.RedBook" assemblyName="RedBook" rootNamespace="SdlDotNet.Examples.RedBook" icon="App.ico">
641 <Configuration name="Debug">
642 <Options>
643 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
644 <OptimizeCode>false</OptimizeCode>
645 <AllowUnsafe>false</AllowUnsafe>
646 <OutputPath>bin\Debug</OutputPath>
647 <DebugInformation>true</DebugInformation>
648 <XmlDocFile>RedBook.xml</XmlDocFile>
649 <WarningLevel>4</WarningLevel>
650 <SuppressWarnings>1595</SuppressWarnings>
651 </Options>
652 </Configuration>
653 <Configuration name="Release">
654 <Options>
655 <CompilerDefines>TRACE</CompilerDefines>
656 <OptimizeCode>true</OptimizeCode>
657 <AllowUnsafe>false</AllowUnsafe>
658 <OutputPath>bin\Release</OutputPath>
659 <DebugInformation>false</DebugInformation>
660 <XmlDocFile>RedBook.xml</XmlDocFile>
661 <WarningLevel>1</WarningLevel>
662 <SuppressWarnings>1595</SuppressWarnings>
663 </Options>
664 </Configuration>
665 <Reference name="System" />
666 <Reference name="System.Drawing" />
667 <Reference name="System.Windows.Forms" />
668 <Reference name="SdlDotNet" localCopy="true"/>
669 <Reference name="Tao.OpenGl" localCopy="true" path="..\\..\\lib"/>
670 <Reference name="Tao.OpenGl.Glu" localCopy="true" path="..\\..\\lib"/>
671 <Reference name="Tao.FreeGlut" localCopy="true" path="..\\..\\lib"/>
672 <Files>
673 <File buildAction="EmbeddedResource">App.ico</File>
674 <File subType="Form">RedBook.cs</File>
675 <Match path="." pattern="*.cs" recurse="true">
676 <Exclude name="RedBook.cs" />
677 </Match>
678 </Files>
679 </Project>
680 <Project name="PhysFsTest" path="examples\\PhysFsTest" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.PhysFsTest.PhysFsTest" assemblyName="PhysFsTest" rootNamespace="SdlDotNet.Examples.PhysFsTest" icon="App.ico">
681 <Configuration name="Debug">
682 <Options>
683 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
684 <OptimizeCode>false</OptimizeCode>
685 <AllowUnsafe>false</AllowUnsafe>
686 <OutputPath>bin\Debug</OutputPath>
687 <DebugInformation>true</DebugInformation>
688 <XmlDocFile>PhysFsTest.xml</XmlDocFile>
689 <WarningLevel>4</WarningLevel>
690 <SuppressWarnings>1595</SuppressWarnings>
691 </Options>
692 </Configuration>
693 <Configuration name="Release">
694 <Options>
695 <CompilerDefines>TRACE</CompilerDefines>
696 <OptimizeCode>true</OptimizeCode>
697 <AllowUnsafe>false</AllowUnsafe>
698 <OutputPath>bin\Release</OutputPath>
699 <DebugInformation>false</DebugInformation>
700 <XmlDocFile>PhysFsTest.xml</XmlDocFile>
701 <WarningLevel>1</WarningLevel>
702 <SuppressWarnings>1595</SuppressWarnings>
703 </Options>
704 </Configuration>
705 <Reference name="System" />
706 <Reference name="System.Drawing" />
707 <Reference name="SdlDotNet" localCopy="true"/>
708 <Reference name="Tao.PhysFs" localCopy="true" path="..\\..\\lib"/>
709 <Files>
710 <File buildAction="EmbeddedResource">App.ico</File>
711 <Match path="." pattern="*.cs" recurse="true"/>
712 </Files>
713 </Project>
714 </Solution>
715</Prebuild>
diff --git a/Prebuild/doc/prebuild-example5.xml b/Prebuild/doc/prebuild-example5.xml
new file mode 100644
index 0000000..5221547
--- /dev/null
+++ b/Prebuild/doc/prebuild-example5.xml
@@ -0,0 +1,187 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd" version="1.6">
3 <Solution name="Tao.Sdl">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <AllowUnsafe>true</AllowUnsafe>
9 <OutputPath>bin\Debug</OutputPath>
10 <XmlDocFile>Tao.Sdl.xml</XmlDocFile>
11 <DebugInformation>true</DebugInformation>
12 </Options>
13 </Configuration>
14 <Configuration name="Release">
15 <Options>
16 <CompilerDefines>TRACE;WIN32</CompilerDefines>
17 <OptimizeCode>true</OptimizeCode>
18 <AllowUnsafe>true</AllowUnsafe>
19 <OutputPath>bin\Release</OutputPath>
20 <XmlDocFile>Tao.Sdl.xml</XmlDocFile>
21 <DebugInformation>false</DebugInformation>
22 </Options>
23 </Configuration>
24 <Files>
25 <File>Tao.Sdl.License.txt</File>
26 <File>Tao.Sdl.Readme.txt</File>
27 <File>Tao.Sdl.snk</File>
28 <File>Tao.Sdl.dll.config</File>
29 </Files>
30 <Project name="Tao.Sdl" path="." language="C#" type="Library">
31 <Reference name="System" />
32 <Files>
33 <File>AssemblyInfo.cs</File>
34 <File>Sdl.cs</File>
35 <File>SdlImage.cs</File>
36 <File>SdlMixer.cs</File>
37 <File>SdlTtf.cs</File>
38 <File>SdlNet.cs</File>
39 <File>SdlGfx.cs</File>
40 <File>Smpeg.cs</File>
41 <File>DelegateCallingConventionCdeclAttribute.cs</File>
42 </Files>
43 </Project>
44 <Project name="Tao.Sdl.Tests" path="..\\..\\tests\\Sdl\\" language="C#" type="Library">
45 <Configuration name="Debug">
46 <Options>
47 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
48 <OptimizeCode>false</OptimizeCode>
49 <AllowUnsafe>false</AllowUnsafe>
50 <OutputPath>bin\Debug</OutputPath>
51 <XmlDocFile>Tao.Sdl.Tests.xml</XmlDocFile>
52 <DebugInformation>true</DebugInformation>
53 </Options>
54 </Configuration>
55 <Configuration name="Release">
56 <Options>
57 <CompilerDefines>TRACE;WIN32</CompilerDefines>
58 <OptimizeCode>true</OptimizeCode>
59 <AllowUnsafe>false</AllowUnsafe>
60 <OutputPath>bin\Release</OutputPath>
61 <XmlDocFile>Tao.Sdl.Tests.xml</XmlDocFile>
62 <DebugInformation>false</DebugInformation>
63 </Options>
64 </Configuration>
65 <Reference name="System" />
66 <Reference name="nunit.framework.dll"/>
67 <Reference name="Tao.Sdl" />
68 <Files>
69 <File>AssemblyInfo.cs</File>
70 <File>SdlTest.cs</File>
71 <File>SdlTestVideo.cs</File>
72 <File>SdlTestImage.cs</File>
73 <File>SdlTestTtf.cs</File>
74 <File>SdlTestMixer.cs</File>
75 <File>SdlTestGfx.cs</File>
76 <File>SmpegTest.cs</File>
77 </Files>
78 </Project>
79 <Project name="SdlExamples.Rectangles" path="..\\..\\examples\\SdlExamples\\Rectangles" language="C#" type="WinExe" startupObject="SdlExamples.Rectangles">
80 <Configuration name="Debug">
81 <Options>
82 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
83 <OptimizeCode>false</OptimizeCode>
84 <AllowUnsafe>false</AllowUnsafe>
85 <OutputPath>bin\Debug</OutputPath>
86 <DebugInformation>true</DebugInformation>
87 </Options>
88 </Configuration>
89 <Configuration name="Release">
90 <Options>
91 <CompilerDefines>TRACE;WIN32</CompilerDefines>
92 <OptimizeCode>true</OptimizeCode>
93 <AllowUnsafe>false</AllowUnsafe>
94 <OutputPath>bin\Release</OutputPath>
95 <DebugInformation>false</DebugInformation>
96 </Options>
97 </Configuration>
98 <Reference name="System" />
99 <Reference name="Tao.Sdl" />
100 <Files>
101 <File>AssemblyInfo.cs</File>
102 <File>Rectangles.cs</File>
103 </Files>
104 </Project>
105 <Project name="SdlExamples.SmpegPlayer" path="..\\..\\examples\\SdlExamples\\SmpegPlayer" language="C#" type="WinExe" startupObject="SdlExamples.SmpegPlayer">
106 <Configuration name="Debug">
107 <Options>
108 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
109 <OptimizeCode>false</OptimizeCode>
110 <AllowUnsafe>false</AllowUnsafe>
111 <OutputPath>bin\Debug</OutputPath>
112 <DebugInformation>true</DebugInformation>
113 </Options>
114 </Configuration>
115 <Configuration name="Release">
116 <Options>
117 <CompilerDefines>TRACE;WIN32</CompilerDefines>
118 <OptimizeCode>true</OptimizeCode>
119 <AllowUnsafe>false</AllowUnsafe>
120 <OutputPath>bin\Release</OutputPath>
121 <DebugInformation>false</DebugInformation>
122 </Options>
123 </Configuration>
124 <Reference name="System" />
125 <Reference name="Tao.Sdl" />
126 <Files>
127 <File>AssemblyInfo.cs</File>
128 <File>SmpegPlayer.cs</File>
129 </Files>
130 </Project>
131 <Project name="SdlExamples.GfxPrimitives" path="..\\..\\examples\\SdlExamples\\GfxPrimitives" language="C#" type="WinExe" startupObject="SdlExamples.GfxPrimitives">
132 <Configuration name="Debug">
133 <Options>
134 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
135 <OptimizeCode>false</OptimizeCode>
136 <AllowUnsafe>false</AllowUnsafe>
137 <OutputPath>bin\Debug</OutputPath>
138 <DebugInformation>true</DebugInformation>
139 </Options>
140 </Configuration>
141 <Configuration name="Release">
142 <Options>
143 <CompilerDefines>TRACE;WIN32</CompilerDefines>
144 <OptimizeCode>true</OptimizeCode>
145 <AllowUnsafe>false</AllowUnsafe>
146 <OutputPath>bin\Release</OutputPath>
147 <DebugInformation>false</DebugInformation>
148 </Options>
149 </Configuration>
150 <Reference name="System" />
151 <Reference name="Tao.Sdl" />
152 <Files>
153 <File>AssemblyInfo.cs</File>
154 <File>GfxPrimitives.cs</File>
155 </Files>
156 </Project>
157 <Project name="Tao.PostProcess" path="..\\Tao.PostProcess\\" language="C#" type="Exe">
158 <Configuration name="Debug">
159 <Options>
160 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
161 <OptimizeCode>false</OptimizeCode>
162 <AllowUnsafe>false</AllowUnsafe>
163 <OutputPath>bin\Debug</OutputPath>
164 <DebugInformation>true</DebugInformation>
165 </Options>
166 </Configuration>
167 <Configuration name="Release">
168 <Options>
169 <CompilerDefines>TRACE;WIN32</CompilerDefines>
170 <OptimizeCode>true</OptimizeCode>
171 <AllowUnsafe>false</AllowUnsafe>
172 <OutputPath>bin\Release</OutputPath>
173 <DebugInformation>false</DebugInformation>
174 </Options>
175 </Configuration>
176 <Reference name="System" />
177 <Files>
178 <File>AssemblyInfo.cs</File>
179 <File>AppMain.cs</File>
180 <File>BuildProcessor.cs</File>
181 <File>Options.cs</File>
182 <File>ReleaseBuildProcessor.cs</File>
183 <File>UsageHelp.cs</File>
184 </Files>
185 </Project>
186 </Solution>
187</Prebuild>
diff --git a/Prebuild/prebuild b/Prebuild/prebuild
new file mode 100755
index 0000000..0dc648d
--- /dev/null
+++ b/Prebuild/prebuild
@@ -0,0 +1,2 @@
1#!/bin/sh
2exec mono [PREFIX]/prebuild.exe "$@"
diff --git a/Prebuild/prebuild.xml b/Prebuild/prebuild.xml
new file mode 100644
index 0000000..f39175b
--- /dev/null
+++ b/Prebuild/prebuild.xml
@@ -0,0 +1,75 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.10.xsd" version="1.10">
3 <Solution name="Prebuild" version="2.0.6">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <OutputPath>bin/Debug</OutputPath>
9 <DebugInformation>true</DebugInformation>
10 <SuppressWarnings>1595</SuppressWarnings>
11 </Options>
12 </Configuration>
13 <Configuration name="Release">
14 <Options>
15 <CompilerDefines>TRACE</CompilerDefines>
16 <OutputPath>bin/Release</OutputPath>
17 <OptimizeCode>true</OptimizeCode>
18 <DebugInformation>false</DebugInformation>
19 <SuppressWarnings>1595</SuppressWarnings>
20 </Options>
21 </Configuration>
22 <Files>
23 <File>prebuild.xml</File>
24 <File>prebuild</File>
25 </Files>
26 <Project name="Prebuild"
27 path="src"
28 language="C#"
29 assemblyName="prebuild"
30 icon="App.ico"
31 type="Exe"
32 rootNamespace="Prebuild"
33 startupObject="Prebuild.Prebuild"
34 version="2.0.6"
35 frameworkVersion="v3_5"
36 >
37 <Author>Matthew Holmes (matthew@wildfiregames.com)</Author>
38 <Author>Dan Moorehead (dan05a@gmail.com)</Author>
39 <Author>Dave Hudson (jendave@yahoo.com)</Author>
40 <Author>Rob Loach (http://robloach.net)</Author>
41 <Author>C.J. Adams-Collier (cjac@colliertech.org)</Author>
42 <Author>John Hurliman (john.hurliman@intel.com)</Author>
43 <Description>The Prebuild project generator</Description>
44 <Configuration name="Debug">
45 <Options>
46 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
47 <OptimizeCode>false</OptimizeCode>
48 <OutputPath>bin/Debug</OutputPath>
49 <DebugInformation>true</DebugInformation>
50 <KeyFile>Prebuild.snk</KeyFile>
51 <SuppressWarnings>1595</SuppressWarnings>
52 </Options>
53 </Configuration>
54 <Configuration name="Release">
55 <Options>
56 <CompilerDefines>TRACE</CompilerDefines>
57 <OutputPath>bin/Release</OutputPath>
58 <OptimizeCode>true</OptimizeCode>
59 <DebugInformation>false</DebugInformation>
60 <KeyFile>Prebuild.snk</KeyFile>
61 <SuppressWarnings>1595</SuppressWarnings>
62 </Options>
63 </Configuration>
64 <Reference name="System.EnterpriseServices" />
65 <Reference name="System.Xml" />
66 <Reference name="System" />
67 <Files>
68 <Match pattern="App.ico" buildAction="EmbeddedResource"/>
69 <Match path="data" pattern="prebuild-1.10.xsd" buildAction="EmbeddedResource"/>
70 <Match path="data" pattern="autotools.xml" buildAction="EmbeddedResource"/>
71 <Match pattern="*.cs" recurse="true"/>
72 </Files>
73 </Project>
74 </Solution>
75</Prebuild>
diff --git a/Prebuild/scripts/Clean.bat b/Prebuild/scripts/Clean.bat
new file mode 100755
index 0000000..806bbe8
--- /dev/null
+++ b/Prebuild/scripts/Clean.bat
@@ -0,0 +1,2 @@
1cd ..
2Prebuild.exe /clean /yes /removedir obj /file prebuild.xml /build NET_2_0 /pause
diff --git a/Prebuild/scripts/Clean.sh b/Prebuild/scripts/Clean.sh
new file mode 100755
index 0000000..b0a6530
--- /dev/null
+++ b/Prebuild/scripts/Clean.sh
@@ -0,0 +1,4 @@
1#!/bin/sh
2
3./prebuild /clean /removedir obj /file ../prebuild.xml /pause
4rm -rf ../Makefile
diff --git a/Prebuild/scripts/Help.bat b/Prebuild/scripts/Help.bat
new file mode 100755
index 0000000..7c843c4
--- /dev/null
+++ b/Prebuild/scripts/Help.bat
@@ -0,0 +1,2 @@
1cd ..
2Prebuild.exe /usage /pause \ No newline at end of file
diff --git a/Prebuild/scripts/MonoDevelop.sh b/Prebuild/scripts/MonoDevelop.sh
new file mode 100755
index 0000000..fbd7669
--- /dev/null
+++ b/Prebuild/scripts/MonoDevelop.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2prebuild /target monodev /file ../prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/Prebuild.nsi b/Prebuild/scripts/Prebuild.nsi
new file mode 100644
index 0000000..8f9854e
--- /dev/null
+++ b/Prebuild/scripts/Prebuild.nsi
@@ -0,0 +1,231 @@
1!verbose 3
2
3!define PRODUCT_NAME "Prebuild"
4!define PRODUCT_VERSION "1.3.1"
5!define PRODUCT_PUBLISHER "Prebuild"
6!define PRODUCT_PACKAGE "prebuild"
7!define PRODUCT_WEB_SITE "http://dnpb.sourceforge.net"
8!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Prebuild"
9!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Prebuild"
10!define PRODUCT_UNINST_ROOT_KEY "HKLM"
11!define PRODUCT_PATH ".."
12
13;!define MUI_WELCOMEFINISHPAGE_BITMAP "PrebuildLogo.bmp"
14;!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
15;!define MUI_UNWELCOMEFINISHPAGE_BITMAP "PrebuildLogo.bmp"
16;!define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
17
18BrandingText "© 2003-2006 David Hudson, http://dnpb.sourceforge.net/"
19SetCompressor lzma
20CRCCheck on
21
22; File Association defines
23;!include "fileassoc.nsh"
24
25; MUI 1.67 compatible ------
26!include "MUI.nsh"
27
28; MUI Settings
29!define MUI_ABORTWARNING
30!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
31!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
32
33;--------------------------------
34;Variables
35
36;--------------------------------
37;Installer Pages
38
39; Welcome page
40!insertmacro MUI_PAGE_WELCOME
41; License page
42!insertmacro MUI_PAGE_LICENSE "..\doc\license.txt"
43; Directory page
44!insertmacro MUI_PAGE_DIRECTORY
45
46; Instfiles page
47!insertmacro MUI_PAGE_INSTFILES
48
49; Finish page
50!insertmacro MUI_PAGE_FINISH
51
52;------------------------------------
53; Uninstaller pages
54!insertmacro MUI_UNPAGE_CONFIRM
55!insertmacro MUI_UNPAGE_INSTFILES
56!insertmacro MUI_UNPAGE_FINISH
57;------------------------------------
58
59; Language files
60!insertmacro MUI_LANGUAGE "English"
61
62; Reserve files
63!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
64
65; MUI end ------
66
67Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
68OutFile "..\${PRODUCT_PACKAGE}-${PRODUCT_VERSION}-setup.exe"
69InstallDir "$PROGRAMFILES\Prebuild"
70InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
71ShowInstDetails show
72ShowUnInstDetails show
73
74; .NET Framework check
75; http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dnnetdep/html/redistdeploy1_1.asp
76; Section "Detecting that the .NET Framework 1.1 is installed"
77Function .onInit
78 ReadRegDWORD $R0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" Install
79 StrCmp $R0 "" 0 CheckPreviousVersion
80 MessageBox MB_OK "Microsoft .NET Framework 1.1 was not found on this system.$\r$\n$\r$\nUnable to continue this installation."
81 Abort
82
83 CheckPreviousVersion:
84 ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName"
85 StrCmp $R0 "" CheckOSVersion 0
86 MessageBox MB_OK "An old version of Prebuild is installed on this computer, please uninstall first.$\r$\n$\r$\nUnable to continue this installation."
87 Abort
88
89 CheckOSVersion:
90 Call IsSupportedWindowsVersion
91 Pop $R0
92 StrCmp $R0 "False" NoAbort 0
93 MessageBox MB_OK "The operating system you are using is not supported by Prebuild (95/98/ME/NT3.x/NT4.x)."
94 Abort
95
96 NoAbort:
97FunctionEnd
98
99Section "Source" SecSource
100 SetOverwrite ifnewer
101 SetOutPath "$INSTDIR\src"
102 File /r /x *.swp /x .svn /x *.xml /x *.csproj /x *.user /x *.build /x *.prjx /x *.mdp /x bin /x obj /x *.nsi ${PRODUCT_PATH}\src\*.*
103
104 ;Store installation folder
105 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
106
107SectionEnd
108
109Section "Runtime" SecRuntime
110 SetOverwrite ifnewer
111 SetOutPath "$INSTDIR"
112 File /r /x *.swp /x .svn /x *.nsi /x src /x *.sln /x *.cmbx /x *.mds ${PRODUCT_PATH}\Prebuild.exe ${PRODUCT_PATH}\prebuild.xml
113
114 ;Store installation folder
115 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
116
117SectionEnd
118
119Section "Documentation" SecDocs
120 SetOverwrite ifnewer
121 SetOutPath "$INSTDIR\doc"
122 File /r /x *.swp /x .svn /x *.exe ${PRODUCT_PATH}\doc\*.*
123
124 ;Store installation folder
125 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
126SectionEnd
127
128Section "Scripts" SecScripts
129 SetOverwrite ifnewer
130 SetOutPath "$INSTDIR\scripts"
131 File /r /x *.swp /x .svn /x *.nsi /x *.exe ${PRODUCT_PATH}\scripts\*.*
132
133 ;Store installation folder
134 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
135SectionEnd
136
137;Language strings
138
139Section -AdditionalIcons
140 WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
141SectionEnd
142
143Section -Post
144 WriteUninstaller "$INSTDIR\uninst.exe"
145 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
146 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
147 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
148 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
149 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
150SectionEnd
151
152Section Uninstall
153
154 DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
155 DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
156 RMDir /r "$INSTDIR"
157
158SectionEnd
159
160; GetWindowsVersion, taken from NSIS help, modified for our purposes
161Function IsSupportedWindowsVersion
162
163 Push $R0
164 Push $R1
165
166 ReadRegStr $R0 HKLM \
167 "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
168
169 IfErrors 0 lbl_winnt
170
171 ; we are not NT
172 ReadRegStr $R0 HKLM \
173 "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
174
175 StrCpy $R1 $R0 1
176 StrCmp $R1 '4' 0 lbl_error
177
178 StrCpy $R1 $R0 3
179
180 StrCmp $R1 '4.0' lbl_win32_95
181 StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
182
183 lbl_win32_95:
184 StrCpy $R0 'False'
185 Goto lbl_done
186
187 lbl_win32_98:
188 StrCpy $R0 'False'
189 Goto lbl_done
190
191 lbl_win32_ME:
192 StrCpy $R0 'False'
193 Goto lbl_done
194
195 lbl_winnt:
196
197 StrCpy $R1 $R0 1
198
199 StrCmp $R1 '3' lbl_winnt_x
200 StrCmp $R1 '4' lbl_winnt_x
201
202 StrCpy $R1 $R0 3
203
204 StrCmp $R1 '5.0' lbl_winnt_2000
205 StrCmp $R1 '5.1' lbl_winnt_XP
206 StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
207
208 lbl_winnt_x:
209 StrCpy $R0 'False'
210 Goto lbl_done
211
212 lbl_winnt_2000:
213 Strcpy $R0 'True'
214 Goto lbl_done
215
216 lbl_winnt_XP:
217 Strcpy $R0 'True'
218 Goto lbl_done
219
220 lbl_winnt_2003:
221 Strcpy $R0 'True'
222 Goto lbl_done
223
224 lbl_error:
225 Strcpy $R0 'False'
226 lbl_done:
227
228 Pop $R1
229 Exch $R0
230
231FunctionEnd
diff --git a/Prebuild/scripts/SharpDevelop.bat b/Prebuild/scripts/SharpDevelop.bat
new file mode 100755
index 0000000..08fea0b
--- /dev/null
+++ b/Prebuild/scripts/SharpDevelop.bat
@@ -0,0 +1,4 @@
1@rem Generates a combine (.cmbx) and a set of project files (.prjx)
2@rem for SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx)
3cd ..
4Prebuild.exe /target sharpdev /file prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/SharpDevelop2.bat b/Prebuild/scripts/SharpDevelop2.bat
new file mode 100755
index 0000000..4ca0272
--- /dev/null
+++ b/Prebuild/scripts/SharpDevelop2.bat
@@ -0,0 +1,4 @@
1@rem Generates a combine (.cmbx) and a set of project files (.prjx)
2@rem for SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx)
3cd ..
4Prebuild.exe /target sharpdev2 /file prebuild.xml /pause
diff --git a/Prebuild/scripts/VS2002.bat b/Prebuild/scripts/VS2002.bat
new file mode 100755
index 0000000..dc5b6a7
--- /dev/null
+++ b/Prebuild/scripts/VS2002.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj)
2@rem for Microsoft Visual Studio .NET 2002
3cd ..
4Prebuild.exe /target vs2002 /file prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/VS2003.bat b/Prebuild/scripts/VS2003.bat
new file mode 100755
index 0000000..929a480
--- /dev/null
+++ b/Prebuild/scripts/VS2003.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj)
2@rem for Microsoft Visual Studio .NET 2002
3cd ..
4Prebuild.exe /target vs2003 /file prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/VS2005.bat b/Prebuild/scripts/VS2005.bat
new file mode 100755
index 0000000..7a7af1d
--- /dev/null
+++ b/Prebuild/scripts/VS2005.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj, .vbproj, etc.)
2@rem for Microsoft Visual Studio .NET 2005
3cd ..
4Prebuild.exe /target vs2005 /file prebuild.xml /build NET_2_0 /pause
diff --git a/Prebuild/scripts/VS2008.bat b/Prebuild/scripts/VS2008.bat
new file mode 100755
index 0000000..b465668
--- /dev/null
+++ b/Prebuild/scripts/VS2008.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj, .vbproj, etc.)
2@rem for Microsoft Visual Studio .NET 2008
3cd ..
4Prebuild.exe /target vs2008 /file prebuild.xml /pause
diff --git a/Prebuild/scripts/VS2010.bat b/Prebuild/scripts/VS2010.bat
new file mode 100644
index 0000000..87676ac
--- /dev/null
+++ b/Prebuild/scripts/VS2010.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj, .vbproj, etc.)
2@rem for Microsoft Visual Studio .NET 2010
3cd ..
4Prebuild.exe /target vs2010 /file prebuild.xml /pause
diff --git a/Prebuild/scripts/autotools.bat b/Prebuild/scripts/autotools.bat
new file mode 100755
index 0000000..1fd3469
--- /dev/null
+++ b/Prebuild/scripts/autotools.bat
@@ -0,0 +1,4 @@
1@rem Generates Makefiles
2@rem for autotools
3cd ..
4Prebuild.exe /target autotools /file prebuild.xml /pause
diff --git a/Prebuild/scripts/autotools.sh b/Prebuild/scripts/autotools.sh
new file mode 100755
index 0000000..4d140ce
--- /dev/null
+++ b/Prebuild/scripts/autotools.sh
@@ -0,0 +1,5 @@
1#!/bin/sh
2RUNTIME=`which mono`
3
4SCRIPTDIR=`dirname $0`
5${RUNTIME} ${SCRIPTDIR}/../Prebuild.exe /target autotools /file ${SCRIPTDIR}/../prebuild.xml /build NET_2_0
diff --git a/Prebuild/scripts/makefile.bat b/Prebuild/scripts/makefile.bat
new file mode 100755
index 0000000..eef9a69
--- /dev/null
+++ b/Prebuild/scripts/makefile.bat
@@ -0,0 +1,4 @@
1@rem Generates makefiles
2@rem for make
3cd ..
4Prebuild.exe /target makefile /file prebuild.xml /pause
diff --git a/Prebuild/scripts/makefile.sh b/Prebuild/scripts/makefile.sh
new file mode 100755
index 0000000..2e656cb
--- /dev/null
+++ b/Prebuild/scripts/makefile.sh
@@ -0,0 +1,10 @@
1#!/bin/sh
2
3./prebuild /target makefile /file ../prebuild.xml /pause
4
5if [ -f ../Makefile ]
6then
7 rm -rf ../Makefile
8fi
9
10mv ../Prebuild.make ../Makefile
diff --git a/Prebuild/scripts/nant.bat b/Prebuild/scripts/nant.bat
new file mode 100755
index 0000000..925467d
--- /dev/null
+++ b/Prebuild/scripts/nant.bat
@@ -0,0 +1,4 @@
1@rem Generates a .build files
2@rem for NAnt
3cd ..
4Prebuild.exe /target nant /file prebuild.xml /pause
diff --git a/Prebuild/scripts/nant.sh b/Prebuild/scripts/nant.sh
new file mode 100755
index 0000000..0311971
--- /dev/null
+++ b/Prebuild/scripts/nant.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2prebuild /target nant /file ../prebuild.xml /pause
diff --git a/Prebuild/scripts/xcode.bat b/Prebuild/scripts/xcode.bat
new file mode 100755
index 0000000..9883edf
--- /dev/null
+++ b/Prebuild/scripts/xcode.bat
@@ -0,0 +1,4 @@
1@rem Generates a Xcode files
2@rem for NAnt
3cd ..
4Prebuild.exe /target xcode /file prebuild.xml /pause
diff --git a/Prebuild/scripts/xcode.sh b/Prebuild/scripts/xcode.sh
new file mode 100755
index 0000000..e9b58f9
--- /dev/null
+++ b/Prebuild/scripts/xcode.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2prebuild /target xcode /file ../prebuild.xml /pause
diff --git a/Prebuild/src/App.ico b/Prebuild/src/App.ico
new file mode 100644
index 0000000..ac4ea6f
--- /dev/null
+++ b/Prebuild/src/App.ico
Binary files differ
diff --git a/Prebuild/src/Core/Attributes/DataNodeAttribute.cs b/Prebuild/src/Core/Attributes/DataNodeAttribute.cs
new file mode 100644
index 0000000..cd3cea4
--- /dev/null
+++ b/Prebuild/src/Core/Attributes/DataNodeAttribute.cs
@@ -0,0 +1,72 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Specialized;
28
29namespace Prebuild.Core.Attributes
30{
31 /// <summary>
32 ///
33 /// </summary>
34 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple=true)]
35 public sealed class DataNodeAttribute : Attribute
36 {
37 #region Fields
38
39 private string m_Name = "unknown";
40
41 #endregion
42
43 #region Constructors
44
45 /// <summary>
46 /// Initializes a new instance of the <see cref="DataNodeAttribute"/> class.
47 /// </summary>
48 /// <param name="name">The name.</param>
49 public DataNodeAttribute(string name)
50 {
51 m_Name = name;
52 }
53
54 #endregion
55
56 #region Properties
57
58 /// <summary>
59 /// Gets the name.
60 /// </summary>
61 /// <value>The name.</value>
62 public string Name
63 {
64 get
65 {
66 return m_Name;
67 }
68 }
69
70 #endregion
71 }
72}
diff --git a/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs b/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs
new file mode 100644
index 0000000..8ef97a1
--- /dev/null
+++ b/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs
@@ -0,0 +1,71 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Attributes
29{
30 /// <summary>
31 ///
32 /// </summary>
33 [AttributeUsage(AttributeTargets.Field)]
34 public sealed class OptionNodeAttribute : Attribute
35 {
36 #region Fields
37
38 private string m_NodeName;
39
40 #endregion
41
42 #region Constructors
43
44 /// <summary>
45 /// Initializes a new instance of the <see cref="OptionNodeAttribute"/> class.
46 /// </summary>
47 /// <param name="nodeName">Name of the node.</param>
48 public OptionNodeAttribute(string nodeName)
49 {
50 m_NodeName = nodeName;
51 }
52
53 #endregion
54
55 #region Properties
56
57 /// <summary>
58 /// Gets the name of the node.
59 /// </summary>
60 /// <value>The name of the node.</value>
61 public string NodeName
62 {
63 get
64 {
65 return m_NodeName;
66 }
67 }
68
69 #endregion
70 }
71}
diff --git a/Prebuild/src/Core/Attributes/TargetAttribute.cs b/Prebuild/src/Core/Attributes/TargetAttribute.cs
new file mode 100644
index 0000000..fb30914
--- /dev/null
+++ b/Prebuild/src/Core/Attributes/TargetAttribute.cs
@@ -0,0 +1,71 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Attributes
29{
30 /// <summary>
31 ///
32 /// </summary>
33 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
34 public sealed class TargetAttribute : Attribute
35 {
36 #region Fields
37
38 private string m_Name;
39
40 #endregion
41
42 #region Constructors
43
44 /// <summary>
45 /// Initializes a new instance of the <see cref="TargetAttribute"/> class.
46 /// </summary>
47 /// <param name="name">The name.</param>
48 public TargetAttribute(string name)
49 {
50 m_Name = name;
51 }
52
53 #endregion
54
55 #region Properties
56
57 /// <summary>
58 /// Gets the name.
59 /// </summary>
60 /// <value>The name.</value>
61 public string Name
62 {
63 get
64 {
65 return m_Name;
66 }
67 }
68
69 #endregion
70 }
71}
diff --git a/Prebuild/src/Core/FatalException.cs b/Prebuild/src/Core/FatalException.cs
new file mode 100644
index 0000000..751297a
--- /dev/null
+++ b/Prebuild/src/Core/FatalException.cs
@@ -0,0 +1,85 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Runtime.Serialization;
28
29namespace Prebuild.Core
30{
31 /// <summary>
32 ///
33 /// </summary>
34 [Serializable()]
35 public class FatalException : Exception
36 {
37 #region Constructors
38
39
40 /// <summary>
41 /// Initializes a new instance of the <see cref="FatalException"/> class.
42 /// </summary>
43 public FatalException()
44 {
45 }
46
47 /// <summary>
48 /// Initializes a new instance of the <see cref="FatalException"/> class.
49 /// </summary>
50 /// <param name="format">The format.</param>
51 /// <param name="args">The args.</param>
52 public FatalException(string format, params object[] args)
53 : base(String.Format(format, args))
54 {
55 }
56
57 /// <summary>
58 /// Exception with specified string
59 /// </summary>
60 /// <param name="message">Exception message</param>
61 public FatalException(string message): base(message)
62 {
63 }
64
65 /// <summary>
66 ///
67 /// </summary>
68 /// <param name="message"></param>
69 /// <param name="exception"></param>
70 public FatalException(string message, Exception exception) : base(message, exception)
71 {
72 }
73
74 /// <summary>
75 ///
76 /// </summary>
77 /// <param name="info"></param>
78 /// <param name="context"></param>
79 protected FatalException(SerializationInfo info, StreamingContext context) : base( info, context )
80 {
81 }
82
83 #endregion
84 }
85}
diff --git a/Prebuild/src/Core/Interfaces/IDataNode.cs b/Prebuild/src/Core/Interfaces/IDataNode.cs
new file mode 100644
index 0000000..4917b18
--- /dev/null
+++ b/Prebuild/src/Core/Interfaces/IDataNode.cs
@@ -0,0 +1,47 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29namespace Prebuild.Core.Interfaces
30{
31 /// <summary>
32 ///
33 /// </summary>
34 public interface IDataNode
35 {
36 /// <summary>
37 /// Gets or sets the parent.
38 /// </summary>
39 /// <value>The parent.</value>
40 IDataNode Parent { get; set; }
41 /// <summary>
42 /// Parses the specified node.
43 /// </summary>
44 /// <param name="node">The node.</param>
45 void Parse(XmlNode node);
46 }
47}
diff --git a/Prebuild/src/Core/Interfaces/ITarget.cs b/Prebuild/src/Core/Interfaces/ITarget.cs
new file mode 100644
index 0000000..e4c3ea4
--- /dev/null
+++ b/Prebuild/src/Core/Interfaces/ITarget.cs
@@ -0,0 +1,51 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Interfaces
29{
30 /// <summary>
31 ///
32 /// </summary>
33 public interface ITarget
34 {
35 /// <summary>
36 /// Writes the specified kern.
37 /// </summary>
38 /// <param name="kern">The kern.</param>
39 void Write(Kernel kern);
40 /// <summary>
41 /// Cleans the specified kern.
42 /// </summary>
43 /// <param name="kern">The kern.</param>
44 void Clean(Kernel kern);
45 /// <summary>
46 /// Gets the name.
47 /// </summary>
48 /// <value>The name.</value>
49 string Name { get; }
50 }
51} \ No newline at end of file
diff --git a/Prebuild/src/Core/Kernel.cs b/Prebuild/src/Core/Kernel.cs
new file mode 100644
index 0000000..454ff8b
--- /dev/null
+++ b/Prebuild/src/Core/Kernel.cs
@@ -0,0 +1,832 @@
1#region BSD License
2/*
3Copyright (c) 2004-2008
4Matthew Holmes (matthew@wildfiregames.com),
5Dan Moorehead (dan05a@gmail.com),
6Rob Loach (http://www.robloach.net),
7C.J. Adams-Collier (cjac@colliertech.org)
8
9Redistribution and use in source and binary forms, with or without
10modification, are permitted provided that the following conditions are
11met:
12
13* Redistributions of source code must retain the above copyright
14 notice, this list of conditions and the following disclaimer.
15
16* Redistributions in binary form must reproduce the above copyright
17 notice, this list of conditions and the following disclaimer in the
18 documentation and/or other materials provided with the distribution.
19
20* The name of the author may not be used to endorse or promote
21 products derived from this software without specific prior written
22 permission.
23
24THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
25IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
28INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
33IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34POSSIBILITY OF SUCH DAMAGE.
35
36*/
37#endregion
38
39#define NO_VALIDATE
40
41using System;
42using System.Collections.Generic;
43using System.IO;
44using System.Reflection;
45using System.Xml;
46using System.Xml.Schema;
47using Prebuild.Core.Attributes;
48using Prebuild.Core.Interfaces;
49using Prebuild.Core.Nodes;
50using Prebuild.Core.Utilities;
51
52namespace Prebuild.Core
53{
54 /// <summary>
55 ///
56 /// </summary>
57 public class Kernel : IDisposable
58 {
59 #region Inner Classes
60
61 private struct NodeEntry
62 {
63 public Type Type;
64 public DataNodeAttribute Attribute;
65 }
66
67 #endregion
68
69 #region Fields
70
71 private static readonly Kernel m_Instance = new Kernel();
72
73 /// <summary>
74 /// This must match the version of the schema that is embeeded
75 /// </summary>
76 private const string m_SchemaVersion = "1.10";
77 private const string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd";
78 private const string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema;
79 bool disposed;
80 private Version m_Version;
81 private const string m_Revision = "";
82 private CommandLineCollection m_CommandLine;
83 private Log m_Log;
84 private CurrentDirectory m_CurrentWorkingDirectory;
85 private XmlSchemaCollection m_Schemas;
86
87 private readonly Dictionary<string, ITarget> m_Targets = new Dictionary<string, ITarget>();
88 private readonly Dictionary<string, NodeEntry> m_Nodes = new Dictionary<string, NodeEntry>();
89
90 readonly List<SolutionNode> m_Solutions = new List<SolutionNode>();
91 string m_Target;
92 string m_Clean;
93 string[] m_RemoveDirectories;
94 XmlDocument m_CurrentDoc;
95 bool m_PauseAfterFinish;
96 string[] m_ProjectGroups;
97
98 #endregion
99
100 #region Constructors
101
102 private Kernel()
103 {
104 }
105
106 #endregion
107
108 #region Properties
109
110 /// <summary>
111 /// Gets a value indicating whether [pause after finish].
112 /// </summary>
113 /// <value><c>true</c> if [pause after finish]; otherwise, <c>false</c>.</value>
114 public bool PauseAfterFinish
115 {
116 get
117 {
118 return m_PauseAfterFinish;
119 }
120 }
121
122 /// <summary>
123 /// Gets the instance.
124 /// </summary>
125 /// <value>The instance.</value>
126 public static Kernel Instance
127 {
128 get
129 {
130 return m_Instance;
131 }
132 }
133
134 /// <summary>
135 /// Gets the version.
136 /// </summary>
137 /// <value>The version.</value>
138 public string Version
139 {
140 get
141 {
142 return String.Format("{0}.{1}.{2}{3}", m_Version.Major, m_Version.Minor, m_Version.Build, m_Revision);
143 }
144 }
145
146 /// <summary>
147 /// Gets the command line.
148 /// </summary>
149 /// <value>The command line.</value>
150 public CommandLineCollection CommandLine
151 {
152 get
153 {
154 return m_CommandLine;
155 }
156 }
157
158 /// <summary>
159 /// Gets the targets.
160 /// </summary>
161 /// <value>The targets.</value>
162 public Dictionary<string, ITarget> Targets
163 {
164 get
165 {
166 return m_Targets;
167 }
168 }
169
170 /// <summary>
171 /// Gets the log.
172 /// </summary>
173 /// <value>The log.</value>
174 public Log Log
175 {
176 get
177 {
178 return m_Log;
179 }
180 }
181
182 /// <summary>
183 /// Gets the current working directory.
184 /// </summary>
185 /// <value>The current working directory.</value>
186 public CurrentDirectory CurrentWorkingDirectory
187 {
188 get
189 {
190 return m_CurrentWorkingDirectory;
191 }
192 }
193
194 /// <summary>
195 /// Gets the solutions.
196 /// </summary>
197 /// <value>The solutions.</value>
198 public List<SolutionNode> Solutions
199 {
200 get
201 {
202 return m_Solutions;
203 }
204 }
205
206 /// <summary>
207 /// Gets the XmlDocument object representing the prebuild.xml
208 /// being processed
209 /// </summary>
210 /// <value>The XmlDocument object</value>
211 public XmlDocument CurrentDoc
212 {
213 get
214 {
215 return m_CurrentDoc;
216 }
217 }
218
219 #endregion
220
221 #region Private Methods
222
223 private static void RemoveDirectories(string rootDir, string[] dirNames)
224 {
225 foreach(string dir in Directory.GetDirectories(rootDir))
226 {
227 string simpleName = Path.GetFileName(dir);
228
229 if(Array.IndexOf(dirNames, simpleName) != -1)
230 {
231 //delete if the name matches one of the directory names to delete
232 string fullDirPath = Path.GetFullPath(dir);
233 Directory.Delete(fullDirPath,true);
234 }
235 else//not a match, so check children
236 {
237 RemoveDirectories(dir,dirNames);
238 //recurse, checking children for them
239 }
240 }
241 }
242
243// private void RemoveDirectoryMatches(string rootDir, string dirPattern)
244// {
245// foreach(string dir in Directory.GetDirectories(rootDir))
246// {
247// foreach(string match in Directory.GetDirectories(dir))
248// {//delete all child directories that match
249// Directory.Delete(Path.GetFullPath(match),true);
250// }
251// //recure through the rest checking for nested matches to delete
252// RemoveDirectoryMatches(dir,dirPattern);
253// }
254// }
255
256 private void LoadSchema()
257 {
258 Assembly assembly = GetType().Assembly;
259 Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema);
260 if(stream == null)
261 {
262 //try without the default namespace prepending to it in case was compiled with SharpDevelop or MonoDevelop instead of Visual Studio .NET
263 stream = assembly.GetManifestResourceStream(m_Schema);
264 if(stream == null)
265 {
266 throw new System.Reflection.TargetException(string.Format("Could not find the scheme embedded resource file '{0}'.", m_Schema));
267 }
268 }
269 XmlReader schema = new XmlTextReader(stream);
270
271 m_Schemas = new XmlSchemaCollection();
272 m_Schemas.Add(m_SchemaURI, schema);
273 }
274
275 private void CacheVersion()
276 {
277 m_Version = Assembly.GetEntryAssembly().GetName().Version;
278 }
279
280 private void CacheTargets(Assembly assm)
281 {
282 foreach(Type t in assm.GetTypes())
283 {
284 TargetAttribute ta = (TargetAttribute)Helper.CheckType(t, typeof(TargetAttribute), typeof(ITarget));
285
286 if(ta == null)
287 continue;
288
289 if (t.IsAbstract)
290 continue;
291
292 ITarget target = (ITarget)assm.CreateInstance(t.FullName);
293 if (target == null)
294 {
295 throw new MissingMethodException("Could not create ITarget instance");
296 }
297
298 m_Targets[ta.Name] = target;
299 }
300 }
301
302 private void CacheNodeTypes(Assembly assm)
303 {
304 foreach(Type t in assm.GetTypes())
305 {
306 foreach (DataNodeAttribute dna in t.GetCustomAttributes(typeof(DataNodeAttribute), true))
307 {
308 NodeEntry ne = new NodeEntry();
309 ne.Type = t;
310 ne.Attribute = dna;
311 m_Nodes[dna.Name] = ne;
312 }
313 }
314 }
315
316 private void LogBanner()
317 {
318 m_Log.Write("Prebuild v" + Version);
319 m_Log.Write("Copyright (c) 2004-2010");
320 m_Log.Write("Matthew Holmes (matthew@wildfiregames.com),");
321 m_Log.Write("Dan Moorehead (dan05a@gmail.com),");
322 m_Log.Write("David Hudson (jendave@yahoo.com),");
323 m_Log.Write("Rob Loach (http://www.robloach.net),");
324 m_Log.Write("C.J. Adams-Collier (cjac@colliertech.org),");
325 m_Log.Write("John Hurliman (john.hurliman@intel.com),");
326
327 m_Log.Write("See 'prebuild /usage' for help");
328 m_Log.Write();
329 }
330
331
332
333 private void ProcessFile(string file)
334 {
335 ProcessFile(file, m_Solutions);
336 }
337
338 public void ProcessFile(ProcessNode node, SolutionNode parent)
339 {
340 if (node.IsValid)
341 {
342 List<SolutionNode> list = new List<SolutionNode>();
343 ProcessFile(node.Path, list);
344
345 foreach (SolutionNode solution in list)
346 parent.SolutionsTable[solution.Name] = solution;
347 }
348 }
349
350 /// <summary>
351 ///
352 /// </summary>
353 /// <param name="file"></param>
354 /// <param name="solutions"></param>
355 /// <returns></returns>
356 public void ProcessFile(string file, IList<SolutionNode> solutions)
357 {
358 m_CurrentWorkingDirectory.Push();
359
360 string path = file;
361 try
362 {
363 try
364 {
365 path = Helper.ResolvePath(path);
366 }
367 catch(ArgumentException)
368 {
369 m_Log.Write("Could not open Prebuild file: " + path);
370 m_CurrentWorkingDirectory.Pop();
371 return;
372 }
373
374 Helper.SetCurrentDir(Path.GetDirectoryName(path));
375
376 XmlTextReader reader = new XmlTextReader(path);
377
378 Core.Parse.Preprocessor pre = new Core.Parse.Preprocessor();
379
380 //register command line arguments as XML variables
381 IEnumerator<KeyValuePair<string, string>> dict = m_CommandLine.GetEnumerator();
382 while (dict.MoveNext())
383 {
384 string name = dict.Current.Key.Trim();
385 if (name.Length > 0)
386 pre.RegisterVariable(name, dict.Current.Value);
387 }
388
389 string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML
390
391 // See if the user put into a pseudo target of "prebuild:preprocessed-input" to indicate they want to see the
392 // output before the system processes it.
393 if (m_CommandLine.WasPassed("ppi"))
394 {
395 // Get the filename if there is one, otherwise use a default.
396 string ppiFile = m_CommandLine["ppi"];
397 if (ppiFile == null || ppiFile.Trim().Length == 0)
398 {
399 ppiFile = "preprocessed-input.xml";
400 }
401
402 // Write out the string to the given stream.
403 try
404 {
405 using (StreamWriter ppiWriter = new StreamWriter(ppiFile))
406 {
407 ppiWriter.WriteLine(xml);
408 }
409 }
410 catch(IOException ex)
411 {
412 Console.WriteLine("Could not write PPI file '{0}': {1}", ppiFile, ex.Message);
413 }
414
415 // Finish processing this special tag.
416 return;
417 }
418
419 m_CurrentDoc = new XmlDocument();
420 try
421 {
422#if NO_VALIDATE
423 XmlReader validator = XmlReader.Create(new StringReader(xml));
424 m_CurrentDoc.Load(validator);
425#else
426 XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml)));
427
428 //validate while reading from string into XmlDocument DOM structure in memory
429 foreach(XmlSchema schema in m_Schemas)
430 {
431 validator.Schemas.Add(schema);
432 }
433 m_CurrentDoc.Load(validator);
434#endif
435 }
436 catch(XmlException e)
437 {
438 throw new XmlException(e.ToString());
439 }
440
441 //is there a purpose to writing it? An syntax/schema problem would have been found during pre.Process() and reported with details
442 if(m_CommandLine.WasPassed("ppo"))
443 {
444 string ppoFile = m_CommandLine["ppo"];
445 if(ppoFile == null || ppoFile.Trim().Length < 1)
446 {
447 ppoFile = "preprocessed.xml";
448 }
449
450 StreamWriter writer = null;
451 try
452 {
453 writer = new StreamWriter(ppoFile);
454 writer.Write(xml);
455 }
456 catch(IOException ex)
457 {
458 Console.WriteLine("Could not write PPO file '{0}': {1}", ppoFile, ex.Message);
459 }
460 finally
461 {
462 if(writer != null)
463 {
464 writer.Close();
465 }
466 }
467 return;
468 }
469 //start reading the xml config file
470 XmlElement rootNode = m_CurrentDoc.DocumentElement;
471 //string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0");
472 Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false);
473
474 foreach(XmlNode node in rootNode.ChildNodes)//solutions or if pre-proc instructions
475 {
476 IDataNode dataNode = ParseNode(node, null);
477 if(dataNode is ProcessNode)
478 {
479 ProcessNode proc = (ProcessNode)dataNode;
480 if(proc.IsValid)
481 {
482 ProcessFile(proc.Path);
483 }
484 }
485 else if(dataNode is SolutionNode)
486 {
487 solutions.Add((SolutionNode)dataNode);
488 }
489 }
490 }
491 catch(XmlSchemaException xse)
492 {
493 m_Log.Write("XML validation error at line {0} in {1}:\n\n{2}",
494 xse.LineNumber, path, xse.Message);
495 }
496 finally
497 {
498 m_CurrentWorkingDirectory.Pop();
499 }
500 }
501
502 #endregion
503
504 #region Public Methods
505
506 /// <summary>
507 /// Allows the project.
508 /// </summary>
509 /// <param name="projectGroupsFlags">The project groups flags.</param>
510 /// <returns></returns>
511 public bool AllowProject(string projectGroupsFlags)
512 {
513 if(m_ProjectGroups != null && m_ProjectGroups.Length > 0)
514 {
515 if(projectGroupsFlags != null && projectGroupsFlags.Length == 0)
516 {
517 foreach(string group in projectGroupsFlags.Split('|'))
518 {
519 if(Array.IndexOf(m_ProjectGroups, group) != -1) //if included in the filter list
520 {
521 return true;
522 }
523 }
524 }
525 return false;//not included in the list or no groups specified for the project
526 }
527 return true;//no filter specified in the command line args
528 }
529
530 /// <summary>
531 /// Gets the type of the node.
532 /// </summary>
533 /// <param name="node">The node.</param>
534 /// <returns></returns>
535 public Type GetNodeType(XmlNode node)
536 {
537 if( node == null )
538 {
539 throw new ArgumentNullException("node");
540 }
541 if(!m_Nodes.ContainsKey(node.Name))
542 {
543 return null;
544 }
545
546 NodeEntry ne = m_Nodes[node.Name];
547 return ne.Type;
548 }
549
550 /// <summary>
551 ///
552 /// </summary>
553 /// <param name="node"></param>
554 /// <param name="parent"></param>
555 /// <returns></returns>
556 public IDataNode ParseNode(XmlNode node, IDataNode parent)
557 {
558 return ParseNode(node, parent, null);
559 }
560
561 //Create an instance of the data node type that is mapped to the name of the xml DOM node
562 /// <summary>
563 /// Parses the node.
564 /// </summary>
565 /// <param name="node">The node.</param>
566 /// <param name="parent">The parent.</param>
567 /// <param name="preNode">The pre node.</param>
568 /// <returns></returns>
569 public IDataNode ParseNode(XmlNode node, IDataNode parent, IDataNode preNode)
570 {
571 IDataNode dataNode;
572
573 try
574 {
575 if( node == null )
576 {
577 throw new ArgumentNullException("node");
578 }
579 if(preNode == null)
580 {
581 if(!m_Nodes.ContainsKey(node.Name))
582 {
583 Console.WriteLine("WARNING: Unknown XML node: " + node.Name);
584 return null;
585 }
586
587 NodeEntry ne = m_Nodes[node.Name];
588 Type type = ne.Type;
589 //DataNodeAttribute dna = ne.Attribute;
590
591 dataNode = (IDataNode)type.Assembly.CreateInstance(type.FullName);
592 if(dataNode == null)
593 {
594 throw new System.Reflection.TargetException("Could not create new parser instance: " + type.FullName);
595 }
596 }
597 else
598 dataNode = preNode;
599
600 dataNode.Parent = parent;
601 dataNode.Parse(node);
602 }
603 catch(WarningException wex)
604 {
605 m_Log.Write(LogType.Warning, wex.Message);
606 return null;
607 }
608 catch(FatalException fex)
609 {
610 m_Log.WriteException(LogType.Error, fex);
611 throw;
612 }
613 catch(Exception ex)
614 {
615 m_Log.WriteException(LogType.Error, ex);
616 throw;
617 }
618
619 return dataNode;
620 }
621
622 /// <summary>
623 /// Initializes the specified target.
624 /// </summary>
625 /// <param name="target">The target.</param>
626 /// <param name="args">The args.</param>
627 public void Initialize(LogTargets target, string[] args)
628 {
629 CacheTargets(GetType().Assembly);
630 CacheNodeTypes(GetType().Assembly);
631 CacheVersion();
632
633 m_CommandLine = new CommandLineCollection(args);
634
635 string logFile = null;
636 if(m_CommandLine.WasPassed("log"))
637 {
638 logFile = m_CommandLine["log"];
639
640 if(logFile != null && logFile.Length == 0)
641 {
642 logFile = "Prebuild.log";
643 }
644 }
645 else
646 {
647 target = target & ~LogTargets.File; //dont output to a file
648 }
649
650 m_Log = new Log(target, logFile);
651 LogBanner();
652
653 m_CurrentWorkingDirectory = new CurrentDirectory();
654
655 m_Target = m_CommandLine["target"];
656 m_Clean = m_CommandLine["clean"];
657 string removeDirs = m_CommandLine["removedir"];
658 if(removeDirs != null && removeDirs.Length == 0)
659 {
660 m_RemoveDirectories = removeDirs.Split('|');
661 }
662
663 string flags = m_CommandLine["allowedgroups"];//allows filtering by specifying a pipe-delimited list of groups to include
664 if(flags != null && flags.Length == 0)
665 {
666 m_ProjectGroups = flags.Split('|');
667 }
668 m_PauseAfterFinish = m_CommandLine.WasPassed("pause");
669
670 LoadSchema();
671 }
672
673 /// <summary>
674 /// Processes this instance.
675 /// </summary>
676 public void Process()
677 {
678 bool perfomedOtherTask = false;
679 if(m_RemoveDirectories != null && m_RemoveDirectories.Length > 0)
680 {
681 try
682 {
683 RemoveDirectories(".",m_RemoveDirectories);
684 }
685 catch(IOException e)
686 {
687 m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
688 m_Log.WriteException(LogType.Error,e);
689 }
690 catch(UnauthorizedAccessException e)
691 {
692 m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
693 m_Log.WriteException(LogType.Error,e);
694 }
695 perfomedOtherTask = true;
696 }
697
698 if(m_Target != null && m_Clean != null)
699 {
700 m_Log.Write(LogType.Error, "The options /target and /clean cannot be passed together");
701 return;
702 }
703
704 if(m_Target == null && m_Clean == null)
705 {
706 if(perfomedOtherTask) //finished
707 {
708 return;
709 }
710 m_Log.Write(LogType.Error, "Must pass either /target or /clean to process a Prebuild file");
711 return;
712 }
713
714 string file = "./prebuild.xml";
715 if(m_CommandLine.WasPassed("file"))
716 {
717 file = m_CommandLine["file"];
718 }
719
720 ProcessFile(file);
721
722 string target = (m_Target != null ? m_Target.ToLower() : m_Clean.ToLower());
723 bool clean = (m_Target == null);
724 if(clean && target != null && target.Length == 0)
725 {
726 target = "all";
727 }
728 if(clean && target == "all")//default to all if no target was specified for clean
729 {
730 //check if they passed yes
731 if (!m_CommandLine.WasPassed("yes"))
732 {
733 Console.WriteLine("WARNING: This operation will clean ALL project files for all targets, are you sure? (y/n):");
734 string ret = Console.ReadLine();
735 if(ret == null)
736 {
737 return;
738 }
739 ret = ret.Trim().ToLower();
740 if((ret.ToLower() != "y" && ret.ToLower() != "yes"))
741 {
742 return;
743 }
744 }
745 //clean all targets (just cleaning vs2002 target didn't clean nant)
746 foreach(ITarget targ in m_Targets.Values)
747 {
748 targ.Clean(this);
749 }
750 }
751 else
752 {
753 if (!m_Targets.ContainsKey(target)) {
754 m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target);
755 return;
756 }
757 ITarget targ = m_Targets[target];
758
759 if(clean)
760 {
761 targ.Clean(this);
762 }
763 else
764 {
765 targ.Write(this);
766 }
767 }
768
769 m_Log.Flush();
770 }
771
772 #endregion
773
774 #region IDisposable Members
775
776 /// <summary>
777 ///
778 /// </summary>
779 public void Dispose()
780 {
781 Dispose(true);
782 GC.SuppressFinalize(this);
783 }
784
785 /// <summary>
786 /// Dispose objects
787 /// </summary>
788 /// <param name="disposing">
789 /// If true, it will dispose close the handle
790 /// </param>
791 /// <remarks>
792 /// Will dispose managed and unmanaged resources.
793 /// </remarks>
794 protected virtual void Dispose(bool disposing)
795 {
796 if (!disposed)
797 {
798 if (disposing)
799 {
800 GC.SuppressFinalize(this);
801 if (m_Log != null)
802 {
803 m_Log.Close();
804 m_Log = null;
805 }
806 }
807 }
808 disposed = true;
809 }
810
811 /// <summary>
812 ///
813 /// </summary>
814 ~Kernel()
815 {
816 Dispose(false);
817 }
818
819 /// <summary>
820 /// Closes and destroys this object
821 /// </summary>
822 /// <remarks>
823 /// Same as Dispose(true)
824 /// </remarks>
825 public void Close()
826 {
827 Dispose();
828 }
829
830 #endregion
831 }
832}
diff --git a/Prebuild/src/Core/Nodes/AuthorNode.cs b/Prebuild/src/Core/Nodes/AuthorNode.cs
new file mode 100644
index 0000000..e4b024f
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/AuthorNode.cs
@@ -0,0 +1,87 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Author")]
39 public class AuthorNode : DataNode
40 {
41 #region Fields
42
43 private string m_Signature;
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the signature.
51 /// </summary>
52 /// <value>The signature.</value>
53 public string Signature
54 {
55 get
56 {
57 return m_Signature;
58 }
59 }
60
61 #endregion
62
63 #region Public Methods
64
65 /// <summary>
66 /// Parses the specified node.
67 /// </summary>
68 /// <param name="node">The node.</param>
69 public override void Parse(XmlNode node)
70 {
71 if( node == null )
72 {
73 throw new ArgumentNullException("node");
74 }
75
76 m_Signature = Helper.InterpolateForEnvironmentVariables(node.InnerText);
77 if(m_Signature == null)
78 {
79 m_Signature = "";
80 }
81
82 m_Signature = m_Signature.Trim();
83 }
84
85 #endregion
86 }
87}
diff --git a/Prebuild/src/Core/Nodes/CleanFilesNode.cs b/Prebuild/src/Core/Nodes/CleanFilesNode.cs
new file mode 100644
index 0000000..bd564d5
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/CleanFilesNode.cs
@@ -0,0 +1,80 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Utilities;
33
34namespace Prebuild.Core.Nodes
35{
36 [DataNode("CleanFiles")]
37 public class CleanFilesNode : DataNode
38 {
39 #region Fields
40
41 private string m_Pattern;
42
43 #endregion
44
45 #region Properties
46
47 /// <summary>
48 /// Gets the signature.
49 /// </summary>
50 /// <value>The signature.</value>
51 public string Pattern
52 {
53 get
54 {
55 return m_Pattern;
56 }
57 }
58
59 #endregion
60
61 #region Public Methods
62
63 /// <summary>
64 /// Parses the specified node.
65 /// </summary>
66 /// <param name="node">The node.</param>
67 public override void Parse(XmlNode node)
68 {
69 if (node == null)
70 {
71 throw new ArgumentNullException("node");
72 }
73
74 m_Pattern = Helper.AttributeValue(node, "pattern", String.Empty); ;
75 m_Pattern = m_Pattern.Trim();
76 }
77
78 #endregion
79 }
80} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/CleanupNode.cs b/Prebuild/src/Core/Nodes/CleanupNode.cs
new file mode 100644
index 0000000..f334ea3
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/CleanupNode.cs
@@ -0,0 +1,85 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32
33namespace Prebuild.Core.Nodes
34{
35 [DataNode("Cleanup")]
36 public class CleanupNode : DataNode
37 {
38 #region Fields
39
40 private List<CleanFilesNode> m_CleanFiles = new List<CleanFilesNode>();
41
42 #endregion
43
44 #region Properties
45
46 /// <summary>
47 /// Gets the signature.
48 /// </summary>
49 /// <value>The signature.</value>
50 public List<CleanFilesNode> CleanFiles
51 {
52 get
53 {
54 return m_CleanFiles;
55 }
56 }
57
58 #endregion
59
60 #region Public Methods
61
62 /// <summary>
63 /// Parses the specified node.
64 /// </summary>
65 /// <param name="node">The node.</param>
66 public override void Parse(XmlNode node)
67 {
68 if( node == null )
69 {
70 throw new ArgumentNullException("node");
71 }
72
73 foreach (XmlNode child in node.ChildNodes)
74 {
75 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
76 if (dataNode is CleanFilesNode)
77 {
78 m_CleanFiles.Add((CleanFilesNode)dataNode);
79 }
80 }
81 }
82
83 #endregion
84 }
85} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/ConfigurationNode.cs b/Prebuild/src/Core/Nodes/ConfigurationNode.cs
new file mode 100644
index 0000000..a101799
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ConfigurationNode.cs
@@ -0,0 +1,225 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Configuration")]
39 public class ConfigurationNode : DataNode, ICloneable, IComparable
40 {
41 #region Fields
42
43 private string m_Name = "unknown";
44 private string m_Platform = "AnyCPU";
45 private OptionsNode m_Options;
46
47 #endregion
48
49 #region Constructors
50
51 /// <summary>
52 /// Initializes a new instance of the <see cref="ConfigurationNode"/> class.
53 /// </summary>
54 public ConfigurationNode()
55 {
56 m_Options = new OptionsNode();
57 }
58
59 #endregion
60
61 #region Properties
62
63 /// <summary>
64 /// Gets or sets the parent.
65 /// </summary>
66 /// <value>The parent.</value>
67 public override IDataNode Parent
68 {
69 get
70 {
71 return base.Parent;
72 }
73 set
74 {
75 base.Parent = value;
76 if(base.Parent is SolutionNode)
77 {
78 SolutionNode node = (SolutionNode)base.Parent;
79 if(node != null && node.Options != null)
80 {
81 node.Options.CopyTo(m_Options);
82 }
83 }
84 }
85 }
86
87 /// <summary>
88 /// Identifies the platform for this specific configuration.
89 /// </summary>
90 public string Platform
91 {
92 get
93 {
94 return m_Platform;
95 }
96 set
97 {
98 switch ((value + "").ToLower())
99 {
100 case "x86":
101 case "x64":
102 m_Platform = value;
103 break;
104 case "itanium":
105 m_Platform = "Itanium";
106 break;
107 default:
108 m_Platform = "AnyCPU";
109 break;
110 }
111 }
112 }
113
114 /// <summary>
115 /// Gets the name.
116 /// </summary>
117 /// <value>The name.</value>
118 public string Name
119 {
120 get
121 {
122 return m_Name;
123 }
124 }
125
126 /// <summary>
127 /// Gets the name and platform for the configuration.
128 /// </summary>
129 /// <value>The name and platform.</value>
130 public string NameAndPlatform
131 {
132 get
133 {
134 string platform = m_Platform;
135 if (platform == "AnyCPU")
136 platform = "Any CPU";
137
138 return String.Format("{0}|{1}", m_Name, platform);
139 }
140 }
141
142 /// <summary>
143 /// Gets or sets the options.
144 /// </summary>
145 /// <value>The options.</value>
146 public OptionsNode Options
147 {
148 get
149 {
150 return m_Options;
151 }
152 set
153 {
154 m_Options = value;
155 }
156 }
157
158 #endregion
159
160 #region Public Methods
161
162 /// <summary>
163 /// Parses the specified node.
164 /// </summary>
165 /// <param name="node">The node.</param>
166 public override void Parse(XmlNode node)
167 {
168 m_Name = Helper.AttributeValue(node, "name", m_Name);
169 Platform = Helper.AttributeValue(node, "platform", m_Platform);
170
171 if (node == null)
172 {
173 throw new ArgumentNullException("node");
174 }
175 foreach(XmlNode child in node.ChildNodes)
176 {
177 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
178 if(dataNode is OptionsNode)
179 {
180 ((OptionsNode)dataNode).CopyTo(m_Options);
181 }
182 }
183 }
184
185 /// <summary>
186 /// Copies to.
187 /// </summary>
188 /// <param name="conf">The conf.</param>
189 public void CopyTo(ConfigurationNode conf)
190 {
191 m_Options.CopyTo(conf.m_Options);
192 }
193
194 #endregion
195
196 #region ICloneable Members
197
198 /// <summary>
199 /// Creates a new object that is a copy of the current instance.
200 /// </summary>
201 /// <returns>
202 /// A new object that is a copy of this instance.
203 /// </returns>
204 public object Clone()
205 {
206 ConfigurationNode ret = new ConfigurationNode();
207 ret.m_Name = m_Name;
208 ret.m_Platform = m_Platform;
209 m_Options.CopyTo(ret.m_Options);
210 return ret;
211 }
212
213 #endregion
214
215 #region IComparable Members
216
217 public int CompareTo(object obj)
218 {
219 ConfigurationNode that = (ConfigurationNode) obj;
220 return this.m_Name.CompareTo(that.m_Name);
221 }
222
223 #endregion
224 }
225}
diff --git a/Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs b/Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs
new file mode 100644
index 0000000..eba6550
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs
@@ -0,0 +1,71 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System.Collections.Generic;
27
28namespace Prebuild.Core.Nodes
29{
30 /// <summary>
31 /// Implements a specialized list of configuration nodes which allows for lookup via
32 /// configuration name and platform.
33 /// </summary>
34 public class ConfigurationNodeCollection : List<ConfigurationNode>
35 {
36 #region Properties
37
38 public ConfigurationNode this[string nameAndPlatform]
39 {
40 get
41 {
42 foreach (ConfigurationNode configurationNode in this)
43 {
44 if (configurationNode.NameAndPlatform == nameAndPlatform)
45 {
46 return configurationNode;
47 }
48 }
49
50 return null;
51 }
52
53 set
54 {
55 // See if the node
56 ConfigurationNode configurationNode = this[nameAndPlatform];
57
58 if (configurationNode != null)
59 {
60 this[IndexOf(configurationNode)] = value;
61 }
62 else
63 {
64 Add(value);
65 }
66 }
67 }
68
69 #endregion
70 }
71}
diff --git a/Prebuild/src/Core/Nodes/DataNode.cs b/Prebuild/src/Core/Nodes/DataNode.cs
new file mode 100644
index 0000000..4f20588
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/DataNode.cs
@@ -0,0 +1,117 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using System.IO;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 public abstract class DataNode : IDataNode
39 {
40 #region Fields
41
42 private IDataNode parent;
43 string[] m_WebTypes = new string[] { "aspx", "ascx", "master", "ashx", "asmx" };
44
45 #endregion
46
47 #region IDataNode Members
48
49 /// <summary>
50 /// Gets or sets the parent.
51 /// </summary>
52 /// <value>The parent.</value>
53 public virtual IDataNode Parent
54 {
55 get
56 {
57 return parent;
58 }
59 set
60 {
61 parent = value;
62 }
63 }
64 public string[] WebTypes
65 {
66 get { return m_WebTypes; }
67 }
68 /// <summary>
69 /// Parses the specified node.
70 /// </summary>
71 /// <param name="node">The node.</param>
72 public virtual void Parse(XmlNode node)
73 {
74 }
75 public BuildAction GetBuildActionByFileName(string fileName)
76 {
77 string extension = Path.GetExtension(fileName).ToLower();
78 foreach (string type in WebTypes)
79 {
80 if (extension == type)
81 return BuildAction.Content;
82 }
83 return BuildAction.Compile;
84 }
85 /// <summary>
86 /// Parses the file type to figure out what type it is
87 /// </summary>
88 /// <returns></returns>
89 public SubType GetSubTypeByFileName(string fileName)
90 {
91 string extension = System.IO.Path.GetExtension(fileName).ToLower();
92 string designer = String.Format(".designer{0}", extension);
93 string path = fileName.ToLower();
94 if (extension == ".resx")
95 {
96 return SubType.Designer;
97 }
98 else if (path.EndsWith(".settings"))
99 {
100 return SubType.Settings;
101 }
102 else
103 {
104
105 foreach (string type in WebTypes)
106 {
107 if (path.EndsWith(type))
108 {
109 return SubType.CodeBehind;
110 }
111 }
112 }
113 return SubType.Code;
114 }
115 #endregion
116 }
117}
diff --git a/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs b/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs
new file mode 100644
index 0000000..278ecd8
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs
@@ -0,0 +1,93 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Xml;
5
6using Prebuild.Core.Attributes;
7using Prebuild.Core.Interfaces;
8using Prebuild.Core.Utilities;
9
10namespace Prebuild.Core.Nodes
11{
12 [DataNode("DatabaseProject")]
13 public class DatabaseProjectNode : DataNode
14 {
15 string name;
16 string path;
17 string fullpath;
18 Guid guid = Guid.NewGuid();
19 readonly List<AuthorNode> authors = new List<AuthorNode>();
20 readonly List<DatabaseReferenceNode> references = new List<DatabaseReferenceNode>();
21
22 public Guid Guid
23 {
24 get { return guid; }
25 }
26
27 public string Name
28 {
29 get { return name; }
30 }
31
32 public string Path
33 {
34 get { return path; }
35 }
36
37 public string FullPath
38 {
39 get { return fullpath; }
40 }
41
42 public IEnumerable<DatabaseReferenceNode> References
43 {
44 get { return references; }
45 }
46
47 public override void Parse(XmlNode node)
48 {
49 name = Helper.AttributeValue(node, "name", name);
50 path = Helper.AttributeValue(node, "path", name);
51
52 try
53 {
54 fullpath = Helper.ResolvePath(path);
55 }
56 catch
57 {
58 throw new WarningException("Could not resolve Solution path: {0}", path);
59 }
60
61 Kernel.Instance.CurrentWorkingDirectory.Push();
62
63 try
64 {
65 Helper.SetCurrentDir(fullpath);
66
67 if (node == null)
68 {
69 throw new ArgumentNullException("node");
70 }
71
72 foreach (XmlNode child in node.ChildNodes)
73 {
74 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
75
76 if (dataNode == null)
77 continue;
78
79 if (dataNode is AuthorNode)
80 authors.Add((AuthorNode)dataNode);
81 else if (dataNode is DatabaseReferenceNode)
82 references.Add((DatabaseReferenceNode)dataNode);
83 }
84 }
85 finally
86 {
87 Kernel.Instance.CurrentWorkingDirectory.Pop();
88 }
89
90 base.Parse(node);
91 }
92 }
93}
diff --git a/Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs b/Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs
new file mode 100644
index 0000000..974b74e
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs
@@ -0,0 +1,63 @@
1using System;
2using Prebuild.Core.Attributes;
3using Prebuild.Core.Utilities;
4
5namespace Prebuild.Core.Nodes
6{
7 [DataNode("DatabaseReference")]
8 public class DatabaseReferenceNode : DataNode
9 {
10 string name;
11 Guid providerId;
12 string connectionString;
13
14 public string Name
15 {
16 get { return name; }
17 }
18
19 public Guid ProviderId
20 {
21 get { return providerId; }
22 }
23
24 public string ConnectionString
25 {
26 get { return connectionString; }
27 }
28
29 public override void Parse(System.Xml.XmlNode node)
30 {
31 name = Helper.AttributeValue(node, "name", name);
32
33 string providerName = Helper.AttributeValue(node, "providerName", string.Empty);
34 if (providerName != null)
35 {
36 switch (providerName)
37 {
38 // digitaljeebus: pulled from HKLM\SOFTWARE\Microsoft\VisualStudio\9.0\DataProviders\*
39 // Not sure if these will help other operating systems, or if there's a better way.
40 case "Microsoft.SqlServerCe.Client.3.5":
41 providerId = new Guid("7C602B5B-ACCB-4acd-9DC0-CA66388C1533"); break;
42 case "System.Data.OleDb":
43 providerId = new Guid("7F041D59-D76A-44ed-9AA2-FBF6B0548B80"); break;
44 case "System.Data.OracleClient":
45 providerId = new Guid("8F5C5018-AE09-42cf-B2CC-2CCCC7CFC2BB"); break;
46 case "System.Data.SqlClient":
47 providerId = new Guid("91510608-8809-4020-8897-FBA057E22D54"); break;
48 case "System.Data.Odbc":
49 providerId = new Guid("C3D4F4CE-2C48-4381-B4D6-34FA50C51C86"); break;
50
51 default:
52 throw new ArgumentOutOfRangeException("providerName", providerName, "Could not provider name to an id.");
53 }
54 }
55 else
56 providerId = new Guid(Helper.AttributeValue(node, "providerId", Guid.Empty.ToString("B")));
57
58 connectionString = Helper.AttributeValue(node, "connectionString", connectionString);
59
60 base.Parse(node);
61 }
62 }
63}
diff --git a/Prebuild/src/Core/Nodes/DescriptionNode.cs b/Prebuild/src/Core/Nodes/DescriptionNode.cs
new file mode 100644
index 0000000..713b47c
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/DescriptionNode.cs
@@ -0,0 +1,87 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 /// The object representing the /Prebuild/Solution/Project/Description element
37 /// </summary>
38 [DataNode("Description")]
39 public class DescriptionNode : DataNode
40 {
41 #region Fields
42
43 private string m_Value;
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the description Value.
51 /// </summary>
52 /// <value>The description Value.</value>
53 public string Value
54 {
55 get
56 {
57 return m_Value;
58 }
59 }
60
61 #endregion
62
63 #region Public Methods
64
65 /// <summary>
66 /// Parses the specified node.
67 /// </summary>
68 /// <param name="node">The node.</param>
69 public override void Parse(XmlNode node)
70 {
71 if( node == null )
72 {
73 throw new ArgumentNullException("node");
74 }
75
76 m_Value = Helper.InterpolateForEnvironmentVariables(node.InnerText);
77 if(m_Value == null)
78 {
79 m_Value = "";
80 }
81
82 m_Value = m_Value.Trim();
83 }
84
85 #endregion
86 }
87}
diff --git a/Prebuild/src/Core/Nodes/ExcludeNode.cs b/Prebuild/src/Core/Nodes/ExcludeNode.cs
new file mode 100644
index 0000000..addbdb4
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ExcludeNode.cs
@@ -0,0 +1,89 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Exclude")]
39 public class ExcludeNode : DataNode
40 {
41 #region Fields
42
43 private string m_Pattern = "";
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the name.
51 /// </summary>
52 /// <value>The name.</value>
53 public string Name
54 {
55 get
56 {
57 return m_Pattern;
58 }
59 }
60
61 /// <summary>
62 /// Gets the pattern.
63 /// </summary>
64 /// <value>The pattern.</value>
65 public string Pattern
66 {
67 get
68 {
69 return m_Pattern;
70 }
71 }
72
73 #endregion
74
75 #region Public Methods
76
77 /// <summary>
78 /// Parses the specified node.
79 /// </summary>
80 /// <param name="node">The node.</param>
81 public override void Parse(XmlNode node)
82 {
83 m_Pattern = Helper.AttributeValue( node, "name", m_Pattern );
84 m_Pattern = Helper.AttributeValue(node, "pattern", m_Pattern );
85 }
86
87 #endregion
88 }
89}
diff --git a/Prebuild/src/Core/Nodes/FileNode.cs b/Prebuild/src/Core/Nodes/FileNode.cs
new file mode 100644
index 0000000..c66f123
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/FileNode.cs
@@ -0,0 +1,292 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Utilities;
33using Prebuild.Core.Targets;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 ///
39 /// </summary>
40 public enum BuildAction
41 {
42 /// <summary>
43 ///
44 /// </summary>
45 None,
46 /// <summary>
47 ///
48 /// </summary>
49 Compile,
50 /// <summary>
51 ///
52 /// </summary>
53 Content,
54 /// <summary>
55 ///
56 /// </summary>
57 EmbeddedResource,
58 /// <summary>
59 ///
60 /// </summary>
61 ApplicationDefinition,
62 /// <summary>
63 ///
64 /// </summary>
65 Page,
66 /// <summary>
67 ///
68 /// </summary>
69 Copy
70 }
71
72 /// <summary>
73 ///
74 /// </summary>
75 public enum SubType
76 {
77 /// <summary>
78 ///
79 /// </summary>
80 Code,
81 /// <summary>
82 ///
83 /// </summary>
84 Component,
85 /// <summary>
86 ///
87 /// </summary>
88 Designer,
89 /// <summary>
90 ///
91 /// </summary>
92 Form,
93 /// <summary>
94 ///
95 /// </summary>
96 Settings,
97 /// <summary>
98 ///
99 /// </summary>
100 UserControl,
101 /// <summary>
102 ///
103 /// </summary>
104 CodeBehind,
105 }
106
107 public enum CopyToOutput
108 {
109 Never,
110 Always,
111 PreserveNewest
112 }
113
114 /// <summary>
115 ///
116 /// </summary>
117 [DataNode("File")]
118 public class FileNode : DataNode
119 {
120 #region Fields
121
122 private string m_Path;
123 private string m_ResourceName = "";
124 private BuildAction? m_BuildAction;
125 private bool m_Valid;
126 private SubType? m_SubType;
127 private CopyToOutput m_CopyToOutput = CopyToOutput.Never;
128 private bool m_Link = false;
129 private string m_LinkPath = string.Empty;
130 private bool m_PreservePath = false;
131
132
133 #endregion
134
135 #region Properties
136
137 /// <summary>
138 ///
139 /// </summary>
140 public string Path
141 {
142 get
143 {
144 return m_Path;
145 }
146 }
147
148 /// <summary>
149 ///
150 /// </summary>
151 public string ResourceName
152 {
153 get
154 {
155 return m_ResourceName;
156 }
157 }
158
159 /// <summary>
160 ///
161 /// </summary>
162 public BuildAction BuildAction
163 {
164 get
165 {
166 if (m_BuildAction != null)
167 return m_BuildAction.Value;
168 else
169 return GetBuildActionByFileName(this.Path);
170
171 }
172 }
173
174 public CopyToOutput CopyToOutput
175 {
176 get
177 {
178 return this.m_CopyToOutput;
179 }
180 }
181
182 public bool IsLink
183 {
184 get
185 {
186 return this.m_Link;
187 }
188 }
189
190 public string LinkPath
191 {
192 get
193 {
194 return this.m_LinkPath;
195 }
196 }
197 /// <summary>
198 ///
199 /// </summary>
200 public SubType SubType
201 {
202 get
203 {
204 if (m_SubType != null)
205 return m_SubType.Value;
206 else
207 return GetSubTypeByFileName(this.Path);
208 }
209 }
210
211 /// <summary>
212 ///
213 /// </summary>
214 public bool IsValid
215 {
216 get
217 {
218 return m_Valid;
219 }
220 }
221
222 /// <summary>
223 ///
224 /// </summary>
225 /// <param name="file"></param>
226 /// <returns></returns>
227 public bool PreservePath
228 {
229 get
230 {
231 return m_PreservePath;
232 }
233 }
234
235 #endregion
236
237 #region Public Methods
238
239 /// <summary>
240 ///
241 /// </summary>
242 /// <param name="node"></param>
243 public override void Parse(XmlNode node)
244 {
245 string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
246 if (buildAction != string.Empty)
247 m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
248 string subType = Helper.AttributeValue(node, "subType", string.Empty);
249 if (subType != String.Empty)
250 m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
251
252 Console.WriteLine("[FileNode]:BuildAction is {0}", buildAction);
253
254
255 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString());
256 this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
257 if ( this.m_Link == true )
258 {
259 this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
260 }
261 this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString()));
262 this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) );
263
264 if( node == null )
265 {
266 throw new ArgumentNullException("node");
267 }
268
269 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
270 if(m_Path == null)
271 {
272 m_Path = "";
273 }
274
275 m_Path = m_Path.Trim();
276 m_Valid = true;
277 if(!File.Exists(m_Path))
278 {
279 m_Valid = false;
280 Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path);
281 }
282
283 if (System.IO.Path.GetExtension(m_Path) == ".settings")
284 {
285 m_SubType = SubType.Settings;
286 m_BuildAction = BuildAction.None;
287 }
288 }
289
290 #endregion
291 }
292}
diff --git a/Prebuild/src/Core/Nodes/FilesNode.cs b/Prebuild/src/Core/Nodes/FilesNode.cs
new file mode 100644
index 0000000..58b54fb
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/FilesNode.cs
@@ -0,0 +1,238 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Collections.Specialized;
29using System.Xml;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using System.IO;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [DataNode("Files")]
41 public class FilesNode : DataNode
42 {
43 #region Fields
44
45 private readonly List<string> m_Files = new List<string>();
46 private readonly Dictionary<string,BuildAction> m_BuildActions = new Dictionary<string, BuildAction>();
47 private readonly Dictionary<string, SubType> m_SubTypes = new Dictionary<string, SubType>();
48 private readonly Dictionary<string, string> m_ResourceNames = new Dictionary<string, string>();
49 private readonly Dictionary<string, CopyToOutput> m_CopyToOutputs = new Dictionary<string, CopyToOutput>();
50 private readonly Dictionary<string, bool> m_Links = new Dictionary<string, bool>();
51 private readonly Dictionary<string, string> m_LinkPaths = new Dictionary<string, string>();
52 private readonly Dictionary<string, bool> m_PreservePaths = new Dictionary<string, bool>();
53 private readonly Dictionary<string, string> m_DestinationPath = new Dictionary<string, string>();
54 private readonly NameValueCollection m_CopyFiles = new NameValueCollection();
55
56 #endregion
57
58 #region Properties
59
60 public int Count
61 {
62 get
63 {
64 return m_Files.Count;
65 }
66 }
67
68 public string[] Destinations
69 {
70 get { return m_CopyFiles.AllKeys; }
71 }
72
73 public int CopyFiles
74 {
75 get { return m_CopyFiles.Count; }
76 }
77
78 #endregion
79
80 #region Public Methods
81
82 public BuildAction GetBuildAction(string file)
83 {
84 if(!m_BuildActions.ContainsKey(file))
85 {
86 return BuildAction.Compile;
87 }
88
89 return m_BuildActions[file];
90 }
91
92 public string GetDestinationPath(string file)
93 {
94 if( !m_DestinationPath.ContainsKey(file))
95 {
96 return null;
97 }
98 return m_DestinationPath[file];
99 }
100
101 public string[] SourceFiles(string dest)
102 {
103 return m_CopyFiles.GetValues(dest);
104 }
105
106 public CopyToOutput GetCopyToOutput(string file)
107 {
108 if (!m_CopyToOutputs.ContainsKey(file))
109 {
110 return CopyToOutput.Never;
111 }
112 return m_CopyToOutputs[file];
113 }
114
115 public bool GetIsLink(string file)
116 {
117 if (!m_Links.ContainsKey(file))
118 {
119 return false;
120 }
121 return m_Links[file];
122 }
123
124 public bool Contains(string file)
125 {
126 return m_Files.Contains(file);
127 }
128
129 public string GetLinkPath( string file )
130 {
131 if ( !m_LinkPaths.ContainsKey( file ) )
132 {
133 return string.Empty;
134 }
135 return m_LinkPaths[ file ];
136 }
137
138 public SubType GetSubType(string file)
139 {
140 if(!m_SubTypes.ContainsKey(file))
141 {
142 return SubType.Code;
143 }
144
145 return m_SubTypes[file];
146 }
147
148 public string GetResourceName(string file)
149 {
150 if(!m_ResourceNames.ContainsKey(file))
151 {
152 return string.Empty;
153 }
154
155 return m_ResourceNames[file];
156 }
157
158 public bool GetPreservePath( string file )
159 {
160 if ( !m_PreservePaths.ContainsKey( file ) )
161 {
162 return false;
163 }
164
165 return m_PreservePaths[ file ];
166 }
167
168 public override void Parse(XmlNode node)
169 {
170 if( node == null )
171 {
172 throw new ArgumentNullException("node");
173 }
174 foreach(XmlNode child in node.ChildNodes)
175 {
176 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
177 if(dataNode is FileNode)
178 {
179 FileNode fileNode = (FileNode)dataNode;
180 if(fileNode.IsValid)
181 {
182 if (!m_Files.Contains(fileNode.Path))
183 {
184 m_Files.Add(fileNode.Path);
185 m_BuildActions[fileNode.Path] = fileNode.BuildAction;
186 m_SubTypes[fileNode.Path] = fileNode.SubType;
187 m_ResourceNames[fileNode.Path] = fileNode.ResourceName;
188 m_PreservePaths[ fileNode.Path ] = fileNode.PreservePath;
189 m_Links[ fileNode.Path ] = fileNode.IsLink;
190 m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath;
191 m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput;
192
193 }
194 }
195 }
196 else if(dataNode is MatchNode)
197 {
198 foreach(string file in ((MatchNode)dataNode).Files)
199 {
200 MatchNode matchNode = (MatchNode)dataNode;
201 if (!m_Files.Contains(file))
202 {
203 m_Files.Add(file);
204 if (matchNode.BuildAction == null)
205 m_BuildActions[file] = GetBuildActionByFileName(file);
206 else
207 m_BuildActions[file] = matchNode.BuildAction.Value;
208
209 if (matchNode.BuildAction == BuildAction.Copy)
210 {
211 m_CopyFiles.Add(matchNode.DestinationPath, file);
212 m_DestinationPath[file] = matchNode.DestinationPath;
213 }
214
215 m_SubTypes[file] = matchNode.SubType == null ? GetSubTypeByFileName(file) : matchNode.SubType.Value;
216 m_ResourceNames[ file ] = matchNode.ResourceName;
217 m_PreservePaths[ file ] = matchNode.PreservePath;
218 m_Links[ file ] = matchNode.IsLink;
219 m_LinkPaths[ file ] = matchNode.LinkPath;
220 m_CopyToOutputs[ file ] = matchNode.CopyToOutput;
221
222 }
223 }
224 }
225 }
226 }
227
228 // TODO: Check in to why StringCollection's enumerator doesn't implement
229 // IEnumerator?
230 public IEnumerator<string> GetEnumerator()
231 {
232 return m_Files.GetEnumerator();
233 }
234
235 #endregion
236
237 }
238}
diff --git a/Prebuild/src/Core/Nodes/MatchNode.cs b/Prebuild/src/Core/Nodes/MatchNode.cs
new file mode 100644
index 0000000..fe02277
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/MatchNode.cs
@@ -0,0 +1,378 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29using System.Text.RegularExpressions;
30using System.Xml;
31
32using Prebuild.Core.Attributes;
33using Prebuild.Core.Interfaces;
34using Prebuild.Core.Utilities;
35
36namespace Prebuild.Core.Nodes
37{
38 /// <summary>
39 ///
40 /// </summary>
41 [DataNode("Match")]
42 public class MatchNode : DataNode
43 {
44 #region Fields
45
46 private readonly List<string> m_Files = new List<string>();
47 private Regex m_Regex;
48 private BuildAction? m_BuildAction;
49 private SubType? m_SubType;
50 string m_ResourceName = "";
51 private CopyToOutput m_CopyToOutput;
52 private bool m_Link;
53 private string m_LinkPath;
54 private bool m_PreservePath;
55 private string m_Destination = "";
56 private readonly List<ExcludeNode> m_Exclusions = new List<ExcludeNode>();
57
58 #endregion
59
60 #region Properties
61
62 /// <summary>
63 ///
64 /// </summary>
65 public IEnumerable<string> Files
66 {
67 get
68 {
69 return m_Files;
70 }
71 }
72
73 /// <summary>
74 ///
75 /// </summary>
76 public BuildAction? BuildAction
77 {
78 get
79 {
80 return m_BuildAction;
81 }
82 }
83
84 public string DestinationPath
85 {
86 get
87 {
88 return m_Destination;
89 }
90 }
91 /// <summary>
92 ///
93 /// </summary>
94 public SubType? SubType
95 {
96 get
97 {
98 return m_SubType;
99 }
100 }
101
102 public CopyToOutput CopyToOutput
103 {
104 get
105 {
106 return m_CopyToOutput;
107 }
108 }
109
110 public bool IsLink
111 {
112 get
113 {
114 return m_Link;
115 }
116 }
117
118 public string LinkPath
119 {
120 get
121 {
122 return m_LinkPath;
123 }
124 }
125 /// <summary>
126 ///
127 /// </summary>
128 public string ResourceName
129 {
130 get
131 {
132 return m_ResourceName;
133 }
134 }
135
136 public bool PreservePath
137 {
138 get
139 {
140 return m_PreservePath;
141 }
142 }
143
144 #endregion
145
146 #region Private Methods
147
148 /// <summary>
149 /// Recurses the directories.
150 /// </summary>
151 /// <param name="path">The path.</param>
152 /// <param name="pattern">The pattern.</param>
153 /// <param name="recurse">if set to <c>true</c> [recurse].</param>
154 /// <param name="useRegex">if set to <c>true</c> [use regex].</param>
155 private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, List<ExcludeNode> exclusions)
156 {
157 Match match;
158 try
159 {
160 string[] files;
161
162 Boolean excludeFile;
163 if(!useRegex)
164 {
165 try
166 {
167 files = Directory.GetFiles(path, pattern);
168 }
169 catch (IOException)
170 {
171 // swallow weird IOException error when running in a virtual box
172 // guest OS on a network share when the host OS is not Windows.
173 // This seems to happen on network shares
174 // when no files match, and may be related to this report:
175 // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=254546
176
177 files = null;
178 }
179
180 if(files != null)
181 {
182 foreach (string file in files)
183 {
184 excludeFile = false;
185 string fileTemp;
186 if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\")
187 {
188 fileTemp = file.Substring(2);
189 }
190 else
191 {
192 fileTemp = file;
193 }
194
195 // Check all excludions and set flag if there are any hits.
196 foreach ( ExcludeNode exclude in exclusions )
197 {
198 Regex exRegEx = new Regex( exclude.Pattern );
199 match = exRegEx.Match( file );
200 excludeFile |= match.Success;
201 }
202
203 if ( !excludeFile )
204 {
205 m_Files.Add( fileTemp );
206 }
207
208 }
209 }
210
211 // don't call return here, because we may need to recursively search directories below
212 // this one, even if no matches were found in this directory.
213 }
214 else
215 {
216 try
217 {
218 files = Directory.GetFiles(path);
219 }
220 catch (IOException)
221 {
222 // swallow weird IOException error when running in a virtual box
223 // guest OS on a network share.
224 files = null;
225 }
226
227 if (files != null)
228 {
229 foreach (string file in files)
230 {
231 excludeFile = false;
232
233 match = m_Regex.Match(file);
234 if (match.Success)
235 {
236 // Check all excludions and set flag if there are any hits.
237 foreach (ExcludeNode exclude in exclusions)
238 {
239 Regex exRegEx = new Regex(exclude.Pattern);
240 match = exRegEx.Match(file);
241 excludeFile |= !match.Success;
242 }
243
244 if (!excludeFile)
245 {
246 m_Files.Add(file);
247 }
248 }
249 }
250 }
251 }
252
253 if(recurse)
254 {
255 string[] dirs = Directory.GetDirectories(path);
256 if(dirs != null && dirs.Length > 0)
257 {
258 foreach (string str in dirs)
259 {
260 // hack to skip subversion folders. Not having this can cause
261 // a significant performance hit when running on a network drive.
262 if (str.EndsWith(".svn"))
263 continue;
264
265 RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex, exclusions);
266 }
267 }
268 }
269 }
270 catch(DirectoryNotFoundException)
271 {
272 return;
273 }
274 catch(ArgumentException)
275 {
276 return;
277 }
278 }
279
280 #endregion
281
282 #region Public Methods
283
284 /// <summary>
285 ///
286 /// </summary>
287 /// <param name="node"></param>
288 public override void Parse(XmlNode node)
289 {
290 if( node == null )
291 {
292 throw new ArgumentNullException("node");
293 }
294 string path = Helper.AttributeValue(node, "path", ".");
295 string pattern = Helper.AttributeValue(node, "pattern", "*");
296 string destination = Helper.AttributeValue(node, "destination", string.Empty);
297 bool recurse = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "recurse", "false"));
298 bool useRegex = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "useRegex", "false"));
299 string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
300 if (buildAction != string.Empty)
301 m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
302
303
304 //TODO: Figure out where the subtype node is being assigned
305 //string subType = Helper.AttributeValue(node, "subType", string.Empty);
306 //if (subType != String.Empty)
307 // m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
308 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName);
309 m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", m_CopyToOutput.ToString()));
310 m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
311 if ( m_Link )
312 {
313 m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
314 }
315 m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) );
316
317 if ( buildAction == "Copy")
318 m_Destination = destination;
319
320 if(path != null && path.Length == 0)
321 path = ".";//use current directory
322
323 //throw new WarningException("Match must have a 'path' attribute");
324
325 if(pattern == null)
326 {
327 throw new WarningException("Match must have a 'pattern' attribute");
328 }
329
330 path = Helper.NormalizePath(path);
331 if(!Directory.Exists(path))
332 {
333 throw new WarningException("Match path does not exist: {0}", path);
334 }
335
336 try
337 {
338 if(useRegex)
339 {
340 m_Regex = new Regex(pattern);
341 }
342 }
343 catch(ArgumentException ex)
344 {
345 throw new WarningException("Could not compile regex pattern: {0}", ex.Message);
346 }
347
348
349 foreach(XmlNode child in node.ChildNodes)
350 {
351 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
352 if(dataNode is ExcludeNode)
353 {
354 ExcludeNode excludeNode = (ExcludeNode)dataNode;
355 m_Exclusions.Add( excludeNode );
356 }
357 }
358
359 RecurseDirectories( path, pattern, recurse, useRegex, m_Exclusions );
360
361 if (m_Files.Count < 1)
362 {
363 // Include the project name when the match node returns no matches to provide extra
364 // debug info.
365 ProjectNode project = Parent.Parent as ProjectNode;
366 string projectName = "";
367
368 if (project != null)
369 projectName = " in project " + project.AssemblyName;
370
371 throw new WarningException("Match" + projectName + " returned no files: {0}{1}", Helper.EndPath(path), pattern);
372 }
373 m_Regex = null;
374 }
375
376 #endregion
377 }
378}
diff --git a/Prebuild/src/Core/Nodes/OptionsNode.cs b/Prebuild/src/Core/Nodes/OptionsNode.cs
new file mode 100644
index 0000000..d45bd34
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/OptionsNode.cs
@@ -0,0 +1,634 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Reflection;
29using System.Xml;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [DataNode("Options")]
41 public class OptionsNode : DataNode
42 {
43 #region Fields
44
45 private static readonly Dictionary<string,FieldInfo> m_OptionFields = new Dictionary<string, FieldInfo>();
46
47 [OptionNode("CompilerDefines")]
48 private string m_CompilerDefines = "";
49
50 /// <summary>
51 ///
52 /// </summary>
53 public string CompilerDefines
54 {
55 get
56 {
57 return m_CompilerDefines;
58 }
59 set
60 {
61 m_CompilerDefines = value;
62 }
63 }
64
65 [OptionNode("OptimizeCode")]
66 private bool m_OptimizeCode;
67
68 /// <summary>
69 ///
70 /// </summary>
71 public bool OptimizeCode
72 {
73 get
74 {
75 return m_OptimizeCode;
76 }
77 set
78 {
79 m_OptimizeCode = value;
80 }
81 }
82
83 [OptionNode("CheckUnderflowOverflow")]
84 private bool m_CheckUnderflowOverflow;
85
86 /// <summary>
87 ///
88 /// </summary>
89 public bool CheckUnderflowOverflow
90 {
91 get
92 {
93 return m_CheckUnderflowOverflow;
94 }
95 set
96 {
97 m_CheckUnderflowOverflow = value;
98 }
99 }
100
101 [OptionNode("AllowUnsafe")]
102 private bool m_AllowUnsafe;
103
104 /// <summary>
105 ///
106 /// </summary>
107 public bool AllowUnsafe
108 {
109 get
110 {
111 return m_AllowUnsafe;
112 }
113 set
114 {
115 m_AllowUnsafe = value;
116 }
117 }
118
119 [OptionNode("PreBuildEvent")]
120 private string m_PreBuildEvent;
121
122 /// <summary>
123 ///
124 /// </summary>
125 public string PreBuildEvent
126 {
127 get
128 {
129 return m_PreBuildEvent;
130 }
131 set
132 {
133 m_PreBuildEvent = value;
134 }
135 }
136
137 [OptionNode("PostBuildEvent")]
138 private string m_PostBuildEvent;
139
140 /// <summary>
141 ///
142 /// </summary>
143 public string PostBuildEvent
144 {
145 get
146 {
147 return m_PostBuildEvent;
148 }
149 set
150 {
151 m_PostBuildEvent = value;
152 }
153 }
154
155 [OptionNode("PreBuildEventArgs")]
156 private string m_PreBuildEventArgs;
157
158 /// <summary>
159 ///
160 /// </summary>
161 public string PreBuildEventArgs
162 {
163 get
164 {
165 return m_PreBuildEventArgs;
166 }
167 set
168 {
169 m_PreBuildEventArgs = value;
170 }
171 }
172
173 [OptionNode("PostBuildEventArgs")]
174 private string m_PostBuildEventArgs;
175
176 /// <summary>
177 ///
178 /// </summary>
179 public string PostBuildEventArgs
180 {
181 get
182 {
183 return m_PostBuildEventArgs;
184 }
185 set
186 {
187 m_PostBuildEventArgs = value;
188 }
189 }
190
191 [OptionNode("RunPostBuildEvent")]
192 private string m_RunPostBuildEvent;
193
194 /// <summary>
195 ///
196 /// </summary>
197 public string RunPostBuildEvent
198 {
199 get
200 {
201 return m_RunPostBuildEvent;
202 }
203 set
204 {
205 m_RunPostBuildEvent = value;
206 }
207 }
208
209 [OptionNode("RunScript")]
210 private string m_RunScript;
211
212 /// <summary>
213 ///
214 /// </summary>
215 public string RunScript
216 {
217 get
218 {
219 return m_RunScript;
220 }
221 set
222 {
223 m_RunScript = value;
224 }
225 }
226
227 [OptionNode("WarningLevel")]
228 private int m_WarningLevel = 4;
229
230 /// <summary>
231 ///
232 /// </summary>
233 public int WarningLevel
234 {
235 get
236 {
237 return m_WarningLevel;
238 }
239 set
240 {
241 m_WarningLevel = value;
242 }
243 }
244
245 [OptionNode("WarningsAsErrors")]
246 private bool m_WarningsAsErrors;
247
248 /// <summary>
249 ///
250 /// </summary>
251 public bool WarningsAsErrors
252 {
253 get
254 {
255 return m_WarningsAsErrors;
256 }
257 set
258 {
259 m_WarningsAsErrors = value;
260 }
261 }
262
263 [OptionNode("SuppressWarnings")]
264 private string m_SuppressWarnings = "";
265
266 /// <summary>
267 ///
268 /// </summary>
269 public string SuppressWarnings
270 {
271 get
272 {
273 return m_SuppressWarnings;
274 }
275 set
276 {
277 m_SuppressWarnings = value;
278 }
279 }
280
281 [OptionNode("OutputPath")]
282 private string m_OutputPath = "bin/";
283
284 /// <summary>
285 ///
286 /// </summary>
287 public string OutputPath
288 {
289 get
290 {
291 return m_OutputPath;
292 }
293 set
294 {
295 m_OutputPath = value;
296 }
297 }
298
299 [OptionNode("GenerateDocumentation")]
300 private bool m_GenerateDocumentation;
301
302 /// <summary>
303 ///
304 /// </summary>
305 public bool GenerateDocumentation
306 {
307 get
308 {
309 return m_GenerateDocumentation;
310 }
311 set
312 {
313 m_GenerateDocumentation = value;
314 }
315 }
316
317 [OptionNode("GenerateXmlDocFile")]
318 private bool m_GenerateXmlDocFile;
319
320 /// <summary>
321 ///
322 /// </summary>
323 public bool GenerateXmlDocFile
324 {
325 get
326 {
327 return m_GenerateXmlDocFile;
328 }
329 set
330 {
331 m_GenerateXmlDocFile = value;
332 }
333 }
334
335 [OptionNode("XmlDocFile")]
336 private string m_XmlDocFile = "";
337
338 /// <summary>
339 ///
340 /// </summary>
341 public string XmlDocFile
342 {
343 get
344 {
345 return m_XmlDocFile;
346 }
347 set
348 {
349 m_XmlDocFile = value;
350 }
351 }
352
353 [OptionNode("KeyFile")]
354 private string m_KeyFile = "";
355
356 /// <summary>
357 ///
358 /// </summary>
359 public string KeyFile
360 {
361 get
362 {
363 return m_KeyFile;
364 }
365 set
366 {
367 m_KeyFile = value;
368 }
369 }
370
371 [OptionNode("DebugInformation")]
372 private bool m_DebugInformation;
373
374 /// <summary>
375 ///
376 /// </summary>
377 public bool DebugInformation
378 {
379 get
380 {
381 return m_DebugInformation;
382 }
383 set
384 {
385 m_DebugInformation = value;
386 }
387 }
388
389 [OptionNode("RegisterComInterop")]
390 private bool m_RegisterComInterop;
391
392 /// <summary>
393 ///
394 /// </summary>
395 public bool RegisterComInterop
396 {
397 get
398 {
399 return m_RegisterComInterop;
400 }
401 set
402 {
403 m_RegisterComInterop = value;
404 }
405 }
406
407 [OptionNode("RemoveIntegerChecks")]
408 private bool m_RemoveIntegerChecks;
409
410 /// <summary>
411 ///
412 /// </summary>
413 public bool RemoveIntegerChecks
414 {
415 get
416 {
417 return m_RemoveIntegerChecks;
418 }
419 set
420 {
421 m_RemoveIntegerChecks = value;
422 }
423 }
424
425 [OptionNode("IncrementalBuild")]
426 private bool m_IncrementalBuild;
427
428 /// <summary>
429 ///
430 /// </summary>
431 public bool IncrementalBuild
432 {
433 get
434 {
435 return m_IncrementalBuild;
436 }
437 set
438 {
439 m_IncrementalBuild = value;
440 }
441 }
442
443 [OptionNode("BaseAddress")]
444 private string m_BaseAddress = "285212672";
445
446 /// <summary>
447 ///
448 /// </summary>
449 public string BaseAddress
450 {
451 get
452 {
453 return m_BaseAddress;
454 }
455 set
456 {
457 m_BaseAddress = value;
458 }
459 }
460
461 [OptionNode("FileAlignment")]
462 private int m_FileAlignment = 4096;
463
464 /// <summary>
465 ///
466 /// </summary>
467 public int FileAlignment
468 {
469 get
470 {
471 return m_FileAlignment;
472 }
473 set
474 {
475 m_FileAlignment = value;
476 }
477 }
478
479 [OptionNode("NoStdLib")]
480 private bool m_NoStdLib;
481
482 /// <summary>
483 ///
484 /// </summary>
485 public bool NoStdLib
486 {
487 get
488 {
489 return m_NoStdLib;
490 }
491 set
492 {
493 m_NoStdLib = value;
494 }
495 }
496
497 private readonly List<string> m_FieldsDefined = new List<string>();
498
499 #endregion
500
501 #region Constructors
502
503 /// <summary>
504 /// Initializes the <see cref="OptionsNode"/> class.
505 /// </summary>
506 static OptionsNode()
507 {
508 Type t = typeof(OptionsNode);
509
510 foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
511 {
512 object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false);
513 if(attrs == null || attrs.Length < 1)
514 {
515 continue;
516 }
517
518 OptionNodeAttribute ona = (OptionNodeAttribute)attrs[0];
519 m_OptionFields[ona.NodeName] = f;
520 }
521 }
522
523 #endregion
524
525 #region Properties
526
527 /// <summary>
528 /// Gets the <see cref="Object"/> at the specified index.
529 /// </summary>
530 /// <value></value>
531 public object this[string index]
532 {
533 get
534 {
535 if(!m_OptionFields.ContainsKey(index))
536 {
537 return null;
538 }
539
540 FieldInfo f = m_OptionFields[index];
541 return f.GetValue(this);
542 }
543 }
544
545 /// <summary>
546 /// Gets the <see cref="Object"/> at the specified index.
547 /// </summary>
548 /// <value></value>
549 public object this[string index, object defaultValue]
550 {
551 get
552 {
553 object valueObject = this[index];
554 if(valueObject != null && valueObject is string && ((string)valueObject).Length == 0)
555 {
556 return defaultValue;
557 }
558 return valueObject;
559 }
560 }
561
562
563 #endregion
564
565 #region Private Methods
566
567 private void FlagDefined(string name)
568 {
569 if(!m_FieldsDefined.Contains(name))
570 {
571 m_FieldsDefined.Add(name);
572 }
573 }
574
575 private void SetOption(string nodeName, string val)
576 {
577 lock(m_OptionFields)
578 {
579 if(!m_OptionFields.ContainsKey(nodeName))
580 {
581 return;
582 }
583
584 FieldInfo f = m_OptionFields[nodeName];
585 f.SetValue(this, Helper.TranslateValue(f.FieldType, val));
586 FlagDefined(f.Name);
587 }
588 }
589
590 #endregion
591
592 #region Public Methods
593
594 /// <summary>
595 /// Parses the specified node.
596 /// </summary>
597 /// <param name="node">The node.</param>
598 public override void Parse(XmlNode node)
599 {
600 if( node == null )
601 {
602 throw new ArgumentNullException("node");
603 }
604
605 foreach(XmlNode child in node.ChildNodes)
606 {
607 SetOption(child.Name, Helper.InterpolateForEnvironmentVariables(child.InnerText));
608 }
609 }
610
611 /// <summary>
612 /// Copies to.
613 /// </summary>
614 /// <param name="opt">The opt.</param>
615 public void CopyTo(OptionsNode opt)
616 {
617 if(opt == null)
618 {
619 return;
620 }
621
622 foreach(FieldInfo f in m_OptionFields.Values)
623 {
624 if(m_FieldsDefined.Contains(f.Name))
625 {
626 f.SetValue(opt, f.GetValue(this));
627 opt.m_FieldsDefined.Add(f.Name);
628 }
629 }
630 }
631
632 #endregion
633 }
634}
diff --git a/Prebuild/src/Core/Nodes/ProcessNode.cs b/Prebuild/src/Core/Nodes/ProcessNode.cs
new file mode 100644
index 0000000..b05ffc6
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ProcessNode.cs
@@ -0,0 +1,108 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Process")]
39 public class ProcessNode : DataNode
40 {
41 #region Fields
42
43 private string m_Path;
44 private bool m_IsValid = true;
45
46 #endregion
47
48 #region Properties
49
50 /// <summary>
51 /// Gets the path.
52 /// </summary>
53 /// <value>The path.</value>
54 public string Path
55 {
56 get
57 {
58 return m_Path;
59 }
60 }
61
62 /// <summary>
63 /// Gets a value indicating whether this instance is valid.
64 /// </summary>
65 /// <value><c>true</c> if this instance is valid; otherwise, <c>false</c>.</value>
66 public bool IsValid
67 {
68 get
69 {
70 return m_IsValid;
71 }
72 }
73
74 #endregion
75
76 #region Public Methods
77
78 /// <summary>
79 /// Parses the specified node.
80 /// </summary>
81 /// <param name="node">The node.</param>
82 public override void Parse(XmlNode node)
83 {
84 if( node == null )
85 {
86 throw new ArgumentNullException("node");
87 }
88
89 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
90 if(m_Path == null)
91 {
92 m_Path = "";
93 }
94
95 try
96 {
97 m_Path = Helper.ResolvePath(m_Path);
98 }
99 catch(ArgumentException)
100 {
101 Kernel.Instance.Log.Write(LogType.Warning, "Could not find prebuild file for processing: {0}", m_Path);
102 m_IsValid = false;
103 }
104 }
105
106 #endregion
107 }
108}
diff --git a/Prebuild/src/Core/Nodes/ProjectNode.cs b/Prebuild/src/Core/Nodes/ProjectNode.cs
new file mode 100644
index 0000000..e02b11b
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ProjectNode.cs
@@ -0,0 +1,587 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29using System.Xml;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 /// A set of values that the Project's type can be
39 /// </summary>
40 public enum ProjectType
41 {
42 /// <summary>
43 /// The project is a console executable
44 /// </summary>
45 Exe,
46 /// <summary>
47 /// The project is a windows executable
48 /// </summary>
49 WinExe,
50 /// <summary>
51 /// The project is a library
52 /// </summary>
53 Library,
54 /// <summary>
55 /// The project is a website
56 /// </summary>
57 Web,
58 }
59
60 /// <summary>
61 ///
62 /// </summary>
63 public enum ClrRuntime
64 {
65 /// <summary>
66 ///
67 /// </summary>
68 Microsoft,
69 /// <summary>
70 ///
71 /// </summary>
72 Mono
73 }
74 /// <summary>
75 /// The version of the .NET framework to use (Required for VS2008)
76 /// <remarks>We don't need .NET 1.1 in here, it'll default when using vs2003.</remarks>
77 /// </summary>
78 public enum FrameworkVersion
79 {
80 /// <summary>
81 /// .NET 2.0
82 /// </summary>
83 v2_0,
84 /// <summary>
85 /// .NET 3.0
86 /// </summary>
87 v3_0,
88 /// <summary>
89 /// .NET 3.5
90 /// </summary>
91 v3_5,
92 /// <summary>
93 /// .NET 4.0
94 /// </summary>
95 v4_0,
96 /// <summary>
97 /// .NET 4.5
98 /// </summary>
99 v4_5,
100 /// <summary>
101 /// .NET 4.5.1
102 /// </summary>
103 v4_5_1
104 }
105 /// <summary>
106 /// The Node object representing /Prebuild/Solution/Project elements
107 /// </summary>
108 [DataNode("Project")]
109 public class ProjectNode : DataNode, IComparable
110 {
111 #region Fields
112
113 private string m_Name = "unknown";
114 private string m_Path = "";
115 private string m_FullPath = "";
116 private string m_AssemblyName;
117 private string m_AppIcon = "";
118 private string m_ConfigFile = "";
119 private string m_DesignerFolder = "";
120 private string m_Language = "C#";
121 private ProjectType m_Type = ProjectType.Exe;
122 private ClrRuntime m_Runtime = ClrRuntime.Microsoft;
123 private FrameworkVersion m_Framework = FrameworkVersion.v2_0;
124 private string m_StartupObject = "";
125 private string m_RootNamespace;
126 private string m_FilterGroups = "";
127 private string m_Version = "";
128 private Guid m_Guid;
129 private string m_DebugStartParameters;
130
131 private readonly Dictionary<string, ConfigurationNode> m_Configurations = new Dictionary<string, ConfigurationNode>();
132 private readonly List<ReferencePathNode> m_ReferencePaths = new List<ReferencePathNode>();
133 private readonly List<ReferenceNode> m_References = new List<ReferenceNode>();
134 private readonly List<AuthorNode> m_Authors = new List<AuthorNode>();
135 private FilesNode m_Files;
136
137 #endregion
138
139 #region Properties
140
141 /// <summary>
142 /// Gets the name.
143 /// </summary>
144 /// <value>The name.</value>
145 public string Name
146 {
147 get
148 {
149 return m_Name;
150 }
151 }
152 /// <summary>
153 /// The version of the .NET Framework to compile under
154 /// </summary>
155 public FrameworkVersion FrameworkVersion
156 {
157 get
158 {
159 return m_Framework;
160 }
161 }
162 /// <summary>
163 /// Gets the path.
164 /// </summary>
165 /// <value>The path.</value>
166 public string Path
167 {
168 get
169 {
170 return m_Path;
171 }
172 }
173
174 /// <summary>
175 /// Gets the filter groups.
176 /// </summary>
177 /// <value>The filter groups.</value>
178 public string FilterGroups
179 {
180 get
181 {
182 return m_FilterGroups;
183 }
184 }
185
186 /// <summary>
187 /// Gets the project's version
188 /// </summary>
189 /// <value>The project's version.</value>
190 public string Version
191 {
192 get
193 {
194 return m_Version;
195 }
196 }
197
198 /// <summary>
199 /// Gets the full path.
200 /// </summary>
201 /// <value>The full path.</value>
202 public string FullPath
203 {
204 get
205 {
206 return m_FullPath;
207 }
208 }
209
210 /// <summary>
211 /// Gets the name of the assembly.
212 /// </summary>
213 /// <value>The name of the assembly.</value>
214 public string AssemblyName
215 {
216 get
217 {
218 return m_AssemblyName;
219 }
220 }
221
222 /// <summary>
223 /// Gets the app icon.
224 /// </summary>
225 /// <value>The app icon.</value>
226 public string AppIcon
227 {
228 get
229 {
230 return m_AppIcon;
231 }
232 }
233
234 /// <summary>
235 /// Gets the app icon.
236 /// </summary>
237 /// <value>The app icon.</value>
238 public string ConfigFile
239 {
240 get
241 {
242 return m_ConfigFile;
243 }
244 }
245
246 /// <summary>
247 ///
248 /// </summary>
249 public string DesignerFolder
250 {
251 get
252 {
253 return m_DesignerFolder;
254 }
255 }
256
257 /// <summary>
258 /// Gets the language.
259 /// </summary>
260 /// <value>The language.</value>
261 public string Language
262 {
263 get
264 {
265 return m_Language;
266 }
267 }
268
269 /// <summary>
270 /// Gets the type.
271 /// </summary>
272 /// <value>The type.</value>
273 public ProjectType Type
274 {
275 get
276 {
277 return m_Type;
278 }
279 }
280
281 /// <summary>
282 /// Gets the runtime.
283 /// </summary>
284 /// <value>The runtime.</value>
285 public ClrRuntime Runtime
286 {
287 get
288 {
289 return m_Runtime;
290 }
291 }
292
293 private bool m_GenerateAssemblyInfoFile;
294
295 /// <summary>
296 ///
297 /// </summary>
298 public bool GenerateAssemblyInfoFile
299 {
300 get
301 {
302 return m_GenerateAssemblyInfoFile;
303 }
304 set
305 {
306 m_GenerateAssemblyInfoFile = value;
307 }
308 }
309
310 /// <summary>
311 /// Gets the startup object.
312 /// </summary>
313 /// <value>The startup object.</value>
314 public string StartupObject
315 {
316 get
317 {
318 return m_StartupObject;
319 }
320 }
321
322 /// <summary>
323 /// Gets the root namespace.
324 /// </summary>
325 /// <value>The root namespace.</value>
326 public string RootNamespace
327 {
328 get
329 {
330 return m_RootNamespace;
331 }
332 }
333
334 /// <summary>
335 /// Gets the configurations.
336 /// </summary>
337 /// <value>The configurations.</value>
338 public List<ConfigurationNode> Configurations
339 {
340 get
341 {
342 List<ConfigurationNode> tmp = new List<ConfigurationNode>(ConfigurationsTable.Values);
343 tmp.Sort();
344 return tmp;
345 }
346 }
347
348 /// <summary>
349 /// Gets the configurations table.
350 /// </summary>
351 /// <value>The configurations table.</value>
352 public Dictionary<string, ConfigurationNode> ConfigurationsTable
353 {
354 get
355 {
356 return m_Configurations;
357 }
358 }
359
360 /// <summary>
361 /// Gets the reference paths.
362 /// </summary>
363 /// <value>The reference paths.</value>
364 public List<ReferencePathNode> ReferencePaths
365 {
366 get
367 {
368 List<ReferencePathNode> tmp = new List<ReferencePathNode>(m_ReferencePaths);
369 tmp.Sort();
370 return tmp;
371 }
372 }
373
374 /// <summary>
375 /// Gets the references.
376 /// </summary>
377 /// <value>The references.</value>
378 public List<ReferenceNode> References
379 {
380 get
381 {
382 List<ReferenceNode> tmp = new List<ReferenceNode>(m_References);
383 tmp.Sort();
384 return tmp;
385 }
386 }
387
388 /// <summary>
389 /// Gets the Authors list.
390 /// </summary>
391 /// <value>The list of the project's authors.</value>
392 public List<AuthorNode> Authors
393 {
394 get
395 {
396 return m_Authors;
397 }
398 }
399
400 /// <summary>
401 /// Gets the files.
402 /// </summary>
403 /// <value>The files.</value>
404 public FilesNode Files
405 {
406 get
407 {
408 return m_Files;
409 }
410 }
411
412 /// <summary>
413 /// Gets or sets the parent.
414 /// </summary>
415 /// <value>The parent.</value>
416 public override IDataNode Parent
417 {
418 get
419 {
420 return base.Parent;
421 }
422 set
423 {
424 base.Parent = value;
425 if(base.Parent is SolutionNode && m_Configurations.Count < 1)
426 {
427 SolutionNode parent = (SolutionNode)base.Parent;
428 foreach(ConfigurationNode conf in parent.Configurations)
429 {
430 m_Configurations[conf.NameAndPlatform] = (ConfigurationNode) conf.Clone();
431 }
432 }
433 }
434 }
435
436 /// <summary>
437 /// Gets the GUID.
438 /// </summary>
439 /// <value>The GUID.</value>
440 public Guid Guid
441 {
442 get
443 {
444 return m_Guid;
445 }
446 }
447
448 public string DebugStartParameters
449 {
450 get
451 {
452 return m_DebugStartParameters;
453 }
454 }
455
456 #endregion
457
458 #region Private Methods
459
460 private void HandleConfiguration(ConfigurationNode conf)
461 {
462 if(String.Compare(conf.Name, "all", true) == 0) //apply changes to all, this may not always be applied first,
463 //so it *may* override changes to the same properties for configurations defines at the project level
464 {
465 foreach(ConfigurationNode confNode in m_Configurations.Values)
466 {
467 conf.CopyTo(confNode);//update the config templates defines at the project level with the overrides
468 }
469 }
470 if(m_Configurations.ContainsKey(conf.NameAndPlatform))
471 {
472 ConfigurationNode parentConf = m_Configurations[conf.NameAndPlatform];
473 conf.CopyTo(parentConf);//update the config templates defines at the project level with the overrides
474 }
475 else
476 {
477 m_Configurations[conf.NameAndPlatform] = conf;
478 }
479 }
480
481 #endregion
482
483 #region Public Methods
484
485 /// <summary>
486 /// Parses the specified node.
487 /// </summary>
488 /// <param name="node">The node.</param>
489 public override void Parse(XmlNode node)
490 {
491 m_Name = Helper.AttributeValue(node, "name", m_Name);
492 m_Path = Helper.AttributeValue(node, "path", m_Path);
493 m_FilterGroups = Helper.AttributeValue(node, "filterGroups", m_FilterGroups);
494 m_Version = Helper.AttributeValue(node, "version", m_Version);
495 m_AppIcon = Helper.AttributeValue(node, "icon", m_AppIcon);
496 m_ConfigFile = Helper.AttributeValue(node, "configFile", m_ConfigFile);
497 m_DesignerFolder = Helper.AttributeValue(node, "designerFolder", m_DesignerFolder);
498 m_AssemblyName = Helper.AttributeValue(node, "assemblyName", m_AssemblyName);
499 m_Language = Helper.AttributeValue(node, "language", m_Language);
500 m_Type = (ProjectType)Helper.EnumAttributeValue(node, "type", typeof(ProjectType), m_Type);
501 m_Runtime = (ClrRuntime)Helper.EnumAttributeValue(node, "runtime", typeof(ClrRuntime), m_Runtime);
502 m_Framework = (FrameworkVersion)Helper.EnumAttributeValue(node, "frameworkVersion", typeof(FrameworkVersion), m_Framework);
503 m_StartupObject = Helper.AttributeValue(node, "startupObject", m_StartupObject);
504 m_RootNamespace = Helper.AttributeValue(node, "rootNamespace", m_RootNamespace);
505
506 int hash = m_Name.GetHashCode();
507 Guid guidByHash = new Guid(hash, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
508 string guid = Helper.AttributeValue(node, "guid", guidByHash.ToString());
509 m_Guid = new Guid(guid);
510
511 m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false);
512 m_DebugStartParameters = Helper.AttributeValue(node, "debugStartParameters", string.Empty);
513
514 if(string.IsNullOrEmpty(m_AssemblyName))
515 {
516 m_AssemblyName = m_Name;
517 }
518
519 if(string.IsNullOrEmpty(m_RootNamespace))
520 {
521 m_RootNamespace = m_Name;
522 }
523
524 m_FullPath = m_Path;
525 try
526 {
527 m_FullPath = Helper.ResolvePath(m_FullPath);
528 }
529 catch
530 {
531 throw new WarningException("Could not resolve Solution path: {0}", m_Path);
532 }
533
534 Kernel.Instance.CurrentWorkingDirectory.Push();
535 try
536 {
537 Helper.SetCurrentDir(m_FullPath);
538
539 if( node == null )
540 {
541 throw new ArgumentNullException("node");
542 }
543
544 foreach(XmlNode child in node.ChildNodes)
545 {
546 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
547 if(dataNode is ConfigurationNode)
548 {
549 HandleConfiguration((ConfigurationNode)dataNode);
550 }
551 else if(dataNode is ReferencePathNode)
552 {
553 m_ReferencePaths.Add((ReferencePathNode)dataNode);
554 }
555 else if(dataNode is ReferenceNode)
556 {
557 m_References.Add((ReferenceNode)dataNode);
558 }
559 else if(dataNode is AuthorNode)
560 {
561 m_Authors.Add((AuthorNode)dataNode);
562 }
563 else if(dataNode is FilesNode)
564 {
565 m_Files = (FilesNode)dataNode;
566 }
567 }
568 }
569 finally
570 {
571 Kernel.Instance.CurrentWorkingDirectory.Pop();
572 }
573 }
574
575 #endregion
576
577 #region IComparable Members
578
579 public int CompareTo(object obj)
580 {
581 ProjectNode that = (ProjectNode)obj;
582 return m_Name.CompareTo(that.m_Name);
583 }
584
585 #endregion
586 }
587}
diff --git a/Prebuild/src/Core/Nodes/ReferenceNode.cs b/Prebuild/src/Core/Nodes/ReferenceNode.cs
new file mode 100644
index 0000000..9afb512
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ReferenceNode.cs
@@ -0,0 +1,144 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Reference")]
39 public class ReferenceNode : DataNode, IComparable
40 {
41 #region Fields
42
43 private string m_Name = "unknown";
44 private string m_Path;
45 private string m_LocalCopy;
46 private string m_Version;
47
48 #endregion
49
50 #region Properties
51
52 /// <summary>
53 /// Gets the name.
54 /// </summary>
55 /// <value>The name.</value>
56 public string Name
57 {
58 get
59 {
60 return m_Name;
61 }
62 }
63
64 /// <summary>
65 /// Gets the path.
66 /// </summary>
67 /// <value>The path.</value>
68 public string Path
69 {
70 get
71 {
72 return m_Path;
73 }
74 }
75
76 /// <summary>
77 /// Gets a value indicating whether [local copy specified].
78 /// </summary>
79 /// <value><c>true</c> if [local copy specified]; otherwise, <c>false</c>.</value>
80 public bool LocalCopySpecified
81 {
82 get
83 {
84 return ( m_LocalCopy != null && m_LocalCopy.Length == 0);
85 }
86 }
87
88 /// <summary>
89 /// Gets a value indicating whether [local copy].
90 /// </summary>
91 /// <value><c>true</c> if [local copy]; otherwise, <c>false</c>.</value>
92 public bool LocalCopy
93 {
94 get
95 {
96 if( m_LocalCopy == null)
97 {
98 return false;
99 }
100 return bool.Parse(m_LocalCopy);
101 }
102 }
103
104 /// <summary>
105 /// Gets the version.
106 /// </summary>
107 /// <value>The version.</value>
108 public string Version
109 {
110 get
111 {
112 return m_Version;
113 }
114 }
115
116 #endregion
117
118 #region Public Methods
119
120 /// <summary>
121 /// Parses the specified node.
122 /// </summary>
123 /// <param name="node">The node.</param>
124 public override void Parse(XmlNode node)
125 {
126 m_Name = Helper.AttributeValue(node, "name", m_Name);
127 m_Path = Helper.AttributeValue(node, "path", m_Path);
128 m_LocalCopy = Helper.AttributeValue(node, "localCopy", m_LocalCopy);
129 m_Version = Helper.AttributeValue(node, "version", m_Version);
130 }
131
132 #endregion
133
134 #region IComparable Members
135
136 public int CompareTo(object obj)
137 {
138 ReferenceNode that = (ReferenceNode)obj;
139 return this.m_Name.CompareTo(that.m_Name);
140 }
141
142 #endregion
143 }
144}
diff --git a/Prebuild/src/Core/Nodes/ReferencePathNode.cs b/Prebuild/src/Core/Nodes/ReferencePathNode.cs
new file mode 100644
index 0000000..29c63c5
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ReferencePathNode.cs
@@ -0,0 +1,97 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("ReferencePath")]
39 public class ReferencePathNode : DataNode, IComparable
40 {
41 #region Fields
42
43 private string m_Path;
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the path.
51 /// </summary>
52 /// <value>The path.</value>
53 public string Path
54 {
55 get
56 {
57 return m_Path;
58 }
59 }
60
61 #endregion
62
63 #region Public Methods
64
65 /// <summary>
66 /// Parses the specified node.
67 /// </summary>
68 /// <param name="node">The node.</param>
69 public override void Parse(XmlNode node)
70 {
71 if( node == null )
72 {
73 throw new ArgumentNullException("node");
74 }
75
76 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
77 if(m_Path == null)
78 {
79 m_Path = "";
80 }
81
82 m_Path = m_Path.Trim();
83 }
84
85 #endregion
86
87 #region IComparable Members
88
89 public int CompareTo(object obj)
90 {
91 ReferencePathNode that = (ReferencePathNode)obj;
92 return this.m_Path.CompareTo(that.m_Path);
93 }
94
95 #endregion
96 }
97}
diff --git a/Prebuild/src/Core/Nodes/SolutionNode.cs b/Prebuild/src/Core/Nodes/SolutionNode.cs
new file mode 100644
index 0000000..e1d5b3b
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/SolutionNode.cs
@@ -0,0 +1,382 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Diagnostics;
29using System.Xml;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [DataNode("Solution")]
41 [DataNode("EmbeddedSolution")]
42 [DebuggerDisplay("{Name}")]
43 public class SolutionNode : DataNode
44 {
45 #region Fields
46
47 private Guid m_Guid = Guid.NewGuid();
48 private string m_Name = "unknown";
49 private string m_Path = "";
50 private string m_FullPath = "";
51 private string m_ActiveConfig;
52 private string m_Version = "1.0.0";
53
54 private OptionsNode m_Options;
55 private FilesNode m_Files;
56 private readonly ConfigurationNodeCollection m_Configurations = new ConfigurationNodeCollection();
57 private readonly Dictionary<string, ProjectNode> m_Projects = new Dictionary<string, ProjectNode>();
58 private readonly Dictionary<string, DatabaseProjectNode> m_DatabaseProjects = new Dictionary<string, DatabaseProjectNode>();
59 private readonly List<ProjectNode> m_ProjectsOrder = new List<ProjectNode>();
60 private readonly Dictionary<string, SolutionNode> m_Solutions = new Dictionary<string, SolutionNode>();
61 private CleanupNode m_Cleanup;
62
63 #endregion
64
65 #region Properties
66 public override IDataNode Parent
67 {
68 get
69 {
70 return base.Parent;
71 }
72 set
73 {
74 if (value is SolutionNode)
75 {
76 SolutionNode solution = (SolutionNode)value;
77 foreach (ConfigurationNode conf in solution.Configurations)
78 {
79 m_Configurations[conf.Name] = (ConfigurationNode) conf.Clone();
80 }
81 }
82
83 base.Parent = value;
84 }
85 }
86
87 public CleanupNode Cleanup
88 {
89 get
90 {
91 return m_Cleanup;
92 }
93 set
94 {
95 m_Cleanup = value;
96 }
97 }
98
99 public Guid Guid
100 {
101 get
102 {
103 return m_Guid;
104 }
105 set
106 {
107 m_Guid = value;
108 }
109 }
110 /// <summary>
111 /// Gets or sets the active config.
112 /// </summary>
113 /// <value>The active config.</value>
114 public string ActiveConfig
115 {
116 get
117 {
118 return m_ActiveConfig;
119 }
120 set
121 {
122 m_ActiveConfig = value;
123 }
124 }
125
126 /// <summary>
127 /// Gets the name.
128 /// </summary>
129 /// <value>The name.</value>
130 public string Name
131 {
132 get
133 {
134 return m_Name;
135 }
136 }
137
138 /// <summary>
139 /// Gets the path.
140 /// </summary>
141 /// <value>The path.</value>
142 public string Path
143 {
144 get
145 {
146 return m_Path;
147 }
148 }
149
150 /// <summary>
151 /// Gets the full path.
152 /// </summary>
153 /// <value>The full path.</value>
154 public string FullPath
155 {
156 get
157 {
158 return m_FullPath;
159 }
160 }
161
162 /// <summary>
163 /// Gets the version.
164 /// </summary>
165 /// <value>The version.</value>
166 public string Version
167 {
168 get
169 {
170 return m_Version;
171 }
172 }
173
174 /// <summary>
175 /// Gets the options.
176 /// </summary>
177 /// <value>The options.</value>
178 public OptionsNode Options
179 {
180 get
181 {
182 return m_Options;
183 }
184 }
185
186 /// <summary>
187 /// Gets the files.
188 /// </summary>
189 /// <value>The files.</value>
190 public FilesNode Files
191 {
192 get
193 {
194 return m_Files;
195 }
196 }
197
198 /// <summary>
199 /// Gets the configurations.
200 /// </summary>
201 /// <value>The configurations.</value>
202 public ConfigurationNodeCollection Configurations
203 {
204 get
205 {
206 ConfigurationNodeCollection tmp = new ConfigurationNodeCollection();
207 tmp.AddRange(ConfigurationsTable);
208 return tmp;
209 }
210 }
211
212 /// <summary>
213 /// Gets the configurations table.
214 /// </summary>
215 /// <value>The configurations table.</value>
216 public ConfigurationNodeCollection ConfigurationsTable
217 {
218 get
219 {
220 return m_Configurations;
221 }
222 }
223 /// <summary>
224 /// Gets the database projects.
225 /// </summary>
226 public ICollection<DatabaseProjectNode> DatabaseProjects
227 {
228 get
229 {
230 return m_DatabaseProjects.Values;
231 }
232 }
233 /// <summary>
234 /// Gets the nested solutions.
235 /// </summary>
236 public ICollection<SolutionNode> Solutions
237 {
238 get
239 {
240 return m_Solutions.Values;
241 }
242 }
243 /// <summary>
244 /// Gets the nested solutions hash table.
245 /// </summary>
246 public Dictionary<string, SolutionNode> SolutionsTable
247 {
248 get
249 {
250 return m_Solutions;
251 }
252 }
253 /// <summary>
254 /// Gets the projects.
255 /// </summary>
256 /// <value>The projects.</value>
257 public ICollection<ProjectNode> Projects
258 {
259 get
260 {
261 List<ProjectNode> tmp = new List<ProjectNode>(m_Projects.Values);
262 tmp.Sort();
263 return tmp;
264 }
265 }
266
267 /// <summary>
268 /// Gets the projects table.
269 /// </summary>
270 /// <value>The projects table.</value>
271 public Dictionary<string, ProjectNode> ProjectsTable
272 {
273 get
274 {
275 return m_Projects;
276 }
277 }
278
279 /// <summary>
280 /// Gets the projects table.
281 /// </summary>
282 /// <value>The projects table.</value>
283 public List<ProjectNode> ProjectsTableOrder
284 {
285 get
286 {
287 return m_ProjectsOrder;
288 }
289 }
290
291 #endregion
292
293 #region Public Methods
294
295 /// <summary>
296 /// Parses the specified node.
297 /// </summary>
298 /// <param name="node">The node.</param>
299 public override void Parse(XmlNode node)
300 {
301 m_Name = Helper.AttributeValue(node, "name", m_Name);
302 m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig);
303 m_Path = Helper.AttributeValue(node, "path", m_Path);
304 m_Version = Helper.AttributeValue(node, "version", m_Version);
305
306 m_FullPath = m_Path;
307 try
308 {
309 m_FullPath = Helper.ResolvePath(m_FullPath);
310 }
311 catch
312 {
313 throw new WarningException("Could not resolve solution path: {0}", m_Path);
314 }
315
316 Kernel.Instance.CurrentWorkingDirectory.Push();
317 try
318 {
319 Helper.SetCurrentDir(m_FullPath);
320
321 if( node == null )
322 {
323 throw new ArgumentNullException("node");
324 }
325
326 foreach(XmlNode child in node.ChildNodes)
327 {
328 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
329 if(dataNode is OptionsNode)
330 {
331 m_Options = (OptionsNode)dataNode;
332 }
333 else if(dataNode is FilesNode)
334 {
335 m_Files = (FilesNode)dataNode;
336 }
337 else if(dataNode is ConfigurationNode)
338 {
339 ConfigurationNode configurationNode = (ConfigurationNode) dataNode;
340 m_Configurations[configurationNode.NameAndPlatform] = configurationNode;
341
342 // If the active configuration is null, then we populate it.
343 if (ActiveConfig == null)
344 {
345 ActiveConfig = configurationNode.Name;
346 }
347 }
348 else if(dataNode is ProjectNode)
349 {
350 m_Projects[((ProjectNode)dataNode).Name] = (ProjectNode) dataNode;
351 m_ProjectsOrder.Add((ProjectNode)dataNode);
352 }
353 else if(dataNode is SolutionNode)
354 {
355 m_Solutions[((SolutionNode)dataNode).Name] = (SolutionNode) dataNode;
356 }
357 else if (dataNode is ProcessNode)
358 {
359 ProcessNode p = (ProcessNode)dataNode;
360 Kernel.Instance.ProcessFile(p, this);
361 }
362 else if (dataNode is DatabaseProjectNode)
363 {
364 m_DatabaseProjects[((DatabaseProjectNode)dataNode).Name] = (DatabaseProjectNode) dataNode;
365 }
366 else if(dataNode is CleanupNode)
367 {
368 if(m_Cleanup != null)
369 throw new WarningException("There can only be one Cleanup node.");
370 m_Cleanup = (CleanupNode)dataNode;
371 }
372 }
373 }
374 finally
375 {
376 Kernel.Instance.CurrentWorkingDirectory.Pop();
377 }
378 }
379
380 #endregion
381 }
382}
diff --git a/Prebuild/src/Core/Parse/IfContext.cs b/Prebuild/src/Core/Parse/IfContext.cs
new file mode 100644
index 0000000..7729d3b
--- /dev/null
+++ b/Prebuild/src/Core/Parse/IfContext.cs
@@ -0,0 +1,154 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Parse
29{
30 /// <summary>
31 ///
32 /// </summary>
33 public enum IfState
34 {
35 /// <summary>
36 ///
37 /// </summary>
38 None,
39 /// <summary>
40 ///
41 /// </summary>
42 If,
43 /// <summary>
44 ///
45 /// </summary>
46 ElseIf,
47 /// <summary>
48 ///
49 /// </summary>
50 Else
51 }
52
53 /// <summary>
54 /// Summary description for IfContext.
55 /// </summary>
56 // Inspired by the equivalent WiX class (see www.sourceforge.net/projects/wix/)
57 public class IfContext
58 {
59 #region Properties
60
61 bool m_Active;
62 bool m_Keep;
63 bool m_EverKept;
64 IfState m_State = IfState.None;
65
66 #endregion
67
68 #region Constructors
69
70 /// <summary>
71 /// Initializes a new instance of the <see cref="IfContext"/> class.
72 /// </summary>
73 /// <param name="active">if set to <c>true</c> [active].</param>
74 /// <param name="keep">if set to <c>true</c> [keep].</param>
75 /// <param name="state">The state.</param>
76 public IfContext(bool active, bool keep, IfState state)
77 {
78 m_Active = active;
79 m_Keep = keep;
80 m_EverKept = keep;
81 m_State = state;
82 }
83
84 #endregion
85
86 #region Properties
87
88 /// <summary>
89 /// Gets or sets a value indicating whether this <see cref="IfContext"/> is active.
90 /// </summary>
91 /// <value><c>true</c> if active; otherwise, <c>false</c>.</value>
92 public bool Active
93 {
94 get
95 {
96 return m_Active;
97 }
98 set
99 {
100 m_Active = value;
101 }
102 }
103
104 /// <summary>
105 /// Gets or sets a value indicating whether this <see cref="IfContext"/> is keep.
106 /// </summary>
107 /// <value><c>true</c> if keep; otherwise, <c>false</c>.</value>
108 public bool Keep
109 {
110 get
111 {
112 return m_Keep;
113 }
114 set
115 {
116 m_Keep = value;
117 if(m_Keep)
118 {
119 m_EverKept = true;
120 }
121 }
122 }
123
124 /// <summary>
125 /// Gets a value indicating whether [ever kept].
126 /// </summary>
127 /// <value><c>true</c> if [ever kept]; otherwise, <c>false</c>.</value>
128 public bool EverKept
129 {
130 get
131 {
132 return m_EverKept;
133 }
134 }
135
136 /// <summary>
137 /// Gets or sets the state.
138 /// </summary>
139 /// <value>The state.</value>
140 public IfState State
141 {
142 get
143 {
144 return m_State;
145 }
146 set
147 {
148 m_State = value;
149 }
150 }
151
152 #endregion
153 }
154}
diff --git a/Prebuild/src/Core/Parse/Preprocessor.cs b/Prebuild/src/Core/Parse/Preprocessor.cs
new file mode 100644
index 0000000..0cd6e82
--- /dev/null
+++ b/Prebuild/src/Core/Parse/Preprocessor.cs
@@ -0,0 +1,652 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29using System.Text.RegularExpressions;
30using System.Xml;
31
32namespace Prebuild.Core.Parse
33{
34 /// <summary>
35 ///
36 /// </summary>
37 public enum OperatorSymbol
38 {
39 /// <summary>
40 ///
41 /// </summary>
42 None,
43 /// <summary>
44 ///
45 /// </summary>
46 Equal,
47 /// <summary>
48 ///
49 /// </summary>
50 NotEqual,
51 /// <summary>
52 ///
53 /// </summary>
54 LessThan,
55 /// <summary>
56 ///
57 /// </summary>
58 GreaterThan,
59 /// <summary>
60 ///
61 /// </summary>
62 LessThanEqual,
63 /// <summary>
64 ///
65 /// </summary>
66 GreaterThanEqual
67 }
68
69 /// <summary>
70 ///
71 /// </summary>
72 public class Preprocessor
73 {
74 #region Constants
75
76 /// <summary>
77 /// Includes the regex to look for file tags in the <?include
78 /// ?> processing instruction.
79 /// </summary>
80 private static readonly Regex includeFileRegex = new Regex("file=\"(.+?)\"");
81
82 #endregion
83
84 #region Fields
85
86 readonly XmlDocument m_OutDoc = new XmlDocument();
87 readonly Stack<IfContext> m_IfStack = new Stack<IfContext>();
88 readonly Dictionary<string, object> m_Variables = new Dictionary<string, object>();
89
90 #endregion
91
92 #region Constructors
93
94 /// <summary>
95 /// Initializes a new instance of the <see cref="Preprocessor"/> class.
96 /// </summary>
97 public Preprocessor()
98 {
99 RegisterVariable("OS", GetOS());
100 RegisterVariable("RuntimeVersion", Environment.Version.Major);
101 RegisterVariable("RuntimeMajor", Environment.Version.Major);
102 RegisterVariable("RuntimeMinor", Environment.Version.Minor);
103 RegisterVariable("RuntimeRevision", Environment.Version.Revision);
104 }
105
106 #endregion
107
108 #region Properties
109
110 /// <summary>
111 /// Gets the processed doc.
112 /// </summary>
113 /// <value>The processed doc.</value>
114 public XmlDocument ProcessedDoc
115 {
116 get
117 {
118 return m_OutDoc;
119 }
120 }
121
122 #endregion
123
124 #region Private Methods
125
126 /// <summary>
127 /// Parts of this code were taken from NAnt and is subject to the GPL
128 /// as per NAnt's license. Thanks to the NAnt guys for this little gem.
129 /// </summary>
130 /// <returns></returns>
131 public static string GetOS()
132 {
133 PlatformID platId = Environment.OSVersion.Platform;
134 if(platId == PlatformID.Win32NT || platId == PlatformID.Win32Windows)
135 {
136 return "Win32";
137 }
138
139 if (File.Exists("/System/Library/Frameworks/Cocoa.framework/Cocoa"))
140 {
141 return "MACOSX";
142 }
143
144 /*
145 * .NET 1.x, under Mono, the UNIX code is 128. Under
146 * .NET 2.x, Mono or MS, the UNIX code is 4
147 */
148 if(Environment.Version.Major == 1)
149 {
150 if((int)platId == 128)
151 {
152 return "UNIX";
153 }
154 }
155 else if((int)platId == 4)
156 {
157 return "UNIX";
158 }
159
160 return "Unknown";
161 }
162
163 private static bool CompareNum(OperatorSymbol oper, int val1, int val2)
164 {
165 switch(oper)
166 {
167 case OperatorSymbol.Equal:
168 return (val1 == val2);
169 case OperatorSymbol.NotEqual:
170 return (val1 != val2);
171 case OperatorSymbol.LessThan:
172 return (val1 < val2);
173 case OperatorSymbol.LessThanEqual:
174 return (val1 <= val2);
175 case OperatorSymbol.GreaterThan:
176 return (val1 > val2);
177 case OperatorSymbol.GreaterThanEqual:
178 return (val1 >= val2);
179 }
180
181 throw new WarningException("Unknown operator type");
182 }
183
184 private static bool CompareStr(OperatorSymbol oper, string val1, string val2)
185 {
186 switch(oper)
187 {
188 case OperatorSymbol.Equal:
189 return (val1 == val2);
190 case OperatorSymbol.NotEqual:
191 return (val1 != val2);
192 case OperatorSymbol.LessThan:
193 return (val1.CompareTo(val2) < 0);
194 case OperatorSymbol.LessThanEqual:
195 return (val1.CompareTo(val2) <= 0);
196 case OperatorSymbol.GreaterThan:
197 return (val1.CompareTo(val2) > 0);
198 case OperatorSymbol.GreaterThanEqual:
199 return (val1.CompareTo(val2) >= 0);
200 }
201
202 throw new WarningException("Unknown operator type");
203 }
204
205 private static char NextChar(int idx, string str)
206 {
207 if((idx + 1) >= str.Length)
208 {
209 return Char.MaxValue;
210 }
211
212 return str[idx + 1];
213 }
214 // Very very simple expression parser. Can only match expressions of the form
215 // <var> <op> <value>:
216 // OS = Windows
217 // OS != Linux
218 // RuntimeMinor > 0
219 private bool ParseExpression(string exp)
220 {
221 if(exp == null)
222 {
223 throw new ArgumentException("Invalid expression, cannot be null");
224 }
225
226 exp = exp.Trim();
227 if(exp.Length < 1)
228 {
229 throw new ArgumentException("Invalid expression, cannot be 0 length");
230 }
231
232 string id = "";
233 string str = "";
234 OperatorSymbol oper = OperatorSymbol.None;
235 bool inStr = false;
236
237 for(int i = 0; i < exp.Length; i++)
238 {
239 char c = exp[i];
240 if(Char.IsWhiteSpace(c))
241 {
242 continue;
243 }
244
245 if(Char.IsLetterOrDigit(c) || c == '_')
246 {
247 if(inStr)
248 {
249 str += c;
250 }
251 else
252 {
253 id += c;
254 }
255 }
256 else if(c == '\"')
257 {
258 inStr = !inStr;
259 if(inStr)
260 {
261 str = "";
262 }
263 }
264 else
265 {
266 if(inStr)
267 {
268 str += c;
269 }
270 else
271 {
272 switch(c)
273 {
274 case '=':
275 oper = OperatorSymbol.Equal;
276 break;
277
278 case '!':
279 if(NextChar(i, exp) == '=')
280 {
281 oper = OperatorSymbol.NotEqual;
282 }
283
284 break;
285
286 case '<':
287 if(NextChar(i, exp) == '=')
288 {
289 oper = OperatorSymbol.LessThanEqual;
290 }
291 else
292 {
293 oper = OperatorSymbol.LessThan;
294 }
295
296 break;
297
298 case '>':
299 if(NextChar(i, exp) == '=')
300 {
301 oper = OperatorSymbol.GreaterThanEqual;
302 }
303 else
304 {
305 oper = OperatorSymbol.GreaterThan;
306 }
307
308 break;
309 }
310 }
311 }
312 }
313
314
315 if(inStr)
316 {
317 throw new WarningException("Expected end of string in expression");
318 }
319
320 if(oper == OperatorSymbol.None)
321 {
322 throw new WarningException("Expected operator in expression");
323 }
324 if(id.Length < 1)
325 {
326 throw new WarningException("Expected identifier in expression");
327 }
328 if(str.Length < 1)
329 {
330 throw new WarningException("Expected value in expression");
331 }
332
333 bool ret;
334 try
335 {
336 object val = m_Variables[id.ToLower()];
337 if(val == null)
338 {
339 throw new WarningException("Unknown identifier '{0}'", id);
340 }
341
342 Type t = val.GetType();
343 if(t.IsAssignableFrom(typeof(int)))
344 {
345 int numVal = (int)val;
346 int numVal2 = Int32.Parse(str);
347 ret = CompareNum(oper, numVal, numVal2);
348 }
349 else
350 {
351 string strVal = val.ToString();
352 string strVal2 = str;
353 ret = CompareStr(oper, strVal, strVal2);
354 }
355 }
356 catch(ArgumentException ex)
357 {
358 ex.ToString();
359 throw new WarningException("Invalid value type for system variable '{0}', expected int", id);
360 }
361
362 return ret;
363 }
364
365 /// <summary>
366 /// Taken from current Prebuild included in OpenSim 0.7.x
367 /// </summary>
368 /// <param name="readerStack">
369 /// A <see cref="Stack<XmlReader>"/>
370 /// </param>
371 /// <param name="include">
372 /// A <see cref="System.String"/>
373 /// </param>
374 private static void WildCardInclude (Stack<XmlReader> readerStack, string include)
375 {
376 if (!include.Contains ("*")) {
377 return;
378 }
379
380 // Console.WriteLine("Processing {0}", include);
381
382 // Break up the include into pre and post wildcard sections
383 string preWildcard = include.Substring (0, include.IndexOf ("*"));
384 string postWildcard = include.Substring (include.IndexOf ("*") + 2);
385
386 // If preWildcard is a directory, recurse
387 if (Directory.Exists (preWildcard)) {
388 string[] directories = Directory.GetDirectories (preWildcard);
389 Array.Sort (directories);
390 Array.Reverse (directories);
391 foreach (string dirPath in directories) {
392 //Console.WriteLine ("Scanning : {0}", dirPath);
393
394 string includeFile = Path.Combine (dirPath, postWildcard);
395 if (includeFile.Contains ("*")) {
396 // postWildcard included another wildcard, recurse.
397 WildCardInclude (readerStack, includeFile);
398 } else {
399 FileInfo file = new FileInfo (includeFile);
400 if (file.Exists) {
401 //Console.WriteLine ("Including File: {0}", includeFile);
402 XmlReader newReader = new XmlTextReader (file.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
403 readerStack.Push (newReader);
404 }
405 }
406 }
407 } else {
408 // preWildcard is not a path to a directory, so the wildcard is in the filename
409 string searchFilename = Path.GetFileName (preWildcard.Substring (preWildcard.IndexOf ("/") + 1) + "*" + postWildcard);
410 Console.WriteLine ("searchFilename: {0}", searchFilename);
411
412 string searchDirectory = Path.GetDirectoryName (preWildcard);
413 Console.WriteLine ("searchDirectory: {0}", searchDirectory);
414
415 string[] files = Directory.GetFiles (searchDirectory, searchFilename);
416 Array.Sort (files);
417 Array.Reverse (files);
418 foreach (string includeFile in files) {
419 FileInfo file = new FileInfo (includeFile);
420 if (file.Exists) {
421 // Console.WriteLine ("Including File: {0}", includeFile);
422 XmlReader newReader = new XmlTextReader (file.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
423 readerStack.Push (newReader);
424 }
425 }
426 }
427 }
428
429 #endregion
430
431 #region Public Methods
432
433 /// <summary>
434 ///
435 /// </summary>
436 /// <param name="name"></param>
437 /// <param name="variableValue"></param>
438 public void RegisterVariable(string name, object variableValue)
439 {
440 if(name == null || variableValue == null)
441 {
442 return;
443 }
444
445 m_Variables[name.ToLower()] = variableValue;
446 }
447
448 /// <summary>
449 /// Performs validation on the xml source as well as evaluates conditional and flow expresions
450 /// </summary>
451 /// <exception cref="ArgumentException">For invalid use of conditional expressions or for invalid XML syntax. If a XmlValidatingReader is passed, then will also throw exceptions for non-schema-conforming xml</exception>
452 /// <param name="initialReader"></param>
453 /// <returns>the output xml </returns>
454 public string Process(XmlReader initialReader)
455 {
456 if(initialReader == null)
457 {
458 throw new ArgumentException("Invalid XML reader to pre-process");
459 }
460
461 IfContext context = new IfContext(true, true, IfState.None);
462 StringWriter xmlText = new StringWriter();
463 XmlTextWriter writer = new XmlTextWriter(xmlText);
464 writer.Formatting = Formatting.Indented;
465
466 // Create a queue of XML readers and add the initial
467 // reader to it. Then we process until we run out of
468 // readers which lets the <?include?> operation add more
469 // readers to generate a multi-file parser and not require
470 // XML fragments that a recursive version would use.
471 Stack<XmlReader> readerStack = new Stack<XmlReader>();
472 readerStack.Push(initialReader);
473
474 while(readerStack.Count > 0)
475 {
476 // Pop off the next reader.
477 XmlReader reader = readerStack.Pop();
478
479 // Process through this XML reader until it is
480 // completed (or it is replaced by the include
481 // operation).
482 while(reader.Read())
483 {
484 // The prebuild file has a series of processing
485 // instructions which allow for specific
486 // inclusions based on operating system or to
487 // include additional files.
488 if(reader.NodeType == XmlNodeType.ProcessingInstruction)
489 {
490 bool ignore = false;
491
492 switch(reader.LocalName)
493 {
494 case "include":
495 // use regular expressions to parse out the attributes.
496 MatchCollection matches = includeFileRegex.Matches(reader.Value);
497
498 // make sure there is only one file attribute.
499 if(matches.Count > 1)
500 {
501 throw new WarningException("An <?include ?> node was found, but it specified more than one file.");
502 }
503
504 if(matches.Count == 0)
505 {
506 throw new WarningException("An <?include ?> node was found, but it did not specify the file attribute.");
507 }
508
509 // ***** Adding for wildcard handling
510 // Push current reader back onto the stack.
511 readerStack.Push (reader);
512
513 // Pull the file out from the regex and make sure it is a valid file before using it.
514 string filename = matches[0].Groups[1].Value;
515
516 filename = String.Join (Path.DirectorySeparatorChar.ToString (), filename.Split (new char[] { '/', '\\' }));
517
518 if (!filename.Contains ("*")) {
519
520 FileInfo includeFile = new FileInfo (filename);
521 if (!includeFile.Exists) {
522 throw new WarningException ("Cannot include file: " + includeFile.FullName);
523 }
524
525 // Create a new reader object for this file. Then put the old reader back on the stack and start
526 // processing using this new XML reader.
527
528 XmlReader newReader = new XmlTextReader (includeFile.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
529 reader = newReader;
530 readerStack.Push (reader);
531
532 } else {
533 WildCardInclude (readerStack, filename);
534 }
535
536 reader = (XmlReader)readerStack.Pop ();
537 ignore = true;
538 break;
539
540 case "if":
541 m_IfStack.Push(context);
542 context = new IfContext(context.Keep & context.Active, ParseExpression(reader.Value), IfState.If);
543 ignore = true;
544 break;
545
546 case "elseif":
547 if(m_IfStack.Count == 0)
548 {
549 throw new WarningException("Unexpected 'elseif' outside of 'if'");
550 }
551 if(context.State != IfState.If && context.State != IfState.ElseIf)
552 {
553 throw new WarningException("Unexpected 'elseif' outside of 'if'");
554 }
555
556 context.State = IfState.ElseIf;
557 if(!context.EverKept)
558 {
559 context.Keep = ParseExpression(reader.Value);
560 }
561 else
562 {
563 context.Keep = false;
564 }
565
566 ignore = true;
567 break;
568
569 case "else":
570 if(m_IfStack.Count == 0)
571 {
572 throw new WarningException("Unexpected 'else' outside of 'if'");
573 }
574 if(context.State != IfState.If && context.State != IfState.ElseIf)
575 {
576 throw new WarningException("Unexpected 'else' outside of 'if'");
577 }
578
579 context.State = IfState.Else;
580 context.Keep = !context.EverKept;
581 ignore = true;
582 break;
583
584 case "endif":
585 if(m_IfStack.Count == 0)
586 {
587 throw new WarningException("Unexpected 'endif' outside of 'if'");
588 }
589
590 context = m_IfStack.Pop();
591 ignore = true;
592 break;
593 }
594
595 if(ignore)
596 {
597 continue;
598 }
599 }//end pre-proc instruction
600
601 if(!context.Active || !context.Keep)
602 {
603 continue;
604 }
605
606 switch(reader.NodeType)
607 {
608 case XmlNodeType.Element:
609 bool empty = reader.IsEmptyElement;
610 writer.WriteStartElement(reader.Name);
611
612 while (reader.MoveToNextAttribute())
613 {
614 writer.WriteAttributeString(reader.Name, reader.Value);
615 }
616
617 if(empty)
618 {
619 writer.WriteEndElement();
620 }
621
622 break;
623
624 case XmlNodeType.EndElement:
625 writer.WriteEndElement();
626 break;
627
628 case XmlNodeType.Text:
629 writer.WriteString(reader.Value);
630 break;
631
632 case XmlNodeType.CDATA:
633 writer.WriteCData(reader.Value);
634 break;
635
636 default:
637 break;
638 }
639 }
640
641 if(m_IfStack.Count != 0)
642 {
643 throw new WarningException("Mismatched 'if', 'endif' pair");
644 }
645 }
646
647 return xmlText.ToString();
648 }
649
650 #endregion
651 }
652}
diff --git a/Prebuild/src/Core/Targets/AutotoolsTarget.cs b/Prebuild/src/Core/Targets/AutotoolsTarget.cs
new file mode 100644
index 0000000..c52c4f1
--- /dev/null
+++ b/Prebuild/src/Core/Targets/AutotoolsTarget.cs
@@ -0,0 +1,1070 @@
1#region BSD License
2/*
3
4Copyright (c) 2004 - 2008
5Matthew Holmes (matthew@wildfiregames.com),
6Dan Moorehead (dan05a@gmail.com),
7Dave Hudson (jendave@yahoo.com),
8C.J. Adams-Collier (cjac@colliertech.org),
9
10Redistribution and use in source and binary forms, with or without
11modification, are permitted provided that the following conditions are
12met:
13
14* Redistributions of source code must retain the above copyright
15notice, this list of conditions and the following disclaimer.
16
17* Redistributions in binary form must reproduce the above copyright
18notice, this list of conditions and the following disclaimer in the
19documentation and/or other materials provided with the distribution.
20
21* The name of the author may not be used to endorse or promote
22products derived from this software without specific prior written
23permission.
24
25THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
26IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
29INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
34IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35POSSIBILITY OF SUCH DAMAGE.
36
37*/
38#endregion
39
40#region MIT X11 license
41
42/*
43 Portions of this file authored by Lluis Sanchez Gual
44
45 Copyright (C) 2006 Novell, Inc (http://www.novell.com)
46
47 Permission is hereby granted, free of charge, to any person obtaining
48 a copy of this software and associated documentation files (the
49 "Software"), to deal in the Software without restriction, including
50 without limitation the rights to use, copy, modify, merge, publish,
51 distribute, sublicense, and/or sell copies of the Software, and to
52 permit persons to whom the Software is furnished to do so, subject to
53 the following conditions:
54
55 The above copyright notice and this permission notice shall be
56 included in all copies or substantial portions of the Software.
57
58 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
59 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
61 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
62 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
63 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
64 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
65 */
66
67#endregion
68using System;
69using System.Collections.Generic;
70using System.IO;
71using System.Reflection;
72using System.Text;
73using System.Text.RegularExpressions;
74using System.Xml;
75using System.Xml.Xsl;
76using System.Net;
77using System.Diagnostics;
78
79using Prebuild.Core.Attributes;
80using Prebuild.Core.Interfaces;
81using Prebuild.Core.Nodes;
82using Prebuild.Core.Utilities;
83
84namespace Prebuild.Core.Targets
85{
86 public enum ClrVersion
87 {
88 Default,
89 Net_1_1,
90 Net_2_0
91 }
92
93 public class SystemPackage
94 {
95 string name;
96 string version;
97 string description;
98 string[] assemblies;
99 bool isInternal;
100 ClrVersion targetVersion;
101
102 public void Initialize(string name,
103 string version,
104 string description,
105 string[] assemblies,
106 ClrVersion targetVersion,
107 bool isInternal)
108 {
109 this.isInternal = isInternal;
110 this.name = name;
111 this.version = version;
112 this.assemblies = assemblies;
113 this.description = description;
114 this.targetVersion = targetVersion;
115 }
116
117 public string Name
118 {
119 get { return name; }
120 }
121
122 public string Version
123 {
124 get { return version; }
125 }
126
127 public string Description
128 {
129 get { return description; }
130 }
131
132 public ClrVersion TargetVersion
133 {
134 get { return targetVersion; }
135 }
136
137 // The package is part of the mono SDK
138 public bool IsCorePackage
139 {
140 get { return name == "mono"; }
141 }
142
143 // The package has been registered by an add-in, and is not installed
144 // in the system.
145 public bool IsInternalPackage
146 {
147 get { return isInternal; }
148 }
149
150 public string[] Assemblies
151 {
152 get { return assemblies; }
153 }
154
155 }
156
157
158 /// <summary>
159 ///
160 /// </summary>
161 [Target("autotools")]
162 public class AutotoolsTarget : ITarget
163 {
164 #region Fields
165
166 Kernel m_Kernel;
167 XmlDocument autotoolsDoc;
168 XmlUrlResolver xr;
169 System.Security.Policy.Evidence e;
170 readonly Dictionary<string, SystemPackage> assemblyPathToPackage = new Dictionary<string, SystemPackage>();
171 readonly Dictionary<string, string> assemblyFullNameToPath = new Dictionary<string, string>();
172 readonly Dictionary<string, SystemPackage> packagesHash = new Dictionary<string, SystemPackage>();
173 readonly List<SystemPackage> packages = new List<SystemPackage>();
174
175 #endregion
176
177 #region Private Methods
178
179 private static void mkdirDashP(string dirName)
180 {
181 DirectoryInfo di = new DirectoryInfo(dirName);
182 if (di.Exists)
183 return;
184
185 string parentDirName = System.IO.Path.GetDirectoryName(dirName);
186 DirectoryInfo parentDi = new DirectoryInfo(parentDirName);
187 if (!parentDi.Exists)
188 mkdirDashP(parentDirName);
189
190 di.Create();
191 }
192
193 private static void chkMkDir(string dirName)
194 {
195 System.IO.DirectoryInfo di =
196 new System.IO.DirectoryInfo(dirName);
197
198 if (!di.Exists)
199 di.Create();
200 }
201
202 private void transformToFile(string filename, XsltArgumentList argList, string nodeName)
203 {
204 // Create an XslTransform for this file
205 XslTransform templateTransformer =
206 new XslTransform();
207
208 // Load up the template
209 XmlNode templateNode =
210 autotoolsDoc.SelectSingleNode(nodeName + "/*");
211 templateTransformer.Load(templateNode.CreateNavigator(), xr, e);
212
213 // Create a writer for the transformed template
214 XmlTextWriter templateWriter =
215 new XmlTextWriter(filename, null);
216
217 // Perform transformation, writing the file
218 templateTransformer.Transform
219 (m_Kernel.CurrentDoc, argList, templateWriter, xr);
220 }
221
222 static string NormalizeAsmName(string name)
223 {
224 int i = name.IndexOf(", PublicKeyToken=null");
225 if (i != -1)
226 return name.Substring(0, i).Trim();
227 return name;
228 }
229
230 private void AddAssembly(string assemblyfile, SystemPackage package)
231 {
232 if (!File.Exists(assemblyfile))
233 return;
234
235 try
236 {
237 System.Reflection.AssemblyName an = System.Reflection.AssemblyName.GetAssemblyName(assemblyfile);
238 assemblyFullNameToPath[NormalizeAsmName(an.FullName)] = assemblyfile;
239 assemblyPathToPackage[assemblyfile] = package;
240 }
241 catch
242 {
243 }
244 }
245
246 private static List<string> GetAssembliesWithLibInfo(string line, string file)
247 {
248 List<string> references = new List<string>();
249 List<string> libdirs = new List<string>();
250 List<string> retval = new List<string>();
251 foreach (string piece in line.Split(' '))
252 {
253 if (piece.ToLower().Trim().StartsWith("/r:") || piece.ToLower().Trim().StartsWith("-r:"))
254 {
255 references.Add(ProcessPiece(piece.Substring(3).Trim(), file));
256 }
257 else if (piece.ToLower().Trim().StartsWith("/lib:") || piece.ToLower().Trim().StartsWith("-lib:"))
258 {
259 libdirs.Add(ProcessPiece(piece.Substring(5).Trim(), file));
260 }
261 }
262
263 foreach (string refrnc in references)
264 {
265 foreach (string libdir in libdirs)
266 {
267 if (File.Exists(libdir + Path.DirectorySeparatorChar + refrnc))
268 {
269 retval.Add(libdir + Path.DirectorySeparatorChar + refrnc);
270 }
271 }
272 }
273
274 return retval;
275 }
276
277 private static List<string> GetAssembliesWithoutLibInfo(string line, string file)
278 {
279 List<string> references = new List<string>();
280 foreach (string reference in line.Split(' '))
281 {
282 if (reference.ToLower().Trim().StartsWith("/r:") || reference.ToLower().Trim().StartsWith("-r:"))
283 {
284 string final_ref = reference.Substring(3).Trim();
285 references.Add(ProcessPiece(final_ref, file));
286 }
287 }
288 return references;
289 }
290
291 private static string ProcessPiece(string piece, string pcfile)
292 {
293 int start = piece.IndexOf("${");
294 if (start == -1)
295 return piece;
296
297 int end = piece.IndexOf("}");
298 if (end == -1)
299 return piece;
300
301 string variable = piece.Substring(start + 2, end - start - 2);
302 string interp = GetVariableFromPkgConfig(variable, Path.GetFileNameWithoutExtension(pcfile));
303 return ProcessPiece(piece.Replace("${" + variable + "}", interp), pcfile);
304 }
305
306 private static string GetVariableFromPkgConfig(string var, string pcfile)
307 {
308 ProcessStartInfo psi = new ProcessStartInfo("pkg-config");
309 psi.RedirectStandardOutput = true;
310 psi.UseShellExecute = false;
311 psi.Arguments = String.Format("--variable={0} {1}", var, pcfile);
312 Process p = new Process();
313 p.StartInfo = psi;
314 p.Start();
315 string ret = p.StandardOutput.ReadToEnd().Trim();
316 p.WaitForExit();
317 if (String.IsNullOrEmpty(ret))
318 return String.Empty;
319 return ret;
320 }
321
322 private void ParsePCFile(string pcfile)
323 {
324 // Don't register the package twice
325 string pname = Path.GetFileNameWithoutExtension(pcfile);
326 if (packagesHash.ContainsKey(pname))
327 return;
328
329 List<string> fullassemblies = null;
330 string version = "";
331 string desc = "";
332
333 SystemPackage package = new SystemPackage();
334
335 using (StreamReader reader = new StreamReader(pcfile))
336 {
337 string line;
338 while ((line = reader.ReadLine()) != null)
339 {
340 string lowerLine = line.ToLower();
341 if (lowerLine.StartsWith("libs:") && lowerLine.IndexOf(".dll") != -1)
342 {
343 string choppedLine = line.Substring(5).Trim();
344 if (choppedLine.IndexOf("-lib:") != -1 || choppedLine.IndexOf("/lib:") != -1)
345 {
346 fullassemblies = GetAssembliesWithLibInfo(choppedLine, pcfile);
347 }
348 else
349 {
350 fullassemblies = GetAssembliesWithoutLibInfo(choppedLine, pcfile);
351 }
352 }
353 else if (lowerLine.StartsWith("version:"))
354 {
355 // "version:".Length == 8
356 version = line.Substring(8).Trim();
357 }
358 else if (lowerLine.StartsWith("description:"))
359 {
360 // "description:".Length == 12
361 desc = line.Substring(12).Trim();
362 }
363 }
364 }
365
366 if (fullassemblies == null)
367 return;
368
369 foreach (string assembly in fullassemblies)
370 {
371 AddAssembly(assembly, package);
372 }
373
374 package.Initialize(pname,
375 version,
376 desc,
377 fullassemblies.ToArray(),
378 ClrVersion.Default,
379 false);
380 packages.Add(package);
381 packagesHash[pname] = package;
382 }
383
384 void RegisterSystemAssemblies(string prefix, string version, ClrVersion ver)
385 {
386 SystemPackage package = new SystemPackage();
387 List<string> list = new List<string>();
388
389 string dir = Path.Combine(prefix, version);
390 if (!Directory.Exists(dir))
391 {
392 return;
393 }
394
395 foreach (string assembly in Directory.GetFiles(dir, "*.dll"))
396 {
397 AddAssembly(assembly, package);
398 list.Add(assembly);
399 }
400
401 package.Initialize("mono",
402 version,
403 "The Mono runtime",
404 list.ToArray(),
405 ver,
406 false);
407 packages.Add(package);
408 }
409
410 void RunInitialization()
411 {
412 string versionDir;
413
414 if (Environment.Version.Major == 1)
415 {
416 versionDir = "1.0";
417 }
418 else
419 {
420 versionDir = "2.0";
421 }
422
423 //Pull up assemblies from the installed mono system.
424 string prefix = Path.GetDirectoryName(typeof(int).Assembly.Location);
425
426 if (prefix.IndexOf(Path.Combine("mono", versionDir)) == -1)
427 prefix = Path.Combine(prefix, "mono");
428 else
429 prefix = Path.GetDirectoryName(prefix);
430
431 RegisterSystemAssemblies(prefix, "1.0", ClrVersion.Net_1_1);
432 RegisterSystemAssemblies(prefix, "2.0", ClrVersion.Net_2_0);
433
434 string search_dirs = Environment.GetEnvironmentVariable("PKG_CONFIG_PATH");
435 string libpath = Environment.GetEnvironmentVariable("PKG_CONFIG_LIBPATH");
436
437 if (String.IsNullOrEmpty(libpath))
438 {
439 string path_dirs = Environment.GetEnvironmentVariable("PATH");
440 foreach (string pathdir in path_dirs.Split(Path.PathSeparator))
441 {
442 if (pathdir == null)
443 continue;
444 if (File.Exists(pathdir + Path.DirectorySeparatorChar + "pkg-config"))
445 {
446 libpath = Path.Combine(pathdir, "..");
447 libpath = Path.Combine(libpath, "lib");
448 libpath = Path.Combine(libpath, "pkgconfig");
449 break;
450 }
451 }
452 }
453 search_dirs += Path.PathSeparator + libpath;
454 if (!string.IsNullOrEmpty(search_dirs))
455 {
456 List<string> scanDirs = new List<string>();
457 foreach (string potentialDir in search_dirs.Split(Path.PathSeparator))
458 {
459 if (!scanDirs.Contains(potentialDir))
460 scanDirs.Add(potentialDir);
461 }
462 foreach (string pcdir in scanDirs)
463 {
464 if (pcdir == null)
465 continue;
466
467 if (Directory.Exists(pcdir))
468 {
469 foreach (string pcfile in Directory.GetFiles(pcdir, "*.pc"))
470 {
471 ParsePCFile(pcfile);
472 }
473 }
474 }
475 }
476 }
477
478 private void WriteCombine(SolutionNode solution)
479 {
480 #region "Create Solution directory if it doesn't exist"
481 string solutionDir = Path.Combine(solution.FullPath,
482 Path.Combine("autotools",
483 solution.Name));
484 chkMkDir(solutionDir);
485 #endregion
486
487 #region "Write Solution-level files"
488 XsltArgumentList argList = new XsltArgumentList();
489 argList.AddParam("solutionName", "", solution.Name);
490 // $solutionDir is $rootDir/$solutionName/
491 transformToFile(Path.Combine(solutionDir, "configure.ac"),
492 argList, "/Autotools/SolutionConfigureAc");
493 transformToFile(Path.Combine(solutionDir, "Makefile.am"),
494 argList, "/Autotools/SolutionMakefileAm");
495 transformToFile(Path.Combine(solutionDir, "autogen.sh"),
496 argList, "/Autotools/SolutionAutogenSh");
497 #endregion
498
499 foreach (ProjectNode project in solution.ProjectsTableOrder)
500 {
501 m_Kernel.Log.Write(String.Format("Writing project: {0}",
502 project.Name));
503 WriteProject(solution, project);
504 }
505 }
506
507 private static string FindFileReference(string refName,
508 ProjectNode project)
509 {
510 foreach (ReferencePathNode refPath in project.ReferencePaths)
511 {
512 string fullPath =
513 Helper.MakeFilePath(refPath.Path, refName, "dll");
514
515 if (File.Exists(fullPath)) {
516 return fullPath;
517 }
518 }
519
520 return null;
521 }
522
523 /// <summary>
524 /// Gets the XML doc file.
525 /// </summary>
526 /// <param name="project">The project.</param>
527 /// <param name="conf">The conf.</param>
528 /// <returns></returns>
529 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
530 {
531 if (conf == null)
532 {
533 throw new ArgumentNullException("conf");
534 }
535 if (project == null)
536 {
537 throw new ArgumentNullException("project");
538 }
539 string docFile = (string)conf.Options["XmlDocFile"];
540 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
541 // {
542 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
543 // }
544 return docFile;
545 }
546
547 /// <summary>
548 /// Normalizes the path.
549 /// </summary>
550 /// <param name="path">The path.</param>
551 /// <returns></returns>
552 public static string NormalizePath(string path)
553 {
554 if (path == null)
555 {
556 return "";
557 }
558
559 StringBuilder tmpPath;
560
561 if (Core.Parse.Preprocessor.GetOS() == "Win32")
562 {
563 tmpPath = new StringBuilder(path.Replace('\\', '/'));
564 tmpPath.Replace("/", @"\\");
565 }
566 else
567 {
568 tmpPath = new StringBuilder(path.Replace('\\', '/'));
569 tmpPath = tmpPath.Replace('/', Path.DirectorySeparatorChar);
570 }
571 return tmpPath.ToString();
572 }
573
574 private void WriteProject(SolutionNode solution, ProjectNode project)
575 {
576 string solutionDir = Path.Combine(solution.FullPath, Path.Combine("autotools", solution.Name));
577 string projectDir = Path.Combine(solutionDir, project.Name);
578 string projectVersion = project.Version;
579 bool hasAssemblyConfig = false;
580 chkMkDir(projectDir);
581
582 List<string>
583 compiledFiles = new List<string>(),
584 contentFiles = new List<string>(),
585 embeddedFiles = new List<string>(),
586
587 binaryLibs = new List<string>(),
588 pkgLibs = new List<string>(),
589 systemLibs = new List<string>(),
590 runtimeLibs = new List<string>(),
591
592 extraDistFiles = new List<string>(),
593 localCopyTargets = new List<string>();
594
595 // If there exists a .config file for this assembly, copy
596 // it to the project folder
597
598 // TODO: Support copying .config.osx files
599 // TODO: support processing the .config file for native library deps
600 string projectAssemblyName = project.Name;
601 if (project.AssemblyName != null)
602 projectAssemblyName = project.AssemblyName;
603
604 if (File.Exists(Path.Combine(project.FullPath, projectAssemblyName) + ".dll.config"))
605 {
606 hasAssemblyConfig = true;
607 System.IO.File.Copy(Path.Combine(project.FullPath, projectAssemblyName + ".dll.config"), Path.Combine(projectDir, projectAssemblyName + ".dll.config"), true);
608 extraDistFiles.Add(project.AssemblyName + ".dll.config");
609 }
610
611 foreach (ConfigurationNode conf in project.Configurations)
612 {
613 if (conf.Options.KeyFile != string.Empty)
614 {
615 // Copy snk file into the project's directory
616 // Use the snk from the project directory directly
617 string source = Path.Combine(project.FullPath, conf.Options.KeyFile);
618 string keyFile = conf.Options.KeyFile;
619 Regex re = new Regex(".*/");
620 keyFile = re.Replace(keyFile, "");
621
622 string dest = Path.Combine(projectDir, keyFile);
623 // Tell the user if there's a problem copying the file
624 try
625 {
626 mkdirDashP(System.IO.Path.GetDirectoryName(dest));
627 System.IO.File.Copy(source, dest, true);
628 }
629 catch (System.IO.IOException e)
630 {
631 Console.WriteLine(e.Message);
632 }
633 }
634 }
635
636 // Copy compiled, embedded and content files into the project's directory
637 foreach (string filename in project.Files)
638 {
639 string source = Path.Combine(project.FullPath, filename);
640 string dest = Path.Combine(projectDir, filename);
641
642 if (filename.Contains("AssemblyInfo.cs"))
643 {
644 // If we've got an AssemblyInfo.cs, pull the version number from it
645 string[] sources = { source };
646 string[] args = { "" };
647 Microsoft.CSharp.CSharpCodeProvider cscp =
648 new Microsoft.CSharp.CSharpCodeProvider();
649
650 string tempAssemblyFile = Path.Combine(Path.GetTempPath(), project.Name + "-temp.dll");
651 System.CodeDom.Compiler.CompilerParameters cparam =
652 new System.CodeDom.Compiler.CompilerParameters(args, tempAssemblyFile);
653
654 System.CodeDom.Compiler.CompilerResults cr =
655 cscp.CompileAssemblyFromFile(cparam, sources);
656
657 foreach (System.CodeDom.Compiler.CompilerError error in cr.Errors)
658 Console.WriteLine("Error! '{0}'", error.ErrorText);
659
660 try {
661 string projectFullName = cr.CompiledAssembly.FullName;
662 Regex verRegex = new Regex("Version=([\\d\\.]+)");
663 Match verMatch = verRegex.Match(projectFullName);
664 if (verMatch.Success)
665 projectVersion = verMatch.Groups[1].Value;
666 }catch{
667 Console.WriteLine("Couldn't compile AssemblyInfo.cs");
668 }
669
670 // Clean up the temp file
671 try
672 {
673 if (File.Exists(tempAssemblyFile))
674 File.Delete(tempAssemblyFile);
675 }
676 catch
677 {
678 Console.WriteLine("Error! '{0}'", e);
679 }
680
681 }
682
683 // Tell the user if there's a problem copying the file
684 try
685 {
686 mkdirDashP(System.IO.Path.GetDirectoryName(dest));
687 System.IO.File.Copy(source, dest, true);
688 }
689 catch (System.IO.IOException e)
690 {
691 Console.WriteLine(e.Message);
692 }
693
694 switch (project.Files.GetBuildAction(filename))
695 {
696 case BuildAction.Compile:
697 compiledFiles.Add(filename);
698 break;
699 case BuildAction.Content:
700 contentFiles.Add(filename);
701 extraDistFiles.Add(filename);
702 break;
703 case BuildAction.EmbeddedResource:
704 embeddedFiles.Add(filename);
705 break;
706 }
707 }
708
709 // Set up references
710 for (int refNum = 0; refNum < project.References.Count; refNum++)
711 {
712 ReferenceNode refr = project.References[refNum];
713 Assembly refAssembly = Assembly.LoadWithPartialName(refr.Name);
714
715 /* Determine which pkg-config (.pc) file refers to
716 this assembly */
717
718 SystemPackage package = null;
719
720 if (packagesHash.ContainsKey(refr.Name))
721 {
722 package = packagesHash[refr.Name];
723
724 }
725 else
726 {
727 string assemblyFullName = string.Empty;
728 if (refAssembly != null)
729 assemblyFullName = refAssembly.FullName;
730
731 string assemblyFileName = string.Empty;
732 if (assemblyFullName != string.Empty &&
733 assemblyFullNameToPath.ContainsKey(assemblyFullName)
734 )
735 assemblyFileName =
736 assemblyFullNameToPath[assemblyFullName];
737
738 if (assemblyFileName != string.Empty &&
739 assemblyPathToPackage.ContainsKey(assemblyFileName)
740 )
741 package = assemblyPathToPackage[assemblyFileName];
742
743 }
744
745 /* If we know the .pc file and it is not "mono"
746 (already in the path), add a -pkg: argument */
747
748 if (package != null &&
749 package.Name != "mono" &&
750 !pkgLibs.Contains(package.Name)
751 )
752 pkgLibs.Add(package.Name);
753
754 string fileRef =
755 FindFileReference(refr.Name, (ProjectNode)refr.Parent);
756
757 if (refr.LocalCopy ||
758 solution.ProjectsTable.ContainsKey(refr.Name) ||
759 fileRef != null ||
760 refr.Path != null
761 )
762 {
763
764 /* Attempt to copy the referenced lib to the
765 project's directory */
766
767 string filename = refr.Name + ".dll";
768 string source = filename;
769 if (refr.Path != null)
770 source = Path.Combine(refr.Path, source);
771 source = Path.Combine(project.FullPath, source);
772 string dest = Path.Combine(projectDir, filename);
773
774 /* Since we depend on this binary dll to build, we
775 * will add a compile- time dependency on the
776 * copied dll, and add the dll to the list of
777 * files distributed with this package
778 */
779
780 binaryLibs.Add(refr.Name + ".dll");
781 extraDistFiles.Add(refr.Name + ".dll");
782
783 // TODO: Support copying .config.osx files
784 // TODO: Support for determining native dependencies
785 if (File.Exists(source + ".config"))
786 {
787 System.IO.File.Copy(source + ".config", Path.GetDirectoryName(dest), true);
788 extraDistFiles.Add(refr.Name + ".dll.config");
789 }
790
791 try
792 {
793 System.IO.File.Copy(source, dest, true);
794 }
795 catch (System.IO.IOException)
796 {
797 if (solution.ProjectsTable.ContainsKey(refr.Name)){
798
799 /* If an assembly is referenced, marked for
800 * local copy, in the list of projects for
801 * this solution, but does not exist, put a
802 * target into the Makefile.am to build the
803 * assembly and copy it to this project's
804 * directory
805 */
806
807 ProjectNode sourcePrj =
808 ((solution.ProjectsTable[refr.Name]));
809
810 string target =
811 String.Format("{0}:\n" +
812 "\t$(MAKE) -C ../{1}\n" +
813 "\tln ../{2}/$@ $@\n",
814 filename,
815 sourcePrj.Name,
816 sourcePrj.Name );
817
818 localCopyTargets.Add(target);
819 }
820 }
821 }
822 else if( !pkgLibs.Contains(refr.Name) )
823 {
824 // Else, let's assume it's in the GAC or the lib path
825 string assemName = string.Empty;
826 int index = refr.Name.IndexOf(",");
827
828 if (index > 0)
829 assemName = refr.Name.Substring(0, index);
830 else
831 assemName = refr.Name;
832
833 m_Kernel.Log.Write(String.Format(
834 "Warning: Couldn't find an appropriate assembly " +
835 "for reference:\n'{0}'", refr.Name
836 ));
837 systemLibs.Add(assemName);
838 }
839 }
840
841 const string lineSep = " \\\n\t";
842 string compiledFilesString = string.Empty;
843 if (compiledFiles.Count > 0)
844 compiledFilesString =
845 lineSep + string.Join(lineSep, compiledFiles.ToArray());
846
847 string embeddedFilesString = "";
848 if (embeddedFiles.Count > 0)
849 embeddedFilesString =
850 lineSep + string.Join(lineSep, embeddedFiles.ToArray());
851
852 string contentFilesString = "";
853 if (contentFiles.Count > 0)
854 contentFilesString =
855 lineSep + string.Join(lineSep, contentFiles.ToArray());
856
857 string extraDistFilesString = "";
858 if (extraDistFiles.Count > 0)
859 extraDistFilesString =
860 lineSep + string.Join(lineSep, extraDistFiles.ToArray());
861
862 string pkgLibsString = "";
863 if (pkgLibs.Count > 0)
864 pkgLibsString =
865 lineSep + string.Join(lineSep, pkgLibs.ToArray());
866
867 string binaryLibsString = "";
868 if (binaryLibs.Count > 0)
869 binaryLibsString =
870 lineSep + string.Join(lineSep, binaryLibs.ToArray());
871
872 string systemLibsString = "";
873 if (systemLibs.Count > 0)
874 systemLibsString =
875 lineSep + string.Join(lineSep, systemLibs.ToArray());
876
877 string localCopyTargetsString = "";
878 if (localCopyTargets.Count > 0)
879 localCopyTargetsString =
880 string.Join("\n", localCopyTargets.ToArray());
881
882 string monoPath = "";
883 foreach (string runtimeLib in runtimeLibs)
884 {
885 monoPath += ":`pkg-config --variable=libdir " + runtimeLib + "`";
886 }
887
888 // Add the project name to the list of transformation
889 // parameters
890 XsltArgumentList argList = new XsltArgumentList();
891 argList.AddParam("projectName", "", project.Name);
892 argList.AddParam("solutionName", "", solution.Name);
893 argList.AddParam("assemblyName", "", projectAssemblyName);
894 argList.AddParam("compiledFiles", "", compiledFilesString);
895 argList.AddParam("embeddedFiles", "", embeddedFilesString);
896 argList.AddParam("contentFiles", "", contentFilesString);
897 argList.AddParam("extraDistFiles", "", extraDistFilesString);
898 argList.AddParam("pkgLibs", "", pkgLibsString);
899 argList.AddParam("binaryLibs", "", binaryLibsString);
900 argList.AddParam("systemLibs", "", systemLibsString);
901 argList.AddParam("monoPath", "", monoPath);
902 argList.AddParam("localCopyTargets", "", localCopyTargetsString);
903 argList.AddParam("projectVersion", "", projectVersion);
904 argList.AddParam("hasAssemblyConfig", "", hasAssemblyConfig ? "true" : "");
905
906 // Transform the templates
907 transformToFile(Path.Combine(projectDir, "configure.ac"), argList, "/Autotools/ProjectConfigureAc");
908 transformToFile(Path.Combine(projectDir, "Makefile.am"), argList, "/Autotools/ProjectMakefileAm");
909 transformToFile(Path.Combine(projectDir, "autogen.sh"), argList, "/Autotools/ProjectAutogenSh");
910
911 if (project.Type == Core.Nodes.ProjectType.Library)
912 transformToFile(Path.Combine(projectDir, project.Name + ".pc.in"), argList, "/Autotools/ProjectPcIn");
913 if (project.Type == Core.Nodes.ProjectType.Exe || project.Type == Core.Nodes.ProjectType.WinExe)
914 transformToFile(Path.Combine(projectDir, project.Name.ToLower() + ".in"), argList, "/Autotools/ProjectWrapperScriptIn");
915 }
916
917 private void CleanProject(ProjectNode project)
918 {
919 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
920 string projectFile = Helper.MakeFilePath(project.FullPath, "Include", "am");
921 Helper.DeleteIfExists(projectFile);
922 }
923
924 private void CleanSolution(SolutionNode solution)
925 {
926 m_Kernel.Log.Write("Cleaning Autotools make files for", solution.Name);
927
928 string slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am");
929 Helper.DeleteIfExists(slnFile);
930
931 slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "in");
932 Helper.DeleteIfExists(slnFile);
933
934 slnFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac");
935 Helper.DeleteIfExists(slnFile);
936
937 slnFile = Helper.MakeFilePath(solution.FullPath, "configure");
938 Helper.DeleteIfExists(slnFile);
939
940 slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile");
941 Helper.DeleteIfExists(slnFile);
942
943 foreach (ProjectNode project in solution.Projects)
944 {
945 CleanProject(project);
946 }
947
948 m_Kernel.Log.Write("");
949 }
950
951 #endregion
952
953 #region ITarget Members
954
955 /// <summary>
956 /// Writes the specified kern.
957 /// </summary>
958 /// <param name="kern">The kern.</param>
959 public void Write(Kernel kern)
960 {
961 if (kern == null)
962 {
963 throw new ArgumentNullException("kern");
964 }
965 m_Kernel = kern;
966 m_Kernel.Log.Write("Parsing system pkg-config files");
967 RunInitialization();
968
969 const string streamName = "autotools.xml";
970 string fqStreamName = String.Format("Prebuild.data.{0}",
971 streamName
972 );
973
974 // Retrieve stream for the autotools template XML
975 Stream autotoolsStream = Assembly.GetExecutingAssembly()
976 .GetManifestResourceStream(fqStreamName);
977
978 if(autotoolsStream == null) {
979
980 /*
981 * try without the default namespace prepended, in
982 * case prebuild.exe assembly was compiled with
983 * something other than Visual Studio .NET
984 */
985
986 autotoolsStream = Assembly.GetExecutingAssembly()
987 .GetManifestResourceStream(streamName);
988 if(autotoolsStream == null){
989 string errStr =
990 String.Format("Could not find embedded resource file:\n" +
991 "'{0}' or '{1}'",
992 streamName, fqStreamName
993 );
994
995 m_Kernel.Log.Write(errStr);
996
997 throw new System.Reflection.TargetException(errStr);
998 }
999 }
1000
1001 // Create an XML URL Resolver with default credentials
1002 xr = new System.Xml.XmlUrlResolver();
1003 xr.Credentials = CredentialCache.DefaultCredentials;
1004
1005 // Create a default evidence - no need to limit access
1006 e = new System.Security.Policy.Evidence();
1007
1008 // Load the autotools XML
1009 autotoolsDoc = new XmlDocument();
1010 autotoolsDoc.Load(autotoolsStream);
1011
1012 /* rootDir is the filesystem location where the Autotools
1013 * build tree will be created - for now we'll make it
1014 * $PWD/autotools
1015 */
1016
1017 string pwd = Directory.GetCurrentDirectory();
1018 //string pwd = System.Environment.GetEnvironmentVariable("PWD");
1019 //if (pwd.Length != 0)
1020 //{
1021 string rootDir = Path.Combine(pwd, "autotools");
1022 //}
1023 //else
1024 //{
1025 // pwd = Assembly.GetExecutingAssembly()
1026 //}
1027 chkMkDir(rootDir);
1028
1029 foreach (SolutionNode solution in kern.Solutions)
1030 {
1031 m_Kernel.Log.Write(String.Format("Writing solution: {0}",
1032 solution.Name));
1033 WriteCombine(solution);
1034 }
1035 m_Kernel = null;
1036 }
1037
1038 /// <summary>
1039 /// Cleans the specified kern.
1040 /// </summary>
1041 /// <param name="kern">The kern.</param>
1042 public virtual void Clean(Kernel kern)
1043 {
1044 if (kern == null)
1045 {
1046 throw new ArgumentNullException("kern");
1047 }
1048 m_Kernel = kern;
1049 foreach (SolutionNode sol in kern.Solutions)
1050 {
1051 CleanSolution(sol);
1052 }
1053 m_Kernel = null;
1054 }
1055
1056 /// <summary>
1057 /// Gets the name.
1058 /// </summary>
1059 /// <value>The name.</value>
1060 public string Name
1061 {
1062 get
1063 {
1064 return "autotools";
1065 }
1066 }
1067
1068 #endregion
1069 }
1070}
diff --git a/Prebuild/src/Core/Targets/DebugTarget.cs b/Prebuild/src/Core/Targets/DebugTarget.cs
new file mode 100644
index 0000000..be8aea9
--- /dev/null
+++ b/Prebuild/src/Core/Targets/DebugTarget.cs
@@ -0,0 +1,102 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-09-20 03:42:51 -0400 (Wed, 20 Sep 2006) $
31 * $Revision: 164 $
32 */
33#endregion
34
35using System;
36
37using Prebuild.Core.Attributes;
38using Prebuild.Core.Interfaces;
39using Prebuild.Core.Nodes;
40
41#if (DEBUG && _DEBUG_TARGET)
42namespace Prebuild.Core.Targets
43{
44 [Target("debug")]
45 public class DebugTarget : ITarget
46 {
47#region Fields
48
49 private Kernel m_Kernel = null;
50
51#endregion
52
53#region ITarget Members
54
55 public void Write()
56 {
57 foreach(SolutionNode s in m_Kernel.Solutions)
58 {
59 Console.WriteLine("Solution [ {0}, {1} ]", s.Name, s.Path);
60 foreach(string file in s.Files)
61{
62 Console.WriteLine("\tFile [ {0} ]", file);
63}
64
65 foreach(ProjectNode proj in s.Projects)
66 {
67 Console.WriteLine("\tProject [ {0}, {1}. {2} ]", proj.Name, proj.Path, proj.Language);
68 foreach(string file in proj.Files)
69 Console.WriteLine("\t\tFile [ {0} ]", file);
70 }
71 }
72 }
73
74 public void Clean()
75 {
76 Console.WriteLine("Not implemented");
77 }
78
79 public string Name
80 {
81 get
82 {
83 return "debug";
84 }
85 }
86
87 public Kernel Kernel
88 {
89 get
90 {
91 return m_Kernel;
92 }
93 set
94 {
95 m_Kernel = value;
96 }
97 }
98
99#endregion
100 }
101}
102#endif
diff --git a/Prebuild/src/Core/Targets/MakefileTarget.cs b/Prebuild/src/Core/Targets/MakefileTarget.cs
new file mode 100644
index 0000000..8fe1c44
--- /dev/null
+++ b/Prebuild/src/Core/Targets/MakefileTarget.cs
@@ -0,0 +1,469 @@
1#region BSD License
2/*
3Copyright (c) 2004 Crestez Leonard (cleonard@go.ro)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Text.RegularExpressions;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 [Target("makefile")]
38 public class MakefileTarget : ITarget
39 {
40 #region Fields
41
42 private Kernel m_Kernel = null;
43
44 #endregion
45
46 #region Private Methods
47
48 // This converts a path relative to the path of a project to
49 // a path relative to the solution path.
50 private string NicePath(ProjectNode proj, string path)
51 {
52 string res;
53 SolutionNode solution = (SolutionNode)proj.Parent;
54 res = Path.Combine(Helper.NormalizePath(proj.FullPath, '/'), Helper.NormalizePath(path, '/'));
55 res = Helper.NormalizePath(res, '/');
56 res = res.Replace("/./", "/");
57 while (res.IndexOf("/../") >= 0)
58 {
59 int a = res.IndexOf("/../");
60 int b = res.LastIndexOf("/", a - 1);
61 res = res.Remove(b, a - b + 3);
62 }
63 res = Helper.MakePathRelativeTo(solution.FullPath, res);
64 if (res.StartsWith("./"))
65 res = res.Substring(2, res.Length - 2);
66 res = Helper.NormalizePath(res, '/');
67 return res;
68 }
69
70 private void WriteProjectFiles(StreamWriter f, SolutionNode solution, ProjectNode project)
71 {
72 // Write list of source code files
73 f.WriteLine("SOURCES_{0} = \\", project.Name);
74 foreach (string file in project.Files)
75 if (project.Files.GetBuildAction(file) == BuildAction.Compile)
76 f.WriteLine("\t{0} \\", NicePath(project, file));
77 f.WriteLine();
78
79 // Write list of resource files
80 f.WriteLine("RESOURCES_{0} = \\", project.Name);
81 foreach (string file in project.Files)
82 if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource)
83 {
84 string path = NicePath(project, file);
85 f.WriteLine("\t-resource:{0},{1} \\", path, Path.GetFileName(path));
86 }
87 f.WriteLine();
88
89 // There's also Content and None in BuildAction.
90 // What am I supposed to do with that?
91 }
92
93 private string FindFileReference(string refName, ProjectNode project)
94 {
95 foreach (ReferencePathNode refPath in project.ReferencePaths)
96 {
97 string fullPath = NicePath(project, Helper.MakeFilePath(refPath.Path, refName, "dll"));
98 if (File.Exists(fullPath))
99 return fullPath;
100 }
101 return null;
102 }
103
104 private void WriteProjectReferences(StreamWriter f, SolutionNode solution, ProjectNode project)
105 {
106 f.WriteLine("REFERENCES_{0} = \\", project.Name);
107 foreach (ReferenceNode refr in project.References)
108 {
109 string path;
110 // Project references change with configurations.
111 if (solution.ProjectsTable.ContainsKey(refr.Name))
112 continue;
113 path = FindFileReference(refr.Name, project);
114 if (path != null)
115 f.WriteLine("\t-r:{0} \\", path);
116 else
117 f.WriteLine("\t-r:{0} \\", refr.Name);
118 }
119 f.WriteLine();
120 }
121
122 private void WriteProjectDependencies(StreamWriter f, SolutionNode solution, ProjectNode project)
123 {
124 f.WriteLine("DEPENDENCIES_{0} = \\", project.Name);
125 f.WriteLine("\t$(SOURCES_{0}) \\", project.Name);
126 foreach (string file in project.Files)
127 if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource)
128 f.WriteLine("\t{0} \\", NicePath(project, file));
129 f.WriteLine();
130 }
131
132 private string ProjectTypeToExtension(ProjectType t)
133 {
134 if (t == ProjectType.Exe || t == ProjectType.WinExe)
135 {
136 return "exe";
137 }
138 else if (t == ProjectType.Library)
139 {
140 return "dll";
141 }
142 else
143 {
144 throw new FatalException("Bad ProjectType: {0}", t);
145 }
146 }
147
148 private string ProjectTypeToTarget(ProjectType t)
149 {
150 if (t == ProjectType.Exe)
151 {
152 return "exe";
153 }
154 else if (t == ProjectType.WinExe)
155 {
156 return "winexe";
157 }
158 else if (t == ProjectType.Library)
159 {
160 return "library";
161 }
162 else
163 {
164 throw new FatalException("Bad ProjectType: {0}", t);
165 }
166 }
167
168 private string ProjectOutput(ProjectNode project, ConfigurationNode config)
169 {
170 string filepath;
171 filepath = Helper.MakeFilePath((string)config.Options["OutputPath"],
172 project.AssemblyName, ProjectTypeToExtension(project.Type));
173 return NicePath(project, filepath);
174 }
175
176 // Returns true if two configs in one project have the same output.
177 private bool ProjectClashes(ProjectNode project)
178 {
179 foreach (ConfigurationNode conf1 in project.Configurations)
180 foreach (ConfigurationNode conf2 in project.Configurations)
181 if (ProjectOutput(project, conf1) == ProjectOutput(project, conf2) && conf1 != conf2)
182 {
183 m_Kernel.Log.Write("Warning: Configurations {0} and {1} for project {2} output the same file",
184 conf1.Name, conf2.Name, project.Name);
185 m_Kernel.Log.Write("Warning: I'm going to use some timestamps(extra empty files).");
186 return true;
187 }
188 return false;
189 }
190
191 private void WriteProject(StreamWriter f, SolutionNode solution, ProjectNode project)
192 {
193 f.WriteLine("# This is for project {0}", project.Name);
194 f.WriteLine();
195
196 WriteProjectFiles(f, solution, project);
197 WriteProjectReferences(f, solution, project);
198 WriteProjectDependencies(f, solution, project);
199
200 bool clash = ProjectClashes(project);
201
202 foreach (ConfigurationNode conf in project.Configurations)
203 {
204 string outpath = ProjectOutput(project, conf);
205 string filesToClean = outpath;
206
207 if (clash)
208 {
209 f.WriteLine("{0}-{1}: .{0}-{1}-timestamp", project.Name, conf.Name);
210 f.WriteLine();
211 f.Write(".{0}-{1}-timestamp: $(DEPENDENCIES_{0})", project.Name, conf.Name);
212 }
213 else
214 {
215 f.WriteLine("{0}-{1}: {2}", project.Name, conf.Name, outpath);
216 f.WriteLine();
217 f.Write("{2}: $(DEPENDENCIES_{0})", project.Name, conf.Name, outpath);
218 }
219 // Dependencies on other projects.
220 foreach (ReferenceNode refr in project.References)
221 if (solution.ProjectsTable.ContainsKey(refr.Name))
222 {
223 ProjectNode refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
224 if (ProjectClashes(refProj))
225 f.Write(" .{0}-{1}-timestamp", refProj.Name, conf.Name);
226 else
227 f.Write(" {0}", ProjectOutput(refProj, conf));
228 }
229 f.WriteLine();
230
231 // make directory for output.
232 if (Path.GetDirectoryName(outpath) != "")
233 {
234 f.WriteLine("\tmkdir -p {0}", Path.GetDirectoryName(outpath));
235 }
236 // mcs command line.
237 f.Write("\tgmcs", project.Name);
238 f.Write(" -warn:{0}", conf.Options["WarningLevel"]);
239 if ((bool)conf.Options["DebugInformation"])
240 f.Write(" -debug");
241 if ((bool)conf.Options["AllowUnsafe"])
242 f.Write(" -unsafe");
243 if ((bool)conf.Options["CheckUnderflowOverflow"])
244 f.Write(" -checked");
245 if (project.StartupObject != "")
246 f.Write(" -main:{0}", project.StartupObject);
247 if ((string)conf.Options["CompilerDefines"] != "")
248 {
249 f.Write(" -define:\"{0}\"", conf.Options["CompilerDefines"]);
250 }
251
252 f.Write(" -target:{0} -out:{1}", ProjectTypeToTarget(project.Type), outpath);
253
254 // Build references to other projects. Now that sux.
255 // We have to reference the other project in the same conf.
256 foreach (ReferenceNode refr in project.References)
257 if (solution.ProjectsTable.ContainsKey(refr.Name))
258 {
259 ProjectNode refProj;
260 refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
261 f.Write(" -r:{0}", ProjectOutput(refProj, conf));
262 }
263
264 f.Write(" $(REFERENCES_{0})", project.Name);
265 f.Write(" $(RESOURCES_{0})", project.Name);
266 f.Write(" $(SOURCES_{0})", project.Name);
267 f.WriteLine();
268
269 // Copy references with localcopy.
270 foreach (ReferenceNode refr in project.References)
271 if (refr.LocalCopy)
272 {
273 string outPath, srcPath, destPath;
274 outPath = Helper.NormalizePath((string)conf.Options["OutputPath"]);
275 if (solution.ProjectsTable.ContainsKey(refr.Name))
276 {
277 ProjectNode refProj;
278 refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
279 srcPath = ProjectOutput(refProj, conf);
280 destPath = Path.Combine(outPath, Path.GetFileName(srcPath));
281 destPath = NicePath(project, destPath);
282 if (srcPath != destPath)
283 {
284 f.WriteLine("\tcp -f {0} {1}", srcPath, destPath);
285 filesToClean += " " + destPath;
286 }
287 continue;
288 }
289 srcPath = FindFileReference(refr.Name, project);
290 if (srcPath != null)
291 {
292 destPath = Path.Combine(outPath, Path.GetFileName(srcPath));
293 destPath = NicePath(project, destPath);
294 f.WriteLine("\tcp -f {0} {1}", srcPath, destPath);
295 filesToClean += " " + destPath;
296 }
297 }
298
299 if (clash)
300 {
301 filesToClean += String.Format(" .{0}-{1}-timestamp", project.Name, conf.Name);
302 f.WriteLine("\ttouch .{0}-{1}-timestamp", project.Name, conf.Name);
303 f.Write("\trm -rf");
304 foreach (ConfigurationNode otherConf in project.Configurations)
305 if (otherConf != conf)
306 f.WriteLine(" .{0}-{1}-timestamp", project.Name, otherConf.Name);
307 f.WriteLine();
308 }
309 f.WriteLine();
310 f.WriteLine("{0}-{1}-clean:", project.Name, conf.Name);
311 f.WriteLine("\trm -rf {0}", filesToClean);
312 f.WriteLine();
313 }
314 }
315
316 private void WriteIntro(StreamWriter f, SolutionNode solution)
317 {
318 f.WriteLine("# Makefile for {0} generated by Prebuild ( http://dnpb.sf.net )", solution.Name);
319 f.WriteLine("# Do not edit.");
320 f.WriteLine("#");
321
322 f.Write("# Configurations:");
323 foreach (ConfigurationNode conf in solution.Configurations)
324 f.Write(" {0}", conf.Name);
325 f.WriteLine();
326
327 f.WriteLine("# Projects:");
328 foreach (ProjectNode proj in solution.Projects)
329 f.WriteLine("#\t{0}", proj.Name);
330
331 f.WriteLine("#");
332 f.WriteLine("# Building:");
333 f.WriteLine("#\t\"make\" to build everything under the default(first) configuration");
334 f.WriteLine("#\t\"make CONF\" to build every project under configuration CONF");
335 f.WriteLine("#\t\"make PROJ\" to build project PROJ under the default(first) configuration");
336 f.WriteLine("#\t\"make PROJ-CONF\" to build project PROJ under configuration CONF");
337 f.WriteLine("#");
338 f.WriteLine("# Cleaning (removing results of build):");
339 f.WriteLine("#\t\"make clean\" to clean everything, that's what you probably want");
340 f.WriteLine("#\t\"make CONF\" to clean everything for a configuration");
341 f.WriteLine("#\t\"make PROJ\" to clean everything for a project");
342 f.WriteLine("#\t\"make PROJ-CONF\" to clea project PROJ under configuration CONF");
343 f.WriteLine();
344 }
345
346 private void WritePhony(StreamWriter f, SolutionNode solution)
347 {
348 string defconf = "";
349 foreach (ConfigurationNode conf in solution.Configurations)
350 {
351 defconf = conf.Name;
352 break;
353 }
354
355 f.Write(".PHONY: all");
356 foreach (ProjectNode proj in solution.Projects)
357 f.Write(" {0} {0}-clean", proj.Name);
358 foreach (ConfigurationNode conf in solution.Configurations)
359 f.Write(" {0} {0}-clean", conf.Name);
360 foreach (ProjectNode proj in solution.Projects)
361 foreach (ConfigurationNode conf in solution.Configurations)
362 f.Write(" {0}-{1} {0}-{1}-clean", proj.Name, conf.Name);
363 f.WriteLine();
364 f.WriteLine();
365
366 f.WriteLine("all: {0}", defconf);
367 f.WriteLine();
368
369 f.Write("clean:");
370 foreach (ConfigurationNode conf in solution.Configurations)
371 f.Write(" {0}-clean", conf.Name);
372 f.WriteLine();
373 f.WriteLine();
374
375 foreach (ConfigurationNode conf in solution.Configurations)
376 {
377 f.Write("{0}: ", conf.Name);
378 foreach (ProjectNode proj in solution.Projects)
379 f.Write(" {0}-{1}", proj.Name, conf.Name);
380 f.WriteLine();
381 f.WriteLine();
382
383 f.Write("{0}-clean: ", conf.Name);
384 foreach (ProjectNode proj in solution.Projects)
385 f.Write(" {0}-{1}-clean", proj.Name, conf.Name);
386 f.WriteLine();
387 f.WriteLine();
388 }
389
390 foreach (ProjectNode proj in solution.Projects)
391 {
392 f.WriteLine("{0}: {0}-{1}", proj.Name, defconf);
393 f.WriteLine();
394
395 f.Write("{0}-clean:", proj.Name);
396 foreach (ConfigurationNode conf in proj.Configurations)
397 f.Write(" {0}-{1}-clean", proj.Name, conf.Name);
398 f.WriteLine();
399 f.WriteLine();
400 }
401 }
402
403 private void WriteSolution(SolutionNode solution)
404 {
405 m_Kernel.Log.Write("Creating makefile for {0}", solution.Name);
406 m_Kernel.CurrentWorkingDirectory.Push();
407
408 string file = "Makefile";// Helper.MakeFilePath(solution.FullPath, solution.Name, "make");
409 StreamWriter f = new StreamWriter(file);
410
411 Helper.SetCurrentDir(Path.GetDirectoryName(file));
412
413 using (f)
414 {
415 WriteIntro(f, solution);
416 WritePhony(f, solution);
417
418 foreach (ProjectNode project in solution.Projects)
419 {
420 m_Kernel.Log.Write("...Creating Project: {0}", project.Name);
421 WriteProject(f, solution, project);
422 }
423 }
424
425 m_Kernel.Log.Write("");
426 m_Kernel.CurrentWorkingDirectory.Pop();
427 }
428
429 private void CleanSolution(SolutionNode solution)
430 {
431 m_Kernel.Log.Write("Cleaning makefile for {0}", solution.Name);
432
433 string file = Helper.MakeFilePath(solution.FullPath, solution.Name, "make");
434 Helper.DeleteIfExists(file);
435
436 m_Kernel.Log.Write("");
437 }
438
439 #endregion
440
441 #region ITarget Members
442
443 public void Write(Kernel kern)
444 {
445 m_Kernel = kern;
446 foreach (SolutionNode solution in kern.Solutions)
447 WriteSolution(solution);
448 m_Kernel = null;
449 }
450
451 public virtual void Clean(Kernel kern)
452 {
453 m_Kernel = kern;
454 foreach (SolutionNode sol in kern.Solutions)
455 CleanSolution(sol);
456 m_Kernel = null;
457 }
458
459 public string Name
460 {
461 get
462 {
463 return "makefile";
464 }
465 }
466
467 #endregion
468 }
469}
diff --git a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
new file mode 100644
index 0000000..85fe2db
--- /dev/null
+++ b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
@@ -0,0 +1,515 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Reflection;
29using System.Text.RegularExpressions;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Nodes;
34using Prebuild.Core.Utilities;
35
36namespace Prebuild.Core.Targets
37{
38 /// <summary>
39 ///
40 /// </summary>
41 [Target("monodev")]
42 public class MonoDevelopTarget : ITarget
43 {
44 #region Fields
45
46 private Kernel m_Kernel;
47
48 #endregion
49
50 #region Private Methods
51
52 private static string PrependPath(string path)
53 {
54 string tmpPath = Helper.NormalizePath(path, '/');
55 Regex regex = new Regex(@"(\w):/(\w+)");
56 Match match = regex.Match(tmpPath);
57 if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
58 {
59 tmpPath = Helper.NormalizePath(tmpPath);
60 }
61 else
62 {
63 tmpPath = Helper.NormalizePath("./" + tmpPath);
64 }
65
66 return tmpPath;
67 }
68
69 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
70 {
71 string ret = "<ProjectReference type=\"";
72 if(solution.ProjectsTable.ContainsKey(refr.Name))
73 {
74 ret += "Project\"";
75 ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\" refto=\"" + refr.Name + "\" />";
76 }
77 else
78 {
79 ProjectNode project = (ProjectNode)refr.Parent;
80 string fileRef = FindFileReference(refr.Name, project);
81
82 if(refr.Path != null || fileRef != null)
83 {
84 ret += "Assembly\" refto=\"";
85
86 string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
87
88 ret += finalPath;
89 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
90 return ret;
91 }
92
93 ret += "Gac\"";
94 ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\"";
95 ret += " refto=\"";
96 try
97 {
98 /*
99 Day changed to 28 Mar 2007
100 ...
101 08:09 < cj> is there anything that replaces Assembly.LoadFromPartialName() ?
102 08:09 < jonp> no
103 08:10 < jonp> in their infinite wisdom [sic], microsoft decided that the
104 ability to load any assembly version by-name was an inherently
105 bad idea
106 08:11 < cj> I'm thinking of a bunch of four-letter words right now...
107 08:11 < cj> security through making it difficult for the developer!!!
108 08:12 < jonp> just use the Obsolete API
109 08:12 < jonp> it should still work
110 08:12 < cj> alrighty.
111 08:12 < jonp> you just get warnings when using it
112 */
113 Assembly assem = Assembly.LoadWithPartialName(refr.Name);
114 ret += assem.FullName;
115 //ret += refr.Name;
116 }
117 catch (System.NullReferenceException e)
118 {
119 e.ToString();
120 ret += refr.Name;
121 }
122 ret += "\" />";
123 }
124
125 return ret;
126 }
127
128 private static string FindFileReference(string refName, ProjectNode project)
129 {
130 foreach(ReferencePathNode refPath in project.ReferencePaths)
131 {
132 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
133
134 if(File.Exists(fullPath))
135 {
136 return fullPath;
137 }
138 }
139
140 return null;
141 }
142
143 /// <summary>
144 /// Gets the XML doc file.
145 /// </summary>
146 /// <param name="project">The project.</param>
147 /// <param name="conf">The conf.</param>
148 /// <returns></returns>
149 public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
150 {
151 if( conf == null )
152 {
153 throw new ArgumentNullException("conf");
154 }
155 if( project == null )
156 {
157 throw new ArgumentNullException("project");
158 }
159 string docFile = (string)conf.Options["XmlDocFile"];
160 if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
161 {
162 return "False";
163 }
164 return "True";
165 }
166
167 private void WriteProject(SolutionNode solution, ProjectNode project)
168 {
169 string csComp = "Mcs";
170 string netRuntime = "Mono";
171 if(project.Runtime == ClrRuntime.Microsoft)
172 {
173 csComp = "Csc";
174 netRuntime = "MsNet";
175 }
176
177 string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
178 StreamWriter ss = new StreamWriter(projFile);
179
180 m_Kernel.CurrentWorkingDirectory.Push();
181 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
182
183 using(ss)
184 {
185 ss.WriteLine(
186 "<Project name=\"{0}\" description=\"\" standardNamespace=\"{1}\" newfilesearch=\"None\" enableviewstate=\"True\" fileversion=\"2.0\" language=\"C#\" clr-version=\"Net_2_0\" ctype=\"DotNetProject\">",
187 project.Name,
188 project.RootNamespace
189 );
190
191 int count = 0;
192
193 ss.WriteLine(" <Configurations active=\"{0}\">", solution.ActiveConfig);
194
195 foreach(ConfigurationNode conf in project.Configurations)
196 {
197 ss.WriteLine(" <Configuration name=\"{0}\" ctype=\"DotNetProjectConfiguration\">", conf.Name);
198 ss.Write(" <Output");
199 ss.Write(" directory=\"{0}\"", Helper.EndPath(Helper.NormalizePath(".\\" + conf.Options["OutputPath"].ToString())));
200 ss.Write(" assembly=\"{0}\"", project.AssemblyName);
201 ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
202 //ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
203 //ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
204 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
205 {
206 ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
207 }
208 else
209 {
210 ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
211 }
212 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
213 {
214 ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
215 }
216 else
217 {
218 ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
219 }
220 ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
221 ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
222 ss.WriteLine(" />");
223
224 ss.Write(" <Build");
225 ss.Write(" debugmode=\"True\"");
226 if (project.Type == ProjectType.WinExe)
227 {
228 ss.Write(" target=\"{0}\"", ProjectType.Exe.ToString());
229 }
230 else
231 {
232 ss.Write(" target=\"{0}\"", project.Type);
233 }
234 ss.WriteLine(" />");
235
236 ss.Write(" <Execution");
237 ss.Write(" runwithwarnings=\"{0}\"", !conf.Options.WarningsAsErrors);
238 ss.Write(" consolepause=\"True\"");
239 ss.Write(" runtime=\"{0}\"", netRuntime);
240 ss.Write(" clr-version=\"Net_2_0\"");
241 ss.WriteLine(" />");
242
243 ss.Write(" <CodeGeneration");
244 ss.Write(" compiler=\"{0}\"", csComp);
245 ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
246 ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
247 ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
248 ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
249 ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
250 ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
251 ss.Write(" mainclass=\"{0}\"", project.StartupObject);
252 ss.Write(" target=\"{0}\"", project.Type);
253 ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
254 ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
255 ss.Write(" win32Icon=\"{0}\"", project.AppIcon);
256 ss.Write(" ctype=\"CSharpCompilerParameters\"");
257 ss.WriteLine(" />");
258 ss.WriteLine(" </Configuration>");
259
260 count++;
261 }
262 ss.WriteLine(" </Configurations>");
263
264 ss.Write(" <DeploymentInformation");
265 ss.Write(" target=\"\"");
266 ss.Write(" script=\"\"");
267 ss.Write(" strategy=\"File\"");
268 ss.WriteLine(">");
269 ss.WriteLine(" <excludeFiles />");
270 ss.WriteLine(" </DeploymentInformation>");
271
272 ss.WriteLine(" <Contents>");
273 foreach(string file in project.Files)
274 {
275 string buildAction;
276 string dependson = "";
277 string resource_id = "";
278 string copyToOutput = "";
279
280 switch(project.Files.GetBuildAction(file))
281 {
282 case BuildAction.None:
283 buildAction = "Nothing";
284 break;
285
286 case BuildAction.Content:
287 buildAction = "Exclude";
288 break;
289
290 case BuildAction.EmbeddedResource:
291 buildAction = "EmbedAsResource";
292 break;
293
294 default:
295 buildAction = "Compile";
296 break;
297 }
298
299 if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never)
300 buildAction = "FileCopy";
301
302 // Sort of a hack, we try and resolve the path and make it relative, if we can.
303 string extension = Path.GetExtension(file);
304 string designer_format = string.Format(".Designer{0}", extension);
305
306 if (file.EndsWith(designer_format))
307 {
308 string basename = file.Substring(0, file.LastIndexOf(designer_format));
309 string[] extensions = new string[] { ".cs", ".resx", ".settings" };
310
311 foreach(string ext in extensions)
312 {
313 if (project.Files.Contains(basename + ext))
314 {
315 dependson = string.Format(" dependson=\"{0}{1}\"", basename, ext);
316 break;
317 }
318 }
319 }
320 if (extension == ".resx")
321 {
322 buildAction = "EmbedAsResource";
323 string basename = file.Substring(0, file.LastIndexOf(".resx"));
324
325 // Visual Studio type resx + form dependency
326 if (project.Files.Contains(basename + ".cs"))
327 {
328 dependson = string.Format(" dependson=\"{0}{1}\"", basename, ".cs");
329 }
330
331 // We need to specify a resources file name to avoid MissingManifestResourceExceptions
332 // in libraries that are built.
333 resource_id = string.Format(" resource_id=\"{0}.{1}.resources\"",
334 project.AssemblyName, basename.Replace("/", "."));
335 }
336
337 switch(project.Files.GetCopyToOutput(file))
338 {
339 case CopyToOutput.Always:
340 copyToOutput = string.Format(" copyToOutputDirectory=\"Always\"");
341 break;
342 case CopyToOutput.PreserveNewest:
343 copyToOutput = string.Format(" copyToOutputDirectory=\"PreserveNewest\"");
344 break;
345 }
346
347 // Sort of a hack, we try and resolve the path and make it relative, if we can.
348 string filePath = PrependPath(file);
349 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\"{2}{3}{4} />",
350 filePath, buildAction, dependson, resource_id, copyToOutput);
351 }
352 ss.WriteLine(" </Contents>");
353
354 ss.WriteLine(" <References>");
355 foreach(ReferenceNode refr in project.References)
356 {
357 ss.WriteLine(" {0}", BuildReference(solution, refr));
358 }
359 ss.WriteLine(" </References>");
360
361
362 ss.WriteLine("</Project>");
363 }
364
365 m_Kernel.CurrentWorkingDirectory.Pop();
366 }
367
368 private void WriteCombine(SolutionNode solution)
369 {
370 m_Kernel.Log.Write("Creating MonoDevelop combine and project files");
371 foreach(ProjectNode project in solution.Projects)
372 {
373 if(m_Kernel.AllowProject(project.FilterGroups))
374 {
375 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
376 WriteProject(solution, project);
377 }
378 }
379
380 m_Kernel.Log.Write("");
381 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
382 StreamWriter ss = new StreamWriter(combFile);
383
384 m_Kernel.CurrentWorkingDirectory.Push();
385 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
386
387 int count = 0;
388
389 using(ss)
390 {
391 ss.WriteLine("<Combine name=\"{0}\" fileversion=\"2.0\" description=\"\">", solution.Name);
392
393 count = 0;
394 foreach(ConfigurationNode conf in solution.Configurations)
395 {
396 if(count == 0)
397 {
398 ss.WriteLine(" <Configurations active=\"{0}\">", conf.Name);
399 }
400
401 ss.WriteLine(" <Configuration name=\"{0}\" ctype=\"CombineConfiguration\">", conf.Name);
402 foreach(ProjectNode project in solution.Projects)
403 {
404 ss.WriteLine(" <Entry configuration=\"{1}\" build=\"True\" name=\"{0}\" />", project.Name, conf.Name);
405 }
406 ss.WriteLine(" </Configuration>");
407
408 count++;
409 }
410 ss.WriteLine(" </Configurations>");
411
412 count = 0;
413
414 foreach(ProjectNode project in solution.Projects)
415 {
416 if(count == 0)
417 ss.WriteLine(" <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
418
419 ss.WriteLine(" <Execute type=\"None\" entry=\"{0}\" />", project.Name);
420 count++;
421 }
422 ss.WriteLine(" </StartMode>");
423
424 ss.WriteLine(" <Entries>");
425 foreach(ProjectNode project in solution.Projects)
426 {
427 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
428 ss.WriteLine(" <Entry filename=\"{0}\" />",
429 Helper.MakeFilePath(path, project.Name, "mdp"));
430 }
431 ss.WriteLine(" </Entries>");
432
433 ss.WriteLine("</Combine>");
434 }
435
436 m_Kernel.CurrentWorkingDirectory.Pop();
437 }
438
439 private void CleanProject(ProjectNode project)
440 {
441 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
442 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
443 Helper.DeleteIfExists(projectFile);
444 }
445
446 private void CleanSolution(SolutionNode solution)
447 {
448 m_Kernel.Log.Write("Cleaning MonoDevelop combine and project files for", solution.Name);
449
450 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
451 Helper.DeleteIfExists(slnFile);
452
453 foreach(ProjectNode project in solution.Projects)
454 {
455 CleanProject(project);
456 }
457
458 m_Kernel.Log.Write("");
459 }
460
461 #endregion
462
463 #region ITarget Members
464
465 /// <summary>
466 /// Writes the specified kern.
467 /// </summary>
468 /// <param name="kern">The kern.</param>
469 public void Write(Kernel kern)
470 {
471 if( kern == null )
472 {
473 throw new ArgumentNullException("kern");
474 }
475 m_Kernel = kern;
476 foreach(SolutionNode solution in kern.Solutions)
477 {
478 WriteCombine(solution);
479 }
480 m_Kernel = null;
481 }
482
483 /// <summary>
484 /// Cleans the specified kern.
485 /// </summary>
486 /// <param name="kern">The kern.</param>
487 public virtual void Clean(Kernel kern)
488 {
489 if( kern == null )
490 {
491 throw new ArgumentNullException("kern");
492 }
493 m_Kernel = kern;
494 foreach(SolutionNode sol in kern.Solutions)
495 {
496 CleanSolution(sol);
497 }
498 m_Kernel = null;
499 }
500
501 /// <summary>
502 /// Gets the name.
503 /// </summary>
504 /// <value>The name.</value>
505 public string Name
506 {
507 get
508 {
509 return "sharpdev";
510 }
511 }
512
513 #endregion
514 }
515}
diff --git a/Prebuild/src/Core/Targets/NAntTarget.cs b/Prebuild/src/Core/Targets/NAntTarget.cs
new file mode 100644
index 0000000..21bc80e
--- /dev/null
+++ b/Prebuild/src/Core/Targets/NAntTarget.cs
@@ -0,0 +1,752 @@
1#region BSD License
2/*
3Copyright (c) 2004 - 2008
4Matthew Holmes (matthew@wildfiregames.com),
5Dan Moorehead (dan05a@gmail.com),
6C.J. Adams-Collier (cjac@colliertech.org),
7
8Redistribution and use in source and binary forms, with or without
9modification, are permitted provided that the following conditions are
10met:
11
12* Redistributions of source code must retain the above copyright
13 notice, this list of conditions and the following disclaimer.
14
15* Redistributions in binary form must reproduce the above copyright
16 notice, this list of conditions and the following disclaimer in the
17 documentation and/or other materials provided with the distribution.
18
19* The name of the author may not be used to endorse or promote
20 products derived from this software without specific prior written
21 permission.
22
23THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33POSSIBILITY OF SUCH DAMAGE.
34*/
35
36#endregion
37
38using System;
39using System.Collections.Generic;
40using System.IO;
41using System.Text.RegularExpressions;
42
43using Prebuild.Core.Attributes;
44using Prebuild.Core.Interfaces;
45using Prebuild.Core.Nodes;
46using Prebuild.Core.Utilities;
47
48namespace Prebuild.Core.Targets
49{
50 /// <summary>
51 ///
52 /// </summary>
53 [Target("nant")]
54 public class NAntTarget : ITarget
55 {
56 #region Fields
57
58 private Kernel m_Kernel;
59
60 #endregion
61
62 #region Private Methods
63
64 private static string PrependPath(string path)
65 {
66 string tmpPath = Helper.NormalizePath(path, '/');
67 Regex regex = new Regex(@"(\w):/(\w+)");
68 Match match = regex.Match(tmpPath);
69 //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
70 //{
71 tmpPath = Helper.NormalizePath(tmpPath);
72 //}
73 // else
74 // {
75 // tmpPath = Helper.NormalizePath("./" + tmpPath);
76 // }
77
78 return tmpPath;
79 }
80
81 private static string BuildReference(SolutionNode solution, ProjectNode currentProject, ReferenceNode refr)
82 {
83
84 if (!String.IsNullOrEmpty(refr.Path))
85 {
86 return refr.Path;
87 }
88
89 if (solution.ProjectsTable.ContainsKey(refr.Name))
90 {
91 ProjectNode projectRef = (ProjectNode) solution.ProjectsTable[refr.Name];
92 string finalPath =
93 Helper.NormalizePath(refr.Name + GetProjectExtension(projectRef), '/');
94 return finalPath;
95 }
96
97 ProjectNode project = (ProjectNode) refr.Parent;
98
99 // Do we have an explicit file reference?
100 string fileRef = FindFileReference(refr.Name, project);
101 if (fileRef != null)
102 {
103 return fileRef;
104 }
105
106 // Is there an explicit path in the project ref?
107 if (refr.Path != null)
108 {
109 return Helper.NormalizePath(refr.Path + "/" + refr.Name + GetProjectExtension(project), '/');
110 }
111
112 // No, it's an extensionless GAC ref, but nant needs the .dll extension anyway
113 return refr.Name + ".dll";
114 }
115
116 public static string GetRefFileName(string refName)
117 {
118 if (ExtensionSpecified(refName))
119 {
120 return refName;
121 }
122 else
123 {
124 return refName + ".dll";
125 }
126 }
127
128 private static bool ExtensionSpecified(string refName)
129 {
130 return refName.EndsWith(".dll") || refName.EndsWith(".exe");
131 }
132
133 private static string GetProjectExtension(ProjectNode project)
134 {
135 string extension = ".dll";
136 if (project.Type == ProjectType.Exe || project.Type == ProjectType.WinExe)
137 {
138 extension = ".exe";
139 }
140 return extension;
141 }
142
143 private static string FindFileReference(string refName, ProjectNode project)
144 {
145 foreach (ReferencePathNode refPath in project.ReferencePaths)
146 {
147 string fullPath = Helper.MakeFilePath(refPath.Path, refName);
148
149 if (File.Exists(fullPath))
150 {
151 return fullPath;
152 }
153
154 fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
155
156 if (File.Exists(fullPath))
157 {
158 return fullPath;
159 }
160
161 fullPath = Helper.MakeFilePath(refPath.Path, refName, "exe");
162
163 if (File.Exists(fullPath))
164 {
165 return fullPath;
166 }
167 }
168
169 return null;
170 }
171
172 /// <summary>
173 /// Gets the XML doc file.
174 /// </summary>
175 /// <param name="project">The project.</param>
176 /// <param name="conf">The conf.</param>
177 /// <returns></returns>
178 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
179 {
180 if (conf == null)
181 {
182 throw new ArgumentNullException("conf");
183 }
184 if (project == null)
185 {
186 throw new ArgumentNullException("project");
187 }
188 string docFile = (string)conf.Options["XmlDocFile"];
189 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
190 // {
191 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
192 // }
193 return docFile;
194 }
195
196 private void WriteProject(SolutionNode solution, ProjectNode project)
197 {
198 string projFile = Helper.MakeFilePath(project.FullPath, project.Name + GetProjectExtension(project), "build");
199 StreamWriter ss = new StreamWriter(projFile);
200
201 m_Kernel.CurrentWorkingDirectory.Push();
202 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
203 bool hasDoc = false;
204
205 using (ss)
206 {
207 ss.WriteLine("<?xml version=\"1.0\" ?>");
208 ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name);
209 ss.WriteLine(" <target name=\"{0}\">", "build");
210 ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />");
211 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />");
212
213 ss.Write(" <csc ");
214 ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
215 ss.Write(" debug=\"{0}\"", "${build.debug}");
216 ss.Write(" platform=\"${build.platform}\"");
217
218
219 foreach (ConfigurationNode conf in project.Configurations)
220 {
221 if (conf.Options.KeyFile != "")
222 {
223 ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile);
224 break;
225 }
226 }
227 foreach (ConfigurationNode conf in project.Configurations)
228 {
229 ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe);
230 break;
231 }
232 foreach (ConfigurationNode conf in project.Configurations)
233 {
234 ss.Write(" warnaserror=\"{0}\"", conf.Options.WarningsAsErrors);
235 break;
236 }
237 foreach (ConfigurationNode conf in project.Configurations)
238 {
239 ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines);
240 break;
241 }
242 foreach (ConfigurationNode conf in project.Configurations)
243 {
244 ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
245 break;
246 }
247
248 ss.Write(" main=\"{0}\"", project.StartupObject);
249
250 foreach (ConfigurationNode conf in project.Configurations)
251 {
252 if (GetXmlDocFile(project, conf) != "")
253 {
254 ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf));
255 hasDoc = true;
256 }
257 break;
258 }
259 ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}");
260 if (project.Type == ProjectType.Library)
261 {
262 ss.Write(".dll\"");
263 }
264 else
265 {
266 ss.Write(".exe\"");
267 }
268 if (project.AppIcon != null && project.AppIcon.Length != 0)
269 {
270 ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/'));
271 }
272 // This disables a very different behavior between VS and NAnt. With Nant,
273 // If you have using System.Xml; it will ensure System.Xml.dll is referenced,
274 // but not in VS. This will force the behaviors to match, so when it works
275 // in nant, it will work in VS.
276 ss.Write(" noconfig=\"true\"");
277 ss.WriteLine(">");
278 ss.WriteLine(" <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
279 foreach (string file in project.Files)
280 {
281 switch (project.Files.GetBuildAction(file))
282 {
283 case BuildAction.EmbeddedResource:
284 ss.WriteLine(" {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
285 break;
286 default:
287 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
288 {
289 ss.WriteLine(" <include name=\"{0}\" />", file.Substring(0, file.LastIndexOf('.')) + ".resx");
290 }
291 break;
292 }
293 }
294 //if (project.Files.GetSubType(file).ToString() != "Code")
295 //{
296 // ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
297
298 ss.WriteLine(" </resources>");
299 ss.WriteLine(" <sources failonempty=\"true\">");
300 foreach (string file in project.Files)
301 {
302 switch (project.Files.GetBuildAction(file))
303 {
304 case BuildAction.Compile:
305 ss.WriteLine(" <include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
306 break;
307 default:
308 break;
309 }
310 }
311 ss.WriteLine(" </sources>");
312 ss.WriteLine(" <references basedir=\"${project::get-base-directory()}\">");
313 ss.WriteLine(" <lib>");
314 ss.WriteLine(" <include name=\"${project::get-base-directory()}\" />");
315 foreach(ReferencePathNode refPath in project.ReferencePaths)
316 {
317 ss.WriteLine(" <include name=\"${project::get-base-directory()}/" + refPath.Path.TrimEnd('/', '\\') + "\" />");
318 }
319 ss.WriteLine(" </lib>");
320 foreach (ReferenceNode refr in project.References)
321 {
322 string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/');
323 if (refr.Path != null) {
324 if (ExtensionSpecified(refr.Name))
325 {
326 ss.WriteLine (" <include name=\"" + path + refr.Name + "\"/>");
327 }
328 else
329 {
330 ss.WriteLine (" <include name=\"" + path + refr.Name + ".dll\"/>");
331 }
332 }
333 else
334 {
335 ss.WriteLine (" <include name=\"" + path + "\" />");
336 }
337 }
338 ss.WriteLine(" </references>");
339
340 ss.WriteLine(" </csc>");
341
342 foreach (ConfigurationNode conf in project.Configurations)
343 {
344 if (!String.IsNullOrEmpty(conf.Options.OutputPath))
345 {
346 string targetDir = Helper.NormalizePath(conf.Options.OutputPath, '/');
347
348 ss.WriteLine(" <echo message=\"Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/" + targetDir + "\" />");
349
350 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/" + targetDir + "\"/>");
351
352 ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/" + targetDir + "\">");
353 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}/${build.dir}/\" >");
354 ss.WriteLine(" <include name=\"*.dll\"/>");
355 ss.WriteLine(" <include name=\"*.exe\"/>");
356 ss.WriteLine(" <include name=\"*.mdb\" if='${build.debug}'/>");
357 ss.WriteLine(" <include name=\"*.pdb\" if='${build.debug}'/>");
358 ss.WriteLine(" </fileset>");
359 ss.WriteLine(" </copy>");
360 break;
361 }
362 }
363
364 ss.WriteLine(" </target>");
365
366 ss.WriteLine(" <target name=\"clean\">");
367 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
368 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
369 ss.WriteLine(" </target>");
370
371 ss.WriteLine(" <target name=\"doc\" description=\"Creates documentation.\">");
372 if (hasDoc)
373 {
374 ss.WriteLine(" <property name=\"doc.target\" value=\"\" />");
375 ss.WriteLine(" <if test=\"${platform::is-unix()}\">");
376 ss.WriteLine(" <property name=\"doc.target\" value=\"Web\" />");
377 ss.WriteLine(" </if>");
378 ss.WriteLine(" <ndoc failonerror=\"false\" verbose=\"true\">");
379 ss.WriteLine(" <assemblies basedir=\"${project::get-base-directory()}\">");
380 ss.Write(" <include name=\"${build.dir}/${project::get-name()}");
381 if (project.Type == ProjectType.Library)
382 {
383 ss.WriteLine(".dll\" />");
384 }
385 else
386 {
387 ss.WriteLine(".exe\" />");
388 }
389
390 ss.WriteLine(" </assemblies>");
391 ss.WriteLine(" <summaries basedir=\"${project::get-base-directory()}\">");
392 ss.WriteLine(" <include name=\"${build.dir}/${project::get-name()}.xml\"/>");
393 ss.WriteLine(" </summaries>");
394 ss.WriteLine(" <referencepaths basedir=\"${project::get-base-directory()}\">");
395 ss.WriteLine(" <include name=\"${build.dir}\" />");
396 // foreach(ReferenceNode refr in project.References)
397 // {
398 // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/');
399 // if (path != "")
400 // {
401 // ss.WriteLine(" <include name=\"{0}\" />", path);
402 // }
403 // }
404 ss.WriteLine(" </referencepaths>");
405 ss.WriteLine(" <documenters>");
406 ss.WriteLine(" <documenter name=\"MSDN\">");
407 ss.WriteLine(" <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />");
408 ss.WriteLine(" <property name=\"OutputTarget\" value=\"${doc.target}\" />");
409 ss.WriteLine(" <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />");
410 ss.WriteLine(" <property name=\"IncludeFavorites\" value=\"False\" />");
411 ss.WriteLine(" <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />");
412 ss.WriteLine(" <property name=\"SplitTOCs\" value=\"False\" />");
413 ss.WriteLine(" <property name=\"DefaulTOC\" value=\"\" />");
414 ss.WriteLine(" <property name=\"ShowVisualBasic\" value=\"True\" />");
415 ss.WriteLine(" <property name=\"AutoDocumentConstructors\" value=\"True\" />");
416 ss.WriteLine(" <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />");
417 ss.WriteLine(" <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />");
418 ss.WriteLine(" <property name=\"ShowMissingParams\" value=\"${build.debug}\" />");
419 ss.WriteLine(" <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />");
420 ss.WriteLine(" <property name=\"ShowMissingValues\" value=\"${build.debug}\" />");
421 ss.WriteLine(" <property name=\"DocumentInternals\" value=\"False\" />");
422 ss.WriteLine(" <property name=\"DocumentPrivates\" value=\"False\" />");
423 ss.WriteLine(" <property name=\"DocumentProtected\" value=\"True\" />");
424 ss.WriteLine(" <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />");
425 ss.WriteLine(" <property name=\"IncludeAssemblyVersion\" value=\"True\" />");
426 ss.WriteLine(" </documenter>");
427 ss.WriteLine(" </documenters>");
428 ss.WriteLine(" </ndoc>");
429 }
430 ss.WriteLine(" </target>");
431 ss.WriteLine("</project>");
432 }
433 m_Kernel.CurrentWorkingDirectory.Pop();
434 }
435
436 private void WriteCombine(SolutionNode solution)
437 {
438 m_Kernel.Log.Write("Creating NAnt build files");
439 foreach (ProjectNode project in solution.Projects)
440 {
441 if (m_Kernel.AllowProject(project.FilterGroups))
442 {
443 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
444 WriteProject(solution, project);
445 }
446 }
447
448 m_Kernel.Log.Write("");
449 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
450 StreamWriter ss = new StreamWriter(combFile);
451
452 m_Kernel.CurrentWorkingDirectory.Push();
453 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
454
455 using (ss)
456 {
457 ss.WriteLine("<?xml version=\"1.0\" ?>");
458 ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name);
459 ss.WriteLine(" <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>");
460 ss.WriteLine();
461
462 //ss.WriteLine(" <property name=\"dist.dir\" value=\"dist\" />");
463 //ss.WriteLine(" <property name=\"source.dir\" value=\"source\" />");
464 ss.WriteLine(" <property name=\"bin.dir\" value=\"bin\" />");
465 ss.WriteLine(" <property name=\"obj.dir\" value=\"obj\" />");
466 ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />");
467 ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
468
469 // Use the active configuration, which is the first configuration name in the prebuild file.
470 Dictionary<string,string> emittedConfigurations = new Dictionary<string, string>();
471
472 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", solution.ActiveConfig);
473 ss.WriteLine();
474
475 foreach (ConfigurationNode conf in solution.Configurations)
476 {
477 // If the name isn't in the emitted configurations, we give a high level target to the
478 // platform specific on. This lets "Debug" point to "Debug-AnyCPU".
479 if (!emittedConfigurations.ContainsKey(conf.Name))
480 {
481 // Add it to the dictionary so we only emit one.
482 emittedConfigurations.Add(conf.Name, conf.Platform);
483
484 // Write out the target block.
485 ss.WriteLine(" <target name=\"{0}\" description=\"{0}|{1}\" depends=\"{0}-{1}\">", conf.Name, conf.Platform);
486 ss.WriteLine(" </target>");
487 ss.WriteLine();
488 }
489
490 // Write out the target for the configuration.
491 ss.WriteLine(" <target name=\"{0}-{1}\" description=\"{0}|{1}\">", conf.Name, conf.Platform);
492 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
493 ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
494 ss.WriteLine("\t\t <property name=\"build.platform\" value=\"{0}\" />", conf.Platform);
495 ss.WriteLine(" </target>");
496 ss.WriteLine();
497 }
498
499 ss.WriteLine(" <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">");
500 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />");
501 ss.WriteLine(" </target>");
502 ss.WriteLine();
503
504 ss.WriteLine(" <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">");
505 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />");
506 ss.WriteLine(" </target>");
507 ss.WriteLine();
508
509 ss.WriteLine(" <target name=\"net-3.5\" description=\"Sets framework to .NET 3.5\">");
510 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-3.5\" />");
511 ss.WriteLine(" </target>");
512 ss.WriteLine();
513
514 ss.WriteLine(" <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">");
515 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />");
516 ss.WriteLine(" </target>");
517 ss.WriteLine();
518
519 ss.WriteLine(" <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">");
520 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />");
521 ss.WriteLine(" </target>");
522 ss.WriteLine();
523
524 ss.WriteLine(" <target name=\"mono-3.5\" description=\"Sets framework to mono 3.5\">");
525 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-3.5\" />");
526 ss.WriteLine(" </target>");
527 ss.WriteLine();
528
529 ss.WriteLine(" <target name=\"init\" description=\"\">");
530 ss.WriteLine(" <call target=\"${project.config}\" />");
531 ss.WriteLine(" <property name=\"sys.os.platform\"");
532 ss.WriteLine(" value=\"${platform::get-name()}\"");
533 ss.WriteLine(" />");
534 ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />");
535 ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />");
536 ss.WriteLine(" </target>");
537 ss.WriteLine();
538
539
540 // sdague - ok, this is an ugly hack, but what it lets
541 // us do is native include of files into the nant
542 // created files from all .nant/*include files. This
543 // lets us keep using prebuild, but allows for
544 // extended nant targets to do build and the like.
545
546 try
547 {
548 Regex re = new Regex(".include$");
549 DirectoryInfo nantdir = new DirectoryInfo(".nant");
550 foreach (FileSystemInfo item in nantdir.GetFileSystemInfos())
551 {
552 if (item is DirectoryInfo) { }
553 else if (item is FileInfo)
554 {
555 if (re.Match(item.FullName) !=
556 System.Text.RegularExpressions.Match.Empty)
557 {
558 Console.WriteLine("Including file: " + item.FullName);
559
560 using (FileStream fs = new FileStream(item.FullName,
561 FileMode.Open,
562 FileAccess.Read,
563 FileShare.None))
564 {
565 using (StreamReader sr = new StreamReader(fs))
566 {
567 ss.WriteLine("<!-- included from {0} -->", (item).FullName);
568 while (sr.Peek() != -1)
569 {
570 ss.WriteLine(sr.ReadLine());
571 }
572 ss.WriteLine();
573 }
574 }
575 }
576 }
577 }
578 }
579 catch { }
580 // ss.WriteLine(" <include buildfile=\".nant/local.include\" />");
581 // ss.WriteLine(" <target name=\"zip\" description=\"\">");
582 // ss.WriteLine(" <zip zipfile=\"{0}-{1}.zip\">", solution.Name, solution.Version);
583 // ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
584
585 // ss.WriteLine(" <include name=\"${project::get-base-directory()}/**/*.cs\" />");
586 // // ss.WriteLine(" <include name=\"${project.main.dir}/**/*\" />");
587 // ss.WriteLine(" </fileset>");
588 // ss.WriteLine(" </zip>");
589 // ss.WriteLine(" <echo message=\"Building zip target\" />");
590 // ss.WriteLine(" </target>");
591 ss.WriteLine();
592
593
594 ss.WriteLine(" <target name=\"clean\" description=\"\">");
595 ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />");
596 //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />");
597
598 // justincc: FIXME FIXME FIXME - A temporary OpenSim hack to clean up files when "nant clean" is executed.
599 // Should be replaced with extreme prejudice once anybody finds out if the CleanFiles stuff works or there is
600 // another working mechanism for specifying this stuff
601 ss.WriteLine(" <delete failonerror=\"false\">");
602 ss.WriteLine(" <fileset basedir=\"${bin.dir}\">");
603 ss.WriteLine(" <include name=\"OpenSim*.dll\"/>");
604 ss.WriteLine(" <include name=\"OpenSim*.dll.mdb\"/>");
605 ss.WriteLine(" <include name=\"OpenSim*.exe\"/>");
606 ss.WriteLine(" <include name=\"OpenSim*.exe.mdb\"/>");
607 ss.WriteLine(" <include name=\"ScriptEngines/*\"/>");
608 ss.WriteLine(" <include name=\"Physics/*.dll\"/>");
609 ss.WriteLine(" <include name=\"Physics/*.dll.mdb\"/>");
610 ss.WriteLine(" <exclude name=\"OpenSim.32BitLaunch.exe\"/>");
611 ss.WriteLine(" <exclude name=\"ScriptEngines/Default.lsl\"/>");
612 ss.WriteLine(" </fileset>");
613 ss.WriteLine(" </delete>");
614
615 if (solution.Cleanup != null && solution.Cleanup.CleanFiles.Count > 0)
616 {
617 foreach (CleanFilesNode cleanFile in solution.Cleanup.CleanFiles)
618 {
619 ss.WriteLine(" <delete failonerror=\"false\">");
620 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
621 ss.WriteLine(" <include name=\"{0}/*\"/>", cleanFile.Pattern);
622 ss.WriteLine(" <include name=\"{0}\"/>", cleanFile.Pattern);
623 ss.WriteLine(" </fileset>");
624 ss.WriteLine(" </delete>");
625 }
626 }
627
628 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
629 foreach (ProjectNode project in solution.Projects)
630 {
631 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
632 ss.Write(" <nant buildfile=\"{0}\"",
633 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + GetProjectExtension(project), "build"), '/'));
634 ss.WriteLine(" target=\"clean\" />");
635 }
636 ss.WriteLine(" </target>");
637 ss.WriteLine();
638
639 ss.WriteLine(" <target name=\"build\" depends=\"init\" description=\"\">");
640
641 foreach (ProjectNode project in solution.ProjectsTableOrder)
642 {
643 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
644 ss.Write(" <nant buildfile=\"{0}\"",
645 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + GetProjectExtension(project), "build"), '/'));
646 ss.WriteLine(" target=\"build\" />");
647 }
648 ss.WriteLine(" </target>");
649 ss.WriteLine();
650
651 ss.WriteLine(" <target name=\"build-release\" depends=\"Release, init, build\" description=\"Builds in Release mode\" />");
652 ss.WriteLine();
653 ss.WriteLine(" <target name=\"build-debug\" depends=\"Debug, init, build\" description=\"Builds in Debug mode\" />");
654 ss.WriteLine();
655 //ss.WriteLine(" <target name=\"package\" depends=\"clean, doc, copyfiles, zip\" description=\"Builds in Release mode\" />");
656 ss.WriteLine(" <target name=\"package\" depends=\"clean, doc\" description=\"Builds all\" />");
657 ss.WriteLine();
658
659 ss.WriteLine(" <target name=\"doc\" depends=\"build-release\">");
660 ss.WriteLine(" <echo message=\"Generating all documentation from all builds\" />");
661 foreach (ProjectNode project in solution.Projects)
662 {
663 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
664 ss.Write(" <nant buildfile=\"{0}\"",
665 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + GetProjectExtension(project), "build"), '/'));
666 ss.WriteLine(" target=\"doc\" />");
667 }
668 ss.WriteLine(" </target>");
669 ss.WriteLine();
670 ss.WriteLine("</project>");
671 }
672
673 m_Kernel.CurrentWorkingDirectory.Pop();
674 }
675
676 private void CleanProject(ProjectNode project)
677 {
678 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
679 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + GetProjectExtension(project), "build");
680 Helper.DeleteIfExists(projectFile);
681 }
682
683 private void CleanSolution(SolutionNode solution)
684 {
685 m_Kernel.Log.Write("Cleaning NAnt build files for", solution.Name);
686
687 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
688 Helper.DeleteIfExists(slnFile);
689
690 foreach (ProjectNode project in solution.Projects)
691 {
692 CleanProject(project);
693 }
694
695 m_Kernel.Log.Write("");
696 }
697
698 #endregion
699
700 #region ITarget Members
701
702 /// <summary>
703 /// Writes the specified kern.
704 /// </summary>
705 /// <param name="kern">The kern.</param>
706 public void Write(Kernel kern)
707 {
708 if (kern == null)
709 {
710 throw new ArgumentNullException("kern");
711 }
712 m_Kernel = kern;
713 foreach (SolutionNode solution in kern.Solutions)
714 {
715 WriteCombine(solution);
716 }
717 m_Kernel = null;
718 }
719
720 /// <summary>
721 /// Cleans the specified kern.
722 /// </summary>
723 /// <param name="kern">The kern.</param>
724 public virtual void Clean(Kernel kern)
725 {
726 if (kern == null)
727 {
728 throw new ArgumentNullException("kern");
729 }
730 m_Kernel = kern;
731 foreach (SolutionNode sol in kern.Solutions)
732 {
733 CleanSolution(sol);
734 }
735 m_Kernel = null;
736 }
737
738 /// <summary>
739 /// Gets the name.
740 /// </summary>
741 /// <value>The name.</value>
742 public string Name
743 {
744 get
745 {
746 return "nant";
747 }
748 }
749
750 #endregion
751 }
752}
diff --git a/Prebuild/src/Core/Targets/SharpDevelop2Target.cs b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs
new file mode 100644
index 0000000..40a210d
--- /dev/null
+++ b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs
@@ -0,0 +1,82 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28using Prebuild.Core.Attributes;
29
30namespace Prebuild.Core.Targets
31{
32 /// <summary>
33 ///
34 /// </summary>
35 [Target("sharpdev2")]
36 public class SharpDevelop2Target : VS2005Target
37 {
38 #region Properties
39 public override string VersionName
40 {
41 get
42 {
43 return "SharpDevelop2";
44 }
45 }
46 #endregion
47
48 #region Public Methods
49
50 /// <summary>
51 /// Writes the specified kern.
52 /// </summary>
53 /// <param name="kern">The kern.</param>
54 public override void Write(Kernel kern)
55 {
56 base.Write(kern);
57 }
58
59 /// <summary>
60 /// Cleans the specified kern.
61 /// </summary>
62 /// <param name="kern">The kern.</param>
63 public override void Clean(Kernel kern)
64 {
65 base.Clean(kern);
66 }
67
68 /// <summary>
69 /// Gets the name.
70 /// </summary>
71 /// <value>The name.</value>
72 public override string Name
73 {
74 get
75 {
76 return "sharpdev2";
77 }
78 }
79
80 #endregion
81 }
82}
diff --git a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
new file mode 100644
index 0000000..acab9f4
--- /dev/null
+++ b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
@@ -0,0 +1,425 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Text.RegularExpressions;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [Target("sharpdev")]
41 public class SharpDevelopTarget : ITarget
42 {
43 #region Fields
44
45 private Kernel m_Kernel;
46
47 #endregion
48
49 #region Private Methods
50
51 private static string PrependPath(string path)
52 {
53 string tmpPath = Helper.NormalizePath(path, '/');
54 Regex regex = new Regex(@"(\w):/(\w+)");
55 Match match = regex.Match(tmpPath);
56 if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
57 {
58 tmpPath = Helper.NormalizePath(tmpPath);
59 }
60 else
61 {
62 tmpPath = Helper.NormalizePath("./" + tmpPath);
63 }
64
65 return tmpPath;
66 }
67
68 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
69 {
70 string ret = "<Reference type=\"";
71 if(solution.ProjectsTable.ContainsKey(refr.Name))
72 {
73 ret += "Project\" refto=\"" + refr.Name;
74 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
75 }
76 else
77 {
78 ProjectNode project = (ProjectNode)refr.Parent;
79 string fileRef = FindFileReference(refr.Name, project);
80
81 if(refr.Path != null || fileRef != null)
82 {
83 ret += "Assembly\" refto=\"";
84
85 string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
86
87 ret += finalPath;
88 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
89 return ret;
90 }
91
92 ret += "Gac\" refto=\"";
93 try
94 {
95 //Assembly assem = Assembly.Load(refr.Name);
96 ret += refr.Name;// assem.FullName;
97 }
98 catch (System.NullReferenceException e)
99 {
100 e.ToString();
101 ret += refr.Name;
102 }
103 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
104 }
105
106 return ret;
107 }
108
109 private static string FindFileReference(string refName, ProjectNode project)
110 {
111 foreach(ReferencePathNode refPath in project.ReferencePaths)
112 {
113 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
114
115 if(File.Exists(fullPath))
116 {
117 return fullPath;
118 }
119 }
120
121 return null;
122 }
123
124 /// <summary>
125 /// Gets the XML doc file.
126 /// </summary>
127 /// <param name="project">The project.</param>
128 /// <param name="conf">The conf.</param>
129 /// <returns></returns>
130 public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
131 {
132 if( conf == null )
133 {
134 throw new ArgumentNullException("conf");
135 }
136 if( project == null )
137 {
138 throw new ArgumentNullException("project");
139 }
140 string docFile = (string)conf.Options["XmlDocFile"];
141 if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
142 {
143 return "False";
144 }
145 return "True";
146 }
147
148 private void WriteProject(SolutionNode solution, ProjectNode project)
149 {
150 string csComp = "Csc";
151 string netRuntime = "MsNet";
152 if(project.Runtime == ClrRuntime.Mono)
153 {
154 csComp = "Mcs";
155 netRuntime = "Mono";
156 }
157
158 string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
159 StreamWriter ss = new StreamWriter(projFile);
160
161 m_Kernel.CurrentWorkingDirectory.Push();
162 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
163
164 using(ss)
165 {
166 ss.WriteLine(
167 "<Project name=\"{0}\" standardNamespace=\"{1}\" description=\"\" newfilesearch=\"None\" enableviewstate=\"True\" version=\"1.1\" projecttype=\"C#\">",
168 project.Name,
169 project.RootNamespace
170 );
171
172 ss.WriteLine(" <Contents>");
173 foreach(string file in project.Files)
174 {
175 string buildAction = "Compile";
176 switch(project.Files.GetBuildAction(file))
177 {
178 case BuildAction.None:
179 buildAction = "Nothing";
180 break;
181
182 case BuildAction.Content:
183 buildAction = "Exclude";
184 break;
185
186 case BuildAction.EmbeddedResource:
187 buildAction = "EmbedAsResource";
188 break;
189
190 default:
191 buildAction = "Compile";
192 break;
193 }
194
195 // Sort of a hack, we try and resolve the path and make it relative, if we can.
196 string filePath = PrependPath(file);
197 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\" dependson=\"\" data=\"\" />", filePath, buildAction);
198 }
199 ss.WriteLine(" </Contents>");
200
201 ss.WriteLine(" <References>");
202 foreach(ReferenceNode refr in project.References)
203 {
204 ss.WriteLine(" {0}", BuildReference(solution, refr));
205 }
206 ss.WriteLine(" </References>");
207
208 ss.Write(" <DeploymentInformation");
209 ss.Write(" target=\"\"");
210 ss.Write(" script=\"\"");
211 ss.Write(" strategy=\"File\"");
212 ss.WriteLine(" />");
213
214 int count = 0;
215
216 ss.WriteLine(" <Configurations active=\"{0}\">", solution.ActiveConfig);
217
218 foreach(ConfigurationNode conf in project.Configurations)
219 {
220 ss.Write(" <Configuration");
221 ss.Write(" runwithwarnings=\"True\"");
222 ss.Write(" name=\"{0}\"", conf.Name);
223 ss.WriteLine(">");
224 ss.Write(" <CodeGeneration");
225 ss.Write(" runtime=\"{0}\"", netRuntime);
226 ss.Write(" compiler=\"{0}\"", csComp);
227 ss.Write(" compilerversion=\"\"");
228 ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
229 ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
230 ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
231 ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
232 ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
233 ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
234 ss.Write(" mainclass=\"{0}\"", project.StartupObject);
235 ss.Write(" target=\"{0}\"", project.Type);
236 ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
237 ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
238 ss.Write(" win32Icon=\"{0}\"", Helper.NormalizePath(".\\" + project.AppIcon));
239 ss.Write(" noconfig=\"{0}\"", "False");
240 ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
241 ss.WriteLine(" />");
242
243 ss.Write(" <Execution");
244 ss.Write(" commandlineparameters=\"\"");
245 ss.Write(" consolepause=\"True\"");
246 ss.WriteLine(" />");
247
248 ss.Write(" <Output");
249 ss.Write(" directory=\".\\{0}\"", Helper.NormalizePath(conf.Options["OutputPath"].ToString()));
250 ss.Write(" assembly=\"{0}\"", project.AssemblyName);
251 ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
252 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
253 {
254 ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
255 }
256 else
257 {
258 ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
259 }
260 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
261 {
262 ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
263 }
264 else
265 {
266 ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
267 }
268 ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
269 ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
270 ss.WriteLine(" />");
271 ss.WriteLine(" </Configuration>");
272
273 count++;
274 }
275 ss.WriteLine(" </Configurations>");
276 ss.WriteLine("</Project>");
277 }
278
279 m_Kernel.CurrentWorkingDirectory.Pop();
280 }
281
282 private void WriteCombine(SolutionNode solution)
283 {
284 m_Kernel.Log.Write("Creating SharpDevelop combine and project files");
285 foreach(ProjectNode project in solution.Projects)
286 {
287 if(m_Kernel.AllowProject(project.FilterGroups))
288 {
289 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
290 WriteProject(solution, project);
291 }
292 }
293
294 m_Kernel.Log.Write("");
295 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
296 StreamWriter ss = new StreamWriter(combFile);
297
298 m_Kernel.CurrentWorkingDirectory.Push();
299 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
300
301 using(ss)
302 {
303 ss.WriteLine("<Combine fileversion=\"1.0\" name=\"{0}\" description=\"\">", solution.Name);
304
305 int count = 0;
306 foreach(ProjectNode project in solution.Projects)
307 {
308 if(count == 0)
309 ss.WriteLine(" <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
310
311 ss.WriteLine(" <Execute entry=\"{0}\" type=\"None\" />", project.Name);
312 count++;
313 }
314 ss.WriteLine(" </StartMode>");
315
316 ss.WriteLine(" <Entries>");
317 foreach(ProjectNode project in solution.Projects)
318 {
319 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
320 ss.WriteLine(" <Entry filename=\"{0}\" />",
321 Helper.MakeFilePath(path, project.Name, "prjx"));
322 }
323 ss.WriteLine(" </Entries>");
324
325 count = 0;
326 foreach(ConfigurationNode conf in solution.Configurations)
327 {
328 if(count == 0)
329 {
330 ss.WriteLine(" <Configurations active=\"{0}\">", conf.Name);
331 }
332
333 ss.WriteLine(" <Configuration name=\"{0}\">", conf.Name);
334 foreach(ProjectNode project in solution.Projects)
335 {
336 ss.WriteLine(" <Entry name=\"{0}\" configurationname=\"{1}\" build=\"True\" />", project.Name, conf.Name);
337 }
338 ss.WriteLine(" </Configuration>");
339
340 count++;
341 }
342 ss.WriteLine(" </Configurations>");
343 ss.WriteLine("</Combine>");
344 }
345
346 m_Kernel.CurrentWorkingDirectory.Pop();
347 }
348
349 private void CleanProject(ProjectNode project)
350 {
351 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
352 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
353 Helper.DeleteIfExists(projectFile);
354 }
355
356 private void CleanSolution(SolutionNode solution)
357 {
358 m_Kernel.Log.Write("Cleaning SharpDevelop combine and project files for", solution.Name);
359
360 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
361 Helper.DeleteIfExists(slnFile);
362
363 foreach(ProjectNode project in solution.Projects)
364 {
365 CleanProject(project);
366 }
367
368 m_Kernel.Log.Write("");
369 }
370
371 #endregion
372
373 #region ITarget Members
374
375 /// <summary>
376 /// Writes the specified kern.
377 /// </summary>
378 /// <param name="kern">The kern.</param>
379 public void Write(Kernel kern)
380 {
381 if( kern == null )
382 {
383 throw new ArgumentNullException("kern");
384 }
385 m_Kernel = kern;
386 foreach(SolutionNode solution in kern.Solutions)
387 {
388 WriteCombine(solution);
389 }
390 m_Kernel = null;
391 }
392
393 /// <summary>
394 /// Cleans the specified kern.
395 /// </summary>
396 /// <param name="kern">The kern.</param>
397 public virtual void Clean(Kernel kern)
398 {
399 if( kern == null )
400 {
401 throw new ArgumentNullException("kern");
402 }
403 m_Kernel = kern;
404 foreach(SolutionNode sol in kern.Solutions)
405 {
406 CleanSolution(sol);
407 }
408 m_Kernel = null;
409 }
410
411 /// <summary>
412 /// Gets the name.
413 /// </summary>
414 /// <value>The name.</value>
415 public string Name
416 {
417 get
418 {
419 return "sharpdev";
420 }
421 }
422
423 #endregion
424 }
425}
diff --git a/Prebuild/src/Core/Targets/ToolInfo.cs b/Prebuild/src/Core/Targets/ToolInfo.cs
new file mode 100644
index 0000000..984d20e
--- /dev/null
+++ b/Prebuild/src/Core/Targets/ToolInfo.cs
@@ -0,0 +1,197 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace Prebuild.Core.Targets
6{
7 /// <summary>
8 ///
9 /// </summary>
10 public struct ToolInfo
11 {
12 string name;
13 string guid;
14 string fileExtension;
15 string xmlTag;
16 string importProject;
17
18 /// <summary>
19 /// Gets or sets the name.
20 /// </summary>
21 /// <value>The name.</value>
22 public string Name
23 {
24 get
25 {
26 return name;
27 }
28 set
29 {
30 name = value;
31 }
32 }
33
34 /// <summary>
35 /// Gets or sets the GUID.
36 /// </summary>
37 /// <value>The GUID.</value>
38 public string Guid
39 {
40 get
41 {
42 return guid;
43 }
44 set
45 {
46 guid = value;
47 }
48 }
49
50 /// <summary>
51 /// Gets or sets the file extension.
52 /// </summary>
53 /// <value>The file extension.</value>
54 public string FileExtension
55 {
56 get
57 {
58 return fileExtension;
59 }
60 set
61 {
62 fileExtension = value;
63 }
64 }
65 public string LanguageExtension
66 {
67 get
68 {
69 switch (this.Name)
70 {
71 case "C#":
72 return ".cs";
73 case "VisualBasic":
74 return ".vb";
75 case "Boo":
76 return ".boo";
77 default:
78 return ".cs";
79 }
80 }
81 }
82 /// <summary>
83 /// Gets or sets the XML tag.
84 /// </summary>
85 /// <value>The XML tag.</value>
86 public string XmlTag
87 {
88 get
89 {
90 return xmlTag;
91 }
92 set
93 {
94 xmlTag = value;
95 }
96 }
97
98 /// <summary>
99 /// Gets or sets the import project property.
100 /// </summary>
101 /// <value>The ImportProject tag.</value>
102 public string ImportProject
103 {
104 get
105 {
106 return importProject;
107 }
108 set
109 {
110 importProject = value;
111 }
112 }
113
114 /// <summary>
115 /// Initializes a new instance of the <see cref="ToolInfo"/> class.
116 /// </summary>
117 /// <param name="name">The name.</param>
118 /// <param name="guid">The GUID.</param>
119 /// <param name="fileExtension">The file extension.</param>
120 /// <param name="xml">The XML.</param>
121 /// <param name="importProject">The import project.</param>
122 public ToolInfo(string name, string guid, string fileExtension, string xml, string importProject)
123 {
124 this.name = name;
125 this.guid = guid;
126 this.fileExtension = fileExtension;
127 this.xmlTag = xml;
128 this.importProject = importProject;
129 }
130
131 /// <summary>
132 /// Initializes a new instance of the <see cref="ToolInfo"/> class.
133 /// </summary>
134 /// <param name="name">The name.</param>
135 /// <param name="guid">The GUID.</param>
136 /// <param name="fileExtension">The file extension.</param>
137 /// <param name="xml">The XML.</param>
138 public ToolInfo(string name, string guid, string fileExtension, string xml)
139 {
140 this.name = name;
141 this.guid = guid;
142 this.fileExtension = fileExtension;
143 this.xmlTag = xml;
144 this.importProject = "$(MSBuildBinPath)\\Microsoft." + xml + ".Targets";
145 }
146
147 /// <summary>
148 /// Equals operator
149 /// </summary>
150 /// <param name="obj">ToolInfo to compare</param>
151 /// <returns>true if toolInfos are equal</returns>
152 public override bool Equals(object obj)
153 {
154 if (obj == null)
155 {
156 throw new ArgumentNullException("obj");
157 }
158 if (obj.GetType() != typeof(ToolInfo))
159 return false;
160
161 ToolInfo c = (ToolInfo)obj;
162 return ((this.name == c.name) && (this.guid == c.guid) && (this.fileExtension == c.fileExtension) && (this.importProject == c.importProject));
163 }
164
165 /// <summary>
166 /// Equals operator
167 /// </summary>
168 /// <param name="c1">ToolInfo to compare</param>
169 /// <param name="c2">ToolInfo to compare</param>
170 /// <returns>True if toolInfos are equal</returns>
171 public static bool operator ==(ToolInfo c1, ToolInfo c2)
172 {
173 return ((c1.name == c2.name) && (c1.guid == c2.guid) && (c1.fileExtension == c2.fileExtension) && (c1.importProject == c2.importProject) && (c1.xmlTag == c2.xmlTag));
174 }
175
176 /// <summary>
177 /// Not equals operator
178 /// </summary>
179 /// <param name="c1">ToolInfo to compare</param>
180 /// <param name="c2">ToolInfo to compare</param>
181 /// <returns>True if toolInfos are not equal</returns>
182 public static bool operator !=(ToolInfo c1, ToolInfo c2)
183 {
184 return !(c1 == c2);
185 }
186
187 /// <summary>
188 /// Hash Code
189 /// </summary>
190 /// <returns>Hash code</returns>
191 public override int GetHashCode()
192 {
193 return name.GetHashCode() ^ guid.GetHashCode() ^ this.fileExtension.GetHashCode() ^ this.importProject.GetHashCode() ^ this.xmlTag.GetHashCode();
194
195 }
196 }
197}
diff --git a/Prebuild/src/Core/Targets/VS2002Target.cs b/Prebuild/src/Core/Targets/VS2002Target.cs
new file mode 100644
index 0000000..d7f6dd1
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2002Target.cs
@@ -0,0 +1,87 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28using Prebuild.Core.Attributes;
29
30namespace Prebuild.Core.Targets
31{
32 /// <summary>
33 ///
34 /// </summary>
35 [Target("vs2002")]
36 public class VS2002Target : VS2003Target
37 {
38 #region Private Methods
39
40 private void SetVS2002()
41 {
42 this.SolutionVersion = "7.00";
43 this.ProductVersion = "7.0.9254";
44 this.SchemaVersion = "1.0";
45 this.VersionName = "2002";
46 this.Version = VSVersion.VS70;
47 }
48
49 #endregion
50
51 #region Public Methods
52
53 /// <summary>
54 /// Writes the specified kern.
55 /// </summary>
56 /// <param name="kern">The kern.</param>
57 public override void Write(Kernel kern)
58 {
59 SetVS2002();
60 base.Write(kern);
61 }
62
63 /// <summary>
64 /// Cleans the specified kern.
65 /// </summary>
66 /// <param name="kern">The kern.</param>
67 public override void Clean(Kernel kern)
68 {
69 SetVS2002();
70 base.Clean(kern);
71 }
72
73 /// <summary>
74 /// Gets the name.
75 /// </summary>
76 /// <value>The name.</value>
77 public override string Name
78 {
79 get
80 {
81 return "vs2002";
82 }
83 }
84
85 #endregion
86 }
87}
diff --git a/Prebuild/src/Core/Targets/VS2003Target.cs b/Prebuild/src/Core/Targets/VS2003Target.cs
new file mode 100644
index 0000000..f4b4517
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2003Target.cs
@@ -0,0 +1,593 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 [Target("vs2003")]
38 public class VS2003Target : ITarget
39 {
40
41 #region Fields
42
43 string solutionVersion = "8.00";
44 string productVersion = "7.10.3077";
45 string schemaVersion = "2.0";
46 string versionName = "2003";
47 VSVersion version = VSVersion.VS71;
48
49 readonly Dictionary<string, ToolInfo> m_Tools = new Dictionary<string, ToolInfo>();
50 Kernel m_Kernel;
51
52 /// <summary>
53 /// Gets or sets the solution version.
54 /// </summary>
55 /// <value>The solution version.</value>
56 protected string SolutionVersion
57 {
58 get
59 {
60 return solutionVersion;
61 }
62 set
63 {
64 solutionVersion = value;
65 }
66 }
67 /// <summary>
68 /// Gets or sets the product version.
69 /// </summary>
70 /// <value>The product version.</value>
71 protected string ProductVersion
72 {
73 get
74 {
75 return productVersion;
76 }
77 set
78 {
79 productVersion = value;
80 }
81 }
82 /// <summary>
83 /// Gets or sets the schema version.
84 /// </summary>
85 /// <value>The schema version.</value>
86 protected string SchemaVersion
87 {
88 get
89 {
90 return schemaVersion;
91 }
92 set
93 {
94 schemaVersion = value;
95 }
96 }
97 /// <summary>
98 /// Gets or sets the name of the version.
99 /// </summary>
100 /// <value>The name of the version.</value>
101 protected string VersionName
102 {
103 get
104 {
105 return versionName;
106 }
107 set
108 {
109 versionName = value;
110 }
111 }
112 /// <summary>
113 /// Gets or sets the version.
114 /// </summary>
115 /// <value>The version.</value>
116 protected VSVersion Version
117 {
118 get
119 {
120 return version;
121 }
122 set
123 {
124 version = value;
125 }
126 }
127
128 #endregion
129
130 #region Constructors
131
132 /// <summary>
133 /// Initializes a new instance of the <see cref="VS2003Target"/> class.
134 /// </summary>
135 public VS2003Target()
136 {
137 m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP");
138 m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic");
139 }
140
141 #endregion
142
143 #region Private Methods
144
145 private string MakeRefPath(ProjectNode project)
146 {
147 string ret = "";
148 foreach(ReferencePathNode node in project.ReferencePaths)
149 {
150 try
151 {
152 string fullPath = Helper.ResolvePath(node.Path);
153 if(ret.Length < 1)
154 {
155 ret = fullPath;
156 }
157 else
158 {
159 ret += ";" + fullPath;
160 }
161 }
162 catch(ArgumentException)
163 {
164 m_Kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
165 }
166 }
167
168 return ret;
169 }
170
171 private void WriteProject(SolutionNode solution, ProjectNode project)
172 {
173 if(!m_Tools.ContainsKey(project.Language))
174 {
175 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
176 }
177
178 ToolInfo toolInfo = m_Tools[project.Language];
179 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
180 StreamWriter ps = new StreamWriter(projectFile);
181
182 m_Kernel.CurrentWorkingDirectory.Push();
183 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
184
185 using(ps)
186 {
187 ps.WriteLine("<VisualStudioProject>");
188 ps.WriteLine(" <{0}", toolInfo.XmlTag);
189 ps.WriteLine("\t\t\t\tProjectType = \"Local\"");
190 ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", ProductVersion);
191 ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", SchemaVersion);
192 ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper());
193 ps.WriteLine("\t\t>");
194
195 ps.WriteLine("\t\t\t\t<Build>");
196 ps.WriteLine(" <Settings");
197 ps.WriteLine("\t\t\t\t ApplicationIcon = \"{0}\"",project.AppIcon);
198 ps.WriteLine("\t\t\t\t AssemblyKeyContainerName = \"\"");
199 ps.WriteLine("\t\t\t\t AssemblyName = \"{0}\"", project.AssemblyName);
200 ps.WriteLine("\t\t\t\t AssemblyOriginatorKeyFile = \"\"");
201 ps.WriteLine("\t\t\t\t DefaultClientScript = \"JScript\"");
202 ps.WriteLine("\t\t\t\t DefaultHTMLPageLayout = \"Grid\"");
203 ps.WriteLine("\t\t\t\t DefaultTargetSchema = \"IE50\"");
204 ps.WriteLine("\t\t\t\t DelaySign = \"false\"");
205
206 if(Version == VSVersion.VS70)
207 {
208 ps.WriteLine("\t\t\t\t NoStandardLibraries = \"false\"");
209 }
210
211 ps.WriteLine("\t\t\t\t OutputType = \"{0}\"", project.Type);
212
213 foreach(ConfigurationNode conf in project.Configurations)
214 {
215 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
216 {
217 ps.WriteLine("\t\t\t\t PreBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
218 }
219 else
220 {
221 ps.WriteLine("\t\t\t\t PreBuildEvent = \"{0}\"", conf.Options["PreBuildEvent"]);
222 }
223 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
224 {
225 ps.WriteLine("\t\t\t\t PostBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
226 }
227 else
228 {
229 ps.WriteLine("\t\t\t\t PostBuildEvent = \"{0}\"", conf.Options["PostBuildEvent"]);
230 }
231 if (conf.Options["RunPostBuildEvent"] == null)
232 {
233 ps.WriteLine("\t\t\t\t RunPostBuildEvent = \"{0}\"", "OnBuildSuccess");
234 }
235 else
236 {
237 ps.WriteLine("\t\t\t\t RunPostBuildEvent = \"{0}\"", conf.Options["RunPostBuildEvent"]);
238 }
239 break;
240 }
241
242 ps.WriteLine("\t\t\t\t RootNamespace = \"{0}\"", project.RootNamespace);
243 ps.WriteLine("\t\t\t\t StartupObject = \"{0}\"", project.StartupObject);
244 ps.WriteLine("\t\t >");
245
246 foreach(ConfigurationNode conf in project.Configurations)
247 {
248 ps.WriteLine("\t\t\t\t <Config");
249 ps.WriteLine("\t\t\t\t Name = \"{0}\"", conf.Name);
250 ps.WriteLine("\t\t\t\t AllowUnsafeBlocks = \"{0}\"", conf.Options["AllowUnsafe"].ToString().ToLower());
251 ps.WriteLine("\t\t\t\t BaseAddress = \"{0}\"", conf.Options["BaseAddress"]);
252 ps.WriteLine("\t\t\t\t CheckForOverflowUnderflow = \"{0}\"", conf.Options["CheckUnderflowOverflow"].ToString().ToLower());
253 ps.WriteLine("\t\t\t\t ConfigurationOverrideFile = \"\"");
254 ps.WriteLine("\t\t\t\t DefineConstants = \"{0}\"", conf.Options["CompilerDefines"]);
255 ps.WriteLine("\t\t\t\t DocumentationFile = \"{0}\"", GetXmlDocFile(project, conf));//default to the assembly name
256 ps.WriteLine("\t\t\t\t DebugSymbols = \"{0}\"", conf.Options["DebugInformation"].ToString().ToLower());
257 ps.WriteLine("\t\t\t\t FileAlignment = \"{0}\"", conf.Options["FileAlignment"]);
258 ps.WriteLine("\t\t\t\t IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"].ToString().ToLower());
259
260 if(Version == VSVersion.VS71)
261 {
262 ps.WriteLine("\t\t\t\t NoStdLib = \"{0}\"", conf.Options["NoStdLib"].ToString().ToLower());
263 ps.WriteLine("\t\t\t\t NoWarn = \"{0}\"", conf.Options["SuppressWarnings"].ToString().ToLower());
264 }
265
266 ps.WriteLine("\t\t\t\t Optimize = \"{0}\"", conf.Options["OptimizeCode"].ToString().ToLower());
267 ps.WriteLine(" OutputPath = \"{0}\"",
268 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
269 ps.WriteLine(" RegisterForComInterop = \"{0}\"", conf.Options["RegisterComInterop"].ToString().ToLower());
270 ps.WriteLine(" RemoveIntegerChecks = \"{0}\"", conf.Options["RemoveIntegerChecks"].ToString().ToLower());
271 ps.WriteLine(" TreatWarningsAsErrors = \"{0}\"", conf.Options["WarningsAsErrors"].ToString().ToLower());
272 ps.WriteLine(" WarningLevel = \"{0}\"", conf.Options["WarningLevel"]);
273 ps.WriteLine(" />");
274 }
275
276 ps.WriteLine(" </Settings>");
277
278 ps.WriteLine(" <References>");
279 foreach(ReferenceNode refr in project.References)
280 {
281 ps.WriteLine(" <Reference");
282 ps.WriteLine(" Name = \"{0}\"", refr.Name);
283 ps.WriteLine(" AssemblyName = \"{0}\"", refr.Name);
284
285 if(solution.ProjectsTable.ContainsKey(refr.Name))
286 {
287 ProjectNode refProject = solution.ProjectsTable[refr.Name];
288 ps.WriteLine(" Project = \"{{{0}}}\"", refProject.Guid.ToString().ToUpper());
289 ps.WriteLine(" Package = \"{0}\"", toolInfo.Guid.ToUpper());
290 }
291 else
292 {
293 if(refr.Path != null)
294 {
295 ps.WriteLine(" HintPath = \"{0}\"", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
296 }
297
298 }
299
300 if(refr.LocalCopySpecified)
301 {
302 ps.WriteLine(" Private = \"{0}\"",refr.LocalCopy);
303 }
304
305 ps.WriteLine(" />");
306 }
307 ps.WriteLine(" </References>");
308
309 ps.WriteLine(" </Build>");
310 ps.WriteLine(" <Files>");
311
312 ps.WriteLine(" <Include>");
313
314 foreach(string file in project.Files)
315 {
316 string fileName = file.Replace(".\\", "");
317 ps.WriteLine(" <File");
318 ps.WriteLine(" RelPath = \"{0}\"", fileName);
319 ps.WriteLine(" SubType = \"{0}\"", project.Files.GetSubType(file));
320 ps.WriteLine(" BuildAction = \"{0}\"", project.Files.GetBuildAction(file));
321 ps.WriteLine(" />");
322
323 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
324 {
325 ps.WriteLine(" <File");
326 ps.WriteLine(" RelPath = \"{0}\"", fileName.Substring(0, fileName.LastIndexOf('.')) + ".resx");
327 int slash = fileName.LastIndexOf('\\');
328 if (slash == -1)
329 {
330 ps.WriteLine(" DependentUpon = \"{0}\"", fileName);
331 }
332 else
333 {
334 ps.WriteLine(" DependentUpon = \"{0}\"", fileName.Substring(slash + 1, fileName.Length - slash - 1));
335 }
336 ps.WriteLine(" BuildAction = \"{0}\"", "EmbeddedResource");
337 ps.WriteLine(" />");
338
339 }
340 }
341 ps.WriteLine(" </Include>");
342
343 ps.WriteLine(" </Files>");
344 ps.WriteLine(" </{0}>", toolInfo.XmlTag);
345 ps.WriteLine("</VisualStudioProject>");
346 }
347
348 ps = new StreamWriter(projectFile + ".user");
349 using(ps)
350 {
351 ps.WriteLine("<VisualStudioProject>");
352 ps.WriteLine(" <{0}>", toolInfo.XmlTag);
353 ps.WriteLine(" <Build>");
354
355 ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
356 foreach(ConfigurationNode conf in project.Configurations)
357 {
358 ps.WriteLine(" <Config");
359 ps.WriteLine(" Name = \"{0}\"", conf.Name);
360 ps.WriteLine(" />");
361 }
362 ps.WriteLine(" </Settings>");
363
364 ps.WriteLine(" </Build>");
365 ps.WriteLine(" </{0}>", toolInfo.XmlTag);
366 ps.WriteLine("</VisualStudioProject>");
367 }
368
369 m_Kernel.CurrentWorkingDirectory.Pop();
370 }
371
372 /// <summary>
373 /// Gets the XML doc file.
374 /// </summary>
375 /// <param name="project">The project.</param>
376 /// <param name="conf">The conf.</param>
377 /// <returns></returns>
378 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
379 {
380 if( conf == null )
381 {
382 throw new ArgumentNullException("conf");
383 }
384 if( project == null )
385 {
386 throw new ArgumentNullException("project");
387 }
388 // if(!(bool)conf.Options["GenerateXmlDocFile"]) //default to none, if the generate option is false
389 // {
390 // return string.Empty;
391 // }
392
393 //default to "AssemblyName.xml"
394 //string defaultValue = Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
395 //return (string)conf.Options["XmlDocFile", defaultValue];
396
397 //default to no XmlDocFile file
398 return (string)conf.Options["XmlDocFile", ""];
399 }
400
401 private void WriteSolution(SolutionNode solution)
402 {
403 m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", VersionName);
404
405 foreach(ProjectNode project in solution.Projects)
406 {
407 if(m_Kernel.AllowProject(project.FilterGroups))
408 {
409 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
410 WriteProject(solution, project);
411 }
412 }
413
414 m_Kernel.Log.Write("");
415 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
416 StreamWriter ss = new StreamWriter(solutionFile);
417
418 m_Kernel.CurrentWorkingDirectory.Push();
419 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
420
421 using(ss)
422 {
423 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
424 foreach(ProjectNode project in solution.Projects)
425 {
426 if(!m_Tools.ContainsKey(project.Language))
427 {
428 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
429 }
430
431 ToolInfo toolInfo = m_Tools[project.Language];
432
433 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
434 ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"",
435 toolInfo.Guid, project.Name, Helper.MakeFilePath(path, project.Name,
436 toolInfo.FileExtension), project.Guid.ToString().ToUpper());
437
438 ss.WriteLine("\tProjectSection(ProjectDependencies) = postProject");
439 ss.WriteLine("\tEndProjectSection");
440
441 ss.WriteLine("EndProject");
442 }
443
444 ss.WriteLine("Global");
445
446 ss.WriteLine("\tGlobalSection(SolutionConfiguration) = preSolution");
447 foreach(ConfigurationNode conf in solution.Configurations)
448 {
449 ss.WriteLine("\t\t{0} = {0}", conf.Name);
450 }
451 ss.WriteLine("\tEndGlobalSection");
452
453 ss.WriteLine("\tGlobalSection(ProjectDependencies) = postSolution");
454 foreach(ProjectNode project in solution.Projects)
455 {
456 for(int i = 0; i < project.References.Count; i++)
457 {
458 ReferenceNode refr = project.References[i];
459 if(solution.ProjectsTable.ContainsKey(refr.Name))
460 {
461 ProjectNode refProject = solution.ProjectsTable[refr.Name];
462 ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})",
463 project.Guid.ToString().ToUpper()
464 , i,
465 refProject.Guid.ToString().ToUpper()
466 );
467 }
468 }
469 }
470 ss.WriteLine("\tEndGlobalSection");
471
472 ss.WriteLine("\tGlobalSection(ProjectConfiguration) = postSolution");
473 foreach(ProjectNode project in solution.Projects)
474 {
475 foreach(ConfigurationNode conf in solution.Configurations)
476 {
477 ss.WriteLine("\t\t{{{0}}}.{1}.ActiveCfg = {1}|.NET",
478 project.Guid.ToString().ToUpper(),
479 conf.Name);
480
481 ss.WriteLine("\t\t{{{0}}}.{1}.Build.0 = {1}|.NET",
482 project.Guid.ToString().ToUpper(),
483 conf.Name);
484 }
485 }
486 ss.WriteLine("\tEndGlobalSection");
487
488 if(solution.Files != null)
489 {
490 ss.WriteLine("\tGlobalSection(SolutionItems) = postSolution");
491 foreach(string file in solution.Files)
492 {
493 ss.WriteLine("\t\t{0} = {0}", file);
494 }
495 ss.WriteLine("\tEndGlobalSection");
496 }
497
498 ss.WriteLine("\tGlobalSection(ExtensibilityGlobals) = postSolution");
499 ss.WriteLine("\tEndGlobalSection");
500 ss.WriteLine("\tGlobalSection(ExtensibilityAddIns) = postSolution");
501 ss.WriteLine("\tEndGlobalSection");
502
503 ss.WriteLine("EndGlobal");
504 }
505
506 m_Kernel.CurrentWorkingDirectory.Pop();
507 }
508
509 private void CleanProject(ProjectNode project)
510 {
511 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
512
513 ToolInfo toolInfo = m_Tools[project.Language];
514 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
515 string userFile = projectFile + ".user";
516
517 Helper.DeleteIfExists(projectFile);
518 Helper.DeleteIfExists(userFile);
519 }
520
521 private void CleanSolution(SolutionNode solution)
522 {
523 m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", VersionName, solution.Name);
524
525 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
526 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
527
528 Helper.DeleteIfExists(slnFile);
529 Helper.DeleteIfExists(suoFile);
530
531 foreach(ProjectNode project in solution.Projects)
532 {
533 CleanProject(project);
534 }
535
536 m_Kernel.Log.Write("");
537 }
538
539 #endregion
540
541 #region ITarget Members
542
543 /// <summary>
544 /// Writes the specified kern.
545 /// </summary>
546 /// <param name="kern">The kern.</param>
547 public virtual void Write(Kernel kern)
548 {
549 if( kern == null )
550 {
551 throw new ArgumentNullException("kern");
552 }
553 m_Kernel = kern;
554 foreach(SolutionNode sol in m_Kernel.Solutions)
555 {
556 WriteSolution(sol);
557 }
558 m_Kernel = null;
559 }
560
561 /// <summary>
562 /// Cleans the specified kern.
563 /// </summary>
564 /// <param name="kern">The kern.</param>
565 public virtual void Clean(Kernel kern)
566 {
567 if( kern == null )
568 {
569 throw new ArgumentNullException("kern");
570 }
571 m_Kernel = kern;
572 foreach(SolutionNode sol in m_Kernel.Solutions)
573 {
574 CleanSolution(sol);
575 }
576 m_Kernel = null;
577 }
578
579 /// <summary>
580 /// Gets the name.
581 /// </summary>
582 /// <value>The name.</value>
583 public virtual string Name
584 {
585 get
586 {
587 return "vs2003";
588 }
589 }
590
591 #endregion
592 }
593}
diff --git a/Prebuild/src/Core/Targets/VS2005Target.cs b/Prebuild/src/Core/Targets/VS2005Target.cs
new file mode 100644
index 0000000..e5a0939
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2005Target.cs
@@ -0,0 +1,147 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Text;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [Target("vs2005")]
41 public class VS2005Target : VSGenericTarget
42 {
43 #region Inner Classes
44
45 #endregion
46
47 #region Fields
48
49 string solutionVersion = "9.00";
50 string productVersion = "8.0.50727";
51 string schemaVersion = "2.0";
52 string versionName = "Visual C# 2005";
53 string name = "vs2005";
54
55 VSVersion version = VSVersion.VS80;
56
57 public override string SolutionTag
58 {
59 get { return "# Visual Studio 2005"; }
60 }
61
62 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
63 {
64 return string.Empty;
65 }
66 /// <summary>
67 /// Gets or sets the solution version.
68 /// </summary>
69 /// <value>The solution version.</value>
70 public override string SolutionVersion
71 {
72 get
73 {
74 return solutionVersion;
75 }
76 }
77 /// <summary>
78 /// Gets or sets the product version.
79 /// </summary>
80 /// <value>The product version.</value>
81 public override string ProductVersion
82 {
83 get
84 {
85 return productVersion;
86 }
87 }
88 /// <summary>
89 /// Gets or sets the schema version.
90 /// </summary>
91 /// <value>The schema version.</value>
92 public override string SchemaVersion
93 {
94 get
95 {
96 return schemaVersion;
97 }
98 }
99 /// <summary>
100 /// Gets or sets the name of the version.
101 /// </summary>
102 /// <value>The name of the version.</value>
103 public override string VersionName
104 {
105 get
106 {
107 return versionName;
108 }
109 }
110 /// <summary>
111 /// Gets or sets the version.
112 /// </summary>
113 /// <value>The version.</value>
114 public override VSVersion Version
115 {
116 get
117 {
118 return version;
119 }
120 }
121 /// <summary>
122 /// Gets the name.
123 /// </summary>
124 /// <value>The name.</value>
125 public override string Name
126 {
127 get
128 {
129 return name;
130 }
131 }
132
133 #endregion
134
135 #region Constructors
136
137 /// <summary>
138 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
139 /// </summary>
140 public VS2005Target()
141 : base()
142 {
143 }
144
145 #endregion
146 }
147}
diff --git a/Prebuild/src/Core/Targets/VS2008Target.cs b/Prebuild/src/Core/Targets/VS2008Target.cs
new file mode 100644
index 0000000..a3f3aca
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2008Target.cs
@@ -0,0 +1,127 @@
1using System;
2using System.IO;
3using System.Text;
4
5using Prebuild.Core.Attributes;
6using Prebuild.Core.Interfaces;
7using Prebuild.Core.Nodes;
8using Prebuild.Core.Utilities;
9using System.CodeDom.Compiler;
10
11namespace Prebuild.Core.Targets
12{
13
14 /// <summary>
15 ///
16 /// </summary>
17 [Target("vs2008")]
18 public class VS2008Target : VSGenericTarget
19 {
20 #region Fields
21 string solutionVersion = "10.00";
22 string productVersion = "9.0.21022";
23 string schemaVersion = "2.0";
24 string versionName = "Visual Studio 2008";
25 string name = "vs2008";
26 VSVersion version = VSVersion.VS90;
27
28 /// <summary>
29 /// Gets or sets the solution version.
30 /// </summary>
31 /// <value>The solution version.</value>
32 public override string SolutionVersion
33 {
34 get
35 {
36 return solutionVersion;
37 }
38 }
39 /// <summary>
40 /// Gets or sets the product version.
41 /// </summary>
42 /// <value>The product version.</value>
43 public override string ProductVersion
44 {
45 get
46 {
47 return productVersion;
48 }
49 }
50 /// <summary>
51 /// Gets or sets the schema version.
52 /// </summary>
53 /// <value>The schema version.</value>
54 public override string SchemaVersion
55 {
56 get
57 {
58 return schemaVersion;
59 }
60 }
61 /// <summary>
62 /// Gets or sets the name of the version.
63 /// </summary>
64 /// <value>The name of the version.</value>
65 public override string VersionName
66 {
67 get
68 {
69 return versionName;
70 }
71 }
72 /// <summary>
73 /// Gets or sets the version.
74 /// </summary>
75 /// <value>The version.</value>
76 public override VSVersion Version
77 {
78 get
79 {
80 return version;
81 }
82 }
83 /// <summary>
84 /// Gets the name.
85 /// </summary>
86 /// <value>The name.</value>
87 public override string Name
88 {
89 get
90 {
91 return name;
92 }
93 }
94
95 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
96 {
97 switch (frameworkVersion)
98 {
99 case FrameworkVersion.v3_5:
100 return "ToolsVersion=\"3.5\"";
101 case FrameworkVersion.v3_0:
102 return "ToolsVersion=\"3.0\"";
103 default:
104 return "ToolsVersion=\"2.0\"";
105 }
106 }
107
108 public override string SolutionTag
109 {
110 get { return "# Visual Studio 2008"; }
111 }
112
113 #endregion
114
115 #region Constructors
116
117 /// <summary>
118 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
119 /// </summary>
120 public VS2008Target()
121 : base()
122 {
123 }
124
125 #endregion
126 }
127}
diff --git a/Prebuild/src/Core/Targets/VS2010Target.cs b/Prebuild/src/Core/Targets/VS2010Target.cs
new file mode 100644
index 0000000..b4c79dc
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2010Target.cs
@@ -0,0 +1,140 @@
1using System;
2using System.IO;
3using System.Text;
4
5using Prebuild.Core.Attributes;
6using Prebuild.Core.Interfaces;
7using Prebuild.Core.Nodes;
8using Prebuild.Core.Utilities;
9using System.CodeDom.Compiler;
10
11namespace Prebuild.Core.Targets
12{
13
14 /// <summary>
15 ///
16 /// </summary>
17 [Target("vs2010")]
18 public class VS2010Target : VSGenericTarget
19 {
20 #region Fields
21
22 string solutionVersion = "11.00";
23 string productVersion = "9.0.30729";
24 string schemaVersion = "2.0";
25 string versionName = "Visual Studio 2010";
26 string name = "vs2010";
27 VSVersion version = VSVersion.VS10;
28
29 #endregion
30
31 #region Properties
32
33 /// <summary>
34 /// Gets or sets the solution version.
35 /// </summary>
36 /// <value>The solution version.</value>
37 public override string SolutionVersion
38 {
39 get
40 {
41 return solutionVersion;
42 }
43 }
44
45 /// <summary>
46 /// Gets or sets the product version.
47 /// </summary>
48 /// <value>The product version.</value>
49 public override string ProductVersion
50 {
51 get
52 {
53 return productVersion;
54 }
55 }
56
57 /// <summary>
58 /// Gets or sets the schema version.
59 /// </summary>
60 /// <value>The schema version.</value>
61 public override string SchemaVersion
62 {
63 get
64 {
65 return schemaVersion;
66 }
67 }
68
69 /// <summary>
70 /// Gets or sets the name of the version.
71 /// </summary>
72 /// <value>The name of the version.</value>
73 public override string VersionName
74 {
75 get
76 {
77 return versionName;
78 }
79 }
80
81 /// <summary>
82 /// Gets or sets the version.
83 /// </summary>
84 /// <value>The version.</value>
85 public override VSVersion Version
86 {
87 get
88 {
89 return version;
90 }
91 }
92
93 /// <summary>
94 /// Gets the name.
95 /// </summary>
96 /// <value>The name.</value>
97 public override string Name
98 {
99 get
100 {
101 return name;
102 }
103 }
104
105 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
106 {
107 switch (frameworkVersion)
108 {
109 case FrameworkVersion.v4_5_1:
110 case FrameworkVersion.v4_5:
111 case FrameworkVersion.v4_0:
112 case FrameworkVersion.v3_5:
113 return "ToolsVersion=\"4.0\"";
114 case FrameworkVersion.v3_0:
115 return "ToolsVersion=\"3.0\"";
116 default:
117 return "ToolsVersion=\"2.0\"";
118 }
119 }
120
121 public override string SolutionTag
122 {
123 get { return "# Visual Studio 2010"; }
124 }
125
126 #endregion
127
128 #region Constructors
129
130 /// <summary>
131 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
132 /// </summary>
133 public VS2010Target()
134 : base()
135 {
136 }
137
138 #endregion
139 }
140}
diff --git a/Prebuild/src/Core/Targets/VSGenericTarget.cs b/Prebuild/src/Core/Targets/VSGenericTarget.cs
new file mode 100644
index 0000000..400788b
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VSGenericTarget.cs
@@ -0,0 +1,972 @@
1#region BSD License
2/*
3Copyright (c) 2008 Matthew Holmes (matthew@wildfiregames.com), John Anderson (sontek@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8 * Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13 * The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Collections.Specialized;
29using System.IO;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Nodes;
32using Prebuild.Core.Utilities;
33using System.CodeDom.Compiler;
34
35namespace Prebuild.Core.Targets
36{
37
38 /// <summary>
39 ///
40 /// </summary>
41 public abstract class VSGenericTarget : ITarget
42 {
43 #region Fields
44
45 readonly Dictionary<string, ToolInfo> tools = new Dictionary<string, ToolInfo>();
46// NameValueCollection CopyFiles = new NameValueCollection();
47 Kernel kernel;
48 #endregion
49
50 #region Properties
51 /// <summary>
52 /// Gets or sets the solution version.
53 /// </summary>
54 /// <value>The solution version.</value>
55 public abstract string SolutionVersion { get; }
56 /// <summary>
57 /// Gets or sets the product version.
58 /// </summary>
59 /// <value>The product version.</value>
60 public abstract string ProductVersion { get; }
61 /// <summary>
62 /// Gets or sets the schema version.
63 /// </summary>
64 /// <value>The schema version.</value>
65 public abstract string SchemaVersion { get; }
66 /// <summary>
67 /// Gets or sets the name of the version.
68 /// </summary>
69 /// <value>The name of the version.</value>
70 public abstract string VersionName { get; }
71 /// <summary>
72 /// Gets or sets the version.
73 /// </summary>
74 /// <value>The version.</value>
75 public abstract VSVersion Version { get; }
76 /// <summary>
77 /// Gets the name.
78 /// </summary>
79 /// <value>The name.</value>
80 public abstract string Name { get; }
81
82 protected abstract string GetToolsVersionXml(FrameworkVersion version);
83 public abstract string SolutionTag { get; }
84
85 #endregion
86
87 #region Constructors
88
89 /// <summary>
90 /// Initializes a new instance of the <see cref="VSGenericTarget"/> class.
91 /// </summary>
92 protected VSGenericTarget()
93 {
94 tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets");
95 tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN");
96 tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets");
97 tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets");
98 tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null);
99 }
100
101 #endregion
102
103 #region Private Methods
104
105 private string MakeRefPath(ProjectNode project)
106 {
107 string ret = "";
108 foreach (ReferencePathNode node in project.ReferencePaths)
109 {
110 try
111 {
112 string fullPath = Helper.ResolvePath(node.Path);
113 if (ret.Length < 1)
114 {
115 ret = fullPath;
116 }
117 else
118 {
119 ret += ";" + fullPath;
120 }
121 }
122 catch (ArgumentException)
123 {
124 kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
125 }
126 }
127
128 return ret;
129 }
130
131 private static ProjectNode FindProjectInSolution(string name, SolutionNode solution)
132 {
133 SolutionNode node = solution;
134
135 while (node.Parent is SolutionNode)
136 node = node.Parent as SolutionNode;
137
138 return FindProjectInSolutionRecursively(name, node);
139 }
140
141 private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution)
142 {
143 if (solution.ProjectsTable.ContainsKey(name))
144 return solution.ProjectsTable[name];
145
146 foreach (SolutionNode child in solution.Solutions)
147 {
148 ProjectNode node = FindProjectInSolutionRecursively(name, child);
149 if (node != null)
150 return node;
151 }
152
153 return null;
154 }
155
156 private void WriteProject(SolutionNode solution, ProjectNode project)
157 {
158 if (!tools.ContainsKey(project.Language))
159 {
160 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
161 }
162
163 ToolInfo toolInfo = tools[project.Language];
164 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
165 StreamWriter ps = new StreamWriter(projectFile);
166
167 kernel.CurrentWorkingDirectory.Push();
168 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
169
170 #region Project File
171 using (ps)
172 {
173 string targets = "";
174
175 if(project.Files.CopyFiles > 0)
176 targets = "Build;CopyFiles";
177 else
178 targets = "Build";
179
180 ps.WriteLine("<Project DefaultTargets=\"{0}\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" {1}>", targets, GetToolsVersionXml(project.FrameworkVersion));
181 ps.WriteLine(" <PropertyGroup>");
182 ps.WriteLine(" <ProjectType>Local</ProjectType>");
183 ps.WriteLine(" <ProductVersion>{0}</ProductVersion>", ProductVersion);
184 ps.WriteLine(" <SchemaVersion>{0}</SchemaVersion>", SchemaVersion);
185 ps.WriteLine(" <ProjectGuid>{{{0}}}</ProjectGuid>", project.Guid.ToString().ToUpper());
186
187 // Visual Studio has a hard coded guid for the project type
188 if (project.Type == ProjectType.Web)
189 ps.WriteLine(" <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>");
190 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
191 ps.WriteLine(" <ApplicationIcon>{0}</ApplicationIcon>", project.AppIcon);
192 ps.WriteLine(" <AssemblyKeyContainerName>");
193 ps.WriteLine(" </AssemblyKeyContainerName>");
194 ps.WriteLine(" <AssemblyName>{0}</AssemblyName>", project.AssemblyName);
195 foreach (ConfigurationNode conf in project.Configurations)
196 {
197 if (conf.Options.KeyFile != "")
198 {
199 ps.WriteLine(" <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>", conf.Options.KeyFile);
200 ps.WriteLine(" <SignAssembly>true</SignAssembly>");
201 break;
202 }
203 }
204 ps.WriteLine(" <DefaultClientScript>JScript</DefaultClientScript>");
205 ps.WriteLine(" <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>");
206 ps.WriteLine(" <DefaultTargetSchema>IE50</DefaultTargetSchema>");
207 ps.WriteLine(" <DelaySign>false</DelaySign>");
208 ps.WriteLine(" <TargetFrameworkVersion>{0}</TargetFrameworkVersion>", project.FrameworkVersion.ToString().Replace("_", "."));
209
210 ps.WriteLine(" <OutputType>{0}</OutputType>", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString());
211 ps.WriteLine(" <AppDesignerFolder>{0}</AppDesignerFolder>", project.DesignerFolder);
212 ps.WriteLine(" <RootNamespace>{0}</RootNamespace>", project.RootNamespace);
213 ps.WriteLine(" <StartupObject>{0}</StartupObject>", project.StartupObject);
214 if (string.IsNullOrEmpty(project.DebugStartParameters))
215 {
216 ps.WriteLine(" <StartArguments>{0}</StartArguments>", project.DebugStartParameters);
217 }
218 ps.WriteLine(" <FileUpgradeFlags>");
219 ps.WriteLine(" </FileUpgradeFlags>");
220
221 ps.WriteLine(" </PropertyGroup>");
222
223 foreach (ConfigurationNode conf in project.Configurations)
224 {
225 ps.Write(" <PropertyGroup ");
226 ps.WriteLine("Condition=\" '$(Configuration)|$(Platform)' == '{0}|{1}' \">", conf.Name, conf.Platform);
227 ps.WriteLine(" <AllowUnsafeBlocks>{0}</AllowUnsafeBlocks>", conf.Options["AllowUnsafe"]);
228 ps.WriteLine(" <BaseAddress>{0}</BaseAddress>", conf.Options["BaseAddress"]);
229 ps.WriteLine(" <CheckForOverflowUnderflow>{0}</CheckForOverflowUnderflow>", conf.Options["CheckUnderflowOverflow"]);
230 ps.WriteLine(" <ConfigurationOverrideFile>");
231 ps.WriteLine(" </ConfigurationOverrideFile>");
232 ps.WriteLine(" <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]);
233 ps.WriteLine(" <DocumentationFile>{0}</DocumentationFile>", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString()));
234 ps.WriteLine(" <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]);
235 ps.WriteLine(" <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]);
236 ps.WriteLine(" <Optimize>{0}</Optimize>", conf.Options["OptimizeCode"]);
237 if (project.Type != ProjectType.Web)
238 ps.WriteLine(" <OutputPath>{0}</OutputPath>",
239 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
240 else
241 ps.WriteLine(" <OutputPath>{0}</OutputPath>",
242 Helper.EndPath(Helper.NormalizePath("bin\\")));
243
244 ps.WriteLine(" <RegisterForComInterop>{0}</RegisterForComInterop>", conf.Options["RegisterComInterop"]);
245 ps.WriteLine(" <RemoveIntegerChecks>{0}</RemoveIntegerChecks>", conf.Options["RemoveIntegerChecks"]);
246 ps.WriteLine(" <TreatWarningsAsErrors>{0}</TreatWarningsAsErrors>", conf.Options["WarningsAsErrors"]);
247 ps.WriteLine(" <WarningLevel>{0}</WarningLevel>", conf.Options["WarningLevel"]);
248 ps.WriteLine(" <NoStdLib>{0}</NoStdLib>", conf.Options["NoStdLib"]);
249 ps.WriteLine(" <NoWarn>{0}</NoWarn>", conf.Options["SuppressWarnings"]);
250 ps.WriteLine(" <PlatformTarget>{0}</PlatformTarget>", conf.Platform);
251 ps.WriteLine(" </PropertyGroup>");
252 }
253
254 //ps.WriteLine(" </Settings>");
255
256 Dictionary<ReferenceNode, ProjectNode> projectReferences = new Dictionary<ReferenceNode, ProjectNode>();
257 List<ReferenceNode> otherReferences = new List<ReferenceNode>();
258
259 foreach (ReferenceNode refr in project.References)
260 {
261 ProjectNode projectNode = FindProjectInSolution(refr.Name, solution);
262
263 if (projectNode == null)
264 otherReferences.Add(refr);
265 else
266 projectReferences.Add(refr, projectNode);
267 }
268 // Assembly References
269 ps.WriteLine(" <ItemGroup>");
270
271 foreach (ReferenceNode refr in otherReferences)
272 {
273 ps.Write(" <Reference");
274 ps.Write(" Include=\"");
275 ps.Write(refr.Name);
276 ps.WriteLine("\" >");
277 ps.Write(" <Name>");
278 ps.Write(refr.Name);
279 ps.WriteLine("</Name>");
280
281 if(!String.IsNullOrEmpty(refr.Path))
282 {
283 // Use absolute path to assembly (for determining assembly type)
284 string absolutePath = Path.Combine(project.FullPath, refr.Path);
285 if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "exe"))) {
286 // Assembly is an executable (exe)
287 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "exe"));
288 } else if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "dll"))) {
289 // Assembly is an library (dll)
290 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
291 } else {
292 string referencePath = Helper.MakeFilePath(refr.Path, refr.Name, "dll");
293 kernel.Log.Write(LogType.Warning, "Reference \"{0}\": The specified file doesn't exist.", referencePath);
294 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
295 }
296 }
297
298 ps.WriteLine(" <Private>{0}</Private>", refr.LocalCopy);
299 ps.WriteLine(" </Reference>");
300 }
301 ps.WriteLine(" </ItemGroup>");
302
303 //Project References
304 ps.WriteLine(" <ItemGroup>");
305 foreach (KeyValuePair<ReferenceNode, ProjectNode> pair in projectReferences)
306 {
307 ToolInfo tool = tools[pair.Value.Language];
308 if (tools == null)
309 throw new UnknownLanguageException();
310
311 string path =
312 Helper.MakePathRelativeTo(project.FullPath,
313 Helper.MakeFilePath(pair.Value.FullPath, pair.Value.Name, tool.FileExtension));
314 ps.WriteLine(" <ProjectReference Include=\"{0}\">", path);
315
316 // TODO: Allow reference to visual basic projects
317 ps.WriteLine(" <Name>{0}</Name>", pair.Value.Name);
318 ps.WriteLine(" <Project>{0}</Project>", pair.Value.Guid.ToString("B").ToUpper());
319 ps.WriteLine(" <Package>{0}</Package>", tool.Guid.ToUpper());
320
321 //This is the Copy Local flag in VS
322 ps.WriteLine(" <Private>{0}</Private>", pair.Key.LocalCopy);
323
324 ps.WriteLine(" </ProjectReference>");
325 }
326 ps.WriteLine(" </ItemGroup>");
327
328 // ps.WriteLine(" </Build>");
329 ps.WriteLine(" <ItemGroup>");
330
331 // ps.WriteLine(" <Include>");
332 List<string> list = new List<string>();
333
334 foreach (string path in project.Files)
335 {
336 string lower = path.ToLower();
337 if (lower.EndsWith(".resx"))
338 {
339 string codebehind = String.Format("{0}.Designer{1}", path.Substring(0, path.LastIndexOf('.')), toolInfo.LanguageExtension);
340 if (!list.Contains(codebehind))
341 list.Add(codebehind);
342 }
343
344 }
345
346
347 foreach (string filePath in project.Files)
348 {
349 // Add the filePath with the destination as the key
350 // will use it later to form the copy parameters with Include lists
351 // for each destination
352 if (project.Files.GetBuildAction(filePath) == BuildAction.Copy)
353 continue;
354 // if (file == "Properties\\Bind.Designer.cs")
355 // {
356 // Console.WriteLine("Wait a minute!");
357 // Console.WriteLine(project.Files.GetSubType(file).ToString());
358 // }
359 SubType subType = project.Files.GetSubType(filePath);
360
361 // Visual Studio chokes on file names if forward slash is used as a path separator
362 // instead of backslash. So we must make sure that all file paths written to the
363 // project file use \ as a path separator.
364 string file = filePath.Replace(@"/", @"\");
365
366 if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer
367 && subType != SubType.CodeBehind)
368 {
369 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
370 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file));
371 ps.WriteLine(" <SubType>Designer</SubType>");
372 ps.WriteLine(" </EmbeddedResource>");
373 //
374 }
375
376 if (subType == SubType.Designer)
377 {
378 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file);
379
380 string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs";
381 string dependent_name = filePath.Substring(0, file.LastIndexOf('.')) + ".cs";
382
383 // Check for a parent .cs file with the same name as this designer file
384 if (File.Exists(Helper.NormalizePath(dependent_name)))
385 {
386 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
387 }
388 else
389 {
390 ps.WriteLine(" <Generator>ResXFileCodeGenerator</Generator>");
391 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", Path.GetFileName(autogen_name));
392 ps.WriteLine(" <SubType>" + subType + "</SubType>");
393 }
394
395 ps.WriteLine(" </EmbeddedResource>");
396 if (File.Exists(Helper.NormalizePath(autogen_name)))
397 {
398 ps.WriteLine(" <Compile Include=\"{0}\">", autogen_name);
399 //ps.WriteLine(" <DesignTime>True</DesignTime>");
400
401 // If a parent .cs file exists, link this autogen file to it. Otherwise link
402 // to the designer file
403 if (File.Exists(dependent_name))
404 {
405 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
406 }
407 else
408 {
409 ps.WriteLine(" <AutoGen>True</AutoGen>");
410 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(filePath));
411 }
412
413 ps.WriteLine(" </Compile>");
414 }
415 list.Add(autogen_name);
416 }
417 if (subType == SubType.Settings)
418 {
419 ps.Write(" <{0} ", project.Files.GetBuildAction(filePath));
420 ps.WriteLine("Include=\"{0}\">", file);
421 string fileName = Path.GetFileName(filePath);
422 if (project.Files.GetBuildAction(filePath) == BuildAction.None)
423 {
424 ps.WriteLine(" <Generator>SettingsSingleFileGenerator</Generator>");
425 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
426 }
427 else
428 {
429 ps.WriteLine(" <SubType>Code</SubType>");
430 ps.WriteLine(" <AutoGen>True</AutoGen>");
431 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>");
432 string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.'));
433 string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.'));
434 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(fileNameShorter + ".settings"));
435 }
436 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(filePath));
437 }
438 else if (subType != SubType.Designer)
439 {
440 string path = Helper.NormalizePath(file);
441 string path_lower = path.ToLower();
442
443 if (!list.Contains(filePath))
444 {
445 ps.Write(" <{0} ", project.Files.GetBuildAction(filePath));
446
447 int startPos = 0;
448 if (project.Files.GetPreservePath(filePath))
449 {
450 while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1)
451 startPos++;
452
453 }
454 else
455 {
456 startPos = file.LastIndexOf(Path.GetFileName(path));
457 }
458
459 // be sure to write out the path with backslashes so VS recognizes
460 // the file properly.
461 ps.WriteLine("Include=\"{0}\">", file);
462
463 int last_period_index = file.LastIndexOf('.');
464 string short_file_name = (last_period_index >= 0)
465 ? file.Substring(0, last_period_index)
466 : file;
467 string extension = Path.GetExtension(path);
468 // make this upper case, so that when File.Exists tests for the
469 // existence of a designer file on a case-sensitive platform,
470 // it is correctly identified.
471 string designer_format = string.Format(".Designer{0}", extension);
472
473 if (path_lower.EndsWith(designer_format.ToLowerInvariant()))
474 {
475 int designer_index = path.IndexOf(designer_format);
476 string file_name = path.Substring(0, designer_index);
477
478 // There are two corrections to the next lines:
479 // 1. Fix the connection between a designer file and a form
480 // or usercontrol that don't have an associated resx file.
481 // 2. Connect settings files to associated designer files.
482 if (File.Exists(file_name + extension))
483 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + extension));
484 else if (File.Exists(file_name + ".resx"))
485 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".resx"));
486 else if (File.Exists(file_name + ".settings"))
487 {
488 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".settings"));
489 ps.WriteLine(" <AutoGen>True</AutoGen>");
490 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>");
491 }
492 }
493 else if (subType == SubType.CodeBehind)
494 {
495 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(short_file_name));
496 }
497 if (project.Files.GetIsLink(filePath))
498 {
499 string alias = project.Files.GetLinkPath(filePath);
500 alias += file.Substring(startPos);
501 alias = Helper.NormalizePath(alias);
502 ps.WriteLine(" <Link>{0}</Link>", alias);
503 }
504 else if (project.Files.GetBuildAction(filePath) != BuildAction.None)
505 {
506 if (project.Files.GetBuildAction(filePath) != BuildAction.EmbeddedResource)
507 {
508 ps.WriteLine(" <SubType>{0}</SubType>", subType);
509 }
510 }
511
512 if (project.Files.GetCopyToOutput(filePath) != CopyToOutput.Never)
513 {
514 ps.WriteLine(" <CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(filePath));
515 }
516
517 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(filePath));
518 }
519 }
520 }
521 ps.WriteLine(" </ItemGroup>");
522
523 /*
524 * Copy Task
525 *
526 */
527 if ( project.Files.CopyFiles > 0 ) {
528
529 Dictionary<string, string> IncludeTags = new Dictionary<string, string>();
530 int TagCount = 0;
531
532 // Handle Copy tasks
533 ps.WriteLine(" <ItemGroup>");
534 foreach (string destPath in project.Files.Destinations)
535 {
536 string tag = "FilesToCopy_" + TagCount.ToString("0000");
537
538 ps.WriteLine(" <{0} Include=\"{1}\" />", tag, String.Join(";", project.Files.SourceFiles(destPath)));
539 IncludeTags.Add(destPath, tag);
540 TagCount++;
541 }
542
543 ps.WriteLine(" </ItemGroup>");
544
545 ps.WriteLine(" <Target Name=\"CopyFiles\">");
546
547 foreach (string destPath in project.Files.Destinations)
548 {
549 ps.WriteLine(" <Copy SourceFiles=\"@({0})\" DestinationFolder=\"{1}\" />",
550 IncludeTags[destPath], destPath);
551 }
552
553 ps.WriteLine(" </Target>");
554 }
555
556 ps.WriteLine(" <Import Project=\"" + toolInfo.ImportProject + "\" />");
557 ps.WriteLine(" <PropertyGroup>");
558 ps.WriteLine(" <PreBuildEvent>");
559 ps.WriteLine(" </PreBuildEvent>");
560 ps.WriteLine(" <PostBuildEvent>");
561 ps.WriteLine(" </PostBuildEvent>");
562 ps.WriteLine(" </PropertyGroup>");
563 ps.WriteLine("</Project>");
564 }
565 #endregion
566
567 #region User File
568
569 ps = new StreamWriter(projectFile + ".user");
570 using (ps)
571 {
572 // Get the first configuration from the project.
573 ConfigurationNode firstConfiguration = null;
574
575 if (project.Configurations.Count > 0)
576 {
577 firstConfiguration = project.Configurations[0];
578 }
579
580 ps.WriteLine("<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
581 //ps.WriteLine( "<VisualStudioProject>" );
582 //ps.WriteLine(" <{0}>", toolInfo.XMLTag);
583 //ps.WriteLine(" <Build>");
584 ps.WriteLine(" <PropertyGroup>");
585 //ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
586
587 if (firstConfiguration != null)
588 {
589 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">{0}</Configuration>", firstConfiguration.Name);
590 ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">{0}</Platform>", firstConfiguration.Platform);
591 }
592
593 ps.WriteLine(" <ReferencePath>{0}</ReferencePath>", MakeRefPath(project));
594 ps.WriteLine(" <LastOpenVersion>{0}</LastOpenVersion>", ProductVersion);
595 ps.WriteLine(" <ProjectView>ProjectFiles</ProjectView>");
596 ps.WriteLine(" <ProjectTrust>0</ProjectTrust>");
597 ps.WriteLine(" </PropertyGroup>");
598 foreach (ConfigurationNode conf in project.Configurations)
599 {
600 ps.Write(" <PropertyGroup");
601 ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|{1}' \"", conf.Name, conf.Platform);
602 ps.WriteLine(" />");
603 }
604 ps.WriteLine("</Project>");
605 }
606 #endregion
607
608 kernel.CurrentWorkingDirectory.Pop();
609 }
610
611 private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk)
612 {
613 kernel.Log.Write("Creating {0} solution and project files", VersionName);
614
615 foreach (SolutionNode child in solution.Solutions)
616 {
617 kernel.Log.Write("...Creating folder: {0}", child.Name);
618 WriteSolution(child, false);
619 }
620
621 foreach (ProjectNode project in solution.Projects)
622 {
623 kernel.Log.Write("...Creating project: {0}", project.Name);
624 WriteProject(solution, project);
625 }
626
627 foreach (DatabaseProjectNode project in solution.DatabaseProjects)
628 {
629 kernel.Log.Write("...Creating database project: {0}", project.Name);
630 WriteDatabaseProject(solution, project);
631 }
632
633 if (writeSolutionToDisk) // only write main solution
634 {
635 kernel.Log.Write("");
636 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
637
638 using (StreamWriter ss = new StreamWriter(solutionFile))
639 {
640 kernel.CurrentWorkingDirectory.Push();
641 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
642
643 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
644 ss.WriteLine(SolutionTag);
645
646 WriteProjectDeclarations(ss, solution, solution);
647
648 ss.WriteLine("Global");
649
650 ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
651 foreach (ConfigurationNode conf in solution.Configurations)
652 {
653 ss.WriteLine("\t\t{0} = {0}", conf.NameAndPlatform);
654 }
655 ss.WriteLine("\tEndGlobalSection");
656
657 ss.WriteLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
658 WriteConfigurationLines(solution.Configurations, solution, ss);
659 ss.WriteLine("\tEndGlobalSection");
660
661 if (solution.Solutions.Count > 0)
662 {
663 ss.WriteLine("\tGlobalSection(NestedProjects) = preSolution");
664 foreach (SolutionNode embeddedSolution in solution.Solutions)
665 {
666 WriteNestedProjectMap(ss, embeddedSolution);
667 }
668 ss.WriteLine("\tEndGlobalSection");
669 }
670
671 ss.WriteLine("EndGlobal");
672 }
673
674 kernel.CurrentWorkingDirectory.Pop();
675 }
676 }
677
678 private void WriteProjectDeclarations(TextWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution)
679 {
680 foreach (SolutionNode childSolution in embeddedSolution.Solutions)
681 {
682 WriteEmbeddedSolution(writer, childSolution);
683 WriteProjectDeclarations(writer, actualSolution, childSolution);
684 }
685
686 foreach (ProjectNode project in embeddedSolution.Projects)
687 {
688 WriteProject(actualSolution, writer, project);
689 }
690
691 foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
692 {
693 WriteProject(actualSolution, writer, dbProject);
694 }
695
696 if (actualSolution.Guid == embeddedSolution.Guid)
697 {
698 WriteSolutionFiles(actualSolution, writer);
699 }
700 }
701
702 private static void WriteNestedProjectMap(TextWriter writer, SolutionNode embeddedSolution)
703 {
704 foreach (ProjectNode project in embeddedSolution.Projects)
705 {
706 WriteNestedProject(writer, embeddedSolution, project.Guid);
707 }
708
709 foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
710 {
711 WriteNestedProject(writer, embeddedSolution, dbProject.Guid);
712 }
713
714 foreach (SolutionNode child in embeddedSolution.Solutions)
715 {
716 WriteNestedProject(writer, embeddedSolution, child.Guid);
717 WriteNestedProjectMap(writer, child);
718 }
719 }
720
721 private static void WriteNestedProject(TextWriter writer, SolutionNode solution, Guid projectGuid)
722 {
723 WriteNestedFolder(writer, solution.Guid, projectGuid);
724 }
725
726 private static void WriteNestedFolder(TextWriter writer, Guid parentGuid, Guid childGuid)
727 {
728 writer.WriteLine("\t\t{0} = {1}",
729 childGuid.ToString("B").ToUpper(),
730 parentGuid.ToString("B").ToUpper());
731 }
732
733 private static void WriteConfigurationLines(IEnumerable<ConfigurationNode> configurations, SolutionNode solution, TextWriter ss)
734 {
735 foreach (ProjectNode project in solution.Projects)
736 {
737 foreach (ConfigurationNode conf in configurations)
738 {
739 ss.WriteLine("\t\t{0}.{1}.ActiveCfg = {1}",
740 project.Guid.ToString("B").ToUpper(),
741 conf.NameAndPlatform);
742
743 ss.WriteLine("\t\t{0}.{1}.Build.0 = {1}",
744 project.Guid.ToString("B").ToUpper(),
745 conf.NameAndPlatform);
746 }
747 }
748
749 foreach (SolutionNode child in solution.Solutions)
750 {
751 WriteConfigurationLines(configurations, child, ss);
752 }
753 }
754
755 private void WriteSolutionFiles(SolutionNode solution, TextWriter ss)
756 {
757 if(solution.Files != null && solution.Files.Count > 0)
758 WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files);
759 }
760
761 private void WriteEmbeddedSolution(TextWriter writer, SolutionNode embeddedSolution)
762 {
763 WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files);
764 }
765
766 private void WriteProject(SolutionNode solution, TextWriter ss, ProjectNode project)
767 {
768 WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath);
769 }
770
771 private void WriteProject(SolutionNode solution, TextWriter ss, DatabaseProjectNode dbProject)
772 {
773 if (solution.Files != null && solution.Files.Count > 0)
774 WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath);
775 }
776
777 const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\"";
778 const string ProjectDeclarationEndFormat = "EndProject";
779
780 private void WriteProject(TextWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath)
781 {
782 if (!tools.ContainsKey(language))
783 throw new UnknownLanguageException("Unknown .NET language: " + language);
784
785 ToolInfo toolInfo = tools[language];
786
787 string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath);
788
789 path = Helper.MakeFilePath(path, name, toolInfo.FileExtension);
790
791 WriteProject(ss, language, guid, name, path);
792 }
793
794 private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location)
795 {
796 WriteProject(writer, language, projectGuid, name, location, null);
797 }
798
799 private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files)
800 {
801 if (!tools.ContainsKey(language))
802 throw new UnknownLanguageException("Unknown .NET language: " + language);
803
804 ToolInfo toolInfo = tools[language];
805
806 writer.WriteLine(ProjectDeclarationBeginFormat,
807 toolInfo.Guid,
808 name,
809 location,
810 projectGuid.ToString("B").ToUpper());
811
812 if (files != null)
813 {
814 writer.WriteLine("\tProjectSection(SolutionItems) = preProject");
815
816 foreach (string file in files)
817 writer.WriteLine("\t\t{0} = {0}", file);
818
819 writer.WriteLine("\tEndProjectSection");
820 }
821
822 writer.WriteLine(ProjectDeclarationEndFormat);
823 }
824
825 private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project)
826 {
827 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp");
828 IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), " ");
829
830 kernel.CurrentWorkingDirectory.Push();
831
832 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
833
834 using (ps)
835 {
836 ps.WriteLine("# Microsoft Developer Studio Project File - Database Project");
837 ps.WriteLine("Begin DataProject = \"{0}\"", project.Name);
838 ps.Indent++;
839 ps.WriteLine("MSDTVersion = \"80\"");
840 // TODO: Use the project.Files property
841 if (ContainsSqlFiles(Path.GetDirectoryName(projectFile)))
842 WriteDatabaseFoldersAndFiles(ps, Path.GetDirectoryName(projectFile));
843
844 ps.WriteLine("Begin DBRefFolder = \"Database References\"");
845 ps.Indent++;
846 foreach (DatabaseReferenceNode reference in project.References)
847 {
848 ps.WriteLine("Begin DBRefNode = \"{0}\"", reference.Name);
849 ps.Indent++;
850 ps.WriteLine("ConnectStr = \"{0}\"", reference.ConnectionString);
851 ps.WriteLine("Provider = \"{0}\"", reference.ProviderId.ToString("B").ToUpper());
852 //ps.WriteLine("Colorizer = 5");
853 ps.Indent--;
854 ps.WriteLine("End");
855 }
856 ps.Indent--;
857 ps.WriteLine("End");
858 ps.Indent--;
859 ps.WriteLine("End");
860
861 ps.Flush();
862 }
863
864 kernel.CurrentWorkingDirectory.Pop();
865 }
866
867 private static bool ContainsSqlFiles(string folder)
868 {
869 if(Directory.GetFiles(folder, "*.sql").Length > 0)
870 return true; // if the folder contains 1 .sql file, that's good enough
871
872 foreach (string child in Directory.GetDirectories(folder))
873 {
874 if (ContainsSqlFiles(child))
875 return true; // if 1 child folder contains a .sql file, still good enough
876 }
877
878 return false;
879 }
880
881 private static void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder)
882 {
883 foreach (string child in Directory.GetDirectories(folder))
884 {
885 if (ContainsSqlFiles(child))
886 {
887 writer.WriteLine("Begin Folder = \"{0}\"", Path.GetFileName(child));
888 writer.Indent++;
889 WriteDatabaseFoldersAndFiles(writer, child);
890 writer.Indent--;
891 writer.WriteLine("End");
892 }
893 }
894 foreach (string file in Directory.GetFiles(folder, "*.sql"))
895 {
896 writer.WriteLine("Script = \"{0}\"", Path.GetFileName(file));
897 }
898 }
899
900 private void CleanProject(ProjectNode project)
901 {
902 kernel.Log.Write("...Cleaning project: {0}", project.Name);
903
904 ToolInfo toolInfo = tools[project.Language];
905 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
906 string userFile = projectFile + ".user";
907
908 Helper.DeleteIfExists(projectFile);
909 Helper.DeleteIfExists(userFile);
910 }
911
912 private void CleanSolution(SolutionNode solution)
913 {
914 kernel.Log.Write("Cleaning {0} solution and project files", VersionName, solution.Name);
915
916 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
917 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
918
919 Helper.DeleteIfExists(slnFile);
920 Helper.DeleteIfExists(suoFile);
921
922 foreach (ProjectNode project in solution.Projects)
923 {
924 CleanProject(project);
925 }
926
927 kernel.Log.Write("");
928 }
929
930 #endregion
931
932 #region ITarget Members
933
934 /// <summary>
935 /// Writes the specified kern.
936 /// </summary>
937 /// <param name="kern">The kern.</param>
938 public virtual void Write(Kernel kern)
939 {
940 if (kern == null)
941 {
942 throw new ArgumentNullException("kern");
943 }
944 kernel = kern;
945 foreach (SolutionNode sol in kernel.Solutions)
946 {
947 WriteSolution(sol, true);
948 }
949 kernel = null;
950 }
951
952 /// <summary>
953 /// Cleans the specified kern.
954 /// </summary>
955 /// <param name="kern">The kern.</param>
956 public virtual void Clean(Kernel kern)
957 {
958 if (kern == null)
959 {
960 throw new ArgumentNullException("kern");
961 }
962 kernel = kern;
963 foreach (SolutionNode sol in kernel.Solutions)
964 {
965 CleanSolution(sol);
966 }
967 kernel = null;
968 }
969
970 #endregion
971 }
972}
diff --git a/Prebuild/src/Core/Targets/VSVersion.cs b/Prebuild/src/Core/Targets/VSVersion.cs
new file mode 100644
index 0000000..a7434c6
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VSVersion.cs
@@ -0,0 +1,54 @@
1#region BSD License
2/*
3Copyright (c) 2008-2009 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com), John Anderson (sontek@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26namespace Prebuild.Core.Targets
27{
28 /// <summary>
29 ///
30 /// </summary>
31 public enum VSVersion
32 {
33 /// <summary>
34 /// Visual Studio 2002
35 /// </summary>
36 VS70,
37 /// <summary>
38 /// Visual Studio 2003
39 /// </summary>
40 VS71,
41 /// <summary>
42 /// Visual Studio 2005
43 /// </summary>
44 VS80,
45 /// <summary>
46 /// Visual Studio 2008
47 /// </summary>
48 VS90,
49 /// <summary>
50 /// Visual Studio 2010
51 /// </summary>
52 VS10
53 }
54}
diff --git a/Prebuild/src/Core/Targets/XcodeTarget.cs b/Prebuild/src/Core/Targets/XcodeTarget.cs
new file mode 100644
index 0000000..d2c86a0
--- /dev/null
+++ b/Prebuild/src/Core/Targets/XcodeTarget.cs
@@ -0,0 +1,594 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Reflection;
29using System.Text.RegularExpressions;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Nodes;
34using Prebuild.Core.Utilities;
35
36namespace Prebuild.Core.Targets
37{
38 /// <summary>
39 ///
40 /// </summary>
41 [Target("xcode")]
42 public class XcodeTarget : ITarget
43 {
44 #region Fields
45
46 private Kernel m_Kernel;
47
48 #endregion
49
50 #region Private Methods
51
52 private static string PrependPath(string path)
53 {
54 string tmpPath = Helper.NormalizePath(path, '/');
55 Regex regex = new Regex(@"(\w):/(\w+)");
56 Match match = regex.Match(tmpPath);
57 //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
58 //{
59 tmpPath = Helper.NormalizePath(tmpPath);
60 //}
61 // else
62 // {
63 // tmpPath = Helper.NormalizePath("./" + tmpPath);
64 // }
65
66 return tmpPath;
67 }
68
69 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
70 {
71 string ret = "";
72 if (solution.ProjectsTable.ContainsKey(refr.Name))
73 {
74 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
75 string fileRef = FindFileReference(refr.Name, project);
76 string finalPath = Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + "/${build.dir}/", refr.Name, "dll"), '/');
77 ret += finalPath;
78 return ret;
79 }
80 else
81 {
82 ProjectNode project = (ProjectNode)refr.Parent;
83 string fileRef = FindFileReference(refr.Name, project);
84
85 if (refr.Path != null || fileRef != null)
86 {
87 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path + "/" + refr.Name + ".dll", '/') : fileRef;
88 ret += finalPath;
89 return ret;
90 }
91
92 try
93 {
94 //Assembly assem = Assembly.Load(refr.Name);
95 //if (assem != null)
96 //{
97 //ret += (refr.Name + ".dll");
98 //}
99 //else
100 //{
101 ret += (refr.Name + ".dll");
102 //}
103 }
104 catch (System.NullReferenceException e)
105 {
106 e.ToString();
107 ret += refr.Name + ".dll";
108 }
109 }
110 return ret;
111 }
112
113 private static string BuildReferencePath(SolutionNode solution, ReferenceNode refr)
114 {
115 string ret = "";
116 if (solution.ProjectsTable.ContainsKey(refr.Name))
117 {
118 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
119 string fileRef = FindFileReference(refr.Name, project);
120 string finalPath = Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + "/${build.dir}/"), '/');
121 ret += finalPath;
122 return ret;
123 }
124 else
125 {
126 ProjectNode project = (ProjectNode)refr.Parent;
127 string fileRef = FindFileReference(refr.Name, project);
128
129 if (refr.Path != null || fileRef != null)
130 {
131 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path, '/') : fileRef;
132 ret += finalPath;
133 return ret;
134 }
135
136 try
137 {
138 Assembly assem = Assembly.Load(refr.Name);
139 if (assem != null)
140 {
141 ret += "";
142 }
143 else
144 {
145 ret += "";
146 }
147 }
148 catch (System.NullReferenceException e)
149 {
150 e.ToString();
151 ret += "";
152 }
153 }
154 return ret;
155 }
156
157 private static string FindFileReference(string refName, ProjectNode project)
158 {
159 foreach (ReferencePathNode refPath in project.ReferencePaths)
160 {
161 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
162
163 if (File.Exists(fullPath))
164 {
165 return fullPath;
166 }
167 }
168
169 return null;
170 }
171
172 /// <summary>
173 /// Gets the XML doc file.
174 /// </summary>
175 /// <param name="project">The project.</param>
176 /// <param name="conf">The conf.</param>
177 /// <returns></returns>
178 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
179 {
180 if (conf == null)
181 {
182 throw new ArgumentNullException("conf");
183 }
184 if (project == null)
185 {
186 throw new ArgumentNullException("project");
187 }
188 string docFile = (string)conf.Options["XmlDocFile"];
189 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
190 // {
191 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
192 // }
193 return docFile;
194 }
195
196 private void WriteProject(SolutionNode solution, ProjectNode project)
197 {
198 string projFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build");
199 StreamWriter ss = new StreamWriter(projFile);
200
201 m_Kernel.CurrentWorkingDirectory.Push();
202 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
203 bool hasDoc = false;
204
205 using (ss)
206 {
207 ss.WriteLine("<?xml version=\"1.0\" ?>");
208 ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name);
209 ss.WriteLine(" <target name=\"{0}\">", "build");
210 ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />");
211 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />");
212 ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/${build.dir}\">");
213 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
214 foreach (ReferenceNode refr in project.References)
215 {
216 if (refr.LocalCopy)
217 {
218 ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, refr)) + "\" />", '/'));
219 }
220 }
221 ss.WriteLine(" </fileset>");
222 ss.WriteLine(" </copy>");
223 ss.Write(" <csc");
224 ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
225 ss.Write(" debug=\"{0}\"", "${build.debug}");
226 foreach (ConfigurationNode conf in project.Configurations)
227 {
228 if (conf.Options.KeyFile != "")
229 {
230 ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile);
231 break;
232 }
233 }
234 foreach (ConfigurationNode conf in project.Configurations)
235 {
236 ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe);
237 break;
238 }
239 foreach (ConfigurationNode conf in project.Configurations)
240 {
241 ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines);
242 break;
243 }
244 foreach (ConfigurationNode conf in project.Configurations)
245 {
246 if (GetXmlDocFile(project, conf) != "")
247 {
248 ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf));
249 hasDoc = true;
250 }
251 break;
252 }
253 ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}");
254 if (project.Type == ProjectType.Library)
255 {
256 ss.Write(".dll\"");
257 }
258 else
259 {
260 ss.Write(".exe\"");
261 }
262 if (project.AppIcon != null && project.AppIcon.Length != 0)
263 {
264 ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/'));
265 }
266 ss.WriteLine(">");
267 ss.WriteLine(" <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
268 foreach (string file in project.Files)
269 {
270 switch (project.Files.GetBuildAction(file))
271 {
272 case BuildAction.EmbeddedResource:
273 ss.WriteLine(" {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
274 break;
275 default:
276 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
277 {
278 ss.WriteLine(" <include name=\"{0}\" />", file.Substring(0, file.LastIndexOf('.')) + ".resx");
279 }
280 break;
281 }
282 }
283 //if (project.Files.GetSubType(file).ToString() != "Code")
284 //{
285 // ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
286
287 ss.WriteLine(" </resources>");
288 ss.WriteLine(" <sources failonempty=\"true\">");
289 foreach (string file in project.Files)
290 {
291 switch (project.Files.GetBuildAction(file))
292 {
293 case BuildAction.Compile:
294 ss.WriteLine(" <include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
295 break;
296 default:
297 break;
298 }
299 }
300 ss.WriteLine(" </sources>");
301 ss.WriteLine(" <references basedir=\"${project::get-base-directory()}\">");
302 ss.WriteLine(" <lib>");
303 ss.WriteLine(" <include name=\"${project::get-base-directory()}\" />");
304 ss.WriteLine(" <include name=\"${project::get-base-directory()}/${build.dir}\" />");
305 ss.WriteLine(" </lib>");
306 foreach (ReferenceNode refr in project.References)
307 {
308 ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, refr)) + "\" />", '/'));
309 }
310 ss.WriteLine(" </references>");
311
312 ss.WriteLine(" </csc>");
313 ss.WriteLine(" </target>");
314
315 ss.WriteLine(" <target name=\"clean\">");
316 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
317 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
318 ss.WriteLine(" </target>");
319
320 ss.WriteLine(" <target name=\"doc\" description=\"Creates documentation.\">");
321 if (hasDoc)
322 {
323 ss.WriteLine(" <property name=\"doc.target\" value=\"\" />");
324 ss.WriteLine(" <if test=\"${platform::is-unix()}\">");
325 ss.WriteLine(" <property name=\"doc.target\" value=\"Web\" />");
326 ss.WriteLine(" </if>");
327 ss.WriteLine(" <ndoc failonerror=\"false\" verbose=\"true\">");
328 ss.WriteLine(" <assemblies basedir=\"${project::get-base-directory()}\">");
329 ss.Write(" <include name=\"${build.dir}/${project::get-name()}");
330 if (project.Type == ProjectType.Library)
331 {
332 ss.WriteLine(".dll\" />");
333 }
334 else
335 {
336 ss.WriteLine(".exe\" />");
337 }
338
339 ss.WriteLine(" </assemblies>");
340 ss.WriteLine(" <summaries basedir=\"${project::get-base-directory()}\">");
341 ss.WriteLine(" <include name=\"${build.dir}/${project::get-name()}.xml\"/>");
342 ss.WriteLine(" </summaries>");
343 ss.WriteLine(" <referencepaths basedir=\"${project::get-base-directory()}\">");
344 ss.WriteLine(" <include name=\"${build.dir}\" />");
345 // foreach(ReferenceNode refr in project.References)
346 // {
347 // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/');
348 // if (path != "")
349 // {
350 // ss.WriteLine(" <include name=\"{0}\" />", path);
351 // }
352 // }
353 ss.WriteLine(" </referencepaths>");
354 ss.WriteLine(" <documenters>");
355 ss.WriteLine(" <documenter name=\"MSDN\">");
356 ss.WriteLine(" <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />");
357 ss.WriteLine(" <property name=\"OutputTarget\" value=\"${doc.target}\" />");
358 ss.WriteLine(" <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />");
359 ss.WriteLine(" <property name=\"IncludeFavorites\" value=\"False\" />");
360 ss.WriteLine(" <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />");
361 ss.WriteLine(" <property name=\"SplitTOCs\" value=\"False\" />");
362 ss.WriteLine(" <property name=\"DefaulTOC\" value=\"\" />");
363 ss.WriteLine(" <property name=\"ShowVisualBasic\" value=\"True\" />");
364 ss.WriteLine(" <property name=\"AutoDocumentConstructors\" value=\"True\" />");
365 ss.WriteLine(" <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />");
366 ss.WriteLine(" <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />");
367 ss.WriteLine(" <property name=\"ShowMissingParams\" value=\"${build.debug}\" />");
368 ss.WriteLine(" <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />");
369 ss.WriteLine(" <property name=\"ShowMissingValues\" value=\"${build.debug}\" />");
370 ss.WriteLine(" <property name=\"DocumentInternals\" value=\"False\" />");
371 ss.WriteLine(" <property name=\"DocumentPrivates\" value=\"False\" />");
372 ss.WriteLine(" <property name=\"DocumentProtected\" value=\"True\" />");
373 ss.WriteLine(" <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />");
374 ss.WriteLine(" <property name=\"IncludeAssemblyVersion\" value=\"True\" />");
375 ss.WriteLine(" </documenter>");
376 ss.WriteLine(" </documenters>");
377 ss.WriteLine(" </ndoc>");
378 }
379 ss.WriteLine(" </target>");
380 ss.WriteLine("</project>");
381 }
382 m_Kernel.CurrentWorkingDirectory.Pop();
383 }
384
385 private void WriteCombine(SolutionNode solution)
386 {
387 m_Kernel.Log.Write("Creating Xcode build files");
388 foreach (ProjectNode project in solution.Projects)
389 {
390 if (m_Kernel.AllowProject(project.FilterGroups))
391 {
392 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
393 WriteProject(solution, project);
394 }
395 }
396
397 m_Kernel.Log.Write("");
398 DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj"));
399 if (!directoryInfo.Exists)
400 {
401 directoryInfo.Create();
402 }
403 string combFile = Helper.MakeFilePath(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj"), "project", "pbxproj");
404 StreamWriter ss = new StreamWriter(combFile);
405
406 m_Kernel.CurrentWorkingDirectory.Push();
407 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
408
409 using (ss)
410 {
411 ss.WriteLine("<?xml version=\"1.0\" ?>");
412 ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name);
413 ss.WriteLine(" <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>");
414 ss.WriteLine();
415
416 //ss.WriteLine(" <property name=\"dist.dir\" value=\"dist\" />");
417 //ss.WriteLine(" <property name=\"source.dir\" value=\"source\" />");
418 ss.WriteLine(" <property name=\"bin.dir\" value=\"bin\" />");
419 ss.WriteLine(" <property name=\"obj.dir\" value=\"obj\" />");
420 ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />");
421 ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
422
423 foreach (ConfigurationNode conf in solution.Configurations)
424 {
425 // Set the project.config to a non-debug configuration
426 if (conf.Options["DebugInformation"].ToString().ToLower() != "true")
427 {
428 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
429 }
430 ss.WriteLine();
431 ss.WriteLine(" <target name=\"{0}\" description=\"\">", conf.Name);
432 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
433 ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
434 ss.WriteLine(" </target>");
435 ss.WriteLine();
436 }
437
438 ss.WriteLine(" <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">");
439 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />");
440 ss.WriteLine(" </target>");
441 ss.WriteLine();
442
443 ss.WriteLine(" <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">");
444 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />");
445 ss.WriteLine(" </target>");
446 ss.WriteLine();
447
448 ss.WriteLine(" <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">");
449 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />");
450 ss.WriteLine(" </target>");
451 ss.WriteLine();
452
453 ss.WriteLine(" <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">");
454 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />");
455 ss.WriteLine(" </target>");
456 ss.WriteLine();
457
458 ss.WriteLine(" <target name=\"init\" description=\"\">");
459 ss.WriteLine(" <call target=\"${project.config}\" />");
460 ss.WriteLine(" <sysinfo />");
461 ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />");
462 ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />");
463 ss.WriteLine(" </target>");
464 ss.WriteLine();
465
466 ss.WriteLine(" <target name=\"clean\" description=\"\">");
467 ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />");
468 //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />");
469 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
470 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
471 //foreach(ProjectNode project in solution.Projects)
472 //{
473 // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
474 // ss.Write(" <nant buildfile=\"{0}\"",
475 // Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"),'/'));
476 // ss.WriteLine(" target=\"clean\" />");
477 //}
478 ss.WriteLine(" </target>");
479 ss.WriteLine();
480
481 ss.WriteLine(" <target name=\"build\" depends=\"init\" description=\"\">");
482
483 foreach (ProjectNode project in solution.ProjectsTableOrder)
484 {
485 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
486 ss.Write(" <nant buildfile=\"{0}\"",
487 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"), '/'));
488 ss.WriteLine(" target=\"build\" />");
489 }
490 ss.WriteLine(" </target>");
491 ss.WriteLine();
492
493 ss.WriteLine(" <target name=\"build-release\" depends=\"Release, init, build\" description=\"Builds in Release mode\" />");
494 ss.WriteLine();
495 ss.WriteLine(" <target name=\"build-debug\" depends=\"Debug, init, build\" description=\"Builds in Debug mode\" />");
496 ss.WriteLine();
497 //ss.WriteLine(" <target name=\"package\" depends=\"clean, doc, copyfiles, zip\" description=\"Builds in Release mode\" />");
498 ss.WriteLine(" <target name=\"package\" depends=\"clean, doc\" description=\"Builds all\" />");
499 ss.WriteLine();
500
501 ss.WriteLine(" <target name=\"doc\" depends=\"build-release\">");
502 ss.WriteLine(" <echo message=\"Generating all documentation from all builds\" />");
503 foreach (ProjectNode project in solution.Projects)
504 {
505 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
506 ss.Write(" <nant buildfile=\"{0}\"",
507 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"), '/'));
508 ss.WriteLine(" target=\"doc\" />");
509 }
510 ss.WriteLine(" </target>");
511 ss.WriteLine();
512 ss.WriteLine("</project>");
513 }
514
515 m_Kernel.CurrentWorkingDirectory.Pop();
516 }
517
518 private void CleanProject(ProjectNode project)
519 {
520 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
521 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build");
522 Helper.DeleteIfExists(projectFile);
523 }
524
525 private void CleanSolution(SolutionNode solution)
526 {
527 m_Kernel.Log.Write("Cleaning Xcode build files for", solution.Name);
528
529 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
530 Helper.DeleteIfExists(slnFile);
531
532 foreach (ProjectNode project in solution.Projects)
533 {
534 CleanProject(project);
535 }
536
537 m_Kernel.Log.Write("");
538 }
539
540 #endregion
541
542 #region ITarget Members
543
544 /// <summary>
545 /// Writes the specified kern.
546 /// </summary>
547 /// <param name="kern">The kern.</param>
548 public void Write(Kernel kern)
549 {
550 if (kern == null)
551 {
552 throw new ArgumentNullException("kern");
553 }
554 m_Kernel = kern;
555 foreach (SolutionNode solution in kern.Solutions)
556 {
557 WriteCombine(solution);
558 }
559 m_Kernel = null;
560 }
561
562 /// <summary>
563 /// Cleans the specified kern.
564 /// </summary>
565 /// <param name="kern">The kern.</param>
566 public virtual void Clean(Kernel kern)
567 {
568 if (kern == null)
569 {
570 throw new ArgumentNullException("kern");
571 }
572 m_Kernel = kern;
573 foreach (SolutionNode sol in kern.Solutions)
574 {
575 CleanSolution(sol);
576 }
577 m_Kernel = null;
578 }
579
580 /// <summary>
581 /// Gets the name.
582 /// </summary>
583 /// <value>The name.</value>
584 public string Name
585 {
586 get
587 {
588 return "xcode";
589 }
590 }
591
592 #endregion
593 }
594}
diff --git a/Prebuild/src/Core/UnknownLanguageException.cs b/Prebuild/src/Core/UnknownLanguageException.cs
new file mode 100644
index 0000000..71fc885
--- /dev/null
+++ b/Prebuild/src/Core/UnknownLanguageException.cs
@@ -0,0 +1,63 @@
1/*
2 * $RCSfile$
3 * Copyright (C) 2004, 2005 David Hudson (jendave@yahoo.com)
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20using System;
21using System.Runtime.Serialization;
22
23namespace Prebuild.Core
24{
25 /// <summary>
26 /// </summary>
27 [Serializable()]
28 public class UnknownLanguageException : Exception
29 {
30 /// <summary>
31 /// Basic exception.
32 /// </summary>
33 public UnknownLanguageException()
34 {
35 }
36
37 /// <summary>
38 /// Exception with specified string
39 /// </summary>
40 /// <param name="message">Exception message</param>
41 public UnknownLanguageException(string message): base(message)
42 {
43 }
44
45 /// <summary>
46 ///
47 /// </summary>
48 /// <param name="message"></param>
49 /// <param name="exception"></param>
50 public UnknownLanguageException(string message, Exception exception) : base(message, exception)
51 {
52 }
53
54 /// <summary>
55 ///
56 /// </summary>
57 /// <param name="info"></param>
58 /// <param name="context"></param>
59 protected UnknownLanguageException(SerializationInfo info, StreamingContext context) : base( info, context )
60 {
61 }
62 }
63}
diff --git a/Prebuild/src/Core/Utilities/CommandLineCollection.cs b/Prebuild/src/Core/Utilities/CommandLineCollection.cs
new file mode 100644
index 0000000..5e6face
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/CommandLineCollection.cs
@@ -0,0 +1,152 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System.Collections;
27using System.Collections.Generic;
28
29namespace Prebuild.Core.Utilities
30{
31 /// <summary>
32 /// The CommandLine class parses and interprets the command-line arguments passed to
33 /// prebuild.
34 /// </summary>
35 public class CommandLineCollection : IEnumerable<KeyValuePair<string, string>>
36 {
37 #region Fields
38
39 // The raw OS arguments
40 private readonly string[] m_RawArgs;
41
42 // Command-line argument storage
43 private readonly Dictionary<string, string> m_Arguments = new Dictionary<string, string>();
44
45 #endregion
46
47 #region Constructors
48
49 /// <summary>
50 /// Create a new CommandLine instance and set some internal variables.
51 /// </summary>
52 public CommandLineCollection(string[] args)
53 {
54 m_RawArgs = args;
55
56 Parse();
57 }
58
59 #endregion
60
61 #region Private Methods
62
63 private void Parse()
64 {
65 if(m_RawArgs.Length < 1)
66 return;
67
68 int idx = 0;
69 string lastArg = null;
70
71 while(idx <m_RawArgs.Length)
72 {
73 string arg = m_RawArgs[idx];
74
75 if(arg.Length > 2 && arg[0] == '/')
76 {
77 arg = arg.Substring(1);
78 lastArg = arg;
79 m_Arguments[arg] = "";
80 }
81 else
82 {
83 if(lastArg != null)
84 {
85 m_Arguments[lastArg] = arg;
86 lastArg = null;
87 }
88 }
89
90 idx++;
91 }
92 }
93
94 #endregion
95
96 #region Public Methods
97
98 /// <summary>
99 /// Wases the passed.
100 /// </summary>
101 /// <param name="arg">The arg.</param>
102 /// <returns></returns>
103 public bool WasPassed(string arg)
104 {
105 return (m_Arguments.ContainsKey(arg));
106 }
107
108 #endregion
109
110 #region Properties
111
112 /// <summary>
113 /// Gets the parameter associated with the command line option
114 /// </summary>
115 /// <remarks>Returns null if option was not specified,
116 /// null string if no parameter was specified, and the value if a parameter was specified</remarks>
117 public string this[string index]
118 {
119 get
120 {
121 if(m_Arguments.ContainsKey(index))
122 {
123 return (m_Arguments[index]);
124 }
125 return null;
126 }
127 }
128
129 #endregion
130
131 #region IEnumerable Members
132
133 /// <summary>
134 /// Returns an enumerator that can iterate through a collection.
135 /// </summary>
136 /// <returns>
137 /// An <see cref="T:System.Collections.IDictionaryEnumerator"/>
138 /// that can be used to iterate through the collection.
139 /// </returns>
140 public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
141 {
142 return m_Arguments.GetEnumerator();
143 }
144
145 IEnumerator IEnumerable.GetEnumerator()
146 {
147 return GetEnumerator();
148 }
149
150 #endregion
151 }
152}
diff --git a/Prebuild/src/Core/Utilities/CurrentDirectory.cs b/Prebuild/src/Core/Utilities/CurrentDirectory.cs
new file mode 100644
index 0000000..d743d83
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/CurrentDirectory.cs
@@ -0,0 +1,68 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28
29namespace Prebuild.Core.Utilities
30{
31 /// <summary>
32 ///
33 /// </summary>
34 public class CurrentDirectory
35 {
36 #region Fields
37
38 private readonly Stack<string> m_Stack = new Stack<string>();
39
40 #endregion
41
42 #region Public Methods
43
44 /// <summary>
45 /// Pushes this instance.
46 /// </summary>
47 public void Push()
48 {
49 m_Stack.Push(Environment.CurrentDirectory);
50 }
51
52 /// <summary>
53 /// Pops this instance.
54 /// </summary>
55 public void Pop()
56 {
57 if(m_Stack.Count < 1)
58 {
59 return;
60 }
61
62 string cwd = m_Stack.Pop();
63 Helper.SetCurrentDir(cwd);
64 }
65
66 #endregion
67 }
68}
diff --git a/Prebuild/src/Core/Utilities/Helper.cs b/Prebuild/src/Core/Utilities/Helper.cs
new file mode 100644
index 0000000..a440e58
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/Helper.cs
@@ -0,0 +1,575 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Diagnostics;
29using System.IO;
30using System.Runtime.InteropServices;
31using System.Text.RegularExpressions;
32using System.Collections.Specialized;
33using System.Xml;
34using Prebuild.Core.Nodes;
35
36namespace Prebuild.Core.Utilities
37{
38 /// <summary>
39 ///
40 /// </summary>
41 public class Helper
42 {
43 #region Fields
44
45 static bool checkForOSVariables;
46
47 /// <summary>
48 ///
49 /// </summary>
50 public static bool CheckForOSVariables
51 {
52 get
53 {
54 return checkForOSVariables;
55 }
56 set
57 {
58 checkForOSVariables = value;
59 }
60 }
61
62 #endregion
63
64 #region Public Methods
65
66 #region String Parsing
67
68 public delegate string StringLookup(string key);
69
70 /// <summary>
71 /// Gets a collection of StringLocationPair objects that represent the matches
72 /// </summary>
73 /// <param name="target">The target.</param>
74 /// <param name="beforeGroup">The before group.</param>
75 /// <param name="afterGroup">The after group.</param>
76 /// <param name="includeDelimitersInSubstrings">if set to <c>true</c> [include delimiters in substrings].</param>
77 /// <returns></returns>
78 public static StringCollection FindGroups(string target, string beforeGroup, string afterGroup, bool includeDelimitersInSubstrings)
79 {
80 if( beforeGroup == null )
81 {
82 throw new ArgumentNullException("beforeGroup");
83 }
84 if( afterGroup == null )
85 {
86 throw new ArgumentNullException("afterGroup");
87 }
88 StringCollection results = new StringCollection();
89 if(target == null || target.Length == 0)
90 {
91 return results;
92 }
93
94 int beforeMod = 0;
95 int afterMod = 0;
96 if(includeDelimitersInSubstrings)
97 {
98 //be sure to not exlude the delims
99 beforeMod = beforeGroup.Length;
100 afterMod = afterGroup.Length;
101 }
102 int startIndex = 0;
103 while((startIndex = target.IndexOf(beforeGroup,startIndex)) != -1) {
104 int endIndex = target.IndexOf(afterGroup,startIndex);//the index of the char after it
105 if(endIndex == -1)
106 {
107 break;
108 }
109 int length = endIndex - startIndex - beforeGroup.Length;//move to the first char in the string
110 string substring = substring = target.Substring(startIndex + beforeGroup.Length - beforeMod,
111 length - afterMod);
112
113 results.Add(substring);
114 //results.Add(new StringLocationPair(substring,startIndex));
115 startIndex = endIndex + 1;
116 //the Interpolate*() methods will not work if expressions are expandded inside expression due to an optimization
117 //so start after endIndex
118
119 }
120 return results;
121 }
122
123 /// <summary>
124 /// Replaces the groups.
125 /// </summary>
126 /// <param name="target">The target.</param>
127 /// <param name="beforeGroup">The before group.</param>
128 /// <param name="afterGroup">The after group.</param>
129 /// <param name="lookup">The lookup.</param>
130 /// <returns></returns>
131 public static string ReplaceGroups(string target, string beforeGroup, string afterGroup, StringLookup lookup) {
132 if( target == null )
133 {
134 throw new ArgumentNullException("target");
135 }
136 //int targetLength = target.Length;
137 StringCollection strings = FindGroups(target,beforeGroup,afterGroup,false);
138 if( lookup == null )
139 {
140 throw new ArgumentNullException("lookup");
141 }
142 foreach(string substring in strings)
143 {
144 target = target.Replace(beforeGroup + substring + afterGroup, lookup(substring) );
145 }
146 return target;
147 }
148
149 /// <summary>
150 /// Replaces ${var} statements in a string with the corresonding values as detirmined by the lookup delegate
151 /// </summary>
152 /// <param name="target">The target.</param>
153 /// <param name="lookup">The lookup.</param>
154 /// <returns></returns>
155 public static string InterpolateForVariables(string target, StringLookup lookup)
156 {
157 return ReplaceGroups(target, "${" , "}" , lookup);
158 }
159
160 /// <summary>
161 /// Replaces ${var} statements in a string with the corresonding environment variable with name var
162 /// </summary>
163 /// <param name="target"></param>
164 /// <returns></returns>
165 public static string InterpolateForEnvironmentVariables(string target)
166 {
167 return InterpolateForVariables(target, new StringLookup(Environment.GetEnvironmentVariable));
168 }
169
170 #endregion
171
172 /// <summary>
173 /// Translates the value.
174 /// </summary>
175 /// <param name="translateType">Type of the translate.</param>
176 /// <param name="translationItem">The translation item.</param>
177 /// <returns></returns>
178 public static object TranslateValue(Type translateType, string translationItem)
179 {
180 if(translationItem == null)
181 {
182 return null;
183 }
184
185 try
186 {
187 string lowerVal = translationItem.ToLower();
188 if(translateType == typeof(bool))
189 {
190 return (lowerVal == "true" || lowerVal == "1" || lowerVal == "y" || lowerVal == "yes" || lowerVal == "on");
191 }
192 else if(translateType == typeof(int))
193 {
194 return (Int32.Parse(translationItem));
195 }
196 else
197 {
198 return translationItem;
199 }
200 }
201 catch(FormatException)
202 {
203 return null;
204 }
205 }
206
207 /// <summary>
208 /// Deletes if exists.
209 /// </summary>
210 /// <param name="file">The file.</param>
211 /// <returns></returns>
212 public static bool DeleteIfExists(string file)
213 {
214 string resFile = null;
215 try
216 {
217 resFile = ResolvePath(file);
218 }
219 catch(ArgumentException)
220 {
221 return false;
222 }
223
224 if(!File.Exists(resFile))
225 {
226 return false;
227 }
228
229 File.Delete(resFile);
230 return true;
231 }
232
233 static readonly char seperator = Path.DirectorySeparatorChar;
234
235 // This little gem was taken from the NeL source, thanks guys!
236 /// <summary>
237 /// Makes a relative path
238 /// </summary>
239 /// <param name="startPath">Path to start from</param>
240 /// <param name="endPath">Path to end at</param>
241 /// <returns>Path that will get from startPath to endPath</returns>
242 public static string MakePathRelativeTo(string startPath, string endPath)
243 {
244 string tmp = NormalizePath(startPath, seperator);
245 string src = NormalizePath(endPath, seperator);
246 string prefix = "";
247
248 while(true)
249 {
250 if((String.Compare(tmp, 0, src, 0, tmp.Length) == 0))
251 {
252 string ret;
253 int size = tmp.Length;
254 if(size == src.Length)
255 {
256 return "./";
257 }
258 if((src.Length > tmp.Length) && src[tmp.Length - 1] != seperator)
259 {
260 }
261 else
262 {
263 ret = prefix + endPath.Substring(size, endPath.Length - size);
264 ret = ret.Trim();
265 if(ret[0] == seperator)
266 {
267 ret = "." + ret;
268 }
269
270 return NormalizePath(ret);
271 }
272
273 }
274
275 if(tmp.Length < 2)
276 {
277 break;
278 }
279
280 int lastPos = tmp.LastIndexOf(seperator, tmp.Length - 2);
281 int prevPos = tmp.IndexOf(seperator);
282
283 if((lastPos == prevPos) || (lastPos == -1))
284 {
285 break;
286 }
287
288 tmp = tmp.Substring(0, lastPos + 1);
289 prefix += ".." + seperator.ToString();
290 }
291
292 return endPath;
293 }
294
295 /// <summary>
296 /// Resolves the path.
297 /// </summary>
298 /// <param name="path">The path.</param>
299 /// <returns></returns>
300 public static string ResolvePath(string path)
301 {
302 string tmpPath = NormalizePath(path);
303 if(tmpPath.Length < 1)
304 {
305 tmpPath = ".";
306 }
307
308 tmpPath = Path.GetFullPath(tmpPath);
309 if(!File.Exists(tmpPath) && !Directory.Exists(tmpPath))
310 {
311 throw new ArgumentException("Path could not be resolved: " + tmpPath);
312 }
313
314 return tmpPath;
315 }
316
317 /// <summary>
318 /// Normalizes the path.
319 /// </summary>
320 /// <param name="path">The path.</param>
321 /// <param name="separatorCharacter">The separator character.</param>
322 /// <returns></returns>
323 public static string NormalizePath(string path, char separatorCharacter)
324 {
325 if(path == null || path == "" || path.Length < 1)
326 {
327 return "";
328 }
329
330 string tmpPath = path.Replace('\\', '/');
331 tmpPath = tmpPath.Replace('/', separatorCharacter);
332 return tmpPath;
333 }
334
335 /// <summary>
336 /// Normalizes the path.
337 /// </summary>
338 /// <param name="path">The path.</param>
339 /// <returns></returns>
340 public static string NormalizePath(string path)
341 {
342 return NormalizePath(path, Path.DirectorySeparatorChar);
343 }
344
345 /// <summary>
346 /// Ends the path.
347 /// </summary>
348 /// <param name="path">The path.</param>
349 /// <param name="separatorCharacter">The separator character.</param>
350 /// <returns></returns>
351 public static string EndPath(string path, char separatorCharacter)
352 {
353 if(path == null || path == "" || path.Length < 1)
354 {
355 return "";
356 }
357
358 if(!path.EndsWith(separatorCharacter.ToString()))
359 {
360 return (path + separatorCharacter);
361 }
362
363 return path;
364 }
365
366 /// <summary>
367 /// Ends the path.
368 /// </summary>
369 /// <param name="path">The path.</param>
370 /// <returns></returns>
371 public static string EndPath(string path)
372 {
373 return EndPath(path, Path.DirectorySeparatorChar);
374 }
375
376 /// <summary>
377 /// Makes the file path.
378 /// </summary>
379 /// <param name="path">The path.</param>
380 /// <param name="name">The name.</param>
381 /// <param name="ext">The ext.</param>
382 /// <returns></returns>
383 public static string MakeFilePath(string path, string name, string ext)
384 {
385 string ret = EndPath(NormalizePath(path));
386
387 if( name == null )
388 {
389 throw new ArgumentNullException("name");
390 }
391
392 ret += name;
393 if(!name.EndsWith("." + ext))
394 {
395 ret += "." + ext;
396 }
397
398 //foreach(char c in Path.GetInvalidPathChars())
399 //{
400 // ret = ret.Replace(c, '_');
401 //}
402
403 return ret;
404 }
405
406 /// <summary>
407 /// Makes the file path.
408 /// </summary>
409 /// <param name="path">The path.</param>
410 /// <param name="name">The name.</param>
411 /// <returns></returns>
412 public static string MakeFilePath(string path, string name)
413 {
414 string ret = EndPath(NormalizePath(path));
415
416 if( name == null )
417 {
418 throw new ArgumentNullException("name");
419 }
420
421 ret += name;
422
423 //foreach (char c in Path.GetInvalidPathChars())
424 //{
425 // ret = ret.Replace(c, '_');
426 //}
427
428 return ret;
429 }
430
431 /// <summary>
432 ///
433 /// </summary>
434 /// <param name="path"></param>
435 /// <returns></returns>
436 public static string MakeReferencePath(string path)
437 {
438 string ret = EndPath(NormalizePath(path));
439
440 //foreach (char c in Path.GetInvalidPathChars())
441 //{
442 // ret = ret.Replace(c, '_');
443 //}
444
445 return ret;
446 }
447
448 /// <summary>
449 /// Sets the current dir.
450 /// </summary>
451 /// <param name="path">The path.</param>
452 public static void SetCurrentDir(string path)
453 {
454 if( path == null )
455 {
456 throw new ArgumentNullException("path");
457 }
458 if(path.Length < 1)
459 {
460 return;
461 }
462
463 Environment.CurrentDirectory = path;
464 }
465
466 /// <summary>
467 /// Checks the type.
468 /// </summary>
469 /// <param name="typeToCheck">The type to check.</param>
470 /// <param name="attr">The attr.</param>
471 /// <param name="inter">The inter.</param>
472 /// <returns></returns>
473 public static object CheckType(Type typeToCheck, Type attr, Type inter)
474 {
475 if(typeToCheck == null || attr == null)
476 {
477 return null;
478 }
479
480 object[] attrs = typeToCheck.GetCustomAttributes(attr, false);
481 if(attrs == null || attrs.Length < 1)
482 {
483 return null;
484 }
485 if( inter == null )
486 {
487 throw new ArgumentNullException("inter");
488 }
489
490 if(typeToCheck.GetInterface(inter.FullName) == null)
491 {
492 return null;
493 }
494
495 return attrs[0];
496 }
497
498 /// <summary>
499 /// Attributes the value.
500 /// </summary>
501 /// <param name="node">The node.</param>
502 /// <param name="attr">The attr.</param>
503 /// <param name="def">The def.</param>
504 /// <returns></returns>
505 public static string AttributeValue(XmlNode node, string attr, string def)
506 {
507 if( node == null )
508 {
509 throw new ArgumentNullException("node");
510 }
511 if(node.Attributes[attr] == null)
512 {
513 return def;
514 }
515 string val = node.Attributes[attr].Value;
516 if(!CheckForOSVariables)
517 {
518 return val;
519 }
520
521 return InterpolateForEnvironmentVariables(val);
522 }
523
524 /// <summary>
525 /// Parses the boolean.
526 /// </summary>
527 /// <param name="node">The node.</param>
528 /// <param name="attr">The attr.</param>
529 /// <param name="defaultValue">if set to <c>true</c> [default value].</param>
530 /// <returns></returns>
531 public static bool ParseBoolean(XmlNode node, string attr, bool defaultValue)
532 {
533 if( node == null )
534 {
535 throw new ArgumentNullException("node");
536 }
537 if(node.Attributes[attr] == null)
538 {
539 return defaultValue;
540 }
541 return bool.Parse(node.Attributes[attr].Value);
542 }
543
544 /// <summary>
545 /// Enums the attribute value.
546 /// </summary>
547 /// <param name="node">The node.</param>
548 /// <param name="attr">The attr.</param>
549 /// <param name="enumType">Type of the enum.</param>
550 /// <param name="def">The def.</param>
551 /// <returns></returns>
552 public static object EnumAttributeValue(XmlNode node, string attr, Type enumType, object def)
553 {
554 if( def == null )
555 {
556 throw new ArgumentNullException("def");
557 }
558 string val = AttributeValue(node, attr, def.ToString());
559 return Enum.Parse(enumType, val, true);
560 }
561
562 /// <summary>
563 ///
564 /// </summary>
565 /// <param name="assemblyName"></param>
566 /// <param name="projectType"></param>
567 /// <returns></returns>
568 public static string AssemblyFullName(string assemblyName, ProjectType projectType)
569 {
570 return assemblyName + (projectType == ProjectType.Library ? ".dll" : ".exe");
571 }
572
573 #endregion
574 }
575}
diff --git a/Prebuild/src/Core/Utilities/Log.cs b/Prebuild/src/Core/Utilities/Log.cs
new file mode 100644
index 0000000..cd95633
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/Log.cs
@@ -0,0 +1,276 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28
29namespace Prebuild.Core.Utilities
30{
31 /// <summary>
32 ///
33 /// </summary>
34 public enum LogType
35 {
36 /// <summary>
37 ///
38 /// </summary>
39 None,
40 /// <summary>
41 ///
42 /// </summary>
43 Info,
44 /// <summary>
45 ///
46 /// </summary>
47 Warning,
48 /// <summary>
49 ///
50 /// </summary>
51 Error
52 }
53
54 /// <summary>
55 ///
56 /// </summary>
57 [Flags]
58 public enum LogTargets
59 {
60 /// <summary>
61 ///
62 /// </summary>
63 None = 0,
64 /// <summary>
65 ///
66 /// </summary>
67 Null = 1,
68 /// <summary>
69 ///
70 /// </summary>
71 File = 2,
72 /// <summary>
73 ///
74 /// </summary>
75 Console = 4
76 }
77
78 /// <summary>
79 /// Summary description for Log.
80 /// </summary>
81 public class Log : IDisposable
82 {
83 #region Fields
84
85 private TextWriter m_Writer;
86 private LogTargets m_Target = LogTargets.Null;
87 bool disposed;
88
89 #endregion
90
91 #region Constructors
92
93 /// <summary>
94 /// Initializes a new instance of the <see cref="Log"/> class.
95 /// </summary>
96 /// <param name="target">The target.</param>
97 /// <param name="fileName">Name of the file.</param>
98 public Log(LogTargets target, string fileName)
99 {
100 m_Target = target;
101
102 if ((m_Target & LogTargets.File) != 0)
103 {
104 m_Writer = new StreamWriter(fileName, false);
105 }
106 else if ((m_Target & LogTargets.Console) != 0)
107 {
108 // Prevents null reference exceptions when outputing to the log file.
109 // This seems to only happen when running on a network drive.
110 m_Writer = Console.Out;
111 }
112 }
113
114 #endregion
115
116 #region Public Methods
117
118 /// <summary>
119 /// Writes this instance.
120 /// </summary>
121 public void Write()
122 {
123 Write(string.Empty);
124 }
125
126 /// <summary>
127 /// Writes the specified MSG.
128 /// </summary>
129 /// <param name="msg">The MSG.</param>
130 public void Write(string msg)
131 {
132 if((m_Target & LogTargets.Null) != 0)
133 {
134 return;
135 }
136
137 if((m_Target & LogTargets.Console) != 0)
138 {
139 Console.WriteLine(msg);
140 }
141 if((m_Target & LogTargets.File) != 0 && m_Writer != null)
142 {
143 m_Writer.WriteLine(msg);
144 }
145 }
146
147 /// <summary>
148 /// Writes the specified format.
149 /// </summary>
150 /// <param name="format">The format.</param>
151 /// <param name="args">The args.</param>
152 public void Write(string format, params object[] args)
153 {
154 Write(string.Format(format,args));
155 }
156
157 /// <summary>
158 /// Writes the specified type.
159 /// </summary>
160 /// <param name="type">The type.</param>
161 /// <param name="format">The format.</param>
162 /// <param name="args">The args.</param>
163 public void Write(LogType type, string format, params object[] args)
164 {
165 if((m_Target & LogTargets.Null) != 0)
166 {
167 return;
168 }
169
170 string str = "";
171 switch(type)
172 {
173 case LogType.Info:
174 str = "[I] ";
175 break;
176 case LogType.Warning:
177 str = "[!] ";
178 break;
179 case LogType.Error:
180 str = "[X] ";
181 break;
182 }
183
184 Write(str + format,args);
185 }
186
187 /// <summary>
188 /// Writes the exception.
189 /// </summary>
190 /// <param name="type">The type.</param>
191 /// <param name="ex">The ex.</param>
192 public void WriteException(LogType type, Exception ex)
193 {
194 if(ex != null)
195 {
196 Write(type, ex.Message);
197 //#if DEBUG
198 m_Writer.WriteLine("Exception @{0} stack trace [[", ex.TargetSite.Name);
199 m_Writer.WriteLine(ex.StackTrace);
200 m_Writer.WriteLine("]]");
201 //#endif
202 }
203 }
204
205 /// <summary>
206 /// Flushes this instance.
207 /// </summary>
208 public void Flush()
209 {
210 if(m_Writer != null)
211 {
212 m_Writer.Flush();
213 }
214 }
215
216 #endregion
217
218 #region IDisposable Members
219
220 /// <summary>
221 /// Performs application-defined tasks associated with freeing, releasing, or
222 /// resetting unmanaged resources.
223 /// </summary>
224 public void Dispose()
225 {
226 Dispose(true);
227 GC.SuppressFinalize(this);
228 }
229
230 /// <summary>
231 /// Dispose objects
232 /// </summary>
233 /// <param name="disposing">
234 /// If true, it will dispose close the handle
235 /// </param>
236 /// <remarks>
237 /// Will dispose managed and unmanaged resources.
238 /// </remarks>
239 protected virtual void Dispose(bool disposing)
240 {
241 if (!this.disposed)
242 {
243 if (disposing)
244 {
245 if (m_Writer != null)
246 {
247 m_Writer.Close();
248 m_Writer = null;
249 }
250 }
251 }
252 this.disposed = true;
253 }
254
255 /// <summary>
256 ///
257 /// </summary>
258 ~Log()
259 {
260 this.Dispose(false);
261 }
262
263 /// <summary>
264 /// Closes and destroys this object
265 /// </summary>
266 /// <remarks>
267 /// Same as Dispose(true)
268 /// </remarks>
269 public void Close()
270 {
271 Dispose();
272 }
273
274 #endregion
275 }
276}
diff --git a/Prebuild/src/Core/WarningException.cs b/Prebuild/src/Core/WarningException.cs
new file mode 100644
index 0000000..721f43d
--- /dev/null
+++ b/Prebuild/src/Core/WarningException.cs
@@ -0,0 +1,84 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Runtime.Serialization;
28
29namespace Prebuild.Core
30{
31 /// <summary>
32 ///
33 /// </summary>
34 [Serializable]
35 public class WarningException : Exception
36 {
37 #region Constructors
38
39 /// <summary>
40 ///
41 /// </summary>
42 public WarningException()
43 {
44 }
45
46 /// <summary>
47 ///
48 /// </summary>
49 /// <param name="format"></param>
50 /// <param name="args"></param>
51 public WarningException(string format, params object[] args)
52 : base(String.Format(format, args))
53 {
54 }
55
56 /// <summary>
57 /// Exception with specified string
58 /// </summary>
59 /// <param name="message">Exception message</param>
60 public WarningException(string message): base(message)
61 {
62 }
63
64 /// <summary>
65 ///
66 /// </summary>
67 /// <param name="message"></param>
68 /// <param name="exception"></param>
69 public WarningException(string message, Exception exception) : base(message, exception)
70 {
71 }
72
73 /// <summary>
74 ///
75 /// </summary>
76 /// <param name="info"></param>
77 /// <param name="context"></param>
78 protected WarningException(SerializationInfo info, StreamingContext context) : base( info, context )
79 {
80 }
81
82 #endregion
83 }
84}
diff --git a/Prebuild/src/Prebuild.cs b/Prebuild/src/Prebuild.cs
new file mode 100644
index 0000000..996dea0
--- /dev/null
+++ b/Prebuild/src/Prebuild.cs
@@ -0,0 +1,165 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26#region CVS Information
27/*
28 * $Source$
29 * $Author: kunnis $
30 * $Date: 2009-04-14 21:33:14 -0400 (Tue, 14 Apr 2009) $
31 * $Revision: 308 $
32 */
33#endregion
34
35using System;
36using System.Collections.Specialized;
37using System.IO;
38using System.Reflection;
39using System.Runtime.InteropServices;
40using System.EnterpriseServices.Internal;
41
42using Prebuild.Core;
43using Prebuild.Core.Utilities;
44
45namespace Prebuild
46{
47 /// <summary>
48 ///
49 /// </summary>
50 class Prebuild
51 {
52 #region Main
53
54 [STAThread]
55 static void Main(string[] args)
56 {
57 Kernel kernel = null;
58 try
59 {
60 kernel = Kernel.Instance;
61 kernel.Initialize(LogTargets.File | LogTargets.Console, args);
62 bool exit = false;
63
64 if(kernel.CommandLine.WasPassed("usage"))
65 {
66 exit = true;
67 OutputUsage();
68 }
69 if(kernel.CommandLine.WasPassed("showtargets"))
70 {
71 exit = true;
72 OutputTargets(kernel);
73 }
74 if(kernel.CommandLine.WasPassed("install"))
75 {
76 exit = true;
77 InstallAssembly(kernel);
78 }
79 if(kernel.CommandLine.WasPassed("remove"))
80 {
81 exit = true;
82 RemoveAssembly(kernel);
83 }
84
85 if(!exit)
86 {
87 kernel.Process();
88 }
89 }
90#if !DEBUG
91 catch (Exception ex)
92 {
93 Console.WriteLine("Unhandled error: {0}", ex.Message);
94 Console.WriteLine("{0}", ex.StackTrace);
95 }
96#endif
97 finally
98 {
99 if(kernel != null && kernel.PauseAfterFinish)
100 {
101 Console.WriteLine("\nPress enter to continue...");
102 Console.ReadLine();
103 }
104 }
105 }
106
107 #endregion
108
109 #region Private Methods
110
111 private static void InstallAssembly(Kernel kernel)
112 {
113 Publish publish = new Publish();
114 string file = kernel.CommandLine["install"];
115 //Console.WriteLine(".."+file+"..");
116 publish.GacInstall(file);
117 }
118
119 private static void RemoveAssembly(Kernel kernel)
120 {
121 Publish publish = new Publish();
122 string file = kernel.CommandLine["remove"];
123 publish.GacRemove(file);
124 }
125
126 private static void OutputUsage()
127 {
128 Console.WriteLine("Usage: prebuild /target <target> [options]");
129 Console.WriteLine("Available command-line switches:");
130 Console.WriteLine();
131 Console.WriteLine("/target Target for Prebuild");
132 Console.WriteLine("/clean Clean the build files for the given target");
133 Console.WriteLine("/file XML file to process");
134 Console.WriteLine("/log Log file to write to");
135 Console.WriteLine("/ppo Pre-process the file, but perform no other processing");
136 Console.WriteLine("/pause Pauses the application after execution to view the output");
137 Console.WriteLine("/yes Default to yes to any questions asked");
138 Console.WriteLine("/install Install assembly into the GAC");
139 Console.WriteLine("/remove Remove assembly from the GAC");
140 Console.WriteLine();
141 Console.WriteLine("See 'prebuild /showtargets for a list of available targets");
142 Console.WriteLine("See readme.txt or check out http://dnpb.sourceforge.net for more information");
143 Console.WriteLine();
144 }
145
146 private static void OutputTargets(Kernel kern)
147 {
148 Console.WriteLine("Targets available in Prebuild:");
149 Console.WriteLine("");
150 if(kern.Targets.Keys.Count > 0)
151 {
152 string[] targs = new string[kern.Targets.Keys.Count];
153 kern.Targets.Keys.CopyTo(targs, 0);
154 Array.Sort(targs);
155 foreach(string target in targs)
156 {
157 Console.WriteLine(target);
158 }
159 }
160 Console.WriteLine("");
161 }
162
163 #endregion
164 }
165}
diff --git a/Prebuild/src/Prebuild.snk b/Prebuild/src/Prebuild.snk
new file mode 100644
index 0000000..f9dce05
--- /dev/null
+++ b/Prebuild/src/Prebuild.snk
Binary files differ
diff --git a/Prebuild/src/Properties/AssemblyInfo.cs b/Prebuild/src/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f9d90bb
--- /dev/null
+++ b/Prebuild/src/Properties/AssemblyInfo.cs
@@ -0,0 +1,113 @@
1#region BSD License
2/*
3
4Copyright (c) 2004 - 2008
5Matthew Holmes (matthew@wildfiregames.com),
6Dan Moorehead (dan05a@gmail.com),
7Dave Hudson (jendave@yahoo.com),
8Rob Loach (http://www.robloach.net),
9C.J. Adams-Collier (cjac@colliertech.org),
10
11Redistribution and use in source and binary forms, with or without
12modification, are permitted provided that the following conditions are
13met:
14
15* Redistributions of source code must retain the above copyright
16 notice, this list of conditions and the following disclaimer.
17
18* Redistributions in binary form must reproduce the above copyright
19 notice, this list of conditions and the following disclaimer in the
20 documentation and/or other materials provided with the distribution.
21
22* The name of the author may not be used to endorse or promote
23 products derived from this software without specific prior written
24 permission.
25
26THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
27IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
30INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36POSSIBILITY OF SUCH DAMAGE.
37
38*/
39#endregion
40
41using System;
42using System.Reflection;
43using System.Runtime.CompilerServices;
44using System.Runtime.InteropServices;
45using System.Security.Permissions;
46using System.Resources;
47
48
49// FxCop recommended attributes
50[assembly: ComVisible(false)]
51[assembly: FileIOPermission(SecurityAction.RequestMinimum, Unrestricted=true)]
52[assembly: CLSCompliant(true)]
53
54//
55// General Information about an assembly is controlled through the following
56// set of attributes. Change these attribute values to modify the information
57// associated with an assembly.
58//
59[assembly: AssemblyTitle(".NET Prebuild")]
60[assembly: AssemblyDescription("A .NET project file build tool")]
61[assembly: AssemblyConfiguration(".NET CLR")]
62[assembly: AssemblyCompany("The Prebuild Project")]
63[assembly: AssemblyProduct("")]
64[assembly: AssemblyCopyright("Copyright 2004-2013 " +
65 "Matthew Holmes, " +
66 "Dan Moorehead, " +
67 "C.J. Adams-Collier, " +
68 "Rob Loach, " +
69 "David Hudson," +
70 "John Hurliman")]
71[assembly: AssemblyTrademark("")]
72[assembly: AssemblyCulture("")]
73[assembly: NeutralResourcesLanguageAttribute("en-US")]
74[assembly: AssemblyVersion("2.0.6.*")]
75
76//
77// Version information for an assembly consists of the following four values:
78//
79// Major Version
80// Minor Version
81// Build Number
82// Revision
83//
84// You can specify all the values or you can default the Revision and Build Numbers
85// by using the '*' as shown below:
86
87//
88// In order to sign your assembly you must specify a key to use. Refer to the
89// Microsoft .NET Framework documentation for more information on assembly signing.
90//
91// Use the attributes below to control which key is used for signing.
92//
93// Notes:
94// (*) If no key is specified, the assembly is not signed.
95// (*) KeyName refers to a key that has been installed in the Crypto Service
96// Provider (CSP) on your machine. KeyFile refers to a file which contains
97// a key.
98// (*) If the KeyFile and the KeyName values are both specified, the
99// following processing occurs:
100// (1) If the KeyName can be found in the CSP, that key is used.
101// (2) If the KeyName does not exist and the KeyFile does exist, the key
102// in the KeyFile is installed into the CSP and used.
103// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
104// When specifying the KeyFile, the location of the KeyFile should be
105// relative to the project output directory which is
106// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
107// located in the project directory, you would specify the AssemblyKeyFile
108// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
109// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
110// documentation for more information on this.
111//
112[assembly: AssemblyDelaySign(false)]
113[assembly: AssemblyKeyName("")]
diff --git a/Prebuild/src/data/autotools.xml b/Prebuild/src/data/autotools.xml
new file mode 100644
index 0000000..ee4b064
--- /dev/null
+++ b/Prebuild/src/data/autotools.xml
@@ -0,0 +1,790 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Autotools>
3 <ProjectAutogenSh>
4 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
6 exclude-result-prefixes="dnpb"
7 >
8 <xsl:template match="/"><xsl:text disable-output-escaping="yes">#!/bin/sh
9# Run this to generate all the initial makefiles, etc.
10# Ripped off from Mono, which ripped off from GNOME macros version
11
12DIE=0
13
14srcdir=`dirname $0`
15test -z "$srcdir" &amp;&amp; srcdir=.
16
17if [ -n "$MONO_PATH" ]; then
18 # from -> /mono/lib:/another/mono/lib
19 # to -> /mono /another/mono
20 for i in `echo ${MONO_PATH} | tr ":" " "`; do
21 i=`dirname ${i}`
22 if [ -n "{i}" -a -d "${i}/share/aclocal" ]; then
23 ACLOCAL_FLAGS="-I ${i}/share/aclocal $ACLOCAL_FLAGS"
24 fi
25 if [ -n "{i}" -a -d "${i}/bin" ]; then
26 PATH="${i}/bin:$PATH"
27 fi
28 done
29 export PATH
30fi
31
32(autoconf --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
33 echo
34 echo "**Error**: You must have \`autoconf' installed to compile Mono."
35 echo "Download the appropriate package for your distribution,"
36 echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
37 DIE=1
38}
39
40if [ -z "$LIBTOOL" ]; then
41 LIBTOOL=`which glibtool 2>/dev/null`
42 if [ ! -x "$LIBTOOL" ]; then
43 LIBTOOL=`which libtool`
44 fi
45fi
46
47(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) &amp;&amp; {
48 ($LIBTOOL --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
49 echo
50 echo "**Error**: You must have \`libtool' installed to compile Mono."
51 echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz"
52 echo "(or a newer version if it is available)"
53 DIE=1
54 }
55}
56
57grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null &amp;&amp; {
58 grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \
59 (gettext --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
60 echo
61 echo "**Error**: You must have \`gettext' installed to compile Mono."
62 echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
63 echo "(or a newer version if it is available)"
64 DIE=1
65 }
66}
67
68(automake --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
69 echo
70 echo "**Error**: You must have \`automake' installed to compile Mono."
71 echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
72 echo "(or a newer version if it is available)"
73 DIE=1
74 NO_AUTOMAKE=yes
75}
76
77# if no automake, don't bother testing for aclocal
78test -n "$NO_AUTOMAKE" || (aclocal --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
79 echo
80 echo "**Error**: Missing \`aclocal'. The version of \`automake'"
81 echo "installed doesn't appear recent enough."
82 echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
83 echo "(or a newer version if it is available)"
84 DIE=1
85}
86
87if test "$DIE" -eq 1; then
88 exit 1
89fi
90
91if test -z "$NOCONFIGURE"; then
92
93if test -z "$*"; then
94 echo "**Warning**: I am going to run \`configure' with no arguments."
95 echo "If you wish to pass any to it, please specify them on the"
96 echo \`$0\'" command line."
97 echo
98fi
99
100fi
101
102case $CC in
103xlc )
104 am_opt=--include-deps;;
105esac
106
107
108if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then
109 if test -z "$NO_LIBTOOLIZE" ; then
110 echo "Running libtoolize..."
111 ${LIBTOOL}ize --force --copy
112 fi
113fi
114
115echo "Running aclocal $ACLOCAL_FLAGS ..."
116aclocal $ACLOCAL_FLAGS || {
117 echo
118 echo "**Error**: aclocal failed. This may mean that you have not"
119 echo "installed all of the packages you need, or you may need to"
120 echo "set ACLOCAL_FLAGS to include \"-I \$prefix/share/aclocal\""
121 echo "for the prefix where you installed the packages whose"
122 echo "macros were not found"
123 exit 1
124}
125
126if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then
127 echo "Running autoheader..."
128 autoheader || { echo "**Error**: autoheader failed."; exit 1; }
129fi
130
131echo "Running automake --gnu $am_opt ..."
132automake --add-missing --gnu $am_opt ||
133 { echo "**Error**: automake failed."; exit 1; }
134echo "Running autoconf ..."
135autoconf || { echo "**Error**: autoconf failed."; exit 1; }
136
137conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
138
139if test x$NOCONFIGURE = x; then
140 echo Running $srcdir/configure $conf_flags "$@" ...
141 $srcdir/configure $conf_flags "$@" \
142 &amp;&amp; echo Now type \`make\' to compile $PKG_NAME || exit 1
143else
144 echo Skipping configure process.
145fi
146</xsl:text>
147 </xsl:template>
148 </xsl:stylesheet>
149 </ProjectAutogenSh>
150
151 <ProjectConfigureAc>
152<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
153 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
154 exclude-result-prefixes="dnpb"
155 xml:space="preserve"
156 >
157 <!-- Removes the xml version header in the generated file -->
158 <xsl:output method="text"/>
159 <xsl:param name="solutionName" />
160 <xsl:param name="projectName" />
161 <xsl:param name="projectVersion" />
162 <xsl:param name="assemblyName" />
163 <xsl:variable name="lcProjectName"><xsl:value-of select="translate($projectName, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/></xsl:variable>
164 <xsl:template match="/">
165 <xsl:for-each select="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]"
166>AC_INIT([<xsl:value-of select="$projectName" />],[<xsl:value-of select="$projectVersion" />])
167
168AC_PREREQ(2.60)
169AC_CANONICAL_SYSTEM
170AC_CONFIG_AUX_DIR(.)
171AM_INIT_AUTOMAKE([1.9 tar-ustar foreign])
172AM_MAINTAINER_MODE
173dnl AC_PROG_INTLTOOL([0.25])
174AC_PROG_INSTALL
175
176ASSEMBLY_NAME=<xsl:value-of select="$assemblyName" />
177PROJECT_NAME=<xsl:value-of select="$projectName" />
178PROJECT_VERSION=$VERSION
179PROJECT_DESCRIPTION="<xsl:value-of select="dnpb:Description/text()" />"
180PROJECT_TYPE="<xsl:value-of select="@type" />"
181
182AC_SUBST(ASSEMBLY_NAME)
183AC_SUBST(PROJECT_NAME)
184AC_SUBST(PROJECT_VERSION)
185AC_SUBST(DESCRIPTION)
186
187AC_MSG_CHECKING([assembly type])
188case $PROJECT_TYPE in
189 *Exe)
190 ASSEMBLY_EXTENSION=exe
191 ;;
192 *Library)
193 ASSEMBLY_EXTENSION=dll
194 ;;
195 *)
196 AC_MSG_ERROR([*** Please add support for project type $PROJECT_TYPE to configure.ac checks!])
197 ;;
198esac
199AC_MSG_RESULT([$PROJECT_TYPE])
200
201AC_SUBST(ASSEMBLY_EXTENSION)
202
203AC_MSG_CHECKING([whether we're compiling from an RCS])
204if test -f "$srcdir/.cvs_version" ; then
205 from_rcs=cvs
206else
207 if test -f "$srcdir/.svn/entries" ; then
208 from_rcs=svn
209 else
210 from_rcs=no
211 fi
212fi
213
214AC_MSG_RESULT($from_rcs)
215
216MONO_REQUIRED_VERSION=1.1
217<xsl:text disable-output-escaping="yes">
218PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)
219</xsl:text>
220if test "x$has_mono" = "xtrue"; then
221 AC_PATH_PROG(RUNTIME, mono, no)
222 AC_PATH_PROG(CSC, gmcs, no)
223 AC_PATH_PROG(RESGEN, resgen2, no)
224 if test `uname -s` = "Darwin"; then
225 LIB_PREFIX=
226 LIB_SUFFIX=.dylib
227 else
228 LIB_PREFIX=.so
229 LIB_SUFFIX=
230 fi
231else
232 AC_PATH_PROG(CSC, csc.exe, no)
233 if test x$CSC = "xno"; then
234 AC_MSG_ERROR([You need to install either mono or .Net])
235 else
236 RUNTIME=
237 LIB_PREFIX=
238 LIB_SUFFIX=
239 fi
240fi
241
242AC_PATH_PROG(GACUTIL, gacutil)
243if test "x$GACUTIL" = "xno" ; then
244 AC_MSG_ERROR([No gacutil tool found])
245fi
246
247GACUTIL_FLAGS='/package <xsl:value-of select="$assemblyName" /> /gacdir $(DESTDIR)$(prefix)/lib'
248AC_SUBST(GACUTIL_FLAGS)
249
250AC_SUBST(PATH)
251AC_SUBST(LD_LIBRARY_PATH)
252
253AC_SUBST(LIB_PREFIX)
254AC_SUBST(LIB_SUFFIX)
255AC_SUBST(RUNTIME)
256AC_SUBST(CSC)
257AC_SUBST(RESGEN)
258AC_SUBST(GACUTIL)
259
260AC_SUBST(BASE_DEPENDENCIES_CFLAGS)
261AC_SUBST(BASE_DEPENDENCIES_LIBS)
262
263dnl Find monodoc
264MONODOC_REQUIRED_VERSION=1.0
265AC_SUBST(MONODOC_REQUIRED_VERSION)
266<xsl:text disable-output-escaping="yes">
267PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no)
268</xsl:text>
269if test "x$enable_monodoc" = "xyes"; then
270 AC_PATH_PROG(MONODOC, monodoc, no)
271 if test x$MONODOC = xno; then
272 enable_monodoc=no
273 fi
274else
275 MONODOC=
276fi
277
278AC_SUBST(MONODOC)
279AM_CONDITIONAL(ENABLE_MONODOC, test "x$enable_monodoc" = "xyes")
280
281winbuild=no
282case "$host" in
283 *-*-mingw*|*-*-cygwin*)
284 winbuild=yes
285 ;;
286esac
287AM_CONDITIONAL(WINBUILD, test x$winbuild = xyes)
288
289<xsl:if test="@type='Exe' or @type='WinExe'">AC_CONFIG_FILES(<xsl:value-of select="$lcProjectName" />)</xsl:if>
290<xsl:if test="@type='Library'">AC_CONFIG_FILES(<xsl:value-of select="$projectName" />.pc)</xsl:if>
291
292AC_CONFIG_FILES(Makefile)
293AC_OUTPUT
294
295echo "==="
296echo ""
297echo "Project configuration summary"
298echo ""
299echo " * Installation prefix: $prefix"
300echo " * compiler: $CSC"
301echo " * Documentation: $enable_monodoc ($MONODOC)"
302echo " * Project Name: $PROJECT_NAME"
303echo " * Version: $PROJECT_VERSION"
304echo ""
305echo "==="
306
307</xsl:for-each>
308</xsl:template>
309</xsl:stylesheet>
310 </ProjectConfigureAc>
311
312 <ProjectMakefileAm>
313<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
314 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
315 exclude-result-prefixes="dnpb"
316 xml:space="preserve"
317 >
318<xsl:param name="projectName" />
319<xsl:param name="solutionName" />
320<xsl:param name="assemblyName" />
321<xsl:variable name="lcProjectName"><xsl:value-of select="translate($projectName, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/></xsl:variable>
322<xsl:param name="embeddedFiles" />
323<xsl:param name="compiledFiles" />
324<xsl:param name="contentFiles" />
325<xsl:param name="extraDistFiles" />
326<xsl:param name="pkgLibs" />
327<xsl:param name="binaryLibs" />
328<xsl:param name="systemLibs" />
329<xsl:param name="localCopyTargets" />
330<xsl:param name="hasAssemblyConfig" />
331
332<xsl:template match="/">
333<xsl:for-each select="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]">
334<xsl:variable name="lcType"><xsl:value-of select="translate(@type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" /></xsl:variable>
335
336ASSEMBLY=$(ASSEMBLY_NAME).$(ASSEMBLY_EXTENSION)
337<!--
338 If the project is an application, create targets for the wrapper script
339 -->
340<xsl:if test="@type='Exe' or @type='WinExe'">
341<xsl:value-of select="$lcProjectName" />dir = $(prefix)/lib/<xsl:value-of select="$lcProjectName" />
342<xsl:value-of select="$lcProjectName" />_DATA = $(ASSEMBLY)<xsl:if test="$hasAssemblyConfig='true'"> $(ASSEMBLY).config</xsl:if>
343
344bin_SCRIPTS=<xsl:value-of select="$lcProjectName" />
345</xsl:if><xsl:if test="@type='Library'">
346pkgconfigdir = $(prefix)/lib/pkgconfig
347pkgconfig_DATA = <xsl:value-of select="$projectName" />.pc
348<xsl:if test="$hasAssemblyConfig='true'">
349<xsl:value-of select="translate($lcProjectName, '.', '_')" />dir = $(prefix)/lib/mono/<xsl:value-of select="$projectName" />
350<xsl:value-of select="translate($lcProjectName, '.', '_')" />_DATA = $(ASSEMBLY).config
351</xsl:if>
352noinst_DATA = $(ASSEMBLY)
353</xsl:if>
354
355PACKAGES =<xsl:value-of select="$pkgLibs" />
356BINARY_LIBS =<xsl:value-of select="$binaryLibs" />
357SYSTEM_LIBS =<xsl:value-of select="$systemLibs" />
358RESOURCES_SRC =<xsl:value-of select="$embeddedFiles" />
359RESOURCES = $(RESOURCES_SRC:.resx=.resources)
360SOURCES =<xsl:value-of select="$compiledFiles" />
361
362EXTRA_DIST=$(SOURCES) $(BINARY_LIBS) $(RESOURCES_SRC) install-sh missing <xsl:value-of select="$extraDistFiles" />
363
364CLEANFILES=$(ASSEMBLY)
365
366<xsl:value-of select="$localCopyTargets" />
367
368<xsl:for-each select="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]/dnpb:Configuration">
369<xsl:variable name="outputPath"><xsl:value-of select="dnpb:Options/dnpb:OutputPath/text()" /></xsl:variable>
370<xsl:variable name="keyFile"><xsl:value-of select="dnpb:Options/dnpb:KeyFile/text()" /></xsl:variable>
371<xsl:variable name="docFile"><xsl:value-of select="dnpb:Options/dnpb:XmlDocFile/text()" /></xsl:variable>
372<xsl:value-of select="$outputPath"/>/$(ASSEMBLY): $(srcdir)/$(ASSEMBLY).response $(RESOURCES) $(SOURCES) $(BINARY_LIBS) <xsl:call-template name="substring-after-last-mod"><xsl:with-param name="input" select="$keyFile" /><xsl:with-param name="substr" select="'/'" /></xsl:call-template>
373 <xsl:if test="$docFile!=''">mkdir -p doc <xsl:text disable-output-escaping="yes">&amp;&amp;</xsl:text> </xsl:if>mkdir -p <xsl:value-of select="$outputPath" /> <xsl:text disable-output-escaping="yes">&amp;&amp;</xsl:text> $(CSC) /out:$@ \
374 /target:<xsl:value-of select="$lcType" /> \<xsl:if test="$embeddedFiles!=''">
375 $(addprefix /resource:$(srcdir)/, $(RESOURCES)) \</xsl:if><xsl:if test="$pkgLibs!=''">
376 $(addprefix /pkg:, $(PACKAGES)) \</xsl:if><xsl:if test="$systemLibs!=''">
377 $(addprefix /r:, $(SYSTEM_LIBS)) \</xsl:if><xsl:if test="$binaryLibs!=''">
378 $(addprefix /r:$(srcdir)/, $(BINARY_LIBS)) \</xsl:if>
379 @$(srcdir)/$(ASSEMBLY).response \<xsl:if test="$docFile!=''">
380 /doc:doc/<xsl:value-of select="$docFile" /> \</xsl:if><xsl:if test="$keyFile!=''">
381 /keyfile:$(srcdir)/<xsl:call-template name="substring-after-last-mod"><xsl:with-param name="input" select="$keyFile" /><xsl:with-param name="substr" select="'/'" /></xsl:call-template> \</xsl:if><xsl:if test="dnpb:Options/dnpb:AllowUnsafe/text()='true'">
382 /unsafe \</xsl:if><xsl:text disable-output-escaping="yes">
383 &amp;&amp; rm -f $(ASSEMBLY) \
384 &amp;&amp; ln $@ $(ASSEMBLY)</xsl:text>
385
386CLEANFILES+=<xsl:value-of select="$outputPath"/>/$(ASSEMBLY)
387
388<!-- if this project config has a KeyFile -->
389<xsl:if test="$keyFile!=''">EXTRA_DIST+=<xsl:call-template name="substring-after-last-mod"><xsl:with-param name="input" select="$keyFile" /><xsl:with-param name="substr" select="'/'" /></xsl:call-template></xsl:if>
390
391<xsl:value-of select="@name" />: <xsl:value-of select="$outputPath"/>/$(ASSEMBLY)<xsl:text disable-output-escaping="yes">
392 rm -f $(ASSEMBLY) \
393 &amp;&amp;</xsl:text> ln <xsl:value-of select="$outputPath"/>/$(ASSEMBLY) $(ASSEMBLY)
394<!-- If the project is a library, create library-specific targets -->
395<xsl:if test="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]/@type='Library'">
396<xsl:choose>
397<!--
398 If the project has a keyfile, make a gac install/uninstall target
399 -->
400 <xsl:when test="dnpb:Options/dnpb:KeyFile/text()!=''">
401<xsl:value-of select="@name" />_install-data-local: <xsl:value-of select="$outputPath"/>/$(ASSEMBLY)
402 echo "$(GACUTIL) /i $(ASSEMBLY) /f $(GACUTIL_FLAGS)"; \
403 $(GACUTIL) /i $(ASSEMBLY) /f $(GACUTIL_FLAGS) || exit 1;
404
405<xsl:value-of select="@name" />_uninstall-local:
406 if [`gacutil -l <xsl:value-of select="$projectName" /> | grep "Number" | awk -F= '{print $$2}'` -gt "0" ] ; \
407 then \
408 echo "$(GACUTIL) /u $(ASSEMBLY_NAME) $(GACUTIL_FLAGS)"; \
409 $(GACUTIL) /u $(ASSEMBLY_NAME) $(GACUTIL_FLAGS) || exit 1; \
410 fi
411 </xsl:when>
412<!--
413 If there is no keyfile for the project, define a filesystem
414 install target
415 -->
416 <xsl:otherwise>
417noinst_<xsl:value-of select="@name" />_<xsl:value-of select="translate($lcProjectName, '.', '_')" />dir = $(prefix)/lib/mono/<xsl:value-of select="$projectName" />
418noinst_<xsl:value-of select="@name" />_<xsl:value-of select="translate($lcProjectName, '.', '_')" />_DATA = <xsl:value-of select="$outputPath"/>/$(ASSEMBLY)
419 </xsl:otherwise>
420</xsl:choose>
421</xsl:if>
422</xsl:for-each>
423
424<xsl:variable name="defaultConfig"><xsl:value-of select="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]/dnpb:Configuration/@name" /></xsl:variable>
425$(ASSEMBLY): <xsl:value-of select="$defaultConfig" />
426
427<xsl:text disable-output-escaping="yes">
428$(srcdir)/$(ASSEMBLY).response: $(srcdir)/Makefile
429 echo "$(addprefix $(srcdir)/, $(SOURCES))" &gt; $@
430</xsl:text>
431
432all: $(ASSEMBLY)
433
434# rule to compile .resx files to .resources
435%.resources: %.resx
436 $(RESGEN) /useSourcePath /compile $(@:.resources=.resx)
437
438<xsl:if test="@type='Library'">
439<!-- if the default config has a KeyFile -->
440<xsl:choose>
441 <xsl:when test="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]/dnpb:Configuration[@name=$defaultConfig]/dnpb:Options/dnpb:KeyFile/text()!=''">
442install-data-local: <xsl:value-of select="$defaultConfig" />_install-data-local
443
444uninstall-local: <xsl:value-of select="$defaultConfig" />_uninstall-local
445 </xsl:when>
446<!--
447 If the default config does not have a KeyFile, don't really do
448 anything
449 -->
450 <xsl:otherwise>
451#<xsl:value-of select="translate($lcProjectName, '.', '_')" />dir+=$(noinst_<xsl:value-of select="$defaultConfig" />_<xsl:value-of select="translate($lcProjectName, '.', '_')" />dir)
452#<xsl:value-of select="translate($lcProjectName, '.', '_')" />_DATA+=$(noinst_<xsl:value-of select="$defaultConfig" />_<xsl:value-of select="translate($lcProjectName, '.', '_')" />_DATA)
453 </xsl:otherwise>
454</xsl:choose>
455</xsl:if>
456</xsl:for-each>
457</xsl:template>
458
459<xsl:template name="substring-after-last" xml:space="default">
460 <xsl:param name="input" />
461 <xsl:param name="substr" />
462
463 <!-- Extract the string which comes after the first occurence -->
464 <xsl:variable name="temp" select="substring-after($input,$substr)" />
465
466 <xsl:choose>
467 <!-- If it still contains the search string then recursively process -->
468 <xsl:when test="$substr and contains($temp,$substr)">
469 <xsl:call-template name="substring-after-last">
470 <xsl:with-param name="input" select="$temp" />
471 <xsl:with-param name="substr" select="$substr" />
472 </xsl:call-template>
473 </xsl:when>
474 <xsl:otherwise>
475 <xsl:value-of select="$temp" />
476 </xsl:otherwise>
477 </xsl:choose>
478</xsl:template>
479
480<xsl:template name="substring-after-last-mod" xml:space="default">
481 <xsl:param name="input" />
482 <xsl:param name="substr" />
483
484 <xsl:choose>
485 <xsl:when test="contains($input,$substr)">
486 <xsl:call-template name="substring-after-last">
487 <xsl:with-param name="input" select="$input" />
488 <xsl:with-param name="substr" select="$substr" />
489 </xsl:call-template>
490 </xsl:when>
491 <xsl:otherwise>
492 <xsl:value-of select="$input" />
493 </xsl:otherwise>
494 </xsl:choose>
495</xsl:template>
496</xsl:stylesheet>
497 </ProjectMakefileAm>
498
499 <ProjectPcIn>
500<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
501 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
502 exclude-result-prefixes="dnpb"
503 xml:space="preserve"
504 >
505 <!-- Removes the xml version header in the generated file -->
506 <xsl:output method="text"/>
507 <xsl:param name="projectName" />
508 <xsl:param name="solutionName" />
509 <xsl:variable name="lcProjectName"><xsl:value-of select="translate($projectName, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/></xsl:variable>
510<xsl:template match="/"><xsl:for-each select="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]">prefix=@prefix@
511exec_prefix=${prefix}
512libdir=${exec_prefix}/lib/mono/@PROJECT_NAME@
513
514Name: <xsl:value-of select="@name" />
515Description: <xsl:value-of select="Description/text()" />
516Version: @PROJECT_VERSION@
517Requires:<xsl:for-each select="Reference"><xsl:if test="@localCopy=false"><xsl:text disable-output-escaping="yes"> </xsl:text><xsl:value-of select="@name" /></xsl:if></xsl:for-each>
518Libs: -r:${libdir}/@PROJECT_NAME@.dll
519
520</xsl:for-each>
521
522 </xsl:template>
523</xsl:stylesheet>
524 </ProjectPcIn>
525
526 <SolutionAutogenSh>
527<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
528 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
529 exclude-result-prefixes="dnpb"
530 >
531 <xsl:param name="solutionName" />
532 <xsl:template match="/"><xsl:text disable-output-escaping="yes">#!/bin/sh
533# Run this to generate all the initial makefiles, etc.
534# Ripped off from Mono, which ripped off from GNOME macros version
535
536DIE=0
537
538srcdir=`dirname $0`
539test -z "$srcdir" &amp;&amp; srcdir=.
540
541if [ -n "$MONO_PATH" ]; then
542 # from -> /mono/lib:/another/mono/lib
543 # to -> /mono /another/mono
544 for i in `echo ${MONO_PATH} | tr ":" " "`; do
545 i=`dirname ${i}`
546 if [ -n "{i}" -a -d "${i}/share/aclocal" ]; then
547 ACLOCAL_FLAGS="-I ${i}/share/aclocal $ACLOCAL_FLAGS"
548 fi
549 if [ -n "{i}" -a -d "${i}/bin" ]; then
550 PATH="${i}/bin:$PATH"
551 fi
552 done
553 export PATH
554fi
555
556(autoconf --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
557 echo
558 echo "**Error**: You must have \`autoconf' installed to compile Mono."
559 echo "Download the appropriate package for your distribution,"
560 echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
561 DIE=1
562}
563
564if [ -z "$LIBTOOL" ]; then
565 LIBTOOL=`which glibtool 2>/dev/null`
566 if [ ! -x "$LIBTOOL" ]; then
567 LIBTOOL=`which libtool`
568 fi
569fi
570
571(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) &amp;&amp; {
572 ($LIBTOOL --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
573 echo
574 echo "**Error**: You must have \`libtool' installed to compile Mono."
575 echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz"
576 echo "(or a newer version if it is available)"
577 DIE=1
578 }
579}
580
581grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null &amp;&amp; {
582 grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \
583 (gettext --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
584 echo
585 echo "**Error**: You must have \`gettext' installed to compile Mono."
586 echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
587 echo "(or a newer version if it is available)"
588 DIE=1
589 }
590}
591
592(automake --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
593 echo
594 echo "**Error**: You must have \`automake' installed to compile Mono."
595 echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
596 echo "(or a newer version if it is available)"
597 DIE=1
598 NO_AUTOMAKE=yes
599}
600
601
602# if no automake, don't bother testing for aclocal
603test -n "$NO_AUTOMAKE" || (aclocal --version) &lt; /dev/null > /dev/null 2>&amp;1 || {
604 echo
605 echo "**Error**: Missing \`aclocal'. The version of \`automake'"
606 echo "installed doesn't appear recent enough."
607 echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
608 echo "(or a newer version if it is available)"
609 DIE=1
610}
611
612if test "$DIE" -eq 1; then
613 exit 1
614fi
615
616if test -z "$*"; then
617 echo "**Warning**: I am going to run \`configure' with no arguments."
618 echo "If you wish to pass any to it, please specify them on the"
619 echo \`$0\'" command line."
620 echo
621fi
622
623case $CC in
624xlc )
625 am_opt=--include-deps;;
626esac
627
628
629if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then
630 if test -z "$NO_LIBTOOLIZE" ; then
631 echo "Running libtoolize..."
632 ${LIBTOOL}ize --force --copy
633 fi
634fi
635
636echo "Running aclocal $ACLOCAL_FLAGS ..."
637aclocal $ACLOCAL_FLAGS || {
638 echo
639 echo "**Error**: aclocal failed. This may mean that you have not"
640 echo "installed all of the packages you need, or you may need to"
641 echo "set ACLOCAL_FLAGS to include \"-I \$prefix/share/aclocal\""
642 echo "for the prefix where you installed the packages whose"
643 echo "macros were not found"
644 exit 1
645}
646
647if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then
648 echo "Running autoheader..."
649 autoheader || { echo "**Error**: autoheader failed."; exit 1; }
650fi
651
652echo "Running automake --gnu $am_opt ..."
653automake --add-missing --gnu $am_opt ||
654 { echo "**Error**: automake failed."; exit 1; }
655echo "Running autoconf ..."
656autoconf || { echo "**Error**: autoconf failed."; exit 1; }
657</xsl:text>
658<xsl:for-each select="/dnpb:Prebuild/dnpb:Solution[@name=$solutionName]/dnpb:Project">
659echo Running <xsl:value-of select="@name" />/autogen.sh ...
660(cd $srcdir/<xsl:value-of select="@name" /> ; NOCONFIGURE=1 /bin/sh ./autogen.sh "$@")
661echo Done running <xsl:value-of select="@name" />/autogen.sh ...
662</xsl:for-each>
663<xsl:text disable-output-escaping="yes">
664conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
665
666if test x$NOCONFIGURE = x; then
667 echo Running $srcdir/configure $conf_flags "$@" ...
668 $srcdir/configure $conf_flags "$@" \
669 &amp;&amp; echo Now type \`make\' to compile $PKG_NAME || exit 1
670else
671 echo Skipping configure process.
672fi
673</xsl:text>
674</xsl:template>
675</xsl:stylesheet>
676 </SolutionAutogenSh>
677
678 <SolutionConfigureAc>
679<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
680 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
681 exclude-result-prefixes="dnpb"
682 xml:space="preserve"
683 >
684 <!-- Removes the xml version header in the generated file -->
685 <xsl:output method="text"/>
686 <xsl:param name="solutionName" />
687<xsl:template match="/"
688>AC_INIT([<xsl:value-of select="$solutionName" />]-solution,[<xsl:value-of select="/dnpb:Prebuild/dnpb:Solution[@name=$solutionName]/@version" />])
689AC_CONFIG_AUX_DIR(.)
690AM_INIT_AUTOMAKE([1.9 tar-ustar foreign])
691EXTRA_DIST="install-sh missing"
692SOLUTION_NAME=<xsl:value-of select="$solutionName" />
693SOLUTION_VERSION=$VERSION
694SOLUTION_DESCRIPTION="<xsl:value-of select="/dnpb:Prebuild/dnpb:Solution[@name=$solutionName]/dnpb:Description" />"
695AC_SUBST(DESCRIPTION)
696
697AM_MAINTAINER_MODE
698
699dnl AC_PROG_INTLTOOL([0.25])
700
701AC_PROG_INSTALL
702
703AC_MSG_CHECKING([whether we're building from an RCS])
704if test -f "$srcdir/.cvs_version" ; then
705 from_rcs=cvs
706else
707 if test -f "$srcdir/.svn/entries" ; then
708 from_rcs=svn
709 else
710 from_rcs=no
711 fi
712fi
713
714AC_MSG_RESULT($from_rcs)
715
716CONFIG="Release"
717AC_SUBST(CONFIG)
718<!-- TODO: Ensure that these SUBDIRS are processed in dependency order -->
719AC_CONFIG_SUBDIRS(<xsl:for-each select="/dnpb:Prebuild/dnpb:Solution[@name=$solutionName]/dnpb:Project"><xsl:text disable-output-escaping="yes"> </xsl:text><xsl:value-of select="@name" />
720</xsl:for-each>)
721<xsl:text disable-output-escaping="yes">
722
723AC_OUTPUT([
724Makefile
725])
726
727echo "==="
728echo ""
729echo "Solution configuration summary"
730echo ""
731echo " * Solution Name: $SOLUTION_NAME"
732echo " * Version: $SOLUTION_VERSION"
733echo " * Packages:"</xsl:text>
734<xsl:for-each select="/dnpb:Prebuild/dnpb:Solution[@name=$solutionName]/dnpb:Project">echo " - <xsl:value-of select="@name" />"
735</xsl:for-each><xsl:text disable-output-escaping="yes">echo ""
736echo "==="
737</xsl:text>
738</xsl:template>
739</xsl:stylesheet>
740 </SolutionConfigureAc>
741
742 <SolutionMakefileAm>
743<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
744 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
745 exclude-result-prefixes="dnpb"
746 xml:space="preserve"
747 >
748 <xsl:param name="solutionName" />
749 <xsl:template match="/">SUBDIRS =<xsl:for-each select="//dnpb:Solution[@name=$solutionName]/dnpb:Project"><xsl:text disable-output-escaping="yes"> </xsl:text><xsl:value-of select="@name" /></xsl:for-each>
750</xsl:template>
751</xsl:stylesheet>
752 </SolutionMakefileAm>
753 <ProjectWrapperScriptIn>
754<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
755 xmlns:dnpb="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
756 exclude-result-prefixes="dnpb"
757 xml:space="preserve"
758 >
759 <!-- Removes the xml version header in the generated file -->
760 <xsl:output method="text"/>
761 <xsl:param name="projectName" />
762 <xsl:param name="assemblyName" />
763 <xsl:param name="solutionName" />
764 <xsl:param name="monoPath" />
765 <xsl:variable name="lcProjectName"><xsl:value-of select="translate($projectName, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/></xsl:variable>
766<xsl:template match="/"><xsl:for-each select="//dnpb:Solution[@name=$solutionName]/dnpb:Project[@name=$projectName]">#! /bin/sh
767
768PACKAGE=<xsl:value-of select="$assemblyName" />
769prefix=@prefix@
770exec_prefix=@exec_prefix@
771
772# %%$@%$# why oh why isn't it $sharedir/<xsl:value-of select="$lcProjectName" />
773# Day changed to 30 Mar 2007
774# ...
775# 07:50 &lt; cj> why are we installing .exe assemblies to $prefix/lib/$package/ and
776# not $prefix/share/$package ?
777# 07:50 &lt; jonp> momentum.
778# 07:50 &lt; jonp> and it's hard to say that a .exe isn't platform specific
779# 07:50 &lt; jonp> as it can still contain DllImport's which make platform
780# assumptions
781
782packagedir=$prefix/lib/<xsl:value-of select="$lcProjectName" />
783export MONO_PATH=$MONO_PATH<xsl:value-of select="$monoPath" />
784
785exec @RUNTIME@ $packagedir/$PACKAGE.exe "$@"
786</xsl:for-each>
787</xsl:template>
788</xsl:stylesheet>
789 </ProjectWrapperScriptIn>
790</Autotools>
diff --git a/Prebuild/src/data/dnpb-1.0.xsd b/Prebuild/src/data/dnpb-1.0.xsd
new file mode 100644
index 0000000..b9e0e4e
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.0.xsd
@@ -0,0 +1,183 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.0.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.0.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004 Matthew Holmes (kerion@houston.rr.com)
10
11 Redistribution and use in source and binary forms, with or without modification, are permitted
12 provided that the following conditions are met:
13
14 * Redistributions of source code must retain the above copyright notice, this list of conditions
15 and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
17 and the following disclaimer in the documentation and/or other materials provided with the
18 distribution.
19 * The name of the author may not be used to endorse or promote products derived from this software
20 without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
23 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 </xs:documentation>
30 </xs:annotation>
31
32 <xs:element name="DNPreBuild">
33 <xs:complexType>
34 <xs:sequence>
35 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
36 <xs:element ref="Solution" minOccurs="1" maxOccurs="unbounded" />
37 </xs:sequence>
38
39 <xs:attribute name="version" use="required" />
40 </xs:complexType>
41 </xs:element>
42
43 <xs:element name="Process" type="xs:string" />
44
45 <xs:element name="Solution">
46 <xs:complexType>
47 <xs:sequence>
48 <xs:element ref="Options" minOccurs="0" />
49 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
50 <xs:element ref="Files" minOccurs="0" />
51 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
52 </xs:sequence>
53
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="path" type="xs:string" default="" />
56 </xs:complexType>
57 </xs:element>
58
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element name="Reference" maxOccurs="unbounded">
63 <xs:complexType>
64 <xs:attribute name="name" type="xs:string" use="required" />
65 <xs:attribute name="path" type="xs:string" />
66 <xs:attribute name="localCopy" type="xs:boolean" />
67 <xs:attribute name="version" type="xs:string" />
68 </xs:complexType>
69 </xs:element>
70
71 <xs:element ref="Files" />
72 </xs:sequence>
73
74 <xs:attribute name="name" type="xs:string" use="required" />
75 <xs:attribute name="path" type="xs:string" default="" />
76
77 <xs:attribute name="language" default="C#">
78 <xs:simpleType>
79 <xs:restriction base="xs:string">
80 <xs:enumeration value="C#" />
81 <xs:enumeration value="VB.NET" />
82 </xs:restriction>
83 </xs:simpleType>
84 </xs:attribute>
85
86 <xs:attribute name="type" default="Exe">
87 <xs:simpleType>
88 <xs:restriction base="xs:string">
89 <xs:enumeration value="Exe" />
90 <xs:enumeration value="WinExe" />
91 <xs:enumeration value="Library" />
92 </xs:restriction>
93 </xs:simpleType>
94 </xs:attribute>
95
96 <xs:attribute name="runtime" default="Microsoft">
97 <xs:simpleType>
98 <xs:restriction base="xs:string">
99 <xs:enumeration value="Microsoft" />
100 <xs:enumeration value="Mono" />
101 </xs:restriction>
102 </xs:simpleType>
103 </xs:attribute>
104
105 <xs:attribute name="startupObject" type="xs:string" default="" />
106 </xs:complexType>
107 </xs:element>
108
109 <xs:element name="Configuration">
110 <xs:complexType>
111 <xs:all>
112 <xs:element ref="Options" minOccurs="0" />
113 </xs:all>
114
115 <xs:attribute name="name" type="xs:string" use="required" />
116 </xs:complexType>
117 </xs:element>
118
119 <xs:element name="Options">
120 <xs:complexType>
121 <xs:sequence>
122 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
123 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
124 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
125 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
126 <xs:element name="WarningLevel" minOccurs="0">
127 <xs:simpleType>
128 <xs:restriction base="xs:integer">
129 <xs:minInclusive value="0" />
130 <xs:maxInclusive value="4"/>
131 </xs:restriction>
132 </xs:simpleType>
133 </xs:element>
134 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
135 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
136 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
137 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
138 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
139 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
140 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
141 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
142 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
143 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
144 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
145 </xs:sequence>
146 </xs:complexType>
147 </xs:element>
148
149 <xs:element name="Files">
150 <xs:complexType>
151 <xs:sequence>
152 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
153 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
154 </xs:sequence>
155 </xs:complexType>
156 </xs:element>
157
158 <xs:element name="File">
159 <xs:complexType>
160 <xs:simpleContent>
161 <xs:extension base="xs:string">
162 <xs:attribute name="buildAction" default="Compile">
163 <xs:simpleType>
164 <xs:restriction base="xs:string">
165 <xs:enumeration value="Compile" />
166 <xs:enumeration value="Content" />
167 <xs:enumeration value="EmbeddedResource" />
168 </xs:restriction>
169 </xs:simpleType>
170 </xs:attribute>
171 </xs:extension>
172 </xs:simpleContent>
173 </xs:complexType>
174 </xs:element>
175
176 <xs:element name="Match">
177 <xs:complexType>
178 <xs:attribute name="path" type="xs:string" use="required" />
179 <xs:attribute name="pattern" type="xs:string" use="required" />
180 <xs:attribute name="recurse" type="xs:boolean" default="false" />
181 </xs:complexType>
182 </xs:element>
183</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.1.xsd b/Prebuild/src/data/dnpb-1.1.xsd
new file mode 100644
index 0000000..2c065a3
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.1.xsd
@@ -0,0 +1,184 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.1.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.1.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004 Matthew Holmes (kerion@houston.rr.com)
10
11 Redistribution and use in source and binary forms, with or without modification, are permitted
12 provided that the following conditions are met:
13
14 * Redistributions of source code must retain the above copyright notice, this list of conditions
15 and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
17 and the following disclaimer in the documentation and/or other materials provided with the
18 distribution.
19 * The name of the author may not be used to endorse or promote products derived from this software
20 without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
23 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 </xs:documentation>
30 </xs:annotation>
31
32 <xs:element name="DNPreBuild">
33 <xs:complexType>
34 <xs:sequence>
35 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
36 <xs:element ref="Solution" minOccurs="1" maxOccurs="unbounded" />
37 </xs:sequence>
38
39 <xs:attribute name="version" use="required" />
40 </xs:complexType>
41 </xs:element>
42
43 <xs:element name="Process" type="xs:string" />
44
45 <xs:element name="Solution">
46 <xs:complexType>
47 <xs:sequence>
48 <xs:element ref="Options" minOccurs="0" />
49 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
50 <xs:element ref="Files" minOccurs="0" />
51 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
52 </xs:sequence>
53
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="path" type="xs:string" default="" />
56 </xs:complexType>
57 </xs:element>
58
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
63
64 <xs:element name="Reference" maxOccurs="unbounded">
65 <xs:complexType>
66 <xs:attribute name="name" type="xs:string" use="required" />
67 <xs:attribute name="path" type="xs:string" />
68 <xs:attribute name="localCopy" type="xs:boolean" />
69 <xs:attribute name="version" type="xs:string" />
70 </xs:complexType>
71 </xs:element>
72
73 <xs:element ref="Files" />
74 </xs:sequence>
75
76 <xs:attribute name="name" type="xs:string" use="required" />
77 <xs:attribute name="path" type="xs:string" default="" />
78
79 <xs:attribute name="language" default="C#">
80 <xs:simpleType>
81 <xs:restriction base="xs:string">
82 <xs:enumeration value="C#" />
83 <xs:enumeration value="VB.NET" />
84 </xs:restriction>
85 </xs:simpleType>
86 </xs:attribute>
87
88 <xs:attribute name="type" default="Exe">
89 <xs:simpleType>
90 <xs:restriction base="xs:string">
91 <xs:enumeration value="Exe" />
92 <xs:enumeration value="WinExe" />
93 <xs:enumeration value="Library" />
94 </xs:restriction>
95 </xs:simpleType>
96 </xs:attribute>
97
98 <xs:attribute name="runtime" default="Microsoft">
99 <xs:simpleType>
100 <xs:restriction base="xs:string">
101 <xs:enumeration value="Microsoft" />
102 <xs:enumeration value="Mono" />
103 </xs:restriction>
104 </xs:simpleType>
105 </xs:attribute>
106
107 <xs:attribute name="startupObject" type="xs:string" default="" />
108 </xs:complexType>
109 </xs:element>
110
111 <xs:element name="Configuration">
112 <xs:complexType>
113 <xs:all>
114 <xs:element ref="Options" minOccurs="0" />
115 </xs:all>
116
117 <xs:attribute name="name" type="xs:string" use="required" />
118 </xs:complexType>
119 </xs:element>
120
121 <xs:element name="Options">
122 <xs:complexType>
123 <xs:sequence>
124 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
125 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
126 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
127 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
128 <xs:element name="WarningLevel" minOccurs="0">
129 <xs:simpleType>
130 <xs:restriction base="xs:integer">
131 <xs:minInclusive value="0" />
132 <xs:maxInclusive value="4"/>
133 </xs:restriction>
134 </xs:simpleType>
135 </xs:element>
136 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
137 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
138 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
139 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
140 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
141 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
142 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
143 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
144 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
145 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
146 </xs:sequence>
147 </xs:complexType>
148 </xs:element>
149
150 <xs:element name="Files">
151 <xs:complexType>
152 <xs:sequence>
153 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
154 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
155 </xs:sequence>
156 </xs:complexType>
157 </xs:element>
158
159 <xs:element name="File">
160 <xs:complexType>
161 <xs:simpleContent>
162 <xs:extension base="xs:string">
163 <xs:attribute name="buildAction" default="Compile">
164 <xs:simpleType>
165 <xs:restriction base="xs:string">
166 <xs:enumeration value="Compile" />
167 <xs:enumeration value="Content" />
168 <xs:enumeration value="EmbeddedResource" />
169 </xs:restriction>
170 </xs:simpleType>
171 </xs:attribute>
172 </xs:extension>
173 </xs:simpleContent>
174 </xs:complexType>
175 </xs:element>
176
177 <xs:element name="Match">
178 <xs:complexType>
179 <xs:attribute name="path" type="xs:string" use="required" />
180 <xs:attribute name="pattern" type="xs:string" use="required" />
181 <xs:attribute name="recurse" type="xs:boolean" default="false" />
182 </xs:complexType>
183 </xs:element>
184</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.2.xsd b/Prebuild/src/data/dnpb-1.2.xsd
new file mode 100644
index 0000000..d694ab4
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.2.xsd
@@ -0,0 +1,198 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.2.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.2.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004 Matthew Holmes (calefaction _at_ houston _._ rr _._ com)
10
11 Redistribution and use in source and binary forms, with or without modification, are permitted
12 provided that the following conditions are met:
13
14 * Redistributions of source code must retain the above copyright notice, this list of conditions
15 and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
17 and the following disclaimer in the documentation and/or other materials provided with the
18 distribution.
19 * The name of the author may not be used to endorse or promote products derived from this software
20 without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
23 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 </xs:documentation>
30 </xs:annotation>
31
32 <xs:element name="DNPreBuild">
33 <xs:complexType>
34 <xs:sequence>
35 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
36 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
37 </xs:sequence>
38
39 <xs:attribute name="version" use="required" />
40 </xs:complexType>
41 </xs:element>
42
43 <xs:element name="Process" type="xs:string" />
44
45 <xs:element name="Solution">
46 <xs:complexType>
47 <xs:sequence>
48 <xs:element ref="Options" minOccurs="0" />
49 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
50 <xs:element ref="Files" minOccurs="0" />
51 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
52 </xs:sequence>
53
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="path" type="xs:string" default="" />
56 </xs:complexType>
57 </xs:element>
58
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
63
64 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
65
66 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
67 <xs:complexType>
68 <xs:attribute name="name" type="xs:string" use="required" />
69 <xs:attribute name="path" type="xs:string" />
70 <xs:attribute name="localCopy" type="xs:boolean" />
71 <xs:attribute name="version" type="xs:string" />
72 </xs:complexType>
73 </xs:element>
74
75 <xs:element ref="Files" />
76 </xs:sequence>
77
78 <xs:attribute name="name" type="xs:string" use="required" />
79 <xs:attribute name="path" type="xs:string" default="" />
80
81 <xs:attribute name="language" default="C#">
82 <xs:simpleType>
83 <xs:restriction base="xs:string">
84 <xs:enumeration value="C#" />
85 <xs:enumeration value="VB.NET" />
86 </xs:restriction>
87 </xs:simpleType>
88 </xs:attribute>
89
90 <xs:attribute name="type" default="Exe">
91 <xs:simpleType>
92 <xs:restriction base="xs:string">
93 <xs:enumeration value="Exe" />
94 <xs:enumeration value="WinExe" />
95 <xs:enumeration value="Library" />
96 </xs:restriction>
97 </xs:simpleType>
98 </xs:attribute>
99
100 <xs:attribute name="runtime" default="Microsoft">
101 <xs:simpleType>
102 <xs:restriction base="xs:string">
103 <xs:enumeration value="Microsoft" />
104 <xs:enumeration value="Mono" />
105 </xs:restriction>
106 </xs:simpleType>
107 </xs:attribute>
108
109 <xs:attribute name="startupObject" type="xs:string" default="" />
110 <xs:attribute name="rootNamespace" type="xs:string" />
111 <xs:attribute name="assemblyName" type="xs:string" />
112 </xs:complexType>
113 </xs:element>
114
115 <xs:element name="Configuration">
116 <xs:complexType>
117 <xs:all>
118 <xs:element ref="Options" minOccurs="0" />
119 </xs:all>
120
121 <xs:attribute name="name" type="xs:string" use="required" />
122 </xs:complexType>
123 </xs:element>
124
125 <xs:element name="Options">
126 <xs:complexType>
127 <xs:all>
128 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
129 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
130 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
131 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
132 <xs:element name="WarningLevel" minOccurs="0">
133 <xs:simpleType>
134 <xs:restriction base="xs:integer">
135 <xs:minInclusive value="0" />
136 <xs:maxInclusive value="4"/>
137 </xs:restriction>
138 </xs:simpleType>
139 </xs:element>
140 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
141 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
142 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
143 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
144 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
145 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
146 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
147 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
148 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
149 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
150 </xs:all>
151 </xs:complexType>
152 </xs:element>
153
154 <xs:element name="Files">
155 <xs:complexType>
156 <xs:sequence>
157 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
158 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
159 </xs:sequence>
160 </xs:complexType>
161 </xs:element>
162
163 <xs:element name="File">
164 <xs:complexType>
165 <xs:simpleContent>
166 <xs:extension base="xs:string">
167 <xs:attribute name="buildAction" default="Compile">
168 <xs:simpleType>
169 <xs:restriction base="xs:string">
170 <xs:enumeration value="Compile" />
171 <xs:enumeration value="Content" />
172 <xs:enumeration value="EmbeddedResource" />
173 </xs:restriction>
174 </xs:simpleType>
175 </xs:attribute>
176 </xs:extension>
177 </xs:simpleContent>
178 </xs:complexType>
179 </xs:element>
180
181 <xs:element name="Match">
182 <xs:complexType>
183 <xs:attribute name="path" type="xs:string" use="required" />
184 <xs:attribute name="pattern" type="xs:string" use="required" />
185 <xs:attribute name="recurse" type="xs:boolean" default="false" />
186 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
187 <xs:attribute name="buildAction" default="Compile">
188 <xs:simpleType>
189 <xs:restriction base="xs:string">
190 <xs:enumeration value="Compile" />
191 <xs:enumeration value="Content" />
192 <xs:enumeration value="EmbeddedResource" />
193 </xs:restriction>
194 </xs:simpleType>
195 </xs:attribute>
196 </xs:complexType>
197 </xs:element>
198</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.3.xsd b/Prebuild/src/data/dnpb-1.3.xsd
new file mode 100644
index 0000000..8f31a54
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.3.xsd
@@ -0,0 +1,206 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.3.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.3.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com)
10
11 .NET Pre-Build is an XML-driven pre-build tool allowing developers to
12 easily generate project or make files for major IDE's and .NET
13 development tools including: Visual Studio 2003, Visual Studio 2002,
14 SharpDevelop, MonoDevelop, and NAnt.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="DNPreBuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
44 </xs:sequence>
45
46 <xs:attribute name="version" use="required" />
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="Process" type="xs:string" />
51
52 <xs:element name="Solution">
53 <xs:complexType>
54 <xs:sequence>
55 <xs:element ref="Options" minOccurs="0" />
56 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
57 <xs:element ref="Files" minOccurs="0" />
58 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
59 </xs:sequence>
60
61 <xs:attribute name="name" type="xs:string" use="required" />
62 <xs:attribute name="path" type="xs:string" default="" />
63 </xs:complexType>
64 </xs:element>
65
66 <xs:element name="Project">
67 <xs:complexType>
68 <xs:sequence>
69 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
70
71 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
72
73 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
74 <xs:complexType>
75 <xs:attribute name="name" type="xs:string" use="required" />
76 <xs:attribute name="path" type="xs:string" />
77 <xs:attribute name="localCopy" type="xs:boolean" />
78 <xs:attribute name="version" type="xs:string" />
79 </xs:complexType>
80 </xs:element>
81
82 <xs:element ref="Files" />
83 </xs:sequence>
84
85 <xs:attribute name="name" type="xs:string" use="required" />
86 <xs:attribute name="path" type="xs:string" default="" />
87 <xs:attribute name="icon" type="xs:string" default="" />
88
89 <xs:attribute name="language" default="C#">
90 <xs:simpleType>
91 <xs:restriction base="xs:string">
92 <xs:enumeration value="C#" />
93 <xs:enumeration value="VB.NET" />
94 </xs:restriction>
95 </xs:simpleType>
96 </xs:attribute>
97
98 <xs:attribute name="type" default="Exe">
99 <xs:simpleType>
100 <xs:restriction base="xs:string">
101 <xs:enumeration value="Exe" />
102 <xs:enumeration value="WinExe" />
103 <xs:enumeration value="Library" />
104 </xs:restriction>
105 </xs:simpleType>
106 </xs:attribute>
107
108 <xs:attribute name="runtime" default="Microsoft">
109 <xs:simpleType>
110 <xs:restriction base="xs:string">
111 <xs:enumeration value="Microsoft" />
112 <xs:enumeration value="Mono" />
113 </xs:restriction>
114 </xs:simpleType>
115 </xs:attribute>
116
117 <xs:attribute name="startupObject" type="xs:string" default="" />
118 <xs:attribute name="rootNamespace" type="xs:string" />
119 <xs:attribute name="assemblyName" type="xs:string" />
120 </xs:complexType>
121 </xs:element>
122
123 <xs:element name="Configuration">
124 <xs:complexType>
125 <xs:all>
126 <xs:element ref="Options" minOccurs="0" />
127 </xs:all>
128
129 <xs:attribute name="name" type="xs:string" use="required" />
130 </xs:complexType>
131 </xs:element>
132
133 <xs:element name="Options">
134 <xs:complexType>
135 <xs:all>
136 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
137 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
138 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
139 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
140 <xs:element name="WarningLevel" minOccurs="0">
141 <xs:simpleType>
142 <xs:restriction base="xs:integer">
143 <xs:minInclusive value="0" />
144 <xs:maxInclusive value="4"/>
145 </xs:restriction>
146 </xs:simpleType>
147 </xs:element>
148 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
149 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
150 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
151 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
152 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
153 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
154 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
155 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
156 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
157 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
158 </xs:all>
159 </xs:complexType>
160 </xs:element>
161
162 <xs:element name="Files">
163 <xs:complexType>
164 <xs:sequence>
165 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
166 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
167 </xs:sequence>
168 </xs:complexType>
169 </xs:element>
170
171 <xs:element name="File">
172 <xs:complexType>
173 <xs:simpleContent>
174 <xs:extension base="xs:string">
175 <xs:attribute name="buildAction" default="Compile">
176 <xs:simpleType>
177 <xs:restriction base="xs:string">
178 <xs:enumeration value="Compile" />
179 <xs:enumeration value="Content" />
180 <xs:enumeration value="EmbeddedResource" />
181 </xs:restriction>
182 </xs:simpleType>
183 </xs:attribute>
184 </xs:extension>
185 </xs:simpleContent>
186 </xs:complexType>
187 </xs:element>
188
189 <xs:element name="Match">
190 <xs:complexType>
191 <xs:attribute name="path" type="xs:string" />
192 <xs:attribute name="pattern" type="xs:string" use="required" />
193 <xs:attribute name="recurse" type="xs:boolean" default="false" />
194 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
195 <xs:attribute name="buildAction" default="Compile">
196 <xs:simpleType>
197 <xs:restriction base="xs:string">
198 <xs:enumeration value="Compile" />
199 <xs:enumeration value="Content" />
200 <xs:enumeration value="EmbeddedResource" />
201 </xs:restriction>
202 </xs:simpleType>
203 </xs:attribute>
204 </xs:complexType>
205 </xs:element>
206</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.4.xsd b/Prebuild/src/data/dnpb-1.4.xsd
new file mode 100644
index 0000000..1da50fc
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.4.xsd
@@ -0,0 +1,212 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.4.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.4.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002 and
14 2003, SharpDevelop, MonoDevelop, and NAnt.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="DNPreBuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
44 </xs:sequence>
45
46 <xs:attribute name="version" />
47 <xs:attribute name="checkOsVars" />
48 </xs:complexType>
49 </xs:element>
50
51 <xs:element name="Process" type="xs:string" />
52
53 <xs:element name="Solution">
54 <xs:complexType>
55 <xs:sequence>
56 <xs:element ref="Options" minOccurs="0" />
57 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
60 </xs:sequence>
61
62 <xs:attribute name="name" type="xs:string" use="required" />
63 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
64 <xs:attribute name="path" type="xs:string" default="" />
65 </xs:complexType>
66 </xs:element>
67
68 <xs:element name="Project">
69 <xs:complexType>
70 <xs:sequence>
71 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
72
73 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
74
75 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
76 <xs:complexType>
77 <xs:attribute name="name" type="xs:string" use="required" />
78 <xs:attribute name="path" type="xs:string" />
79 <xs:attribute name="localCopy" type="xs:boolean" />
80 <xs:attribute name="version" type="xs:string" />
81 </xs:complexType>
82 </xs:element>
83
84 <xs:element ref="Files" />
85 </xs:sequence>
86
87 <xs:attribute name="name" type="xs:string" use="required" />
88 <xs:attribute name="path" type="xs:string" default="" />
89 <xs:attribute name="icon" type="xs:string" default="" />
90
91 <xs:attribute name="language" default="C#">
92 <xs:simpleType>
93 <xs:restriction base="xs:string">
94 <xs:enumeration value="C#" />
95 <xs:enumeration value="VB.NET" />
96 </xs:restriction>
97 </xs:simpleType>
98 </xs:attribute>
99
100 <xs:attribute name="type" default="Exe">
101 <xs:simpleType>
102 <xs:restriction base="xs:string">
103 <xs:enumeration value="Exe" />
104 <xs:enumeration value="WinExe" />
105 <xs:enumeration value="Library" />
106 </xs:restriction>
107 </xs:simpleType>
108 </xs:attribute>
109
110 <xs:attribute name="runtime" default="Microsoft">
111 <xs:simpleType>
112 <xs:restriction base="xs:string">
113 <xs:enumeration value="Microsoft" />
114 <xs:enumeration value="Mono" />
115 </xs:restriction>
116 </xs:simpleType>
117 </xs:attribute>
118
119 <xs:attribute name="startupObject" type="xs:string" default="" />
120 <xs:attribute name="rootNamespace" type="xs:string" />
121 <xs:attribute name="assemblyName" type="xs:string" />
122 </xs:complexType>
123 </xs:element>
124
125 <xs:element name="Configuration">
126 <xs:complexType>
127 <xs:sequence>
128 <xs:element ref="Options" minOccurs="0" />
129 </xs:sequence>
130
131 <xs:attribute name="name" type="xs:string" use="required" />
132 </xs:complexType>
133 </xs:element>
134
135 <xs:element name="Options">
136 <xs:complexType>
137 <xs:all>
138 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
139 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
140 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
141 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
142 <xs:element name="WarningLevel" minOccurs="0">
143 <xs:simpleType>
144 <xs:restriction base="xs:integer">
145 <xs:minInclusive value="0" />
146 <xs:maxInclusive value="4"/>
147 </xs:restriction>
148 </xs:simpleType>
149 </xs:element>
150 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
151 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
152 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
153 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
154 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
155 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
156 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
157 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
158 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
159 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
160 </xs:all>
161 </xs:complexType>
162 </xs:element>
163
164 <xs:element name="Files">
165 <xs:complexType>
166 <xs:sequence>
167 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
168 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
169 </xs:sequence>
170 </xs:complexType>
171 </xs:element>
172
173 <xs:element name="File">
174 <xs:complexType>
175 <xs:simpleContent>
176 <xs:extension base="xs:string">
177 <xs:attribute name="buildAction" default="Compile">
178 <xs:simpleType>
179 <xs:restriction base="xs:string">
180 <xs:enumeration value="None" />
181 <xs:enumeration value="Compile" />
182 <xs:enumeration value="Content" />
183 <xs:enumeration value="EmbeddedResource" />
184 </xs:restriction>
185 </xs:simpleType>
186 </xs:attribute>
187 </xs:extension>
188 </xs:simpleContent>
189 </xs:complexType>
190 </xs:element>
191
192 <xs:element name="Match">
193 <xs:complexType>
194 <xs:attribute name="path" type="xs:string" />
195 <xs:attribute name="pattern" type="xs:string" use="required" />
196 <xs:attribute name="recurse" type="xs:boolean" default="false" />
197 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
198 <xs:attribute name="buildAction" default="Compile">
199 <xs:simpleType>
200 <xs:restriction base="xs:string">
201 <xs:enumeration value="None" />
202 <xs:enumeration value="Compile" />
203 <xs:enumeration value="Content" />
204 <xs:enumeration value="EmbeddedResource" />
205 </xs:restriction>
206 </xs:simpleType>
207 </xs:attribute>
208 </xs:complexType>
209 </xs:element>
210</xs:schema>
211
212
diff --git a/Prebuild/src/data/dnpb-1.5.xsd b/Prebuild/src/data/dnpb-1.5.xsd
new file mode 100644
index 0000000..e2b21f0
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.5.xsd
@@ -0,0 +1,215 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.5.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.5.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002 and
14 2003, SharpDevelop, MonoDevelop, and NAnt.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="DNPreBuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
44 </xs:sequence>
45
46 <xs:attribute name="version" />
47 <xs:attribute name="checkOsVars" />
48 </xs:complexType>
49 </xs:element>
50
51 <xs:element name="Process" type="xs:string" />
52
53 <xs:element name="Solution">
54 <xs:complexType>
55 <xs:sequence>
56 <xs:element ref="Options" minOccurs="0" />
57 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
60 </xs:sequence>
61
62 <xs:attribute name="name" type="xs:string" use="required" />
63 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
64 <xs:attribute name="path" type="xs:string" default="" />
65 </xs:complexType>
66 </xs:element>
67
68 <xs:element name="Project">
69 <xs:complexType>
70 <xs:sequence>
71 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
72
73 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
74
75 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
76 <xs:complexType>
77 <xs:attribute name="name" type="xs:string" use="required" />
78 <xs:attribute name="path" type="xs:string" />
79 <xs:attribute name="localCopy" type="xs:boolean" />
80 <xs:attribute name="version" type="xs:string" />
81 </xs:complexType>
82 </xs:element>
83
84 <xs:element ref="Files" />
85 </xs:sequence>
86
87 <xs:attribute name="name" type="xs:string" use="required" />
88 <xs:attribute name="filterGroups" type="xs:string" default="" />
89 <xs:attribute name="path" type="xs:string" default="" />
90 <xs:attribute name="icon" type="xs:string" default="" />
91
92 <xs:attribute name="language" default="C#">
93 <xs:simpleType>
94 <xs:restriction base="xs:string">
95 <xs:enumeration value="C#" />
96 <xs:enumeration value="VB.NET" />
97 </xs:restriction>
98 </xs:simpleType>
99 </xs:attribute>
100
101 <xs:attribute name="type" default="Exe">
102 <xs:simpleType>
103 <xs:restriction base="xs:string">
104 <xs:enumeration value="Exe" />
105 <xs:enumeration value="WinExe" />
106 <xs:enumeration value="Library" />
107 </xs:restriction>
108 </xs:simpleType>
109 </xs:attribute>
110
111 <xs:attribute name="runtime" default="Microsoft">
112 <xs:simpleType>
113 <xs:restriction base="xs:string">
114 <xs:enumeration value="Microsoft" />
115 <xs:enumeration value="Mono" />
116 </xs:restriction>
117 </xs:simpleType>
118 </xs:attribute>
119
120 <xs:attribute name="startupObject" type="xs:string" default="" />
121 <xs:attribute name="rootNamespace" type="xs:string" />
122 <xs:attribute name="assemblyName" type="xs:string" />
123 </xs:complexType>
124 </xs:element>
125
126 <xs:element name="Configuration">
127 <xs:complexType>
128 <xs:sequence>
129 <xs:element ref="Options" minOccurs="0" />
130 </xs:sequence>
131
132 <xs:attribute name="name" type="xs:string" use="required" />
133 </xs:complexType>
134 </xs:element>
135
136 <xs:element name="Options">
137 <xs:complexType>
138 <xs:all>
139 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
140 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
141 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
142 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
143 <xs:element name="WarningLevel" minOccurs="0">
144 <xs:simpleType>
145 <xs:restriction base="xs:integer">
146 <xs:minInclusive value="0" />
147 <xs:maxInclusive value="4"/>
148 </xs:restriction>
149 </xs:simpleType>
150 </xs:element>
151 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
152 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
153 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
154 <xs:element name="GenerateXmlDocFile" type="xs:boolean" minOccurs="0" />
155 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
156 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
157 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
158 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
159 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
160 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
161 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
162 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
163 </xs:all>
164 </xs:complexType>
165 </xs:element>
166
167 <xs:element name="Files">
168 <xs:complexType>
169 <xs:sequence>
170 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
171 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
172 </xs:sequence>
173 </xs:complexType>
174 </xs:element>
175
176 <xs:element name="File">
177 <xs:complexType>
178 <xs:simpleContent>
179 <xs:extension base="xs:string">
180 <xs:attribute name="buildAction" default="Compile">
181 <xs:simpleType>
182 <xs:restriction base="xs:string">
183 <xs:enumeration value="None" />
184 <xs:enumeration value="Compile" />
185 <xs:enumeration value="Content" />
186 <xs:enumeration value="EmbeddedResource" />
187 </xs:restriction>
188 </xs:simpleType>
189 </xs:attribute>
190 </xs:extension>
191 </xs:simpleContent>
192 </xs:complexType>
193 </xs:element>
194
195 <xs:element name="Match">
196 <xs:complexType>
197 <xs:attribute name="path" type="xs:string" />
198 <xs:attribute name="pattern" type="xs:string" use="required" />
199 <xs:attribute name="recurse" type="xs:boolean" default="false" />
200 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
201 <xs:attribute name="buildAction" default="Compile">
202 <xs:simpleType>
203 <xs:restriction base="xs:string">
204 <xs:enumeration value="None" />
205 <xs:enumeration value="Compile" />
206 <xs:enumeration value="Content" />
207 <xs:enumeration value="EmbeddedResource" />
208 </xs:restriction>
209 </xs:simpleType>
210 </xs:attribute>
211 </xs:complexType>
212 </xs:element>
213</xs:schema>
214
215
diff --git a/Prebuild/src/data/prebuild-1.10.xsd b/Prebuild/src/data/prebuild-1.10.xsd
new file mode 100644
index 0000000..eee07a8
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.10.xsd
@@ -0,0 +1,338 @@
1<?xml version="1.0" encoding="utf-8"?>
2<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dnpb.sourceforge.net/schemas/prebuild-1.10.xsd" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.10.xsd">
3 <xs:annotation>
4 <xs:documentation>
5 Copyright (c) 2004-2007
6 Matthew Holmes (calefaction at houston . rr . com),
7 Dan Moorehead (dan05a at gmail . com),
8 David Hudson (jendave at yahoo dot com),
9 C.J. Adams-Collier (cjac at colliertech dot com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002,
14 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="Prebuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="1" maxOccurs="1" />
44 </xs:sequence>
45 <xs:attribute name="version" />
46 <xs:attribute name="checkOsVars" />
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="Process" type="xs:string" />
51
52 <xs:element name="Solution">
53 <xs:complexType>
54 <xs:sequence>
55 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
56 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
57 <xs:element ref="Options" minOccurs="0" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
60 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
61 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
62 </xs:sequence>
63 <xs:attribute name="name" type="xs:string" use="required" />
64 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
65 <xs:attribute name="path" type="xs:string" default="" />
66 <xs:attribute name="version" type="xs:string" default="1.0.0" />
67 </xs:complexType>
68 </xs:element>
69
70 <xs:element name="EmbeddedSolution">
71 <xs:complexType>
72 <xs:sequence>
73 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
74 <xs:element ref="Files" minOccurs="0" />
75 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
76 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
77 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
78 </xs:sequence>
79 <xs:attribute name="name" type="xs:string" use="required" />
80 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
81 <xs:attribute name="path" type="xs:string" default="" />
82 <xs:attribute name="version" type="xs:string" default="1.0.0" />
83 </xs:complexType>
84 </xs:element>
85
86 <xs:element name="DatabaseProject">
87 <xs:complexType>
88 <xs:sequence>
89 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
90 <xs:element ref="DatabaseReference" minOccurs="0" maxOccurs="unbounded" />
91 </xs:sequence>
92 <xs:attribute name="name" type="xs:string" use="required" />
93 <xs:attribute name="path" type="xs:string" />
94 </xs:complexType>
95 </xs:element>
96
97 <xs:element name="DatabaseReference">
98 <xs:complexType>
99 <xs:attribute name="name" type="xs:string" use="required" />
100 <xs:attribute name="providerId" type="xs:string" />
101 <xs:attribute name="providerName" type="xs:string" />
102 <xs:attribute name="connectionString" type="xs:string" use="required" />
103 </xs:complexType>
104 </xs:element>
105
106 <xs:element name="Project">
107 <xs:complexType>
108 <xs:sequence>
109 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
110 <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
111 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
112 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
113 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
114 <xs:complexType>
115 <xs:attribute name="name" type="xs:string" use="required" />
116 <xs:attribute name="path" type="xs:string" />
117 <xs:attribute name="localCopy" type="xs:boolean" />
118 <xs:attribute name="version" type="xs:string" />
119 </xs:complexType>
120 </xs:element>
121 <xs:element ref="Files" />
122 </xs:sequence>
123 <xs:attribute name="name" type="xs:string" use="required" />
124 <xs:attribute name="designerFolder" type="xs:string" default="" />
125 <xs:attribute name="filterGroups" type="xs:string" default="" />
126 <xs:attribute name="path" type="xs:string" default="" />
127 <xs:attribute name="icon" type="xs:string" default="" />
128 <xs:attribute name="configFile" type="xs:string" default="" />
129 <xs:attribute name="version" type="xs:string" default="1.0.0" />
130 <xs:attribute name="guid" type="xs:string"/>
131 <xs:attribute name="language" default="C#">
132 <xs:simpleType>
133 <xs:restriction base="xs:string">
134 <xs:enumeration value="C#" />
135 <xs:enumeration value="VB.NET" />
136 </xs:restriction>
137 </xs:simpleType>
138 </xs:attribute>
139 <xs:attribute name="type" default="Exe">
140 <xs:simpleType>
141 <xs:restriction base="xs:string">
142 <xs:enumeration value="Exe" />
143 <xs:enumeration value="WinExe" />
144 <xs:enumeration value="Library" />
145 <xs:enumeration value="Web" />
146 </xs:restriction>
147 </xs:simpleType>
148 </xs:attribute>
149 <xs:attribute name="runtime" default="Microsoft">
150 <xs:simpleType>
151 <xs:restriction base="xs:string">
152 <xs:enumeration value="Microsoft" />
153 <xs:enumeration value="Mono" />
154 </xs:restriction>
155 </xs:simpleType>
156 </xs:attribute>
157 <xs:attribute name="frameworkVersion" default="v2_0">
158 <xs:simpleType>
159 <xs:restriction base="xs:string">
160 <xs:enumeration value="v2_0" />
161 <xs:enumeration value="v3_0" />
162 <xs:enumeration value="v3_5" />
163 <xs:enumeration value="v4_0" />
164 <xs:enumeration value="v4_5" />
165 <xs:enumeration value="v4_5_1" />
166 </xs:restriction>
167 </xs:simpleType>
168 </xs:attribute>
169 <xs:attribute name="startupObject" type="xs:string" default="" />
170 <xs:attribute name="rootNamespace" type="xs:string" />
171 <xs:attribute name="assemblyName" type="xs:string" />
172 <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false" />
173 </xs:complexType>
174 </xs:element>
175
176 <xs:element name="Configuration">
177 <xs:complexType>
178 <xs:sequence>
179 <xs:element ref="Options" minOccurs="0" />
180 </xs:sequence>
181 <xs:attribute name="name" type="xs:string" use="required" />
182 <xs:attribute name="platform" type="xs:string" use="required" />
183 </xs:complexType>
184 </xs:element>
185 <xs:element name="Options">
186 <xs:complexType>
187 <xs:all>
188 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
189 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
190 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
191 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
192 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
193 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
194 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
195 <xs:simpleType>
196 <xs:restriction base="xs:string">
197 <xs:enumeration value="OnBuildSuccess" />
198 <xs:enumeration value="Always" />
199 <xs:enumeration value="OnOutputUpdated" />
200 </xs:restriction>
201 </xs:simpleType>
202 </xs:element>
203 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
204 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
205 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
206 <xs:element name="WarningLevel" minOccurs="0">
207 <xs:simpleType>
208 <xs:restriction base="xs:integer">
209 <xs:minInclusive value="0" />
210 <xs:maxInclusive value="4" />
211 </xs:restriction>
212 </xs:simpleType>
213 </xs:element>
214 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
215 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
216 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
217 <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" />
218 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
219 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
220 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
221 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
222 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
223 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
224 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
225 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
226 <xs:element name="KeyFile" type="xs:string" minOccurs="0" />
227 </xs:all>
228 </xs:complexType>
229 </xs:element>
230 <xs:element name="Files">
231 <xs:complexType>
232 <xs:sequence>
233 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
234 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
235 </xs:sequence>
236 </xs:complexType>
237 </xs:element>
238 <xs:element name="File">
239 <xs:complexType>
240 <xs:simpleContent>
241 <xs:extension base="xs:string">
242 <xs:attribute name="resourceName" type="xs:string" default="" />
243 <xs:attribute name="buildAction" default="Compile">
244 <xs:simpleType>
245 <xs:restriction base="xs:string">
246 <xs:enumeration value="None" />
247 <xs:enumeration value="Compile" />
248 <xs:enumeration value="Content" />
249 <xs:enumeration value="EmbeddedResource" />
250 <xs:enumeration value="ApplicationDefinition" />
251 <xs:enumeration value="Page" />
252 </xs:restriction>
253 </xs:simpleType>
254 </xs:attribute>
255 <xs:attribute name="subType" default="Code">
256 <xs:simpleType>
257 <xs:restriction base="xs:string">
258 <xs:enumeration value="Code" />
259 <xs:enumeration value="CodeBehind" />
260 <xs:enumeration value="Component" />
261 <xs:enumeration value="Form" />
262 <xs:enumeration value="Settings" />
263 <xs:enumeration value="UserControl" />
264 </xs:restriction>
265 </xs:simpleType>
266 </xs:attribute>
267 <xs:attribute name="link" type="xs:boolean" />
268 <xs:attribute name="copyToOutput" default="Never">
269 <xs:simpleType>
270 <xs:restriction base="xs:string">
271 <xs:enumeration value="Never" />
272 <xs:enumeration value="Always" />
273 <xs:enumeration value="PreserveNewest" />
274 </xs:restriction>
275 </xs:simpleType>
276 </xs:attribute>
277 <xs:attribute name="preservePath" type="xs:boolean" />
278 <xs:attribute name="linkPath" type="xs:string" />
279 </xs:extension>
280 </xs:simpleContent>
281 </xs:complexType>
282 </xs:element>
283 <xs:element name="Match">
284 <xs:complexType>
285 <xs:sequence>
286 <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" />
287 </xs:sequence>
288 <xs:attribute name="path" type="xs:string" />
289 <xs:attribute name="pattern" type="xs:string" use="required" />
290 <xs:attribute name="recurse" type="xs:boolean" default="false" />
291 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
292 <xs:attribute name="buildAction" default="Compile">
293 <xs:simpleType>
294 <xs:restriction base="xs:string">
295 <xs:enumeration value="None" />
296 <xs:enumeration value="Compile" />
297 <xs:enumeration value="Content" />
298 <xs:enumeration value="EmbeddedResource" />
299 <xs:enumeration value="ApplicationDefinition" />
300 <xs:enumeration value="Page" />
301 </xs:restriction>
302 </xs:simpleType>
303 </xs:attribute>
304 <xs:attribute name="resourceName" type="xs:string" default="" />
305 <xs:attribute name="subType" default="Code">
306 <xs:simpleType>
307 <xs:restriction base="xs:string">
308 <xs:enumeration value="Code" />
309 <xs:enumeration value="CodeBehind" />
310 <xs:enumeration value="Component" />
311 <xs:enumeration value="Designer" />
312 <xs:enumeration value="Form" />
313 <xs:enumeration value="Settings" />
314 <xs:enumeration value="UserControl" />
315 </xs:restriction>
316 </xs:simpleType>
317 </xs:attribute>
318 <xs:attribute name="link" type="xs:boolean" />
319 <xs:attribute name="copyToOutput" default="Never">
320 <xs:simpleType>
321 <xs:restriction base="xs:string">
322 <xs:enumeration value="Never" />
323 <xs:enumeration value="Always" />
324 <xs:enumeration value="PreserveNewest" />
325 </xs:restriction>
326 </xs:simpleType>
327 </xs:attribute>
328 <xs:attribute name="preservePath" type="xs:boolean" />
329 <xs:attribute name="linkPath" type="xs:string" />
330 </xs:complexType>
331 </xs:element>
332 <xs:element name="Exclude">
333 <xs:complexType>
334 <xs:attribute name="name" type="xs:string" />
335 <xs:attribute name="pattern" type="xs:string" />
336 </xs:complexType>
337 </xs:element>
338</xs:schema>
diff --git a/Prebuild/src/data/prebuild-1.6.xsd b/Prebuild/src/data/prebuild-1.6.xsd
new file mode 100644
index 0000000..57ebd2e
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.6.xsd
@@ -0,0 +1,231 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd"
3 xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
4 <xs:annotation>
5 <xs:documentation>
6 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com)
7
8 .NET Prebuild is a cross-platform XML-driven pre-build tool which
9 allows developers to easily generate project or make files for major
10 IDE's and .NET development tools including: Visual Studio .NET 2002 and
11 2003, SharpDevelop, MonoDevelop, and NAnt.
12
13 BSD License:
14
15 Redistribution and use in source and binary forms, with or without modification, are permitted
16 provided that the following conditions are met:
17
18 * Redistributions of source code must retain the above copyright notice, this list of conditions
19 and the following disclaimer.
20 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
21 and the following disclaimer in the documentation and/or other materials provided with the
22 distribution.
23 * The name of the author may not be used to endorse or promote products derived from this software
24 without specific prior written permission.
25
26 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
27 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
31 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 </xs:documentation>
34 </xs:annotation>
35 <xs:element name="Prebuild">
36 <xs:complexType>
37 <xs:sequence>
38 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
39 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
40 </xs:sequence>
41 <xs:attribute name="version" />
42 <xs:attribute name="checkOsVars" />
43 </xs:complexType>
44 </xs:element>
45 <xs:element name="Process" type="xs:string" />
46 <xs:element name="Solution">
47 <xs:complexType>
48 <xs:sequence>
49 <xs:element ref="Options" minOccurs="0" />
50 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
51 <xs:element ref="Files" minOccurs="0" />
52 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
53 </xs:sequence>
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
56 <xs:attribute name="path" type="xs:string" default="" />
57 </xs:complexType>
58 </xs:element>
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
63 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
64 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
65 <xs:complexType>
66 <xs:attribute name="name" type="xs:string" use="required" />
67 <xs:attribute name="path" type="xs:string" />
68 <xs:attribute name="localCopy" type="xs:boolean" />
69 <xs:attribute name="version" type="xs:string" />
70 </xs:complexType>
71 </xs:element>
72 <xs:element ref="Files" />
73 </xs:sequence>
74 <xs:attribute name="name" type="xs:string" use="required" />
75 <xs:attribute name="filterGroups" type="xs:string" default="" />
76 <xs:attribute name="path" type="xs:string" default="" />
77 <xs:attribute name="icon" type="xs:string" default="" />
78 <xs:attribute name="language" default="C#">
79 <xs:simpleType>
80 <xs:restriction base="xs:string">
81 <xs:enumeration value="C#" />
82 <xs:enumeration value="VB.NET" />
83 </xs:restriction>
84 </xs:simpleType>
85 </xs:attribute>
86 <xs:attribute name="type" default="Exe">
87 <xs:simpleType>
88 <xs:restriction base="xs:string">
89 <xs:enumeration value="Exe" />
90 <xs:enumeration value="WinExe" />
91 <xs:enumeration value="Library" />
92 </xs:restriction>
93 </xs:simpleType>
94 </xs:attribute>
95 <xs:attribute name="runtime" default="Microsoft">
96 <xs:simpleType>
97 <xs:restriction base="xs:string">
98 <xs:enumeration value="Microsoft" />
99 <xs:enumeration value="Mono" />
100 </xs:restriction>
101 </xs:simpleType>
102 </xs:attribute>
103 <xs:attribute name="startupObject" type="xs:string" default="" />
104 <xs:attribute name="rootNamespace" type="xs:string" />
105 <xs:attribute name="assemblyName" type="xs:string" />
106 </xs:complexType>
107 </xs:element>
108 <xs:element name="Configuration">
109 <xs:complexType>
110 <xs:sequence>
111 <xs:element ref="Options" minOccurs="0" />
112 </xs:sequence>
113 <xs:attribute name="name" type="xs:string" use="required" />
114 </xs:complexType>
115 </xs:element>
116 <xs:element name="Options">
117 <xs:complexType>
118 <xs:all>
119 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
120 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
121 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
122 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
123 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
124 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
125 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
126 <xs:simpleType>
127 <xs:restriction base="xs:string">
128 <xs:enumeration value="OnBuildSuccess" />
129 <xs:enumeration value="Always" />
130 <xs:enumeration value="OnOutputUpdated" />
131 </xs:restriction>
132 </xs:simpleType>
133 </xs:element>
134 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
135 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
136 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
137 <xs:element name="WarningLevel" minOccurs="0">
138 <xs:simpleType>
139 <xs:restriction base="xs:integer">
140 <xs:minInclusive value="0" />
141 <xs:maxInclusive value="4" />
142 </xs:restriction>
143 </xs:simpleType>
144 </xs:element>
145 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
146 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
147 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
148 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
149 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
150 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
151 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
152 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
153 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
154 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
155 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
156 </xs:all>
157 </xs:complexType>
158 </xs:element>
159 <xs:element name="Files">
160 <xs:complexType>
161 <xs:sequence>
162 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
163 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
164 </xs:sequence>
165 </xs:complexType>
166 </xs:element>
167 <xs:element name="File">
168 <xs:complexType>
169 <xs:simpleContent>
170 <xs:extension base="xs:string">
171 <xs:attribute name="buildAction" default="Compile">
172 <xs:simpleType>
173 <xs:restriction base="xs:string">
174 <xs:enumeration value="None" />
175 <xs:enumeration value="Compile" />
176 <xs:enumeration value="Content" />
177 <xs:enumeration value="EmbeddedResource" />
178 </xs:restriction>
179 </xs:simpleType>
180 </xs:attribute>
181 <xs:attribute name="subType" default="Code">
182 <xs:simpleType>
183 <xs:restriction base="xs:string">
184 <xs:enumeration value="Code" />
185 <xs:enumeration value="Component" />
186 <xs:enumeration value="Form" />
187 <xs:enumeration value="UserControl" />
188 </xs:restriction>
189 </xs:simpleType>
190 </xs:attribute>
191 </xs:extension>
192 </xs:simpleContent>
193 </xs:complexType>
194 </xs:element>
195 <xs:element name="Match">
196 <xs:complexType>
197 <xs:sequence>
198 <xs:element ref="Exclude" minOccurs="0" />
199 </xs:sequence>
200 <xs:attribute name="path" type="xs:string" />
201 <xs:attribute name="pattern" type="xs:string" use="required" />
202 <xs:attribute name="recurse" type="xs:boolean" default="false" />
203 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
204 <xs:attribute name="buildAction" default="Compile">
205 <xs:simpleType>
206 <xs:restriction base="xs:string">
207 <xs:enumeration value="None" />
208 <xs:enumeration value="Compile" />
209 <xs:enumeration value="Content" />
210 <xs:enumeration value="EmbeddedResource" />
211 </xs:restriction>
212 </xs:simpleType>
213 </xs:attribute>
214 <xs:attribute name="subType" default="Code">
215 <xs:simpleType>
216 <xs:restriction base="xs:string">
217 <xs:enumeration value="Code" />
218 <xs:enumeration value="Component" />
219 <xs:enumeration value="Form" />
220 <xs:enumeration value="UserControl" />
221 </xs:restriction>
222 </xs:simpleType>
223 </xs:attribute>
224 </xs:complexType>
225 </xs:element>
226 <xs:element name="Exclude">
227 <xs:complexType>
228 <xs:attribute name="name" type="xs:string" use="required" />
229 </xs:complexType>
230 </xs:element>
231</xs:schema>
diff --git a/Prebuild/src/data/prebuild-1.7.xsd b/Prebuild/src/data/prebuild-1.7.xsd
new file mode 100644
index 0000000..a7f5c88
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.7.xsd
@@ -0,0 +1,350 @@
1<?xml version="1.0" encoding="utf-8"?>
2<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
3 <xs:annotation>
4 <xs:documentation>
5 Copyright (c) 2004-2007
6 Matthew Holmes (calefaction at houston . rr . com),
7 Dan Moorehead (dan05a at gmail . com),
8 David Hudson (jendave at yahoo dot com),
9 C.J. Adams-Collier (cjac at colliertech dot com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002,
14 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="Prebuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="1" maxOccurs="unbounded" />
44 </xs:sequence>
45 <xs:attribute name="version" />
46 <xs:attribute name="checkOsVars" />
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="Process" type="xs:string" />
51
52 <xs:element name="Solution">
53 <xs:complexType>
54 <xs:sequence>
55 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
56 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
57 <xs:element ref="Options" minOccurs="0" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
60 <xs:element ref="Cleanup" minOccurs="0" maxOccurs="1" />
61 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
62 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
63 </xs:sequence>
64 <xs:attribute name="name" type="xs:string" use="required" />
65 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
66 <xs:attribute name="path" type="xs:string" default="" />
67 <xs:attribute name="version" type="xs:string" default="1.0.0" />
68 </xs:complexType>
69 </xs:element>
70
71 <xs:element name="EmbeddedSolution">
72 <xs:complexType>
73 <xs:sequence>
74 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
75 <xs:element ref="Files" minOccurs="0" />
76 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
77 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
78 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
79 </xs:sequence>
80 <xs:attribute name="name" type="xs:string" use="required" />
81 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
82 <xs:attribute name="path" type="xs:string" default="" />
83 <xs:attribute name="version" type="xs:string" default="1.0.0" />
84 </xs:complexType>
85 </xs:element>
86
87 <xs:element name="DatabaseProject">
88 <xs:complexType>
89 <xs:sequence>
90 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
91 <xs:element ref="DatabaseReference" minOccurs="0" maxOccurs="unbounded" />
92 </xs:sequence>
93 <xs:attribute name="name" type="xs:string" use="required" />
94 <xs:attribute name="path" type="xs:string" />
95 </xs:complexType>
96 </xs:element>
97
98 <xs:element name="DatabaseReference">
99 <xs:complexType>
100 <xs:attribute name="name" type="xs:string" use="required" />
101 <xs:attribute name="providerId" type="xs:string" />
102 <xs:attribute name="providerName" type="xs:string" />
103 <xs:attribute name="connectionString" type="xs:string" use="required" />
104 </xs:complexType>
105 </xs:element>
106
107 <xs:element name="Project">
108 <xs:complexType>
109 <xs:sequence>
110 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
111 <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
112 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
113 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
114 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
115 <xs:complexType>
116 <xs:attribute name="name" type="xs:string" use="required" />
117 <xs:attribute name="path" type="xs:string" />
118 <xs:attribute name="localCopy" type="xs:boolean" />
119 <xs:attribute name="version" type="xs:string" />
120 </xs:complexType>
121 </xs:element>
122 <xs:element ref="Files" />
123 </xs:sequence>
124 <xs:attribute name="name" type="xs:string" use="required" />
125 <xs:attribute name="designerFolder" type="xs:string" default="" />
126 <xs:attribute name="filterGroups" type="xs:string" default="" />
127 <xs:attribute name="path" type="xs:string" default="" />
128 <xs:attribute name="icon" type="xs:string" default="" />
129 <xs:attribute name="configFile" type="xs:string" default="" />
130 <xs:attribute name="version" type="xs:string" default="1.0.0" />
131 <xs:attribute name="guid" type="xs:string"/>
132 <xs:attribute name="language" default="C#">
133 <xs:simpleType>
134 <xs:restriction base="xs:string">
135 <xs:enumeration value="C#" />
136 <xs:enumeration value="VB.NET" />
137 </xs:restriction>
138 </xs:simpleType>
139 </xs:attribute>
140 <xs:attribute name="type" default="Exe">
141 <xs:simpleType>
142 <xs:restriction base="xs:string">
143 <xs:enumeration value="Exe" />
144 <xs:enumeration value="WinExe" />
145 <xs:enumeration value="Library" />
146 <xs:enumeration value="Web" />
147 </xs:restriction>
148 </xs:simpleType>
149 </xs:attribute>
150 <xs:attribute name="runtime" default="Microsoft">
151 <xs:simpleType>
152 <xs:restriction base="xs:string">
153 <xs:enumeration value="Microsoft" />
154 <xs:enumeration value="Mono" />
155 </xs:restriction>
156 </xs:simpleType>
157 </xs:attribute>
158 <xs:attribute name="frameworkVersion" default="v2_0">
159 <xs:simpleType>
160 <xs:restriction base="xs:string">
161 <xs:enumeration value="v2_0" />
162 <xs:enumeration value="v3_0" />
163 <xs:enumeration value="v3_5" />
164 </xs:restriction>
165 </xs:simpleType>
166 </xs:attribute>
167 <xs:attribute name="startupObject" type="xs:string" default="" />
168 <xs:attribute name="rootNamespace" type="xs:string" />
169 <xs:attribute name="debugStartParameters" type="xs:string" />
170 <xs:attribute name="assemblyName" type="xs:string" />
171 <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false" />
172 </xs:complexType>
173 </xs:element>
174
175 <xs:element name="Configuration">
176 <xs:complexType>
177 <xs:sequence>
178 <xs:element ref="Options" minOccurs="0" />
179 </xs:sequence>
180 <xs:attribute name="name" type="xs:string" use="required" />
181 </xs:complexType>
182 </xs:element>
183 <xs:element name="Options">
184 <xs:complexType>
185 <xs:all>
186 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
187 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
188 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
189 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
190 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
191 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
192 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
193 <xs:simpleType>
194 <xs:restriction base="xs:string">
195 <xs:enumeration value="OnBuildSuccess" />
196 <xs:enumeration value="Always" />
197 <xs:enumeration value="OnOutputUpdated" />
198 </xs:restriction>
199 </xs:simpleType>
200 </xs:element>
201 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
202 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
203 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
204 <xs:element name="WarningLevel" minOccurs="0">
205 <xs:simpleType>
206 <xs:restriction base="xs:integer">
207 <xs:minInclusive value="0" />
208 <xs:maxInclusive value="4" />
209 </xs:restriction>
210 </xs:simpleType>
211 </xs:element>
212 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
213 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
214 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
215 <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" />
216 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
217 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
218 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
219 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
220 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
221 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
222 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
223 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
224 <xs:element name="KeyFile" type="xs:string" minOccurs="0" />
225 </xs:all>
226 </xs:complexType>
227 </xs:element>
228
229 <xs:element name="Files">
230 <xs:complexType>
231 <xs:sequence>
232 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
233 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
234 </xs:sequence>
235 </xs:complexType>
236 </xs:element>
237
238 <xs:element name="File">
239 <xs:complexType>
240 <xs:simpleContent>
241 <xs:extension base="xs:string">
242 <xs:attribute name="resourceName" type="xs:string" default="" />
243 <xs:attribute name="buildAction" default="Compile">
244 <xs:simpleType>
245 <xs:restriction base="xs:string">
246 <xs:enumeration value="None" />
247 <xs:enumeration value="Compile" />
248 <xs:enumeration value="Content" />
249 <xs:enumeration value="EmbeddedResource" />
250 </xs:restriction>
251 </xs:simpleType>
252 </xs:attribute>
253 <xs:attribute name="subType" default="Code">
254 <xs:simpleType>
255 <xs:restriction base="xs:string">
256 <xs:enumeration value="Code" />
257 <xs:enumeration value="CodeBehind" />
258 <xs:enumeration value="Component" />
259 <xs:enumeration value="Form" />
260 <xs:enumeration value="Settings" />
261 <xs:enumeration value="UserControl" />
262 </xs:restriction>
263 </xs:simpleType>
264 </xs:attribute>
265 <xs:attribute name="link" type="xs:boolean" />
266 <xs:attribute name="copyToOutput" default="Never">
267 <xs:simpleType>
268 <xs:restriction base="xs:string">
269 <xs:enumeration value="Never" />
270 <xs:enumeration value="Always" />
271 <xs:enumeration value="PreserveNewest" />
272 </xs:restriction>
273 </xs:simpleType>
274 </xs:attribute>
275 <xs:attribute name="preservePath" type="xs:boolean" />
276 <xs:attribute name="linkPath" type="xs:string" />
277 </xs:extension>
278 </xs:simpleContent>
279 </xs:complexType>
280 </xs:element>
281
282 <xs:element name="Match">
283 <xs:complexType>
284 <xs:sequence>
285 <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" />
286 </xs:sequence>
287 <xs:attribute name="path" type="xs:string" />
288 <xs:attribute name="pattern" type="xs:string" use="required" />
289 <xs:attribute name="recurse" type="xs:boolean" default="false" />
290 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
291 <xs:attribute name="buildAction" default="Compile">
292 <xs:simpleType>
293 <xs:restriction base="xs:string">
294 <xs:enumeration value="None" />
295 <xs:enumeration value="Compile" />
296 <xs:enumeration value="Content" />
297 <xs:enumeration value="EmbeddedResource" />
298 </xs:restriction>
299 </xs:simpleType>
300 </xs:attribute>
301 <xs:attribute name="resourceName" type="xs:string" default="" />
302 <xs:attribute name="subType" default="Code">
303 <xs:simpleType>
304 <xs:restriction base="xs:string">
305 <xs:enumeration value="Code" />
306 <xs:enumeration value="CodeBehind" />
307 <xs:enumeration value="Component" />
308 <xs:enumeration value="Designer" />
309 <xs:enumeration value="Form" />
310 <xs:enumeration value="Settings" />
311 <xs:enumeration value="UserControl" />
312 </xs:restriction>
313 </xs:simpleType>
314 </xs:attribute>
315 <xs:attribute name="link" type="xs:boolean" />
316 <xs:attribute name="copyToOutput" default="Never">
317 <xs:simpleType>
318 <xs:restriction base="xs:string">
319 <xs:enumeration value="Never" />
320 <xs:enumeration value="Always" />
321 <xs:enumeration value="PreserveNewest" />
322 </xs:restriction>
323 </xs:simpleType>
324 </xs:attribute>
325 <xs:attribute name="preservePath" type="xs:boolean" />
326 <xs:attribute name="linkPath" type="xs:string" />
327 </xs:complexType>
328 </xs:element>
329
330 <xs:element name="Exclude">
331 <xs:complexType>
332 <xs:attribute name="name" type="xs:string" />
333 <xs:attribute name="pattern" type="xs:string" />
334 </xs:complexType>
335 </xs:element>
336
337 <xs:element name="Cleanup">
338 <xs:complexType>
339 <xs:sequence>
340 <xs:element ref="CleanFiles" minOccurs="1" maxOccurs="unbounded" />
341 </xs:sequence>
342 </xs:complexType>
343 </xs:element>
344
345 <xs:element name="CleanFiles">
346 <xs:complexType>
347 <xs:attribute name="pattern" type="xs:string" />
348 </xs:complexType>
349 </xs:element>
350</xs:schema>
diff --git a/Prebuild/src/data/prebuild-1.8.xsd b/Prebuild/src/data/prebuild-1.8.xsd
new file mode 100644
index 0000000..8f5c1a4
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.8.xsd
@@ -0,0 +1,331 @@
1<?xml version="1.0" encoding="utf-8"?>
2<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dnpb.sourceforge.net/schemas/prebuild-1.8.xsd" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.8.xsd">
3 <xs:annotation>
4 <xs:documentation>
5 Copyright (c) 2004-2007
6 Matthew Holmes (calefaction at houston . rr . com),
7 Dan Moorehead (dan05a at gmail . com),
8 David Hudson (jendave at yahoo dot com),
9 C.J. Adams-Collier (cjac at colliertech dot com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002,
14 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="Prebuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="1" maxOccurs="1" />
44 </xs:sequence>
45 <xs:attribute name="version" />
46 <xs:attribute name="checkOsVars" />
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="Process" type="xs:string" />
51
52 <xs:element name="Solution">
53 <xs:complexType>
54 <xs:sequence>
55 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
56 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
57 <xs:element ref="Options" minOccurs="0" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
60 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
61 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
62 </xs:sequence>
63 <xs:attribute name="name" type="xs:string" use="required" />
64 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
65 <xs:attribute name="path" type="xs:string" default="" />
66 <xs:attribute name="version" type="xs:string" default="1.0.0" />
67 </xs:complexType>
68 </xs:element>
69
70 <xs:element name="EmbeddedSolution">
71 <xs:complexType>
72 <xs:sequence>
73 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
74 <xs:element ref="Files" minOccurs="0" />
75 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
76 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
77 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
78 </xs:sequence>
79 <xs:attribute name="name" type="xs:string" use="required" />
80 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
81 <xs:attribute name="path" type="xs:string" default="" />
82 <xs:attribute name="version" type="xs:string" default="1.0.0" />
83 </xs:complexType>
84 </xs:element>
85
86 <xs:element name="DatabaseProject">
87 <xs:complexType>
88 <xs:sequence>
89 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
90 <xs:element ref="DatabaseReference" minOccurs="0" maxOccurs="unbounded" />
91 </xs:sequence>
92 <xs:attribute name="name" type="xs:string" use="required" />
93 <xs:attribute name="path" type="xs:string" />
94 </xs:complexType>
95 </xs:element>
96
97 <xs:element name="DatabaseReference">
98 <xs:complexType>
99 <xs:attribute name="name" type="xs:string" use="required" />
100 <xs:attribute name="providerId" type="xs:string" />
101 <xs:attribute name="providerName" type="xs:string" />
102 <xs:attribute name="connectionString" type="xs:string" use="required" />
103 </xs:complexType>
104 </xs:element>
105
106 <xs:element name="Project">
107 <xs:complexType>
108 <xs:sequence>
109 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
110 <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
111 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
112 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
113 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
114 <xs:complexType>
115 <xs:attribute name="name" type="xs:string" use="required" />
116 <xs:attribute name="path" type="xs:string" />
117 <xs:attribute name="localCopy" type="xs:boolean" />
118 <xs:attribute name="version" type="xs:string" />
119 </xs:complexType>
120 </xs:element>
121 <xs:element ref="Files" />
122 </xs:sequence>
123 <xs:attribute name="name" type="xs:string" use="required" />
124 <xs:attribute name="designerFolder" type="xs:string" default="" />
125 <xs:attribute name="filterGroups" type="xs:string" default="" />
126 <xs:attribute name="path" type="xs:string" default="" />
127 <xs:attribute name="icon" type="xs:string" default="" />
128 <xs:attribute name="configFile" type="xs:string" default="" />
129 <xs:attribute name="version" type="xs:string" default="1.0.0" />
130 <xs:attribute name="guid" type="xs:string"/>
131 <xs:attribute name="language" default="C#">
132 <xs:simpleType>
133 <xs:restriction base="xs:string">
134 <xs:enumeration value="C#" />
135 <xs:enumeration value="VB.NET" />
136 </xs:restriction>
137 </xs:simpleType>
138 </xs:attribute>
139 <xs:attribute name="type" default="Exe">
140 <xs:simpleType>
141 <xs:restriction base="xs:string">
142 <xs:enumeration value="Exe" />
143 <xs:enumeration value="WinExe" />
144 <xs:enumeration value="Library" />
145 <xs:enumeration value="Web" />
146 </xs:restriction>
147 </xs:simpleType>
148 </xs:attribute>
149 <xs:attribute name="runtime" default="Microsoft">
150 <xs:simpleType>
151 <xs:restriction base="xs:string">
152 <xs:enumeration value="Microsoft" />
153 <xs:enumeration value="Mono" />
154 </xs:restriction>
155 </xs:simpleType>
156 </xs:attribute>
157 <xs:attribute name="frameworkVersion" default="v2_0">
158 <xs:simpleType>
159 <xs:restriction base="xs:string">
160 <xs:enumeration value="v2_0" />
161 <xs:enumeration value="v3_0" />
162 <xs:enumeration value="v3_5" />
163 </xs:restriction>
164 </xs:simpleType>
165 </xs:attribute>
166 <xs:attribute name="startupObject" type="xs:string" default="" />
167 <xs:attribute name="rootNamespace" type="xs:string" />
168 <xs:attribute name="assemblyName" type="xs:string" />
169 <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false" />
170 </xs:complexType>
171 </xs:element>
172
173 <xs:element name="Configuration">
174 <xs:complexType>
175 <xs:sequence>
176 <xs:element ref="Options" minOccurs="0" />
177 </xs:sequence>
178 <xs:attribute name="name" type="xs:string" use="required" />
179 <xs:attribute name="platform" type="xs:string" use="required" />
180 </xs:complexType>
181 </xs:element>
182 <xs:element name="Options">
183 <xs:complexType>
184 <xs:all>
185 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
186 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
187 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
188 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
189 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
190 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
191 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
192 <xs:simpleType>
193 <xs:restriction base="xs:string">
194 <xs:enumeration value="OnBuildSuccess" />
195 <xs:enumeration value="Always" />
196 <xs:enumeration value="OnOutputUpdated" />
197 </xs:restriction>
198 </xs:simpleType>
199 </xs:element>
200 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
201 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
202 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
203 <xs:element name="WarningLevel" minOccurs="0">
204 <xs:simpleType>
205 <xs:restriction base="xs:integer">
206 <xs:minInclusive value="0" />
207 <xs:maxInclusive value="4" />
208 </xs:restriction>
209 </xs:simpleType>
210 </xs:element>
211 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
212 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
213 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
214 <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" />
215 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
216 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
217 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
218 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
219 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
220 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
221 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
222 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
223 <xs:element name="KeyFile" type="xs:string" minOccurs="0" />
224 </xs:all>
225 </xs:complexType>
226 </xs:element>
227 <xs:element name="Files">
228 <xs:complexType>
229 <xs:sequence>
230 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
231 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
232 </xs:sequence>
233 </xs:complexType>
234 </xs:element>
235 <xs:element name="File">
236 <xs:complexType>
237 <xs:simpleContent>
238 <xs:extension base="xs:string">
239 <xs:attribute name="resourceName" type="xs:string" default="" />
240 <xs:attribute name="buildAction" default="Compile">
241 <xs:simpleType>
242 <xs:restriction base="xs:string">
243 <xs:enumeration value="None" />
244 <xs:enumeration value="Compile" />
245 <xs:enumeration value="Content" />
246 <xs:enumeration value="EmbeddedResource" />
247 </xs:restriction>
248 </xs:simpleType>
249 </xs:attribute>
250 <xs:attribute name="subType" default="Code">
251 <xs:simpleType>
252 <xs:restriction base="xs:string">
253 <xs:enumeration value="Code" />
254 <xs:enumeration value="CodeBehind" />
255 <xs:enumeration value="Component" />
256 <xs:enumeration value="Form" />
257 <xs:enumeration value="Settings" />
258 <xs:enumeration value="UserControl" />
259 </xs:restriction>
260 </xs:simpleType>
261 </xs:attribute>
262 <xs:attribute name="link" type="xs:boolean" />
263 <xs:attribute name="copyToOutput" default="Never">
264 <xs:simpleType>
265 <xs:restriction base="xs:string">
266 <xs:enumeration value="Never" />
267 <xs:enumeration value="Always" />
268 <xs:enumeration value="PreserveNewest" />
269 </xs:restriction>
270 </xs:simpleType>
271 </xs:attribute>
272 <xs:attribute name="preservePath" type="xs:boolean" />
273 <xs:attribute name="linkPath" type="xs:string" />
274 </xs:extension>
275 </xs:simpleContent>
276 </xs:complexType>
277 </xs:element>
278 <xs:element name="Match">
279 <xs:complexType>
280 <xs:sequence>
281 <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" />
282 </xs:sequence>
283 <xs:attribute name="path" type="xs:string" />
284 <xs:attribute name="pattern" type="xs:string" use="required" />
285 <xs:attribute name="recurse" type="xs:boolean" default="false" />
286 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
287 <xs:attribute name="buildAction" default="Compile">
288 <xs:simpleType>
289 <xs:restriction base="xs:string">
290 <xs:enumeration value="None" />
291 <xs:enumeration value="Compile" />
292 <xs:enumeration value="Content" />
293 <xs:enumeration value="EmbeddedResource" />
294 </xs:restriction>
295 </xs:simpleType>
296 </xs:attribute>
297 <xs:attribute name="resourceName" type="xs:string" default="" />
298 <xs:attribute name="subType" default="Code">
299 <xs:simpleType>
300 <xs:restriction base="xs:string">
301 <xs:enumeration value="Code" />
302 <xs:enumeration value="CodeBehind" />
303 <xs:enumeration value="Component" />
304 <xs:enumeration value="Designer" />
305 <xs:enumeration value="Form" />
306 <xs:enumeration value="Settings" />
307 <xs:enumeration value="UserControl" />
308 </xs:restriction>
309 </xs:simpleType>
310 </xs:attribute>
311 <xs:attribute name="link" type="xs:boolean" />
312 <xs:attribute name="copyToOutput" default="Never">
313 <xs:simpleType>
314 <xs:restriction base="xs:string">
315 <xs:enumeration value="Never" />
316 <xs:enumeration value="Always" />
317 <xs:enumeration value="PreserveNewest" />
318 </xs:restriction>
319 </xs:simpleType>
320 </xs:attribute>
321 <xs:attribute name="preservePath" type="xs:boolean" />
322 <xs:attribute name="linkPath" type="xs:string" />
323 </xs:complexType>
324 </xs:element>
325 <xs:element name="Exclude">
326 <xs:complexType>
327 <xs:attribute name="name" type="xs:string" />
328 <xs:attribute name="pattern" type="xs:string" />
329 </xs:complexType>
330 </xs:element>
331</xs:schema>
diff --git a/Prebuild/src/data/prebuild-1.9.xsd b/Prebuild/src/data/prebuild-1.9.xsd
new file mode 100644
index 0000000..d647e08
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.9.xsd
@@ -0,0 +1,336 @@
1<?xml version="1.0" encoding="utf-8"?>
2<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dnpb.sourceforge.net/schemas/prebuild-1.9.xsd" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.9.xsd">
3 <xs:annotation>
4 <xs:documentation>
5 Copyright (c) 2004-2007
6 Matthew Holmes (calefaction at houston . rr . com),
7 Dan Moorehead (dan05a at gmail . com),
8 David Hudson (jendave at yahoo dot com),
9 C.J. Adams-Collier (cjac at colliertech dot com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002,
14 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="Prebuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="1" maxOccurs="1" />
44 </xs:sequence>
45 <xs:attribute name="version" />
46 <xs:attribute name="checkOsVars" />
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="Process" type="xs:string" />
51
52 <xs:element name="Solution">
53 <xs:complexType>
54 <xs:sequence>
55 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
56 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
57 <xs:element ref="Options" minOccurs="0" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
60 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
61 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
62 </xs:sequence>
63 <xs:attribute name="name" type="xs:string" use="required" />
64 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
65 <xs:attribute name="path" type="xs:string" default="" />
66 <xs:attribute name="version" type="xs:string" default="1.0.0" />
67 </xs:complexType>
68 </xs:element>
69
70 <xs:element name="EmbeddedSolution">
71 <xs:complexType>
72 <xs:sequence>
73 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
74 <xs:element ref="Files" minOccurs="0" />
75 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
76 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
77 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
78 </xs:sequence>
79 <xs:attribute name="name" type="xs:string" use="required" />
80 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
81 <xs:attribute name="path" type="xs:string" default="" />
82 <xs:attribute name="version" type="xs:string" default="1.0.0" />
83 </xs:complexType>
84 </xs:element>
85
86 <xs:element name="DatabaseProject">
87 <xs:complexType>
88 <xs:sequence>
89 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
90 <xs:element ref="DatabaseReference" minOccurs="0" maxOccurs="unbounded" />
91 </xs:sequence>
92 <xs:attribute name="name" type="xs:string" use="required" />
93 <xs:attribute name="path" type="xs:string" />
94 </xs:complexType>
95 </xs:element>
96
97 <xs:element name="DatabaseReference">
98 <xs:complexType>
99 <xs:attribute name="name" type="xs:string" use="required" />
100 <xs:attribute name="providerId" type="xs:string" />
101 <xs:attribute name="providerName" type="xs:string" />
102 <xs:attribute name="connectionString" type="xs:string" use="required" />
103 </xs:complexType>
104 </xs:element>
105
106 <xs:element name="Project">
107 <xs:complexType>
108 <xs:sequence>
109 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
110 <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
111 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
112 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
113 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
114 <xs:complexType>
115 <xs:attribute name="name" type="xs:string" use="required" />
116 <xs:attribute name="path" type="xs:string" />
117 <xs:attribute name="localCopy" type="xs:boolean" />
118 <xs:attribute name="version" type="xs:string" />
119 </xs:complexType>
120 </xs:element>
121 <xs:element ref="Files" />
122 </xs:sequence>
123 <xs:attribute name="name" type="xs:string" use="required" />
124 <xs:attribute name="designerFolder" type="xs:string" default="" />
125 <xs:attribute name="filterGroups" type="xs:string" default="" />
126 <xs:attribute name="path" type="xs:string" default="" />
127 <xs:attribute name="icon" type="xs:string" default="" />
128 <xs:attribute name="configFile" type="xs:string" default="" />
129 <xs:attribute name="version" type="xs:string" default="1.0.0" />
130 <xs:attribute name="guid" type="xs:string"/>
131 <xs:attribute name="language" default="C#">
132 <xs:simpleType>
133 <xs:restriction base="xs:string">
134 <xs:enumeration value="C#" />
135 <xs:enumeration value="VB.NET" />
136 </xs:restriction>
137 </xs:simpleType>
138 </xs:attribute>
139 <xs:attribute name="type" default="Exe">
140 <xs:simpleType>
141 <xs:restriction base="xs:string">
142 <xs:enumeration value="Exe" />
143 <xs:enumeration value="WinExe" />
144 <xs:enumeration value="Library" />
145 <xs:enumeration value="Web" />
146 </xs:restriction>
147 </xs:simpleType>
148 </xs:attribute>
149 <xs:attribute name="runtime" default="Microsoft">
150 <xs:simpleType>
151 <xs:restriction base="xs:string">
152 <xs:enumeration value="Microsoft" />
153 <xs:enumeration value="Mono" />
154 </xs:restriction>
155 </xs:simpleType>
156 </xs:attribute>
157 <xs:attribute name="frameworkVersion" default="v2_0">
158 <xs:simpleType>
159 <xs:restriction base="xs:string">
160 <xs:enumeration value="v2_0" />
161 <xs:enumeration value="v3_0" />
162 <xs:enumeration value="v3_5" />
163 <xs:enumeration value="v4_0" />
164 </xs:restriction>
165 </xs:simpleType>
166 </xs:attribute>
167 <xs:attribute name="startupObject" type="xs:string" default="" />
168 <xs:attribute name="rootNamespace" type="xs:string" />
169 <xs:attribute name="assemblyName" type="xs:string" />
170 <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false" />
171 </xs:complexType>
172 </xs:element>
173
174 <xs:element name="Configuration">
175 <xs:complexType>
176 <xs:sequence>
177 <xs:element ref="Options" minOccurs="0" />
178 </xs:sequence>
179 <xs:attribute name="name" type="xs:string" use="required" />
180 <xs:attribute name="platform" type="xs:string" use="required" />
181 </xs:complexType>
182 </xs:element>
183 <xs:element name="Options">
184 <xs:complexType>
185 <xs:all>
186 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
187 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
188 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
189 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
190 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
191 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
192 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
193 <xs:simpleType>
194 <xs:restriction base="xs:string">
195 <xs:enumeration value="OnBuildSuccess" />
196 <xs:enumeration value="Always" />
197 <xs:enumeration value="OnOutputUpdated" />
198 </xs:restriction>
199 </xs:simpleType>
200 </xs:element>
201 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
202 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
203 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
204 <xs:element name="WarningLevel" minOccurs="0">
205 <xs:simpleType>
206 <xs:restriction base="xs:integer">
207 <xs:minInclusive value="0" />
208 <xs:maxInclusive value="4" />
209 </xs:restriction>
210 </xs:simpleType>
211 </xs:element>
212 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
213 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
214 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
215 <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" />
216 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
217 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
218 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
219 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
220 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
221 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
222 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
223 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
224 <xs:element name="KeyFile" type="xs:string" minOccurs="0" />
225 </xs:all>
226 </xs:complexType>
227 </xs:element>
228 <xs:element name="Files">
229 <xs:complexType>
230 <xs:sequence>
231 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
232 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
233 </xs:sequence>
234 </xs:complexType>
235 </xs:element>
236 <xs:element name="File">
237 <xs:complexType>
238 <xs:simpleContent>
239 <xs:extension base="xs:string">
240 <xs:attribute name="resourceName" type="xs:string" default="" />
241 <xs:attribute name="buildAction" default="Compile">
242 <xs:simpleType>
243 <xs:restriction base="xs:string">
244 <xs:enumeration value="None" />
245 <xs:enumeration value="Compile" />
246 <xs:enumeration value="Content" />
247 <xs:enumeration value="EmbeddedResource" />
248 <xs:enumeration value="ApplicationDefinition" />
249 <xs:enumeration value="Page" />
250 </xs:restriction>
251 </xs:simpleType>
252 </xs:attribute>
253 <xs:attribute name="subType" default="Code">
254 <xs:simpleType>
255 <xs:restriction base="xs:string">
256 <xs:enumeration value="Code" />
257 <xs:enumeration value="CodeBehind" />
258 <xs:enumeration value="Component" />
259 <xs:enumeration value="Form" />
260 <xs:enumeration value="Settings" />
261 <xs:enumeration value="UserControl" />
262 </xs:restriction>
263 </xs:simpleType>
264 </xs:attribute>
265 <xs:attribute name="link" type="xs:boolean" />
266 <xs:attribute name="copyToOutput" default="Never">
267 <xs:simpleType>
268 <xs:restriction base="xs:string">
269 <xs:enumeration value="Never" />
270 <xs:enumeration value="Always" />
271 <xs:enumeration value="PreserveNewest" />
272 </xs:restriction>
273 </xs:simpleType>
274 </xs:attribute>
275 <xs:attribute name="preservePath" type="xs:boolean" />
276 <xs:attribute name="linkPath" type="xs:string" />
277 </xs:extension>
278 </xs:simpleContent>
279 </xs:complexType>
280 </xs:element>
281 <xs:element name="Match">
282 <xs:complexType>
283 <xs:sequence>
284 <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" />
285 </xs:sequence>
286 <xs:attribute name="path" type="xs:string" />
287 <xs:attribute name="pattern" type="xs:string" use="required" />
288 <xs:attribute name="recurse" type="xs:boolean" default="false" />
289 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
290 <xs:attribute name="buildAction" default="Compile">
291 <xs:simpleType>
292 <xs:restriction base="xs:string">
293 <xs:enumeration value="None" />
294 <xs:enumeration value="Compile" />
295 <xs:enumeration value="Content" />
296 <xs:enumeration value="EmbeddedResource" />
297 <xs:enumeration value="ApplicationDefinition" />
298 <xs:enumeration value="Page" />
299 </xs:restriction>
300 </xs:simpleType>
301 </xs:attribute>
302 <xs:attribute name="resourceName" type="xs:string" default="" />
303 <xs:attribute name="subType" default="Code">
304 <xs:simpleType>
305 <xs:restriction base="xs:string">
306 <xs:enumeration value="Code" />
307 <xs:enumeration value="CodeBehind" />
308 <xs:enumeration value="Component" />
309 <xs:enumeration value="Designer" />
310 <xs:enumeration value="Form" />
311 <xs:enumeration value="Settings" />
312 <xs:enumeration value="UserControl" />
313 </xs:restriction>
314 </xs:simpleType>
315 </xs:attribute>
316 <xs:attribute name="link" type="xs:boolean" />
317 <xs:attribute name="copyToOutput" default="Never">
318 <xs:simpleType>
319 <xs:restriction base="xs:string">
320 <xs:enumeration value="Never" />
321 <xs:enumeration value="Always" />
322 <xs:enumeration value="PreserveNewest" />
323 </xs:restriction>
324 </xs:simpleType>
325 </xs:attribute>
326 <xs:attribute name="preservePath" type="xs:boolean" />
327 <xs:attribute name="linkPath" type="xs:string" />
328 </xs:complexType>
329 </xs:element>
330 <xs:element name="Exclude">
331 <xs:complexType>
332 <xs:attribute name="name" type="xs:string" />
333 <xs:attribute name="pattern" type="xs:string" />
334 </xs:complexType>
335 </xs:element>
336</xs:schema>
diff --git a/Prebuild/tests/Makefile b/Prebuild/tests/Makefile
new file mode 100644
index 0000000..4a8ddf4
--- /dev/null
+++ b/Prebuild/tests/Makefile
@@ -0,0 +1,24 @@
1#
2# Executable
3#
4
5# Executables
6PREBUILD = mono ../src/bin/Release/prebuild.exe /target makefile
7
8# Files
9PREBUILDS = $(wildcard *.prebuild)
10RESULTS = $(PREBUILDS:prebuild=results)
11TESTS = $(PREBUILDS:prebuild=test)
12
13all: $(TESTS)
14
15clean:
16 rm -f *~ *.log
17 rm -f $(RESULTS)
18
19%.test: %.prebuild
20 $(PREBUILD) /log $*.log /file $*.prebuild /ppi $*.results >& /dev/null
21 if ! cmp $*.expected $*.results; then \
22 echo $*.prebuild failed; \
23 false; \
24 fi
diff --git a/Prebuild/tests/README.txt b/Prebuild/tests/README.txt
new file mode 100644
index 0000000..2c2de3b
--- /dev/null
+++ b/Prebuild/tests/README.txt
@@ -0,0 +1,5 @@
1There are some tests that are run via a Makfile in this
2directory. They haven't been included in any form of unit tests, but
3they are there to help test the functionality in some what. Simply
4build prebuild (so there is a src/bin/Release/prebuild.exe) and type
5`make` in this directory. Everything should pass without errors.
diff --git a/Prebuild/tests/include-001.expected b/Prebuild/tests/include-001.expected
new file mode 100644
index 0000000..26374b5
--- /dev/null
+++ b/Prebuild/tests/include-001.expected
@@ -0,0 +1,46 @@
1<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" version="1.7">
2 <Solution name="include-001" version="1.2.3">
3 <Configuration name="Debug">
4 <Options>
5 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
6 <OptimizeCode>false</OptimizeCode>
7 <OutputPath>bin/Debug</OutputPath>
8 <DebugInformation>true</DebugInformation>
9 </Options>
10 </Configuration>
11 <Configuration name="Release">
12 <Options>
13 <CompilerDefines>TRACE</CompilerDefines>
14 <OutputPath>bin/Release</OutputPath>
15 <OptimizeCode>true</OptimizeCode>
16 <DebugInformation>false</DebugInformation>
17 </Options>
18 </Configuration>
19 <Project name="Prebuild" path="src" language="C#" assemblyName="include-001" type="Exe" version="1.2.3" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
20 <Configuration name="Debug">
21 <Options>
22 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
23 <OptimizeCode>false</OptimizeCode>
24 <OutputPath>bin/Debug</OutputPath>
25 <DebugInformation>true</DebugInformation>
26 <KeyFile>Prebuild.snk</KeyFile>
27 <SuppressWarnings>1595</SuppressWarnings>
28 </Options>
29 </Configuration>
30 <Configuration name="Release">
31 <Options>
32 <CompilerDefines>TRACE</CompilerDefines>
33 <OutputPath>bin/Release</OutputPath>
34 <OptimizeCode>true</OptimizeCode>
35 <DebugInformation>false</DebugInformation>
36 <KeyFile>Prebuild.snk</KeyFile>
37 <SuppressWarnings>1595</SuppressWarnings>
38 </Options>
39 </Configuration>
40 <Reference name="System" />
41 <Files>
42 <Match pattern="*.cs" recurse="true" />
43 </Files>
44 </Project>
45 </Solution>
46</Prebuild>
diff --git a/Prebuild/tests/include-001.include b/Prebuild/tests/include-001.include
new file mode 100644
index 0000000..7f75962
--- /dev/null
+++ b/Prebuild/tests/include-001.include
@@ -0,0 +1,33 @@
1<Project name="Prebuild"
2 path="src"
3 language="C#"
4 assemblyName="include-001"
5 type="Exe"
6 version="1.2.3"
7 xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
8 >
9 <Configuration name="Debug">
10 <Options>
11 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
12 <OptimizeCode>false</OptimizeCode>
13 <OutputPath>bin/Debug</OutputPath>
14 <DebugInformation>true</DebugInformation>
15 <KeyFile>Prebuild.snk</KeyFile>
16 <SuppressWarnings>1595</SuppressWarnings>
17 </Options>
18 </Configuration>
19 <Configuration name="Release">
20 <Options>
21 <CompilerDefines>TRACE</CompilerDefines>
22 <OutputPath>bin/Release</OutputPath>
23 <OptimizeCode>true</OptimizeCode>
24 <DebugInformation>false</DebugInformation>
25 <KeyFile>Prebuild.snk</KeyFile>
26 <SuppressWarnings>1595</SuppressWarnings>
27 </Options>
28 </Configuration>
29 <Reference name="System" />
30 <Files>
31 <Match pattern="*.cs" recurse="true"/>
32 </Files>
33</Project>
diff --git a/Prebuild/tests/include-001.prebuild b/Prebuild/tests/include-001.prebuild
new file mode 100644
index 0000000..8047008
--- /dev/null
+++ b/Prebuild/tests/include-001.prebuild
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" version="1.7">
3 <Solution name="include-001" version="1.2.3">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <OutputPath>bin/Debug</OutputPath>
9 <DebugInformation>true</DebugInformation>
10 </Options>
11 </Configuration>
12 <Configuration name="Release">
13 <Options>
14 <CompilerDefines>TRACE</CompilerDefines>
15 <OutputPath>bin/Release</OutputPath>
16 <OptimizeCode>true</OptimizeCode>
17 <DebugInformation>false</DebugInformation>
18 </Options>
19 </Configuration>
20 <?include file="include-001.include"?>
21 </Solution>
22</Prebuild>
diff --git a/Prebuild/tests/include-002-2.include b/Prebuild/tests/include-002-2.include
new file mode 100644
index 0000000..661b7f3
--- /dev/null
+++ b/Prebuild/tests/include-002-2.include
@@ -0,0 +1,8 @@
1<Configuration name="Debug" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
2 <Options>
3 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
4 <OptimizeCode>false</OptimizeCode>
5 <OutputPath>bin/Debug</OutputPath>
6 <DebugInformation>true</DebugInformation>
7 </Options>
8</Configuration>
diff --git a/Prebuild/tests/include-002.expected b/Prebuild/tests/include-002.expected
new file mode 100644
index 0000000..9849658
--- /dev/null
+++ b/Prebuild/tests/include-002.expected
@@ -0,0 +1,26 @@
1<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" version="1.7">
2 <Solution name="include-002" version="1.2.3">
3 <Configuration name="Debug" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
4 <Options>
5 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
6 <OptimizeCode>false</OptimizeCode>
7 <OutputPath>bin/Debug</OutputPath>
8 <DebugInformation>true</DebugInformation>
9 </Options>
10 </Configuration>
11 <Project name="Prebuild" path="src" language="C#" assemblyName="include-001" type="Exe" version="1.2.3" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
12 <Configuration name="Debug" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
13 <Options>
14 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
15 <OptimizeCode>false</OptimizeCode>
16 <OutputPath>bin/Debug</OutputPath>
17 <DebugInformation>true</DebugInformation>
18 </Options>
19 </Configuration>
20 <Reference name="System" />
21 <Files>
22 <Match pattern="*.cs" recurse="true" />
23 </Files>
24 </Project>
25 </Solution>
26</Prebuild>
diff --git a/Prebuild/tests/include-002.include b/Prebuild/tests/include-002.include
new file mode 100644
index 0000000..64f4058
--- /dev/null
+++ b/Prebuild/tests/include-002.include
@@ -0,0 +1,14 @@
1<Project name="Prebuild"
2 path="src"
3 language="C#"
4 assemblyName="include-001"
5 type="Exe"
6 version="1.2.3"
7 xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"
8 >
9 <?include file="include-002-2.include"?>
10 <Reference name="System" />
11 <Files>
12 <Match pattern="*.cs" recurse="true"/>
13 </Files>
14</Project>
diff --git a/Prebuild/tests/include-002.prebuild b/Prebuild/tests/include-002.prebuild
new file mode 100644
index 0000000..9e85f20
--- /dev/null
+++ b/Prebuild/tests/include-002.prebuild
@@ -0,0 +1,7 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" version="1.7">
3 <Solution name="include-002" version="1.2.3">
4 <?include file="include-002-2.include"?>
5 <?include file="include-002.include"?>
6 </Solution>
7</Prebuild>