diff options
Diffstat (limited to '')
61 files changed, 5606 insertions, 1295 deletions
diff --git a/Prebuild/AUTHORS b/Prebuild/AUTHORS new file mode 100644 index 0000000..d794c5e --- /dev/null +++ b/Prebuild/AUTHORS | |||
@@ -0,0 +1,7 @@ | |||
1 | Dave Hudson (jendave@yahoo.com), | ||
2 | Matthew Holmes (matthew@wildfiregames.com) | ||
3 | Dan Moorehead (dan05a@gmail.com) | ||
4 | Rob Loach (http://www.robloach.net) | ||
5 | C.J. Adams-Collier (cjac@colliertech.org) | ||
6 | |||
7 | |||
diff --git a/Prebuild/COPYING b/Prebuild/COPYING new file mode 100644 index 0000000..d3cdf7e --- /dev/null +++ b/Prebuild/COPYING | |||
@@ -0,0 +1,65 @@ | |||
1 | BSD License | ||
2 | Copyright (c)2004-2008 | ||
3 | |||
4 | See AUTHORS file for list of copyright holders | ||
5 | |||
6 | Dave Hudson (jendave@yahoo.com), | ||
7 | Matthew Holmes (matthew@wildfiregames.com) | ||
8 | Dan Moorehead (dan05a@gmail.com) | ||
9 | Rob Loach (http://www.robloach.net) | ||
10 | C.J. Adams-Collier (cjac@colliertech.org) | ||
11 | |||
12 | http://dnpb.sourceforge.net | ||
13 | All rights reserved. | ||
14 | |||
15 | Redistribution and use in source and binary forms, with or without | ||
16 | modification, are permitted provided that the following conditions | ||
17 | are met: | ||
18 | |||
19 | 1. Redistributions of source code must retain the above copyright notice, | ||
20 | this list of conditions and the following disclaimer. | ||
21 | |||
22 | 2. 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 | |||
26 | 3. 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 | |||
45 | Portions 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..89ddbe4 --- /dev/null +++ b/Prebuild/ChangeLog | |||
@@ -0,0 +1,374 @@ | |||
1 | 2008-02-19T07:08 C.J. Adams-Collier <cjac@colliertech.org> | ||
2 | * TODO | ||
3 | - added some tasks from Sam Hocevar | ||
4 | * src/Core/Targets/AutotoolsTarget.cs | ||
5 | - added a missing end paren | ||
6 | * COPYING | ||
7 | - Removed Randy Ridge's name from the copyright. Looks to me like | ||
8 | his name was present only because the file was nabbed from Tao | ||
9 | |||
10 | 2008-02-09T20:29 C.J. Adams-Collier <cjac@colliertech.org> | ||
11 | * COPYING | ||
12 | - added MIT/X11 license due to inclusion of code from Monodevelop | ||
13 | * THANKS | ||
14 | - added Lluis Sanchez Gual and Todd Berman - I yoinked code from | ||
15 | their pkg-config .pc file parser to build AutotoolsTarget.cs. | ||
16 | Sorry it took me so long to remember to add mention of you guys! | ||
17 | * src/Core/Targets/AutotoolsTarget.cs | ||
18 | - added MIT/X11 license. see above. | ||
19 | |||
20 | 2008-02-07T08:27 C.J. Adams-Collier <cjac@colliertech.org> | ||
21 | * AUTHORS | ||
22 | - consolidated names and contact info found laying around the | ||
23 | source | ||
24 | * src/Core/Kernel.cs | ||
25 | - updated copyright date | ||
26 | - re-formatted license for 80-column editor | ||
27 | - updated log banner to indicate new date, new authors | ||
28 | * src/Core/Targets/AutotoolsTarget.cs | ||
29 | - clarified reasoning behind use of constants in | ||
30 | AutotoolsTarget.ParsePCFile | ||
31 | - reduced length of some long lines using newline/indent | ||
32 | - added log messages for parsing .pc files, emitting solutions, | ||
33 | projects | ||
34 | - robustified the inter-package dependency resolution target | ||
35 | - log warning when we can't find assembly for <Reference /> | ||
36 | - clarified code for case of inability to find embedded | ||
37 | autotools.xml | ||
38 | * src/data/autotools.xml | ||
39 | - adding system lookup of resgen2 to configure.ac | ||
40 | - fixed .resource -> .resources typo | ||
41 | - added a rule to create <foo>.response file containing all sources | ||
42 | - using @<foo>.response on $(CSC) command line instead of listing | ||
43 | all source files | ||
44 | * src/Properties/AssemblyInfo.cs | ||
45 | - re-formatted license for an 80-column editor | ||
46 | - added more authors to the AssemblyCopyright attribute | ||
47 | - bumped version to 2.0.3 | ||
48 | * prebuild.xml | ||
49 | - bumped version to 2.0.3 | ||
50 | * scripts/autotools.sh | ||
51 | - if 'mono' is in the path, run Prebuild.exe with it | ||
52 | - using dirname to capture correct path to prebuild.xml &c | ||
53 | |||
54 | 2008-02-06T17:18 C.J. Adams-Collier <cjac@colliertech.org> | ||
55 | * src/Core/Targets/NAntTarget.cs | ||
56 | - re-formatted the license for an 80-column editor | ||
57 | - added myself to the copyright | ||
58 | - added a fix submitted by Gryc Ueusp <gryc.ueusp@gmail.com> | ||
59 | * src/Core/Targets/AutotoolsTarget.cs | ||
60 | - updated copyright to include 2008 | ||
61 | * THANKS | ||
62 | - created file, added Gryc Ueusp <gryc.ueusp@gmail.com> | ||
63 | |||
64 | 2008-01-01T14:50 C.J. Adams-Collier <cjac@colliertech.org> | ||
65 | * src/data/autotools.xml | ||
66 | - fixed .resx -> .resource compilation | ||
67 | - fixed failing edge case where Project is an unsigned Library | ||
68 | - added $(RESOURCE_SRC) to list of extra dist files | ||
69 | * src/Core/Targets/AutotoolsTarget.cs | ||
70 | - removed embeddedResources from extraDistFiles list | ||
71 | |||
72 | 2007-04-18T07:49 C.J. Adams-Collier <cjac@colliertech.org> | ||
73 | * src/data/prebuild-1.7.xsd | ||
74 | - removed default version from references | ||
75 | |||
76 | 2007-04-06T12:42 C.J. Adams-Collier <cjac@colliertech.org> | ||
77 | * src/data/autotools.xml | ||
78 | - added support for /doc: output when XmlDocFile is not empty | ||
79 | - not printing \t \\n on lines that have no content | ||
80 | - gacutil now installs the root assembly instead of the one under | ||
81 | bin/Debug or whatever | ||
82 | |||
83 | 2007-04-04T22:12 C.J. Adams-Collier <cjac@colliertech.org> | ||
84 | * src/Core/Targets/AutotoolsTarget.cs | ||
85 | - removed debugging Console.WriteLine() | ||
86 | * src/data/autotools.xml | ||
87 | - ensuring that install-sh and missing get distributed | ||
88 | - explicitly stating that the sources, snk, resources and binary | ||
89 | references live under $(srcdir) | ||
90 | - corrected uninstall target | ||
91 | - verified distcheck completes successfully | ||
92 | |||
93 | 2007-04-03T21:56 C.J. Adams-Collier <cjac@colliertech.org> | ||
94 | * src/Core/Targets/AutotoolsTarget.cs | ||
95 | - added a using for System.Diagnostics | ||
96 | - added enum ClrVersion for use with the pkg-config parser | ||
97 | - added class SystemPackage for use with the pkg-config parser | ||
98 | - removed explicit "private" property of members since it is implied | ||
99 | - flushing the stream-writer before it's closed | ||
100 | - removed excess braces around an if statement | ||
101 | ! NormalizeAsmName(), AddAssembly(), GetAssembliesWithLibInfo(), | ||
102 | GetAssembliesWithoutLibInfo(), ProcessPiece(), | ||
103 | GetVariableFromPkgConfig(), ParsePCFile(), | ||
104 | RegisterSystemAssemblies(), RunInitialization() | ||
105 | - pulled the above from MonoDevelop to parse the system pkgconfig | ||
106 | files and determine /pkg: arguments. Original sources are here: | ||
107 | http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/SystemAssemblyService.cs | ||
108 | http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/ClrVersion.cs | ||
109 | ! WriteProject() | ||
110 | - now gathering project version from AssemblyInfo.cs if it is part | ||
111 | of the project | ||
112 | - changed the declaration of the ArrayList's in the method | ||
113 | - now copying assembly .config files to the project, distributing, | ||
114 | installing | ||
115 | - making sure all needed files live under the Project directory | ||
116 | - copying strongname keys to project directory | ||
117 | - parsing AssemblyInfo.cs to determine assembly version | ||
118 | - removing all references to ".." | ||
119 | - removed superfluous if(project.References.Count > 0) around | ||
120 | for(int refNum = 0; refNum < project.References.Count; refNum++) | ||
121 | - removed use of runtimeLibs | ||
122 | - adding hook to copy sibling project's generated assemblies to | ||
123 | this project during Make time | ||
124 | - added extra dist target to ensure all files required to build | ||
125 | get distributed during "make dist" | ||
126 | - added new xslt processing args: | ||
127 | -- assemblyName | ||
128 | -- extraDistFiles | ||
129 | -- pkgLibs (/pkg:foo) | ||
130 | -- localCopyTargets (to copy sibling assemblies at Make time) | ||
131 | -- projectVersion (if determined from AssemblyInfo.cs) | ||
132 | -- hasAssemblyConfig (if there's a assembly.exe.config present) | ||
133 | ! Write() | ||
134 | - calling RunInitialization() to gather pkg-config data | ||
135 | * src/data/autotools.xml | ||
136 | - accepting new args passed from AutotoolsTarget.cs | ||
137 | - modernized configure.ac a bit | ||
138 | - using a version of tar that allows >99-char filenames | ||
139 | - added ASSEMBLY_NAME variable | ||
140 | - using assembly name rather than project name for gac installation | ||
141 | - generated assembly is now assembly name and not project name | ||
142 | - accepting /pkg: flags gathered from AutotoolsTarget.cs | ||
143 | - adding Makefile targets to copy sibling project assemblies to . | ||
144 | - fixed Debug, Release targets | ||
145 | - adding support for strongname key signing | ||
146 | - adding /unsafe support | ||
147 | - adding a clean make target | ||
148 | - only running gacutil /u if the assembly being uninstalled is in gac | ||
149 | - added some templates to determine each Configuration's .snk | ||
150 | - added explanation as to why .exe assemblies live in $prefix/lib | ||
151 | * src/Properties/AssemblyInfo.cs | ||
152 | - bumped assembly version | ||
153 | * prebuild.xml | ||
154 | - bumped assembly version | ||
155 | |||
156 | 2007-03-29T18:03 C.J. Adams-Collier <cjac@colliertech.org> | ||
157 | * src/Core/Targets/AutotoolsTarget.cs | ||
158 | ! WriteProject() | ||
159 | - re-named incorrectly-named variable gacLibs to systemLibs | ||
160 | - added another reference list, runtimeLibs which contains the | ||
161 | libs we will need at runtime. we use this to build a MONO_PATH | ||
162 | - added monoPath to the xslt args list | ||
163 | * src/data/autotools.xml | ||
164 | ! <ProjectMakefileAm /> | ||
165 | - renamed gacLibs to systemLibs | ||
166 | - added the sources to the dist list | ||
167 | - added logic to install libs that aren't strongnamed | ||
168 | ! <ProjectWrapperScriptIn /> | ||
169 | - accepting a param to update the MONO_PATH | ||
170 | |||
171 | 2007-03-28T19:46 C.J. Adams-Collier <cjac@colliertech.org> | ||
172 | * src/Core/Targets/MonoDevelopTarget.cs | ||
173 | ! CleanProject() | ||
174 | - using Assembly.LoadWithPartialName to locate the assembly | ||
175 | * src/Core/Targets/AutotoolsTarget.cs | ||
176 | ! WriteCombine() | ||
177 | - no longer using $PWD to determine a project's source dir; this | ||
178 | doesn't work with <Process /> elements | ||
179 | - passing the solution name to all templates - fixes | ||
180 | multi-solution prebuild systems | ||
181 | ! WriteProject() | ||
182 | - no longer using $PWD to determine a project's source dir; this | ||
183 | doesn't work with <Process /> elements | ||
184 | - passing the solution name to all templates - fixes | ||
185 | multi-solution prebuild systems | ||
186 | - copying strongname key to the autotools directory | ||
187 | - using Assembly.LoadWithPartialName to locate assemblies | ||
188 | * src/data/autotools.xml | ||
189 | ! <ProjectConfigureAc /> | ||
190 | - fixed the .pc AC_CONFIG_FILES macro | ||
191 | ! <ProjectMakefileAm /> | ||
192 | - added solution name param | ||
193 | - wrapping if type=exe check around script install macro | ||
194 | - added type=lib check and .pc file install macro | ||
195 | - added support for Configuration-specific builds (Debug, Release, etc) | ||
196 | - added strongname keyfile code | ||
197 | - TODO: support non-strongnamed library installation | ||
198 | ! <ProjectWrapperScriptIn /> | ||
199 | - added space preservation attribute to stylesheet element | ||
200 | - added a lower-case project name variable | ||
201 | - added solution name param | ||
202 | - made for-each template more specific | ||
203 | ! <SolutionAutogenSh /> | ||
204 | - added solution name param | ||
205 | ! <SolutionConfigureAc /> | ||
206 | - added solution name param | ||
207 | ! <SolutionMakefileAm /> | ||
208 | - added solution name param | ||
209 | ! <ProjectPcIn /> | ||
210 | - added solution name param | ||
211 | |||
212 | 2007-03-27T09:33 C.J. Adams-Collier <cjac@colliertech.org> | ||
213 | * src/Core/Targets/AutotoolsTarget.cs | ||
214 | - now processing the wrapper script if type is "Exe" or "WinExe" | ||
215 | * src/data/autotools.xml | ||
216 | ! <ProjectConfigureAc /> | ||
217 | - being more exact about where text escaping is used | ||
218 | - using the correct variable name for the GACUTIL_FLAGS template | ||
219 | - using correct test="" for the AC_CONFIG_FILES macros | ||
220 | ! <ProjectMakefileAm /> | ||
221 | - uncommented the bin_SCRIPTS section now that the script is being | ||
222 | generated correctly | ||
223 | ! <ProjectWrapperScriptIn /> | ||
224 | - fixed whitespace at beginning of file, before #! | ||
225 | - using lower-case packageName to indicate installation location | ||
226 | |||
227 | 2007-03-27T09:33 C.J. Adams-Collier <cjac@colliertech.org> | ||
228 | * src/data/autotools.xml | ||
229 | ! <ProjectConfigureAc /> | ||
230 | * added a lcProjectName which is $projectName lower-cased | ||
231 | * moved autoconf template specifier near AC_OUTPUT | ||
232 | * AC_OUTPUT with args is deprecated. now using AC_CONFIG_FILES | ||
233 | * placed AC_CONFIG_FILES() calls for wrapper script or pkg-config | ||
234 | file in xslt project type checks | ||
235 | ! <ProjectMakefileAm /> | ||
236 | * commented out bin_SCRIPTS | ||
237 | * added a lcProjectName which is $projectName lower-cased | ||
238 | * using $lcProjectName instead of the longer version | ||
239 | |||
240 | 2007-03-27T08:39 C.J. Adams-Collier <cjac@colliertech.org> | ||
241 | * src/data/autotools.xml | ||
242 | ! <ProjectMakefileAm /> | ||
243 | - added whitespace-preservation | ||
244 | - added the missing projectName param | ||
245 | - replaced bin_SCRIPTS with something that worked | ||
246 | |||
247 | 2007-03-27T07:56 C.J. Adams-Collier <cjac@colliertech.org> | ||
248 | * src/data/autotools.xml | ||
249 | ! <ProjectConfigureAc /> | ||
250 | - cleaned up duplicate checks | ||
251 | - placed initialization macros above system check macros | ||
252 | - added some more messages about what's going on | ||
253 | - added GACUTIL_FLAGS variable including /package option | ||
254 | ! <ProjectMakefileAm /> | ||
255 | - added an incomplete bin_SCRIPTS | ||
256 | - RCS check says "building" instead of "compiling" | ||
257 | ! <SolutionConfigureAc /> | ||
258 | - removed macros that are useful only for projects | ||
259 | ! <ProjectWrapperScriptIn /> | ||
260 | - created this element on this revision | ||
261 | - this is a wrapper shell script that lives in the $PATH and runs | ||
262 | the CIL assembly | ||
263 | |||
264 | 2007-03-26T20:18 C.J. Adams-Collier <cjac@colliertech.org> | ||
265 | * src/Core/Targets/AutotoolsTarget.cs | ||
266 | - creating new template arguments to contain the list of libs to | ||
267 | reference: source, binary & GAC | ||
268 | - source libs are included as part of this solution (untested) | ||
269 | - binary libs are distributed with the source (untested) | ||
270 | - GAC libs are assumed to be in the GAC or other lib path (tested) | ||
271 | * src/data/autotools.xml | ||
272 | - created new params through which to accept reference info | ||
273 | - created a working $(CSC) line | ||
274 | - added a TODO item for ordering project dependency for | ||
275 | AC_CONFIG_SUBDIRS code | ||
276 | |||
277 | 2007-03-26T08:41 C.J. Adams-Collier <cjac@colliertech.org> | ||
278 | * src/Core/Targets/AutotoolsTarget.cs | ||
279 | - now creating list of source files in managed code and passing | ||
280 | them to the template via <xsl:param>s | ||
281 | * src/data/prebuild-1.7.xsd | ||
282 | - updated the header comment to 2007 | ||
283 | * src/data/autotools.xml | ||
284 | ! <ProjectConfigureAc> | ||
285 | - copied checks from Solution-level configure.ac | ||
286 | - copied solution-level config status | ||
287 | ! <ProjectMakefileAm> | ||
288 | - added <xsl:param> elements for file list to be passed through | ||
289 | - made a temporary target for the assembly we're building | ||
290 | - added this target to the deps of "all:" | ||
291 | ! <SolutionConfigureAc> | ||
292 | - changed status header/footer from "- - -" to "===" | ||
293 | |||
294 | 2007-03-23T08:33 C.J. Adams-Collier <cjac@colliertech.org> | ||
295 | Added version attribute handling code for Property element | ||
296 | Added description element handling code | ||
297 | * prebuild.xml | ||
298 | - added /Prebuild/Solution/Property/@version attribute | ||
299 | - added /Prebuild/Solution/Property/Description element | ||
300 | * src/Core/Nodes/ProjectNode.cs | ||
301 | - added some docs where they were missing and obvious | ||
302 | - added code to handle @version | ||
303 | * src/Core/Nodes/DescriptionNode.cs | ||
304 | - new file. Used to handle /Prebuild/Solution/Property/Description | ||
305 | * src/Core/Targets/AutotoolsTarget.cs | ||
306 | - added mkdirDashP(), a recursive directory creation method | ||
307 | - WriteProject() now copies the files to autotools/ | ||
308 | * src/data/prebuild-1.7.xsd | ||
309 | - added /Prebuild/Solution/Property/Description element | ||
310 | - added /Prebuild/Solution/Property/@version attribute | ||
311 | * src/data/autotools.xml | ||
312 | - removed excess <xsl:value-of select="$projectName"/> | ||
313 | - explicitly using dnpb: prefix | ||
314 | |||
315 | 2007-03-23T04:31 C.J. Adams-Collier <cjac@colliertech.org> | ||
316 | Merged code from my stripped-down test | ||
317 | Adding support for the /Prebuild/Solution/Project/Author element | ||
318 | * prebuild.xml | ||
319 | - added Author elements | ||
320 | - cleaned up the really long Project element | ||
321 | * src/Core/Nodes/ProjectNode.cs | ||
322 | - added Author tag processing code | ||
323 | * src/Core/Nodes/AuthorNode.cs | ||
324 | - Created to process Author elements | ||
325 | - based off of ReferencePathNode.cs | ||
326 | * src/Core/Targets/AutotoolsTarget.cs | ||
327 | - merged code from https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/test.cs | ||
328 | - renamed old WriteCombine to WriteCombineOld | ||
329 | - renamed old WriteProject to WriteProjectOld | ||
330 | * src/data/prebuild-1.7.xsd | ||
331 | - added Author element to Project | ||
332 | * src/data/autotools.xml | ||
333 | - lower-cased utf | ||
334 | |||
335 | |||
336 | 2007-03-22T13:58 C.J. Adams-Collier <cjac@colliertech.org> | ||
337 | Exposing an XmlDocument that represents the prebuild.xml file | ||
338 | passed to the program | ||
339 | |||
340 | * src/Core/Kernel.cs | ||
341 | - created an object member called XmlDocument m_CurrentDoc | ||
342 | - created a property to access its value | ||
343 | - using m_CurrentDoc to load up the prebuild.xml file rather than | ||
344 | a local variable called "doc" | ||
345 | |||
346 | 2007-03-22 C.J. Adams-Collier <cjac@colliertech.org> | ||
347 | * prebuild.xml | ||
348 | - added autotools.xml created at https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/autotools.xml | ||
349 | * src/data/autotools.xml | ||
350 | - the same | ||
351 | * src/Core/Targets/MonoDevelopTarget.cs | ||
352 | - fixed bug introduced in r206 | ||
353 | |||
354 | 2007-03-07 C.J. Adams-Collier <cjcollier@colliertech.org> | ||
355 | * src/data/prebuild-1.7.xsd | ||
356 | - added version attribute to Solution and Project elements | ||
357 | |||
358 | 2006-11-04T00:38 C.J. Adams-Collier <cjcollier@colliertech.org> | ||
359 | * placing AssemblyInfo.cs into Properties/ | ||
360 | * Fixed double-mention of the package name | ||
361 | |||
362 | 2006-11-03T15:23 C.J. Adams-Collier <cjcollier@colliertech.org> | ||
363 | * corrected a problem in the Include.am generation code | ||
364 | * created the new .exe | ||
365 | * copied it to the root of the build | ||
366 | |||
367 | 2006-11-03T14:57 C.J. Adams-Collier <cjcollier@colliertech.org> | ||
368 | * Updated the .exe file | ||
369 | |||
370 | 2006-11-03 C.J. Adams-Collier <cjcollier@colliertech.org> | ||
371 | * Added a TODO file | ||
372 | * Added a ChangeLog file | ||
373 | * applied some fixes for autotools gac and pkg-config installation | ||
374 | 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 @@ | |||
1 | Installation Instructions | ||
2 | ************************* | ||
3 | |||
4 | Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free | ||
5 | Software Foundation, Inc. | ||
6 | |||
7 | This file is free documentation; the Free Software Foundation gives | ||
8 | unlimited permission to copy, distribute and modify it. | ||
9 | |||
10 | Basic Installation | ||
11 | ================== | ||
12 | |||
13 | These are generic installation instructions. | ||
14 | |||
15 | The `configure' shell script attempts to guess correct values for | ||
16 | various system-dependent variables used during compilation. It uses | ||
17 | those values to create a `Makefile' in each directory of the package. | ||
18 | It may also create one or more `.h' files containing system-dependent | ||
19 | definitions. Finally, it creates a shell script `config.status' that | ||
20 | you can run in the future to recreate the current configuration, and a | ||
21 | file `config.log' containing compiler output (useful mainly for | ||
22 | debugging `configure'). | ||
23 | |||
24 | It can also use an optional file (typically called `config.cache' | ||
25 | and enabled with `--cache-file=config.cache' or simply `-C') that saves | ||
26 | the results of its tests to speed up reconfiguring. (Caching is | ||
27 | disabled by default to prevent problems with accidental use of stale | ||
28 | cache files.) | ||
29 | |||
30 | If you need to do unusual things to compile the package, please try | ||
31 | to figure out how `configure' could check whether to do them, and mail | ||
32 | diffs or instructions to the address given in the `README' so they can | ||
33 | be considered for the next release. If you are using the cache, and at | ||
34 | some point `config.cache' contains results you don't want to keep, you | ||
35 | may 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 | ||
40 | a newer version of `autoconf'. | ||
41 | |||
42 | The 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 | |||
70 | Compilers and Options | ||
71 | ===================== | ||
72 | |||
73 | Some systems require unusual options for compilation or linking that the | ||
74 | `configure' script does not know about. Run `./configure --help' for | ||
75 | details on some of the pertinent environment variables. | ||
76 | |||
77 | You can give `configure' initial values for configuration parameters | ||
78 | by setting variables in the command line or in the environment. Here | ||
79 | is an example: | ||
80 | |||
81 | ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix | ||
82 | |||
83 | *Note Defining Variables::, for more details. | ||
84 | |||
85 | Compiling For Multiple Architectures | ||
86 | ==================================== | ||
87 | |||
88 | You can compile the package for more than one kind of computer at the | ||
89 | same time, by placing the object files for each architecture in their | ||
90 | own directory. To do this, you must use a version of `make' that | ||
91 | supports the `VPATH' variable, such as GNU `make'. `cd' to the | ||
92 | directory where you want the object files and executables to go and run | ||
93 | the `configure' script. `configure' automatically checks for the | ||
94 | source 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' | ||
97 | variable, you have to compile the package for one architecture at a | ||
98 | time in the source code directory. After you have installed the | ||
99 | package for one architecture, use `make distclean' before reconfiguring | ||
100 | for another architecture. | ||
101 | |||
102 | Installation Names | ||
103 | ================== | ||
104 | |||
105 | By default, `make install' installs the package's commands under | ||
106 | `/usr/local/bin', include files under `/usr/local/include', etc. You | ||
107 | can 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 | ||
111 | architecture-specific files and architecture-independent files. If you | ||
112 | pass the option `--exec-prefix=PREFIX' to `configure', the package uses | ||
113 | PREFIX as the prefix for installing programs and libraries. | ||
114 | Documentation and other data files still use the regular prefix. | ||
115 | |||
116 | In addition, if you use an unusual directory layout you can give | ||
117 | options like `--bindir=DIR' to specify different values for particular | ||
118 | kinds of files. Run `configure --help' for a list of the directories | ||
119 | you can set and what kinds of files go in them. | ||
120 | |||
121 | If the package supports it, you can cause programs to be installed | ||
122 | with an extra prefix or suffix on their names by giving `configure' the | ||
123 | option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. | ||
124 | |||
125 | Optional Features | ||
126 | ================= | ||
127 | |||
128 | Some packages pay attention to `--enable-FEATURE' options to | ||
129 | `configure', where FEATURE indicates an optional part of the package. | ||
130 | They may also pay attention to `--with-PACKAGE' options, where PACKAGE | ||
131 | is something like `gnu-as' or `x' (for the X Window System). The | ||
132 | `README' should mention any `--enable-' and `--with-' options that the | ||
133 | package recognizes. | ||
134 | |||
135 | For packages that use the X Window System, `configure' can usually | ||
136 | find the X include and library files automatically, but if it doesn't, | ||
137 | you can use the `configure' options `--x-includes=DIR' and | ||
138 | `--x-libraries=DIR' to specify their locations. | ||
139 | |||
140 | Specifying the System Type | ||
141 | ========================== | ||
142 | |||
143 | There may be some features `configure' cannot figure out automatically, | ||
144 | but needs to determine by the type of machine the package will run on. | ||
145 | Usually, assuming the package is built to be run on the _same_ | ||
146 | architectures, `configure' can figure that out, but if it prints a | ||
147 | message saying it cannot guess the machine type, give it the | ||
148 | `--build=TYPE' option. TYPE can either be a short name for the system | ||
149 | type, such as `sun4', or a canonical name which has the form: | ||
150 | |||
151 | CPU-COMPANY-SYSTEM | ||
152 | |||
153 | where 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 | ||
159 | need to know the machine type. | ||
160 | |||
161 | If you are _building_ compiler tools for cross-compiling, you should | ||
162 | use the option `--target=TYPE' to select the type of system they will | ||
163 | produce code for. | ||
164 | |||
165 | If you want to _use_ a cross compiler, that generates code for a | ||
166 | platform different from the build platform, you should specify the | ||
167 | "host" platform (i.e., that on which the generated programs will | ||
168 | eventually be run) with `--host=TYPE'. | ||
169 | |||
170 | Sharing Defaults | ||
171 | ================ | ||
172 | |||
173 | If you want to set default values for `configure' scripts to share, you | ||
174 | can create a site shell script called `config.site' that gives default | ||
175 | values 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. | ||
179 | A warning: not all `configure' scripts look for a site script. | ||
180 | |||
181 | Defining Variables | ||
182 | ================== | ||
183 | |||
184 | Variables not defined in a site shell script can be set in the | ||
185 | environment passed to `configure'. However, some packages may run | ||
186 | configure again during the build, and the customized values of these | ||
187 | variables may be lost. In order to avoid this problem, you should set | ||
188 | them in the `configure' command line, using `VAR=value'. For example: | ||
189 | |||
190 | ./configure CC=/usr/local2/bin/gcc | ||
191 | |||
192 | causes the specified `gcc' to be used as the C compiler (unless it is | ||
193 | overridden in the site shell script). Here is a another example: | ||
194 | |||
195 | /bin/bash ./configure CONFIG_SHELL=/bin/bash | ||
196 | |||
197 | Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent | ||
198 | configuration-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 @@ | |||
1 | Prebuild 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 | |||
3 | Documentation and downloads are available at http://dnpb.sourceforge.net. | ||
4 | |||
5 | Prebuild 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 index 4341e42..e8a2d69 100644 --- a/Prebuild/README +++ b/Prebuild/README | |||
@@ -2,14 +2,16 @@ Prebuild Instructions | |||
2 | 2 | ||
3 | Prebuild 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. | 3 | Prebuild 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 | 4 | ||
5 | _________________________________________________________________________________ | 5 | _______________________________________________________________________________ |
6 | Overview | 6 | Overview |
7 | 7 | ||
8 | Prebuild can be either be run from the command line to generate the project and make files or you can execute the included batch (*.bat) and Unix Shell script (*.sh) files. | 8 | Prebuild can be either be run from the command line to generate the |
9 | The Prebuild file | 9 | project and make files or you can execute the included batch (*.bat) |
10 | and Unix Shell script (*.sh) files. | ||
10 | 11 | ||
11 | _________________________________________________________________________________ | 12 | _______________________________________________________________________________ |
12 | The currently supported developement tools and their associated batch and shell script files. | 13 | The currently supported developement tools and their associated batch |
14 | and shell script files. | ||
13 | 15 | ||
14 | Visual Studio .NET 2005 (VS2005.bat) | 16 | Visual Studio .NET 2005 (VS2005.bat) |
15 | Visual Studio .NET 2003 (VS2003.bat) | 17 | Visual Studio .NET 2003 (VS2003.bat) |
@@ -18,70 +20,102 @@ SharpDevelop (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/ | |||
18 | SharpDevelop2 (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/ | 20 | SharpDevelop2 (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/ |
19 | MonoDevelop (MonoDevelop.sh) - http://www.monodevelop.com/ | 21 | MonoDevelop (MonoDevelop.sh) - http://www.monodevelop.com/ |
20 | NAnt (nant.sh and nant.bat) - http://nant.sourceforge.net/ | 22 | NAnt (nant.sh and nant.bat) - http://nant.sourceforge.net/ |
21 | Autotools (autotools.bat and autotools.sh) http://www.gnu.org. Only partial support | 23 | Autotools (autotools.bat and autotools.sh) - http://en.wikipedia.org/wiki/GNU_build_system |
22 | 24 | ||
23 | Notes: | 25 | Notes: |
24 | A Unix Shell script is provided for MonoDevelop, as this is more appropriate than a windows batch file. | 26 | |
25 | Visual Studio .NET 2005 and the Visual Express IDE's can import solutions from older versions of Visual Studio .NET. | 27 | A Unix Shell script is provided for MonoDevelop, as it does not run on |
28 | Windows at this time. | ||
29 | |||
30 | Visual Studio .NET 2005 and the Visual Express IDE's can import | ||
31 | solutions from older versions of Visual Studio .NET. | ||
32 | |||
26 | Makefiles are not currently supported. | 33 | Makefiles are not currently supported. |
27 | 34 | ||
28 | _________________________________________________________________________________ | 35 | _______________________________________________________________________________ |
29 | Command Line Syntax: | 36 | Command Line Syntax: |
30 | 37 | ||
31 | Example: | 38 | Example: |
32 | >Prebuild /target vs2003 | 39 | > Prebuild /target vs2003 |
33 | 40 | ||
34 | This will generate the project files for Visual Studio.NET 2003 and place the redirect the log to a file named PrebuildLog.txt in the parent directory | 41 | This will generate the project files for Visual Studio.NET 2003 and |
42 | place the redirect the log to a file named PrebuildLog.txt in the | ||
43 | parent directory | ||
35 | 44 | ||
36 | 45 | ||
37 | The syntax structure is as below, where commandParameter is optional depending on the command and you can provide several option-value pairs. | 46 | The syntax structure is as below, where commandParameter is optional |
38 | Note: The '>' signified the command line, do not actually enter this manually | 47 | depending on the command and you can provide several option-value |
48 | pairs. | ||
39 | 49 | ||
40 | >Prebuild /<option> <commandParameter> | 50 | Note: The '> ' signifies the command prompt, do not enter this literally |
41 | 51 | ||
42 | >Prebuild /target vs2003 /pause | 52 | > Prebuild /<option> <commandParameter> |
43 | 53 | ||
44 | >Prebuild /target vs2003 /log ../Log.txt /pause /ppo /file ProjectConfig.xml | 54 | > Prebuild /target vs2003 /pause |
45 | 55 | ||
46 | >Prebuild /target sharpdev /log | 56 | > Prebuild /target vs2003 /log ../Log.txt /pause /ppo /file ProjectConfig.xml |
47 | 57 | ||
48 | >Prebuild /removedir obj|bin | 58 | > Prebuild /target sharpdev /log |
49 | 59 | ||
50 | >Prebuild /target vs2003 /allowedgroups Group1|Group2 | 60 | > Prebuild /removedir obj|bin |
51 | 61 | ||
52 | >Prebuild /clean | 62 | > Prebuild /target vs2003 /allowedgroups Group1|Group2 |
53 | 63 | ||
54 | >Prebuild /clean /yes | 64 | > Prebuild /clean |
55 | 65 | ||
56 | >Prebuild /clean vs2003 | 66 | > Prebuild /clean /yes |
57 | 67 | ||
58 | _________________________________________________________________________________ | 68 | > Prebuild /clean vs2003 |
69 | |||
70 | _______________________________________________________________________________ | ||
59 | Command Line Options: | 71 | Command Line Options: |
60 | 72 | ||
61 | /usage - Shows the help information on how to use Prebuild and what the different options are and what they do | 73 | /usage - Shows the help information on how to use Prebuild and what |
74 | the different options are and what they do | ||
75 | |||
76 | /clean - The project files generated for the target type specified as | ||
77 | a parameter for this option will be deleted. If no value is specified | ||
78 | or if 'all' is specified, then project files for all the target types | ||
79 | will be deleted. | ||
62 | 80 | ||
63 | /clean - The project files generated for the target type specified as a parameter for this option will be deleted. If no value is specified or if 'all' is specified, then project files for all the target types will be deleted. | 81 | /target - Specified the name of the development tool for which project |
82 | or make files will be generated. Possible parameter values include: | ||
83 | vs2003, vs2002, sharpdev | ||
64 | 84 | ||
65 | /target - Specified the name of the development tool for which project or make files will be generated. Possible parameter values include: vs2003, vs2002, sharpdev | 85 | /file - Specifies the name of the XML which defines what files are to |
86 | be referenced by the generated project files as well as configures the | ||
87 | options for them. If not specified, prebuild.xml in the current | ||
88 | directory will be used as the default. | ||
66 | 89 | ||
67 | /file - Specifies the name of the XML which defines what files are to be referenced by the generated project files as well as configures the options for them. If not specified, prebuild.xml will be used as the default. | 90 | /log - Specified the log file that should be written to for build |
91 | errors. If this option is not specified, no log file is generated, | ||
92 | but if just no value is specified, then the defaul filename will be | ||
93 | used for the log (Prebuild.log). | ||
68 | 94 | ||
69 | /log - Specified the log file that should be written to for build errors. If this option is not specified, no log file is generated, but if just no value is specified, then the defaul filename will be used for the log (Prebuild.log). | 95 | /ppo - Preprocesses the xml file to test for syntax errors or problems |
96 | but doesn't generate the files | ||
70 | 97 | ||
71 | /ppo - Preprocesses the xml file to test for syntax errors or problems but doesn't generate the files | 98 | /pause - Shows the console until you press a key so that you can view |
99 | the messages written while performing the specified actions. | ||
72 | 100 | ||
73 | /pause - Shows the console until you press a key so that you can view the messages written while performing the specified actions. | 101 | This allows you to check if an errors occurred and - if so - what it |
74 | This allows you to check if an errors occurred and - if so - what it was. | 102 | was. |
75 | 103 | ||
76 | /showtargets - Shows a list of all the targets that can be specified as values for the /clean and /target commands. | 104 | /showtargets - Shows a list of all the targets that can be specified |
105 | as values for the /clean and /target commands. | ||
77 | 106 | ||
78 | /allowedgroups - This is 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 | 107 | /allowedgroups - This is followed by a pipe-delimited list of project |
108 | group filter flags (eg. Group1|Group2) allow optional filtering of all | ||
109 | projects that dont have at least one of these flags | ||
79 | 110 | ||
80 | /removedir - This is followed by a pipe-delimited list of directory names that will be deleted while recursivly searching the directory of the prebuild application and its child directories (eg. use obj|bin to delete all output and temporary directories before file releases) | 111 | /removedir - This is followed by a pipe-delimited list of directory |
112 | names that will be deleted while recursivly searching the directory of | ||
113 | the prebuild application and its child directories (eg. use obj|bin to | ||
114 | delete all output and temporary directories before file releases) | ||
81 | 115 | ||
82 | /yes - Answer yes to any warnings (e.g. when cleaning all projects). | 116 | /yes - Answer yes to any warnings (e.g. when cleaning all projects). |
83 | 117 | ||
84 | _________________________________________________________________________________ | 118 | _______________________________________________________________________________ |
85 | Example Batch Files and Shell Scripts | 119 | Example Batch Files and Shell Scripts |
86 | 120 | ||
87 | NOTE: Common batch and shell script files are included with Prebuild source and file releases. | 121 | NOTE: Common batch and shell script files are included with Prebuild source and file releases. |
@@ -89,9 +123,12 @@ ______________________________ | |||
89 | MonoDevelop | 123 | MonoDevelop |
90 | 124 | ||
91 | #!/bin/sh | 125 | #!/bin/sh |
92 | # Generates a combine (.cmbx) and a set of project files (.prjx) | 126 | # Generates a solution (.mds) and a set of project files (.mdp) |
93 | # for MonoDevelop, a Mono port of SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx) | 127 | |
94 | ./Prebuild /target sharpdev /pause | 128 | # for MonoDevelop, a Mono port of SharpDevelop |
129 | # (http://icsharpcode.net/OpenSource/SD/Default.aspx) | ||
130 | |||
131 | ./Prebuild /target monodev /pause | ||
95 | 132 | ||
96 | ______________________________ | 133 | ______________________________ |
97 | Visual Studio .NET 2003 | 134 | Visual Studio .NET 2003 |
@@ -104,13 +141,20 @@ Notes: | |||
104 | Text after lines that start with @rem are comments and are not evaluated | 141 | Text after lines that start with @rem are comments and are not evaluated |
105 | You can also place pause on the last line instead of specifing the /pause command. | 142 | You can also place pause on the last line instead of specifing the /pause command. |
106 | 143 | ||
107 | ________________________________________________________________________________ | 144 | _______________________________________________________________________________ |
108 | Example XML Configuration File | 145 | Example XML Configuration File |
109 | 146 | ||
110 | Note: | 147 | Note: |
111 | XML Comments (<!-- Comment -->) are used to markup the prebuild.xml file with notes | 148 | |
112 | The below file may be out-of-date, however the RealmForge Prebuild file serves as an up-to-date and extensive example. | 149 | XML Comments (<!-- Comment -->) are used to markup the prebuild.xml |
113 | It can be viewed using Tigris.org's WebSVN (http://realmforge.tigris.org/source/browse/realmforge/trunk/src/prebuild.xml) by just clicking on the "view file" link for the latest revision. | 150 | file with notes |
151 | |||
152 | The below file may be out-of-date, however the RealmForge Prebuild | ||
153 | file serves as an up-to-date and extensive example. | ||
154 | |||
155 | It can be viewed using Tigris.org's WebSVN | ||
156 | (http://realmforge.tigris.org/source/browse/realmforge/trunk/src/prebuild.xml) | ||
157 | by just clicking on the "view file" link for the latest revision. | ||
114 | 158 | ||
115 | _________________________________ | 159 | _________________________________ |
116 | 160 | ||
diff --git a/Prebuild/THANKS b/Prebuild/THANKS new file mode 100644 index 0000000..576467c --- /dev/null +++ b/Prebuild/THANKS | |||
@@ -0,0 +1,18 @@ | |||
1 | Gryc 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 | |||
6 | Todd Berman <tberman@sevenl.net> | ||
7 | Lluis 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 | |||
13 | src/core/MonoDevelop.Core/MonoDevelop.Core/SystemPackage.cs (Lluis) | ||
14 | |||
15 | and | ||
16 | |||
17 | src/core/MonoDevelop.Core/MonoDevelop.Core/SystemAssemblyService.cs | ||
18 | (Lluis && Todd) | ||
diff --git a/Prebuild/TODO b/Prebuild/TODO index d01780a..33b19a1 100644 --- a/Prebuild/TODO +++ b/Prebuild/TODO | |||
@@ -1,21 +1,43 @@ | |||
1 | * monodev target should be able to detect whether the project is 1.x | 1 | * monodev target should be able to detect whether the project is 1.x |
2 | or 2.x runtime | 2 | or 2.x runtime |
3 | 3 | ||
4 | * make an autotools install target for .exe files | 4 | * remove target which links ../project/foo.dll to each project's build |
5 | root | ||
6 | |||
7 | * generate .config files | ||
5 | 8 | ||
6 | * Fix the autotools target so that | 9 | * Fix the autotools target so that |
10 | sub generate_project_files { ... } | ||
11 | sub generate_solution_files { ... } | ||
12 | sub generate_multi_solution_files { ... } | ||
13 | sub generate_project { | ||
14 | ... | ||
15 | generate_project_files(); | ||
16 | } | ||
17 | sub generate_solution { | ||
18 | foreach $project ( @projects ){ | ||
19 | mkdir "$project/"; | ||
20 | pushd "$project/"; | ||
21 | generate_project(); | ||
22 | popd; | ||
23 | } | ||
24 | generate_solution_files(); | ||
25 | } | ||
26 | sub 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 | } | ||
7 | 35 | ||
8 | if(numProjects == 1){ | 36 | if(numProjects == 1){ |
9 | for($projectDir){ | 37 | generate_project(); |
10 | generate_a_project_configure_dot_ac() | 38 | }elsif(numSolutions == 1){ |
11 | } | 39 | generate_solution(); |
12 | }else{ | 40 | }else{ |
13 | generate_a_solution_configure_dot_ac() | 41 | generate_multi_solution(); |
14 | |||
15 | foreach($project in $projectsList){ | ||
16 | mkdir $project/ | ||
17 | cd $project/ | ||
18 | generate_a_project_configure_dot_ac | ||
19 | } | ||
20 | } | 42 | } |
21 | 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/prebuild.xml b/Prebuild/prebuild.xml new file mode 100644 index 0000000..8538e69 --- /dev/null +++ b/Prebuild/prebuild.xml | |||
@@ -0,0 +1,73 @@ | |||
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="Prebuild" version="2.0.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 | <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.3" | ||
35 | > | ||
36 | <Author>Matthew Holmes (matthew@wildfiregames.com)</Author> | ||
37 | <Author>Dan Moorehead (dan05a@gmail.com)</Author> | ||
38 | <Author>Dave Hudson (jendave@yahoo.com)</Author> | ||
39 | <Author>Rob Loach (http://robloach.net)</Author> | ||
40 | <Author>C.J. Adams-Collier (cjac@colliertech.org)</Author> | ||
41 | <Description>The Prebuild project generator</Description> | ||
42 | <Configuration name="Debug"> | ||
43 | <Options> | ||
44 | <CompilerDefines>DEBUG;TRACE</CompilerDefines> | ||
45 | <OptimizeCode>false</OptimizeCode> | ||
46 | <OutputPath>bin/Debug</OutputPath> | ||
47 | <DebugInformation>true</DebugInformation> | ||
48 | <KeyFile>Prebuild.snk</KeyFile> | ||
49 | <SuppressWarnings>1595</SuppressWarnings> | ||
50 | </Options> | ||
51 | </Configuration> | ||
52 | <Configuration name="Release"> | ||
53 | <Options> | ||
54 | <CompilerDefines>TRACE</CompilerDefines> | ||
55 | <OutputPath>bin/Release</OutputPath> | ||
56 | <OptimizeCode>true</OptimizeCode> | ||
57 | <DebugInformation>false</DebugInformation> | ||
58 | <KeyFile>Prebuild.snk</KeyFile> | ||
59 | <SuppressWarnings>1595</SuppressWarnings> | ||
60 | </Options> | ||
61 | </Configuration> | ||
62 | <Reference name="System.EnterpriseServices" /> | ||
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.7.xsd" buildAction="EmbeddedResource"/> | ||
68 | <Match path="data" pattern="autotools.xml" buildAction="EmbeddedResource"/> | ||
69 | <Match pattern="*.cs" recurse="true"/> | ||
70 | </Files> | ||
71 | </Project> | ||
72 | </Solution> | ||
73 | </Prebuild> | ||
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 | ||
4 | rm -rf ../Makefile | ||
diff --git a/Prebuild/scripts/autotools.sh b/Prebuild/scripts/autotools.sh index 18cd46f..4d140ce 100755 --- a/Prebuild/scripts/autotools.sh +++ b/Prebuild/scripts/autotools.sh | |||
@@ -1,2 +1,5 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | prebuild /target autotools /file ../prebuild.xml /build NET_2_0 /pause | 2 | RUNTIME=`which mono` |
3 | |||
4 | SCRIPTDIR=`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 | ||
3 | cd .. | ||
4 | Prebuild.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 | |||
5 | if [ -f ../Makefile ] | ||
6 | then | ||
7 | rm -rf ../Makefile | ||
8 | fi | ||
9 | |||
10 | mv ../Prebuild.make ../Makefile | ||
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 | ||
3 | cd .. | ||
4 | Prebuild.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 | ||
2 | prebuild /target xcode /file ../prebuild.xml /pause | ||
diff --git a/Prebuild/src/Core/Attributes/DataNodeAttribute.cs b/Prebuild/src/Core/Attributes/DataNodeAttribute.cs index 0786fe5..cdd0e0d 100644 --- a/Prebuild/src/Core/Attributes/DataNodeAttribute.cs +++ b/Prebuild/src/Core/Attributes/DataNodeAttribute.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs b/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs index a63e840..5cefe68 100644 --- a/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs +++ b/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Attributes/TargetAttribute.cs b/Prebuild/src/Core/Attributes/TargetAttribute.cs index 8724d69..b17cc5b 100644 --- a/Prebuild/src/Core/Attributes/TargetAttribute.cs +++ b/Prebuild/src/Core/Attributes/TargetAttribute.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/FatalException.cs b/Prebuild/src/Core/FatalException.cs index a997c98..784c35d 100644 --- a/Prebuild/src/Core/FatalException.cs +++ b/Prebuild/src/Core/FatalException.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Interfaces/IDataNode.cs b/Prebuild/src/Core/Interfaces/IDataNode.cs index 2562b1d..7583fd2 100644 --- a/Prebuild/src/Core/Interfaces/IDataNode.cs +++ b/Prebuild/src/Core/Interfaces/IDataNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Interfaces/ITarget.cs b/Prebuild/src/Core/Interfaces/ITarget.cs index e74ff9a..77006d7 100644 --- a/Prebuild/src/Core/Interfaces/ITarget.cs +++ b/Prebuild/src/Core/Interfaces/ITarget.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Kernel.cs b/Prebuild/src/Core/Kernel.cs index 170d0f5..1f0ad70 100644 --- a/Prebuild/src/Core/Kernel.cs +++ b/Prebuild/src/Core/Kernel.cs | |||
@@ -1,34 +1,47 @@ | |||
1 | #region BSD License | 1 | #region BSD License |
2 | /* | 2 | /* |
3 | Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) | 3 | Copyright (c) 2004-2008 |
4 | 4 | Matthew Holmes (matthew@wildfiregames.com), | |
5 | Redistribution and use in source and binary forms, with or without modification, are permitted | 5 | Dan Moorehead (dan05a@gmail.com), |
6 | provided that the following conditions are met: | 6 | Rob Loach (http://www.robloach.net), |
7 | 7 | C.J. Adams-Collier (cjac@colliertech.org) | |
8 | * Redistributions of source code must retain the above copyright notice, this list of conditions | 8 | |
9 | and the following disclaimer. | 9 | Redistribution and use in source and binary forms, with or without |
10 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions | 10 | modification, are permitted provided that the following conditions are |
11 | and the following disclaimer in the documentation and/or other materials provided with the | 11 | met: |
12 | distribution. | 12 | |
13 | * The name of the author may not be used to endorse or promote products derived from this software | 13 | * Redistributions of source code must retain the above copyright |
14 | without specific prior written permission. | 14 | notice, this list of conditions and the following disclaimer. |
15 | 15 | ||
16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, | 16 | * Redistributions in binary form must reproduce the above copyright |
17 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 17 | notice, this list of conditions and the following disclaimer in the |
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 18 | documentation and/or other materials provided with the distribution. |
19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 19 | |
20 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 20 | * The name of the author may not be used to endorse or promote |
21 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | 21 | products derived from this software without specific prior written |
22 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 22 | permission. |
23 | |||
24 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | ||
25 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
26 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
27 | DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, | ||
28 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
29 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
30 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
31 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
32 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
33 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | POSSIBILITY OF SUCH DAMAGE. | ||
35 | |||
23 | */ | 36 | */ |
24 | #endregion | 37 | #endregion |
25 | 38 | ||
26 | #region CVS Information | 39 | #region CVS Information |
27 | /* | 40 | /* |
28 | * $Source$ | 41 | * $Source$ |
29 | * $Author: robloach $ | 42 | * $Author: cjcollier $ |
30 | * $Date: 2006-09-26 00:30:53 +0200 (ti, 26 sep 2006) $ | 43 | * $Date: 2008-02-08 01:31:29 +0900 (Fri, 08 Feb 2008) $ |
31 | * $Revision: 165 $ | 44 | * $Revision: 256 $ |
32 | */ | 45 | */ |
33 | #endregion | 46 | #endregion |
34 | 47 | ||
@@ -91,6 +104,7 @@ namespace Prebuild.Core | |||
91 | string m_Clean; | 104 | string m_Clean; |
92 | string[] m_RemoveDirectories; | 105 | string[] m_RemoveDirectories; |
93 | string m_CurrentFile; | 106 | string m_CurrentFile; |
107 | XmlDocument m_CurrentDoc; | ||
94 | bool m_PauseAfterFinish; | 108 | bool m_PauseAfterFinish; |
95 | string[] m_ProjectGroups; | 109 | string[] m_ProjectGroups; |
96 | StringCollection m_Refs; | 110 | StringCollection m_Refs; |
@@ -203,6 +217,19 @@ namespace Prebuild.Core | |||
203 | return m_Solutions; | 217 | return m_Solutions; |
204 | } | 218 | } |
205 | } | 219 | } |
220 | |||
221 | /// <summary> | ||
222 | /// Gets the XmlDocument object representing the prebuild.xml | ||
223 | /// being processed | ||
224 | /// </summary> | ||
225 | /// <value>The XmlDocument object</value> | ||
226 | public XmlDocument CurrentDoc | ||
227 | { | ||
228 | get | ||
229 | { | ||
230 | return m_CurrentDoc; | ||
231 | } | ||
232 | } | ||
206 | 233 | ||
207 | #endregion | 234 | #endregion |
208 | 235 | ||
@@ -304,10 +331,16 @@ namespace Prebuild.Core | |||
304 | 331 | ||
305 | private void LogBanner() | 332 | private void LogBanner() |
306 | { | 333 | { |
307 | m_Log.Write("Prebuild v" + this.Version); | 334 | m_Log.Write("Prebuild v" + this.Version); |
308 | m_Log.Write("Copyright (c) Matthew Holmes, Dan Moorehead and David Hudson"); | 335 | m_Log.Write("Copyright (c) 2004-2008"); |
309 | m_Log.Write("See 'prebuild /usage' for help"); | 336 | m_Log.Write("Matthew Holmes (matthew@wildfiregames.com),"); |
310 | m_Log.Write(); | 337 | m_Log.Write("Dan Moorehead (dan05a@gmail.com),"); |
338 | m_Log.Write("David Hudson (jendave@yahoo.com),"); | ||
339 | m_Log.Write("Rob Loach (http://www.robloach.net),"); | ||
340 | m_Log.Write("C.J. Adams-Collier (cjac@colliertech.org),"); | ||
341 | |||
342 | m_Log.Write("See 'prebuild /usage' for help"); | ||
343 | m_Log.Write(); | ||
311 | } | 344 | } |
312 | 345 | ||
313 | private void ProcessFile(string file) | 346 | private void ProcessFile(string file) |
@@ -330,7 +363,6 @@ namespace Prebuild.Core | |||
330 | 363 | ||
331 | m_CurrentFile = path; | 364 | m_CurrentFile = path; |
332 | Helper.SetCurrentDir(Path.GetDirectoryName(path)); | 365 | Helper.SetCurrentDir(Path.GetDirectoryName(path)); |
333 | |||
334 | 366 | ||
335 | XmlTextReader reader = new XmlTextReader(path); | 367 | XmlTextReader reader = new XmlTextReader(path); |
336 | 368 | ||
@@ -348,7 +380,7 @@ namespace Prebuild.Core | |||
348 | string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML | 380 | string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML |
349 | 381 | ||
350 | 382 | ||
351 | XmlDocument doc = new XmlDocument(); | 383 | m_CurrentDoc = new XmlDocument(); |
352 | try | 384 | try |
353 | { | 385 | { |
354 | XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml))); | 386 | XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml))); |
@@ -358,7 +390,7 @@ namespace Prebuild.Core | |||
358 | { | 390 | { |
359 | validator.Schemas.Add(schema); | 391 | validator.Schemas.Add(schema); |
360 | } | 392 | } |
361 | doc.Load(validator); | 393 | m_CurrentDoc.Load(validator); |
362 | } | 394 | } |
363 | catch(XmlException e) | 395 | catch(XmlException e) |
364 | { | 396 | { |
@@ -394,7 +426,7 @@ namespace Prebuild.Core | |||
394 | return; | 426 | return; |
395 | } | 427 | } |
396 | //start reading the xml config file | 428 | //start reading the xml config file |
397 | XmlElement rootNode = doc.DocumentElement; | 429 | XmlElement rootNode = m_CurrentDoc.DocumentElement; |
398 | //string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0"); | 430 | //string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0"); |
399 | Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false); | 431 | Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false); |
400 | 432 | ||
@@ -681,17 +713,21 @@ namespace Prebuild.Core | |||
681 | } | 713 | } |
682 | else | 714 | else |
683 | { | 715 | { |
684 | ITarget targ = (ITarget)m_Targets[target]; | 716 | if (!m_Targets.Contains(target)) { |
717 | m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target); | ||
718 | return; | ||
719 | } | ||
720 | ITarget targ = (ITarget)m_Targets[target]; | ||
685 | 721 | ||
686 | if(clean) | 722 | if(clean) |
687 | { | 723 | { |
688 | targ.Clean(this); | 724 | targ.Clean(this); |
689 | } | 725 | } |
690 | else | 726 | else |
691 | { | 727 | { |
692 | targ.Write(this); | 728 | targ.Write(this); |
693 | } | 729 | } |
694 | } | 730 | } |
695 | 731 | ||
696 | m_Log.Flush(); | 732 | m_Log.Flush(); |
697 | } | 733 | } |
@@ -755,4 +791,4 @@ namespace Prebuild.Core | |||
755 | 791 | ||
756 | #endregion | 792 | #endregion |
757 | } | 793 | } |
758 | } \ No newline at end of file | 794 | } |
diff --git a/Prebuild/src/Core/Nodes/AuthorNode.cs b/Prebuild/src/Core/Nodes/AuthorNode.cs new file mode 100644 index 0000000..03ea934 --- /dev/null +++ b/Prebuild/src/Core/Nodes/AuthorNode.cs | |||
@@ -0,0 +1,98 @@ | |||
1 | #region BSD License | ||
2 | /* | ||
3 | Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org) | ||
4 | |||
5 | Redistribution and use in source and binary forms, with or without modification, are permitted | ||
6 | provided 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 | |||
16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, | ||
17 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
20 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
21 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
22 | IN 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: $ | ||
30 | * $Date: $ | ||
31 | * $Revision: $ | ||
32 | */ | ||
33 | #endregion | ||
34 | |||
35 | using System; | ||
36 | using System.Collections; | ||
37 | using System.Collections.Specialized; | ||
38 | using System.Xml; | ||
39 | |||
40 | using Prebuild.Core.Attributes; | ||
41 | using Prebuild.Core.Interfaces; | ||
42 | using Prebuild.Core.Utilities; | ||
43 | |||
44 | namespace Prebuild.Core.Nodes | ||
45 | { | ||
46 | /// <summary> | ||
47 | /// | ||
48 | /// </summary> | ||
49 | [DataNode("Author")] | ||
50 | public class AuthorNode : DataNode | ||
51 | { | ||
52 | #region Fields | ||
53 | |||
54 | private string m_Signature; | ||
55 | |||
56 | #endregion | ||
57 | |||
58 | #region Properties | ||
59 | |||
60 | /// <summary> | ||
61 | /// Gets the signature. | ||
62 | /// </summary> | ||
63 | /// <value>The signature.</value> | ||
64 | public string Signature | ||
65 | { | ||
66 | get | ||
67 | { | ||
68 | return m_Signature; | ||
69 | } | ||
70 | } | ||
71 | |||
72 | #endregion | ||
73 | |||
74 | #region Public Methods | ||
75 | |||
76 | /// <summary> | ||
77 | /// Parses the specified node. | ||
78 | /// </summary> | ||
79 | /// <param name="node">The node.</param> | ||
80 | public override void Parse(XmlNode node) | ||
81 | { | ||
82 | if( node == null ) | ||
83 | { | ||
84 | throw new ArgumentNullException("node"); | ||
85 | } | ||
86 | |||
87 | m_Signature = Helper.InterpolateForEnvironmentVariables(node.InnerText); | ||
88 | if(m_Signature == null) | ||
89 | { | ||
90 | m_Signature = ""; | ||
91 | } | ||
92 | |||
93 | m_Signature = m_Signature.Trim(); | ||
94 | } | ||
95 | |||
96 | #endregion | ||
97 | } | ||
98 | } | ||
diff --git a/Prebuild/src/Core/Nodes/ConfigurationNode.cs b/Prebuild/src/Core/Nodes/ConfigurationNode.cs index d2a5d20..828bff6 100644 --- a/Prebuild/src/Core/Nodes/ConfigurationNode.cs +++ b/Prebuild/src/Core/Nodes/ConfigurationNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
@@ -183,5 +183,5 @@ namespace Prebuild.Core.Nodes | |||
183 | } | 183 | } |
184 | 184 | ||
185 | #endregion | 185 | #endregion |
186 | } | 186 | } |
187 | } | 187 | } |
diff --git a/Prebuild/src/Core/Nodes/DataNode.cs b/Prebuild/src/Core/Nodes/DataNode.cs index aa05faa..60ed122 100644 --- a/Prebuild/src/Core/Nodes/DataNode.cs +++ b/Prebuild/src/Core/Nodes/DataNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Nodes/DescriptionNode.cs b/Prebuild/src/Core/Nodes/DescriptionNode.cs new file mode 100644 index 0000000..cff7afc --- /dev/null +++ b/Prebuild/src/Core/Nodes/DescriptionNode.cs | |||
@@ -0,0 +1,98 @@ | |||
1 | #region BSD License | ||
2 | /* | ||
3 | Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org) | ||
4 | |||
5 | Redistribution and use in source and binary forms, with or without modification, are permitted | ||
6 | provided 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 | |||
16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, | ||
17 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
20 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
21 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
22 | IN 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: $ | ||
30 | * $Date: $ | ||
31 | * $Revision: $ | ||
32 | */ | ||
33 | #endregion | ||
34 | |||
35 | using System; | ||
36 | using System.Collections; | ||
37 | using System.Collections.Specialized; | ||
38 | using System.Xml; | ||
39 | |||
40 | using Prebuild.Core.Attributes; | ||
41 | using Prebuild.Core.Interfaces; | ||
42 | using Prebuild.Core.Utilities; | ||
43 | |||
44 | namespace Prebuild.Core.Nodes | ||
45 | { | ||
46 | /// <summary> | ||
47 | /// The object representing the /Prebuild/Solution/Project/Description element | ||
48 | /// </summary> | ||
49 | [DataNode("Description")] | ||
50 | public class DescriptionNode : DataNode | ||
51 | { | ||
52 | #region Fields | ||
53 | |||
54 | private string m_Value; | ||
55 | |||
56 | #endregion | ||
57 | |||
58 | #region Properties | ||
59 | |||
60 | /// <summary> | ||
61 | /// Gets the description Value. | ||
62 | /// </summary> | ||
63 | /// <value>The description Value.</value> | ||
64 | public string Value | ||
65 | { | ||
66 | get | ||
67 | { | ||
68 | return m_Value; | ||
69 | } | ||
70 | } | ||
71 | |||
72 | #endregion | ||
73 | |||
74 | #region Public Methods | ||
75 | |||
76 | /// <summary> | ||
77 | /// Parses the specified node. | ||
78 | /// </summary> | ||
79 | /// <param name="node">The node.</param> | ||
80 | public override void Parse(XmlNode node) | ||
81 | { | ||
82 | if( node == null ) | ||
83 | { | ||
84 | throw new ArgumentNullException("node"); | ||
85 | } | ||
86 | |||
87 | m_Value = Helper.InterpolateForEnvironmentVariables(node.InnerText); | ||
88 | if(m_Value == null) | ||
89 | { | ||
90 | m_Value = ""; | ||
91 | } | ||
92 | |||
93 | m_Value = m_Value.Trim(); | ||
94 | } | ||
95 | |||
96 | #endregion | ||
97 | } | ||
98 | } | ||
diff --git a/Prebuild/src/Core/Nodes/ExcludeNode.cs b/Prebuild/src/Core/Nodes/ExcludeNode.cs index 905626d..afc869d 100644 --- a/Prebuild/src/Core/Nodes/ExcludeNode.cs +++ b/Prebuild/src/Core/Nodes/ExcludeNode.cs | |||
@@ -26,9 +26,9 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
26 | #region CVS Information | 26 | #region CVS Information |
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: borrillis $ |
30 | * $Date: 2006-01-31 16:35:39 +0100 (ti, 31 jan 2006) $ | 30 | * $Date: 2007-05-25 01:03:16 +0900 (Fri, 25 May 2007) $ |
31 | * $Revision: 74 $ | 31 | * $Revision: 243 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
@@ -49,7 +49,7 @@ namespace Prebuild.Core.Nodes | |||
49 | { | 49 | { |
50 | #region Fields | 50 | #region Fields |
51 | 51 | ||
52 | private string m_Name = "unknown"; | 52 | private string m_Pattern = ""; |
53 | 53 | ||
54 | #endregion | 54 | #endregion |
55 | 55 | ||
@@ -63,11 +63,23 @@ namespace Prebuild.Core.Nodes | |||
63 | { | 63 | { |
64 | get | 64 | get |
65 | { | 65 | { |
66 | return m_Name; | 66 | return m_Pattern; |
67 | } | 67 | } |
68 | } | 68 | } |
69 | 69 | ||
70 | #endregion | 70 | /// <summary> |
71 | /// Gets the pattern. | ||
72 | /// </summary> | ||
73 | /// <value>The pattern.</value> | ||
74 | public string Pattern | ||
75 | { | ||
76 | get | ||
77 | { | ||
78 | return m_Pattern; | ||
79 | } | ||
80 | } | ||
81 | |||
82 | #endregion | ||
71 | 83 | ||
72 | #region Public Methods | 84 | #region Public Methods |
73 | 85 | ||
@@ -77,7 +89,8 @@ namespace Prebuild.Core.Nodes | |||
77 | /// <param name="node">The node.</param> | 89 | /// <param name="node">The node.</param> |
78 | public override void Parse(XmlNode node) | 90 | public override void Parse(XmlNode node) |
79 | { | 91 | { |
80 | m_Name = Helper.AttributeValue(node, "name", m_Name); | 92 | m_Pattern = Helper.AttributeValue( node, "name", m_Pattern ); |
93 | m_Pattern = Helper.AttributeValue(node, "pattern", m_Pattern ); | ||
81 | } | 94 | } |
82 | 95 | ||
83 | #endregion | 96 | #endregion |
diff --git a/Prebuild/src/Core/Nodes/FileNode.cs b/Prebuild/src/Core/Nodes/FileNode.cs index ab0a2a3..083dba5 100644 --- a/Prebuild/src/Core/Nodes/FileNode.cs +++ b/Prebuild/src/Core/Nodes/FileNode.cs | |||
@@ -26,9 +26,9 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
26 | #region CVS Information | 26 | #region CVS Information |
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: borrillis $ |
30 | * $Date: 2007-01-08 17:55:40 +0100 (må, 08 jan 2007) $ | 30 | * $Date: 2007-05-25 01:03:16 +0900 (Fri, 25 May 2007) $ |
31 | * $Revision: 197 $ | 31 | * $Revision: 243 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
@@ -118,6 +118,8 @@ namespace Prebuild.Core.Nodes | |||
118 | private SubType m_SubType = SubType.Code; | 118 | private SubType m_SubType = SubType.Code; |
119 | private CopyToOutput m_CopyToOutput = CopyToOutput.Never; | 119 | private CopyToOutput m_CopyToOutput = CopyToOutput.Never; |
120 | private bool m_Link = false; | 120 | private bool m_Link = false; |
121 | private string m_LinkPath = string.Empty; | ||
122 | private bool m_PreservePath = false; | ||
121 | 123 | ||
122 | 124 | ||
123 | #endregion | 125 | #endregion |
@@ -173,6 +175,13 @@ namespace Prebuild.Core.Nodes | |||
173 | } | 175 | } |
174 | } | 176 | } |
175 | 177 | ||
178 | public string LinkPath | ||
179 | { | ||
180 | get | ||
181 | { | ||
182 | return this.m_LinkPath; | ||
183 | } | ||
184 | } | ||
176 | /// <summary> | 185 | /// <summary> |
177 | /// | 186 | /// |
178 | /// </summary> | 187 | /// </summary> |
@@ -195,6 +204,19 @@ namespace Prebuild.Core.Nodes | |||
195 | } | 204 | } |
196 | } | 205 | } |
197 | 206 | ||
207 | /// <summary> | ||
208 | /// | ||
209 | /// </summary> | ||
210 | /// <param name="file"></param> | ||
211 | /// <returns></returns> | ||
212 | public bool PreservePath | ||
213 | { | ||
214 | get | ||
215 | { | ||
216 | return m_PreservePath; | ||
217 | } | ||
218 | } | ||
219 | |||
198 | #endregion | 220 | #endregion |
199 | 221 | ||
200 | #region Public Methods | 222 | #region Public Methods |
@@ -211,7 +233,12 @@ namespace Prebuild.Core.Nodes | |||
211 | Helper.AttributeValue(node, "subType", m_SubType.ToString())); | 233 | Helper.AttributeValue(node, "subType", m_SubType.ToString())); |
212 | m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString()); | 234 | m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString()); |
213 | this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString)); | 235 | this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString)); |
236 | if ( this.m_Link == true ) | ||
237 | { | ||
238 | this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty ); | ||
239 | } | ||
214 | this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString())); | 240 | this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString())); |
241 | this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) ); | ||
215 | 242 | ||
216 | if( node == null ) | 243 | if( node == null ) |
217 | { | 244 | { |
diff --git a/Prebuild/src/Core/Nodes/FilesNode.cs b/Prebuild/src/Core/Nodes/FilesNode.cs index 05b2255..7c1dd19 100644 --- a/Prebuild/src/Core/Nodes/FilesNode.cs +++ b/Prebuild/src/Core/Nodes/FilesNode.cs | |||
@@ -26,9 +26,9 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
26 | #region CVS Information | 26 | #region CVS Information |
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: borrillis $ |
30 | * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $ | 30 | * $Date: 2007-05-25 01:03:16 +0900 (Fri, 25 May 2007) $ |
31 | * $Revision: 164 $ | 31 | * $Revision: 243 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
@@ -56,7 +56,8 @@ namespace Prebuild.Core.Nodes | |||
56 | private Hashtable m_ResourceNames; | 56 | private Hashtable m_ResourceNames; |
57 | private Hashtable m_CopyToOutputs; | 57 | private Hashtable m_CopyToOutputs; |
58 | private Hashtable m_Links; | 58 | private Hashtable m_Links; |
59 | 59 | private Hashtable m_LinkPaths; | |
60 | private Hashtable m_PreservePaths; | ||
60 | 61 | ||
61 | #endregion | 62 | #endregion |
62 | 63 | ||
@@ -73,7 +74,9 @@ namespace Prebuild.Core.Nodes | |||
73 | m_ResourceNames = new Hashtable(); | 74 | m_ResourceNames = new Hashtable(); |
74 | m_CopyToOutputs = new Hashtable(); | 75 | m_CopyToOutputs = new Hashtable(); |
75 | m_Links = new Hashtable(); | 76 | m_Links = new Hashtable(); |
76 | } | 77 | m_LinkPaths = new Hashtable(); |
78 | m_PreservePaths = new Hashtable(); | ||
79 | } | ||
77 | 80 | ||
78 | #endregion | 81 | #endregion |
79 | 82 | ||
@@ -127,6 +130,15 @@ namespace Prebuild.Core.Nodes | |||
127 | return (bool) this.m_Links[file]; | 130 | return (bool) this.m_Links[file]; |
128 | } | 131 | } |
129 | 132 | ||
133 | public string GetLinkPath( string file ) | ||
134 | { | ||
135 | if ( !this.m_LinkPaths.ContainsKey( file ) ) | ||
136 | { | ||
137 | return string.Empty; | ||
138 | } | ||
139 | return (string)this.m_LinkPaths[ file ]; | ||
140 | } | ||
141 | |||
130 | /// <summary> | 142 | /// <summary> |
131 | /// | 143 | /// |
132 | /// </summary> | 144 | /// </summary> |
@@ -157,6 +169,21 @@ namespace Prebuild.Core.Nodes | |||
157 | return (string)m_ResourceNames[file]; | 169 | return (string)m_ResourceNames[file]; |
158 | } | 170 | } |
159 | 171 | ||
172 | /// <summary> | ||
173 | /// | ||
174 | /// </summary> | ||
175 | /// <param name="file"></param> | ||
176 | /// <returns></returns> | ||
177 | public bool GetPreservePath( string file ) | ||
178 | { | ||
179 | if ( !m_PreservePaths.ContainsKey( file ) ) | ||
180 | { | ||
181 | return false; | ||
182 | } | ||
183 | |||
184 | return (bool)m_PreservePaths[ file ]; | ||
185 | } | ||
186 | |||
160 | /// <summary> | 187 | /// <summary> |
161 | /// | 188 | /// |
162 | /// </summary> | 189 | /// </summary> |
@@ -181,8 +208,10 @@ namespace Prebuild.Core.Nodes | |||
181 | m_BuildActions[fileNode.Path] = fileNode.BuildAction; | 208 | m_BuildActions[fileNode.Path] = fileNode.BuildAction; |
182 | m_SubTypes[fileNode.Path] = fileNode.SubType; | 209 | m_SubTypes[fileNode.Path] = fileNode.SubType; |
183 | m_ResourceNames[fileNode.Path] = fileNode.ResourceName; | 210 | m_ResourceNames[fileNode.Path] = fileNode.ResourceName; |
184 | this.m_Links[fileNode.Path] = fileNode.IsLink; | 211 | this.m_PreservePaths[ fileNode.Path ] = fileNode.PreservePath; |
185 | this.m_CopyToOutputs[fileNode.Path] = fileNode.CopyToOutput; | 212 | this.m_Links[ fileNode.Path ] = fileNode.IsLink; |
213 | this.m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath; | ||
214 | this.m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput; | ||
186 | 215 | ||
187 | } | 216 | } |
188 | } | 217 | } |
@@ -191,14 +220,17 @@ namespace Prebuild.Core.Nodes | |||
191 | { | 220 | { |
192 | foreach(string file in ((MatchNode)dataNode).Files) | 221 | foreach(string file in ((MatchNode)dataNode).Files) |
193 | { | 222 | { |
223 | MatchNode matchNode = (MatchNode)dataNode; | ||
194 | if (!m_Files.Contains(file)) | 224 | if (!m_Files.Contains(file)) |
195 | { | 225 | { |
196 | m_Files.Add(file); | 226 | m_Files.Add(file); |
197 | m_BuildActions[file] = ((MatchNode)dataNode).BuildAction; | 227 | m_BuildActions[ file ] = matchNode.BuildAction; |
198 | m_SubTypes[file] = ((MatchNode)dataNode).SubType; | 228 | m_SubTypes[ file ] = matchNode.SubType; |
199 | m_ResourceNames[file] = ((MatchNode)dataNode).ResourceName; | 229 | m_ResourceNames[ file ] = matchNode.ResourceName; |
200 | this.m_Links[file] = ((MatchNode) dataNode).IsLink; | 230 | this.m_PreservePaths[ file ] = matchNode.PreservePath; |
201 | this.m_CopyToOutputs[file] = ((MatchNode) dataNode).CopyToOutput; | 231 | this.m_Links[ file ] = matchNode.IsLink; |
232 | this.m_LinkPaths[ file ] = matchNode.LinkPath; | ||
233 | this.m_CopyToOutputs[ file ] = matchNode.CopyToOutput; | ||
202 | 234 | ||
203 | } | 235 | } |
204 | } | 236 | } |
diff --git a/Prebuild/src/Core/Nodes/MatchNode.cs b/Prebuild/src/Core/Nodes/MatchNode.cs index 8d7b467..aeaf3c1 100644 --- a/Prebuild/src/Core/Nodes/MatchNode.cs +++ b/Prebuild/src/Core/Nodes/MatchNode.cs | |||
@@ -26,9 +26,9 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
26 | #region CVS Information | 26 | #region CVS Information |
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: borrillis $ |
30 | * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $ | 30 | * $Date: 2007-05-25 01:03:16 +0900 (Fri, 25 May 2007) $ |
31 | * $Revision: 164 $ | 31 | * $Revision: 243 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
@@ -41,6 +41,7 @@ using System.Xml; | |||
41 | using Prebuild.Core.Attributes; | 41 | using Prebuild.Core.Attributes; |
42 | using Prebuild.Core.Interfaces; | 42 | using Prebuild.Core.Interfaces; |
43 | using Prebuild.Core.Utilities; | 43 | using Prebuild.Core.Utilities; |
44 | using System.Collections; | ||
44 | 45 | ||
45 | namespace Prebuild.Core.Nodes | 46 | namespace Prebuild.Core.Nodes |
46 | { | 47 | { |
@@ -59,7 +60,9 @@ namespace Prebuild.Core.Nodes | |||
59 | string m_ResourceName = ""; | 60 | string m_ResourceName = ""; |
60 | private CopyToOutput m_CopyToOutput; | 61 | private CopyToOutput m_CopyToOutput; |
61 | private bool m_Link; | 62 | private bool m_Link; |
62 | 63 | private string m_LinkPath; | |
64 | private bool m_PreservePath; | ||
65 | private ArrayList m_Exclusions; | ||
63 | 66 | ||
64 | #endregion | 67 | #endregion |
65 | 68 | ||
@@ -71,6 +74,7 @@ namespace Prebuild.Core.Nodes | |||
71 | public MatchNode() | 74 | public MatchNode() |
72 | { | 75 | { |
73 | m_Files = new StringCollection(); | 76 | m_Files = new StringCollection(); |
77 | m_Exclusions = new ArrayList(); | ||
74 | } | 78 | } |
75 | 79 | ||
76 | #endregion | 80 | #endregion |
@@ -126,6 +130,13 @@ namespace Prebuild.Core.Nodes | |||
126 | } | 130 | } |
127 | } | 131 | } |
128 | 132 | ||
133 | public string LinkPath | ||
134 | { | ||
135 | get | ||
136 | { | ||
137 | return this.m_LinkPath; | ||
138 | } | ||
139 | } | ||
129 | /// <summary> | 140 | /// <summary> |
130 | /// | 141 | /// |
131 | /// </summary> | 142 | /// </summary> |
@@ -137,6 +148,13 @@ namespace Prebuild.Core.Nodes | |||
137 | } | 148 | } |
138 | } | 149 | } |
139 | 150 | ||
151 | public bool PreservePath | ||
152 | { | ||
153 | get | ||
154 | { | ||
155 | return m_PreservePath; | ||
156 | } | ||
157 | } | ||
140 | 158 | ||
141 | #endregion | 159 | #endregion |
142 | 160 | ||
@@ -149,8 +167,10 @@ namespace Prebuild.Core.Nodes | |||
149 | /// <param name="pattern">The pattern.</param> | 167 | /// <param name="pattern">The pattern.</param> |
150 | /// <param name="recurse">if set to <c>true</c> [recurse].</param> | 168 | /// <param name="recurse">if set to <c>true</c> [recurse].</param> |
151 | /// <param name="useRegex">if set to <c>true</c> [use regex].</param> | 169 | /// <param name="useRegex">if set to <c>true</c> [use regex].</param> |
152 | private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex) | 170 | private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, ArrayList exclusions) |
153 | { | 171 | { |
172 | Match match; | ||
173 | Boolean excludeFile; | ||
154 | try | 174 | try |
155 | { | 175 | { |
156 | string[] files; | 176 | string[] files; |
@@ -163,6 +183,7 @@ namespace Prebuild.Core.Nodes | |||
163 | string fileTemp; | 183 | string fileTemp; |
164 | foreach (string file in files) | 184 | foreach (string file in files) |
165 | { | 185 | { |
186 | excludeFile = false; | ||
166 | if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\") | 187 | if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\") |
167 | { | 188 | { |
168 | fileTemp = file.Substring(2); | 189 | fileTemp = file.Substring(2); |
@@ -171,8 +192,20 @@ namespace Prebuild.Core.Nodes | |||
171 | { | 192 | { |
172 | fileTemp = file; | 193 | fileTemp = file; |
173 | } | 194 | } |
174 | 195 | ||
175 | m_Files.Add(fileTemp); | 196 | // Check all excludions and set flag if there are any hits. |
197 | foreach ( ExcludeNode exclude in exclusions ) | ||
198 | { | ||
199 | Regex exRegEx = new Regex( exclude.Pattern ); | ||
200 | match = exRegEx.Match( file ); | ||
201 | excludeFile |= match.Success; | ||
202 | } | ||
203 | |||
204 | if ( !excludeFile ) | ||
205 | { | ||
206 | m_Files.Add( fileTemp ); | ||
207 | } | ||
208 | |||
176 | } | 209 | } |
177 | } | 210 | } |
178 | else | 211 | else |
@@ -182,14 +215,26 @@ namespace Prebuild.Core.Nodes | |||
182 | } | 215 | } |
183 | else | 216 | else |
184 | { | 217 | { |
185 | Match match; | ||
186 | files = Directory.GetFiles(path); | 218 | files = Directory.GetFiles(path); |
187 | foreach(string file in files) | 219 | foreach(string file in files) |
188 | { | 220 | { |
221 | excludeFile = false; | ||
222 | |||
189 | match = m_Regex.Match(file); | 223 | match = m_Regex.Match(file); |
190 | if(match.Success) | 224 | if(match.Success) |
191 | { | 225 | { |
192 | m_Files.Add(file); | 226 | // Check all excludions and set flag if there are any hits. |
227 | foreach ( ExcludeNode exclude in exclusions ) | ||
228 | { | ||
229 | Regex exRegEx = new Regex( exclude.Pattern ); | ||
230 | match = exRegEx.Match( file ); | ||
231 | excludeFile |= !match.Success; | ||
232 | } | ||
233 | |||
234 | if ( !excludeFile ) | ||
235 | { | ||
236 | m_Files.Add( file ); | ||
237 | } | ||
193 | } | 238 | } |
194 | } | 239 | } |
195 | } | 240 | } |
@@ -201,7 +246,7 @@ namespace Prebuild.Core.Nodes | |||
201 | { | 246 | { |
202 | foreach(string str in dirs) | 247 | foreach(string str in dirs) |
203 | { | 248 | { |
204 | RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex); | 249 | RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex, exclusions); |
205 | } | 250 | } |
206 | } | 251 | } |
207 | } | 252 | } |
@@ -241,6 +286,11 @@ namespace Prebuild.Core.Nodes | |||
241 | m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString()); | 286 | m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString()); |
242 | this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString())); | 287 | this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString())); |
243 | this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString)); | 288 | this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString)); |
289 | if ( this.m_Link == true ) | ||
290 | { | ||
291 | this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty ); | ||
292 | } | ||
293 | this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) ); | ||
244 | 294 | ||
245 | 295 | ||
246 | if(path != null && path.Length == 0) | 296 | if(path != null && path.Length == 0) |
@@ -272,7 +322,6 @@ namespace Prebuild.Core.Nodes | |||
272 | throw new WarningException("Could not compile regex pattern: {0}", ex.Message); | 322 | throw new WarningException("Could not compile regex pattern: {0}", ex.Message); |
273 | } | 323 | } |
274 | 324 | ||
275 | RecurseDirectories(path, pattern, recurse, useRegex); | ||
276 | 325 | ||
277 | foreach(XmlNode child in node.ChildNodes) | 326 | foreach(XmlNode child in node.ChildNodes) |
278 | { | 327 | { |
@@ -280,13 +329,12 @@ namespace Prebuild.Core.Nodes | |||
280 | if(dataNode is ExcludeNode) | 329 | if(dataNode is ExcludeNode) |
281 | { | 330 | { |
282 | ExcludeNode excludeNode = (ExcludeNode)dataNode; | 331 | ExcludeNode excludeNode = (ExcludeNode)dataNode; |
283 | if (m_Files.Contains(Helper.NormalizePath(excludeNode.Name))) | 332 | m_Exclusions.Add( dataNode ); |
284 | { | ||
285 | m_Files.Remove(Helper.NormalizePath(excludeNode.Name)); | ||
286 | } | ||
287 | } | 333 | } |
288 | } | 334 | } |
289 | 335 | ||
336 | RecurseDirectories( path, pattern, recurse, useRegex, m_Exclusions ); | ||
337 | |||
290 | if(m_Files.Count < 1) | 338 | if(m_Files.Count < 1) |
291 | { | 339 | { |
292 | throw new WarningException("Match returned no files: {0}{1}", Helper.EndPath(path), pattern); | 340 | throw new WarningException("Match returned no files: {0}{1}", Helper.EndPath(path), pattern); |
diff --git a/Prebuild/src/Core/Nodes/OptionsNode.cs b/Prebuild/src/Core/Nodes/OptionsNode.cs index b7a784d..651c339 100644 --- a/Prebuild/src/Core/Nodes/OptionsNode.cs +++ b/Prebuild/src/Core/Nodes/OptionsNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2007-01-08 17:55:40 +0100 (må, 08 jan 2007) $ | 30 | * $Date: 2007-01-09 01:55:40 +0900 (Tue, 09 Jan 2007) $ |
31 | * $Revision: 197 $ | 31 | * $Revision: 197 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Nodes/ProcessNode.cs b/Prebuild/src/Core/Nodes/ProcessNode.cs index 5f3dbe6..2d2162c 100644 --- a/Prebuild/src/Core/Nodes/ProcessNode.cs +++ b/Prebuild/src/Core/Nodes/ProcessNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Nodes/ProjectNode.cs b/Prebuild/src/Core/Nodes/ProjectNode.cs index bddaace..e98ab5f 100644 --- a/Prebuild/src/Core/Nodes/ProjectNode.cs +++ b/Prebuild/src/Core/Nodes/ProjectNode.cs | |||
@@ -27,8 +27,8 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-11-11 05:43:20 +0100 (lö, 11 nov 2006) $ | 30 | * $Date: 2007-05-26 06:58:26 +0900 (Sat, 26 May 2007) $ |
31 | * $Revision: 192 $ | 31 | * $Revision: 244 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
@@ -44,20 +44,20 @@ using Prebuild.Core.Utilities; | |||
44 | namespace Prebuild.Core.Nodes | 44 | namespace Prebuild.Core.Nodes |
45 | { | 45 | { |
46 | /// <summary> | 46 | /// <summary> |
47 | /// | 47 | /// A set of values that the Project's type can be |
48 | /// </summary> | 48 | /// </summary> |
49 | public enum ProjectType | 49 | public enum ProjectType |
50 | { | 50 | { |
51 | /// <summary> | 51 | /// <summary> |
52 | /// | 52 | /// The project is a console executable |
53 | /// </summary> | 53 | /// </summary> |
54 | Exe, | 54 | Exe, |
55 | /// <summary> | 55 | /// <summary> |
56 | /// | 56 | /// The project is a windows executable |
57 | /// </summary> | 57 | /// </summary> |
58 | WinExe, | 58 | WinExe, |
59 | /// <summary> | 59 | /// <summary> |
60 | /// | 60 | /// The project is a library |
61 | /// </summary> | 61 | /// </summary> |
62 | Library | 62 | Library |
63 | } | 63 | } |
@@ -78,7 +78,7 @@ namespace Prebuild.Core.Nodes | |||
78 | } | 78 | } |
79 | 79 | ||
80 | /// <summary> | 80 | /// <summary> |
81 | /// | 81 | /// The Node object representing /Prebuild/Solution/Project elements |
82 | /// </summary> | 82 | /// </summary> |
83 | [DataNode("Project")] | 83 | [DataNode("Project")] |
84 | public class ProjectNode : DataNode, IComparable | 84 | public class ProjectNode : DataNode, IComparable |
@@ -90,6 +90,7 @@ namespace Prebuild.Core.Nodes | |||
90 | private string m_FullPath = ""; | 90 | private string m_FullPath = ""; |
91 | private string m_AssemblyName; | 91 | private string m_AssemblyName; |
92 | private string m_AppIcon = ""; | 92 | private string m_AppIcon = ""; |
93 | private string m_ConfigFile = ""; | ||
93 | private string m_DesignerFolder = ""; | 94 | private string m_DesignerFolder = ""; |
94 | private string m_Language = "C#"; | 95 | private string m_Language = "C#"; |
95 | private ProjectType m_Type = ProjectType.Exe; | 96 | private ProjectType m_Type = ProjectType.Exe; |
@@ -97,11 +98,13 @@ namespace Prebuild.Core.Nodes | |||
97 | private string m_StartupObject = ""; | 98 | private string m_StartupObject = ""; |
98 | private string m_RootNamespace; | 99 | private string m_RootNamespace; |
99 | private string m_FilterGroups = ""; | 100 | private string m_FilterGroups = ""; |
101 | private string m_Version = ""; | ||
100 | private Guid m_Guid; | 102 | private Guid m_Guid; |
101 | 103 | ||
102 | private Hashtable m_Configurations; | 104 | private Hashtable m_Configurations; |
103 | private ArrayList m_ReferencePaths; | 105 | private ArrayList m_ReferencePaths; |
104 | private ArrayList m_References; | 106 | private ArrayList m_References; |
107 | private ArrayList m_Authors; | ||
105 | private FilesNode m_Files; | 108 | private FilesNode m_Files; |
106 | 109 | ||
107 | #endregion | 110 | #endregion |
@@ -116,6 +119,7 @@ namespace Prebuild.Core.Nodes | |||
116 | m_Configurations = new Hashtable(); | 119 | m_Configurations = new Hashtable(); |
117 | m_ReferencePaths = new ArrayList(); | 120 | m_ReferencePaths = new ArrayList(); |
118 | m_References = new ArrayList(); | 121 | m_References = new ArrayList(); |
122 | m_Authors = new ArrayList(); | ||
119 | } | 123 | } |
120 | 124 | ||
121 | #endregion | 125 | #endregion |
@@ -159,6 +163,18 @@ namespace Prebuild.Core.Nodes | |||
159 | } | 163 | } |
160 | 164 | ||
161 | /// <summary> | 165 | /// <summary> |
166 | /// Gets the project's version | ||
167 | /// </summary> | ||
168 | /// <value>The project's version.</value> | ||
169 | public string Version | ||
170 | { | ||
171 | get | ||
172 | { | ||
173 | return m_Version; | ||
174 | } | ||
175 | } | ||
176 | |||
177 | /// <summary> | ||
162 | /// Gets the full path. | 178 | /// Gets the full path. |
163 | /// </summary> | 179 | /// </summary> |
164 | /// <value>The full path.</value> | 180 | /// <value>The full path.</value> |
@@ -194,6 +210,18 @@ namespace Prebuild.Core.Nodes | |||
194 | } | 210 | } |
195 | } | 211 | } |
196 | 212 | ||
213 | /// <summary> | ||
214 | /// Gets the app icon. | ||
215 | /// </summary> | ||
216 | /// <value>The app icon.</value> | ||
217 | public string ConfigFile | ||
218 | { | ||
219 | get | ||
220 | { | ||
221 | return m_ConfigFile; | ||
222 | } | ||
223 | } | ||
224 | |||
197 | /// <summary> | 225 | /// <summary> |
198 | /// | 226 | /// |
199 | /// </summary> | 227 | /// </summary> |
@@ -290,9 +318,9 @@ namespace Prebuild.Core.Nodes | |||
290 | { | 318 | { |
291 | get | 319 | get |
292 | { | 320 | { |
293 | ArrayList tmp = new ArrayList( ConfigurationsTable.Values); | 321 | ArrayList tmp = new ArrayList(ConfigurationsTable.Values); |
294 | tmp.Sort(); | 322 | tmp.Sort(); |
295 | return tmp; | 323 | return tmp; |
296 | } | 324 | } |
297 | } | 325 | } |
298 | 326 | ||
@@ -319,7 +347,7 @@ namespace Prebuild.Core.Nodes | |||
319 | ArrayList tmp = new ArrayList(m_ReferencePaths); | 347 | ArrayList tmp = new ArrayList(m_ReferencePaths); |
320 | tmp.Sort(); | 348 | tmp.Sort(); |
321 | return tmp; | 349 | return tmp; |
322 | } | 350 | } |
323 | } | 351 | } |
324 | 352 | ||
325 | /// <summary> | 353 | /// <summary> |
@@ -335,6 +363,18 @@ namespace Prebuild.Core.Nodes | |||
335 | return tmp; | 363 | return tmp; |
336 | } | 364 | } |
337 | } | 365 | } |
366 | |||
367 | /// <summary> | ||
368 | /// Gets the Authors list. | ||
369 | /// </summary> | ||
370 | /// <value>The list of the project's authors.</value> | ||
371 | public ArrayList Authors | ||
372 | { | ||
373 | get | ||
374 | { | ||
375 | return m_Authors; | ||
376 | } | ||
377 | } | ||
338 | 378 | ||
339 | /// <summary> | 379 | /// <summary> |
340 | /// Gets the files. | 380 | /// Gets the files. |
@@ -422,7 +462,9 @@ namespace Prebuild.Core.Nodes | |||
422 | m_Name = Helper.AttributeValue(node, "name", m_Name); | 462 | m_Name = Helper.AttributeValue(node, "name", m_Name); |
423 | m_Path = Helper.AttributeValue(node, "path", m_Path); | 463 | m_Path = Helper.AttributeValue(node, "path", m_Path); |
424 | m_FilterGroups = Helper.AttributeValue(node, "filterGroups", m_FilterGroups); | 464 | m_FilterGroups = Helper.AttributeValue(node, "filterGroups", m_FilterGroups); |
465 | m_Version = Helper.AttributeValue(node, "version", m_Version); | ||
425 | m_AppIcon = Helper.AttributeValue(node, "icon", m_AppIcon); | 466 | m_AppIcon = Helper.AttributeValue(node, "icon", m_AppIcon); |
467 | m_ConfigFile = Helper.AttributeValue(node, "configFile", m_ConfigFile); | ||
426 | m_DesignerFolder = Helper.AttributeValue(node, "designerFolder", m_DesignerFolder); | 468 | m_DesignerFolder = Helper.AttributeValue(node, "designerFolder", m_DesignerFolder); |
427 | m_AssemblyName = Helper.AttributeValue(node, "assemblyName", m_AssemblyName); | 469 | m_AssemblyName = Helper.AttributeValue(node, "assemblyName", m_AssemblyName); |
428 | m_Language = Helper.AttributeValue(node, "language", m_Language); | 470 | m_Language = Helper.AttributeValue(node, "language", m_Language); |
@@ -430,13 +472,11 @@ namespace Prebuild.Core.Nodes | |||
430 | m_Runtime = (ClrRuntime)Helper.EnumAttributeValue(node, "runtime", typeof(ClrRuntime), m_Runtime); | 472 | m_Runtime = (ClrRuntime)Helper.EnumAttributeValue(node, "runtime", typeof(ClrRuntime), m_Runtime); |
431 | m_StartupObject = Helper.AttributeValue(node, "startupObject", m_StartupObject); | 473 | m_StartupObject = Helper.AttributeValue(node, "startupObject", m_StartupObject); |
432 | m_RootNamespace = Helper.AttributeValue(node, "rootNamespace", m_RootNamespace); | 474 | m_RootNamespace = Helper.AttributeValue(node, "rootNamespace", m_RootNamespace); |
433 | 475 | m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false); | |
476 | |||
434 | int hash = m_Name.GetHashCode(); | 477 | int hash = m_Name.GetHashCode(); |
478 | m_Guid = new Guid(hash, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); | ||
435 | 479 | ||
436 | m_Guid = new Guid( hash, 0, 0, 0, 0, 0, 0,0,0,0,0 ); | ||
437 | |||
438 | m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false); | ||
439 | |||
440 | if(m_AssemblyName == null || m_AssemblyName.Length < 1) | 480 | if(m_AssemblyName == null || m_AssemblyName.Length < 1) |
441 | { | 481 | { |
442 | m_AssemblyName = m_Name; | 482 | m_AssemblyName = m_Name; |
@@ -482,6 +522,10 @@ namespace Prebuild.Core.Nodes | |||
482 | { | 522 | { |
483 | m_References.Add(dataNode); | 523 | m_References.Add(dataNode); |
484 | } | 524 | } |
525 | else if(dataNode is AuthorNode) | ||
526 | { | ||
527 | m_Authors.Add(dataNode); | ||
528 | } | ||
485 | else if(dataNode is FilesNode) | 529 | else if(dataNode is FilesNode) |
486 | { | 530 | { |
487 | m_Files = (FilesNode)dataNode; | 531 | m_Files = (FilesNode)dataNode; |
@@ -494,7 +538,6 @@ namespace Prebuild.Core.Nodes | |||
494 | } | 538 | } |
495 | } | 539 | } |
496 | 540 | ||
497 | |||
498 | #endregion | 541 | #endregion |
499 | 542 | ||
500 | #region IComparable Members | 543 | #region IComparable Members |
@@ -506,5 +549,5 @@ namespace Prebuild.Core.Nodes | |||
506 | } | 549 | } |
507 | 550 | ||
508 | #endregion | 551 | #endregion |
509 | } | 552 | } |
510 | } | 553 | } |
diff --git a/Prebuild/src/Core/Nodes/ReferenceNode.cs b/Prebuild/src/Core/Nodes/ReferenceNode.cs index 4b8262e..df0c2e4 100644 --- a/Prebuild/src/Core/Nodes/ReferenceNode.cs +++ b/Prebuild/src/Core/Nodes/ReferenceNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-07-25 18:56:49 +0200 (ti, 25 jul 2006) $ | 30 | * $Date: 2006-07-26 01:56:49 +0900 (Wed, 26 Jul 2006) $ |
31 | * $Revision: 132 $ | 31 | * $Revision: 132 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
@@ -149,5 +149,5 @@ namespace Prebuild.Core.Nodes | |||
149 | } | 149 | } |
150 | 150 | ||
151 | #endregion | 151 | #endregion |
152 | } | 152 | } |
153 | } | 153 | } |
diff --git a/Prebuild/src/Core/Nodes/ReferencePathNode.cs b/Prebuild/src/Core/Nodes/ReferencePathNode.cs index 4c981e7..d4042ef 100644 --- a/Prebuild/src/Core/Nodes/ReferencePathNode.cs +++ b/Prebuild/src/Core/Nodes/ReferencePathNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
@@ -104,5 +104,5 @@ namespace Prebuild.Core.Nodes | |||
104 | } | 104 | } |
105 | 105 | ||
106 | #endregion | 106 | #endregion |
107 | } | 107 | } |
108 | } | 108 | } |
diff --git a/Prebuild/src/Core/Nodes/SolutionNode.cs b/Prebuild/src/Core/Nodes/SolutionNode.cs index 3ea53a4..9473fe6 100644 --- a/Prebuild/src/Core/Nodes/SolutionNode.cs +++ b/Prebuild/src/Core/Nodes/SolutionNode.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-02-28 17:15:42 +0100 (ti, 28 feb 2006) $ | 30 | * $Date: 2006-03-01 01:15:42 +0900 (Wed, 01 Mar 2006) $ |
31 | * $Revision: 92 $ | 31 | * $Revision: 92 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
@@ -53,11 +53,11 @@ namespace Prebuild.Core.Nodes | |||
53 | #region Fields | 53 | #region Fields |
54 | 54 | ||
55 | private string m_Name = "unknown"; | 55 | private string m_Name = "unknown"; |
56 | private string m_Version = "1.0.0"; | ||
57 | private string m_Path = ""; | 56 | private string m_Path = ""; |
58 | private string m_FullPath = ""; | 57 | private string m_FullPath = ""; |
59 | private string m_ActiveConfig = "Debug"; | 58 | private string m_ActiveConfig = "Debug"; |
60 | 59 | private string m_Version = "1.0.0"; | |
60 | |||
61 | private OptionsNode m_Options; | 61 | private OptionsNode m_Options; |
62 | private FilesNode m_Files; | 62 | private FilesNode m_Files; |
63 | private Hashtable m_Configurations; | 63 | private Hashtable m_Configurations; |
@@ -111,18 +111,6 @@ namespace Prebuild.Core.Nodes | |||
111 | } | 111 | } |
112 | 112 | ||
113 | /// <summary> | 113 | /// <summary> |
114 | /// Gets the version. | ||
115 | /// </summary> | ||
116 | /// <value>The version.</value> | ||
117 | public string Version | ||
118 | { | ||
119 | get | ||
120 | { | ||
121 | return m_Version; | ||
122 | } | ||
123 | } | ||
124 | |||
125 | /// <summary> | ||
126 | /// Gets the path. | 114 | /// Gets the path. |
127 | /// </summary> | 115 | /// </summary> |
128 | /// <value>The path.</value> | 116 | /// <value>The path.</value> |
@@ -147,6 +135,18 @@ namespace Prebuild.Core.Nodes | |||
147 | } | 135 | } |
148 | 136 | ||
149 | /// <summary> | 137 | /// <summary> |
138 | /// Gets the version. | ||
139 | /// </summary> | ||
140 | /// <value>The version.</value> | ||
141 | public string Version | ||
142 | { | ||
143 | get | ||
144 | { | ||
145 | return m_Version; | ||
146 | } | ||
147 | } | ||
148 | |||
149 | /// <summary> | ||
150 | /// Gets the options. | 150 | /// Gets the options. |
151 | /// </summary> | 151 | /// </summary> |
152 | /// <value>The options.</value> | 152 | /// <value>The options.</value> |
@@ -181,7 +181,7 @@ namespace Prebuild.Core.Nodes | |||
181 | ArrayList tmp = new ArrayList(ConfigurationsTable.Values); | 181 | ArrayList tmp = new ArrayList(ConfigurationsTable.Values); |
182 | tmp.Sort(); | 182 | tmp.Sort(); |
183 | return tmp; | 183 | return tmp; |
184 | } | 184 | } |
185 | } | 185 | } |
186 | 186 | ||
187 | /// <summary> | 187 | /// <summary> |
@@ -245,9 +245,9 @@ namespace Prebuild.Core.Nodes | |||
245 | public override void Parse(XmlNode node) | 245 | public override void Parse(XmlNode node) |
246 | { | 246 | { |
247 | m_Name = Helper.AttributeValue(node, "name", m_Name); | 247 | m_Name = Helper.AttributeValue(node, "name", m_Name); |
248 | m_Version = Helper.AttributeValue(node, "version", m_Version); | ||
249 | m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig); | 248 | m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig); |
250 | m_Path = Helper.AttributeValue(node, "path", m_Path); | 249 | m_Path = Helper.AttributeValue(node, "path", m_Path); |
250 | m_Version = Helper.AttributeValue(node, "version", m_Version); | ||
251 | 251 | ||
252 | m_FullPath = m_Path; | 252 | m_FullPath = m_Path; |
253 | try | 253 | try |
diff --git a/Prebuild/src/Core/Parse/IfContext.cs b/Prebuild/src/Core/Parse/IfContext.cs index 6311f47..fc86885 100644 --- a/Prebuild/src/Core/Parse/IfContext.cs +++ b/Prebuild/src/Core/Parse/IfContext.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Parse/Preprocessor.cs b/Prebuild/src/Core/Parse/Preprocessor.cs index af21090..eea5c30 100644 --- a/Prebuild/src/Core/Parse/Preprocessor.cs +++ b/Prebuild/src/Core/Parse/Preprocessor.cs | |||
@@ -27,8 +27,8 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-09-01 19:55:06 +0200 (fr, 01 sep 2006) $ | 30 | * $Date: 2007-04-26 17:10:27 +0900 (Thu, 26 Apr 2007) $ |
31 | * $Revision: 147 $ | 31 | * $Revision: 236 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
diff --git a/Prebuild/src/Core/Targets/AutotoolsTarget.cs b/Prebuild/src/Core/Targets/AutotoolsTarget.cs index cf575e3..f102038 100644 --- a/Prebuild/src/Core/Targets/AutotoolsTarget.cs +++ b/Prebuild/src/Core/Targets/AutotoolsTarget.cs | |||
@@ -1,11 +1,11 @@ | |||
1 | #region BSD License | 1 | #region BSD License |
2 | /* | 2 | /* |
3 | 3 | ||
4 | Copyright (c) 2004 - 2006 | 4 | Copyright (c) 2004 - 2008 |
5 | Matthew Holmes (matthew@wildfiregames.com), | 5 | Matthew Holmes (matthew@wildfiregames.com), |
6 | Dan Moorehead (dan05a@gmail.com), | 6 | Dan Moorehead (dan05a@gmail.com), |
7 | Dave Hudson (jendave@yahoo.com), | 7 | Dave Hudson (jendave@yahoo.com), |
8 | C.J. Adams-Collier (cjcollier@colliertech.org), | 8 | C.J. Adams-Collier (cjac@colliertech.org), |
9 | 9 | ||
10 | Redistribution and use in source and binary forms, with or without | 10 | Redistribution and use in source and binary forms, with or without |
11 | modification, are permitted provided that the following conditions are | 11 | modification, are permitted provided that the following conditions are |
@@ -37,6 +37,35 @@ POSSIBILITY OF SUCH DAMAGE. | |||
37 | */ | 37 | */ |
38 | #endregion | 38 | #endregion |
39 | 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 | ||
68 | |||
40 | #region CVS Information | 69 | #region CVS Information |
41 | /* | 70 | /* |
42 | * $Source$ | 71 | * $Source$ |
@@ -53,6 +82,10 @@ using System.IO; | |||
53 | using System.Reflection; | 82 | using System.Reflection; |
54 | using System.Text; | 83 | using System.Text; |
55 | using System.Text.RegularExpressions; | 84 | using System.Text.RegularExpressions; |
85 | using System.Xml; | ||
86 | using System.Xml.Xsl; | ||
87 | using System.Net; | ||
88 | using System.Diagnostics; | ||
56 | 89 | ||
57 | using Prebuild.Core.Attributes; | 90 | using Prebuild.Core.Attributes; |
58 | using Prebuild.Core.Interfaces; | 91 | using Prebuild.Core.Interfaces; |
@@ -62,63 +95,500 @@ using Prebuild.Core.Utilities; | |||
62 | 95 | ||
63 | namespace Prebuild.Core.Targets | 96 | namespace Prebuild.Core.Targets |
64 | { | 97 | { |
65 | /// <summary> | 98 | public enum ClrVersion |
66 | /// | 99 | { |
67 | /// </summary> | 100 | Default, |
68 | [Target("autotools")] | 101 | Net_1_1, |
69 | public class AutotoolsTarget : ITarget | 102 | Net_2_0 |
70 | { | 103 | } |
71 | #region Fields | 104 | |
72 | 105 | public class SystemPackage | |
73 | private Kernel m_Kernel; | 106 | { |
74 | 107 | string name; | |
75 | #endregion | 108 | string version; |
76 | 109 | string description; | |
77 | #region Private Methods | 110 | string[] assemblies; |
78 | 111 | bool isInternal; | |
79 | private static string PrependPath(string path) | 112 | ClrVersion targetVersion; |
80 | { | 113 | |
81 | string tmpPath = Helper.NormalizePath(path, '/'); | 114 | public void Initialize(string name, |
82 | Regex regex = new Regex(@"(\w):/(\w+)"); | 115 | string version, |
83 | Match match = regex.Match(tmpPath); | 116 | string description, |
84 | if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') | 117 | string[] assemblies, |
85 | { | 118 | ClrVersion targetVersion, |
86 | tmpPath = Helper.NormalizePath(tmpPath); | 119 | bool isInternal) |
87 | } | 120 | { |
88 | else | 121 | this.isInternal = isInternal; |
89 | { | 122 | this.name = name; |
90 | tmpPath = Helper.NormalizePath("./" + tmpPath); | 123 | this.version = version; |
91 | } | 124 | this.assemblies = assemblies; |
92 | 125 | this.description = description; | |
93 | return tmpPath; | 126 | this.targetVersion = targetVersion; |
94 | } | 127 | } |
95 | 128 | ||
96 | private static string BuildReference(SolutionNode solution, ReferenceNode refr) | 129 | public string Name |
97 | { | 130 | { |
98 | string ret = ""; | 131 | get { return name; } |
99 | if(solution.ProjectsTable.ContainsKey(refr.Name)) | 132 | } |
100 | { | 133 | |
101 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; | 134 | public string Version |
102 | string fileRef = FindFileReference(refr.Name, project); | 135 | { |
103 | string finalPath = Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + "/$(BUILD_DIR)/$(CONFIG)/", refr.Name, "dll"), '/'); | 136 | get { return version; } |
104 | ret += finalPath; | 137 | } |
105 | return ret; | 138 | |
106 | } | 139 | public string Description |
107 | else | 140 | { |
108 | { | 141 | get { return description; } |
109 | ProjectNode project = (ProjectNode)refr.Parent; | 142 | } |
110 | string fileRef = FindFileReference(refr.Name, project); | 143 | |
111 | 144 | public ClrVersion TargetVersion | |
112 | if(refr.Path != null || fileRef != null) | 145 | { |
113 | { | 146 | get { return targetVersion; } |
114 | string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path + "/" + refr.Name + ".dll", '/') : fileRef; | 147 | } |
115 | ret += Path.Combine(project.Path, finalPath); | 148 | |
116 | return ret; | 149 | // The package is part of the mono SDK |
117 | } | 150 | public bool IsCorePackage |
118 | 151 | { | |
119 | try | 152 | get { return name == "mono"; } |
120 | { | 153 | } |
121 | //Assembly assem = Assembly.Load(refr.Name); | 154 | |
155 | // The package has been registered by an add-in, and is not installed | ||
156 | // in the system. | ||
157 | public bool IsInternalPackage | ||
158 | { | ||
159 | get { return isInternal; } | ||
160 | } | ||
161 | |||
162 | public string[] Assemblies | ||
163 | { | ||
164 | get { return assemblies; } | ||
165 | } | ||
166 | |||
167 | } | ||
168 | |||
169 | |||
170 | /// <summary> | ||
171 | /// | ||
172 | /// </summary> | ||
173 | [Target("autotools")] | ||
174 | public class AutotoolsTarget : ITarget | ||
175 | { | ||
176 | #region Fields | ||
177 | |||
178 | Kernel m_Kernel; | ||
179 | XmlDocument autotoolsDoc; | ||
180 | XmlUrlResolver xr; | ||
181 | System.Security.Policy.Evidence e; | ||
182 | Hashtable assemblyPathToPackage = new Hashtable(); | ||
183 | Hashtable assemblyFullNameToPath = new Hashtable(); | ||
184 | Hashtable packagesHash = new Hashtable(); | ||
185 | ArrayList packages = new ArrayList(); | ||
186 | ClrVersion currentVersion; | ||
187 | |||
188 | #endregion | ||
189 | |||
190 | #region Private Methods | ||
191 | |||
192 | private void mkdirDashP(string dirName) | ||
193 | { | ||
194 | DirectoryInfo di = new DirectoryInfo(dirName); | ||
195 | if (di.Exists) | ||
196 | return; | ||
197 | |||
198 | string parentDirName = System.IO.Path.GetDirectoryName(dirName); | ||
199 | DirectoryInfo parentDi = new DirectoryInfo(parentDirName); | ||
200 | if (!parentDi.Exists) | ||
201 | mkdirDashP(parentDirName); | ||
202 | |||
203 | di.Create(); | ||
204 | } | ||
205 | |||
206 | private void mkStubFiles(string dirName, ArrayList fileNames) | ||
207 | { | ||
208 | for (int i = 0; i < fileNames.Count; i++) | ||
209 | { | ||
210 | string tmpFile = dirName + "/" + (string)fileNames[i]; | ||
211 | |||
212 | FileStream tmpFileStream = | ||
213 | new FileStream(tmpFile, FileMode.Create); | ||
214 | |||
215 | StreamWriter sw = new StreamWriter(tmpFileStream); | ||
216 | sw.WriteLine("These are not the files you are looking for."); | ||
217 | sw.Flush(); | ||
218 | tmpFileStream.Close(); | ||
219 | } | ||
220 | } | ||
221 | |||
222 | private void chkMkDir(string dirName) | ||
223 | { | ||
224 | System.IO.DirectoryInfo di = | ||
225 | new System.IO.DirectoryInfo(dirName); | ||
226 | |||
227 | if (!di.Exists) | ||
228 | di.Create(); | ||
229 | } | ||
230 | |||
231 | private void transformToFile(string filename, XsltArgumentList argList, string nodeName) | ||
232 | { | ||
233 | // Create an XslTransform for this file | ||
234 | XslTransform templateTransformer = | ||
235 | new XslTransform(); | ||
236 | |||
237 | // Load up the template | ||
238 | XmlNode templateNode = | ||
239 | autotoolsDoc.SelectSingleNode(nodeName + "/*"); | ||
240 | templateTransformer.Load(templateNode.CreateNavigator(), xr, e); | ||
241 | |||
242 | // Create a writer for the transformed template | ||
243 | XmlTextWriter templateWriter = | ||
244 | new XmlTextWriter(filename, null); | ||
245 | |||
246 | // Perform transformation, writing the file | ||
247 | templateTransformer.Transform | ||
248 | (m_Kernel.CurrentDoc, argList, templateWriter, xr); | ||
249 | } | ||
250 | |||
251 | string NormalizeAsmName(string name) | ||
252 | { | ||
253 | int i = name.IndexOf(", PublicKeyToken=null"); | ||
254 | if (i != -1) | ||
255 | return name.Substring(0, i).Trim(); | ||
256 | else | ||
257 | return name; | ||
258 | } | ||
259 | |||
260 | private void AddAssembly(string assemblyfile, SystemPackage package) | ||
261 | { | ||
262 | if (!File.Exists(assemblyfile)) | ||
263 | return; | ||
264 | |||
265 | try | ||
266 | { | ||
267 | System.Reflection.AssemblyName an = System.Reflection.AssemblyName.GetAssemblyName(assemblyfile); | ||
268 | assemblyFullNameToPath[NormalizeAsmName(an.FullName)] = assemblyfile; | ||
269 | assemblyPathToPackage[assemblyfile] = package; | ||
270 | } | ||
271 | catch | ||
272 | { | ||
273 | } | ||
274 | } | ||
275 | |||
276 | private ArrayList GetAssembliesWithLibInfo(string line, string file) | ||
277 | { | ||
278 | ArrayList references = new ArrayList(); | ||
279 | ArrayList libdirs = new ArrayList(); | ||
280 | ArrayList retval = new ArrayList(); | ||
281 | foreach (string piece in line.Split(' ')) | ||
282 | { | ||
283 | if (piece.ToLower().Trim().StartsWith("/r:") || piece.ToLower().Trim().StartsWith("-r:")) | ||
284 | { | ||
285 | references.Add(ProcessPiece(piece.Substring(3).Trim(), file)); | ||
286 | } | ||
287 | else if (piece.ToLower().Trim().StartsWith("/lib:") || piece.ToLower().Trim().StartsWith("-lib:")) | ||
288 | { | ||
289 | libdirs.Add(ProcessPiece(piece.Substring(5).Trim(), file)); | ||
290 | } | ||
291 | } | ||
292 | |||
293 | foreach (string refrnc in references) | ||
294 | { | ||
295 | foreach (string libdir in libdirs) | ||
296 | { | ||
297 | if (File.Exists(libdir + Path.DirectorySeparatorChar + refrnc)) | ||
298 | { | ||
299 | retval.Add(libdir + Path.DirectorySeparatorChar + refrnc); | ||
300 | } | ||
301 | } | ||
302 | } | ||
303 | |||
304 | return retval; | ||
305 | } | ||
306 | |||
307 | private ArrayList GetAssembliesWithoutLibInfo(string line, string file) | ||
308 | { | ||
309 | ArrayList references = new ArrayList(); | ||
310 | foreach (string reference in line.Split(' ')) | ||
311 | { | ||
312 | if (reference.ToLower().Trim().StartsWith("/r:") || reference.ToLower().Trim().StartsWith("-r:")) | ||
313 | { | ||
314 | string final_ref = reference.Substring(3).Trim(); | ||
315 | references.Add(ProcessPiece(final_ref, file)); | ||
316 | } | ||
317 | } | ||
318 | return references; | ||
319 | } | ||
320 | |||
321 | private string ProcessPiece(string piece, string pcfile) | ||
322 | { | ||
323 | int start = piece.IndexOf("${"); | ||
324 | if (start == -1) | ||
325 | return piece; | ||
326 | |||
327 | int end = piece.IndexOf("}"); | ||
328 | if (end == -1) | ||
329 | return piece; | ||
330 | |||
331 | string variable = piece.Substring(start + 2, end - start - 2); | ||
332 | string interp = GetVariableFromPkgConfig(variable, Path.GetFileNameWithoutExtension(pcfile)); | ||
333 | return ProcessPiece(piece.Replace("${" + variable + "}", interp), pcfile); | ||
334 | } | ||
335 | |||
336 | private string GetVariableFromPkgConfig(string var, string pcfile) | ||
337 | { | ||
338 | ProcessStartInfo psi = new ProcessStartInfo("pkg-config"); | ||
339 | psi.RedirectStandardOutput = true; | ||
340 | psi.UseShellExecute = false; | ||
341 | psi.Arguments = String.Format("--variable={0} {1}", var, pcfile); | ||
342 | Process p = new Process(); | ||
343 | p.StartInfo = psi; | ||
344 | p.Start(); | ||
345 | string ret = p.StandardOutput.ReadToEnd().Trim(); | ||
346 | p.WaitForExit(); | ||
347 | if (String.IsNullOrEmpty(ret)) | ||
348 | return String.Empty; | ||
349 | return ret; | ||
350 | } | ||
351 | |||
352 | private void ParsePCFile(string pcfile) | ||
353 | { | ||
354 | // Don't register the package twice | ||
355 | string pname = Path.GetFileNameWithoutExtension(pcfile); | ||
356 | if (packagesHash.Contains(pname)) | ||
357 | return; | ||
358 | |||
359 | ArrayList fullassemblies = null; | ||
360 | string version = ""; | ||
361 | string desc = ""; | ||
362 | |||
363 | SystemPackage package = new SystemPackage(); | ||
364 | |||
365 | using (StreamReader reader = new StreamReader(pcfile)) | ||
366 | { | ||
367 | string line; | ||
368 | while ((line = reader.ReadLine()) != null) | ||
369 | { | ||
370 | string lowerLine = line.ToLower(); | ||
371 | if (lowerLine.StartsWith("libs:") && lowerLine.IndexOf(".dll") != -1) | ||
372 | { | ||
373 | string choppedLine = line.Substring(5).Trim(); | ||
374 | if (choppedLine.IndexOf("-lib:") != -1 || choppedLine.IndexOf("/lib:") != -1) | ||
375 | { | ||
376 | fullassemblies = GetAssembliesWithLibInfo(choppedLine, pcfile); | ||
377 | } | ||
378 | else | ||
379 | { | ||
380 | fullassemblies = GetAssembliesWithoutLibInfo(choppedLine, pcfile); | ||
381 | } | ||
382 | } | ||
383 | else if (lowerLine.StartsWith("version:")) | ||
384 | { | ||
385 | // "version:".Length == 8 | ||
386 | version = line.Substring(8).Trim(); | ||
387 | } | ||
388 | else if (lowerLine.StartsWith("description:")) | ||
389 | { | ||
390 | // "description:".Length == 12 | ||
391 | desc = line.Substring(12).Trim(); | ||
392 | } | ||
393 | } | ||
394 | } | ||
395 | |||
396 | if (fullassemblies == null) | ||
397 | return; | ||
398 | |||
399 | foreach (string assembly in fullassemblies) | ||
400 | { | ||
401 | AddAssembly(assembly, package); | ||
402 | } | ||
403 | |||
404 | package.Initialize(pname, | ||
405 | version, | ||
406 | desc, | ||
407 | (string[])fullassemblies.ToArray(typeof(string)), | ||
408 | ClrVersion.Default, | ||
409 | false); | ||
410 | packages.Add(package); | ||
411 | packagesHash[pname] = package; | ||
412 | } | ||
413 | |||
414 | void RegisterSystemAssemblies(string prefix, string version, ClrVersion ver) | ||
415 | { | ||
416 | SystemPackage package = new SystemPackage(); | ||
417 | ArrayList list = new ArrayList(); | ||
418 | |||
419 | string dir = Path.Combine(prefix, version); | ||
420 | if (!Directory.Exists(dir)) | ||
421 | { | ||
422 | return; | ||
423 | } | ||
424 | |||
425 | foreach (string assembly in Directory.GetFiles(dir, "*.dll")) | ||
426 | { | ||
427 | AddAssembly(assembly, package); | ||
428 | list.Add(assembly); | ||
429 | } | ||
430 | |||
431 | package.Initialize("mono", | ||
432 | version, | ||
433 | "The Mono runtime", | ||
434 | (string[])list.ToArray(typeof(string)), | ||
435 | ver, | ||
436 | false); | ||
437 | packages.Add(package); | ||
438 | } | ||
439 | |||
440 | void RunInitialization() | ||
441 | { | ||
442 | string versionDir; | ||
443 | |||
444 | if (Environment.Version.Major == 1) | ||
445 | { | ||
446 | versionDir = "1.0"; | ||
447 | currentVersion = ClrVersion.Net_1_1; | ||
448 | } | ||
449 | else | ||
450 | { | ||
451 | versionDir = "2.0"; | ||
452 | currentVersion = ClrVersion.Net_2_0; | ||
453 | } | ||
454 | |||
455 | //Pull up assemblies from the installed mono system. | ||
456 | string prefix = Path.GetDirectoryName(typeof(int).Assembly.Location); | ||
457 | |||
458 | if (prefix.IndexOf(Path.Combine("mono", versionDir)) == -1) | ||
459 | prefix = Path.Combine(prefix, "mono"); | ||
460 | else | ||
461 | prefix = Path.GetDirectoryName(prefix); | ||
462 | |||
463 | RegisterSystemAssemblies(prefix, "1.0", ClrVersion.Net_1_1); | ||
464 | RegisterSystemAssemblies(prefix, "2.0", ClrVersion.Net_2_0); | ||
465 | |||
466 | string search_dirs = Environment.GetEnvironmentVariable("PKG_CONFIG_PATH"); | ||
467 | string libpath = Environment.GetEnvironmentVariable("PKG_CONFIG_LIBPATH"); | ||
468 | |||
469 | if (String.IsNullOrEmpty(libpath)) | ||
470 | { | ||
471 | string path_dirs = Environment.GetEnvironmentVariable("PATH"); | ||
472 | foreach (string pathdir in path_dirs.Split(Path.PathSeparator)) | ||
473 | { | ||
474 | if (pathdir == null) | ||
475 | continue; | ||
476 | if (File.Exists(pathdir + Path.DirectorySeparatorChar + "pkg-config")) | ||
477 | { | ||
478 | libpath = Path.Combine(pathdir, ".."); | ||
479 | libpath = Path.Combine(libpath, "lib"); | ||
480 | libpath = Path.Combine(libpath, "pkgconfig"); | ||
481 | break; | ||
482 | } | ||
483 | } | ||
484 | } | ||
485 | search_dirs += Path.PathSeparator + libpath; | ||
486 | if (search_dirs != null && search_dirs.Length > 0) | ||
487 | { | ||
488 | ArrayList scanDirs = new ArrayList(); | ||
489 | foreach (string potentialDir in search_dirs.Split(Path.PathSeparator)) | ||
490 | { | ||
491 | if (!scanDirs.Contains(potentialDir)) | ||
492 | scanDirs.Add(potentialDir); | ||
493 | } | ||
494 | foreach (string pcdir in scanDirs) | ||
495 | { | ||
496 | if (pcdir == null) | ||
497 | continue; | ||
498 | |||
499 | if (Directory.Exists(pcdir)) | ||
500 | { | ||
501 | foreach (string pcfile in Directory.GetFiles(pcdir, "*.pc")) | ||
502 | { | ||
503 | ParsePCFile(pcfile); | ||
504 | } | ||
505 | } | ||
506 | } | ||
507 | } | ||
508 | } | ||
509 | |||
510 | private void WriteCombine(SolutionNode solution) | ||
511 | { | ||
512 | #region "Create Solution directory if it doesn't exist" | ||
513 | string solutionDir = Path.Combine(solution.FullPath, | ||
514 | Path.Combine("autotools", | ||
515 | solution.Name)); | ||
516 | chkMkDir(solutionDir); | ||
517 | #endregion | ||
518 | |||
519 | #region "Write Solution-level files" | ||
520 | XsltArgumentList argList = new XsltArgumentList(); | ||
521 | argList.AddParam("solutionName", "", solution.Name); | ||
522 | // $solutionDir is $rootDir/$solutionName/ | ||
523 | transformToFile(Path.Combine(solutionDir, "configure.ac"), | ||
524 | argList, "/Autotools/SolutionConfigureAc"); | ||
525 | transformToFile(Path.Combine(solutionDir, "Makefile.am"), | ||
526 | argList, "/Autotools/SolutionMakefileAm"); | ||
527 | transformToFile(Path.Combine(solutionDir, "autogen.sh"), | ||
528 | argList, "/Autotools/SolutionAutogenSh"); | ||
529 | #endregion | ||
530 | |||
531 | foreach (ProjectNode project in solution.ProjectsTableOrder) | ||
532 | { | ||
533 | m_Kernel.Log.Write(String.Format("Writing project: {0}", | ||
534 | project.Name)); | ||
535 | WriteProject(solution, project); | ||
536 | } | ||
537 | } | ||
538 | private static string PrependPath(string path) | ||
539 | { | ||
540 | string tmpPath = Helper.NormalizePath(path, '/'); | ||
541 | Regex regex = new Regex(@"(\w):/(\w+)"); | ||
542 | Match match = regex.Match(tmpPath); | ||
543 | if (match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') | ||
544 | { | ||
545 | tmpPath = Helper.NormalizePath(tmpPath); | ||
546 | } | ||
547 | else | ||
548 | { | ||
549 | tmpPath = Helper.NormalizePath("./" + tmpPath); | ||
550 | } | ||
551 | |||
552 | return tmpPath; | ||
553 | } | ||
554 | |||
555 | private static string BuildReference(SolutionNode solution, | ||
556 | ReferenceNode refr) | ||
557 | { | ||
558 | string ret = ""; | ||
559 | if (solution.ProjectsTable.ContainsKey(refr.Name)) | ||
560 | { | ||
561 | ProjectNode project = | ||
562 | (ProjectNode)solution.ProjectsTable[refr.Name]; | ||
563 | string fileRef = FindFileReference(refr.Name, project); | ||
564 | string finalPath = | ||
565 | Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + | ||
566 | "/$(BUILD_DIR)/$(CONFIG)/", | ||
567 | refr.Name, "dll"), | ||
568 | '/'); | ||
569 | ret += finalPath; | ||
570 | return ret; | ||
571 | } | ||
572 | else | ||
573 | { | ||
574 | ProjectNode project = (ProjectNode)refr.Parent; | ||
575 | string fileRef = FindFileReference(refr.Name, project); | ||
576 | |||
577 | if (refr.Path != null || fileRef != null) | ||
578 | { | ||
579 | string finalPath = ((refr.Path != null) ? | ||
580 | Helper.NormalizePath(refr.Path + "/" + | ||
581 | refr.Name + ".dll", | ||
582 | '/') : | ||
583 | fileRef | ||
584 | ); | ||
585 | ret += Path.Combine(project.Path, finalPath); | ||
586 | return ret; | ||
587 | } | ||
588 | |||
589 | try | ||
590 | { | ||
591 | //Assembly assem = Assembly.Load(refr.Name); | ||
122 | //if (assem != null) | 592 | //if (assem != null) |
123 | //{ | 593 | //{ |
124 | // int index = refr.Name.IndexOf(","); | 594 | // int index = refr.Name.IndexOf(","); |
@@ -135,629 +605,971 @@ namespace Prebuild.Core.Targets | |||
135 | //} | 605 | //} |
136 | //else | 606 | //else |
137 | //{ | 607 | //{ |
138 | int index = refr.Name.IndexOf(","); | 608 | int index = refr.Name.IndexOf(","); |
139 | if ( index > 0) | 609 | if (index > 0) |
140 | { | 610 | { |
141 | ret += refr.Name.Substring(0, index) + ".dll"; | 611 | ret += refr.Name.Substring(0, index) + ".dll"; |
142 | //Console.WriteLine("Location3: " + assem.Location); | 612 | //Console.WriteLine("Location3: " + assem.Location); |
143 | } | 613 | } |
144 | else | 614 | else |
145 | { | 615 | { |
146 | ret += (refr.Name + ".dll"); | 616 | ret += (refr.Name + ".dll"); |
147 | //Console.WriteLine("Location4: " + assem.Location); | 617 | //Console.WriteLine("Location4: " + assem.Location); |
148 | } | 618 | } |
149 | //} | 619 | //} |
150 | } | 620 | } |
151 | catch (System.NullReferenceException e) | 621 | catch (System.NullReferenceException e) |
152 | { | 622 | { |
153 | e.ToString(); | 623 | e.ToString(); |
154 | int index = refr.Name.IndexOf(","); | 624 | int index = refr.Name.IndexOf(","); |
155 | if ( index > 0) | 625 | if (index > 0) |
156 | { | 626 | { |
157 | ret += refr.Name.Substring(0, index) + ".dll"; | 627 | ret += refr.Name.Substring(0, index) + ".dll"; |
158 | //Console.WriteLine("Location5: " + assem.Location); | 628 | //Console.WriteLine("Location5: " + assem.Location); |
159 | } | 629 | } |
160 | else | 630 | else |
161 | { | 631 | { |
162 | ret += (refr.Name + ".dll"); | 632 | ret += (refr.Name + ".dll"); |
163 | //Console.WriteLine("Location6: " + assem.Location); | 633 | //Console.WriteLine("Location6: " + assem.Location); |
164 | } | 634 | } |
165 | } | 635 | } |
166 | } | 636 | } |
167 | return ret; | 637 | return ret; |
168 | } | 638 | } |
169 | 639 | ||
170 | private static string BuildReferencePath(SolutionNode solution, ReferenceNode refr) | 640 | private static string BuildReferencePath(SolutionNode solution, |
171 | { | 641 | ReferenceNode refr) |
172 | string ret = ""; | 642 | { |
173 | if(solution.ProjectsTable.ContainsKey(refr.Name)) | 643 | string ret = ""; |
174 | { | 644 | if (solution.ProjectsTable.ContainsKey(refr.Name)) |
175 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; | 645 | { |
176 | string finalPath = Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + "/${build.dir}/"), '/'); | 646 | ProjectNode project = |
177 | ret += finalPath; | 647 | (ProjectNode)solution.ProjectsTable[refr.Name]; |
178 | return ret; | 648 | string finalPath = |
179 | } | 649 | Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + |
180 | else | 650 | "/${build.dir}/"), |
181 | { | 651 | '/'); |
182 | ProjectNode project = (ProjectNode)refr.Parent; | 652 | ret += finalPath; |
183 | string fileRef = FindFileReference(refr.Name, project); | 653 | return ret; |
184 | 654 | } | |
185 | 655 | else | |
186 | if(refr.Path != null || fileRef != null) | 656 | { |
187 | { | 657 | ProjectNode project = (ProjectNode)refr.Parent; |
188 | string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path, '/') : fileRef; | 658 | string fileRef = FindFileReference(refr.Name, project); |
189 | ret += finalPath; | 659 | |
190 | return ret; | 660 | if (refr.Path != null || fileRef != null) |
191 | } | 661 | { |
192 | 662 | string finalPath = ((refr.Path != null) ? | |
193 | try | 663 | Helper.NormalizePath(refr.Path, '/') : |
194 | { | 664 | fileRef |
195 | Assembly assem = Assembly.Load(refr.Name); | 665 | ); |
196 | if (assem != null) | 666 | ret += finalPath; |
197 | { | 667 | return ret; |
198 | ret += ""; | 668 | } |
199 | } | 669 | |
200 | else | 670 | try |
201 | { | 671 | { |
202 | ret += ""; | 672 | Assembly assem = Assembly.Load(refr.Name); |
203 | } | 673 | if (assem != null) |
204 | } | 674 | { |
205 | catch (System.NullReferenceException e) | 675 | ret += ""; |
206 | { | 676 | } |
207 | e.ToString(); | 677 | else |
208 | ret += ""; | 678 | { |
209 | } | 679 | ret += ""; |
210 | } | 680 | } |
211 | return ret; | 681 | } |
212 | } | 682 | catch (System.NullReferenceException e) |
213 | 683 | { | |
214 | private static string FindFileReference(string refName, ProjectNode project) | 684 | e.ToString(); |
215 | { | 685 | ret += ""; |
216 | foreach(ReferencePathNode refPath in project.ReferencePaths) | 686 | } |
217 | { | 687 | } |
218 | string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll"); | 688 | return ret; |
219 | 689 | } | |
220 | if(File.Exists(fullPath)) | 690 | |
221 | { | 691 | private static string FindFileReference(string refName, |
222 | return fullPath; | 692 | ProjectNode project) |
223 | } | 693 | { |
224 | } | 694 | foreach (ReferencePathNode refPath in project.ReferencePaths) |
225 | 695 | { | |
226 | return null; | 696 | string fullPath = |
227 | } | 697 | Helper.MakeFilePath(refPath.Path, refName, "dll"); |
228 | 698 | ||
229 | /// <summary> | 699 | if (File.Exists(fullPath)) { |
230 | /// Gets the XML doc file. | 700 | return fullPath; |
231 | /// </summary> | 701 | } |
232 | /// <param name="project">The project.</param> | 702 | } |
233 | /// <param name="conf">The conf.</param> | 703 | |
234 | /// <returns></returns> | 704 | return null; |
235 | public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) | 705 | } |
236 | { | 706 | |
237 | if( conf == null ) | 707 | /// <summary> |
238 | { | 708 | /// Gets the XML doc file. |
239 | throw new ArgumentNullException("conf"); | 709 | /// </summary> |
240 | } | 710 | /// <param name="project">The project.</param> |
241 | if( project == null ) | 711 | /// <param name="conf">The conf.</param> |
242 | { | 712 | /// <returns></returns> |
243 | throw new ArgumentNullException("project"); | 713 | public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) |
244 | } | 714 | { |
245 | string docFile = (string)conf.Options["XmlDocFile"]; | 715 | if (conf == null) |
246 | // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified | 716 | { |
247 | // { | 717 | throw new ArgumentNullException("conf"); |
248 | // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml"; | 718 | } |
249 | // } | 719 | if (project == null) |
250 | return docFile; | 720 | { |
251 | } | 721 | throw new ArgumentNullException("project"); |
252 | 722 | } | |
253 | /// <summary> | 723 | string docFile = (string)conf.Options["XmlDocFile"]; |
254 | /// Normalizes the path. | 724 | // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified |
255 | /// </summary> | 725 | // { |
256 | /// <param name="path">The path.</param> | 726 | // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml"; |
257 | /// <returns></returns> | 727 | // } |
258 | public static string NormalizePath(string path) | 728 | return docFile; |
259 | { | 729 | } |
260 | if(path == null) | 730 | |
261 | { | 731 | /// <summary> |
262 | return ""; | 732 | /// Normalizes the path. |
263 | } | 733 | /// </summary> |
264 | 734 | /// <param name="path">The path.</param> | |
265 | StringBuilder tmpPath; | 735 | /// <returns></returns> |
266 | 736 | public static string NormalizePath(string path) | |
267 | if (Core.Parse.Preprocessor.GetOS() == "Win32") | 737 | { |
268 | { | 738 | if (path == null) |
269 | tmpPath = new StringBuilder(path.Replace('\\', '/')); | 739 | { |
270 | tmpPath.Replace("/", @"\\"); | 740 | return ""; |
271 | } | 741 | } |
272 | else | 742 | |
273 | { | 743 | StringBuilder tmpPath; |
274 | tmpPath = new StringBuilder(path.Replace('\\', '/')); | 744 | |
275 | tmpPath = tmpPath.Replace('/', Path.DirectorySeparatorChar); | 745 | if (Core.Parse.Preprocessor.GetOS() == "Win32") |
276 | } | 746 | { |
277 | return tmpPath.ToString(); | 747 | tmpPath = new StringBuilder(path.Replace('\\', '/')); |
278 | } | 748 | tmpPath.Replace("/", @"\\"); |
279 | 749 | } | |
280 | private void WriteProject(SolutionNode solution, ProjectNode project) | 750 | else |
281 | { | 751 | { |
282 | string projFile = Helper.MakeFilePath(project.FullPath, "Include", "am"); | 752 | tmpPath = new StringBuilder(path.Replace('\\', '/')); |
283 | StreamWriter ss = new StreamWriter(projFile); | 753 | tmpPath = tmpPath.Replace('/', Path.DirectorySeparatorChar); |
284 | ss.NewLine = "\n"; | 754 | } |
285 | 755 | return tmpPath.ToString(); | |
286 | m_Kernel.CurrentWorkingDirectory.Push(); | 756 | } |
287 | Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); | 757 | |
288 | 758 | private void WriteProject(SolutionNode solution, ProjectNode project) | |
289 | using(ss) | 759 | { |
290 | { | 760 | string solutionDir = Path.Combine(solution.FullPath, Path.Combine("autotools", solution.Name)); |
291 | ss.WriteLine(Helper.AssemblyFullName(project.AssemblyName, project.Type) + ":"); | 761 | string projectDir = Path.Combine(solutionDir, project.Name); |
292 | ss.WriteLine("\tmkdir -p " + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/"); | 762 | string projectVersion = project.Version; |
293 | foreach(string file in project.Files) | 763 | bool hasAssemblyConfig = false; |
294 | { | 764 | chkMkDir(projectDir); |
295 | if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) | 765 | |
296 | { | 766 | ArrayList |
297 | ss.Write("\tresgen "); | 767 | compiledFiles = new ArrayList(), |
298 | ss.Write(Helper.NormalizePath(Path.Combine(project.Path, file.Substring(0, file.LastIndexOf('.')) + ".resx "), '/')); | 768 | contentFiles = new ArrayList(), |
299 | if (project.Files.GetResourceName(file) != "") | 769 | embeddedFiles = new ArrayList(), |
300 | { | 770 | |
301 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/')); | 771 | binaryLibs = new ArrayList(), |
302 | } | 772 | pkgLibs = new ArrayList(), |
303 | else | 773 | systemLibs = new ArrayList(), |
304 | { | 774 | runtimeLibs = new ArrayList(), |
305 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/')); | 775 | |
306 | } | 776 | extraDistFiles = new ArrayList(), |
307 | } | 777 | localCopyTargets = new ArrayList(); |
308 | } | 778 | |
309 | ss.WriteLine("\t$(CSC)\t/out:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " \\"); | 779 | // If there exists a .config file for this assembly, copy it to the project folder |
310 | ss.WriteLine("\t\t/target:" + project.Type.ToString().ToLower() + " \\"); | 780 | // TODO: Support copying .config.osx files |
311 | if (project.References.Count > 0) | 781 | // TODO: support processing the .config file for native library deps |
312 | { | 782 | string projectAssemblyName = project.Name; |
313 | ss.Write("\t\t/reference:"); | 783 | if (project.AssemblyName != null) |
314 | bool firstref = true; | 784 | projectAssemblyName = project.AssemblyName; |
315 | foreach(ReferenceNode refr in project.References) | 785 | |
316 | { | 786 | if (File.Exists(Path.Combine(project.FullPath, projectAssemblyName) + ".dll.config")) |
317 | if (firstref) | 787 | { |
318 | { | 788 | hasAssemblyConfig = true; |
319 | firstref = false; | 789 | System.IO.File.Copy(Path.Combine(project.FullPath, projectAssemblyName + ".dll.config"), Path.Combine(projectDir, projectAssemblyName + ".dll.config"), true); |
320 | } | 790 | extraDistFiles.Add(project.AssemblyName + ".dll.config"); |
321 | else | 791 | } |
322 | { | 792 | |
323 | ss.Write(","); | 793 | foreach (ConfigurationNode conf in project.Configurations) |
324 | } | 794 | { |
325 | ss.Write("{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(solution.FullPath, BuildReference(solution, refr)), '/')); | 795 | if (conf.Options.KeyFile != string.Empty) |
326 | } | 796 | { |
327 | ss.WriteLine(" \\"); | 797 | // Copy snk file into the project's directory |
328 | } | 798 | // Use the snk from the project directory directly |
329 | //ss.WriteLine("\t\tProperties/AssemblyInfo.cs \\"); | 799 | string source = Path.Combine(project.FullPath, conf.Options.KeyFile); |
330 | 800 | string keyFile = conf.Options.KeyFile; | |
331 | foreach(string file in project.Files) | 801 | Regex re = new Regex(".*/"); |
332 | { | 802 | keyFile = re.Replace(keyFile, ""); |
333 | switch(project.Files.GetBuildAction(file)) | 803 | |
334 | { | 804 | string dest = Path.Combine(projectDir, keyFile); |
335 | case BuildAction.EmbeddedResource: | 805 | // Tell the user if there's a problem copying the file |
336 | ss.Write("\t\t/resource:"); | 806 | try |
337 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, file), '/') + " \\"); | 807 | { |
338 | break; | 808 | mkdirDashP(System.IO.Path.GetDirectoryName(dest)); |
339 | default: | 809 | System.IO.File.Copy(source, dest, true); |
340 | if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) | 810 | } |
341 | { | 811 | catch (System.IO.IOException e) |
342 | ss.Write("\t\t/resource:"); | 812 | { |
343 | if (project.Files.GetResourceName(file) != "") | 813 | Console.WriteLine(e.Message); |
344 | { | 814 | } |
345 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/') + "," + project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources" + " \\"); | 815 | } |
346 | } | 816 | } |
347 | else | 817 | |
348 | { | 818 | // Copy compiled, embedded and content files into the project's directory |
349 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/') + "," + project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources" + " \\"); | 819 | foreach (string filename in project.Files) |
350 | } | 820 | { |
351 | } | 821 | string source = Path.Combine(project.FullPath, filename); |
352 | break; | 822 | string dest = Path.Combine(projectDir, filename); |
353 | } | 823 | |
354 | } | 824 | if (filename.Contains("AssemblyInfo.cs")) |
355 | 825 | { | |
356 | foreach(ConfigurationNode conf in project.Configurations) | 826 | // If we've got an AssemblyInfo.cs, pull the version number from it |
357 | { | 827 | string[] sources = { source }; |
358 | if (conf.Options.KeyFile !="") | 828 | string[] args = { "" }; |
359 | { | 829 | Microsoft.CSharp.CSharpCodeProvider cscp = |
360 | ss.WriteLine("\t\t/keyfile:" + Helper.NormalizePath(Path.Combine(project.Path, conf.Options.KeyFile), '/') + " \\"); | 830 | new Microsoft.CSharp.CSharpCodeProvider(); |
361 | break; | 831 | |
362 | } | 832 | string tempAssemblyFile = Path.Combine(Path.GetTempPath(), project.Name + "-temp.dll"); |
363 | } | 833 | System.CodeDom.Compiler.CompilerParameters cparam = |
364 | foreach(ConfigurationNode conf in project.Configurations) | 834 | new System.CodeDom.Compiler.CompilerParameters(args, tempAssemblyFile); |
365 | { | 835 | |
366 | if (conf.Options.AllowUnsafe) | 836 | System.CodeDom.Compiler.CompilerResults cr = |
367 | { | 837 | cscp.CompileAssemblyFromFile(cparam, sources); |
368 | ss.WriteLine("\t\t/unsafe \\"); | 838 | |
369 | break; | 839 | foreach (System.CodeDom.Compiler.CompilerError error in cr.Errors) |
370 | } | 840 | Console.WriteLine("Error! '{0}'", error.ErrorText); |
371 | } | 841 | |
372 | if (project.AppIcon != "") | 842 | string projectFullName = cr.CompiledAssembly.FullName; |
373 | { | 843 | Regex verRegex = new Regex("Version=([\\d\\.]+)"); |
374 | ss.WriteLine("\t\t/win32icon:" + Helper.NormalizePath(Path.Combine(project.Path, project.AppIcon), '/') + " \\"); | 844 | Match verMatch = verRegex.Match(projectFullName); |
375 | } | 845 | if (verMatch.Success) |
376 | 846 | projectVersion = verMatch.Groups[1].Value; | |
377 | foreach(ConfigurationNode conf in project.Configurations) | 847 | |
378 | { | 848 | // Clean up the temp file |
379 | ss.WriteLine("\t\t/define:{0}", conf.Options.CompilerDefines.Replace(';', ',') + " \\"); | 849 | try |
380 | break; | 850 | { |
381 | } | 851 | if (File.Exists(tempAssemblyFile)) |
382 | 852 | File.Delete(tempAssemblyFile); | |
383 | foreach(ConfigurationNode conf in project.Configurations) | 853 | } |
384 | { | 854 | catch |
385 | if (GetXmlDocFile(project, conf) !="") | 855 | { |
386 | { | 856 | //Console.WriteLine("Error! '{0}'", e.ToString()); |
387 | ss.WriteLine("\t\t/doc:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + project.Name + ".xml \\"); | 857 | } |
388 | break; | 858 | |
389 | } | 859 | } |
390 | } | 860 | |
391 | foreach(string file in project.Files) | 861 | // Tell the user if there's a problem copying the file |
392 | { | 862 | try |
393 | switch(project.Files.GetBuildAction(file)) | 863 | { |
394 | { | 864 | mkdirDashP(System.IO.Path.GetDirectoryName(dest)); |
395 | case BuildAction.Compile: | 865 | System.IO.File.Copy(source, dest, true); |
396 | ss.WriteLine("\t\t\\"); | 866 | } |
397 | ss.Write("\t\t" + NormalizePath(Path.Combine(Helper.MakePathRelativeTo(solution.FullPath, project.Path), file))); | 867 | catch (System.IO.IOException e) |
398 | break; | 868 | { |
399 | default: | 869 | Console.WriteLine(e.Message); |
400 | break; | 870 | } |
401 | } | 871 | |
402 | } | 872 | switch (project.Files.GetBuildAction(filename)) |
403 | ss.WriteLine(); | 873 | { |
404 | ss.WriteLine(); | 874 | case BuildAction.Compile: |
405 | 875 | compiledFiles.Add(filename); | |
406 | if (project.Type == ProjectType.Library) | 876 | break; |
407 | { | 877 | case BuildAction.Content: |
408 | ss.WriteLine("install-data-local:"); | 878 | contentFiles.Add(filename); |
409 | ss.WriteLine(" echo \"$(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS)\"; \\"); | 879 | extraDistFiles.Add(filename); |
410 | ss.WriteLine(" $(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS) || exit 1;"); | 880 | break; |
411 | ss.WriteLine(); | 881 | case BuildAction.EmbeddedResource: |
412 | ss.WriteLine("uninstall-local:"); | 882 | embeddedFiles.Add(filename); |
413 | ss.WriteLine(" echo \"$(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS)\"; \\"); | 883 | break; |
414 | ss.WriteLine(" $(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS) || exit 1;"); | 884 | } |
415 | ss.WriteLine(); | 885 | } |
416 | } | 886 | |
417 | ss.WriteLine("CLEANFILES = $(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".mdb $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".pdb " + project.AssemblyName + ".xml"); | 887 | // Set up references |
418 | ss.WriteLine("EXTRA_DIST = \\"); | 888 | for (int refNum = 0; refNum < project.References.Count; refNum++) |
419 | ss.Write(" $(FILES)"); | 889 | { |
420 | foreach(ConfigurationNode conf in project.Configurations) | 890 | ReferenceNode refr = (ReferenceNode)project.References[refNum]; |
421 | { | 891 | Assembly refAssembly = Assembly.LoadWithPartialName(refr.Name); |
422 | if (conf.Options.KeyFile != "") | 892 | |
423 | { | 893 | /* Determine which pkg-config (.pc) file refers to |
424 | ss.Write(" \\"); | 894 | this assembly */ |
425 | ss.WriteLine("\t" + conf.Options.KeyFile); | 895 | |
426 | } | 896 | SystemPackage package = null; |
427 | break; | 897 | |
428 | } | 898 | if (packagesHash.Contains(refr.Name)){ |
429 | } | 899 | package = (SystemPackage)packagesHash[refr.Name]; |
430 | m_Kernel.CurrentWorkingDirectory.Pop(); | 900 | |
431 | } | 901 | }else{ |
432 | bool hasLibrary = false; | 902 | string assemblyFullName = string.Empty; |
433 | 903 | if (refAssembly != null) | |
434 | private void WriteCombine(SolutionNode solution) | 904 | assemblyFullName = refAssembly.FullName; |
435 | { | 905 | |
436 | 906 | string assemblyFileName = string.Empty; | |
437 | /* TODO: These vars should be pulled from the prebuild.xml file */ | 907 | if (assemblyFullName != string.Empty && |
438 | string releaseVersion = "2.0.0"; | 908 | assemblyFullNameToPath.Contains(assemblyFullName) |
439 | string assemblyVersion = "2.1.0.0"; | 909 | ) |
440 | string description = | 910 | assemblyFileName = |
441 | "Tao Framework " + solution.Name + " Binding For .NET"; | 911 | (string)assemblyFullNameToPath[assemblyFullName]; |
442 | 912 | ||
443 | hasLibrary = false; | 913 | if (assemblyFileName != string.Empty && |
444 | m_Kernel.Log.Write("Creating Autotools make files"); | 914 | assemblyPathToPackage.Contains(assemblyFileName) |
445 | foreach(ProjectNode project in solution.Projects) | 915 | ) |
446 | { | 916 | package = (SystemPackage)assemblyPathToPackage[assemblyFileName]; |
447 | if(m_Kernel.AllowProject(project.FilterGroups)) | 917 | |
448 | { | 918 | } |
449 | m_Kernel.Log.Write("...Creating makefile: {0}", project.Name); | 919 | |
450 | WriteProject(solution, project); | 920 | /* If we know the .pc file and it is not "mono" |
451 | } | 921 | (already in the path), add a -pkg: argument */ |
452 | } | 922 | |
453 | 923 | if (package != null && | |
454 | m_Kernel.Log.Write(""); | 924 | package.Name != "mono" && |
455 | string combFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am"); | 925 | !pkgLibs.Contains(package.Name) |
456 | StreamWriter ss = new StreamWriter(combFile); | 926 | ) |
457 | ss.NewLine = "\n"; | 927 | pkgLibs.Add(package.Name); |
458 | 928 | ||
459 | m_Kernel.CurrentWorkingDirectory.Push(); | 929 | string fileRef = |
460 | Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); | 930 | FindFileReference(refr.Name, (ProjectNode)refr.Parent); |
461 | 931 | ||
462 | using(ss) | 932 | if (refr.LocalCopy || |
463 | { | 933 | solution.ProjectsTable.ContainsKey(refr.Name) || |
464 | foreach(ProjectNode project in solution.ProjectsTableOrder) | 934 | fileRef != null || |
465 | { | 935 | refr.Path != null |
466 | if (project.Type == ProjectType.Library) | 936 | ) |
467 | { | 937 | { |
468 | hasLibrary = true; | 938 | |
469 | break; | 939 | /* Attempt to copy the referenced lib to the |
470 | } | 940 | project's directory */ |
471 | } | 941 | |
472 | 942 | string filename = refr.Name + ".dll"; | |
473 | if (hasLibrary) | 943 | string source = filename; |
474 | { | 944 | if (refr.Path != null) |
475 | ss.Write("pkgconfig_in_files = "); | 945 | source = Path.Combine(refr.Path, source); |
476 | foreach(ProjectNode project in solution.ProjectsTableOrder) | 946 | source = Path.Combine(project.FullPath, source); |
477 | { | 947 | string dest = Path.Combine(projectDir, filename); |
478 | if (project.Type == ProjectType.Library) | 948 | |
479 | { | 949 | /* Since we depend on this binary dll to build, we |
480 | string combFilepc = Helper.MakeFilePath(solution.FullPath, project.Name, "pc.in"); | 950 | * will add a compile- time dependency on the |
481 | ss.Write(" " + project.Name + ".pc.in "); | 951 | * copied dll, and add the dll to the list of |
482 | StreamWriter sspc = new StreamWriter(combFilepc); | 952 | * files distributed with this package |
483 | sspc.NewLine = "\n"; | 953 | */ |
484 | using(sspc) | 954 | |
485 | { | 955 | binaryLibs.Add(refr.Name + ".dll"); |
486 | sspc.WriteLine("prefix=@prefix@"); | 956 | extraDistFiles.Add(refr.Name + ".dll"); |
487 | sspc.WriteLine("exec_prefix=${prefix}"); | 957 | |
488 | sspc.WriteLine("libdir=${exec_prefix}/lib"); | 958 | // TODO: Support copying .config.osx files |
489 | sspc.WriteLine(); | 959 | // TODO: Support for determining native dependencies |
490 | sspc.WriteLine("Name: @PACKAGE_NAME@"); | 960 | if (File.Exists(source + ".config")) |
491 | sspc.WriteLine("Description: @DESCRIPTION@"); | 961 | { |
492 | sspc.WriteLine("Version: @ASSEMBLY_VERSION@"); | 962 | System.IO.File.Copy(source + ".config", Path.GetDirectoryName(dest), true); |
493 | sspc.WriteLine("Libs: -r:${libdir}/mono/gac/@PACKAGE_NAME@/@ASSEMBLY_VERSION@__@PUBKEY@/@PACKAGE_NAME@.dll"); | 963 | extraDistFiles.Add(refr.Name + ".dll.config"); |
494 | } | 964 | } |
495 | } | 965 | |
496 | } | 966 | try |
497 | 967 | { | |
498 | ss.WriteLine(); | 968 | System.IO.File.Copy(source, dest, true); |
499 | ss.WriteLine("pkgconfigdir=$(prefix)/lib/pkgconfig"); | 969 | } |
500 | ss.WriteLine("pkgconfig_DATA=$(pkgconfig_in_files:.pc.in=.pc)"); | 970 | catch (System.IO.IOException) |
501 | } | 971 | { |
502 | ss.WriteLine(); | 972 | if (solution.ProjectsTable.ContainsKey(refr.Name)){ |
503 | foreach(ProjectNode project in solution.ProjectsTableOrder) | 973 | |
504 | { | 974 | /* If an assembly is referenced, marked for |
505 | string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | 975 | * local copy, in the list of projects for |
506 | ss.WriteLine("-include x {0}", | 976 | * this solution, but does not exist, put a |
507 | Helper.NormalizePath(Helper.MakeFilePath(path, "Include", "am"),'/')); | 977 | * target into the Makefile.am to build the |
508 | } | 978 | * assembly and copy it to this project's |
509 | ss.WriteLine(); | 979 | * directory |
510 | ss.WriteLine("all: \\"); | 980 | */ |
511 | ss.Write("\t"); | 981 | |
512 | foreach(ProjectNode project in solution.ProjectsTableOrder) | 982 | ProjectNode sourcePrj = |
513 | { | 983 | ((ProjectNode)(solution.ProjectsTable[refr.Name])); |
514 | string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | 984 | |
515 | ss.Write(Helper.AssemblyFullName(project.AssemblyName, project.Type) + " "); | 985 | string target = |
516 | 986 | String.Format("{0}:\n" + | |
517 | } | 987 | "\t$(MAKE) -C ../{1}\n" + |
518 | ss.WriteLine(); | 988 | "\tln ../{2}/$@ $@\n", |
519 | if (hasLibrary) | 989 | filename, |
520 | { | 990 | sourcePrj.Name, |
521 | ss.WriteLine("EXTRA_DIST = \\"); | 991 | sourcePrj.Name ); |
522 | ss.WriteLine("\t$(pkgconfig_in_files)"); | 992 | |
523 | } | 993 | localCopyTargets.Add(target); |
524 | else | 994 | } |
525 | { | 995 | } |
526 | ss.WriteLine("EXTRA_DIST = "); | 996 | } |
527 | } | 997 | else if( !pkgLibs.Contains(refr.Name) ) |
528 | ss.WriteLine(); | 998 | { |
529 | ss.WriteLine("DISTCLEANFILES = \\"); | 999 | // Else, let's assume it's in the GAC or the lib path |
530 | ss.WriteLine("\tconfigure \\"); | 1000 | string assemName = string.Empty; |
531 | ss.WriteLine("\tMakefile.in \\"); | 1001 | int index = refr.Name.IndexOf(","); |
532 | ss.WriteLine("\taclocal.m4"); | 1002 | |
533 | } | 1003 | if (index > 0) |
534 | combFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac"); | 1004 | assemName = refr.Name.Substring(0, index); |
535 | StreamWriter ts = new StreamWriter(combFile); | 1005 | else |
536 | ts.NewLine = "\n"; | 1006 | assemName = refr.Name; |
537 | using(ts) | 1007 | |
538 | { | 1008 | m_Kernel.Log.Write(String.Format( |
539 | if (this.hasLibrary) | 1009 | "Warning: Couldn't find an appropriate assembly " + |
540 | { | 1010 | "for reference:\n'{0}'", refr.Name |
541 | foreach(ProjectNode project in solution.ProjectsTableOrder) | 1011 | )); |
542 | { | 1012 | systemLibs.Add(assemName); |
543 | if (project.Type == ProjectType.Library) | 1013 | } |
544 | { | 1014 | } |
545 | ts.WriteLine("AC_INIT(" + project.Name + ".pc.in)"); | 1015 | |
546 | break; | 1016 | string lineSep = " \\\n\t"; |
547 | } | 1017 | string compiledFilesString = string.Empty; |
548 | } | 1018 | if (compiledFiles.Count > 0) |
549 | } | 1019 | compiledFilesString = |
550 | else | 1020 | lineSep + string.Join(lineSep, (string[])compiledFiles.ToArray(typeof(string))); |
551 | { | 1021 | |
552 | ts.WriteLine("AC_INIT(Makefile.am)"); | 1022 | string embeddedFilesString = ""; |
553 | } | 1023 | if (embeddedFiles.Count > 0) |
554 | ts.WriteLine("AC_PREREQ(2.53)"); | 1024 | embeddedFilesString = |
555 | ts.WriteLine("AC_CANONICAL_SYSTEM"); | 1025 | lineSep + string.Join(lineSep, (string[])embeddedFiles.ToArray(typeof(string))); |
556 | 1026 | ||
557 | ts.WriteLine("PACKAGE_NAME={0}", solution.Name); | 1027 | string contentFilesString = ""; |
558 | ts.WriteLine("PACKAGE_VERSION={0}", releaseVersion); | 1028 | if (contentFiles.Count > 0) |
559 | ts.WriteLine("DESCRIPTION=\"{0}\"", description); | 1029 | contentFilesString = |
560 | ts.WriteLine("AC_SUBST(DESCRIPTION)"); | 1030 | lineSep + string.Join(lineSep, (string[])contentFiles.ToArray(typeof(string))); |
561 | ts.WriteLine("AM_INIT_AUTOMAKE([$PACKAGE_NAME],[$PACKAGE_VERSION],[$DESCRIPTION])"); | 1031 | |
562 | 1032 | string extraDistFilesString = ""; | |
563 | ts.WriteLine("ASSEMBLY_VERSION={0}", assemblyVersion); | 1033 | if (extraDistFiles.Count > 0) |
564 | ts.WriteLine("AC_SUBST(ASSEMBLY_VERSION)"); | 1034 | extraDistFilesString = |
565 | 1035 | lineSep + string.Join(lineSep, (string[])extraDistFiles.ToArray(typeof(string))); | |
566 | ts.WriteLine("PUBKEY=`sn -t $PACKAGE_NAME.snk | grep 'Public Key Token' | awk -F: '{print $2}' | sed -e 's/^ //'`"); | 1036 | |
567 | ts.WriteLine("AC_SUBST(PUBKEY)"); | 1037 | string pkgLibsString = ""; |
568 | 1038 | if (pkgLibs.Count > 0) | |
569 | ts.WriteLine(); | 1039 | pkgLibsString = |
570 | ts.WriteLine("AM_MAINTAINER_MODE"); | 1040 | lineSep + string.Join(lineSep, (string[])pkgLibs.ToArray(typeof(string))); |
571 | ts.WriteLine(); | 1041 | |
572 | ts.WriteLine("dnl AC_PROG_INTLTOOL([0.25])"); | 1042 | string binaryLibsString = ""; |
573 | ts.WriteLine(); | 1043 | if (binaryLibs.Count > 0) |
574 | ts.WriteLine("AC_PROG_INSTALL"); | 1044 | binaryLibsString = |
575 | ts.WriteLine(); | 1045 | lineSep + string.Join(lineSep, (string[])binaryLibs.ToArray(typeof(string))); |
576 | ts.WriteLine("MONO_REQUIRED_VERSION=1.1"); | 1046 | |
577 | ts.WriteLine(); | 1047 | string systemLibsString = ""; |
578 | ts.WriteLine("AC_MSG_CHECKING([whether we're compiling from CVS])"); | 1048 | if (systemLibs.Count > 0) |
579 | ts.WriteLine("if test -f \"$srcdir/.cvs_version\" ; then"); | 1049 | systemLibsString = |
580 | ts.WriteLine(" from_cvs=yes"); | 1050 | lineSep + string.Join(lineSep, (string[])systemLibs.ToArray(typeof(string))); |
581 | ts.WriteLine("else"); | 1051 | |
582 | ts.WriteLine(" if test -f \"$srcdir/.svn\" ; then"); | 1052 | string localCopyTargetsString = ""; |
583 | ts.WriteLine(" from_cvs=yes"); | 1053 | if (localCopyTargets.Count > 0) |
584 | ts.WriteLine(" else"); | 1054 | localCopyTargetsString = |
585 | ts.WriteLine(" from_cvs=no"); | 1055 | string.Join("\n", (string[])localCopyTargets.ToArray(typeof(string))); |
586 | ts.WriteLine(" fi"); | 1056 | |
587 | ts.WriteLine("fi"); | 1057 | string monoPath = ""; |
588 | ts.WriteLine(); | 1058 | foreach (string runtimeLib in runtimeLibs) |
589 | ts.WriteLine("AC_MSG_RESULT($from_cvs)"); | 1059 | { |
590 | ts.WriteLine(); | 1060 | monoPath += ":`pkg-config --variable=libdir " + runtimeLib + "`"; |
591 | ts.WriteLine("AC_PATH_PROG(MONO, mono)"); | 1061 | } |
592 | ts.WriteLine("AC_PATH_PROG(GMCS, gmcs)"); | 1062 | |
593 | ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil)"); | 1063 | // Add the project name to the list of transformation |
594 | ts.WriteLine(); | 1064 | // parameters |
595 | ts.WriteLine("AC_MSG_CHECKING([for mono])"); | 1065 | XsltArgumentList argList = new XsltArgumentList(); |
596 | ts.WriteLine("dnl if test \"x$MONO\" = \"x\" ; then"); | 1066 | argList.AddParam("projectName", "", project.Name); |
597 | ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"mono\" in your PATH])"); | 1067 | argList.AddParam("solutionName", "", solution.Name); |
598 | ts.WriteLine("dnl else"); | 1068 | argList.AddParam("assemblyName", "", projectAssemblyName); |
599 | ts.WriteLine(" AC_MSG_RESULT([found])"); | 1069 | argList.AddParam("compiledFiles", "", compiledFilesString); |
600 | ts.WriteLine("dnl fi"); | 1070 | argList.AddParam("embeddedFiles", "", embeddedFilesString); |
601 | ts.WriteLine(); | 1071 | argList.AddParam("contentFiles", "", contentFilesString); |
602 | ts.WriteLine("AC_MSG_CHECKING([for gmcs])"); | 1072 | argList.AddParam("extraDistFiles", "", extraDistFilesString); |
603 | ts.WriteLine("dnl if test \"x$GMCS\" = \"x\" ; then"); | 1073 | argList.AddParam("pkgLibs", "", pkgLibsString); |
604 | ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"gmcs\" in your PATH])"); | 1074 | argList.AddParam("binaryLibs", "", binaryLibsString); |
605 | ts.WriteLine("dnl else"); | 1075 | argList.AddParam("systemLibs", "", systemLibsString); |
606 | ts.WriteLine(" AC_MSG_RESULT([found])"); | 1076 | argList.AddParam("monoPath", "", monoPath); |
607 | ts.WriteLine("dnl fi"); | 1077 | argList.AddParam("localCopyTargets", "", localCopyTargetsString); |
608 | ts.WriteLine(); | 1078 | argList.AddParam("projectVersion", "", projectVersion); |
1079 | argList.AddParam("hasAssemblyConfig", "", hasAssemblyConfig ? "true" : ""); | ||
1080 | |||
1081 | // Transform the templates | ||
1082 | transformToFile(Path.Combine(projectDir, "configure.ac"), argList, "/Autotools/ProjectConfigureAc"); | ||
1083 | transformToFile(Path.Combine(projectDir, "Makefile.am"), argList, "/Autotools/ProjectMakefileAm"); | ||
1084 | transformToFile(Path.Combine(projectDir, "autogen.sh"), argList, "/Autotools/ProjectAutogenSh"); | ||
1085 | |||
1086 | if (project.Type == Core.Nodes.ProjectType.Library) | ||
1087 | transformToFile(Path.Combine(projectDir, project.Name + ".pc.in"), argList, "/Autotools/ProjectPcIn"); | ||
1088 | if (project.Type == Core.Nodes.ProjectType.Exe || project.Type == Core.Nodes.ProjectType.WinExe) | ||
1089 | transformToFile(Path.Combine(projectDir, project.Name.ToLower() + ".in"), argList, "/Autotools/ProjectWrapperScriptIn"); | ||
1090 | } | ||
1091 | |||
1092 | private void WriteProjectOld(SolutionNode solution, ProjectNode project) | ||
1093 | { | ||
1094 | string projFile = Helper.MakeFilePath(project.FullPath, "Include", "am"); | ||
1095 | StreamWriter ss = new StreamWriter(projFile); | ||
1096 | ss.NewLine = "\n"; | ||
1097 | |||
1098 | m_Kernel.CurrentWorkingDirectory.Push(); | ||
1099 | Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); | ||
1100 | |||
1101 | using (ss) | ||
1102 | { | ||
1103 | ss.WriteLine(Helper.AssemblyFullName(project.AssemblyName, project.Type) + ":"); | ||
1104 | ss.WriteLine("\tmkdir -p " + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/"); | ||
1105 | foreach (string file in project.Files) | ||
1106 | { | ||
1107 | if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) | ||
1108 | { | ||
1109 | ss.Write("\tresgen "); | ||
1110 | ss.Write(Helper.NormalizePath(Path.Combine(project.Path, file.Substring(0, file.LastIndexOf('.')) + ".resx "), '/')); | ||
1111 | if (project.Files.GetResourceName(file) != "") | ||
1112 | { | ||
1113 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/')); | ||
1114 | } | ||
1115 | else | ||
1116 | { | ||
1117 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/')); | ||
1118 | } | ||
1119 | } | ||
1120 | } | ||
1121 | ss.WriteLine("\t$(CSC)\t/out:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " \\"); | ||
1122 | ss.WriteLine("\t\t/target:" + project.Type.ToString().ToLower() + " \\"); | ||
1123 | if (project.References.Count > 0) | ||
1124 | { | ||
1125 | ss.Write("\t\t/reference:"); | ||
1126 | bool firstref = true; | ||
1127 | foreach (ReferenceNode refr in project.References) | ||
1128 | { | ||
1129 | if (firstref) | ||
1130 | { | ||
1131 | firstref = false; | ||
1132 | } | ||
1133 | else | ||
1134 | { | ||
1135 | ss.Write(","); | ||
1136 | } | ||
1137 | ss.Write("{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(solution.FullPath, BuildReference(solution, refr)), '/')); | ||
1138 | } | ||
1139 | ss.WriteLine(" \\"); | ||
1140 | } | ||
1141 | //ss.WriteLine("\t\tProperties/AssemblyInfo.cs \\"); | ||
1142 | |||
1143 | foreach (string file in project.Files) | ||
1144 | { | ||
1145 | switch (project.Files.GetBuildAction(file)) | ||
1146 | { | ||
1147 | case BuildAction.EmbeddedResource: | ||
1148 | ss.Write("\t\t/resource:"); | ||
1149 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, file), '/') + " \\"); | ||
1150 | break; | ||
1151 | default: | ||
1152 | if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) | ||
1153 | { | ||
1154 | ss.Write("\t\t/resource:"); | ||
1155 | if (project.Files.GetResourceName(file) != "") | ||
1156 | { | ||
1157 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/') + "," + project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources" + " \\"); | ||
1158 | } | ||
1159 | else | ||
1160 | { | ||
1161 | ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/') + "," + project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources" + " \\"); | ||
1162 | } | ||
1163 | } | ||
1164 | break; | ||
1165 | } | ||
1166 | } | ||
1167 | |||
1168 | foreach (ConfigurationNode conf in project.Configurations) | ||
1169 | { | ||
1170 | if (conf.Options.KeyFile != "") | ||
1171 | { | ||
1172 | ss.WriteLine("\t\t/keyfile:" + Helper.NormalizePath(Path.Combine(project.Path, conf.Options.KeyFile), '/') + " \\"); | ||
1173 | break; | ||
1174 | } | ||
1175 | } | ||
1176 | foreach (ConfigurationNode conf in project.Configurations) | ||
1177 | { | ||
1178 | if (conf.Options.AllowUnsafe) | ||
1179 | { | ||
1180 | ss.WriteLine("\t\t/unsafe \\"); | ||
1181 | break; | ||
1182 | } | ||
1183 | } | ||
1184 | if (project.AppIcon != "") | ||
1185 | { | ||
1186 | ss.WriteLine("\t\t/win32icon:" + Helper.NormalizePath(Path.Combine(project.Path, project.AppIcon), '/') + " \\"); | ||
1187 | } | ||
1188 | |||
1189 | foreach (ConfigurationNode conf in project.Configurations) | ||
1190 | { | ||
1191 | ss.WriteLine("\t\t/define:{0}", conf.Options.CompilerDefines.Replace(';', ',') + " \\"); | ||
1192 | break; | ||
1193 | } | ||
1194 | |||
1195 | foreach (ConfigurationNode conf in project.Configurations) | ||
1196 | { | ||
1197 | if (GetXmlDocFile(project, conf) != "") | ||
1198 | { | ||
1199 | ss.WriteLine("\t\t/doc:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + project.Name + ".xml \\"); | ||
1200 | break; | ||
1201 | } | ||
1202 | } | ||
1203 | foreach (string file in project.Files) | ||
1204 | { | ||
1205 | switch (project.Files.GetBuildAction(file)) | ||
1206 | { | ||
1207 | case BuildAction.Compile: | ||
1208 | ss.WriteLine("\t\t\\"); | ||
1209 | ss.Write("\t\t" + NormalizePath(Path.Combine(Helper.MakePathRelativeTo(solution.FullPath, project.Path), file))); | ||
1210 | break; | ||
1211 | default: | ||
1212 | break; | ||
1213 | } | ||
1214 | } | ||
1215 | ss.WriteLine(); | ||
1216 | ss.WriteLine(); | ||
1217 | |||
1218 | if (project.Type == ProjectType.Library) | ||
1219 | { | ||
1220 | ss.WriteLine("install-data-local:"); | ||
1221 | ss.WriteLine(" echo \"$(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS)\"; \\"); | ||
1222 | ss.WriteLine(" $(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS) || exit 1;"); | ||
1223 | ss.WriteLine(); | ||
1224 | ss.WriteLine("uninstall-local:"); | ||
1225 | ss.WriteLine(" echo \"$(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS)\"; \\"); | ||
1226 | ss.WriteLine(" $(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS) || exit 1;"); | ||
1227 | ss.WriteLine(); | ||
1228 | } | ||
1229 | ss.WriteLine("CLEANFILES = $(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".mdb $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".pdb " + project.AssemblyName + ".xml"); | ||
1230 | ss.WriteLine("EXTRA_DIST = \\"); | ||
1231 | ss.Write(" $(FILES)"); | ||
1232 | foreach (ConfigurationNode conf in project.Configurations) | ||
1233 | { | ||
1234 | if (conf.Options.KeyFile != "") | ||
1235 | { | ||
1236 | ss.Write(" \\"); | ||
1237 | ss.WriteLine("\t" + conf.Options.KeyFile); | ||
1238 | } | ||
1239 | break; | ||
1240 | } | ||
1241 | } | ||
1242 | m_Kernel.CurrentWorkingDirectory.Pop(); | ||
1243 | } | ||
1244 | bool hasLibrary = false; | ||
1245 | |||
1246 | private void WriteCombineOld(SolutionNode solution) | ||
1247 | { | ||
1248 | |||
1249 | /* TODO: These vars should be pulled from the prebuild.xml file */ | ||
1250 | string releaseVersion = "2.0.0"; | ||
1251 | string assemblyVersion = "2.1.0.0"; | ||
1252 | string description = | ||
1253 | "Tao Framework " + solution.Name + " Binding For .NET"; | ||
1254 | |||
1255 | hasLibrary = false; | ||
1256 | m_Kernel.Log.Write("Creating Autotools make files"); | ||
1257 | foreach (ProjectNode project in solution.Projects) | ||
1258 | { | ||
1259 | if (m_Kernel.AllowProject(project.FilterGroups)) | ||
1260 | { | ||
1261 | m_Kernel.Log.Write("...Creating makefile: {0}", project.Name); | ||
1262 | WriteProject(solution, project); | ||
1263 | } | ||
1264 | } | ||
1265 | |||
1266 | m_Kernel.Log.Write(""); | ||
1267 | string combFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am"); | ||
1268 | StreamWriter ss = new StreamWriter(combFile); | ||
1269 | ss.NewLine = "\n"; | ||
1270 | |||
1271 | m_Kernel.CurrentWorkingDirectory.Push(); | ||
1272 | Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); | ||
1273 | |||
1274 | using (ss) | ||
1275 | { | ||
1276 | foreach (ProjectNode project in solution.ProjectsTableOrder) | ||
1277 | { | ||
1278 | if (project.Type == ProjectType.Library) | ||
1279 | { | ||
1280 | hasLibrary = true; | ||
1281 | break; | ||
1282 | } | ||
1283 | } | ||
1284 | |||
1285 | if (hasLibrary) | ||
1286 | { | ||
1287 | ss.Write("pkgconfig_in_files = "); | ||
1288 | foreach (ProjectNode project in solution.ProjectsTableOrder) | ||
1289 | { | ||
1290 | if (project.Type == ProjectType.Library) | ||
1291 | { | ||
1292 | string combFilepc = Helper.MakeFilePath(solution.FullPath, project.Name, "pc.in"); | ||
1293 | ss.Write(" " + project.Name + ".pc.in "); | ||
1294 | StreamWriter sspc = new StreamWriter(combFilepc); | ||
1295 | sspc.NewLine = "\n"; | ||
1296 | using (sspc) | ||
1297 | { | ||
1298 | sspc.WriteLine("prefix=@prefix@"); | ||
1299 | sspc.WriteLine("exec_prefix=${prefix}"); | ||
1300 | sspc.WriteLine("libdir=${exec_prefix}/lib"); | ||
1301 | sspc.WriteLine(); | ||
1302 | sspc.WriteLine("Name: @PACKAGE_NAME@"); | ||
1303 | sspc.WriteLine("Description: @DESCRIPTION@"); | ||
1304 | sspc.WriteLine("Version: @ASSEMBLY_VERSION@"); | ||
1305 | sspc.WriteLine("Libs: -r:${libdir}/mono/gac/@PACKAGE_NAME@/@ASSEMBLY_VERSION@__@PUBKEY@/@PACKAGE_NAME@.dll"); | ||
1306 | } | ||
1307 | } | ||
1308 | } | ||
1309 | |||
1310 | ss.WriteLine(); | ||
1311 | ss.WriteLine("pkgconfigdir=$(prefix)/lib/pkgconfig"); | ||
1312 | ss.WriteLine("pkgconfig_DATA=$(pkgconfig_in_files:.pc.in=.pc)"); | ||
1313 | } | ||
1314 | ss.WriteLine(); | ||
1315 | foreach (ProjectNode project in solution.ProjectsTableOrder) | ||
1316 | { | ||
1317 | string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | ||
1318 | ss.WriteLine("-include x {0}", | ||
1319 | Helper.NormalizePath(Helper.MakeFilePath(path, "Include", "am"), '/')); | ||
1320 | } | ||
1321 | ss.WriteLine(); | ||
1322 | ss.WriteLine("all: \\"); | ||
1323 | ss.Write("\t"); | ||
1324 | foreach (ProjectNode project in solution.ProjectsTableOrder) | ||
1325 | { | ||
1326 | string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | ||
1327 | ss.Write(Helper.AssemblyFullName(project.AssemblyName, project.Type) + " "); | ||
1328 | |||
1329 | } | ||
1330 | ss.WriteLine(); | ||
1331 | if (hasLibrary) | ||
1332 | { | ||
1333 | ss.WriteLine("EXTRA_DIST = \\"); | ||
1334 | ss.WriteLine("\t$(pkgconfig_in_files)"); | ||
1335 | } | ||
1336 | else | ||
1337 | { | ||
1338 | ss.WriteLine("EXTRA_DIST = "); | ||
1339 | } | ||
1340 | ss.WriteLine(); | ||
1341 | ss.WriteLine("DISTCLEANFILES = \\"); | ||
1342 | ss.WriteLine("\tconfigure \\"); | ||
1343 | ss.WriteLine("\tMakefile.in \\"); | ||
1344 | ss.WriteLine("\taclocal.m4"); | ||
1345 | } | ||
1346 | combFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac"); | ||
1347 | StreamWriter ts = new StreamWriter(combFile); | ||
1348 | ts.NewLine = "\n"; | ||
1349 | using (ts) | ||
1350 | { | ||
1351 | if (this.hasLibrary) | ||
1352 | { | ||
1353 | foreach (ProjectNode project in solution.ProjectsTableOrder) | ||
1354 | { | ||
1355 | if (project.Type == ProjectType.Library) | ||
1356 | { | ||
1357 | ts.WriteLine("AC_INIT(" + project.Name + ".pc.in)"); | ||
1358 | break; | ||
1359 | } | ||
1360 | } | ||
1361 | } | ||
1362 | else | ||
1363 | { | ||
1364 | ts.WriteLine("AC_INIT(Makefile.am)"); | ||
1365 | } | ||
1366 | ts.WriteLine("AC_PREREQ(2.53)"); | ||
1367 | ts.WriteLine("AC_CANONICAL_SYSTEM"); | ||
1368 | |||
1369 | ts.WriteLine("PACKAGE_NAME={0}", solution.Name); | ||
1370 | ts.WriteLine("PACKAGE_VERSION={0}", releaseVersion); | ||
1371 | ts.WriteLine("DESCRIPTION=\"{0}\"", description); | ||
1372 | ts.WriteLine("AC_SUBST(DESCRIPTION)"); | ||
1373 | ts.WriteLine("AM_INIT_AUTOMAKE([$PACKAGE_NAME],[$PACKAGE_VERSION],[$DESCRIPTION])"); | ||
1374 | |||
1375 | ts.WriteLine("ASSEMBLY_VERSION={0}", assemblyVersion); | ||
1376 | ts.WriteLine("AC_SUBST(ASSEMBLY_VERSION)"); | ||
1377 | |||
1378 | ts.WriteLine("PUBKEY=`sn -t $PACKAGE_NAME.snk | grep 'Public Key Token' | awk -F: '{print $2}' | sed -e 's/^ //'`"); | ||
1379 | ts.WriteLine("AC_SUBST(PUBKEY)"); | ||
1380 | |||
1381 | ts.WriteLine(); | ||
1382 | ts.WriteLine("AM_MAINTAINER_MODE"); | ||
1383 | ts.WriteLine(); | ||
1384 | ts.WriteLine("dnl AC_PROG_INTLTOOL([0.25])"); | ||
1385 | ts.WriteLine(); | ||
1386 | ts.WriteLine("AC_PROG_INSTALL"); | ||
1387 | ts.WriteLine(); | ||
1388 | ts.WriteLine("MONO_REQUIRED_VERSION=1.1"); | ||
1389 | ts.WriteLine(); | ||
1390 | ts.WriteLine("AC_MSG_CHECKING([whether we're compiling from CVS])"); | ||
1391 | ts.WriteLine("if test -f \"$srcdir/.cvs_version\" ; then"); | ||
1392 | ts.WriteLine(" from_cvs=yes"); | ||
1393 | ts.WriteLine("else"); | ||
1394 | ts.WriteLine(" if test -f \"$srcdir/.svn\" ; then"); | ||
1395 | ts.WriteLine(" from_cvs=yes"); | ||
1396 | ts.WriteLine(" else"); | ||
1397 | ts.WriteLine(" from_cvs=no"); | ||
1398 | ts.WriteLine(" fi"); | ||
1399 | ts.WriteLine("fi"); | ||
1400 | ts.WriteLine(); | ||
1401 | ts.WriteLine("AC_MSG_RESULT($from_cvs)"); | ||
1402 | ts.WriteLine(); | ||
1403 | ts.WriteLine("AC_PATH_PROG(MONO, mono)"); | ||
1404 | ts.WriteLine("AC_PATH_PROG(GMCS, gmcs)"); | ||
1405 | ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil)"); | ||
1406 | ts.WriteLine(); | ||
1407 | ts.WriteLine("AC_MSG_CHECKING([for mono])"); | ||
1408 | ts.WriteLine("dnl if test \"x$MONO\" = \"x\" ; then"); | ||
1409 | ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"mono\" in your PATH])"); | ||
1410 | ts.WriteLine("dnl else"); | ||
1411 | ts.WriteLine(" AC_MSG_RESULT([found])"); | ||
1412 | ts.WriteLine("dnl fi"); | ||
1413 | ts.WriteLine(); | ||
1414 | ts.WriteLine("AC_MSG_CHECKING([for gmcs])"); | ||
1415 | ts.WriteLine("dnl if test \"x$GMCS\" = \"x\" ; then"); | ||
1416 | ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"gmcs\" in your PATH])"); | ||
1417 | ts.WriteLine("dnl else"); | ||
1418 | ts.WriteLine(" AC_MSG_RESULT([found])"); | ||
1419 | ts.WriteLine("dnl fi"); | ||
1420 | ts.WriteLine(); | ||
609 | //ts.WriteLine("AC_MSG_CHECKING([for gacutil])"); | 1421 | //ts.WriteLine("AC_MSG_CHECKING([for gacutil])"); |
610 | //ts.WriteLine("if test \"x$GACUTIL\" = \"x\" ; then"); | 1422 | //ts.WriteLine("if test \"x$GACUTIL\" = \"x\" ; then"); |
611 | //ts.WriteLine(" AC_MSG_ERROR([Can't find \"gacutil\" in your PATH])"); | 1423 | //ts.WriteLine(" AC_MSG_ERROR([Can't find \"gacutil\" in your PATH])"); |
612 | //ts.WriteLine("else"); | 1424 | //ts.WriteLine("else"); |
613 | //ts.WriteLine(" AC_MSG_RESULT([found])"); | 1425 | //ts.WriteLine(" AC_MSG_RESULT([found])"); |
614 | //ts.WriteLine("fi"); | 1426 | //ts.WriteLine("fi"); |
615 | ts.WriteLine(); | 1427 | ts.WriteLine(); |
616 | ts.WriteLine("AC_SUBST(PATH)"); | 1428 | ts.WriteLine("AC_SUBST(PATH)"); |
617 | ts.WriteLine("AC_SUBST(LD_LIBRARY_PATH)"); | 1429 | ts.WriteLine("AC_SUBST(LD_LIBRARY_PATH)"); |
618 | ts.WriteLine(); | 1430 | ts.WriteLine(); |
619 | ts.WriteLine("dnl CSFLAGS=\"-debug -nowarn:1574\""); | 1431 | ts.WriteLine("dnl CSFLAGS=\"-debug -nowarn:1574\""); |
620 | ts.WriteLine("CSFLAGS=\"\""); | 1432 | ts.WriteLine("CSFLAGS=\"\""); |
621 | ts.WriteLine("AC_SUBST(CSFLAGS)"); | 1433 | ts.WriteLine("AC_SUBST(CSFLAGS)"); |
622 | ts.WriteLine(); | 1434 | ts.WriteLine(); |
623 | // ts.WriteLine("AC_MSG_CHECKING(--disable-sdl argument)"); | 1435 | // ts.WriteLine("AC_MSG_CHECKING(--disable-sdl argument)"); |
624 | // ts.WriteLine("AC_ARG_ENABLE(sdl,"); | 1436 | // ts.WriteLine("AC_ARG_ENABLE(sdl,"); |
625 | // ts.WriteLine(" [ --disable-sdl Disable Sdl interface.],"); | 1437 | // ts.WriteLine(" [ --disable-sdl Disable Sdl interface.],"); |
626 | // ts.WriteLine(" [disable_sdl=$disableval],"); | 1438 | // ts.WriteLine(" [disable_sdl=$disableval],"); |
627 | // ts.WriteLine(" [disable_sdl=\"no\"])"); | 1439 | // ts.WriteLine(" [disable_sdl=\"no\"])"); |
628 | // ts.WriteLine("AC_MSG_RESULT($disable_sdl)"); | 1440 | // ts.WriteLine("AC_MSG_RESULT($disable_sdl)"); |
629 | // ts.WriteLine("if test \"$disable_sdl\" = \"yes\"; then"); | 1441 | // ts.WriteLine("if test \"$disable_sdl\" = \"yes\"; then"); |
630 | // ts.WriteLine(" AC_DEFINE(FEAT_SDL)"); | 1442 | // ts.WriteLine(" AC_DEFINE(FEAT_SDL)"); |
631 | // ts.WriteLine("fi"); | 1443 | // ts.WriteLine("fi"); |
632 | ts.WriteLine(); | 1444 | ts.WriteLine(); |
633 | ts.WriteLine("dnl Find pkg-config"); | 1445 | ts.WriteLine("dnl Find pkg-config"); |
634 | ts.WriteLine("AC_PATH_PROG(PKGCONFIG, pkg-config, no)"); | 1446 | ts.WriteLine("AC_PATH_PROG(PKGCONFIG, pkg-config, no)"); |
635 | ts.WriteLine("if test \"x$PKG_CONFIG\" = \"xno\"; then"); | 1447 | ts.WriteLine("if test \"x$PKG_CONFIG\" = \"xno\"; then"); |
636 | ts.WriteLine(" AC_MSG_ERROR([You need to install pkg-config])"); | 1448 | ts.WriteLine(" AC_MSG_ERROR([You need to install pkg-config])"); |
637 | ts.WriteLine("fi"); | 1449 | ts.WriteLine("fi"); |
638 | ts.WriteLine(); | 1450 | ts.WriteLine(); |
639 | ts.WriteLine("PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)"); | 1451 | ts.WriteLine("PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)"); |
640 | ts.WriteLine("BUILD_DIR=\"bin\""); | 1452 | ts.WriteLine("BUILD_DIR=\"bin\""); |
641 | ts.WriteLine("AC_SUBST(BUILD_DIR)"); | 1453 | ts.WriteLine("AC_SUBST(BUILD_DIR)"); |
642 | ts.WriteLine("CONFIG=\"Release\""); | 1454 | ts.WriteLine("CONFIG=\"Release\""); |
643 | ts.WriteLine("AC_SUBST(CONFIG)"); | 1455 | ts.WriteLine("AC_SUBST(CONFIG)"); |
644 | ts.WriteLine(); | 1456 | ts.WriteLine(); |
645 | ts.WriteLine("if test \"x$has_mono\" = \"xtrue\"; then"); | 1457 | ts.WriteLine("if test \"x$has_mono\" = \"xtrue\"; then"); |
646 | ts.WriteLine(" AC_PATH_PROG(RUNTIME, mono, no)"); | 1458 | ts.WriteLine(" AC_PATH_PROG(RUNTIME, mono, no)"); |
647 | ts.WriteLine(" AC_PATH_PROG(CSC, gmcs, no)"); | 1459 | ts.WriteLine(" AC_PATH_PROG(CSC, gmcs, no)"); |
648 | ts.WriteLine(" if test `uname -s` = \"Darwin\"; then"); | 1460 | ts.WriteLine(" if test `uname -s` = \"Darwin\"; then"); |
649 | ts.WriteLine(" LIB_PREFIX="); | 1461 | ts.WriteLine(" LIB_PREFIX="); |
650 | ts.WriteLine(" LIB_SUFFIX=.dylib"); | 1462 | ts.WriteLine(" LIB_SUFFIX=.dylib"); |
651 | ts.WriteLine(" else"); | 1463 | ts.WriteLine(" else"); |
652 | ts.WriteLine(" LIB_PREFIX=.so"); | 1464 | ts.WriteLine(" LIB_PREFIX=.so"); |
653 | ts.WriteLine(" LIB_SUFFIX="); | 1465 | ts.WriteLine(" LIB_SUFFIX="); |
654 | ts.WriteLine(" fi"); | 1466 | ts.WriteLine(" fi"); |
655 | ts.WriteLine("else"); | 1467 | ts.WriteLine("else"); |
656 | ts.WriteLine(" AC_PATH_PROG(CSC, csc.exe, no)"); | 1468 | ts.WriteLine(" AC_PATH_PROG(CSC, csc.exe, no)"); |
657 | ts.WriteLine(" if test x$CSC = \"xno\"; then"); | 1469 | ts.WriteLine(" if test x$CSC = \"xno\"; then"); |
658 | ts.WriteLine(" AC_MSG_ERROR([You need to install either mono or .Net])"); | 1470 | ts.WriteLine(" AC_MSG_ERROR([You need to install either mono or .Net])"); |
659 | ts.WriteLine(" else"); | 1471 | ts.WriteLine(" else"); |
660 | ts.WriteLine(" RUNTIME="); | 1472 | ts.WriteLine(" RUNTIME="); |
661 | ts.WriteLine(" LIB_PREFIX="); | 1473 | ts.WriteLine(" LIB_PREFIX="); |
662 | ts.WriteLine(" LIB_SUFFIX=.dylib"); | 1474 | ts.WriteLine(" LIB_SUFFIX=.dylib"); |
663 | ts.WriteLine(" fi"); | 1475 | ts.WriteLine(" fi"); |
664 | ts.WriteLine("fi"); | 1476 | ts.WriteLine("fi"); |
665 | ts.WriteLine(); | 1477 | ts.WriteLine(); |
666 | ts.WriteLine("AC_SUBST(LIB_PREFIX)"); | 1478 | ts.WriteLine("AC_SUBST(LIB_PREFIX)"); |
667 | ts.WriteLine("AC_SUBST(LIB_SUFFIX)"); | 1479 | ts.WriteLine("AC_SUBST(LIB_SUFFIX)"); |
668 | ts.WriteLine(); | 1480 | ts.WriteLine(); |
669 | ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_CFLAGS)"); | 1481 | ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_CFLAGS)"); |
670 | ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_LIBS)"); | 1482 | ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_LIBS)"); |
671 | ts.WriteLine(); | 1483 | ts.WriteLine(); |
672 | ts.WriteLine("dnl Find monodoc"); | 1484 | ts.WriteLine("dnl Find monodoc"); |
673 | ts.WriteLine("MONODOC_REQUIRED_VERSION=1.0"); | 1485 | ts.WriteLine("MONODOC_REQUIRED_VERSION=1.0"); |
674 | ts.WriteLine("AC_SUBST(MONODOC_REQUIRED_VERSION)"); | 1486 | ts.WriteLine("AC_SUBST(MONODOC_REQUIRED_VERSION)"); |
675 | ts.WriteLine("PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no)"); | 1487 | ts.WriteLine("PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no)"); |
676 | ts.WriteLine(); | 1488 | ts.WriteLine(); |
677 | ts.WriteLine("if test \"x$enable_monodoc\" = \"xyes\"; then"); | 1489 | ts.WriteLine("if test \"x$enable_monodoc\" = \"xyes\"; then"); |
678 | ts.WriteLine(" AC_PATH_PROG(MONODOC, monodoc, no)"); | 1490 | ts.WriteLine(" AC_PATH_PROG(MONODOC, monodoc, no)"); |
679 | ts.WriteLine(" if test x$MONODOC = xno; then"); | 1491 | ts.WriteLine(" if test x$MONODOC = xno; then"); |
680 | ts.WriteLine(" enable_monodoc=no"); | 1492 | ts.WriteLine(" enable_monodoc=no"); |
681 | ts.WriteLine(" fi"); | 1493 | ts.WriteLine(" fi"); |
682 | ts.WriteLine("else"); | 1494 | ts.WriteLine("else"); |
683 | ts.WriteLine(" MONODOC="); | 1495 | ts.WriteLine(" MONODOC="); |
684 | ts.WriteLine("fi"); | 1496 | ts.WriteLine("fi"); |
685 | ts.WriteLine(); | 1497 | ts.WriteLine(); |
686 | ts.WriteLine("AC_SUBST(MONODOC)"); | 1498 | ts.WriteLine("AC_SUBST(MONODOC)"); |
687 | ts.WriteLine("AM_CONDITIONAL(ENABLE_MONODOC, test \"x$enable_monodoc\" = \"xyes\")"); | 1499 | ts.WriteLine("AM_CONDITIONAL(ENABLE_MONODOC, test \"x$enable_monodoc\" = \"xyes\")"); |
688 | ts.WriteLine(); | 1500 | ts.WriteLine(); |
689 | ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil, no)"); | 1501 | ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil, no)"); |
690 | ts.WriteLine("if test \"x$GACUTIL\" = \"xno\" ; then"); | 1502 | ts.WriteLine("if test \"x$GACUTIL\" = \"xno\" ; then"); |
691 | ts.WriteLine(" AC_MSG_ERROR([No gacutil tool found])"); | 1503 | ts.WriteLine(" AC_MSG_ERROR([No gacutil tool found])"); |
692 | ts.WriteLine("fi"); | 1504 | ts.WriteLine("fi"); |
693 | ts.WriteLine(); | 1505 | ts.WriteLine(); |
694 | // foreach(ProjectNode project in solution.ProjectsTableOrder) | 1506 | // foreach(ProjectNode project in solution.ProjectsTableOrder) |
695 | // { | 1507 | // { |
696 | // if (project.Type == ProjectType.Library) | 1508 | // if (project.Type == ProjectType.Library) |
697 | // { | 1509 | // { |
698 | // } | 1510 | // } |
699 | // } | 1511 | // } |
700 | ts.WriteLine("GACUTIL_FLAGS='/package $(PACKAGE_NAME) /gacdir $(DESTDIR)$(prefix)'"); | 1512 | ts.WriteLine("GACUTIL_FLAGS='/package $(PACKAGE_NAME) /gacdir $(DESTDIR)$(prefix)'"); |
701 | ts.WriteLine("AC_SUBST(GACUTIL_FLAGS)"); | 1513 | ts.WriteLine("AC_SUBST(GACUTIL_FLAGS)"); |
702 | ts.WriteLine(); | 1514 | ts.WriteLine(); |
703 | ts.WriteLine("winbuild=no"); | 1515 | ts.WriteLine("winbuild=no"); |
704 | ts.WriteLine("case \"$host\" in"); | 1516 | ts.WriteLine("case \"$host\" in"); |
705 | ts.WriteLine(" *-*-mingw*|*-*-cygwin*)"); | 1517 | ts.WriteLine(" *-*-mingw*|*-*-cygwin*)"); |
706 | ts.WriteLine(" winbuild=yes"); | 1518 | ts.WriteLine(" winbuild=yes"); |
707 | ts.WriteLine(" ;;"); | 1519 | ts.WriteLine(" ;;"); |
708 | ts.WriteLine("esac"); | 1520 | ts.WriteLine("esac"); |
709 | ts.WriteLine("AM_CONDITIONAL(WINBUILD, test x$winbuild = xyes)"); | 1521 | ts.WriteLine("AM_CONDITIONAL(WINBUILD, test x$winbuild = xyes)"); |
710 | ts.WriteLine(); | 1522 | ts.WriteLine(); |
711 | // ts.WriteLine("dnl Check for SDL"); | 1523 | // ts.WriteLine("dnl Check for SDL"); |
712 | // ts.WriteLine(); | 1524 | // ts.WriteLine(); |
713 | // ts.WriteLine("AC_PATH_PROG([SDL_CONFIG], [sdl-config])"); | 1525 | // ts.WriteLine("AC_PATH_PROG([SDL_CONFIG], [sdl-config])"); |
714 | // ts.WriteLine("have_sdl=no"); | 1526 | // ts.WriteLine("have_sdl=no"); |
715 | // ts.WriteLine("if test -n \"${SDL_CONFIG}\"; then"); | 1527 | // ts.WriteLine("if test -n \"${SDL_CONFIG}\"; then"); |
716 | // ts.WriteLine(" have_sdl=yes"); | 1528 | // ts.WriteLine(" have_sdl=yes"); |
717 | // ts.WriteLine(" SDL_CFLAGS=`$SDL_CONFIG --cflags`"); | 1529 | // ts.WriteLine(" SDL_CFLAGS=`$SDL_CONFIG --cflags`"); |
718 | // ts.WriteLine(" SDL_LIBS=`$SDL_CONFIG --libs`"); | 1530 | // ts.WriteLine(" SDL_LIBS=`$SDL_CONFIG --libs`"); |
719 | // ts.WriteLine(" #"); | 1531 | // ts.WriteLine(" #"); |
720 | // ts.WriteLine(" # sdl-config sometimes emits an rpath flag pointing at its library"); | 1532 | // ts.WriteLine(" # sdl-config sometimes emits an rpath flag pointing at its library"); |
721 | // ts.WriteLine(" # installation directory. We don't want this, as it prevents users from"); | 1533 | // ts.WriteLine(" # installation directory. We don't want this, as it prevents users from"); |
722 | // ts.WriteLine(" # linking sdl-viewer against, for example, a locally compiled libGL when a"); | 1534 | // ts.WriteLine(" # linking sdl-viewer against, for example, a locally compiled libGL when a"); |
723 | // ts.WriteLine(" # version of the library also exists in SDL's library installation"); | 1535 | // ts.WriteLine(" # version of the library also exists in SDL's library installation"); |
724 | // ts.WriteLine(" # directory, typically /usr/lib."); | 1536 | // ts.WriteLine(" # directory, typically /usr/lib."); |
725 | // ts.WriteLine(" #"); | 1537 | // ts.WriteLine(" #"); |
726 | // ts.WriteLine(" SDL_LIBS=`echo $SDL_LIBS | sed 's/-Wl,-rpath,[[^ ]]* //'`"); | 1538 | // ts.WriteLine(" SDL_LIBS=`echo $SDL_LIBS | sed 's/-Wl,-rpath,[[^ ]]* //'`"); |
727 | // ts.WriteLine("fi"); | 1539 | // ts.WriteLine("fi"); |
728 | // ts.WriteLine("AC_SUBST([SDL_CFLAGS])"); | 1540 | // ts.WriteLine("AC_SUBST([SDL_CFLAGS])"); |
729 | // ts.WriteLine("AC_SUBST([SDL_LIBS])"); | 1541 | // ts.WriteLine("AC_SUBST([SDL_LIBS])"); |
730 | ts.WriteLine(); | 1542 | ts.WriteLine(); |
731 | ts.WriteLine("AC_OUTPUT(["); | 1543 | ts.WriteLine("AC_OUTPUT(["); |
732 | ts.WriteLine("Makefile"); | 1544 | ts.WriteLine("Makefile"); |
733 | // TODO: this does not work quite right. | 1545 | // TODO: this does not work quite right. |
734 | //ts.WriteLine("Properties/AssemblyInfo.cs"); | 1546 | //ts.WriteLine("Properties/AssemblyInfo.cs"); |
735 | foreach(ProjectNode project in solution.ProjectsTableOrder) | 1547 | foreach (ProjectNode project in solution.ProjectsTableOrder) |
736 | { | 1548 | { |
737 | if (project.Type == ProjectType.Library) | 1549 | if (project.Type == ProjectType.Library) |
738 | { | 1550 | { |
739 | ts.WriteLine(project.Name + ".pc"); | 1551 | ts.WriteLine(project.Name + ".pc"); |
740 | } | 1552 | } |
741 | // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | 1553 | // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); |
742 | // ts.WriteLine(Helper.NormalizePath(Helper.MakeFilePath(path, "Include"),'/')); | 1554 | // ts.WriteLine(Helper.NormalizePath(Helper.MakeFilePath(path, "Include"),'/')); |
743 | } | 1555 | } |
744 | ts.WriteLine("])"); | 1556 | ts.WriteLine("])"); |
745 | ts.WriteLine(); | 1557 | ts.WriteLine(); |
746 | ts.WriteLine("#po/Makefile.in"); | 1558 | ts.WriteLine("#po/Makefile.in"); |
747 | ts.WriteLine(); | 1559 | ts.WriteLine(); |
748 | ts.WriteLine("echo \"---\""); | 1560 | ts.WriteLine("echo \"---\""); |
749 | ts.WriteLine("echo \"Configuration summary\""); | 1561 | ts.WriteLine("echo \"Configuration summary\""); |
750 | ts.WriteLine("echo \"\""); | 1562 | ts.WriteLine("echo \"\""); |
751 | ts.WriteLine("echo \" * Installation prefix: $prefix\""); | 1563 | ts.WriteLine("echo \" * Installation prefix: $prefix\""); |
752 | ts.WriteLine("echo \" * compiler: $CSC\""); | 1564 | ts.WriteLine("echo \" * compiler: $CSC\""); |
753 | ts.WriteLine("echo \" * Documentation: $enable_monodoc ($MONODOC)\""); | 1565 | ts.WriteLine("echo \" * Documentation: $enable_monodoc ($MONODOC)\""); |
754 | ts.WriteLine("echo \" * Package Name: $PACKAGE_NAME\""); | 1566 | ts.WriteLine("echo \" * Package Name: $PACKAGE_NAME\""); |
755 | ts.WriteLine("echo \" * Version: $PACKAGE_VERSION\""); | 1567 | ts.WriteLine("echo \" * Version: $PACKAGE_VERSION\""); |
756 | ts.WriteLine("echo \" * Public Key: $PUBKEY\""); | 1568 | ts.WriteLine("echo \" * Public Key: $PUBKEY\""); |
757 | ts.WriteLine("echo \"\""); | 1569 | ts.WriteLine("echo \"\""); |
758 | ts.WriteLine("echo \"---\""); | 1570 | ts.WriteLine("echo \"---\""); |
759 | ts.WriteLine(); | 1571 | ts.WriteLine(); |
760 | } | 1572 | } |
761 | 1573 | ||
762 | ts.NewLine = "\n"; | 1574 | ts.NewLine = "\n"; |
763 | foreach (ProjectNode project in solution.ProjectsTableOrder) | 1575 | foreach (ProjectNode project in solution.ProjectsTableOrder) |
@@ -767,14 +1579,14 @@ namespace Prebuild.Core.Targets | |||
767 | GenerateAssemblyInfoFile(solution, combFile); | 1579 | GenerateAssemblyInfoFile(solution, combFile); |
768 | } | 1580 | } |
769 | } | 1581 | } |
770 | } | 1582 | } |
771 | 1583 | ||
772 | private static void GenerateAssemblyInfoFile(SolutionNode solution, string combFile) | 1584 | private static void GenerateAssemblyInfoFile(SolutionNode solution, string combFile) |
773 | { | 1585 | { |
774 | System.IO.Directory.CreateDirectory(Helper.MakePathRelativeTo(solution.FullPath, "Properties")); | 1586 | System.IO.Directory.CreateDirectory(Helper.MakePathRelativeTo(solution.FullPath, "Properties")); |
775 | combFile = Helper.MakeFilePath(solution.FullPath + "/Properties/", "AssemblyInfo.cs", "in"); | 1587 | combFile = Helper.MakeFilePath(solution.FullPath + "/Properties/", "AssemblyInfo.cs", "in"); |
776 | StreamWriter ai = new StreamWriter(combFile); | 1588 | StreamWriter ai = new StreamWriter(combFile); |
777 | 1589 | ||
778 | using (ai) | 1590 | using (ai) |
779 | { | 1591 | { |
780 | ai.WriteLine("#region License"); | 1592 | ai.WriteLine("#region License"); |
@@ -835,92 +1647,158 @@ namespace Prebuild.Core.Targets | |||
835 | //return combFile; | 1647 | //return combFile; |
836 | } | 1648 | } |
837 | 1649 | ||
838 | private void CleanProject(ProjectNode project) | 1650 | private void CleanProject(ProjectNode project) |
839 | { | 1651 | { |
840 | m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); | 1652 | m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); |
841 | string projectFile = Helper.MakeFilePath(project.FullPath, "Include", "am"); | 1653 | string projectFile = Helper.MakeFilePath(project.FullPath, "Include", "am"); |
842 | Helper.DeleteIfExists(projectFile); | 1654 | Helper.DeleteIfExists(projectFile); |
843 | } | 1655 | } |
844 | 1656 | ||
845 | private void CleanSolution(SolutionNode solution) | 1657 | private void CleanSolution(SolutionNode solution) |
846 | { | 1658 | { |
847 | m_Kernel.Log.Write("Cleaning Autotools make files for", solution.Name); | 1659 | m_Kernel.Log.Write("Cleaning Autotools make files for", solution.Name); |
848 | 1660 | ||
849 | string slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am"); | 1661 | string slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am"); |
850 | Helper.DeleteIfExists(slnFile); | 1662 | Helper.DeleteIfExists(slnFile); |
851 | 1663 | ||
852 | slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "in"); | 1664 | slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "in"); |
853 | Helper.DeleteIfExists(slnFile); | 1665 | Helper.DeleteIfExists(slnFile); |
854 | 1666 | ||
855 | slnFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac"); | 1667 | slnFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac"); |
856 | Helper.DeleteIfExists(slnFile); | 1668 | Helper.DeleteIfExists(slnFile); |
857 | 1669 | ||
858 | slnFile = Helper.MakeFilePath(solution.FullPath, "configure"); | 1670 | slnFile = Helper.MakeFilePath(solution.FullPath, "configure"); |
859 | Helper.DeleteIfExists(slnFile); | 1671 | Helper.DeleteIfExists(slnFile); |
860 | 1672 | ||
861 | slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile"); | 1673 | slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile"); |
862 | Helper.DeleteIfExists(slnFile); | 1674 | Helper.DeleteIfExists(slnFile); |
863 | 1675 | ||
864 | foreach(ProjectNode project in solution.Projects) | 1676 | foreach (ProjectNode project in solution.Projects) |
865 | { | 1677 | { |
866 | CleanProject(project); | 1678 | CleanProject(project); |
867 | } | 1679 | } |
868 | 1680 | ||
869 | m_Kernel.Log.Write(""); | 1681 | m_Kernel.Log.Write(""); |
870 | } | 1682 | } |
871 | 1683 | ||
872 | #endregion | 1684 | #endregion |
873 | 1685 | ||
874 | #region ITarget Members | 1686 | #region ITarget Members |
875 | 1687 | ||
876 | /// <summary> | 1688 | /// <summary> |
877 | /// Writes the specified kern. | 1689 | /// Writes the specified kern. |
878 | /// </summary> | 1690 | /// </summary> |
879 | /// <param name="kern">The kern.</param> | 1691 | /// <param name="kern">The kern.</param> |
880 | public void Write(Kernel kern) | 1692 | public void Write(Kernel kern) |
881 | { | 1693 | { |
882 | if( kern == null ) | 1694 | if (kern == null) |
883 | { | 1695 | { |
884 | throw new ArgumentNullException("kern"); | 1696 | throw new ArgumentNullException("kern"); |
885 | } | 1697 | } |
886 | m_Kernel = kern; | 1698 | m_Kernel = kern; |
887 | foreach(SolutionNode solution in kern.Solutions) | 1699 | m_Kernel.Log.Write("Parsing system pkg-config files"); |
888 | { | 1700 | RunInitialization(); |
889 | WriteCombine(solution); | 1701 | |
890 | } | 1702 | string streamName = "autotools.xml"; |
891 | m_Kernel = null; | 1703 | string fqStreamName = String.Format("Prebuild.data.{0}", |
892 | } | 1704 | streamName |
893 | 1705 | ); | |
894 | /// <summary> | 1706 | |
895 | /// Cleans the specified kern. | 1707 | // Retrieve stream for the autotools template XML |
896 | /// </summary> | 1708 | Stream autotoolsStream = Assembly.GetExecutingAssembly() |
897 | /// <param name="kern">The kern.</param> | 1709 | .GetManifestResourceStream(fqStreamName); |
898 | public virtual void Clean(Kernel kern) | 1710 | |
899 | { | 1711 | if(autotoolsStream == null) { |
900 | if( kern == null ) | 1712 | |
901 | { | 1713 | /* |
902 | throw new ArgumentNullException("kern"); | 1714 | * try without the default namespace prepended, in |
903 | } | 1715 | * case prebuild.exe assembly was compiled with |
904 | m_Kernel = kern; | 1716 | * something other than Visual Studio .NET |
905 | foreach(SolutionNode sol in kern.Solutions) | 1717 | */ |
906 | { | 1718 | |
907 | CleanSolution(sol); | 1719 | autotoolsStream = Assembly.GetExecutingAssembly() |
908 | } | 1720 | .GetManifestResourceStream(streamName); |
909 | m_Kernel = null; | 1721 | if(autotoolsStream == null){ |
910 | } | 1722 | string errStr = |
911 | 1723 | String.Format("Could not find embedded resource file:\n" + | |
912 | /// <summary> | 1724 | "'{0}' or '{1}'", |
913 | /// Gets the name. | 1725 | streamName, fqStreamName |
914 | /// </summary> | 1726 | ); |
915 | /// <value>The name.</value> | 1727 | |
916 | public string Name | 1728 | m_Kernel.Log.Write(errStr); |
917 | { | 1729 | |
918 | get | 1730 | throw new System.Reflection.TargetException(errStr); |
919 | { | 1731 | } |
920 | return "autotools"; | 1732 | } |
921 | } | 1733 | |
922 | } | 1734 | // Create an XML URL Resolver with default credentials |
923 | 1735 | xr = new System.Xml.XmlUrlResolver(); | |
924 | #endregion | 1736 | xr.Credentials = CredentialCache.DefaultCredentials; |
925 | } | 1737 | |
1738 | // Create a default evidence - no need to limit access | ||
1739 | e = new System.Security.Policy.Evidence(); | ||
1740 | |||
1741 | // Load the autotools XML | ||
1742 | autotoolsDoc = new XmlDocument(); | ||
1743 | autotoolsDoc.Load(autotoolsStream); | ||
1744 | |||
1745 | /* rootDir is the filesystem location where the Autotools | ||
1746 | * build tree will be created - for now we'll make it | ||
1747 | * $PWD/autotools | ||
1748 | */ | ||
1749 | |||
1750 | string pwd = Directory.GetCurrentDirectory(); | ||
1751 | //string pwd = System.Environment.GetEnvironmentVariable("PWD"); | ||
1752 | string rootDir = ""; | ||
1753 | //if (pwd.Length != 0) | ||
1754 | //{ | ||
1755 | rootDir = Path.Combine(pwd, "autotools"); | ||
1756 | //} | ||
1757 | //else | ||
1758 | //{ | ||
1759 | // pwd = Assembly.GetExecutingAssembly() | ||
1760 | //} | ||
1761 | chkMkDir(rootDir); | ||
1762 | |||
1763 | foreach (SolutionNode solution in kern.Solutions) | ||
1764 | { | ||
1765 | m_Kernel.Log.Write(String.Format("Writing solution: {0}", | ||
1766 | solution.Name)); | ||
1767 | WriteCombine(solution); | ||
1768 | } | ||
1769 | m_Kernel = null; | ||
1770 | } | ||
1771 | |||
1772 | /// <summary> | ||
1773 | /// Cleans the specified kern. | ||
1774 | /// </summary> | ||
1775 | /// <param name="kern">The kern.</param> | ||
1776 | public virtual void Clean(Kernel kern) | ||
1777 | { | ||
1778 | if (kern == null) | ||
1779 | { | ||
1780 | throw new ArgumentNullException("kern"); | ||
1781 | } | ||
1782 | m_Kernel = kern; | ||
1783 | foreach (SolutionNode sol in kern.Solutions) | ||
1784 | { | ||
1785 | CleanSolution(sol); | ||
1786 | } | ||
1787 | m_Kernel = null; | ||
1788 | } | ||
1789 | |||
1790 | /// <summary> | ||
1791 | /// Gets the name. | ||
1792 | /// </summary> | ||
1793 | /// <value>The name.</value> | ||
1794 | public string Name | ||
1795 | { | ||
1796 | get | ||
1797 | { | ||
1798 | return "autotools"; | ||
1799 | } | ||
1800 | } | ||
1801 | |||
1802 | #endregion | ||
1803 | } | ||
926 | } | 1804 | } |
diff --git a/Prebuild/src/Core/Targets/DebugTarget.cs b/Prebuild/src/Core/Targets/DebugTarget.cs index dc4e666..db19e05 100644 --- a/Prebuild/src/Core/Targets/DebugTarget.cs +++ b/Prebuild/src/Core/Targets/DebugTarget.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $ | 30 | * $Date: 2006-09-20 16:42:51 +0900 (Wed, 20 Sep 2006) $ |
31 | * $Revision: 164 $ | 31 | * $Revision: 164 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Targets/MakefileTarget.cs b/Prebuild/src/Core/Targets/MakefileTarget.cs new file mode 100644 index 0000000..86676d0 --- /dev/null +++ b/Prebuild/src/Core/Targets/MakefileTarget.cs | |||
@@ -0,0 +1,471 @@ | |||
1 | #region BSD License | ||
2 | /* | ||
3 | Copyright (c) 2004 Crestez Leonard (cleonard@go.ro) | ||
4 | |||
5 | Redistribution and use in source and binary forms, with or without modification, are permitted | ||
6 | provided 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 | |||
16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, | ||
17 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
20 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
21 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
22 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
23 | */ | ||
24 | #endregion | ||
25 | |||
26 | using System; | ||
27 | using System.Collections; | ||
28 | using System.Collections.Specialized; | ||
29 | using System.IO; | ||
30 | using System.Text.RegularExpressions; | ||
31 | |||
32 | using Prebuild.Core.Attributes; | ||
33 | using Prebuild.Core.Interfaces; | ||
34 | using Prebuild.Core.Nodes; | ||
35 | using Prebuild.Core.Utilities; | ||
36 | |||
37 | namespace Prebuild.Core.Targets | ||
38 | { | ||
39 | [Target("makefile")] | ||
40 | public class MakefileTarget : ITarget | ||
41 | { | ||
42 | #region Fields | ||
43 | |||
44 | private Kernel m_Kernel = null; | ||
45 | |||
46 | #endregion | ||
47 | |||
48 | #region Private Methods | ||
49 | |||
50 | // This converts a path relative to the path of a project to | ||
51 | // a path relative to the solution path. | ||
52 | private string NicePath(ProjectNode proj, string path) | ||
53 | { | ||
54 | string res; | ||
55 | SolutionNode solution = (SolutionNode)proj.Parent; | ||
56 | res = Path.Combine(Helper.NormalizePath(proj.FullPath, '/'), Helper.NormalizePath(path, '/')); | ||
57 | res = Helper.NormalizePath(res, '/'); | ||
58 | res = res.Replace("/./", "/"); | ||
59 | while (res.IndexOf("/../") >= 0) | ||
60 | { | ||
61 | int a = res.IndexOf("/../"); | ||
62 | int b = res.LastIndexOf("/", a - 1); | ||
63 | res = res.Remove(b, a - b + 3); | ||
64 | } | ||
65 | res = Helper.MakePathRelativeTo(solution.FullPath, res); | ||
66 | if (res.StartsWith("./")) | ||
67 | res = res.Substring(2, res.Length - 2); | ||
68 | res = Helper.NormalizePath(res, '/'); | ||
69 | return res; | ||
70 | } | ||
71 | |||
72 | private void WriteProjectFiles(StreamWriter f, SolutionNode solution, ProjectNode project) | ||
73 | { | ||
74 | // Write list of source code files | ||
75 | f.WriteLine("SOURCES_{0} = \\", project.Name); | ||
76 | foreach (string file in project.Files) | ||
77 | if (project.Files.GetBuildAction(file) == BuildAction.Compile) | ||
78 | f.WriteLine("\t{0} \\", NicePath(project, file)); | ||
79 | f.WriteLine(); | ||
80 | |||
81 | // Write list of resource files | ||
82 | f.WriteLine("RESOURCES_{0} = \\", project.Name); | ||
83 | foreach (string file in project.Files) | ||
84 | if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource) | ||
85 | { | ||
86 | string path = NicePath(project, file); | ||
87 | f.WriteLine("\t-resource:{0},{1} \\", path, Path.GetFileName(path)); | ||
88 | } | ||
89 | f.WriteLine(); | ||
90 | |||
91 | // There's also Content and None in BuildAction. | ||
92 | // What am I supposed to do with that? | ||
93 | } | ||
94 | |||
95 | private string FindFileReference(string refName, ProjectNode project) | ||
96 | { | ||
97 | foreach (ReferencePathNode refPath in project.ReferencePaths) | ||
98 | { | ||
99 | string fullPath = NicePath(project, Helper.MakeFilePath(refPath.Path, refName, "dll")); | ||
100 | if (File.Exists(fullPath)) | ||
101 | return fullPath; | ||
102 | } | ||
103 | return null; | ||
104 | } | ||
105 | |||
106 | private void WriteProjectReferences(StreamWriter f, SolutionNode solution, ProjectNode project) | ||
107 | { | ||
108 | f.WriteLine("REFERENCES_{0} = \\", project.Name); | ||
109 | foreach (ReferenceNode refr in project.References) | ||
110 | { | ||
111 | string path; | ||
112 | // Project references change with configurations. | ||
113 | if (solution.ProjectsTable.Contains(refr.Name)) | ||
114 | continue; | ||
115 | path = FindFileReference(refr.Name, project); | ||
116 | if (path != null) | ||
117 | f.WriteLine("\t-r:{0} \\", path); | ||
118 | else | ||
119 | f.WriteLine("\t-r:{0} \\", refr.Name); | ||
120 | } | ||
121 | f.WriteLine(); | ||
122 | } | ||
123 | |||
124 | private void WriteProjectDependencies(StreamWriter f, SolutionNode solution, ProjectNode project) | ||
125 | { | ||
126 | f.WriteLine("DEPENDENCIES_{0} = \\", project.Name); | ||
127 | f.WriteLine("\t$(SOURCES_{0}) \\", project.Name); | ||
128 | foreach (string file in project.Files) | ||
129 | if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource) | ||
130 | f.WriteLine("\t{0} \\", NicePath(project, file)); | ||
131 | f.WriteLine(); | ||
132 | } | ||
133 | |||
134 | private string ProjectTypeToExtension(ProjectType t) | ||
135 | { | ||
136 | if (t == ProjectType.Exe || t == ProjectType.WinExe) | ||
137 | { | ||
138 | return "exe"; | ||
139 | } | ||
140 | else if (t == ProjectType.Library) | ||
141 | { | ||
142 | return "dll"; | ||
143 | } | ||
144 | else | ||
145 | { | ||
146 | throw new FatalException("Bad ProjectType: {0}", t); | ||
147 | } | ||
148 | } | ||
149 | |||
150 | private string ProjectTypeToTarget(ProjectType t) | ||
151 | { | ||
152 | if (t == ProjectType.Exe) | ||
153 | { | ||
154 | return "exe"; | ||
155 | } | ||
156 | else if (t == ProjectType.WinExe) | ||
157 | { | ||
158 | return "winexe"; | ||
159 | } | ||
160 | else if (t == ProjectType.Library) | ||
161 | { | ||
162 | return "library"; | ||
163 | } | ||
164 | else | ||
165 | { | ||
166 | throw new FatalException("Bad ProjectType: {0}", t); | ||
167 | } | ||
168 | } | ||
169 | |||
170 | private string ProjectOutput(ProjectNode project, ConfigurationNode config) | ||
171 | { | ||
172 | string filepath; | ||
173 | filepath = Helper.MakeFilePath((string)config.Options["OutputPath"], | ||
174 | project.AssemblyName, ProjectTypeToExtension(project.Type)); | ||
175 | return NicePath(project, filepath); | ||
176 | } | ||
177 | |||
178 | // Returns true if two configs in one project have the same output. | ||
179 | private bool ProjectClashes(ProjectNode project) | ||
180 | { | ||
181 | foreach (ConfigurationNode conf1 in project.Configurations) | ||
182 | foreach (ConfigurationNode conf2 in project.Configurations) | ||
183 | if (ProjectOutput(project, conf1) == ProjectOutput(project, conf2) && conf1 != conf2) | ||
184 | { | ||
185 | m_Kernel.Log.Write("Warning: Configurations {0} and {1} for project {2} output the same file", | ||
186 | conf1.Name, conf2.Name, project.Name); | ||
187 | m_Kernel.Log.Write("Warning: I'm going to use some timestamps(extra empty files)."); | ||
188 | return true; | ||
189 | } | ||
190 | return false; | ||
191 | } | ||
192 | |||
193 | private void WriteProject(StreamWriter f, SolutionNode solution, ProjectNode project) | ||
194 | { | ||
195 | f.WriteLine("# This is for project {0}", project.Name); | ||
196 | f.WriteLine(); | ||
197 | |||
198 | WriteProjectFiles(f, solution, project); | ||
199 | WriteProjectReferences(f, solution, project); | ||
200 | WriteProjectDependencies(f, solution, project); | ||
201 | |||
202 | bool clash = ProjectClashes(project); | ||
203 | |||
204 | foreach (ConfigurationNode conf in project.Configurations) | ||
205 | { | ||
206 | string outpath = ProjectOutput(project, conf); | ||
207 | string filesToClean = outpath; | ||
208 | |||
209 | if (clash) | ||
210 | { | ||
211 | f.WriteLine("{0}-{1}: .{0}-{1}-timestamp", project.Name, conf.Name); | ||
212 | f.WriteLine(); | ||
213 | f.Write(".{0}-{1}-timestamp: $(DEPENDENCIES_{0})", project.Name, conf.Name); | ||
214 | } | ||
215 | else | ||
216 | { | ||
217 | f.WriteLine("{0}-{1}: {2}", project.Name, conf.Name, outpath); | ||
218 | f.WriteLine(); | ||
219 | f.Write("{2}: $(DEPENDENCIES_{0})", project.Name, conf.Name, outpath); | ||
220 | } | ||
221 | // Dependencies on other projects. | ||
222 | foreach (ReferenceNode refr in project.References) | ||
223 | if (solution.ProjectsTable.Contains(refr.Name)) | ||
224 | { | ||
225 | ProjectNode refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; | ||
226 | if (ProjectClashes(refProj)) | ||
227 | f.Write(" .{0}-{1}-timestamp", refProj.Name, conf.Name); | ||
228 | else | ||
229 | f.Write(" {0}", ProjectOutput(refProj, conf)); | ||
230 | } | ||
231 | f.WriteLine(); | ||
232 | |||
233 | // make directory for output. | ||
234 | if (Path.GetDirectoryName(outpath) != "") | ||
235 | { | ||
236 | f.WriteLine("\tmkdir -p {0}", Path.GetDirectoryName(outpath)); | ||
237 | } | ||
238 | // mcs command line. | ||
239 | f.Write("\tgmcs", project.Name); | ||
240 | f.Write(" -warn:{0}", conf.Options["WarningLevel"]); | ||
241 | if ((bool)conf.Options["DebugInformation"]) | ||
242 | f.Write(" -debug"); | ||
243 | if ((bool)conf.Options["AllowUnsafe"]) | ||
244 | f.Write(" -unsafe"); | ||
245 | if ((bool)conf.Options["CheckUnderflowOverflow"]) | ||
246 | f.Write(" -checked"); | ||
247 | if (project.StartupObject != "") | ||
248 | f.Write(" -main:{0}", project.StartupObject); | ||
249 | if ((string)conf.Options["CompilerDefines"] != "") | ||
250 | { | ||
251 | f.Write(" -define:\"{0}\"", conf.Options["CompilerDefines"]); | ||
252 | } | ||
253 | |||
254 | f.Write(" -target:{0} -out:{1}", ProjectTypeToTarget(project.Type), outpath); | ||
255 | |||
256 | // Build references to other projects. Now that sux. | ||
257 | // We have to reference the other project in the same conf. | ||
258 | foreach (ReferenceNode refr in project.References) | ||
259 | if (solution.ProjectsTable.Contains(refr.Name)) | ||
260 | { | ||
261 | ProjectNode refProj; | ||
262 | refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; | ||
263 | f.Write(" -r:{0}", ProjectOutput(refProj, conf)); | ||
264 | } | ||
265 | |||
266 | f.Write(" $(REFERENCES_{0})", project.Name); | ||
267 | f.Write(" $(RESOURCES_{0})", project.Name); | ||
268 | f.Write(" $(SOURCES_{0})", project.Name); | ||
269 | f.WriteLine(); | ||
270 | |||
271 | // Copy references with localcopy. | ||
272 | foreach (ReferenceNode refr in project.References) | ||
273 | if (refr.LocalCopy) | ||
274 | { | ||
275 | string outPath, srcPath, destPath; | ||
276 | outPath = Helper.NormalizePath((string)conf.Options["OutputPath"]); | ||
277 | if (solution.ProjectsTable.Contains(refr.Name)) | ||
278 | { | ||
279 | ProjectNode refProj; | ||
280 | refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; | ||
281 | srcPath = ProjectOutput(refProj, conf); | ||
282 | destPath = Path.Combine(outPath, Path.GetFileName(srcPath)); | ||
283 | destPath = NicePath(project, destPath); | ||
284 | if (srcPath != destPath) | ||
285 | { | ||
286 | f.WriteLine("\tcp -f {0} {1}", srcPath, destPath); | ||
287 | filesToClean += " " + destPath; | ||
288 | } | ||
289 | continue; | ||
290 | } | ||
291 | srcPath = FindFileReference(refr.Name, project); | ||
292 | if (srcPath != null) | ||
293 | { | ||
294 | destPath = Path.Combine(outPath, Path.GetFileName(srcPath)); | ||
295 | destPath = NicePath(project, destPath); | ||
296 | f.WriteLine("\tcp -f {0} {1}", srcPath, destPath); | ||
297 | filesToClean += " " + destPath; | ||
298 | } | ||
299 | } | ||
300 | |||
301 | if (clash) | ||
302 | { | ||
303 | filesToClean += String.Format(" .{0}-{1}-timestamp", project.Name, conf.Name); | ||
304 | f.WriteLine("\ttouch .{0}-{1}-timestamp", project.Name, conf.Name); | ||
305 | f.Write("\trm -rf"); | ||
306 | foreach (ConfigurationNode otherConf in project.Configurations) | ||
307 | if (otherConf != conf) | ||
308 | f.WriteLine(" .{0}-{1}-timestamp", project.Name, otherConf.Name); | ||
309 | f.WriteLine(); | ||
310 | } | ||
311 | f.WriteLine(); | ||
312 | f.WriteLine("{0}-{1}-clean:", project.Name, conf.Name); | ||
313 | f.WriteLine("\trm -rf {0}", filesToClean); | ||
314 | f.WriteLine(); | ||
315 | } | ||
316 | } | ||
317 | |||
318 | private void WriteIntro(StreamWriter f, SolutionNode solution) | ||
319 | { | ||
320 | f.WriteLine("# Makefile for {0} generated by Prebuild ( http://dnpb.sf.net )", solution.Name); | ||
321 | f.WriteLine("# Do not edit."); | ||
322 | f.WriteLine("#"); | ||
323 | |||
324 | f.Write("# Configurations:"); | ||
325 | foreach (ConfigurationNode conf in solution.Configurations) | ||
326 | f.Write(" {0}", conf.Name); | ||
327 | f.WriteLine(); | ||
328 | |||
329 | f.WriteLine("# Projects:"); | ||
330 | foreach (ProjectNode proj in solution.Projects) | ||
331 | f.WriteLine("#\t{0}", proj.Name); | ||
332 | |||
333 | f.WriteLine("#"); | ||
334 | f.WriteLine("# Building:"); | ||
335 | f.WriteLine("#\t\"make\" to build everything under the default(first) configuration"); | ||
336 | f.WriteLine("#\t\"make CONF\" to build every project under configuration CONF"); | ||
337 | f.WriteLine("#\t\"make PROJ\" to build project PROJ under the default(first) configuration"); | ||
338 | f.WriteLine("#\t\"make PROJ-CONF\" to build project PROJ under configuration CONF"); | ||
339 | f.WriteLine("#"); | ||
340 | f.WriteLine("# Cleaning (removing results of build):"); | ||
341 | f.WriteLine("#\t\"make clean\" to clean everything, that's what you probably want"); | ||
342 | f.WriteLine("#\t\"make CONF\" to clean everything for a configuration"); | ||
343 | f.WriteLine("#\t\"make PROJ\" to clean everything for a project"); | ||
344 | f.WriteLine("#\t\"make PROJ-CONF\" to clea project PROJ under configuration CONF"); | ||
345 | f.WriteLine(); | ||
346 | } | ||
347 | |||
348 | private void WritePhony(StreamWriter f, SolutionNode solution) | ||
349 | { | ||
350 | string defconf = ""; | ||
351 | foreach (ConfigurationNode conf in solution.Configurations) | ||
352 | { | ||
353 | defconf = conf.Name; | ||
354 | break; | ||
355 | } | ||
356 | |||
357 | f.Write(".PHONY: all"); | ||
358 | foreach (ProjectNode proj in solution.Projects) | ||
359 | f.Write(" {0} {0}-clean", proj.Name); | ||
360 | foreach (ConfigurationNode conf in solution.Configurations) | ||
361 | f.Write(" {0} {0}-clean", conf.Name); | ||
362 | foreach (ProjectNode proj in solution.Projects) | ||
363 | foreach (ConfigurationNode conf in solution.Configurations) | ||
364 | f.Write(" {0}-{1} {0}-{1}-clean", proj.Name, conf.Name); | ||
365 | f.WriteLine(); | ||
366 | f.WriteLine(); | ||
367 | |||
368 | f.WriteLine("all: {0}", defconf); | ||
369 | f.WriteLine(); | ||
370 | |||
371 | f.Write("clean:"); | ||
372 | foreach (ConfigurationNode conf in solution.Configurations) | ||
373 | f.Write(" {0}-clean", conf.Name); | ||
374 | f.WriteLine(); | ||
375 | f.WriteLine(); | ||
376 | |||
377 | foreach (ConfigurationNode conf in solution.Configurations) | ||
378 | { | ||
379 | f.Write("{0}: ", conf.Name); | ||
380 | foreach (ProjectNode proj in solution.Projects) | ||
381 | f.Write(" {0}-{1}", proj.Name, conf.Name); | ||
382 | f.WriteLine(); | ||
383 | f.WriteLine(); | ||
384 | |||
385 | f.Write("{0}-clean: ", conf.Name); | ||
386 | foreach (ProjectNode proj in solution.Projects) | ||
387 | f.Write(" {0}-{1}-clean", proj.Name, conf.Name); | ||
388 | f.WriteLine(); | ||
389 | f.WriteLine(); | ||
390 | } | ||
391 | |||
392 | foreach (ProjectNode proj in solution.Projects) | ||
393 | { | ||
394 | f.WriteLine("{0}: {0}-{1}", proj.Name, defconf); | ||
395 | f.WriteLine(); | ||
396 | |||
397 | f.Write("{0}-clean:", proj.Name); | ||
398 | foreach (ConfigurationNode conf in proj.Configurations) | ||
399 | f.Write(" {0}-{1}-clean", proj.Name, conf.Name); | ||
400 | f.WriteLine(); | ||
401 | f.WriteLine(); | ||
402 | } | ||
403 | } | ||
404 | |||
405 | private void WriteSolution(SolutionNode solution) | ||
406 | { | ||
407 | m_Kernel.Log.Write("Creating makefile for {0}", solution.Name); | ||
408 | m_Kernel.CurrentWorkingDirectory.Push(); | ||
409 | |||
410 | string file = "Makefile";// Helper.MakeFilePath(solution.FullPath, solution.Name, "make"); | ||
411 | StreamWriter f = new StreamWriter(file); | ||
412 | |||
413 | Helper.SetCurrentDir(Path.GetDirectoryName(file)); | ||
414 | |||
415 | using (f) | ||
416 | { | ||
417 | WriteIntro(f, solution); | ||
418 | WritePhony(f, solution); | ||
419 | |||
420 | foreach (ProjectNode project in solution.Projects) | ||
421 | { | ||
422 | m_Kernel.Log.Write("...Creating Project: {0}", project.Name); | ||
423 | WriteProject(f, solution, project); | ||
424 | } | ||
425 | } | ||
426 | |||
427 | m_Kernel.Log.Write(""); | ||
428 | m_Kernel.CurrentWorkingDirectory.Pop(); | ||
429 | } | ||
430 | |||
431 | private void CleanSolution(SolutionNode solution) | ||
432 | { | ||
433 | m_Kernel.Log.Write("Cleaning makefile for {0}", solution.Name); | ||
434 | |||
435 | string file = Helper.MakeFilePath(solution.FullPath, solution.Name, "make"); | ||
436 | Helper.DeleteIfExists(file); | ||
437 | |||
438 | m_Kernel.Log.Write(""); | ||
439 | } | ||
440 | |||
441 | #endregion | ||
442 | |||
443 | #region ITarget Members | ||
444 | |||
445 | public void Write(Kernel kern) | ||
446 | { | ||
447 | m_Kernel = kern; | ||
448 | foreach (SolutionNode solution in kern.Solutions) | ||
449 | WriteSolution(solution); | ||
450 | m_Kernel = null; | ||
451 | } | ||
452 | |||
453 | public virtual void Clean(Kernel kern) | ||
454 | { | ||
455 | m_Kernel = kern; | ||
456 | foreach (SolutionNode sol in kern.Solutions) | ||
457 | CleanSolution(sol); | ||
458 | m_Kernel = null; | ||
459 | } | ||
460 | |||
461 | public string Name | ||
462 | { | ||
463 | get | ||
464 | { | ||
465 | return "makefile"; | ||
466 | } | ||
467 | } | ||
468 | |||
469 | #endregion | ||
470 | } | ||
471 | } | ||
diff --git a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs index 7c0a1e2..af3341f 100644 --- a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs +++ b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs | |||
@@ -26,9 +26,9 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
26 | #region CVS Information | 26 | #region CVS Information |
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: cjcollier $ |
30 | * $Date: 2007-02-13 22:07:07 +0100 (ti, 13 feb 2007) $ | 30 | * $Date: 2007-04-11 07:10:35 +0900 (Wed, 11 Apr 2007) $ |
31 | * $Revision: 206 $ | 31 | * $Revision: 231 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
@@ -106,9 +106,24 @@ namespace Prebuild.Core.Targets | |||
106 | ret += " refto=\""; | 106 | ret += " refto=\""; |
107 | try | 107 | try |
108 | { | 108 | { |
109 | //Assembly assem = Assembly.Load(refr.Name); | 109 | /* |
110 | //ret += assem.FullName; | 110 | Day changed to 28 Mar 2007 |
111 | ret += refr.Name; | 111 | ... |
112 | 08:09 < cj> is there anything that replaces Assembly.LoadFromPartialName() ? | ||
113 | 08:09 < jonp> no | ||
114 | 08:10 < jonp> in their infinite wisdom [sic], microsoft decided that the | ||
115 | ability to load any assembly version by-name was an inherently | ||
116 | bad idea | ||
117 | 08:11 < cj> I'm thinking of a bunch of four-letter words right now... | ||
118 | 08:11 < cj> security through making it difficult for the developer!!! | ||
119 | 08:12 < jonp> just use the Obsolete API | ||
120 | 08:12 < jonp> it should still work | ||
121 | 08:12 < cj> alrighty. | ||
122 | 08:12 < jonp> you just get warnings when using it | ||
123 | */ | ||
124 | Assembly assem = Assembly.LoadWithPartialName(refr.Name); | ||
125 | ret += assem.FullName; | ||
126 | //ret += refr.Name; | ||
112 | } | 127 | } |
113 | catch (System.NullReferenceException e) | 128 | catch (System.NullReferenceException e) |
114 | { | 129 | { |
diff --git a/Prebuild/src/Core/Targets/NAntTarget.cs b/Prebuild/src/Core/Targets/NAntTarget.cs index 8a6dbdf..6ee6aef 100644 --- a/Prebuild/src/Core/Targets/NAntTarget.cs +++ b/Prebuild/src/Core/Targets/NAntTarget.cs | |||
@@ -1,34 +1,46 @@ | |||
1 | #region BSD License | 1 | #region BSD License |
2 | /* | 2 | /* |
3 | Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) | 3 | Copyright (c) 2004 - 2008 |
4 | 4 | Matthew Holmes (matthew@wildfiregames.com), | |
5 | Redistribution and use in source and binary forms, with or without modification, are permitted | 5 | Dan Moorehead (dan05a@gmail.com), |
6 | provided that the following conditions are met: | 6 | C.J. Adams-Collier (cjac@colliertech.org), |
7 | 7 | ||
8 | * Redistributions of source code must retain the above copyright notice, this list of conditions | 8 | Redistribution and use in source and binary forms, with or without |
9 | and the following disclaimer. | 9 | modification, are permitted provided that the following conditions are |
10 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions | 10 | met: |
11 | and the following disclaimer in the documentation and/or other materials provided with the | 11 | |
12 | distribution. | 12 | * Redistributions of source code must retain the above copyright |
13 | * The name of the author may not be used to endorse or promote products derived from this software | 13 | notice, this list of conditions and the following disclaimer. |
14 | without specific prior written permission. | 14 | |
15 | 15 | * Redistributions in binary form must reproduce the above copyright | |
16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, | 16 | notice, this list of conditions and the following disclaimer in the |
17 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 17 | documentation and/or other materials provided with the distribution. |
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 18 | |
19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 19 | * The name of the author may not be used to endorse or promote |
20 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 20 | products derived from this software without specific prior written |
21 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | 21 | permission. |
22 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 22 | |
23 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | ||
24 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
25 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
26 | DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, | ||
27 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
28 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
29 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
30 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
31 | 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 | ||
33 | POSSIBILITY OF SUCH DAMAGE. | ||
23 | */ | 34 | */ |
35 | |||
24 | #endregion | 36 | #endregion |
25 | 37 | ||
26 | #region CVS Information | 38 | #region CVS Information |
27 | /* | 39 | /* |
28 | * $Source$ | 40 | * $Source$ |
29 | * $Author: jendave $ | 41 | * $Author: cjcollier $ |
30 | * $Date: 2007-02-13 21:58:03 +0100 (ti, 13 feb 2007) $ | 42 | * $Date: 2008-02-07 10:22:36 +0900 (Thu, 07 Feb 2008) $ |
31 | * $Revision: 205 $ | 43 | * $Revision: 255 $ |
32 | */ | 44 | */ |
33 | #endregion | 45 | #endregion |
34 | 46 | ||
@@ -83,9 +95,7 @@ namespace Prebuild.Core.Targets | |||
83 | if (solution.ProjectsTable.ContainsKey(refr.Name)) | 95 | if (solution.ProjectsTable.ContainsKey(refr.Name)) |
84 | { | 96 | { |
85 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; | 97 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; |
86 | |||
87 | string finalPath = Helper.NormalizePath(((ReferencePathNode)currentProject.ReferencePaths[0]).Path + refr.Name + GetProjectExtension(project), '/'); | 98 | string finalPath = Helper.NormalizePath(((ReferencePathNode)currentProject.ReferencePaths[0]).Path + refr.Name + GetProjectExtension(project), '/'); |
88 | |||
89 | return finalPath; | 99 | return finalPath; |
90 | } | 100 | } |
91 | else | 101 | else |
@@ -122,7 +132,6 @@ namespace Prebuild.Core.Targets | |||
122 | { | 132 | { |
123 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; | 133 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; |
124 | string finalPath = Helper.NormalizePath(((ReferencePathNode)project.ReferencePaths[0]).Path, '/'); | 134 | string finalPath = Helper.NormalizePath(((ReferencePathNode)project.ReferencePaths[0]).Path, '/'); |
125 | |||
126 | return finalPath; | 135 | return finalPath; |
127 | } | 136 | } |
128 | else | 137 | else |
@@ -213,7 +222,7 @@ namespace Prebuild.Core.Targets | |||
213 | ss.WriteLine(" <target name=\"{0}\">", "build"); | 222 | ss.WriteLine(" <target name=\"{0}\">", "build"); |
214 | ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />"); | 223 | ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />"); |
215 | ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />"); | 224 | ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />"); |
216 | ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/${build.dir}\">"); | 225 | ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/${build.dir}\" flatten=\"true\">"); |
217 | ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">"); | 226 | ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">"); |
218 | foreach (ReferenceNode refr in project.References) | 227 | foreach (ReferenceNode refr in project.References) |
219 | { | 228 | { |
@@ -222,8 +231,41 @@ namespace Prebuild.Core.Targets | |||
222 | ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)) + "\" />", '/')); | 231 | ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)) + "\" />", '/')); |
223 | } | 232 | } |
224 | } | 233 | } |
234 | |||
225 | ss.WriteLine(" </fileset>"); | 235 | ss.WriteLine(" </fileset>"); |
226 | ss.WriteLine(" </copy>"); | 236 | ss.WriteLine(" </copy>"); |
237 | if (project.ConfigFile != null && project.ConfigFile.Length!=0) | ||
238 | { | ||
239 | ss.Write(" <copy file=\"" + project.ConfigFile + "\" tofile=\"${project::get-base-directory()}/${build.dir}/${project::get-name()}"); | ||
240 | |||
241 | if (project.Type == ProjectType.Library) | ||
242 | { | ||
243 | ss.Write(".dll.config\""); | ||
244 | } | ||
245 | else | ||
246 | { | ||
247 | ss.Write(".exe.config\""); | ||
248 | } | ||
249 | ss.WriteLine(" />"); | ||
250 | } | ||
251 | |||
252 | // Add the content files to just be copied | ||
253 | ss.WriteLine(" {0}", "<copy todir=\"${project::get-base-directory()}/${build.dir}\">"); | ||
254 | ss.WriteLine(" {0}", "<fileset basedir=\".\">"); | ||
255 | |||
256 | foreach (string file in project.Files) | ||
257 | { | ||
258 | // Ignore if we aren't content | ||
259 | if (project.Files.GetBuildAction(file) != BuildAction.Content) | ||
260 | continue; | ||
261 | |||
262 | // Create a include tag | ||
263 | ss.WriteLine(" {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />"); | ||
264 | } | ||
265 | |||
266 | ss.WriteLine(" {0}", "</fileset>"); | ||
267 | ss.WriteLine(" {0}", "</copy>"); | ||
268 | |||
227 | ss.Write(" <csc"); | 269 | ss.Write(" <csc"); |
228 | ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower()); | 270 | ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower()); |
229 | ss.Write(" debug=\"{0}\"", "${build.debug}"); | 271 | ss.Write(" debug=\"{0}\"", "${build.debug}"); |
@@ -245,6 +287,8 @@ namespace Prebuild.Core.Targets | |||
245 | ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines); | 287 | ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines); |
246 | break; | 288 | break; |
247 | } | 289 | } |
290 | ss.Write(" main=\"{0}\"", project.StartupObject); | ||
291 | |||
248 | foreach (ConfigurationNode conf in project.Configurations) | 292 | foreach (ConfigurationNode conf in project.Configurations) |
249 | { | 293 | { |
250 | if (GetXmlDocFile(project, conf) != "") | 294 | if (GetXmlDocFile(project, conf) != "") |
@@ -476,14 +520,15 @@ namespace Prebuild.Core.Targets | |||
476 | 520 | ||
477 | ss.WriteLine(" <target name=\"init\" description=\"\">"); | 521 | ss.WriteLine(" <target name=\"init\" description=\"\">"); |
478 | ss.WriteLine(" <call target=\"${project.config}\" />"); | 522 | ss.WriteLine(" <call target=\"${project.config}\" />"); |
479 | ss.WriteLine(" <sysinfo />"); | 523 | ss.WriteLine(" <property name=\"sys.os.platform\""); |
524 | ss.WriteLine(" value=\"${platform::get-name()}\""); | ||
525 | ss.WriteLine(" />"); | ||
480 | ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />"); | 526 | ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />"); |
481 | ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />"); | 527 | ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />"); |
482 | ss.WriteLine(" </target>"); | 528 | ss.WriteLine(" </target>"); |
483 | ss.WriteLine(); | 529 | ss.WriteLine(); |
484 | 530 | ||
485 | 531 | ||
486 | |||
487 | // sdague - ok, this is an ugly hack, but what it lets | 532 | // sdague - ok, this is an ugly hack, but what it lets |
488 | // us do is native include of files into the nant | 533 | // us do is native include of files into the nant |
489 | // created files from all .nant/*include files. This | 534 | // created files from all .nant/*include files. This |
diff --git a/Prebuild/src/Core/Targets/SharpDevelop2Target.cs b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs index 6b0552e..0d78796 100644 --- a/Prebuild/src/Core/Targets/SharpDevelop2Target.cs +++ b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs | |||
@@ -53,7 +53,7 @@ namespace Prebuild.Core.Targets | |||
53 | } | 53 | } |
54 | 54 | ||
55 | #region Public Methods | 55 | #region Public Methods |
56 | 56 | ||
57 | /// <summary> | 57 | /// <summary> |
58 | /// Gets the name. | 58 | /// Gets the name. |
59 | /// </summary> | 59 | /// </summary> |
diff --git a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs index ededadb..6fe038b 100644 --- a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs +++ b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2007-02-13 21:58:03 +0100 (ti, 13 feb 2007) $ | 30 | * $Date: 2007-02-14 05:58:03 +0900 (Wed, 14 Feb 2007) $ |
31 | * $Revision: 205 $ | 31 | * $Revision: 205 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Targets/VS2002Target.cs b/Prebuild/src/Core/Targets/VS2002Target.cs index b380f36..7067cf3 100644 --- a/Prebuild/src/Core/Targets/VS2002Target.cs +++ b/Prebuild/src/Core/Targets/VS2002Target.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Targets/VS2003Target.cs b/Prebuild/src/Core/Targets/VS2003Target.cs index c3ca930..4bf05cb 100644 --- a/Prebuild/src/Core/Targets/VS2003Target.cs +++ b/Prebuild/src/Core/Targets/VS2003Target.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-09-29 21:11:40 +0200 (fr, 29 sep 2006) $ | 30 | * $Date: 2006-09-30 04:11:40 +0900 (Sat, 30 Sep 2006) $ |
31 | * $Revision: 177 $ | 31 | * $Revision: 177 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Targets/VS2005Target.cs b/Prebuild/src/Core/Targets/VS2005Target.cs index bd56beb..4c17a3a 100644 --- a/Prebuild/src/Core/Targets/VS2005Target.cs +++ b/Prebuild/src/Core/Targets/VS2005Target.cs | |||
@@ -26,9 +26,9 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
26 | #region CVS Information | 26 | #region CVS Information |
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: robloach $ | 29 | * $Author: borrillis $ |
30 | * $Date: 2007-02-27 19:52:34 +0100 (ti, 27 feb 2007) $ | 30 | * $Date: 2007-05-25 01:03:16 +0900 (Fri, 25 May 2007) $ |
31 | * $Revision: 207 $ | 31 | * $Revision: 243 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
34 | 34 | ||
@@ -36,6 +36,7 @@ using System; | |||
36 | using System.Collections; | 36 | using System.Collections; |
37 | using System.Collections.Specialized; | 37 | using System.Collections.Specialized; |
38 | using System.IO; | 38 | using System.IO; |
39 | using System.Text; | ||
39 | 40 | ||
40 | using Prebuild.Core.Attributes; | 41 | using Prebuild.Core.Attributes; |
41 | using Prebuild.Core.Interfaces; | 42 | using Prebuild.Core.Interfaces; |
@@ -235,7 +236,7 @@ namespace Prebuild.Core.Targets | |||
235 | 236 | ||
236 | Hashtable tools; | 237 | Hashtable tools; |
237 | Kernel kernel; | 238 | Kernel kernel; |
238 | 239 | ||
239 | protected virtual string ToolsVersionXml | 240 | protected virtual string ToolsVersionXml |
240 | { | 241 | { |
241 | get | 242 | get |
@@ -249,7 +250,7 @@ namespace Prebuild.Core.Targets | |||
249 | get { return "# Visual Studio 2005"; } | 250 | get { return "# Visual Studio 2005"; } |
250 | } | 251 | } |
251 | 252 | ||
252 | /// <summary> | 253 | /// <summary> |
253 | /// Gets or sets the solution version. | 254 | /// Gets or sets the solution version. |
254 | /// </summary> | 255 | /// </summary> |
255 | /// <value>The solution version.</value> | 256 | /// <value>The solution version.</value> |
@@ -260,6 +261,7 @@ namespace Prebuild.Core.Targets | |||
260 | return "9.00"; | 261 | return "9.00"; |
261 | } | 262 | } |
262 | } | 263 | } |
264 | |||
263 | /// <summary> | 265 | /// <summary> |
264 | /// Gets or sets the product version. | 266 | /// Gets or sets the product version. |
265 | /// </summary> | 267 | /// </summary> |
@@ -287,6 +289,7 @@ namespace Prebuild.Core.Targets | |||
287 | this.schemaVersion = value; | 289 | this.schemaVersion = value; |
288 | } | 290 | } |
289 | } | 291 | } |
292 | |||
290 | /// <summary> | 293 | /// <summary> |
291 | /// Gets or sets the name of the version. | 294 | /// Gets or sets the name of the version. |
292 | /// </summary> | 295 | /// </summary> |
@@ -298,6 +301,7 @@ namespace Prebuild.Core.Targets | |||
298 | return "Visual C# 2005"; | 301 | return "Visual C# 2005"; |
299 | } | 302 | } |
300 | } | 303 | } |
304 | |||
301 | /// <summary> | 305 | /// <summary> |
302 | /// Gets or sets the version. | 306 | /// Gets or sets the version. |
303 | /// </summary> | 307 | /// </summary> |
@@ -377,7 +381,7 @@ namespace Prebuild.Core.Targets | |||
377 | #region Project File | 381 | #region Project File |
378 | using (ps) | 382 | using (ps) |
379 | { | 383 | { |
380 | ps.WriteLine("<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"{0}>", ToolsVersionXml ); | 384 | ps.WriteLine("<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"{0}>", ToolsVersionXml); |
381 | //ps.WriteLine(" <{0}", toolInfo.XMLTag); | 385 | //ps.WriteLine(" <{0}", toolInfo.XMLTag); |
382 | ps.WriteLine(" <PropertyGroup>"); | 386 | ps.WriteLine(" <PropertyGroup>"); |
383 | ps.WriteLine(" <ProjectType>Local</ProjectType>"); | 387 | ps.WriteLine(" <ProjectType>Local</ProjectType>"); |
@@ -431,7 +435,7 @@ namespace Prebuild.Core.Targets | |||
431 | ps.WriteLine(" <ConfigurationOverrideFile>"); | 435 | ps.WriteLine(" <ConfigurationOverrideFile>"); |
432 | ps.WriteLine(" </ConfigurationOverrideFile>"); | 436 | ps.WriteLine(" </ConfigurationOverrideFile>"); |
433 | ps.WriteLine(" <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]); | 437 | ps.WriteLine(" <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]); |
434 | ps.WriteLine(" <DocumentationFile>{0}</DocumentationFile>", conf.Options["XmlDocFile"]); | 438 | ps.WriteLine(" <DocumentationFile>{0}</DocumentationFile>", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString())); |
435 | ps.WriteLine(" <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]); | 439 | ps.WriteLine(" <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]); |
436 | ps.WriteLine(" <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]); | 440 | ps.WriteLine(" <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]); |
437 | // ps.WriteLine(" <IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"]); | 441 | // ps.WriteLine(" <IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"]); |
@@ -458,7 +462,7 @@ namespace Prebuild.Core.Targets | |||
458 | // Assembly References | 462 | // Assembly References |
459 | ps.WriteLine(" <ItemGroup>"); | 463 | ps.WriteLine(" <ItemGroup>"); |
460 | string refPath = ((ReferencePathNode) project.ReferencePaths[0]).Path; | 464 | string refPath = ((ReferencePathNode) project.ReferencePaths[0]).Path; |
461 | 465 | ||
462 | foreach (ReferenceNode refr in project.References) | 466 | foreach (ReferenceNode refr in project.References) |
463 | { | 467 | { |
464 | if (!solution.ProjectsTable.ContainsKey(refr.Name)) | 468 | if (!solution.ProjectsTable.ContainsKey(refr.Name)) |
@@ -471,7 +475,7 @@ namespace Prebuild.Core.Targets | |||
471 | 475 | ||
472 | string path; | 476 | string path; |
473 | 477 | ||
474 | if( refr.Name.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase )) | 478 | if (refr.Name.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase)) |
475 | { | 479 | { |
476 | path = Helper.NormalizePath(Path.Combine( refPath, refr.Name), '\\'); | 480 | path = Helper.NormalizePath(Path.Combine( refPath, refr.Name), '\\'); |
477 | } | 481 | } |
@@ -479,7 +483,7 @@ namespace Prebuild.Core.Targets | |||
479 | { | 483 | { |
480 | path = refr.Name + ".dll"; | 484 | path = refr.Name + ".dll"; |
481 | } | 485 | } |
482 | 486 | ||
483 | // TODO: Allow reference to *.exe files | 487 | // TODO: Allow reference to *.exe files |
484 | ps.WriteLine(" <HintPath>{0}</HintPath>", path ); | 488 | ps.WriteLine(" <HintPath>{0}</HintPath>", path ); |
485 | ps.WriteLine(" <Private>{0}</Private>", refr.LocalCopy); | 489 | ps.WriteLine(" <Private>{0}</Private>", refr.LocalCopy); |
@@ -602,35 +606,53 @@ namespace Prebuild.Core.Targets | |||
602 | { | 606 | { |
603 | if (!list.Contains(file)) | 607 | if (!list.Contains(file)) |
604 | { | 608 | { |
605 | ps.Write(" <{0} ", project.Files.GetBuildAction(file)); | 609 | ps.Write(" <{0} ", project.Files.GetBuildAction(file)); |
606 | ps.WriteLine("Include=\"{0}\">", file); | ||
607 | 610 | ||
611 | int startPos = 0; | ||
612 | if ( project.Files.GetPreservePath( file ) ) | ||
613 | { | ||
614 | while ( ( @"./\" ).IndexOf( file.Substring( startPos, 1 ) ) != -1 ) | ||
615 | startPos++; | ||
608 | 616 | ||
609 | if (file.Contains("Designer.cs")) | 617 | } |
610 | { | 618 | else |
611 | ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", file.Substring(0, file.IndexOf(".Designer.cs")) + ".cs"); | 619 | { |
612 | } | 620 | startPos = file.LastIndexOf( Path.GetFileName( file ) ); |
621 | } | ||
622 | ps.WriteLine("Include=\"{0}\">", Helper.NormalizePath(file)); | ||
613 | 623 | ||
614 | if (project.Files.GetIsLink(file)) | 624 | |
615 | { | 625 | if (file.Contains("Designer.cs")) |
616 | ps.WriteLine(" <Link>{0}</Link>", Path.GetFileName(file)); | 626 | { |
617 | } | 627 | string d = ".Designer.cs"; |
618 | else if (project.Files.GetBuildAction(file) != BuildAction.None) | 628 | int index = file.Contains("\\") ? file.IndexOf("\\") + 1 : 0; |
619 | { | 629 | ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", file.Substring(index, file.Length - index - d.Length) + ".cs"); |
620 | if (project.Files.GetBuildAction(file) != BuildAction.EmbeddedResource) | 630 | } |
621 | { | 631 | |
622 | ps.WriteLine(" <SubType>{0}</SubType>", project.Files.GetSubType(file)); | 632 | if (project.Files.GetIsLink(file)) |
623 | } | 633 | { |
624 | } | 634 | string alias = project.Files.GetLinkPath( file ); |
625 | if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never) | 635 | alias += file.Substring( startPos ); |
636 | alias = Helper.NormalizePath( alias ); | ||
637 | ps.WriteLine( " <Link>{0}</Link>", alias ); | ||
638 | } | ||
639 | else if (project.Files.GetBuildAction(file) != BuildAction.None) | ||
640 | { | ||
641 | if (project.Files.GetBuildAction(file) != BuildAction.EmbeddedResource) | ||
626 | { | 642 | { |
627 | ps.WriteLine(" <CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(file)); | 643 | ps.WriteLine(" <SubType>{0}</SubType>", project.Files.GetSubType(file)); |
628 | } | 644 | } |
645 | } | ||
629 | 646 | ||
630 | ps.WriteLine(" </{0}>", project.Files.GetBuildAction(file)); | 647 | if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never) |
648 | { | ||
649 | ps.WriteLine(" <CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(file)); | ||
631 | } | 650 | } |
651 | |||
652 | ps.WriteLine(" </{0}>", project.Files.GetBuildAction(file)); | ||
632 | } | 653 | } |
633 | } | 654 | } |
655 | } | ||
634 | // ps.WriteLine(" </Include>"); | 656 | // ps.WriteLine(" </Include>"); |
635 | 657 | ||
636 | ps.WriteLine(" </ItemGroup>"); | 658 | ps.WriteLine(" </ItemGroup>"); |
@@ -658,15 +680,14 @@ namespace Prebuild.Core.Targets | |||
658 | ps.WriteLine(" <PropertyGroup>"); | 680 | ps.WriteLine(" <PropertyGroup>"); |
659 | //ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project)); | 681 | //ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project)); |
660 | 682 | ||
661 | |||
662 | ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>"); | 683 | ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>"); |
663 | ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>"); | ||
664 | 684 | ||
665 | if (projectFile.Contains( "OpenSim.csproj" )) | 685 | if (projectFile.Contains( "OpenSim.csproj" )) |
666 | { | 686 | { |
667 | ps.WriteLine(" <StartArguments>-loginserver -sandbox -accounts</StartArguments>"); | 687 | ps.WriteLine(" <StartArguments>-loginserver -sandbox -accounts</StartArguments>"); |
668 | } | 688 | } |
669 | 689 | ||
690 | ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>"); | ||
670 | ps.WriteLine(" <ReferencePath>{0}</ReferencePath>", MakeRefPath(project)); | 691 | ps.WriteLine(" <ReferencePath>{0}</ReferencePath>", MakeRefPath(project)); |
671 | ps.WriteLine(" <LastOpenVersion>{0}</LastOpenVersion>", this.ProductVersion); | 692 | ps.WriteLine(" <LastOpenVersion>{0}</LastOpenVersion>", this.ProductVersion); |
672 | ps.WriteLine(" <ProjectView>ProjectFiles</ProjectView>"); | 693 | ps.WriteLine(" <ProjectView>ProjectFiles</ProjectView>"); |
@@ -678,7 +699,7 @@ namespace Prebuild.Core.Targets | |||
678 | ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' \"", conf.Name); | 699 | ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' \"", conf.Name); |
679 | ps.WriteLine(" />"); | 700 | ps.WriteLine(" />"); |
680 | } | 701 | } |
681 | 702 | ||
682 | ps.WriteLine("</Project>"); | 703 | ps.WriteLine("</Project>"); |
683 | } | 704 | } |
684 | #endregion | 705 | #endregion |
diff --git a/Prebuild/src/Core/Targets/XcodeTarget.cs b/Prebuild/src/Core/Targets/XcodeTarget.cs new file mode 100644 index 0000000..ee3b241 --- /dev/null +++ b/Prebuild/src/Core/Targets/XcodeTarget.cs | |||
@@ -0,0 +1,605 @@ | |||
1 | #region BSD License | ||
2 | /* | ||
3 | Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) | ||
4 | |||
5 | Redistribution and use in source and binary forms, with or without modification, are permitted | ||
6 | provided 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 | |||
16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, | ||
17 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
20 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
21 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
22 | IN 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: 2007-02-13 12:58:03 -0800 (Tue, 13 Feb 2007) $ | ||
31 | * $Revision: 205 $ | ||
32 | */ | ||
33 | #endregion | ||
34 | |||
35 | using System; | ||
36 | using System.Collections; | ||
37 | using System.Collections.Specialized; | ||
38 | using System.IO; | ||
39 | using System.Reflection; | ||
40 | using System.Text.RegularExpressions; | ||
41 | |||
42 | using Prebuild.Core.Attributes; | ||
43 | using Prebuild.Core.Interfaces; | ||
44 | using Prebuild.Core.Nodes; | ||
45 | using Prebuild.Core.Utilities; | ||
46 | |||
47 | namespace Prebuild.Core.Targets | ||
48 | { | ||
49 | /// <summary> | ||
50 | /// | ||
51 | /// </summary> | ||
52 | [Target("xcode")] | ||
53 | public class XcodeTarget : ITarget | ||
54 | { | ||
55 | #region Fields | ||
56 | |||
57 | private Kernel m_Kernel; | ||
58 | |||
59 | #endregion | ||
60 | |||
61 | #region Private Methods | ||
62 | |||
63 | private static string PrependPath(string path) | ||
64 | { | ||
65 | string tmpPath = Helper.NormalizePath(path, '/'); | ||
66 | Regex regex = new Regex(@"(\w):/(\w+)"); | ||
67 | Match match = regex.Match(tmpPath); | ||
68 | //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') | ||
69 | //{ | ||
70 | tmpPath = Helper.NormalizePath(tmpPath); | ||
71 | //} | ||
72 | // else | ||
73 | // { | ||
74 | // tmpPath = Helper.NormalizePath("./" + tmpPath); | ||
75 | // } | ||
76 | |||
77 | return tmpPath; | ||
78 | } | ||
79 | |||
80 | private static string BuildReference(SolutionNode solution, ReferenceNode refr) | ||
81 | { | ||
82 | string ret = ""; | ||
83 | if (solution.ProjectsTable.ContainsKey(refr.Name)) | ||
84 | { | ||
85 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; | ||
86 | string fileRef = FindFileReference(refr.Name, project); | ||
87 | string finalPath = Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + "/${build.dir}/", refr.Name, "dll"), '/'); | ||
88 | ret += finalPath; | ||
89 | return ret; | ||
90 | } | ||
91 | else | ||
92 | { | ||
93 | ProjectNode project = (ProjectNode)refr.Parent; | ||
94 | string fileRef = FindFileReference(refr.Name, project); | ||
95 | |||
96 | if (refr.Path != null || fileRef != null) | ||
97 | { | ||
98 | string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path + "/" + refr.Name + ".dll", '/') : fileRef; | ||
99 | ret += finalPath; | ||
100 | return ret; | ||
101 | } | ||
102 | |||
103 | try | ||
104 | { | ||
105 | //Assembly assem = Assembly.Load(refr.Name); | ||
106 | //if (assem != null) | ||
107 | //{ | ||
108 | //ret += (refr.Name + ".dll"); | ||
109 | //} | ||
110 | //else | ||
111 | //{ | ||
112 | ret += (refr.Name + ".dll"); | ||
113 | //} | ||
114 | } | ||
115 | catch (System.NullReferenceException e) | ||
116 | { | ||
117 | e.ToString(); | ||
118 | ret += refr.Name + ".dll"; | ||
119 | } | ||
120 | } | ||
121 | return ret; | ||
122 | } | ||
123 | |||
124 | private static string BuildReferencePath(SolutionNode solution, ReferenceNode refr) | ||
125 | { | ||
126 | string ret = ""; | ||
127 | if (solution.ProjectsTable.ContainsKey(refr.Name)) | ||
128 | { | ||
129 | ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; | ||
130 | string fileRef = FindFileReference(refr.Name, project); | ||
131 | string finalPath = Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + "/${build.dir}/"), '/'); | ||
132 | ret += finalPath; | ||
133 | return ret; | ||
134 | } | ||
135 | else | ||
136 | { | ||
137 | ProjectNode project = (ProjectNode)refr.Parent; | ||
138 | string fileRef = FindFileReference(refr.Name, project); | ||
139 | |||
140 | if (refr.Path != null || fileRef != null) | ||
141 | { | ||
142 | string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path, '/') : fileRef; | ||
143 | ret += finalPath; | ||
144 | return ret; | ||
145 | } | ||
146 | |||
147 | try | ||
148 | { | ||
149 | Assembly assem = Assembly.Load(refr.Name); | ||
150 | if (assem != null) | ||
151 | { | ||
152 | ret += ""; | ||
153 | } | ||
154 | else | ||
155 | { | ||
156 | ret += ""; | ||
157 | } | ||
158 | } | ||
159 | catch (System.NullReferenceException e) | ||
160 | { | ||
161 | e.ToString(); | ||
162 | ret += ""; | ||
163 | } | ||
164 | } | ||
165 | return ret; | ||
166 | } | ||
167 | |||
168 | private static string FindFileReference(string refName, ProjectNode project) | ||
169 | { | ||
170 | foreach (ReferencePathNode refPath in project.ReferencePaths) | ||
171 | { | ||
172 | string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll"); | ||
173 | |||
174 | if (File.Exists(fullPath)) | ||
175 | { | ||
176 | return fullPath; | ||
177 | } | ||
178 | } | ||
179 | |||
180 | return null; | ||
181 | } | ||
182 | |||
183 | /// <summary> | ||
184 | /// Gets the XML doc file. | ||
185 | /// </summary> | ||
186 | /// <param name="project">The project.</param> | ||
187 | /// <param name="conf">The conf.</param> | ||
188 | /// <returns></returns> | ||
189 | public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) | ||
190 | { | ||
191 | if (conf == null) | ||
192 | { | ||
193 | throw new ArgumentNullException("conf"); | ||
194 | } | ||
195 | if (project == null) | ||
196 | { | ||
197 | throw new ArgumentNullException("project"); | ||
198 | } | ||
199 | string docFile = (string)conf.Options["XmlDocFile"]; | ||
200 | // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified | ||
201 | // { | ||
202 | // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml"; | ||
203 | // } | ||
204 | return docFile; | ||
205 | } | ||
206 | |||
207 | private void WriteProject(SolutionNode solution, ProjectNode project) | ||
208 | { | ||
209 | string projFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"); | ||
210 | StreamWriter ss = new StreamWriter(projFile); | ||
211 | |||
212 | m_Kernel.CurrentWorkingDirectory.Push(); | ||
213 | Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); | ||
214 | bool hasDoc = false; | ||
215 | |||
216 | using (ss) | ||
217 | { | ||
218 | ss.WriteLine("<?xml version=\"1.0\" ?>"); | ||
219 | ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name); | ||
220 | ss.WriteLine(" <target name=\"{0}\">", "build"); | ||
221 | ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />"); | ||
222 | ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />"); | ||
223 | ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/${build.dir}\">"); | ||
224 | ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">"); | ||
225 | foreach (ReferenceNode refr in project.References) | ||
226 | { | ||
227 | if (refr.LocalCopy) | ||
228 | { | ||
229 | ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, refr)) + "\" />", '/')); | ||
230 | } | ||
231 | } | ||
232 | ss.WriteLine(" </fileset>"); | ||
233 | ss.WriteLine(" </copy>"); | ||
234 | ss.Write(" <csc"); | ||
235 | ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower()); | ||
236 | ss.Write(" debug=\"{0}\"", "${build.debug}"); | ||
237 | foreach (ConfigurationNode conf in project.Configurations) | ||
238 | { | ||
239 | if (conf.Options.KeyFile != "") | ||
240 | { | ||
241 | ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile); | ||
242 | break; | ||
243 | } | ||
244 | } | ||
245 | foreach (ConfigurationNode conf in project.Configurations) | ||
246 | { | ||
247 | ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe); | ||
248 | break; | ||
249 | } | ||
250 | foreach (ConfigurationNode conf in project.Configurations) | ||
251 | { | ||
252 | ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines); | ||
253 | break; | ||
254 | } | ||
255 | foreach (ConfigurationNode conf in project.Configurations) | ||
256 | { | ||
257 | if (GetXmlDocFile(project, conf) != "") | ||
258 | { | ||
259 | ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf)); | ||
260 | hasDoc = true; | ||
261 | } | ||
262 | break; | ||
263 | } | ||
264 | ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}"); | ||
265 | if (project.Type == ProjectType.Library) | ||
266 | { | ||
267 | ss.Write(".dll\""); | ||
268 | } | ||
269 | else | ||
270 | { | ||
271 | ss.Write(".exe\""); | ||
272 | } | ||
273 | if (project.AppIcon != null && project.AppIcon.Length != 0) | ||
274 | { | ||
275 | ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/')); | ||
276 | } | ||
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 | ss.WriteLine(" <include name=\"${project::get-base-directory()}/${build.dir}\" />"); | ||
316 | ss.WriteLine(" </lib>"); | ||
317 | foreach (ReferenceNode refr in project.References) | ||
318 | { | ||
319 | ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, refr)) + "\" />", '/')); | ||
320 | } | ||
321 | ss.WriteLine(" </references>"); | ||
322 | |||
323 | ss.WriteLine(" </csc>"); | ||
324 | ss.WriteLine(" </target>"); | ||
325 | |||
326 | ss.WriteLine(" <target name=\"clean\">"); | ||
327 | ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />"); | ||
328 | ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />"); | ||
329 | ss.WriteLine(" </target>"); | ||
330 | |||
331 | ss.WriteLine(" <target name=\"doc\" description=\"Creates documentation.\">"); | ||
332 | if (hasDoc) | ||
333 | { | ||
334 | ss.WriteLine(" <property name=\"doc.target\" value=\"\" />"); | ||
335 | ss.WriteLine(" <if test=\"${platform::is-unix()}\">"); | ||
336 | ss.WriteLine(" <property name=\"doc.target\" value=\"Web\" />"); | ||
337 | ss.WriteLine(" </if>"); | ||
338 | ss.WriteLine(" <ndoc failonerror=\"false\" verbose=\"true\">"); | ||
339 | ss.WriteLine(" <assemblies basedir=\"${project::get-base-directory()}\">"); | ||
340 | ss.Write(" <include name=\"${build.dir}/${project::get-name()}"); | ||
341 | if (project.Type == ProjectType.Library) | ||
342 | { | ||
343 | ss.WriteLine(".dll\" />"); | ||
344 | } | ||
345 | else | ||
346 | { | ||
347 | ss.WriteLine(".exe\" />"); | ||
348 | } | ||
349 | |||
350 | ss.WriteLine(" </assemblies>"); | ||
351 | ss.WriteLine(" <summaries basedir=\"${project::get-base-directory()}\">"); | ||
352 | ss.WriteLine(" <include name=\"${build.dir}/${project::get-name()}.xml\"/>"); | ||
353 | ss.WriteLine(" </summaries>"); | ||
354 | ss.WriteLine(" <referencepaths basedir=\"${project::get-base-directory()}\">"); | ||
355 | ss.WriteLine(" <include name=\"${build.dir}\" />"); | ||
356 | // foreach(ReferenceNode refr in project.References) | ||
357 | // { | ||
358 | // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/'); | ||
359 | // if (path != "") | ||
360 | // { | ||
361 | // ss.WriteLine(" <include name=\"{0}\" />", path); | ||
362 | // } | ||
363 | // } | ||
364 | ss.WriteLine(" </referencepaths>"); | ||
365 | ss.WriteLine(" <documenters>"); | ||
366 | ss.WriteLine(" <documenter name=\"MSDN\">"); | ||
367 | ss.WriteLine(" <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />"); | ||
368 | ss.WriteLine(" <property name=\"OutputTarget\" value=\"${doc.target}\" />"); | ||
369 | ss.WriteLine(" <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />"); | ||
370 | ss.WriteLine(" <property name=\"IncludeFavorites\" value=\"False\" />"); | ||
371 | ss.WriteLine(" <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />"); | ||
372 | ss.WriteLine(" <property name=\"SplitTOCs\" value=\"False\" />"); | ||
373 | ss.WriteLine(" <property name=\"DefaulTOC\" value=\"\" />"); | ||
374 | ss.WriteLine(" <property name=\"ShowVisualBasic\" value=\"True\" />"); | ||
375 | ss.WriteLine(" <property name=\"AutoDocumentConstructors\" value=\"True\" />"); | ||
376 | ss.WriteLine(" <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />"); | ||
377 | ss.WriteLine(" <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />"); | ||
378 | ss.WriteLine(" <property name=\"ShowMissingParams\" value=\"${build.debug}\" />"); | ||
379 | ss.WriteLine(" <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />"); | ||
380 | ss.WriteLine(" <property name=\"ShowMissingValues\" value=\"${build.debug}\" />"); | ||
381 | ss.WriteLine(" <property name=\"DocumentInternals\" value=\"False\" />"); | ||
382 | ss.WriteLine(" <property name=\"DocumentPrivates\" value=\"False\" />"); | ||
383 | ss.WriteLine(" <property name=\"DocumentProtected\" value=\"True\" />"); | ||
384 | ss.WriteLine(" <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />"); | ||
385 | ss.WriteLine(" <property name=\"IncludeAssemblyVersion\" value=\"True\" />"); | ||
386 | ss.WriteLine(" </documenter>"); | ||
387 | ss.WriteLine(" </documenters>"); | ||
388 | ss.WriteLine(" </ndoc>"); | ||
389 | } | ||
390 | ss.WriteLine(" </target>"); | ||
391 | ss.WriteLine("</project>"); | ||
392 | } | ||
393 | m_Kernel.CurrentWorkingDirectory.Pop(); | ||
394 | } | ||
395 | |||
396 | private void WriteCombine(SolutionNode solution) | ||
397 | { | ||
398 | m_Kernel.Log.Write("Creating Xcode build files"); | ||
399 | foreach (ProjectNode project in solution.Projects) | ||
400 | { | ||
401 | if (m_Kernel.AllowProject(project.FilterGroups)) | ||
402 | { | ||
403 | m_Kernel.Log.Write("...Creating project: {0}", project.Name); | ||
404 | WriteProject(solution, project); | ||
405 | } | ||
406 | } | ||
407 | |||
408 | m_Kernel.Log.Write(""); | ||
409 | DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj")); | ||
410 | if (!directoryInfo.Exists) | ||
411 | { | ||
412 | directoryInfo.Create(); | ||
413 | } | ||
414 | string combFile = Helper.MakeFilePath(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj"), "project", "pbxproj"); | ||
415 | StreamWriter ss = new StreamWriter(combFile); | ||
416 | |||
417 | m_Kernel.CurrentWorkingDirectory.Push(); | ||
418 | Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); | ||
419 | |||
420 | using (ss) | ||
421 | { | ||
422 | ss.WriteLine("<?xml version=\"1.0\" ?>"); | ||
423 | ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name); | ||
424 | ss.WriteLine(" <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>"); | ||
425 | ss.WriteLine(); | ||
426 | |||
427 | //ss.WriteLine(" <property name=\"dist.dir\" value=\"dist\" />"); | ||
428 | //ss.WriteLine(" <property name=\"source.dir\" value=\"source\" />"); | ||
429 | ss.WriteLine(" <property name=\"bin.dir\" value=\"bin\" />"); | ||
430 | ss.WriteLine(" <property name=\"obj.dir\" value=\"obj\" />"); | ||
431 | ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />"); | ||
432 | ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />"); | ||
433 | |||
434 | foreach (ConfigurationNode conf in solution.Configurations) | ||
435 | { | ||
436 | // Set the project.config to a non-debug configuration | ||
437 | if (conf.Options["DebugInformation"].ToString().ToLower() != "true") | ||
438 | { | ||
439 | ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name); | ||
440 | } | ||
441 | ss.WriteLine(); | ||
442 | ss.WriteLine(" <target name=\"{0}\" description=\"\">", conf.Name); | ||
443 | ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name); | ||
444 | ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower()); | ||
445 | ss.WriteLine(" </target>"); | ||
446 | ss.WriteLine(); | ||
447 | } | ||
448 | |||
449 | ss.WriteLine(" <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">"); | ||
450 | ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />"); | ||
451 | ss.WriteLine(" </target>"); | ||
452 | ss.WriteLine(); | ||
453 | |||
454 | ss.WriteLine(" <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">"); | ||
455 | ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />"); | ||
456 | ss.WriteLine(" </target>"); | ||
457 | ss.WriteLine(); | ||
458 | |||
459 | ss.WriteLine(" <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">"); | ||
460 | ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />"); | ||
461 | ss.WriteLine(" </target>"); | ||
462 | ss.WriteLine(); | ||
463 | |||
464 | ss.WriteLine(" <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">"); | ||
465 | ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />"); | ||
466 | ss.WriteLine(" </target>"); | ||
467 | ss.WriteLine(); | ||
468 | |||
469 | ss.WriteLine(" <target name=\"init\" description=\"\">"); | ||
470 | ss.WriteLine(" <call target=\"${project.config}\" />"); | ||
471 | ss.WriteLine(" <sysinfo />"); | ||
472 | ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />"); | ||
473 | ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />"); | ||
474 | ss.WriteLine(" </target>"); | ||
475 | ss.WriteLine(); | ||
476 | |||
477 | ss.WriteLine(" <target name=\"clean\" description=\"\">"); | ||
478 | ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />"); | ||
479 | //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />"); | ||
480 | ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />"); | ||
481 | ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />"); | ||
482 | //foreach(ProjectNode project in solution.Projects) | ||
483 | //{ | ||
484 | // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | ||
485 | // ss.Write(" <nant buildfile=\"{0}\"", | ||
486 | // Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"),'/')); | ||
487 | // ss.WriteLine(" target=\"clean\" />"); | ||
488 | //} | ||
489 | ss.WriteLine(" </target>"); | ||
490 | ss.WriteLine(); | ||
491 | |||
492 | ss.WriteLine(" <target name=\"build\" depends=\"init\" description=\"\">"); | ||
493 | |||
494 | foreach (ProjectNode project in solution.ProjectsTableOrder) | ||
495 | { | ||
496 | string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | ||
497 | ss.Write(" <nant buildfile=\"{0}\"", | ||
498 | Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"), '/')); | ||
499 | ss.WriteLine(" target=\"build\" />"); | ||
500 | } | ||
501 | ss.WriteLine(" </target>"); | ||
502 | ss.WriteLine(); | ||
503 | |||
504 | ss.WriteLine(" <target name=\"build-release\" depends=\"Release, init, build\" description=\"Builds in Release mode\" />"); | ||
505 | ss.WriteLine(); | ||
506 | ss.WriteLine(" <target name=\"build-debug\" depends=\"Debug, init, build\" description=\"Builds in Debug mode\" />"); | ||
507 | ss.WriteLine(); | ||
508 | //ss.WriteLine(" <target name=\"package\" depends=\"clean, doc, copyfiles, zip\" description=\"Builds in Release mode\" />"); | ||
509 | ss.WriteLine(" <target name=\"package\" depends=\"clean, doc\" description=\"Builds all\" />"); | ||
510 | ss.WriteLine(); | ||
511 | |||
512 | ss.WriteLine(" <target name=\"doc\" depends=\"build-release\">"); | ||
513 | ss.WriteLine(" <echo message=\"Generating all documentation from all builds\" />"); | ||
514 | foreach (ProjectNode project in solution.Projects) | ||
515 | { | ||
516 | string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); | ||
517 | ss.Write(" <nant buildfile=\"{0}\"", | ||
518 | Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"), '/')); | ||
519 | ss.WriteLine(" target=\"doc\" />"); | ||
520 | } | ||
521 | ss.WriteLine(" </target>"); | ||
522 | ss.WriteLine(); | ||
523 | ss.WriteLine("</project>"); | ||
524 | } | ||
525 | |||
526 | m_Kernel.CurrentWorkingDirectory.Pop(); | ||
527 | } | ||
528 | |||
529 | private void CleanProject(ProjectNode project) | ||
530 | { | ||
531 | m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); | ||
532 | string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"); | ||
533 | Helper.DeleteIfExists(projectFile); | ||
534 | } | ||
535 | |||
536 | private void CleanSolution(SolutionNode solution) | ||
537 | { | ||
538 | m_Kernel.Log.Write("Cleaning Xcode build files for", solution.Name); | ||
539 | |||
540 | string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build"); | ||
541 | Helper.DeleteIfExists(slnFile); | ||
542 | |||
543 | foreach (ProjectNode project in solution.Projects) | ||
544 | { | ||
545 | CleanProject(project); | ||
546 | } | ||
547 | |||
548 | m_Kernel.Log.Write(""); | ||
549 | } | ||
550 | |||
551 | #endregion | ||
552 | |||
553 | #region ITarget Members | ||
554 | |||
555 | /// <summary> | ||
556 | /// Writes the specified kern. | ||
557 | /// </summary> | ||
558 | /// <param name="kern">The kern.</param> | ||
559 | public void Write(Kernel kern) | ||
560 | { | ||
561 | if (kern == null) | ||
562 | { | ||
563 | throw new ArgumentNullException("kern"); | ||
564 | } | ||
565 | m_Kernel = kern; | ||
566 | foreach (SolutionNode solution in kern.Solutions) | ||
567 | { | ||
568 | WriteCombine(solution); | ||
569 | } | ||
570 | m_Kernel = null; | ||
571 | } | ||
572 | |||
573 | /// <summary> | ||
574 | /// Cleans the specified kern. | ||
575 | /// </summary> | ||
576 | /// <param name="kern">The kern.</param> | ||
577 | public virtual void Clean(Kernel kern) | ||
578 | { | ||
579 | if (kern == null) | ||
580 | { | ||
581 | throw new ArgumentNullException("kern"); | ||
582 | } | ||
583 | m_Kernel = kern; | ||
584 | foreach (SolutionNode sol in kern.Solutions) | ||
585 | { | ||
586 | CleanSolution(sol); | ||
587 | } | ||
588 | m_Kernel = null; | ||
589 | } | ||
590 | |||
591 | /// <summary> | ||
592 | /// Gets the name. | ||
593 | /// </summary> | ||
594 | /// <value>The name.</value> | ||
595 | public string Name | ||
596 | { | ||
597 | get | ||
598 | { | ||
599 | return "xcode"; | ||
600 | } | ||
601 | } | ||
602 | |||
603 | #endregion | ||
604 | } | ||
605 | } | ||
diff --git a/Prebuild/src/Core/Utilities/CommandLineCollection.cs b/Prebuild/src/Core/Utilities/CommandLineCollection.cs index 62eb18b..5733547 100644 --- a/Prebuild/src/Core/Utilities/CommandLineCollection.cs +++ b/Prebuild/src/Core/Utilities/CommandLineCollection.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: robloach $ | 29 | * $Author: robloach $ |
30 | * $Date: 2006-09-26 00:30:53 +0200 (ti, 26 sep 2006) $ | 30 | * $Date: 2006-09-26 07:30:53 +0900 (Tue, 26 Sep 2006) $ |
31 | * $Revision: 165 $ | 31 | * $Revision: 165 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Utilities/CurrentDirectory.cs b/Prebuild/src/Core/Utilities/CurrentDirectory.cs index ff2d159..abbed52 100644 --- a/Prebuild/src/Core/Utilities/CurrentDirectory.cs +++ b/Prebuild/src/Core/Utilities/CurrentDirectory.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Utilities/Helper.cs b/Prebuild/src/Core/Utilities/Helper.cs index 27b9ccf..19093ce 100644 --- a/Prebuild/src/Core/Utilities/Helper.cs +++ b/Prebuild/src/Core/Utilities/Helper.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2007-02-13 21:58:03 +0100 (ti, 13 feb 2007) $ | 30 | * $Date: 2007-02-14 05:58:03 +0900 (Wed, 14 Feb 2007) $ |
31 | * $Revision: 205 $ | 31 | * $Revision: 205 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/Utilities/Log.cs b/Prebuild/src/Core/Utilities/Log.cs index 2f26557..e8105ac 100644 --- a/Prebuild/src/Core/Utilities/Log.cs +++ b/Prebuild/src/Core/Utilities/Log.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | 30 | * $Date: 2006-01-28 09:49:58 +0900 (Sat, 28 Jan 2006) $ |
31 | * $Revision: 71 $ | 31 | * $Revision: 71 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Core/WarningException.cs b/Prebuild/src/Core/WarningException.cs index ce685cd..df90dc8 100644 --- a/Prebuild/src/Core/WarningException.cs +++ b/Prebuild/src/Core/WarningException.cs | |||
@@ -23,15 +23,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
23 | */ | 23 | */ |
24 | #endregion | 24 | #endregion |
25 | 25 | ||
26 | #region CVS Information | ||
27 | /* | ||
28 | * $Source$ | ||
29 | * $Author: jendave $ | ||
30 | * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $ | ||
31 | * $Revision: 71 $ | ||
32 | */ | ||
33 | #endregion | ||
34 | |||
35 | using System; | 26 | using System; |
36 | using System.Runtime.Serialization; | 27 | using System.Runtime.Serialization; |
37 | 28 | ||
diff --git a/Prebuild/src/Prebuild.cs b/Prebuild/src/Prebuild.cs index 2d12b53..922b4c9 100644 --- a/Prebuild/src/Prebuild.cs +++ b/Prebuild/src/Prebuild.cs | |||
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O | |||
27 | /* | 27 | /* |
28 | * $Source$ | 28 | * $Source$ |
29 | * $Author: jendave $ | 29 | * $Author: jendave $ |
30 | * $Date: 2006-09-26 23:43:35 +0200 (ti, 26 sep 2006) $ | 30 | * $Date: 2006-09-27 06:43:35 +0900 (Wed, 27 Sep 2006) $ |
31 | * $Revision: 168 $ | 31 | * $Revision: 168 $ |
32 | */ | 32 | */ |
33 | #endregion | 33 | #endregion |
diff --git a/Prebuild/src/Properties/AssemblyInfo.cs b/Prebuild/src/Properties/AssemblyInfo.cs index 9f74500..e49aea5 100644 --- a/Prebuild/src/Properties/AssemblyInfo.cs +++ b/Prebuild/src/Properties/AssemblyInfo.cs | |||
@@ -1,34 +1,49 @@ | |||
1 | #region BSD License | 1 | #region BSD License |
2 | /* | 2 | /* |
3 | Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) | ||
4 | 3 | ||
5 | Redistribution and use in source and binary forms, with or without modification, are permitted | 4 | Copyright (c) 2004 - 2008 |
6 | provided that the following conditions are met: | 5 | Matthew Holmes (matthew@wildfiregames.com), |
6 | Dan Moorehead (dan05a@gmail.com), | ||
7 | Dave Hudson (jendave@yahoo.com), | ||
8 | Rob Loach (http://www.robloach.net), | ||
9 | C.J. Adams-Collier (cjac@colliertech.org), | ||
7 | 10 | ||
8 | * Redistributions of source code must retain the above copyright notice, this list of conditions | 11 | Redistribution and use in source and binary forms, with or without |
9 | and the following disclaimer. | 12 | modification, are permitted provided that the following conditions are |
10 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions | 13 | met: |
11 | and the following disclaimer in the documentation and/or other materials provided with the | 14 | |
12 | distribution. | 15 | * Redistributions of source code must retain the above copyright |
13 | * The name of the author may not be used to endorse or promote products derived from this software | 16 | notice, this list of conditions and the following disclaimer. |
14 | without specific prior written permission. | 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 | |||
26 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | ||
27 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
29 | DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, | ||
30 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
31 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
33 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
34 | 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 | ||
36 | POSSIBILITY OF SUCH DAMAGE. | ||
15 | 37 | ||
16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, | ||
17 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
18 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
20 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
21 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
22 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
23 | */ | 38 | */ |
24 | #endregion | 39 | #endregion |
25 | 40 | ||
26 | #region CVS Information | 41 | #region CVS Information |
27 | /* | 42 | /* |
28 | * $Source$ | 43 | * $Source$ |
29 | * $Author: jendave $ | 44 | * $Author: cjcollier $ |
30 | * $Date: 2007-01-26 19:31:34 +0100 (fr, 26 jan 2007) $ | 45 | * $Date: 2008-02-08 01:31:29 +0900 (Fri, 08 Feb 2008) $ |
31 | * $Revision: 203 $ | 46 | * $Revision: 256 $ |
32 | */ | 47 | */ |
33 | #endregion | 48 | #endregion |
34 | 49 | ||
@@ -55,11 +70,16 @@ using System.Resources; | |||
55 | [assembly: AssemblyConfiguration(".NET CLR")] | 70 | [assembly: AssemblyConfiguration(".NET CLR")] |
56 | [assembly: AssemblyCompany("The Prebuild Project")] | 71 | [assembly: AssemblyCompany("The Prebuild Project")] |
57 | [assembly: AssemblyProduct("")] | 72 | [assembly: AssemblyProduct("")] |
58 | [assembly: AssemblyCopyright("Copyright 2004-2006 Matthew Holmes, Dan Moorehead and David Hudson")] | 73 | [assembly: AssemblyCopyright("Copyright 2004-2008 " + |
74 | "Matthew Holmes, " + | ||
75 | "Dan Moorehead, " + | ||
76 | "C.J. Adams-Collier, " + | ||
77 | "Rob Loach, " + | ||
78 | "David Hudson,")] | ||
59 | [assembly: AssemblyTrademark("")] | 79 | [assembly: AssemblyTrademark("")] |
60 | [assembly: AssemblyCulture("")] | 80 | [assembly: AssemblyCulture("")] |
61 | [assembly: NeutralResourcesLanguageAttribute("en-US")] | 81 | [assembly: NeutralResourcesLanguageAttribute("en-US")] |
62 | [assembly: AssemblyVersion("2.0.0.*")] | 82 | [assembly: AssemblyVersion("2.0.3.*")] |
63 | 83 | ||
64 | // | 84 | // |
65 | // Version information for an assembly consists of the following four values: | 85 | // Version information for an assembly consists of the following four values: |
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 | |||
12 | DIE=0 | ||
13 | |||
14 | srcdir=`dirname $0` | ||
15 | test -z "$srcdir" && srcdir=. | ||
16 | |||
17 | if [ -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 | ||
30 | fi | ||
31 | |||
32 | (autoconf --version) < /dev/null > /dev/null 2>&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 | |||
40 | if [ -z "$LIBTOOL" ]; then | ||
41 | LIBTOOL=`which glibtool 2>/dev/null` | ||
42 | if [ ! -x "$LIBTOOL" ]; then | ||
43 | LIBTOOL=`which libtool` | ||
44 | fi | ||
45 | fi | ||
46 | |||
47 | (grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) && { | ||
48 | ($LIBTOOL --version) < /dev/null > /dev/null 2>&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 | |||
57 | grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null && { | ||
58 | grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \ | ||
59 | (gettext --version) < /dev/null > /dev/null 2>&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) < /dev/null > /dev/null 2>&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 | ||
78 | test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&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 | |||
87 | if test "$DIE" -eq 1; then | ||
88 | exit 1 | ||
89 | fi | ||
90 | |||
91 | if test -z "$NOCONFIGURE"; then | ||
92 | |||
93 | if 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 | ||
98 | fi | ||
99 | |||
100 | fi | ||
101 | |||
102 | case $CC in | ||
103 | xlc ) | ||
104 | am_opt=--include-deps;; | ||
105 | esac | ||
106 | |||
107 | |||
108 | if 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 | ||
113 | fi | ||
114 | |||
115 | echo "Running aclocal $ACLOCAL_FLAGS ..." | ||
116 | aclocal $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 | |||
126 | if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then | ||
127 | echo "Running autoheader..." | ||
128 | autoheader || { echo "**Error**: autoheader failed."; exit 1; } | ||
129 | fi | ||
130 | |||
131 | echo "Running automake --gnu $am_opt ..." | ||
132 | automake --add-missing --gnu $am_opt || | ||
133 | { echo "**Error**: automake failed."; exit 1; } | ||
134 | echo "Running autoconf ..." | ||
135 | autoconf || { echo "**Error**: autoconf failed."; exit 1; } | ||
136 | |||
137 | conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c | ||
138 | |||
139 | if test x$NOCONFIGURE = x; then | ||
140 | echo Running $srcdir/configure $conf_flags "$@" ... | ||
141 | $srcdir/configure $conf_flags "$@" \ | ||
142 | && echo Now type \`make\' to compile $PKG_NAME || exit 1 | ||
143 | else | ||
144 | echo Skipping configure process. | ||
145 | fi | ||
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 | |||
168 | AC_PREREQ(2.60) | ||
169 | AC_CANONICAL_SYSTEM | ||
170 | AC_CONFIG_AUX_DIR(.) | ||
171 | AM_INIT_AUTOMAKE([1.9 tar-ustar foreign]) | ||
172 | AM_MAINTAINER_MODE | ||
173 | dnl AC_PROG_INTLTOOL([0.25]) | ||
174 | AC_PROG_INSTALL | ||
175 | |||
176 | ASSEMBLY_NAME=<xsl:value-of select="$assemblyName" /> | ||
177 | PROJECT_NAME=<xsl:value-of select="$projectName" /> | ||
178 | PROJECT_VERSION=$VERSION | ||
179 | PROJECT_DESCRIPTION="<xsl:value-of select="dnpb:Description/text()" />" | ||
180 | PROJECT_TYPE="<xsl:value-of select="@type" />" | ||
181 | |||
182 | AC_SUBST(ASSEMBLY_NAME) | ||
183 | AC_SUBST(PROJECT_NAME) | ||
184 | AC_SUBST(PROJECT_VERSION) | ||
185 | AC_SUBST(DESCRIPTION) | ||
186 | |||
187 | AC_MSG_CHECKING([assembly type]) | ||
188 | case $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 | ;; | ||
198 | esac | ||
199 | AC_MSG_RESULT([$PROJECT_TYPE]) | ||
200 | |||
201 | AC_SUBST(ASSEMBLY_EXTENSION) | ||
202 | |||
203 | AC_MSG_CHECKING([whether we're compiling from an RCS]) | ||
204 | if test -f "$srcdir/.cvs_version" ; then | ||
205 | from_rcs=cvs | ||
206 | else | ||
207 | if test -f "$srcdir/.svn/entries" ; then | ||
208 | from_rcs=svn | ||
209 | else | ||
210 | from_rcs=no | ||
211 | fi | ||
212 | fi | ||
213 | |||
214 | AC_MSG_RESULT($from_rcs) | ||
215 | |||
216 | MONO_REQUIRED_VERSION=1.1 | ||
217 | <xsl:text disable-output-escaping="yes"> | ||
218 | PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false) | ||
219 | </xsl:text> | ||
220 | if 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 | ||
231 | else | ||
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 | ||
240 | fi | ||
241 | |||
242 | AC_PATH_PROG(GACUTIL, gacutil) | ||
243 | if test "x$GACUTIL" = "xno" ; then | ||
244 | AC_MSG_ERROR([No gacutil tool found]) | ||
245 | fi | ||
246 | |||
247 | GACUTIL_FLAGS='/package <xsl:value-of select="$assemblyName" /> /gacdir $(DESTDIR)$(prefix)/lib' | ||
248 | AC_SUBST(GACUTIL_FLAGS) | ||
249 | |||
250 | AC_SUBST(PATH) | ||
251 | AC_SUBST(LD_LIBRARY_PATH) | ||
252 | |||
253 | AC_SUBST(LIB_PREFIX) | ||
254 | AC_SUBST(LIB_SUFFIX) | ||
255 | AC_SUBST(RUNTIME) | ||
256 | AC_SUBST(CSC) | ||
257 | AC_SUBST(RESGEN) | ||
258 | AC_SUBST(GACUTIL) | ||
259 | |||
260 | AC_SUBST(BASE_DEPENDENCIES_CFLAGS) | ||
261 | AC_SUBST(BASE_DEPENDENCIES_LIBS) | ||
262 | |||
263 | dnl Find monodoc | ||
264 | MONODOC_REQUIRED_VERSION=1.0 | ||
265 | AC_SUBST(MONODOC_REQUIRED_VERSION) | ||
266 | <xsl:text disable-output-escaping="yes"> | ||
267 | PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no) | ||
268 | </xsl:text> | ||
269 | if 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 | ||
274 | else | ||
275 | MONODOC= | ||
276 | fi | ||
277 | |||
278 | AC_SUBST(MONODOC) | ||
279 | AM_CONDITIONAL(ENABLE_MONODOC, test "x$enable_monodoc" = "xyes") | ||
280 | |||
281 | winbuild=no | ||
282 | case "$host" in | ||
283 | *-*-mingw*|*-*-cygwin*) | ||
284 | winbuild=yes | ||
285 | ;; | ||
286 | esac | ||
287 | AM_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 | |||
292 | AC_CONFIG_FILES(Makefile) | ||
293 | AC_OUTPUT | ||
294 | |||
295 | echo "===" | ||
296 | echo "" | ||
297 | echo "Project configuration summary" | ||
298 | echo "" | ||
299 | echo " * Installation prefix: $prefix" | ||
300 | echo " * compiler: $CSC" | ||
301 | echo " * Documentation: $enable_monodoc ($MONODOC)" | ||
302 | echo " * Project Name: $PROJECT_NAME" | ||
303 | echo " * Version: $PROJECT_VERSION" | ||
304 | echo "" | ||
305 | echo "===" | ||
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 | |||
336 | ASSEMBLY=$(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 | |||
344 | bin_SCRIPTS=<xsl:value-of select="$lcProjectName" /> | ||
345 | </xsl:if><xsl:if test="@type='Library'"> | ||
346 | pkgconfigdir = $(prefix)/lib/pkgconfig | ||
347 | pkgconfig_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> | ||
352 | noinst_DATA = $(ASSEMBLY) | ||
353 | </xsl:if> | ||
354 | |||
355 | PACKAGES =<xsl:value-of select="$pkgLibs" /> | ||
356 | BINARY_LIBS =<xsl:value-of select="$binaryLibs" /> | ||
357 | SYSTEM_LIBS =<xsl:value-of select="$systemLibs" /> | ||
358 | RESOURCES_SRC =<xsl:value-of select="$embeddedFiles" /> | ||
359 | RESOURCES = $(RESOURCES_SRC:.resx=.resources) | ||
360 | SOURCES =<xsl:value-of select="$compiledFiles" /> | ||
361 | |||
362 | EXTRA_DIST=$(SOURCES) $(BINARY_LIBS) $(RESOURCES_SRC) install-sh missing <xsl:value-of select="$extraDistFiles" /> | ||
363 | |||
364 | CLEANFILES=$(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">&&</xsl:text> </xsl:if>mkdir -p <xsl:value-of select="$outputPath" /> <xsl:text disable-output-escaping="yes">&&</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 | && rm -f $(ASSEMBLY) \ | ||
384 | && ln $@ $(ASSEMBLY)</xsl:text> | ||
385 | |||
386 | CLEANFILES+=<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 | &&</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> | ||
417 | noinst_<xsl:value-of select="@name" />_<xsl:value-of select="translate($lcProjectName, '.', '_')" />dir = $(prefix)/lib/mono/<xsl:value-of select="$projectName" /> | ||
418 | noinst_<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))" > $@ | ||
430 | </xsl:text> | ||
431 | |||
432 | all: $(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()!=''"> | ||
442 | install-data-local: <xsl:value-of select="$defaultConfig" />_install-data-local | ||
443 | |||
444 | uninstall-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@ | ||
511 | exec_prefix=${prefix} | ||
512 | libdir=${exec_prefix}/lib/mono/@PROJECT_NAME@ | ||
513 | |||
514 | Name: <xsl:value-of select="@name" /> | ||
515 | Description: <xsl:value-of select="Description/text()" /> | ||
516 | Version: @PROJECT_VERSION@ | ||
517 | Requires:<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> | ||
518 | Libs: -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 | |||
536 | DIE=0 | ||
537 | |||
538 | srcdir=`dirname $0` | ||
539 | test -z "$srcdir" && srcdir=. | ||
540 | |||
541 | if [ -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 | ||
554 | fi | ||
555 | |||
556 | (autoconf --version) < /dev/null > /dev/null 2>&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 | |||
564 | if [ -z "$LIBTOOL" ]; then | ||
565 | LIBTOOL=`which glibtool 2>/dev/null` | ||
566 | if [ ! -x "$LIBTOOL" ]; then | ||
567 | LIBTOOL=`which libtool` | ||
568 | fi | ||
569 | fi | ||
570 | |||
571 | (grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) && { | ||
572 | ($LIBTOOL --version) < /dev/null > /dev/null 2>&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 | |||
581 | grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null && { | ||
582 | grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \ | ||
583 | (gettext --version) < /dev/null > /dev/null 2>&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) < /dev/null > /dev/null 2>&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 | ||
603 | test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&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 | |||
612 | if test "$DIE" -eq 1; then | ||
613 | exit 1 | ||
614 | fi | ||
615 | |||
616 | if 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 | ||
621 | fi | ||
622 | |||
623 | case $CC in | ||
624 | xlc ) | ||
625 | am_opt=--include-deps;; | ||
626 | esac | ||
627 | |||
628 | |||
629 | if 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 | ||
634 | fi | ||
635 | |||
636 | echo "Running aclocal $ACLOCAL_FLAGS ..." | ||
637 | aclocal $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 | |||
647 | if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then | ||
648 | echo "Running autoheader..." | ||
649 | autoheader || { echo "**Error**: autoheader failed."; exit 1; } | ||
650 | fi | ||
651 | |||
652 | echo "Running automake --gnu $am_opt ..." | ||
653 | automake --add-missing --gnu $am_opt || | ||
654 | { echo "**Error**: automake failed."; exit 1; } | ||
655 | echo "Running autoconf ..." | ||
656 | autoconf || { echo "**Error**: autoconf failed."; exit 1; } | ||
657 | </xsl:text> | ||
658 | <xsl:for-each select="/dnpb:Prebuild/dnpb:Solution[@name=$solutionName]/dnpb:Project"> | ||
659 | echo Running <xsl:value-of select="@name" />/autogen.sh ... | ||
660 | (cd $srcdir/<xsl:value-of select="@name" /> ; NOCONFIGURE=1 /bin/sh ./autogen.sh "$@") | ||
661 | echo Done running <xsl:value-of select="@name" />/autogen.sh ... | ||
662 | </xsl:for-each> | ||
663 | <xsl:text disable-output-escaping="yes"> | ||
664 | conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c | ||
665 | |||
666 | if test x$NOCONFIGURE = x; then | ||
667 | echo Running $srcdir/configure $conf_flags "$@" ... | ||
668 | $srcdir/configure $conf_flags "$@" \ | ||
669 | && echo Now type \`make\' to compile $PKG_NAME || exit 1 | ||
670 | else | ||
671 | echo Skipping configure process. | ||
672 | fi | ||
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" />]) | ||
689 | AC_CONFIG_AUX_DIR(.) | ||
690 | AM_INIT_AUTOMAKE([1.9 tar-ustar foreign]) | ||
691 | EXTRA_DIST="install-sh missing" | ||
692 | SOLUTION_NAME=<xsl:value-of select="$solutionName" /> | ||
693 | SOLUTION_VERSION=$VERSION | ||
694 | SOLUTION_DESCRIPTION="<xsl:value-of select="/dnpb:Prebuild/dnpb:Solution[@name=$solutionName]/dnpb:Description" />" | ||
695 | AC_SUBST(DESCRIPTION) | ||
696 | |||
697 | AM_MAINTAINER_MODE | ||
698 | |||
699 | dnl AC_PROG_INTLTOOL([0.25]) | ||
700 | |||
701 | AC_PROG_INSTALL | ||
702 | |||
703 | AC_MSG_CHECKING([whether we're building from an RCS]) | ||
704 | if test -f "$srcdir/.cvs_version" ; then | ||
705 | from_rcs=cvs | ||
706 | else | ||
707 | if test -f "$srcdir/.svn/entries" ; then | ||
708 | from_rcs=svn | ||
709 | else | ||
710 | from_rcs=no | ||
711 | fi | ||
712 | fi | ||
713 | |||
714 | AC_MSG_RESULT($from_rcs) | ||
715 | |||
716 | CONFIG="Release" | ||
717 | AC_SUBST(CONFIG) | ||
718 | <!-- TODO: Ensure that these SUBDIRS are processed in dependency order --> | ||
719 | AC_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 | |||
723 | AC_OUTPUT([ | ||
724 | Makefile | ||
725 | ]) | ||
726 | |||
727 | echo "===" | ||
728 | echo "" | ||
729 | echo "Solution configuration summary" | ||
730 | echo "" | ||
731 | echo " * Solution Name: $SOLUTION_NAME" | ||
732 | echo " * Version: $SOLUTION_VERSION" | ||
733 | echo " * 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 "" | ||
736 | echo "===" | ||
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 | |||
768 | PACKAGE=<xsl:value-of select="$assemblyName" /> | ||
769 | prefix=@prefix@ | ||
770 | exec_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 < cj> why are we installing .exe assemblies to $prefix/lib/$package/ and | ||
776 | # not $prefix/share/$package ? | ||
777 | # 07:50 < jonp> momentum. | ||
778 | # 07:50 < jonp> and it's hard to say that a .exe isn't platform specific | ||
779 | # 07:50 < jonp> as it can still contain DllImport's which make platform | ||
780 | # assumptions | ||
781 | |||
782 | packagedir=$prefix/lib/<xsl:value-of select="$lcProjectName" /> | ||
783 | export MONO_PATH=$MONO_PATH<xsl:value-of select="$monoPath" /> | ||
784 | |||
785 | exec @RUNTIME@ $packagedir/$PACKAGE.exe "$@" | ||
786 | </xsl:for-each> | ||
787 | </xsl:template> | ||
788 | </xsl:stylesheet> | ||
789 | </ProjectWrapperScriptIn> | ||
790 | </Autotools> | ||
diff --git a/Prebuild/src/data/prebuild-1.7.xsd b/Prebuild/src/data/prebuild-1.7.xsd index 381b9f0..3c108f3 100644 --- a/Prebuild/src/data/prebuild-1.7.xsd +++ b/Prebuild/src/data/prebuild-1.7.xsd | |||
@@ -1,14 +1,17 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" ?> | 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" | 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 | xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd"> | 3 | <xs:annotation> |
4 | <xs:annotation> | 4 | <xs:documentation> |
5 | <xs:documentation> | 5 | Copyright (c) 2004-2007 |
6 | Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com), David Hudson (jendave at yahoo dot com) | 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) | ||
7 | 10 | ||
8 | .NET Prebuild is a cross-platform XML-driven pre-build tool which | 11 | .NET Prebuild is a cross-platform XML-driven pre-build tool which |
9 | allows developers to easily generate project or make files for major | 12 | allows developers to easily generate project or make files for major |
10 | IDE's and .NET development tools including: Visual Studio .NET 2002 and | 13 | IDE's and .NET development tools including: Visual Studio .NET 2002, |
11 | 2003, SharpDevelop, MonoDevelop, and NAnt. | 14 | 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools. |
12 | 15 | ||
13 | BSD License: | 16 | BSD License: |
14 | 17 | ||
@@ -31,231 +34,240 @@ | |||
31 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | 34 | 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. | 35 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
33 | </xs:documentation> | 36 | </xs:documentation> |
34 | </xs:annotation> | 37 | </xs:annotation> |
35 | <xs:element name="Prebuild"> | 38 | <xs:element name="Prebuild"> |
36 | <xs:complexType> | 39 | <xs:complexType> |
37 | <xs:sequence> | 40 | <xs:sequence> |
38 | <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" /> | 41 | <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" /> |
39 | <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" /> | 42 | <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" /> |
40 | </xs:sequence> | 43 | </xs:sequence> |
41 | <xs:attribute name="version" /> | 44 | <xs:attribute name="version" /> |
42 | <xs:attribute name="checkOsVars" /> | 45 | <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:attribute name="version" type="xs:string" default="1.0.0" /> | ||
58 | </xs:complexType> | ||
59 | </xs:element> | ||
60 | <xs:element name="Project"> | ||
61 | <xs:complexType> | ||
62 | <xs:sequence> | ||
63 | <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" /> | ||
64 | <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> | ||
65 | <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded"> | ||
66 | <xs:complexType> | ||
67 | <xs:attribute name="name" type="xs:string" use="required" /> | ||
68 | <xs:attribute name="path" type="xs:string" /> | ||
69 | <xs:attribute name="localCopy" type="xs:boolean" /> | ||
70 | <xs:attribute name="version" type="xs:string" default="1.0.0"/> | ||
71 | </xs:complexType> | ||
72 | </xs:element> | ||
73 | <xs:element ref="Files" /> | ||
74 | </xs:sequence> | ||
75 | <xs:attribute name="name" type="xs:string" use="required" /> | ||
76 | <xs:attribute name="designerFolder" type="xs:string" default="" /> | ||
77 | <xs:attribute name="filterGroups" type="xs:string" default="" /> | ||
78 | <xs:attribute name="path" type="xs:string" default="" /> | ||
79 | <xs:attribute name="icon" type="xs:string" default="" /> | ||
80 | <xs:attribute name="language" default="C#"> | ||
81 | <xs:simpleType> | ||
82 | <xs:restriction base="xs:string"> | ||
83 | <xs:enumeration value="C#" /> | ||
84 | <xs:enumeration value="VB.NET" /> | ||
85 | </xs:restriction> | ||
86 | </xs:simpleType> | ||
87 | </xs:attribute> | ||
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 | <xs:attribute name="runtime" default="Microsoft"> | ||
98 | <xs:simpleType> | ||
99 | <xs:restriction base="xs:string"> | ||
100 | <xs:enumeration value="Microsoft" /> | ||
101 | <xs:enumeration value="Mono" /> | ||
102 | </xs:restriction> | ||
103 | </xs:simpleType> | ||
104 | </xs:attribute> | ||
105 | <xs:attribute name="startupObject" type="xs:string" default="" /> | ||
106 | <xs:attribute name="rootNamespace" type="xs:string" /> | ||
107 | <xs:attribute name="assemblyName" type="xs:string" /> | ||
108 | <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false"/> | ||
109 | </xs:complexType> | 46 | </xs:complexType> |
110 | </xs:element> | 47 | </xs:element> |
111 | <xs:element name="Configuration"> | 48 | <xs:element name="Process" type="xs:string" /> |
112 | <xs:complexType> | 49 | <xs:element name="Solution"> |
113 | <xs:sequence> | 50 | <xs:complexType> |
114 | <xs:element ref="Options" minOccurs="0" /> | 51 | <xs:sequence> |
115 | </xs:sequence> | 52 | <xs:element ref="Options" minOccurs="0" /> |
116 | <xs:attribute name="name" type="xs:string" use="required" /> | 53 | <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" /> |
117 | </xs:complexType> | 54 | <xs:element ref="Files" minOccurs="0" /> |
118 | </xs:element> | 55 | <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" /> |
119 | <xs:element name="Options"> | 56 | </xs:sequence> |
120 | <xs:complexType> | 57 | <xs:attribute name="name" type="xs:string" use="required" /> |
121 | <xs:all> | 58 | <xs:attribute name="activeConfig" type="xs:string" default="Debug" /> |
122 | <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" /> | 59 | <xs:attribute name="path" type="xs:string" default="" /> |
123 | <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" /> | 60 | <xs:attribute name="version" type="xs:string" default="1.0.0" /> |
124 | <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" /> | 61 | </xs:complexType> |
125 | <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" /> | 62 | </xs:element> |
126 | <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" /> | 63 | <xs:element name="Project"> |
127 | <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" /> | 64 | <xs:complexType> |
128 | <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess"> | 65 | <xs:sequence> |
129 | <xs:simpleType> | 66 | <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> |
130 | <xs:restriction base="xs:string"> | 67 | <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" /> |
131 | <xs:enumeration value="OnBuildSuccess" /> | 68 | <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" /> |
132 | <xs:enumeration value="Always" /> | 69 | <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> |
133 | <xs:enumeration value="OnOutputUpdated" /> | 70 | <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded"> |
134 | </xs:restriction> | 71 | <xs:complexType> |
135 | </xs:simpleType> | 72 | <xs:attribute name="name" type="xs:string" use="required" /> |
136 | </xs:element> | 73 | <xs:attribute name="path" type="xs:string" /> |
137 | <xs:element name="RunScript" type="xs:string" minOccurs="0" /> | 74 | <xs:attribute name="localCopy" type="xs:boolean" /> |
138 | <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" /> | 75 | <xs:attribute name="version" type="xs:string" /> |
139 | <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" /> | 76 | </xs:complexType> |
140 | <xs:element name="WarningLevel" minOccurs="0"> | 77 | </xs:element> |
141 | <xs:simpleType> | 78 | <xs:element ref="Files" /> |
142 | <xs:restriction base="xs:integer"> | 79 | </xs:sequence> |
143 | <xs:minInclusive value="0" /> | 80 | <xs:attribute name="name" type="xs:string" use="required" /> |
144 | <xs:maxInclusive value="4" /> | 81 | <xs:attribute name="designerFolder" type="xs:string" default="" /> |
145 | </xs:restriction> | 82 | <xs:attribute name="filterGroups" type="xs:string" default="" /> |
146 | </xs:simpleType> | 83 | <xs:attribute name="path" type="xs:string" default="" /> |
147 | </xs:element> | 84 | <xs:attribute name="icon" type="xs:string" default="" /> |
148 | <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" /> | 85 | <xs:attribute name="configFile" type="xs:string" default="" /> |
149 | <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" /> | 86 | <xs:attribute name="version" type="xs:string" default="1.0.0" /> |
150 | <xs:element name="OutputPath" type="xs:string" minOccurs="0" /> | 87 | <xs:attribute name="language" default="C#"> |
151 | <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" /> | 88 | <xs:simpleType> |
152 | <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" /> | 89 | <xs:restriction base="xs:string"> |
153 | <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" /> | 90 | <xs:enumeration value="C#" /> |
154 | <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" /> | 91 | <xs:enumeration value="VB.NET" /> |
155 | <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" /> | 92 | </xs:restriction> |
156 | <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" /> | 93 | </xs:simpleType> |
157 | <xs:element name="BaseAddress" type="xs:string" minOccurs="0" /> | 94 | </xs:attribute> |
158 | <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" /> | 95 | <xs:attribute name="type" default="Exe"> |
159 | <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" /> | 96 | <xs:simpleType> |
160 | <xs:element name="KeyFile" type="xs:string" minOccurs="0" /> | 97 | <xs:restriction base="xs:string"> |
161 | </xs:all> | 98 | <xs:enumeration value="Exe" /> |
162 | </xs:complexType> | 99 | <xs:enumeration value="WinExe" /> |
163 | </xs:element> | 100 | <xs:enumeration value="Library" /> |
164 | <xs:element name="Files"> | 101 | </xs:restriction> |
165 | <xs:complexType> | 102 | </xs:simpleType> |
166 | <xs:sequence> | 103 | </xs:attribute> |
167 | <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" /> | 104 | <xs:attribute name="runtime" default="Microsoft"> |
168 | <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" /> | 105 | <xs:simpleType> |
169 | </xs:sequence> | 106 | <xs:restriction base="xs:string"> |
170 | </xs:complexType> | 107 | <xs:enumeration value="Microsoft" /> |
171 | </xs:element> | 108 | <xs:enumeration value="Mono" /> |
172 | <xs:element name="File"> | 109 | </xs:restriction> |
173 | <xs:complexType> | 110 | </xs:simpleType> |
174 | <xs:simpleContent> | 111 | </xs:attribute> |
175 | <xs:extension base="xs:string"> | 112 | <xs:attribute name="startupObject" type="xs:string" default="" /> |
176 | <xs:attribute name="resourceName" type="xs:string" default="" /> | 113 | <xs:attribute name="rootNamespace" type="xs:string" /> |
177 | <xs:attribute name="buildAction" default="Compile"> | 114 | <xs:attribute name="assemblyName" type="xs:string" /> |
178 | <xs:simpleType> | 115 | <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false" /> |
179 | <xs:restriction base="xs:string"> | 116 | </xs:complexType> |
180 | <xs:enumeration value="None" /> | 117 | </xs:element> |
181 | <xs:enumeration value="Compile" /> | 118 | <xs:element name="Configuration"> |
182 | <xs:enumeration value="Content" /> | 119 | <xs:complexType> |
183 | <xs:enumeration value="EmbeddedResource" /> | 120 | <xs:sequence> |
184 | </xs:restriction> | 121 | <xs:element ref="Options" minOccurs="0" /> |
185 | </xs:simpleType> | 122 | </xs:sequence> |
186 | </xs:attribute> | 123 | <xs:attribute name="name" type="xs:string" use="required" /> |
187 | <xs:attribute name="subType" default="Code"> | 124 | </xs:complexType> |
188 | <xs:simpleType> | 125 | </xs:element> |
189 | <xs:restriction base="xs:string"> | 126 | <xs:element name="Options"> |
190 | <xs:enumeration value="Code" /> | 127 | <xs:complexType> |
191 | <xs:enumeration value="Component" /> | 128 | <xs:all> |
192 | <xs:enumeration value="Form" /> | 129 | <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" /> |
193 | <xs:enumeration value="Settings" /> | 130 | <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" /> |
194 | <xs:enumeration value="UserControl" /> | 131 | <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" /> |
195 | </xs:restriction> | 132 | <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" /> |
196 | </xs:simpleType> | 133 | <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" /> |
197 | </xs:attribute> | 134 | <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" /> |
198 | <xs:attribute name="link" type="xs:boolean" /> | 135 | <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess"> |
199 | <xs:attribute name="copyToOutput" default="Never"> | 136 | <xs:simpleType> |
200 | <xs:simpleType> | 137 | <xs:restriction base="xs:string"> |
201 | <xs:restriction base="xs:string"> | 138 | <xs:enumeration value="OnBuildSuccess" /> |
202 | <xs:enumeration value="Never" /> | 139 | <xs:enumeration value="Always" /> |
203 | <xs:enumeration value="Always" /> | 140 | <xs:enumeration value="OnOutputUpdated" /> |
204 | <xs:enumeration value="PreserveNewest" /> | 141 | </xs:restriction> |
205 | </xs:restriction> | 142 | </xs:simpleType> |
206 | </xs:simpleType> | 143 | </xs:element> |
207 | </xs:attribute> | 144 | <xs:element name="RunScript" type="xs:string" minOccurs="0" /> |
208 | </xs:extension> | 145 | <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" /> |
209 | </xs:simpleContent> | 146 | <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" /> |
210 | </xs:complexType> | 147 | <xs:element name="WarningLevel" minOccurs="0"> |
211 | </xs:element> | 148 | <xs:simpleType> |
212 | <xs:element name="Match"> | 149 | <xs:restriction base="xs:integer"> |
213 | <xs:complexType> | 150 | <xs:minInclusive value="0" /> |
214 | <xs:sequence> | 151 | <xs:maxInclusive value="4" /> |
215 | <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" /> | 152 | </xs:restriction> |
216 | </xs:sequence> | 153 | </xs:simpleType> |
217 | <xs:attribute name="path" type="xs:string" /> | 154 | </xs:element> |
218 | <xs:attribute name="pattern" type="xs:string" use="required" /> | 155 | <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" /> |
219 | <xs:attribute name="recurse" type="xs:boolean" default="false" /> | 156 | <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" /> |
220 | <xs:attribute name="useRegex" type="xs:boolean" default="false" /> | 157 | <xs:element name="OutputPath" type="xs:string" minOccurs="0" /> |
221 | <xs:attribute name="buildAction" default="Compile"> | 158 | <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" /> |
222 | <xs:simpleType> | 159 | <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" /> |
223 | <xs:restriction base="xs:string"> | 160 | <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" /> |
224 | <xs:enumeration value="None" /> | 161 | <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" /> |
225 | <xs:enumeration value="Compile" /> | 162 | <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" /> |
226 | <xs:enumeration value="Content" /> | 163 | <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" /> |
227 | <xs:enumeration value="EmbeddedResource" /> | 164 | <xs:element name="BaseAddress" type="xs:string" minOccurs="0" /> |
228 | </xs:restriction> | 165 | <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" /> |
229 | </xs:simpleType> | 166 | <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" /> |
230 | </xs:attribute> | 167 | <xs:element name="KeyFile" type="xs:string" minOccurs="0" /> |
231 | <xs:attribute name="resourceName" type="xs:string" default="" /> | 168 | </xs:all> |
232 | <xs:attribute name="subType" default="Code"> | 169 | </xs:complexType> |
233 | <xs:simpleType> | 170 | </xs:element> |
234 | <xs:restriction base="xs:string"> | 171 | <xs:element name="Files"> |
235 | <xs:enumeration value="Code" /> | 172 | <xs:complexType> |
236 | <xs:enumeration value="Component" /> | 173 | <xs:sequence> |
237 | <xs:enumeration value="Designer" /> | 174 | <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" /> |
238 | <xs:enumeration value="Form" /> | 175 | <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" /> |
239 | <xs:enumeration value="Settings" /> | 176 | </xs:sequence> |
240 | <xs:enumeration value="UserControl" /> | 177 | </xs:complexType> |
241 | </xs:restriction> | 178 | </xs:element> |
242 | </xs:simpleType> | 179 | <xs:element name="File"> |
243 | </xs:attribute> | 180 | <xs:complexType> |
244 | <xs:attribute name="link" type="xs:boolean" /> | 181 | <xs:simpleContent> |
245 | <xs:attribute name="copyToOutput" default="Never"> | 182 | <xs:extension base="xs:string"> |
246 | <xs:simpleType> | 183 | <xs:attribute name="resourceName" type="xs:string" default="" /> |
247 | <xs:restriction base="xs:string"> | 184 | <xs:attribute name="buildAction" default="Compile"> |
248 | <xs:enumeration value="Never" /> | 185 | <xs:simpleType> |
249 | <xs:enumeration value="Always" /> | 186 | <xs:restriction base="xs:string"> |
250 | <xs:enumeration value="PreserveNewest" /> | 187 | <xs:enumeration value="None" /> |
251 | </xs:restriction> | 188 | <xs:enumeration value="Compile" /> |
252 | </xs:simpleType> | 189 | <xs:enumeration value="Content" /> |
253 | </xs:attribute> | 190 | <xs:enumeration value="EmbeddedResource" /> |
254 | </xs:complexType> | 191 | </xs:restriction> |
255 | </xs:element> | 192 | </xs:simpleType> |
256 | <xs:element name="Exclude"> | 193 | </xs:attribute> |
257 | <xs:complexType> | 194 | <xs:attribute name="subType" default="Code"> |
258 | <xs:attribute name="name" type="xs:string" use="required" /> | 195 | <xs:simpleType> |
259 | </xs:complexType> | 196 | <xs:restriction base="xs:string"> |
260 | </xs:element> | 197 | <xs:enumeration value="Code" /> |
198 | <xs:enumeration value="Component" /> | ||
199 | <xs:enumeration value="Form" /> | ||
200 | <xs:enumeration value="Settings" /> | ||
201 | <xs:enumeration value="UserControl" /> | ||
202 | </xs:restriction> | ||
203 | </xs:simpleType> | ||
204 | </xs:attribute> | ||
205 | <xs:attribute name="link" type="xs:boolean" /> | ||
206 | <xs:attribute name="copyToOutput" default="Never"> | ||
207 | <xs:simpleType> | ||
208 | <xs:restriction base="xs:string"> | ||
209 | <xs:enumeration value="Never" /> | ||
210 | <xs:enumeration value="Always" /> | ||
211 | <xs:enumeration value="PreserveNewest" /> | ||
212 | </xs:restriction> | ||
213 | </xs:simpleType> | ||
214 | </xs:attribute> | ||
215 | <xs:attribute name="preservePath" type="xs:boolean" /> | ||
216 | <xs:attribute name="linkPath" type="xs:string" /> | ||
217 | </xs:extension> | ||
218 | </xs:simpleContent> | ||
219 | </xs:complexType> | ||
220 | </xs:element> | ||
221 | <xs:element name="Match"> | ||
222 | <xs:complexType> | ||
223 | <xs:sequence> | ||
224 | <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" /> | ||
225 | </xs:sequence> | ||
226 | <xs:attribute name="path" type="xs:string" /> | ||
227 | <xs:attribute name="pattern" type="xs:string" use="required" /> | ||
228 | <xs:attribute name="recurse" type="xs:boolean" default="false" /> | ||
229 | <xs:attribute name="useRegex" type="xs:boolean" default="false" /> | ||
230 | <xs:attribute name="buildAction" default="Compile"> | ||
231 | <xs:simpleType> | ||
232 | <xs:restriction base="xs:string"> | ||
233 | <xs:enumeration value="None" /> | ||
234 | <xs:enumeration value="Compile" /> | ||
235 | <xs:enumeration value="Content" /> | ||
236 | <xs:enumeration value="EmbeddedResource" /> | ||
237 | </xs:restriction> | ||
238 | </xs:simpleType> | ||
239 | </xs:attribute> | ||
240 | <xs:attribute name="resourceName" type="xs:string" default="" /> | ||
241 | <xs:attribute name="subType" default="Code"> | ||
242 | <xs:simpleType> | ||
243 | <xs:restriction base="xs:string"> | ||
244 | <xs:enumeration value="Code" /> | ||
245 | <xs:enumeration value="Component" /> | ||
246 | <xs:enumeration value="Designer" /> | ||
247 | <xs:enumeration value="Form" /> | ||
248 | <xs:enumeration value="Settings" /> | ||
249 | <xs:enumeration value="UserControl" /> | ||
250 | </xs:restriction> | ||
251 | </xs:simpleType> | ||
252 | </xs:attribute> | ||
253 | <xs:attribute name="link" type="xs:boolean" /> | ||
254 | <xs:attribute name="copyToOutput" default="Never"> | ||
255 | <xs:simpleType> | ||
256 | <xs:restriction base="xs:string"> | ||
257 | <xs:enumeration value="Never" /> | ||
258 | <xs:enumeration value="Always" /> | ||
259 | <xs:enumeration value="PreserveNewest" /> | ||
260 | </xs:restriction> | ||
261 | </xs:simpleType> | ||
262 | </xs:attribute> | ||
263 | <xs:attribute name="preservePath" type="xs:boolean" /> | ||
264 | <xs:attribute name="linkPath" type="xs:string" /> | ||
265 | </xs:complexType> | ||
266 | </xs:element> | ||
267 | <xs:element name="Exclude"> | ||
268 | <xs:complexType> | ||
269 | <xs:attribute name="name" type="xs:string" /> | ||
270 | <xs:attribute name="pattern" type="xs:string" /> | ||
271 | </xs:complexType> | ||
272 | </xs:element> | ||
261 | </xs:schema> | 273 | </xs:schema> |
diff --git a/bin/Prebuild.exe b/bin/Prebuild.exe index c4bfd4d..621128f 100755 --- a/bin/Prebuild.exe +++ b/bin/Prebuild.exe | |||
Binary files differ | |||