aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Prebuild/src/Core
diff options
context:
space:
mode:
Diffstat (limited to 'Prebuild/src/Core')
-rw-r--r--Prebuild/src/Core/.svn/all-wcprops29
-rw-r--r--Prebuild/src/Core/.svn/dir-prop-base5
-rw-r--r--Prebuild/src/Core/.svn/entries182
-rw-r--r--Prebuild/src/Core/.svn/prop-base/FatalException.cs.svn-base9
-rw-r--r--Prebuild/src/Core/.svn/prop-base/Kernel.cs.svn-base9
-rw-r--r--Prebuild/src/Core/.svn/prop-base/UnknownLanguageException.cs.svn-base9
-rw-r--r--Prebuild/src/Core/.svn/prop-base/WarningException.cs.svn-base9
-rw-r--r--Prebuild/src/Core/.svn/text-base/FatalException.cs.svn-base85
-rw-r--r--Prebuild/src/Core/.svn/text-base/Kernel.cs.svn-base832
-rw-r--r--Prebuild/src/Core/.svn/text-base/UnknownLanguageException.cs.svn-base63
-rw-r--r--Prebuild/src/Core/.svn/text-base/WarningException.cs.svn-base84
-rw-r--r--Prebuild/src/Core/Attributes/.svn/all-wcprops23
-rw-r--r--Prebuild/src/Core/Attributes/.svn/dir-prop-base5
-rw-r--r--Prebuild/src/Core/Attributes/.svn/entries130
-rw-r--r--Prebuild/src/Core/Attributes/.svn/prop-base/DataNodeAttribute.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Attributes/.svn/prop-base/OptionNodeAttribute.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Attributes/.svn/prop-base/TargetAttribute.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Attributes/.svn/text-base/DataNodeAttribute.cs.svn-base72
-rw-r--r--Prebuild/src/Core/Attributes/.svn/text-base/OptionNodeAttribute.cs.svn-base71
-rw-r--r--Prebuild/src/Core/Attributes/.svn/text-base/TargetAttribute.cs.svn-base71
-rw-r--r--Prebuild/src/Core/Interfaces/.svn/all-wcprops17
-rw-r--r--Prebuild/src/Core/Interfaces/.svn/dir-prop-base5
-rw-r--r--Prebuild/src/Core/Interfaces/.svn/entries96
-rw-r--r--Prebuild/src/Core/Interfaces/.svn/prop-base/IDataNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Interfaces/.svn/prop-base/ITarget.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Interfaces/.svn/text-base/IDataNode.cs.svn-base47
-rw-r--r--Prebuild/src/Core/Interfaces/.svn/text-base/ITarget.cs.svn-base51
-rw-r--r--Prebuild/src/Core/Nodes/.svn/all-wcprops119
-rw-r--r--Prebuild/src/Core/Nodes/.svn/dir-prop-base5
-rw-r--r--Prebuild/src/Core/Nodes/.svn/entries674
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/ConfigurationNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/DataNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/ExcludeNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/FileNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/FilesNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/MatchNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/OptionsNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/ProcessNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/ProjectNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/ReferenceNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/ReferencePathNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/prop-base/SolutionNode.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/AuthorNode.cs.svn-base87
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/CleanFilesNode.cs.svn-base80
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/CleanupNode.cs.svn-base85
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNode.cs.svn-base225
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNodeCollection.cs.svn-base71
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/DataNode.cs.svn-base117
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/DatabaseProjectNode.cs.svn-base93
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/DatabaseReferenceNode.cs.svn-base63
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/DescriptionNode.cs.svn-base87
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/ExcludeNode.cs.svn-base89
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/FileNode.cs.svn-base285
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/FilesNode.cs.svn-base204
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/MatchNode.cs.svn-base367
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/OptionsNode.cs.svn-base634
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/ProcessNode.cs.svn-base108
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/ProjectNode.cs.svn-base579
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/ReferenceNode.cs.svn-base144
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/ReferencePathNode.cs.svn-base97
-rw-r--r--Prebuild/src/Core/Nodes/.svn/text-base/SolutionNode.cs.svn-base382
-rw-r--r--Prebuild/src/Core/Parse/.svn/all-wcprops17
-rw-r--r--Prebuild/src/Core/Parse/.svn/dir-prop-base5
-rw-r--r--Prebuild/src/Core/Parse/.svn/entries96
-rw-r--r--Prebuild/src/Core/Parse/.svn/prop-base/IfContext.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Parse/.svn/prop-base/Preprocessor.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Parse/.svn/text-base/IfContext.cs.svn-base154
-rw-r--r--Prebuild/src/Core/Parse/.svn/text-base/Preprocessor.cs.svn-base652
-rw-r--r--Prebuild/src/Core/Targets/.svn/all-wcprops101
-rw-r--r--Prebuild/src/Core/Targets/.svn/dir-prop-base5
-rw-r--r--Prebuild/src/Core/Targets/.svn/entries572
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/DebugTarget.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/MakefileTarget.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/MonoDevelopTarget.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/NAntTarget.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/SharpDevelopTarget.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/VS2002Target.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/VS2003Target.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/VS2005Target.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/prop-base/XcodeTarget.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/AutotoolsTarget.cs.svn-base1070
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/DebugTarget.cs.svn-base102
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/MakefileTarget.cs.svn-base469
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/MonoDevelopTarget.cs.svn-base515
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/NAntTarget.cs.svn-base776
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/SharpDevelop2Target.cs.svn-base82
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/SharpDevelopTarget.cs.svn-base425
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/ToolInfo.cs.svn-base197
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/VS2002Target.cs.svn-base87
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/VS2003Target.cs.svn-base593
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/VS2005Target.cs.svn-base147
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/VS2008Target.cs.svn-base127
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/VS2010Target.cs.svn-base138
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/VSGenericTarget.cs.svn-base922
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/VSVersion.cs.svn-base54
-rw-r--r--Prebuild/src/Core/Targets/.svn/text-base/XcodeTarget.cs.svn-base594
-rw-r--r--Prebuild/src/Core/Utilities/.svn/all-wcprops29
-rw-r--r--Prebuild/src/Core/Utilities/.svn/dir-prop-base5
-rw-r--r--Prebuild/src/Core/Utilities/.svn/entries164
-rw-r--r--Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base9
-rw-r--r--Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base152
-rw-r--r--Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base68
-rw-r--r--Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base575
-rw-r--r--Prebuild/src/Core/Utilities/.svn/text-base/Log.cs.svn-base276
107 files changed, 0 insertions, 15956 deletions
diff --git a/Prebuild/src/Core/.svn/all-wcprops b/Prebuild/src/Core/.svn/all-wcprops
deleted file mode 100644
index 5da53cf..0000000
--- a/Prebuild/src/Core/.svn/all-wcprops
+++ /dev/null
@@ -1,29 +0,0 @@
1K 25
2svn:wc:ra_dav:version-url
3V 50
4/svnroot/dnpb/!svn/ver/323/trunk/Prebuild/src/Core
5END
6Kernel.cs
7K 25
8svn:wc:ra_dav:version-url
9V 60
10/svnroot/dnpb/!svn/ver/323/trunk/Prebuild/src/Core/Kernel.cs
11END
12UnknownLanguageException.cs
13K 25
14svn:wc:ra_dav:version-url
15V 77
16/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/Core/UnknownLanguageException.cs
17END
18WarningException.cs
19K 25
20svn:wc:ra_dav:version-url
21V 70
22/svnroot/dnpb/!svn/ver/298/trunk/Prebuild/src/Core/WarningException.cs
23END
24FatalException.cs
25K 25
26svn:wc:ra_dav:version-url
27V 68
28/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/FatalException.cs
29END
diff --git a/Prebuild/src/Core/.svn/dir-prop-base b/Prebuild/src/Core/.svn/dir-prop-base
deleted file mode 100644
index a1989a0..0000000
--- a/Prebuild/src/Core/.svn/dir-prop-base
+++ /dev/null
@@ -1,5 +0,0 @@
1K 10
2svn:ignore
3V 5
4*.swp
5END
diff --git a/Prebuild/src/Core/.svn/entries b/Prebuild/src/Core/.svn/entries
deleted file mode 100644
index 8497de9..0000000
--- a/Prebuild/src/Core/.svn/entries
+++ /dev/null
@@ -1,182 +0,0 @@
110
2
3dir
4323
5https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core
6https://dnpb.svn.sourceforge.net/svnroot/dnpb
7
8
9
102010-09-10T17:51:36.189738Z
11323
12jhurliman
13has-props
14
15
16
17
18
19
20
21
22
23
24
25
26
273355ff64-970d-0410-bbe8-d0fbd18be4fb
28
29Interfaces
30dir
31
32Kernel.cs
33file
34
35
36
37
382010-09-10T22:51:44.000000Z
390fc816c335568995dd3f89bd47452727
402010-09-10T17:51:36.189738Z
41323
42jhurliman
43has-props
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
6420883
65
66Attributes
67dir
68
69UnknownLanguageException.cs
70file
71
72
73
74
752010-09-10T22:51:44.000000Z
765ecd3d9972f0d59ad6c2b37b81c9aa6d
772006-01-28T00:49:58.000000Z
7871
79jendave
80has-props
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1011764
102
103Nodes
104dir
105
106WarningException.cs
107file
108
109
110
111
1122010-09-10T22:51:44.000000Z
113316bb4928be4041587e4f12a29f7ccd6
1142009-02-20T02:15:45.530129Z
115298
116kunnis
117has-props
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
1382625
139
140Targets
141dir
142
143Parse
144dir
145
146FatalException.cs
147file
148
149
150
151
1522010-09-10T22:51:44.000000Z
1531a328443d0e4a2705efc142c1161959b
1542009-02-19T06:47:52.218324Z
155295
156kunnis
157has-props
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
1782776
179
180Utilities
181dir
182
diff --git a/Prebuild/src/Core/.svn/prop-base/FatalException.cs.svn-base b/Prebuild/src/Core/.svn/prop-base/FatalException.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/.svn/prop-base/FatalException.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/.svn/prop-base/Kernel.cs.svn-base b/Prebuild/src/Core/.svn/prop-base/Kernel.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/.svn/prop-base/Kernel.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/.svn/prop-base/UnknownLanguageException.cs.svn-base b/Prebuild/src/Core/.svn/prop-base/UnknownLanguageException.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/.svn/prop-base/UnknownLanguageException.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/.svn/prop-base/WarningException.cs.svn-base b/Prebuild/src/Core/.svn/prop-base/WarningException.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/.svn/prop-base/WarningException.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/.svn/text-base/FatalException.cs.svn-base b/Prebuild/src/Core/.svn/text-base/FatalException.cs.svn-base
deleted file mode 100644
index 3487905..0000000
--- a/Prebuild/src/Core/.svn/text-base/FatalException.cs.svn-base
+++ /dev/null
@@ -1,85 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Runtime.Serialization;
28
29namespace Prebuild.Core
30{
31 /// <summary>
32 ///
33 /// </summary>
34 [Serializable()]
35 public class FatalException : Exception
36 {
37 #region Constructors
38
39
40 /// <summary>
41 /// Initializes a new instance of the <see cref="FatalException"/> class.
42 /// </summary>
43 public FatalException()
44 {
45 }
46
47 /// <summary>
48 /// Initializes a new instance of the <see cref="FatalException"/> class.
49 /// </summary>
50 /// <param name="format">The format.</param>
51 /// <param name="args">The args.</param>
52 public FatalException(string format, params object[] args)
53 : base(String.Format(format, args))
54 {
55 }
56
57 /// <summary>
58 /// Exception with specified string
59 /// </summary>
60 /// <param name="message">Exception message</param>
61 public FatalException(string message): base(message)
62 {
63 }
64
65 /// <summary>
66 ///
67 /// </summary>
68 /// <param name="message"></param>
69 /// <param name="exception"></param>
70 public FatalException(string message, Exception exception) : base(message, exception)
71 {
72 }
73
74 /// <summary>
75 ///
76 /// </summary>
77 /// <param name="info"></param>
78 /// <param name="context"></param>
79 protected FatalException(SerializationInfo info, StreamingContext context) : base( info, context )
80 {
81 }
82
83 #endregion
84 }
85}
diff --git a/Prebuild/src/Core/.svn/text-base/Kernel.cs.svn-base b/Prebuild/src/Core/.svn/text-base/Kernel.cs.svn-base
deleted file mode 100644
index 67051d5..0000000
--- a/Prebuild/src/Core/.svn/text-base/Kernel.cs.svn-base
+++ /dev/null
@@ -1,832 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2008
4Matthew Holmes (matthew@wildfiregames.com),
5Dan Moorehead (dan05a@gmail.com),
6Rob Loach (http://www.robloach.net),
7C.J. Adams-Collier (cjac@colliertech.org)
8
9Redistribution and use in source and binary forms, with or without
10modification, are permitted provided that the following conditions are
11met:
12
13* Redistributions of source code must retain the above copyright
14 notice, this list of conditions and the following disclaimer.
15
16* Redistributions in binary form must reproduce the above copyright
17 notice, this list of conditions and the following disclaimer in the
18 documentation and/or other materials provided with the distribution.
19
20* The name of the author may not be used to endorse or promote
21 products derived from this software without specific prior written
22 permission.
23
24THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
25IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
28INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
33IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34POSSIBILITY OF SUCH DAMAGE.
35
36*/
37#endregion
38
39#define NO_VALIDATE
40
41using System;
42using System.Collections.Generic;
43using System.IO;
44using System.Reflection;
45using System.Xml;
46using System.Xml.Schema;
47using Prebuild.Core.Attributes;
48using Prebuild.Core.Interfaces;
49using Prebuild.Core.Nodes;
50using Prebuild.Core.Utilities;
51
52namespace Prebuild.Core
53{
54 /// <summary>
55 ///
56 /// </summary>
57 public class Kernel : IDisposable
58 {
59 #region Inner Classes
60
61 private struct NodeEntry
62 {
63 public Type Type;
64 public DataNodeAttribute Attribute;
65 }
66
67 #endregion
68
69 #region Fields
70
71 private static readonly Kernel m_Instance = new Kernel();
72
73 /// <summary>
74 /// This must match the version of the schema that is embeeded
75 /// </summary>
76 private const string m_SchemaVersion = "1.9";
77 private const string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd";
78 private const string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema;
79 bool disposed;
80 private Version m_Version;
81 private const string m_Revision = "";
82 private CommandLineCollection m_CommandLine;
83 private Log m_Log;
84 private CurrentDirectory m_CurrentWorkingDirectory;
85 private XmlSchemaCollection m_Schemas;
86
87 private readonly Dictionary<string, ITarget> m_Targets = new Dictionary<string, ITarget>();
88 private readonly Dictionary<string, NodeEntry> m_Nodes = new Dictionary<string, NodeEntry>();
89
90 readonly List<SolutionNode> m_Solutions = new List<SolutionNode>();
91 string m_Target;
92 string m_Clean;
93 string[] m_RemoveDirectories;
94 XmlDocument m_CurrentDoc;
95 bool m_PauseAfterFinish;
96 string[] m_ProjectGroups;
97
98 #endregion
99
100 #region Constructors
101
102 private Kernel()
103 {
104 }
105
106 #endregion
107
108 #region Properties
109
110 /// <summary>
111 /// Gets a value indicating whether [pause after finish].
112 /// </summary>
113 /// <value><c>true</c> if [pause after finish]; otherwise, <c>false</c>.</value>
114 public bool PauseAfterFinish
115 {
116 get
117 {
118 return m_PauseAfterFinish;
119 }
120 }
121
122 /// <summary>
123 /// Gets the instance.
124 /// </summary>
125 /// <value>The instance.</value>
126 public static Kernel Instance
127 {
128 get
129 {
130 return m_Instance;
131 }
132 }
133
134 /// <summary>
135 /// Gets the version.
136 /// </summary>
137 /// <value>The version.</value>
138 public string Version
139 {
140 get
141 {
142 return String.Format("{0}.{1}.{2}{3}", m_Version.Major, m_Version.Minor, m_Version.Build, m_Revision);
143 }
144 }
145
146 /// <summary>
147 /// Gets the command line.
148 /// </summary>
149 /// <value>The command line.</value>
150 public CommandLineCollection CommandLine
151 {
152 get
153 {
154 return m_CommandLine;
155 }
156 }
157
158 /// <summary>
159 /// Gets the targets.
160 /// </summary>
161 /// <value>The targets.</value>
162 public Dictionary<string, ITarget> Targets
163 {
164 get
165 {
166 return m_Targets;
167 }
168 }
169
170 /// <summary>
171 /// Gets the log.
172 /// </summary>
173 /// <value>The log.</value>
174 public Log Log
175 {
176 get
177 {
178 return m_Log;
179 }
180 }
181
182 /// <summary>
183 /// Gets the current working directory.
184 /// </summary>
185 /// <value>The current working directory.</value>
186 public CurrentDirectory CurrentWorkingDirectory
187 {
188 get
189 {
190 return m_CurrentWorkingDirectory;
191 }
192 }
193
194 /// <summary>
195 /// Gets the solutions.
196 /// </summary>
197 /// <value>The solutions.</value>
198 public List<SolutionNode> Solutions
199 {
200 get
201 {
202 return m_Solutions;
203 }
204 }
205
206 /// <summary>
207 /// Gets the XmlDocument object representing the prebuild.xml
208 /// being processed
209 /// </summary>
210 /// <value>The XmlDocument object</value>
211 public XmlDocument CurrentDoc
212 {
213 get
214 {
215 return m_CurrentDoc;
216 }
217 }
218
219 #endregion
220
221 #region Private Methods
222
223 private static void RemoveDirectories(string rootDir, string[] dirNames)
224 {
225 foreach(string dir in Directory.GetDirectories(rootDir))
226 {
227 string simpleName = Path.GetFileName(dir);
228
229 if(Array.IndexOf(dirNames, simpleName) != -1)
230 {
231 //delete if the name matches one of the directory names to delete
232 string fullDirPath = Path.GetFullPath(dir);
233 Directory.Delete(fullDirPath,true);
234 }
235 else//not a match, so check children
236 {
237 RemoveDirectories(dir,dirNames);
238 //recurse, checking children for them
239 }
240 }
241 }
242
243// private void RemoveDirectoryMatches(string rootDir, string dirPattern)
244// {
245// foreach(string dir in Directory.GetDirectories(rootDir))
246// {
247// foreach(string match in Directory.GetDirectories(dir))
248// {//delete all child directories that match
249// Directory.Delete(Path.GetFullPath(match),true);
250// }
251// //recure through the rest checking for nested matches to delete
252// RemoveDirectoryMatches(dir,dirPattern);
253// }
254// }
255
256 private void LoadSchema()
257 {
258 Assembly assembly = GetType().Assembly;
259 Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema);
260 if(stream == null)
261 {
262 //try without the default namespace prepending to it in case was compiled with SharpDevelop or MonoDevelop instead of Visual Studio .NET
263 stream = assembly.GetManifestResourceStream(m_Schema);
264 if(stream == null)
265 {
266 throw new System.Reflection.TargetException(string.Format("Could not find the scheme embedded resource file '{0}'.", m_Schema));
267 }
268 }
269 XmlReader schema = new XmlTextReader(stream);
270
271 m_Schemas = new XmlSchemaCollection();
272 m_Schemas.Add(m_SchemaURI, schema);
273 }
274
275 private void CacheVersion()
276 {
277 m_Version = Assembly.GetEntryAssembly().GetName().Version;
278 }
279
280 private void CacheTargets(Assembly assm)
281 {
282 foreach(Type t in assm.GetTypes())
283 {
284 TargetAttribute ta = (TargetAttribute)Helper.CheckType(t, typeof(TargetAttribute), typeof(ITarget));
285
286 if(ta == null)
287 continue;
288
289 if (t.IsAbstract)
290 continue;
291
292 ITarget target = (ITarget)assm.CreateInstance(t.FullName);
293 if (target == null)
294 {
295 throw new MissingMethodException("Could not create ITarget instance");
296 }
297
298 m_Targets[ta.Name] = target;
299 }
300 }
301
302 private void CacheNodeTypes(Assembly assm)
303 {
304 foreach(Type t in assm.GetTypes())
305 {
306 foreach (DataNodeAttribute dna in t.GetCustomAttributes(typeof(DataNodeAttribute), true))
307 {
308 NodeEntry ne = new NodeEntry();
309 ne.Type = t;
310 ne.Attribute = dna;
311 m_Nodes[dna.Name] = ne;
312 }
313 }
314 }
315
316 private void LogBanner()
317 {
318 m_Log.Write("Prebuild v" + Version);
319 m_Log.Write("Copyright (c) 2004-2010");
320 m_Log.Write("Matthew Holmes (matthew@wildfiregames.com),");
321 m_Log.Write("Dan Moorehead (dan05a@gmail.com),");
322 m_Log.Write("David Hudson (jendave@yahoo.com),");
323 m_Log.Write("Rob Loach (http://www.robloach.net),");
324 m_Log.Write("C.J. Adams-Collier (cjac@colliertech.org),");
325 m_Log.Write("John Hurliman (john.hurliman@intel.com),");
326
327 m_Log.Write("See 'prebuild /usage' for help");
328 m_Log.Write();
329 }
330
331
332
333 private void ProcessFile(string file)
334 {
335 ProcessFile(file, m_Solutions);
336 }
337
338 public void ProcessFile(ProcessNode node, SolutionNode parent)
339 {
340 if (node.IsValid)
341 {
342 List<SolutionNode> list = new List<SolutionNode>();
343 ProcessFile(node.Path, list);
344
345 foreach (SolutionNode solution in list)
346 parent.SolutionsTable[solution.Name] = solution;
347 }
348 }
349
350 /// <summary>
351 ///
352 /// </summary>
353 /// <param name="file"></param>
354 /// <param name="solutions"></param>
355 /// <returns></returns>
356 public void ProcessFile(string file, IList<SolutionNode> solutions)
357 {
358 m_CurrentWorkingDirectory.Push();
359
360 string path = file;
361 try
362 {
363 try
364 {
365 path = Helper.ResolvePath(path);
366 }
367 catch(ArgumentException)
368 {
369 m_Log.Write("Could not open Prebuild file: " + path);
370 m_CurrentWorkingDirectory.Pop();
371 return;
372 }
373
374 Helper.SetCurrentDir(Path.GetDirectoryName(path));
375
376 XmlTextReader reader = new XmlTextReader(path);
377
378 Core.Parse.Preprocessor pre = new Core.Parse.Preprocessor();
379
380 //register command line arguments as XML variables
381 IEnumerator<KeyValuePair<string, string>> dict = m_CommandLine.GetEnumerator();
382 while (dict.MoveNext())
383 {
384 string name = dict.Current.Key.Trim();
385 if (name.Length > 0)
386 pre.RegisterVariable(name, dict.Current.Value);
387 }
388
389 string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML
390
391 // See if the user put into a pseudo target of "prebuild:preprocessed-input" to indicate they want to see the
392 // output before the system processes it.
393 if (m_CommandLine.WasPassed("ppi"))
394 {
395 // Get the filename if there is one, otherwise use a default.
396 string ppiFile = m_CommandLine["ppi"];
397 if (ppiFile == null || ppiFile.Trim().Length == 0)
398 {
399 ppiFile = "preprocessed-input.xml";
400 }
401
402 // Write out the string to the given stream.
403 try
404 {
405 using (StreamWriter ppiWriter = new StreamWriter(ppiFile))
406 {
407 ppiWriter.WriteLine(xml);
408 }
409 }
410 catch(IOException ex)
411 {
412 Console.WriteLine("Could not write PPI file '{0}': {1}", ppiFile, ex.Message);
413 }
414
415 // Finish processing this special tag.
416 return;
417 }
418
419 m_CurrentDoc = new XmlDocument();
420 try
421 {
422#if NO_VALIDATE
423 XmlReader validator = XmlReader.Create(new StringReader(xml));
424 m_CurrentDoc.Load(validator);
425#else
426 XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml)));
427
428 //validate while reading from string into XmlDocument DOM structure in memory
429 foreach(XmlSchema schema in m_Schemas)
430 {
431 validator.Schemas.Add(schema);
432 }
433 m_CurrentDoc.Load(validator);
434#endif
435 }
436 catch(XmlException e)
437 {
438 throw new XmlException(e.ToString());
439 }
440
441 //is there a purpose to writing it? An syntax/schema problem would have been found during pre.Process() and reported with details
442 if(m_CommandLine.WasPassed("ppo"))
443 {
444 string ppoFile = m_CommandLine["ppo"];
445 if(ppoFile == null || ppoFile.Trim().Length < 1)
446 {
447 ppoFile = "preprocessed.xml";
448 }
449
450 StreamWriter writer = null;
451 try
452 {
453 writer = new StreamWriter(ppoFile);
454 writer.Write(xml);
455 }
456 catch(IOException ex)
457 {
458 Console.WriteLine("Could not write PPO file '{0}': {1}", ppoFile, ex.Message);
459 }
460 finally
461 {
462 if(writer != null)
463 {
464 writer.Close();
465 }
466 }
467 return;
468 }
469 //start reading the xml config file
470 XmlElement rootNode = m_CurrentDoc.DocumentElement;
471 //string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0");
472 Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false);
473
474 foreach(XmlNode node in rootNode.ChildNodes)//solutions or if pre-proc instructions
475 {
476 IDataNode dataNode = ParseNode(node, null);
477 if(dataNode is ProcessNode)
478 {
479 ProcessNode proc = (ProcessNode)dataNode;
480 if(proc.IsValid)
481 {
482 ProcessFile(proc.Path);
483 }
484 }
485 else if(dataNode is SolutionNode)
486 {
487 solutions.Add((SolutionNode)dataNode);
488 }
489 }
490 }
491 catch(XmlSchemaException xse)
492 {
493 m_Log.Write("XML validation error at line {0} in {1}:\n\n{2}",
494 xse.LineNumber, path, xse.Message);
495 }
496 finally
497 {
498 m_CurrentWorkingDirectory.Pop();
499 }
500 }
501
502 #endregion
503
504 #region Public Methods
505
506 /// <summary>
507 /// Allows the project.
508 /// </summary>
509 /// <param name="projectGroupsFlags">The project groups flags.</param>
510 /// <returns></returns>
511 public bool AllowProject(string projectGroupsFlags)
512 {
513 if(m_ProjectGroups != null && m_ProjectGroups.Length > 0)
514 {
515 if(projectGroupsFlags != null && projectGroupsFlags.Length == 0)
516 {
517 foreach(string group in projectGroupsFlags.Split('|'))
518 {
519 if(Array.IndexOf(m_ProjectGroups, group) != -1) //if included in the filter list
520 {
521 return true;
522 }
523 }
524 }
525 return false;//not included in the list or no groups specified for the project
526 }
527 return true;//no filter specified in the command line args
528 }
529
530 /// <summary>
531 /// Gets the type of the node.
532 /// </summary>
533 /// <param name="node">The node.</param>
534 /// <returns></returns>
535 public Type GetNodeType(XmlNode node)
536 {
537 if( node == null )
538 {
539 throw new ArgumentNullException("node");
540 }
541 if(!m_Nodes.ContainsKey(node.Name))
542 {
543 return null;
544 }
545
546 NodeEntry ne = m_Nodes[node.Name];
547 return ne.Type;
548 }
549
550 /// <summary>
551 ///
552 /// </summary>
553 /// <param name="node"></param>
554 /// <param name="parent"></param>
555 /// <returns></returns>
556 public IDataNode ParseNode(XmlNode node, IDataNode parent)
557 {
558 return ParseNode(node, parent, null);
559 }
560
561 //Create an instance of the data node type that is mapped to the name of the xml DOM node
562 /// <summary>
563 /// Parses the node.
564 /// </summary>
565 /// <param name="node">The node.</param>
566 /// <param name="parent">The parent.</param>
567 /// <param name="preNode">The pre node.</param>
568 /// <returns></returns>
569 public IDataNode ParseNode(XmlNode node, IDataNode parent, IDataNode preNode)
570 {
571 IDataNode dataNode;
572
573 try
574 {
575 if( node == null )
576 {
577 throw new ArgumentNullException("node");
578 }
579 if(preNode == null)
580 {
581 if(!m_Nodes.ContainsKey(node.Name))
582 {
583 Console.WriteLine("WARNING: Unknown XML node: " + node.Name);
584 return null;
585 }
586
587 NodeEntry ne = m_Nodes[node.Name];
588 Type type = ne.Type;
589 //DataNodeAttribute dna = ne.Attribute;
590
591 dataNode = (IDataNode)type.Assembly.CreateInstance(type.FullName);
592 if(dataNode == null)
593 {
594 throw new System.Reflection.TargetException("Could not create new parser instance: " + type.FullName);
595 }
596 }
597 else
598 dataNode = preNode;
599
600 dataNode.Parent = parent;
601 dataNode.Parse(node);
602 }
603 catch(WarningException wex)
604 {
605 m_Log.Write(LogType.Warning, wex.Message);
606 return null;
607 }
608 catch(FatalException fex)
609 {
610 m_Log.WriteException(LogType.Error, fex);
611 throw;
612 }
613 catch(Exception ex)
614 {
615 m_Log.WriteException(LogType.Error, ex);
616 throw;
617 }
618
619 return dataNode;
620 }
621
622 /// <summary>
623 /// Initializes the specified target.
624 /// </summary>
625 /// <param name="target">The target.</param>
626 /// <param name="args">The args.</param>
627 public void Initialize(LogTargets target, string[] args)
628 {
629 CacheTargets(GetType().Assembly);
630 CacheNodeTypes(GetType().Assembly);
631 CacheVersion();
632
633 m_CommandLine = new CommandLineCollection(args);
634
635 string logFile = null;
636 if(m_CommandLine.WasPassed("log"))
637 {
638 logFile = m_CommandLine["log"];
639
640 if(logFile != null && logFile.Length == 0)
641 {
642 logFile = "Prebuild.log";
643 }
644 }
645 else
646 {
647 target = target & ~LogTargets.File; //dont output to a file
648 }
649
650 m_Log = new Log(target, logFile);
651 LogBanner();
652
653 m_CurrentWorkingDirectory = new CurrentDirectory();
654
655 m_Target = m_CommandLine["target"];
656 m_Clean = m_CommandLine["clean"];
657 string removeDirs = m_CommandLine["removedir"];
658 if(removeDirs != null && removeDirs.Length == 0)
659 {
660 m_RemoveDirectories = removeDirs.Split('|');
661 }
662
663 string flags = m_CommandLine["allowedgroups"];//allows filtering by specifying a pipe-delimited list of groups to include
664 if(flags != null && flags.Length == 0)
665 {
666 m_ProjectGroups = flags.Split('|');
667 }
668 m_PauseAfterFinish = m_CommandLine.WasPassed("pause");
669
670 LoadSchema();
671 }
672
673 /// <summary>
674 /// Processes this instance.
675 /// </summary>
676 public void Process()
677 {
678 bool perfomedOtherTask = false;
679 if(m_RemoveDirectories != null && m_RemoveDirectories.Length > 0)
680 {
681 try
682 {
683 RemoveDirectories(".",m_RemoveDirectories);
684 }
685 catch(IOException e)
686 {
687 m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
688 m_Log.WriteException(LogType.Error,e);
689 }
690 catch(UnauthorizedAccessException e)
691 {
692 m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
693 m_Log.WriteException(LogType.Error,e);
694 }
695 perfomedOtherTask = true;
696 }
697
698 if(m_Target != null && m_Clean != null)
699 {
700 m_Log.Write(LogType.Error, "The options /target and /clean cannot be passed together");
701 return;
702 }
703
704 if(m_Target == null && m_Clean == null)
705 {
706 if(perfomedOtherTask) //finished
707 {
708 return;
709 }
710 m_Log.Write(LogType.Error, "Must pass either /target or /clean to process a Prebuild file");
711 return;
712 }
713
714 string file = "./prebuild.xml";
715 if(m_CommandLine.WasPassed("file"))
716 {
717 file = m_CommandLine["file"];
718 }
719
720 ProcessFile(file);
721
722 string target = (m_Target != null ? m_Target.ToLower() : m_Clean.ToLower());
723 bool clean = (m_Target == null);
724 if(clean && target != null && target.Length == 0)
725 {
726 target = "all";
727 }
728 if(clean && target == "all")//default to all if no target was specified for clean
729 {
730 //check if they passed yes
731 if (!m_CommandLine.WasPassed("yes"))
732 {
733 Console.WriteLine("WARNING: This operation will clean ALL project files for all targets, are you sure? (y/n):");
734 string ret = Console.ReadLine();
735 if(ret == null)
736 {
737 return;
738 }
739 ret = ret.Trim().ToLower();
740 if((ret.ToLower() != "y" && ret.ToLower() != "yes"))
741 {
742 return;
743 }
744 }
745 //clean all targets (just cleaning vs2002 target didn't clean nant)
746 foreach(ITarget targ in m_Targets.Values)
747 {
748 targ.Clean(this);
749 }
750 }
751 else
752 {
753 if (!m_Targets.ContainsKey(target)) {
754 m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target);
755 return;
756 }
757 ITarget targ = m_Targets[target];
758
759 if(clean)
760 {
761 targ.Clean(this);
762 }
763 else
764 {
765 targ.Write(this);
766 }
767 }
768
769 m_Log.Flush();
770 }
771
772 #endregion
773
774 #region IDisposable Members
775
776 /// <summary>
777 ///
778 /// </summary>
779 public void Dispose()
780 {
781 Dispose(true);
782 GC.SuppressFinalize(this);
783 }
784
785 /// <summary>
786 /// Dispose objects
787 /// </summary>
788 /// <param name="disposing">
789 /// If true, it will dispose close the handle
790 /// </param>
791 /// <remarks>
792 /// Will dispose managed and unmanaged resources.
793 /// </remarks>
794 protected virtual void Dispose(bool disposing)
795 {
796 if (!disposed)
797 {
798 if (disposing)
799 {
800 GC.SuppressFinalize(this);
801 if (m_Log != null)
802 {
803 m_Log.Close();
804 m_Log = null;
805 }
806 }
807 }
808 disposed = true;
809 }
810
811 /// <summary>
812 ///
813 /// </summary>
814 ~Kernel()
815 {
816 Dispose(false);
817 }
818
819 /// <summary>
820 /// Closes and destroys this object
821 /// </summary>
822 /// <remarks>
823 /// Same as Dispose(true)
824 /// </remarks>
825 public void Close()
826 {
827 Dispose();
828 }
829
830 #endregion
831 }
832}
diff --git a/Prebuild/src/Core/.svn/text-base/UnknownLanguageException.cs.svn-base b/Prebuild/src/Core/.svn/text-base/UnknownLanguageException.cs.svn-base
deleted file mode 100644
index 607b66c..0000000
--- a/Prebuild/src/Core/.svn/text-base/UnknownLanguageException.cs.svn-base
+++ /dev/null
@@ -1,63 +0,0 @@
1/*
2 * $RCSfile$
3 * Copyright (C) 2004, 2005 David Hudson (jendave@yahoo.com)
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20using System;
21using System.Runtime.Serialization;
22
23namespace Prebuild.Core
24{
25 /// <summary>
26 /// </summary>
27 [Serializable()]
28 public class UnknownLanguageException : Exception
29 {
30 /// <summary>
31 /// Basic exception.
32 /// </summary>
33 public UnknownLanguageException()
34 {
35 }
36
37 /// <summary>
38 /// Exception with specified string
39 /// </summary>
40 /// <param name="message">Exception message</param>
41 public UnknownLanguageException(string message): base(message)
42 {
43 }
44
45 /// <summary>
46 ///
47 /// </summary>
48 /// <param name="message"></param>
49 /// <param name="exception"></param>
50 public UnknownLanguageException(string message, Exception exception) : base(message, exception)
51 {
52 }
53
54 /// <summary>
55 ///
56 /// </summary>
57 /// <param name="info"></param>
58 /// <param name="context"></param>
59 protected UnknownLanguageException(SerializationInfo info, StreamingContext context) : base( info, context )
60 {
61 }
62 }
63}
diff --git a/Prebuild/src/Core/.svn/text-base/WarningException.cs.svn-base b/Prebuild/src/Core/.svn/text-base/WarningException.cs.svn-base
deleted file mode 100644
index b7c3668..0000000
--- a/Prebuild/src/Core/.svn/text-base/WarningException.cs.svn-base
+++ /dev/null
@@ -1,84 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Runtime.Serialization;
28
29namespace Prebuild.Core
30{
31 /// <summary>
32 ///
33 /// </summary>
34 [Serializable]
35 public class WarningException : Exception
36 {
37 #region Constructors
38
39 /// <summary>
40 ///
41 /// </summary>
42 public WarningException()
43 {
44 }
45
46 /// <summary>
47 ///
48 /// </summary>
49 /// <param name="format"></param>
50 /// <param name="args"></param>
51 public WarningException(string format, params object[] args)
52 : base(String.Format(format, args))
53 {
54 }
55
56 /// <summary>
57 /// Exception with specified string
58 /// </summary>
59 /// <param name="message">Exception message</param>
60 public WarningException(string message): base(message)
61 {
62 }
63
64 /// <summary>
65 ///
66 /// </summary>
67 /// <param name="message"></param>
68 /// <param name="exception"></param>
69 public WarningException(string message, Exception exception) : base(message, exception)
70 {
71 }
72
73 /// <summary>
74 ///
75 /// </summary>
76 /// <param name="info"></param>
77 /// <param name="context"></param>
78 protected WarningException(SerializationInfo info, StreamingContext context) : base( info, context )
79 {
80 }
81
82 #endregion
83 }
84}
diff --git a/Prebuild/src/Core/Attributes/.svn/all-wcprops b/Prebuild/src/Core/Attributes/.svn/all-wcprops
deleted file mode 100644
index bb28016..0000000
--- a/Prebuild/src/Core/Attributes/.svn/all-wcprops
+++ /dev/null
@@ -1,23 +0,0 @@
1K 25
2svn:wc:ra_dav:version-url
3V 61
4/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Attributes
5END
6OptionNodeAttribute.cs
7K 25
8svn:wc:ra_dav:version-url
9V 84
10/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs
11END
12DataNodeAttribute.cs
13K 25
14svn:wc:ra_dav:version-url
15V 82
16/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Attributes/DataNodeAttribute.cs
17END
18TargetAttribute.cs
19K 25
20svn:wc:ra_dav:version-url
21V 80
22/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Attributes/TargetAttribute.cs
23END
diff --git a/Prebuild/src/Core/Attributes/.svn/dir-prop-base b/Prebuild/src/Core/Attributes/.svn/dir-prop-base
deleted file mode 100644
index a1989a0..0000000
--- a/Prebuild/src/Core/Attributes/.svn/dir-prop-base
+++ /dev/null
@@ -1,5 +0,0 @@
1K 10
2svn:ignore
3V 5
4*.swp
5END
diff --git a/Prebuild/src/Core/Attributes/.svn/entries b/Prebuild/src/Core/Attributes/.svn/entries
deleted file mode 100644
index 1ce535e..0000000
--- a/Prebuild/src/Core/Attributes/.svn/entries
+++ /dev/null
@@ -1,130 +0,0 @@
110
2
3dir
4323
5https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core/Attributes
6https://dnpb.svn.sourceforge.net/svnroot/dnpb
7
8
9
102009-02-19T06:47:52.218324Z
11295
12kunnis
13has-props
14
15
16
17
18
19
20
21
22
23
24
25
26
273355ff64-970d-0410-bbe8-d0fbd18be4fb
28
29OptionNodeAttribute.cs
30file
31
32
33
34
352010-09-10T22:51:44.000000Z
36fe1b8740374f76dcb84f73de54376d48
372009-02-19T06:47:52.218324Z
38295
39kunnis
40has-props
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
612240
62
63DataNodeAttribute.cs
64file
65
66
67
68
692010-09-10T22:51:44.000000Z
707988716ebc1c723842814e3eec197831
712009-02-19T06:47:52.218324Z
72295
73kunnis
74has-props
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
952270
96
97TargetAttribute.cs
98file
99
100
101
102
1032010-09-10T22:51:44.000000Z
104766d4782c2b50f82a7c98e1eb968f42d
1052009-02-19T06:47:52.218324Z
106295
107kunnis
108has-props
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
1292194
130
diff --git a/Prebuild/src/Core/Attributes/.svn/prop-base/DataNodeAttribute.cs.svn-base b/Prebuild/src/Core/Attributes/.svn/prop-base/DataNodeAttribute.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Attributes/.svn/prop-base/DataNodeAttribute.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Attributes/.svn/prop-base/OptionNodeAttribute.cs.svn-base b/Prebuild/src/Core/Attributes/.svn/prop-base/OptionNodeAttribute.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Attributes/.svn/prop-base/OptionNodeAttribute.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Attributes/.svn/prop-base/TargetAttribute.cs.svn-base b/Prebuild/src/Core/Attributes/.svn/prop-base/TargetAttribute.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Attributes/.svn/prop-base/TargetAttribute.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Attributes/.svn/text-base/DataNodeAttribute.cs.svn-base b/Prebuild/src/Core/Attributes/.svn/text-base/DataNodeAttribute.cs.svn-base
deleted file mode 100644
index f1938a2..0000000
--- a/Prebuild/src/Core/Attributes/.svn/text-base/DataNodeAttribute.cs.svn-base
+++ /dev/null
@@ -1,72 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Specialized;
28
29namespace Prebuild.Core.Attributes
30{
31 /// <summary>
32 ///
33 /// </summary>
34 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple=true)]
35 public sealed class DataNodeAttribute : Attribute
36 {
37 #region Fields
38
39 private string m_Name = "unknown";
40
41 #endregion
42
43 #region Constructors
44
45 /// <summary>
46 /// Initializes a new instance of the <see cref="DataNodeAttribute"/> class.
47 /// </summary>
48 /// <param name="name">The name.</param>
49 public DataNodeAttribute(string name)
50 {
51 m_Name = name;
52 }
53
54 #endregion
55
56 #region Properties
57
58 /// <summary>
59 /// Gets the name.
60 /// </summary>
61 /// <value>The name.</value>
62 public string Name
63 {
64 get
65 {
66 return m_Name;
67 }
68 }
69
70 #endregion
71 }
72}
diff --git a/Prebuild/src/Core/Attributes/.svn/text-base/OptionNodeAttribute.cs.svn-base b/Prebuild/src/Core/Attributes/.svn/text-base/OptionNodeAttribute.cs.svn-base
deleted file mode 100644
index 2d6a6a7..0000000
--- a/Prebuild/src/Core/Attributes/.svn/text-base/OptionNodeAttribute.cs.svn-base
+++ /dev/null
@@ -1,71 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Attributes
29{
30 /// <summary>
31 ///
32 /// </summary>
33 [AttributeUsage(AttributeTargets.Field)]
34 public sealed class OptionNodeAttribute : Attribute
35 {
36 #region Fields
37
38 private string m_NodeName;
39
40 #endregion
41
42 #region Constructors
43
44 /// <summary>
45 /// Initializes a new instance of the <see cref="OptionNodeAttribute"/> class.
46 /// </summary>
47 /// <param name="nodeName">Name of the node.</param>
48 public OptionNodeAttribute(string nodeName)
49 {
50 m_NodeName = nodeName;
51 }
52
53 #endregion
54
55 #region Properties
56
57 /// <summary>
58 /// Gets the name of the node.
59 /// </summary>
60 /// <value>The name of the node.</value>
61 public string NodeName
62 {
63 get
64 {
65 return m_NodeName;
66 }
67 }
68
69 #endregion
70 }
71}
diff --git a/Prebuild/src/Core/Attributes/.svn/text-base/TargetAttribute.cs.svn-base b/Prebuild/src/Core/Attributes/.svn/text-base/TargetAttribute.cs.svn-base
deleted file mode 100644
index 5ad62ee..0000000
--- a/Prebuild/src/Core/Attributes/.svn/text-base/TargetAttribute.cs.svn-base
+++ /dev/null
@@ -1,71 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Attributes
29{
30 /// <summary>
31 ///
32 /// </summary>
33 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
34 public sealed class TargetAttribute : Attribute
35 {
36 #region Fields
37
38 private string m_Name;
39
40 #endregion
41
42 #region Constructors
43
44 /// <summary>
45 /// Initializes a new instance of the <see cref="TargetAttribute"/> class.
46 /// </summary>
47 /// <param name="name">The name.</param>
48 public TargetAttribute(string name)
49 {
50 m_Name = name;
51 }
52
53 #endregion
54
55 #region Properties
56
57 /// <summary>
58 /// Gets the name.
59 /// </summary>
60 /// <value>The name.</value>
61 public string Name
62 {
63 get
64 {
65 return m_Name;
66 }
67 }
68
69 #endregion
70 }
71}
diff --git a/Prebuild/src/Core/Interfaces/.svn/all-wcprops b/Prebuild/src/Core/Interfaces/.svn/all-wcprops
deleted file mode 100644
index 0359de2..0000000
--- a/Prebuild/src/Core/Interfaces/.svn/all-wcprops
+++ /dev/null
@@ -1,17 +0,0 @@
1K 25
2svn:wc:ra_dav:version-url
3V 61
4/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Interfaces
5END
6ITarget.cs
7K 25
8svn:wc:ra_dav:version-url
9V 72
10/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Interfaces/ITarget.cs
11END
12IDataNode.cs
13K 25
14svn:wc:ra_dav:version-url
15V 74
16/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Interfaces/IDataNode.cs
17END
diff --git a/Prebuild/src/Core/Interfaces/.svn/dir-prop-base b/Prebuild/src/Core/Interfaces/.svn/dir-prop-base
deleted file mode 100644
index a1989a0..0000000
--- a/Prebuild/src/Core/Interfaces/.svn/dir-prop-base
+++ /dev/null
@@ -1,5 +0,0 @@
1K 10
2svn:ignore
3V 5
4*.swp
5END
diff --git a/Prebuild/src/Core/Interfaces/.svn/entries b/Prebuild/src/Core/Interfaces/.svn/entries
deleted file mode 100644
index 0ff8913..0000000
--- a/Prebuild/src/Core/Interfaces/.svn/entries
+++ /dev/null
@@ -1,96 +0,0 @@
110
2
3dir
4323
5https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core/Interfaces
6https://dnpb.svn.sourceforge.net/svnroot/dnpb
7
8
9
102009-02-19T06:47:52.218324Z
11295
12kunnis
13has-props
14
15
16
17
18
19
20
21
22
23
24
25
26
273355ff64-970d-0410-bbe8-d0fbd18be4fb
28
29ITarget.cs
30file
31
32
33
34
352010-09-10T22:51:44.000000Z
3652c732d42919f00330b2c4ed8b6360f8
372009-02-19T06:47:52.218324Z
38295
39kunnis
40has-props
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
611984
62
63IDataNode.cs
64file
65
66
67
68
692010-09-10T22:51:44.000000Z
700ff6737b55b9bc4c63f9143c367a7e62
712009-02-19T06:47:52.218324Z
72295
73kunnis
74has-props
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
951900
96
diff --git a/Prebuild/src/Core/Interfaces/.svn/prop-base/IDataNode.cs.svn-base b/Prebuild/src/Core/Interfaces/.svn/prop-base/IDataNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Interfaces/.svn/prop-base/IDataNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Interfaces/.svn/prop-base/ITarget.cs.svn-base b/Prebuild/src/Core/Interfaces/.svn/prop-base/ITarget.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Interfaces/.svn/prop-base/ITarget.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Interfaces/.svn/text-base/IDataNode.cs.svn-base b/Prebuild/src/Core/Interfaces/.svn/text-base/IDataNode.cs.svn-base
deleted file mode 100644
index 986dd2d..0000000
--- a/Prebuild/src/Core/Interfaces/.svn/text-base/IDataNode.cs.svn-base
+++ /dev/null
@@ -1,47 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29namespace Prebuild.Core.Interfaces
30{
31 /// <summary>
32 ///
33 /// </summary>
34 public interface IDataNode
35 {
36 /// <summary>
37 /// Gets or sets the parent.
38 /// </summary>
39 /// <value>The parent.</value>
40 IDataNode Parent { get; set; }
41 /// <summary>
42 /// Parses the specified node.
43 /// </summary>
44 /// <param name="node">The node.</param>
45 void Parse(XmlNode node);
46 }
47}
diff --git a/Prebuild/src/Core/Interfaces/.svn/text-base/ITarget.cs.svn-base b/Prebuild/src/Core/Interfaces/.svn/text-base/ITarget.cs.svn-base
deleted file mode 100644
index 47115c6..0000000
--- a/Prebuild/src/Core/Interfaces/.svn/text-base/ITarget.cs.svn-base
+++ /dev/null
@@ -1,51 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Interfaces
29{
30 /// <summary>
31 ///
32 /// </summary>
33 public interface ITarget
34 {
35 /// <summary>
36 /// Writes the specified kern.
37 /// </summary>
38 /// <param name="kern">The kern.</param>
39 void Write(Kernel kern);
40 /// <summary>
41 /// Cleans the specified kern.
42 /// </summary>
43 /// <param name="kern">The kern.</param>
44 void Clean(Kernel kern);
45 /// <summary>
46 /// Gets the name.
47 /// </summary>
48 /// <value>The name.</value>
49 string Name { get; }
50 }
51} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/.svn/all-wcprops b/Prebuild/src/Core/Nodes/.svn/all-wcprops
deleted file mode 100644
index 6565f05..0000000
--- a/Prebuild/src/Core/Nodes/.svn/all-wcprops
+++ /dev/null
@@ -1,119 +0,0 @@
1K 25
2svn:wc:ra_dav:version-url
3V 56
4/svnroot/dnpb/!svn/ver/321/trunk/Prebuild/src/Core/Nodes
5END
6CleanFilesNode.cs
7K 25
8svn:wc:ra_dav:version-url
9V 74
10/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/CleanFilesNode.cs
11END
12ProjectNode.cs
13K 25
14svn:wc:ra_dav:version-url
15V 71
16/svnroot/dnpb/!svn/ver/319/trunk/Prebuild/src/Core/Nodes/ProjectNode.cs
17END
18ConfigurationNode.cs
19K 25
20svn:wc:ra_dav:version-url
21V 77
22/svnroot/dnpb/!svn/ver/316/trunk/Prebuild/src/Core/Nodes/ConfigurationNode.cs
23END
24DataNode.cs
25K 25
26svn:wc:ra_dav:version-url
27V 68
28/svnroot/dnpb/!svn/ver/321/trunk/Prebuild/src/Core/Nodes/DataNode.cs
29END
30ReferencePathNode.cs
31K 25
32svn:wc:ra_dav:version-url
33V 77
34/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/ReferencePathNode.cs
35END
36SolutionNode.cs
37K 25
38svn:wc:ra_dav:version-url
39V 72
40/svnroot/dnpb/!svn/ver/315/trunk/Prebuild/src/Core/Nodes/SolutionNode.cs
41END
42ProcessNode.cs
43K 25
44svn:wc:ra_dav:version-url
45V 71
46/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/ProcessNode.cs
47END
48FileNode.cs
49K 25
50svn:wc:ra_dav:version-url
51V 68
52/svnroot/dnpb/!svn/ver/316/trunk/Prebuild/src/Core/Nodes/FileNode.cs
53END
54DescriptionNode.cs
55K 25
56svn:wc:ra_dav:version-url
57V 75
58/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/DescriptionNode.cs
59END
60DatabaseReferenceNode.cs
61K 25
62svn:wc:ra_dav:version-url
63V 81
64/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs
65END
66ConfigurationNodeCollection.cs
67K 25
68svn:wc:ra_dav:version-url
69V 87
70/svnroot/dnpb/!svn/ver/315/trunk/Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs
71END
72CleanupNode.cs
73K 25
74svn:wc:ra_dav:version-url
75V 71
76/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/CleanupNode.cs
77END
78ExcludeNode.cs
79K 25
80svn:wc:ra_dav:version-url
81V 71
82/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Nodes/ExcludeNode.cs
83END
84OptionsNode.cs
85K 25
86svn:wc:ra_dav:version-url
87V 71
88/svnroot/dnpb/!svn/ver/315/trunk/Prebuild/src/Core/Nodes/OptionsNode.cs
89END
90DatabaseProjectNode.cs
91K 25
92svn:wc:ra_dav:version-url
93V 79
94/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs
95END
96MatchNode.cs
97K 25
98svn:wc:ra_dav:version-url
99V 69
100/svnroot/dnpb/!svn/ver/318/trunk/Prebuild/src/Core/Nodes/MatchNode.cs
101END
102ReferenceNode.cs
103K 25
104svn:wc:ra_dav:version-url
105V 73
106/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Nodes/ReferenceNode.cs
107END
108FilesNode.cs
109K 25
110svn:wc:ra_dav:version-url
111V 69
112/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/FilesNode.cs
113END
114AuthorNode.cs
115K 25
116svn:wc:ra_dav:version-url
117V 70
118/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Nodes/AuthorNode.cs
119END
diff --git a/Prebuild/src/Core/Nodes/.svn/dir-prop-base b/Prebuild/src/Core/Nodes/.svn/dir-prop-base
deleted file mode 100644
index a1989a0..0000000
--- a/Prebuild/src/Core/Nodes/.svn/dir-prop-base
+++ /dev/null
@@ -1,5 +0,0 @@
1K 10
2svn:ignore
3V 5
4*.swp
5END
diff --git a/Prebuild/src/Core/Nodes/.svn/entries b/Prebuild/src/Core/Nodes/.svn/entries
deleted file mode 100644
index b60f190..0000000
--- a/Prebuild/src/Core/Nodes/.svn/entries
+++ /dev/null
@@ -1,674 +0,0 @@
110
2
3dir
4323
5https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core/Nodes
6https://dnpb.svn.sourceforge.net/svnroot/dnpb
7
8
9
102010-08-12T16:58:08.825470Z
11321
12jhurliman
13has-props
14
15
16
17
18
19
20
21
22
23
24
25
26
273355ff64-970d-0410-bbe8-d0fbd18be4fb
28
29CleanFilesNode.cs
30file
31
32
33
34
352010-09-10T22:51:44.000000Z
36c798b3c4167ec1a3815ddae93a552427
372009-04-15T01:28:16.827957Z
38307
39kunnis
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
612666
62
63ProjectNode.cs
64file
65
66
67
68
692010-09-10T22:51:44.000000Z
70be9ade7048917117783a06508fa4d378
712010-05-09T23:19:49.063286Z
72319
73jhurliman
74has-props
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
9513444
96
97ConfigurationNode.cs
98file
99
100
101
102
1032010-09-10T22:51:44.000000Z
104e42a548bfaba22cf94dbb203b2b28352
1052010-05-08T05:43:01.449559Z
106316
107jhurliman
108has-props
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
1295222
130
131DataNode.cs
132file
133
134
135
136
1372010-09-10T22:51:44.000000Z
13839b1d83bff018fce9f616ae2e6f1be82
1392010-08-12T16:58:08.825470Z
140321
141jhurliman
142has-props
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
1633294
164
165ReferencePathNode.cs
166file
167
168
169
170
1712010-09-10T22:51:44.000000Z
172409c91bafff2572218a6cdefcc6ec48c
1732009-04-15T01:28:16.827957Z
174307
175kunnis
176has-props
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
1972677
198
199SolutionNode.cs
200file
201
202
203
204
2052010-09-10T22:51:44.000000Z
20679bdf34c92682dc5ba8b5db15aaa95d6
2072009-06-06T19:47:31.451428Z
208315
209dmoonfire
210has-props
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
2319720
232
233ProcessNode.cs
234file
235
236
237
238
2392010-09-10T22:51:44.000000Z
2401816314797ef66235c58938b33ea2b3b
2412009-04-15T01:28:16.827957Z
242307
243kunnis
244has-props
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
2652900
266
267FileNode.cs
268file
269
270
271
272
2732010-09-10T22:51:44.000000Z
27443f98599da19618be6c6ed74f36fceae
2752010-05-08T05:43:01.449559Z
276316
277jhurliman
278has-props
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
2996043
300
301DescriptionNode.cs
302file
303
304
305
306
3072010-09-10T22:51:44.000000Z
3083f8a8b8cc4b3a94b94109276ad2222d3
3092009-04-15T01:28:16.827957Z
310307
311kunnis
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
3332493
334
335DatabaseReferenceNode.cs
336file
337
338
339
340
3412010-09-10T22:51:44.000000Z
3424104ed953ae9105ac6498ce7882ed8ee
3432009-02-19T06:47:52.218324Z
344295
345kunnis
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
3672390
368
369ConfigurationNodeCollection.cs
370file
371
372
373
374
3752010-09-10T22:51:44.000000Z
3768620885fc85bdc06288acf6b8f58b3ff
3772009-06-06T19:47:31.451428Z
378315
379dmoonfire
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
4012406
402
403CleanupNode.cs
404file
405
406
407
408
4092010-09-10T22:51:44.000000Z
410198fb1e15cd545655978686277e39d96
4112009-04-15T01:28:16.827957Z
412307
413kunnis
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
4352689
436
437ExcludeNode.cs
438file
439
440
441
442
4432010-09-10T22:51:44.000000Z
444810fc73f537028052471239c72f41c11
4452009-02-19T06:47:52.218324Z
446295
447kunnis
448has-props
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
4692608
470
471OptionsNode.cs
472file
473
474
475
476
4772010-09-10T22:51:44.000000Z
478691dd5f7e7ce2a06814cdcae611fc40e
4792009-06-06T19:47:31.451428Z
480315
481dmoonfire
482has-props
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
50310949
504
505DatabaseProjectNode.cs
506file
507
508
509
510
5112010-09-10T22:51:44.000000Z
51218995e6577e6bb3622fe41f5bfe01b48
5132009-04-15T01:28:16.827957Z
514307
515kunnis
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
5372476
538
539MatchNode.cs
540file
541
542
543
544
5452010-09-10T22:51:44.000000Z
5463344ef3bdb7db2006eb987a80128cd06
5472010-05-09T08:21:52.307305Z
548318
549jhurliman
550has-props
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
57110846
572
573ReferenceNode.cs
574file
575
576
577
578
5792010-09-10T22:51:44.000000Z
58018d76c27d53a4d54f16f57a855a21916
5812009-02-19T06:47:52.218324Z
582295
583kunnis
584has-props
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
6053705
606
607FilesNode.cs
608file
609
610
611
612
6132010-09-10T22:51:44.000000Z
614e6ddefd5fff49958f77b5ef96f06c09e
6152009-04-15T01:28:16.827957Z
616307
617kunnis
618has-props
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
6396036
640
641AuthorNode.cs
642file
643
644
645
646
6472010-09-10T22:51:44.000000Z
64807607d8988fc1236ab8bef5fc12f8cd5
6492009-04-15T01:28:16.827957Z
650307
651kunnis
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
6732425
674
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/ConfigurationNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/ConfigurationNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/ConfigurationNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/DataNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/DataNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/DataNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/ExcludeNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/ExcludeNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/ExcludeNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/FileNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/FileNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/FileNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/FilesNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/FilesNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/FilesNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/MatchNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/MatchNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/MatchNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/OptionsNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/OptionsNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/OptionsNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/ProcessNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/ProcessNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/ProcessNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/ProjectNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/ProjectNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/ProjectNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/ReferenceNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/ReferenceNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/ReferenceNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/ReferencePathNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/ReferencePathNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/ReferencePathNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/prop-base/SolutionNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/prop-base/SolutionNode.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Nodes/.svn/prop-base/SolutionNode.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/AuthorNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/AuthorNode.cs.svn-base
deleted file mode 100644
index 4c415bb..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/AuthorNode.cs.svn-base
+++ /dev/null
@@ -1,87 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Author")]
39 public class AuthorNode : DataNode
40 {
41 #region Fields
42
43 private string m_Signature;
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the signature.
51 /// </summary>
52 /// <value>The signature.</value>
53 public string Signature
54 {
55 get
56 {
57 return m_Signature;
58 }
59 }
60
61 #endregion
62
63 #region Public Methods
64
65 /// <summary>
66 /// Parses the specified node.
67 /// </summary>
68 /// <param name="node">The node.</param>
69 public override void Parse(XmlNode node)
70 {
71 if( node == null )
72 {
73 throw new ArgumentNullException("node");
74 }
75
76 m_Signature = Helper.InterpolateForEnvironmentVariables(node.InnerText);
77 if(m_Signature == null)
78 {
79 m_Signature = "";
80 }
81
82 m_Signature = m_Signature.Trim();
83 }
84
85 #endregion
86 }
87}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/CleanFilesNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/CleanFilesNode.cs.svn-base
deleted file mode 100644
index 71405f9..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/CleanFilesNode.cs.svn-base
+++ /dev/null
@@ -1,80 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Utilities;
33
34namespace Prebuild.Core.Nodes
35{
36 [DataNode("CleanFiles")]
37 public class CleanFilesNode : DataNode
38 {
39 #region Fields
40
41 private string m_Pattern;
42
43 #endregion
44
45 #region Properties
46
47 /// <summary>
48 /// Gets the signature.
49 /// </summary>
50 /// <value>The signature.</value>
51 public string Pattern
52 {
53 get
54 {
55 return m_Pattern;
56 }
57 }
58
59 #endregion
60
61 #region Public Methods
62
63 /// <summary>
64 /// Parses the specified node.
65 /// </summary>
66 /// <param name="node">The node.</param>
67 public override void Parse(XmlNode node)
68 {
69 if (node == null)
70 {
71 throw new ArgumentNullException("node");
72 }
73
74 m_Pattern = Helper.AttributeValue(node, "pattern", String.Empty); ;
75 m_Pattern = m_Pattern.Trim();
76 }
77
78 #endregion
79 }
80} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/CleanupNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/CleanupNode.cs.svn-base
deleted file mode 100644
index b8131b0..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/CleanupNode.cs.svn-base
+++ /dev/null
@@ -1,85 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32
33namespace Prebuild.Core.Nodes
34{
35 [DataNode("Cleanup")]
36 public class CleanupNode : DataNode
37 {
38 #region Fields
39
40 private List<CleanFilesNode> m_CleanFiles = new List<CleanFilesNode>();
41
42 #endregion
43
44 #region Properties
45
46 /// <summary>
47 /// Gets the signature.
48 /// </summary>
49 /// <value>The signature.</value>
50 public List<CleanFilesNode> CleanFiles
51 {
52 get
53 {
54 return m_CleanFiles;
55 }
56 }
57
58 #endregion
59
60 #region Public Methods
61
62 /// <summary>
63 /// Parses the specified node.
64 /// </summary>
65 /// <param name="node">The node.</param>
66 public override void Parse(XmlNode node)
67 {
68 if( node == null )
69 {
70 throw new ArgumentNullException("node");
71 }
72
73 foreach (XmlNode child in node.ChildNodes)
74 {
75 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
76 if (dataNode is CleanFilesNode)
77 {
78 m_CleanFiles.Add((CleanFilesNode)dataNode);
79 }
80 }
81 }
82
83 #endregion
84 }
85} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNode.cs.svn-base
deleted file mode 100644
index cd2f740..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNode.cs.svn-base
+++ /dev/null
@@ -1,225 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Configuration")]
39 public class ConfigurationNode : DataNode, ICloneable, IComparable
40 {
41 #region Fields
42
43 private string m_Name = "unknown";
44 private string m_Platform = "AnyCPU";
45 private OptionsNode m_Options;
46
47 #endregion
48
49 #region Constructors
50
51 /// <summary>
52 /// Initializes a new instance of the <see cref="ConfigurationNode"/> class.
53 /// </summary>
54 public ConfigurationNode()
55 {
56 m_Options = new OptionsNode();
57 }
58
59 #endregion
60
61 #region Properties
62
63 /// <summary>
64 /// Gets or sets the parent.
65 /// </summary>
66 /// <value>The parent.</value>
67 public override IDataNode Parent
68 {
69 get
70 {
71 return base.Parent;
72 }
73 set
74 {
75 base.Parent = value;
76 if(base.Parent is SolutionNode)
77 {
78 SolutionNode node = (SolutionNode)base.Parent;
79 if(node != null && node.Options != null)
80 {
81 node.Options.CopyTo(m_Options);
82 }
83 }
84 }
85 }
86
87 /// <summary>
88 /// Identifies the platform for this specific configuration.
89 /// </summary>
90 public string Platform
91 {
92 get
93 {
94 return m_Platform;
95 }
96 set
97 {
98 switch ((value + "").ToLower())
99 {
100 case "x86":
101 case "x64":
102 m_Platform = value;
103 break;
104 case "itanium":
105 m_Platform = "Itanium";
106 break;
107 default:
108 m_Platform = "AnyCPU";
109 break;
110 }
111 }
112 }
113
114 /// <summary>
115 /// Gets the name.
116 /// </summary>
117 /// <value>The name.</value>
118 public string Name
119 {
120 get
121 {
122 return m_Name;
123 }
124 }
125
126 /// <summary>
127 /// Gets the name and platform for the configuration.
128 /// </summary>
129 /// <value>The name and platform.</value>
130 public string NameAndPlatform
131 {
132 get
133 {
134 string platform = m_Platform;
135 if (platform == "AnyCPU")
136 platform = "Any CPU";
137
138 return String.Format("{0}|{1}", m_Name, platform);
139 }
140 }
141
142 /// <summary>
143 /// Gets or sets the options.
144 /// </summary>
145 /// <value>The options.</value>
146 public OptionsNode Options
147 {
148 get
149 {
150 return m_Options;
151 }
152 set
153 {
154 m_Options = value;
155 }
156 }
157
158 #endregion
159
160 #region Public Methods
161
162 /// <summary>
163 /// Parses the specified node.
164 /// </summary>
165 /// <param name="node">The node.</param>
166 public override void Parse(XmlNode node)
167 {
168 m_Name = Helper.AttributeValue(node, "name", m_Name);
169 Platform = Helper.AttributeValue(node, "platform", m_Platform);
170
171 if (node == null)
172 {
173 throw new ArgumentNullException("node");
174 }
175 foreach(XmlNode child in node.ChildNodes)
176 {
177 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
178 if(dataNode is OptionsNode)
179 {
180 ((OptionsNode)dataNode).CopyTo(m_Options);
181 }
182 }
183 }
184
185 /// <summary>
186 /// Copies to.
187 /// </summary>
188 /// <param name="conf">The conf.</param>
189 public void CopyTo(ConfigurationNode conf)
190 {
191 m_Options.CopyTo(conf.m_Options);
192 }
193
194 #endregion
195
196 #region ICloneable Members
197
198 /// <summary>
199 /// Creates a new object that is a copy of the current instance.
200 /// </summary>
201 /// <returns>
202 /// A new object that is a copy of this instance.
203 /// </returns>
204 public object Clone()
205 {
206 ConfigurationNode ret = new ConfigurationNode();
207 ret.m_Name = m_Name;
208 ret.m_Platform = m_Platform;
209 m_Options.CopyTo(ret.m_Options);
210 return ret;
211 }
212
213 #endregion
214
215 #region IComparable Members
216
217 public int CompareTo(object obj)
218 {
219 ConfigurationNode that = (ConfigurationNode) obj;
220 return this.m_Name.CompareTo(that.m_Name);
221 }
222
223 #endregion
224 }
225}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNodeCollection.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNodeCollection.cs.svn-base
deleted file mode 100644
index 1c38d9e..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNodeCollection.cs.svn-base
+++ /dev/null
@@ -1,71 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System.Collections.Generic;
27
28namespace Prebuild.Core.Nodes
29{
30 /// <summary>
31 /// Implements a specialized list of configuration nodes which allows for lookup via
32 /// configuration name and platform.
33 /// </summary>
34 public class ConfigurationNodeCollection : List<ConfigurationNode>
35 {
36 #region Properties
37
38 public ConfigurationNode this[string nameAndPlatform]
39 {
40 get
41 {
42 foreach (ConfigurationNode configurationNode in this)
43 {
44 if (configurationNode.NameAndPlatform == nameAndPlatform)
45 {
46 return configurationNode;
47 }
48 }
49
50 return null;
51 }
52
53 set
54 {
55 // See if the node
56 ConfigurationNode configurationNode = this[nameAndPlatform];
57
58 if (configurationNode != null)
59 {
60 this[IndexOf(configurationNode)] = value;
61 }
62 else
63 {
64 Add(value);
65 }
66 }
67 }
68
69 #endregion
70 }
71}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/DataNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/DataNode.cs.svn-base
deleted file mode 100644
index 318b13c..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/DataNode.cs.svn-base
+++ /dev/null
@@ -1,117 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using System.IO;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 public abstract class DataNode : IDataNode
39 {
40 #region Fields
41
42 private IDataNode parent;
43 string[] m_WebTypes = new string[] { "aspx", "ascx", "master", "ashx", "asmx" };
44
45 #endregion
46
47 #region IDataNode Members
48
49 /// <summary>
50 /// Gets or sets the parent.
51 /// </summary>
52 /// <value>The parent.</value>
53 public virtual IDataNode Parent
54 {
55 get
56 {
57 return parent;
58 }
59 set
60 {
61 parent = value;
62 }
63 }
64 public string[] WebTypes
65 {
66 get { return m_WebTypes; }
67 }
68 /// <summary>
69 /// Parses the specified node.
70 /// </summary>
71 /// <param name="node">The node.</param>
72 public virtual void Parse(XmlNode node)
73 {
74 }
75 public BuildAction GetBuildActionByFileName(string fileName)
76 {
77 string extension = Path.GetExtension(fileName).ToLower();
78 foreach (string type in WebTypes)
79 {
80 if (extension == type)
81 return BuildAction.Content;
82 }
83 return BuildAction.Compile;
84 }
85 /// <summary>
86 /// Parses the file type to figure out what type it is
87 /// </summary>
88 /// <returns></returns>
89 public SubType GetSubTypeByFileName(string fileName)
90 {
91 string extension = System.IO.Path.GetExtension(fileName).ToLower();
92 string designer = String.Format(".designer{0}", extension);
93 string path = fileName.ToLower();
94 if (extension == ".resx")
95 {
96 return SubType.Designer;
97 }
98 else if (path.EndsWith(".settings"))
99 {
100 return SubType.Settings;
101 }
102 else
103 {
104
105 foreach (string type in WebTypes)
106 {
107 if (path.EndsWith(type))
108 {
109 return SubType.CodeBehind;
110 }
111 }
112 }
113 return SubType.Code;
114 }
115 #endregion
116 }
117}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/DatabaseProjectNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/DatabaseProjectNode.cs.svn-base
deleted file mode 100644
index 278ecd8..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/DatabaseProjectNode.cs.svn-base
+++ /dev/null
@@ -1,93 +0,0 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Xml;
5
6using Prebuild.Core.Attributes;
7using Prebuild.Core.Interfaces;
8using Prebuild.Core.Utilities;
9
10namespace Prebuild.Core.Nodes
11{
12 [DataNode("DatabaseProject")]
13 public class DatabaseProjectNode : DataNode
14 {
15 string name;
16 string path;
17 string fullpath;
18 Guid guid = Guid.NewGuid();
19 readonly List<AuthorNode> authors = new List<AuthorNode>();
20 readonly List<DatabaseReferenceNode> references = new List<DatabaseReferenceNode>();
21
22 public Guid Guid
23 {
24 get { return guid; }
25 }
26
27 public string Name
28 {
29 get { return name; }
30 }
31
32 public string Path
33 {
34 get { return path; }
35 }
36
37 public string FullPath
38 {
39 get { return fullpath; }
40 }
41
42 public IEnumerable<DatabaseReferenceNode> References
43 {
44 get { return references; }
45 }
46
47 public override void Parse(XmlNode node)
48 {
49 name = Helper.AttributeValue(node, "name", name);
50 path = Helper.AttributeValue(node, "path", name);
51
52 try
53 {
54 fullpath = Helper.ResolvePath(path);
55 }
56 catch
57 {
58 throw new WarningException("Could not resolve Solution path: {0}", path);
59 }
60
61 Kernel.Instance.CurrentWorkingDirectory.Push();
62
63 try
64 {
65 Helper.SetCurrentDir(fullpath);
66
67 if (node == null)
68 {
69 throw new ArgumentNullException("node");
70 }
71
72 foreach (XmlNode child in node.ChildNodes)
73 {
74 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
75
76 if (dataNode == null)
77 continue;
78
79 if (dataNode is AuthorNode)
80 authors.Add((AuthorNode)dataNode);
81 else if (dataNode is DatabaseReferenceNode)
82 references.Add((DatabaseReferenceNode)dataNode);
83 }
84 }
85 finally
86 {
87 Kernel.Instance.CurrentWorkingDirectory.Pop();
88 }
89
90 base.Parse(node);
91 }
92 }
93}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/DatabaseReferenceNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/DatabaseReferenceNode.cs.svn-base
deleted file mode 100644
index 845db24..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/DatabaseReferenceNode.cs.svn-base
+++ /dev/null
@@ -1,63 +0,0 @@
1using System;
2using Prebuild.Core.Attributes;
3using Prebuild.Core.Utilities;
4
5namespace Prebuild.Core.Nodes
6{
7 [DataNode("DatabaseReference")]
8 public class DatabaseReferenceNode : DataNode
9 {
10 string name;
11 Guid providerId;
12 string connectionString;
13
14 public string Name
15 {
16 get { return name; }
17 }
18
19 public Guid ProviderId
20 {
21 get { return providerId; }
22 }
23
24 public string ConnectionString
25 {
26 get { return connectionString; }
27 }
28
29 public override void Parse(System.Xml.XmlNode node)
30 {
31 name = Helper.AttributeValue(node, "name", name);
32
33 string providerName = Helper.AttributeValue(node, "providerName", string.Empty);
34 if (providerName != null)
35 {
36 switch (providerName)
37 {
38 // digitaljeebus: pulled from HKLM\SOFTWARE\Microsoft\VisualStudio\9.0\DataProviders\*
39 // Not sure if these will help other operating systems, or if there's a better way.
40 case "Microsoft.SqlServerCe.Client.3.5":
41 providerId = new Guid("7C602B5B-ACCB-4acd-9DC0-CA66388C1533"); break;
42 case "System.Data.OleDb":
43 providerId = new Guid("7F041D59-D76A-44ed-9AA2-FBF6B0548B80"); break;
44 case "System.Data.OracleClient":
45 providerId = new Guid("8F5C5018-AE09-42cf-B2CC-2CCCC7CFC2BB"); break;
46 case "System.Data.SqlClient":
47 providerId = new Guid("91510608-8809-4020-8897-FBA057E22D54"); break;
48 case "System.Data.Odbc":
49 providerId = new Guid("C3D4F4CE-2C48-4381-B4D6-34FA50C51C86"); break;
50
51 default:
52 throw new ArgumentOutOfRangeException("providerName", providerName, "Could not provider name to an id.");
53 }
54 }
55 else
56 providerId = new Guid(Helper.AttributeValue(node, "providerId", Guid.Empty.ToString("B")));
57
58 connectionString = Helper.AttributeValue(node, "connectionString", connectionString);
59
60 base.Parse(node);
61 }
62 }
63}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/DescriptionNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/DescriptionNode.cs.svn-base
deleted file mode 100644
index d1293a0..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/DescriptionNode.cs.svn-base
+++ /dev/null
@@ -1,87 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 /// The object representing the /Prebuild/Solution/Project/Description element
37 /// </summary>
38 [DataNode("Description")]
39 public class DescriptionNode : DataNode
40 {
41 #region Fields
42
43 private string m_Value;
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the description Value.
51 /// </summary>
52 /// <value>The description Value.</value>
53 public string Value
54 {
55 get
56 {
57 return m_Value;
58 }
59 }
60
61 #endregion
62
63 #region Public Methods
64
65 /// <summary>
66 /// Parses the specified node.
67 /// </summary>
68 /// <param name="node">The node.</param>
69 public override void Parse(XmlNode node)
70 {
71 if( node == null )
72 {
73 throw new ArgumentNullException("node");
74 }
75
76 m_Value = Helper.InterpolateForEnvironmentVariables(node.InnerText);
77 if(m_Value == null)
78 {
79 m_Value = "";
80 }
81
82 m_Value = m_Value.Trim();
83 }
84
85 #endregion
86 }
87}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/ExcludeNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/ExcludeNode.cs.svn-base
deleted file mode 100644
index 7f04cba..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/ExcludeNode.cs.svn-base
+++ /dev/null
@@ -1,89 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Exclude")]
39 public class ExcludeNode : DataNode
40 {
41 #region Fields
42
43 private string m_Pattern = "";
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the name.
51 /// </summary>
52 /// <value>The name.</value>
53 public string Name
54 {
55 get
56 {
57 return m_Pattern;
58 }
59 }
60
61 /// <summary>
62 /// Gets the pattern.
63 /// </summary>
64 /// <value>The pattern.</value>
65 public string Pattern
66 {
67 get
68 {
69 return m_Pattern;
70 }
71 }
72
73 #endregion
74
75 #region Public Methods
76
77 /// <summary>
78 /// Parses the specified node.
79 /// </summary>
80 /// <param name="node">The node.</param>
81 public override void Parse(XmlNode node)
82 {
83 m_Pattern = Helper.AttributeValue( node, "name", m_Pattern );
84 m_Pattern = Helper.AttributeValue(node, "pattern", m_Pattern );
85 }
86
87 #endregion
88 }
89}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/FileNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/FileNode.cs.svn-base
deleted file mode 100644
index 01cea1e..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/FileNode.cs.svn-base
+++ /dev/null
@@ -1,285 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Utilities;
33using Prebuild.Core.Targets;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 ///
39 /// </summary>
40 public enum BuildAction
41 {
42 /// <summary>
43 ///
44 /// </summary>
45 None,
46 /// <summary>
47 ///
48 /// </summary>
49 Compile,
50 /// <summary>
51 ///
52 /// </summary>
53 Content,
54 /// <summary>
55 ///
56 /// </summary>
57 EmbeddedResource,
58 /// <summary>
59 ///
60 /// </summary>
61 ApplicationDefinition,
62 /// <summary>
63 ///
64 /// </summary>
65 Page
66 }
67
68 /// <summary>
69 ///
70 /// </summary>
71 public enum SubType
72 {
73 /// <summary>
74 ///
75 /// </summary>
76 Code,
77 /// <summary>
78 ///
79 /// </summary>
80 Component,
81 /// <summary>
82 ///
83 /// </summary>
84 Designer,
85 /// <summary>
86 ///
87 /// </summary>
88 Form,
89 /// <summary>
90 ///
91 /// </summary>
92 Settings,
93 /// <summary>
94 ///
95 /// </summary>
96 UserControl,
97 /// <summary>
98 ///
99 /// </summary>
100 CodeBehind,
101 }
102
103 public enum CopyToOutput
104 {
105 Never,
106 Always,
107 PreserveNewest
108 }
109
110 /// <summary>
111 ///
112 /// </summary>
113 [DataNode("File")]
114 public class FileNode : DataNode
115 {
116 #region Fields
117
118 private string m_Path;
119 private string m_ResourceName = "";
120 private BuildAction? m_BuildAction;
121 private bool m_Valid;
122 private SubType? m_SubType;
123 private CopyToOutput m_CopyToOutput = CopyToOutput.Never;
124 private bool m_Link = false;
125 private string m_LinkPath = string.Empty;
126 private bool m_PreservePath = false;
127
128
129 #endregion
130
131 #region Properties
132
133 /// <summary>
134 ///
135 /// </summary>
136 public string Path
137 {
138 get
139 {
140 return m_Path;
141 }
142 }
143
144 /// <summary>
145 ///
146 /// </summary>
147 public string ResourceName
148 {
149 get
150 {
151 return m_ResourceName;
152 }
153 }
154
155 /// <summary>
156 ///
157 /// </summary>
158 public BuildAction BuildAction
159 {
160 get
161 {
162 if (m_BuildAction != null)
163 return m_BuildAction.Value;
164 else
165 return GetBuildActionByFileName(this.Path);
166
167 }
168 }
169
170 public CopyToOutput CopyToOutput
171 {
172 get
173 {
174 return this.m_CopyToOutput;
175 }
176 }
177
178 public bool IsLink
179 {
180 get
181 {
182 return this.m_Link;
183 }
184 }
185
186 public string LinkPath
187 {
188 get
189 {
190 return this.m_LinkPath;
191 }
192 }
193 /// <summary>
194 ///
195 /// </summary>
196 public SubType SubType
197 {
198 get
199 {
200 if (m_SubType != null)
201 return m_SubType.Value;
202 else
203 return GetSubTypeByFileName(this.Path);
204 }
205 }
206
207 /// <summary>
208 ///
209 /// </summary>
210 public bool IsValid
211 {
212 get
213 {
214 return m_Valid;
215 }
216 }
217
218 /// <summary>
219 ///
220 /// </summary>
221 /// <param name="file"></param>
222 /// <returns></returns>
223 public bool PreservePath
224 {
225 get
226 {
227 return m_PreservePath;
228 }
229 }
230
231 #endregion
232
233 #region Public Methods
234
235 /// <summary>
236 ///
237 /// </summary>
238 /// <param name="node"></param>
239 public override void Parse(XmlNode node)
240 {
241 string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
242 if (buildAction != string.Empty)
243 m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
244 string subType = Helper.AttributeValue(node, "subType", string.Empty);
245 if (subType != String.Empty)
246 m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
247
248 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString());
249 this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
250 if ( this.m_Link == true )
251 {
252 this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
253 }
254 this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString()));
255 this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) );
256
257 if( node == null )
258 {
259 throw new ArgumentNullException("node");
260 }
261
262 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
263 if(m_Path == null)
264 {
265 m_Path = "";
266 }
267
268 m_Path = m_Path.Trim();
269 m_Valid = true;
270 if(!File.Exists(m_Path))
271 {
272 m_Valid = false;
273 Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path);
274 }
275
276 if (System.IO.Path.GetExtension(m_Path) == ".settings")
277 {
278 m_SubType = SubType.Settings;
279 m_BuildAction = BuildAction.None;
280 }
281 }
282
283 #endregion
284 }
285}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/FilesNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/FilesNode.cs.svn-base
deleted file mode 100644
index 23a716c..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/FilesNode.cs.svn-base
+++ /dev/null
@@ -1,204 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using System.IO;
33
34namespace Prebuild.Core.Nodes
35{
36 /// <summary>
37 ///
38 /// </summary>
39 [DataNode("Files")]
40 public class FilesNode : DataNode
41 {
42 #region Fields
43
44 private readonly List<string> m_Files = new List<string>();
45 private readonly Dictionary<string,BuildAction> m_BuildActions = new Dictionary<string, BuildAction>();
46 private readonly Dictionary<string, SubType> m_SubTypes = new Dictionary<string, SubType>();
47 private readonly Dictionary<string, string> m_ResourceNames = new Dictionary<string, string>();
48 private readonly Dictionary<string, CopyToOutput> m_CopyToOutputs = new Dictionary<string, CopyToOutput>();
49 private readonly Dictionary<string, bool> m_Links = new Dictionary<string, bool>();
50 private readonly Dictionary<string, string> m_LinkPaths = new Dictionary<string, string>();
51 private readonly Dictionary<string, bool> m_PreservePaths = new Dictionary<string, bool>();
52
53 #endregion
54
55 #region Properties
56
57 public int Count
58 {
59 get
60 {
61 return m_Files.Count;
62 }
63 }
64
65 #endregion
66
67 #region Public Methods
68
69 public BuildAction GetBuildAction(string file)
70 {
71 if(!m_BuildActions.ContainsKey(file))
72 {
73 return BuildAction.Compile;
74 }
75
76 return m_BuildActions[file];
77 }
78
79 public CopyToOutput GetCopyToOutput(string file)
80 {
81 if (!m_CopyToOutputs.ContainsKey(file))
82 {
83 return CopyToOutput.Never;
84 }
85 return m_CopyToOutputs[file];
86 }
87
88 public bool GetIsLink(string file)
89 {
90 if (!m_Links.ContainsKey(file))
91 {
92 return false;
93 }
94 return m_Links[file];
95 }
96
97 public bool Contains(string file)
98 {
99 return m_Files.Contains(file);
100 }
101
102 public string GetLinkPath( string file )
103 {
104 if ( !m_LinkPaths.ContainsKey( file ) )
105 {
106 return string.Empty;
107 }
108 return m_LinkPaths[ file ];
109 }
110
111 public SubType GetSubType(string file)
112 {
113 if(!m_SubTypes.ContainsKey(file))
114 {
115 return SubType.Code;
116 }
117
118 return m_SubTypes[file];
119 }
120
121 public string GetResourceName(string file)
122 {
123 if(!m_ResourceNames.ContainsKey(file))
124 {
125 return string.Empty;
126 }
127
128 return m_ResourceNames[file];
129 }
130
131 public bool GetPreservePath( string file )
132 {
133 if ( !m_PreservePaths.ContainsKey( file ) )
134 {
135 return false;
136 }
137
138 return m_PreservePaths[ file ];
139 }
140
141 public override void Parse(XmlNode node)
142 {
143 if( node == null )
144 {
145 throw new ArgumentNullException("node");
146 }
147 foreach(XmlNode child in node.ChildNodes)
148 {
149 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
150 if(dataNode is FileNode)
151 {
152 FileNode fileNode = (FileNode)dataNode;
153 if(fileNode.IsValid)
154 {
155 if (!m_Files.Contains(fileNode.Path))
156 {
157 m_Files.Add(fileNode.Path);
158 m_BuildActions[fileNode.Path] = fileNode.BuildAction;
159 m_SubTypes[fileNode.Path] = fileNode.SubType;
160 m_ResourceNames[fileNode.Path] = fileNode.ResourceName;
161 m_PreservePaths[ fileNode.Path ] = fileNode.PreservePath;
162 m_Links[ fileNode.Path ] = fileNode.IsLink;
163 m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath;
164 m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput;
165
166 }
167 }
168 }
169 else if(dataNode is MatchNode)
170 {
171 foreach(string file in ((MatchNode)dataNode).Files)
172 {
173 MatchNode matchNode = (MatchNode)dataNode;
174 if (!m_Files.Contains(file))
175 {
176 m_Files.Add(file);
177 if (matchNode.BuildAction == null)
178 m_BuildActions[file] = GetBuildActionByFileName(file);
179 else
180 m_BuildActions[file] = matchNode.BuildAction.Value;
181 m_SubTypes[file] = matchNode.SubType == null ? GetSubTypeByFileName(file) : matchNode.SubType.Value;
182 m_ResourceNames[ file ] = matchNode.ResourceName;
183 m_PreservePaths[ file ] = matchNode.PreservePath;
184 m_Links[ file ] = matchNode.IsLink;
185 m_LinkPaths[ file ] = matchNode.LinkPath;
186 m_CopyToOutputs[ file ] = matchNode.CopyToOutput;
187
188 }
189 }
190 }
191 }
192 }
193
194 // TODO: Check in to why StringCollection's enumerator doesn't implement
195 // IEnumerator?
196 public IEnumerator<string> GetEnumerator()
197 {
198 return m_Files.GetEnumerator();
199 }
200
201 #endregion
202
203 }
204}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/MatchNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/MatchNode.cs.svn-base
deleted file mode 100644
index 9735265..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/MatchNode.cs.svn-base
+++ /dev/null
@@ -1,367 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29using System.Text.RegularExpressions;
30using System.Xml;
31
32using Prebuild.Core.Attributes;
33using Prebuild.Core.Interfaces;
34using Prebuild.Core.Utilities;
35
36namespace Prebuild.Core.Nodes
37{
38 /// <summary>
39 ///
40 /// </summary>
41 [DataNode("Match")]
42 public class MatchNode : DataNode
43 {
44 #region Fields
45
46 private readonly List<string> m_Files = new List<string>();
47 private Regex m_Regex;
48 private BuildAction? m_BuildAction;
49 private SubType? m_SubType;
50 string m_ResourceName = "";
51 private CopyToOutput m_CopyToOutput;
52 private bool m_Link;
53 private string m_LinkPath;
54 private bool m_PreservePath;
55 private readonly List<ExcludeNode> m_Exclusions = new List<ExcludeNode>();
56
57 #endregion
58
59 #region Properties
60
61 /// <summary>
62 ///
63 /// </summary>
64 public IEnumerable<string> Files
65 {
66 get
67 {
68 return m_Files;
69 }
70 }
71
72 /// <summary>
73 ///
74 /// </summary>
75 public BuildAction? BuildAction
76 {
77 get
78 {
79 return m_BuildAction;
80 }
81 }
82
83 /// <summary>
84 ///
85 /// </summary>
86 public SubType? SubType
87 {
88 get
89 {
90 return m_SubType;
91 }
92 }
93
94 public CopyToOutput CopyToOutput
95 {
96 get
97 {
98 return m_CopyToOutput;
99 }
100 }
101
102 public bool IsLink
103 {
104 get
105 {
106 return m_Link;
107 }
108 }
109
110 public string LinkPath
111 {
112 get
113 {
114 return m_LinkPath;
115 }
116 }
117 /// <summary>
118 ///
119 /// </summary>
120 public string ResourceName
121 {
122 get
123 {
124 return m_ResourceName;
125 }
126 }
127
128 public bool PreservePath
129 {
130 get
131 {
132 return m_PreservePath;
133 }
134 }
135
136 #endregion
137
138 #region Private Methods
139
140 /// <summary>
141 /// Recurses the directories.
142 /// </summary>
143 /// <param name="path">The path.</param>
144 /// <param name="pattern">The pattern.</param>
145 /// <param name="recurse">if set to <c>true</c> [recurse].</param>
146 /// <param name="useRegex">if set to <c>true</c> [use regex].</param>
147 private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, List<ExcludeNode> exclusions)
148 {
149 Match match;
150 try
151 {
152 string[] files;
153
154 Boolean excludeFile;
155 if(!useRegex)
156 {
157 try
158 {
159 files = Directory.GetFiles(path, pattern);
160 }
161 catch (IOException)
162 {
163 // swallow weird IOException error when running in a virtual box
164 // guest OS on a network share when the host OS is not Windows.
165 // This seems to happen on network shares
166 // when no files match, and may be related to this report:
167 // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=254546
168
169 files = null;
170 }
171
172 if(files != null)
173 {
174 foreach (string file in files)
175 {
176 excludeFile = false;
177 string fileTemp;
178 if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\")
179 {
180 fileTemp = file.Substring(2);
181 }
182 else
183 {
184 fileTemp = file;
185 }
186
187 // Check all excludions and set flag if there are any hits.
188 foreach ( ExcludeNode exclude in exclusions )
189 {
190 Regex exRegEx = new Regex( exclude.Pattern );
191 match = exRegEx.Match( file );
192 excludeFile |= match.Success;
193 }
194
195 if ( !excludeFile )
196 {
197 m_Files.Add( fileTemp );
198 }
199
200 }
201 }
202
203 // don't call return here, because we may need to recursively search directories below
204 // this one, even if no matches were found in this directory.
205 }
206 else
207 {
208 try
209 {
210 files = Directory.GetFiles(path);
211 }
212 catch (IOException)
213 {
214 // swallow weird IOException error when running in a virtual box
215 // guest OS on a network share.
216 files = null;
217 }
218
219 if (files != null)
220 {
221 foreach (string file in files)
222 {
223 excludeFile = false;
224
225 match = m_Regex.Match(file);
226 if (match.Success)
227 {
228 // Check all excludions and set flag if there are any hits.
229 foreach (ExcludeNode exclude in exclusions)
230 {
231 Regex exRegEx = new Regex(exclude.Pattern);
232 match = exRegEx.Match(file);
233 excludeFile |= !match.Success;
234 }
235
236 if (!excludeFile)
237 {
238 m_Files.Add(file);
239 }
240 }
241 }
242 }
243 }
244
245 if(recurse)
246 {
247 string[] dirs = Directory.GetDirectories(path);
248 if(dirs != null && dirs.Length > 0)
249 {
250 foreach (string str in dirs)
251 {
252 // hack to skip subversion folders. Not having this can cause
253 // a significant performance hit when running on a network drive.
254 if (str.EndsWith(".svn"))
255 continue;
256
257 RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex, exclusions);
258 }
259 }
260 }
261 }
262 catch(DirectoryNotFoundException)
263 {
264 return;
265 }
266 catch(ArgumentException)
267 {
268 return;
269 }
270 }
271
272 #endregion
273
274 #region Public Methods
275
276 /// <summary>
277 ///
278 /// </summary>
279 /// <param name="node"></param>
280 public override void Parse(XmlNode node)
281 {
282 if( node == null )
283 {
284 throw new ArgumentNullException("node");
285 }
286 string path = Helper.AttributeValue(node, "path", ".");
287 string pattern = Helper.AttributeValue(node, "pattern", "*");
288 bool recurse = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "recurse", "false"));
289 bool useRegex = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "useRegex", "false"));
290 string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
291 if (buildAction != string.Empty)
292 m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
293
294 //TODO: Figure out where the subtype node is being assigned
295 //string subType = Helper.AttributeValue(node, "subType", string.Empty);
296 //if (subType != String.Empty)
297 // m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
298 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName);
299 m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", m_CopyToOutput.ToString()));
300 m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
301 if ( m_Link )
302 {
303 m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
304 }
305 m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) );
306
307
308 if(path != null && path.Length == 0)
309 {
310 path = ".";//use current directory
311 }
312 //throw new WarningException("Match must have a 'path' attribute");
313
314 if(pattern == null)
315 {
316 throw new WarningException("Match must have a 'pattern' attribute");
317 }
318
319 path = Helper.NormalizePath(path);
320 if(!Directory.Exists(path))
321 {
322 throw new WarningException("Match path does not exist: {0}", path);
323 }
324
325 try
326 {
327 if(useRegex)
328 {
329 m_Regex = new Regex(pattern);
330 }
331 }
332 catch(ArgumentException ex)
333 {
334 throw new WarningException("Could not compile regex pattern: {0}", ex.Message);
335 }
336
337
338 foreach(XmlNode child in node.ChildNodes)
339 {
340 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
341 if(dataNode is ExcludeNode)
342 {
343 ExcludeNode excludeNode = (ExcludeNode)dataNode;
344 m_Exclusions.Add( excludeNode );
345 }
346 }
347
348 RecurseDirectories( path, pattern, recurse, useRegex, m_Exclusions );
349
350 if (m_Files.Count < 1)
351 {
352 // Include the project name when the match node returns no matches to provide extra
353 // debug info.
354 ProjectNode project = Parent.Parent as ProjectNode;
355 string projectName = "";
356
357 if (project != null)
358 projectName = " in project " + project.AssemblyName;
359
360 throw new WarningException("Match" + projectName + " returned no files: {0}{1}", Helper.EndPath(path), pattern);
361 }
362 m_Regex = null;
363 }
364
365 #endregion
366 }
367}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/OptionsNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/OptionsNode.cs.svn-base
deleted file mode 100644
index 577de71..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/OptionsNode.cs.svn-base
+++ /dev/null
@@ -1,634 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Reflection;
29using System.Xml;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [DataNode("Options")]
41 public class OptionsNode : DataNode
42 {
43 #region Fields
44
45 private static readonly Dictionary<string,FieldInfo> m_OptionFields = new Dictionary<string, FieldInfo>();
46
47 [OptionNode("CompilerDefines")]
48 private string m_CompilerDefines = "";
49
50 /// <summary>
51 ///
52 /// </summary>
53 public string CompilerDefines
54 {
55 get
56 {
57 return m_CompilerDefines;
58 }
59 set
60 {
61 m_CompilerDefines = value;
62 }
63 }
64
65 [OptionNode("OptimizeCode")]
66 private bool m_OptimizeCode;
67
68 /// <summary>
69 ///
70 /// </summary>
71 public bool OptimizeCode
72 {
73 get
74 {
75 return m_OptimizeCode;
76 }
77 set
78 {
79 m_OptimizeCode = value;
80 }
81 }
82
83 [OptionNode("CheckUnderflowOverflow")]
84 private bool m_CheckUnderflowOverflow;
85
86 /// <summary>
87 ///
88 /// </summary>
89 public bool CheckUnderflowOverflow
90 {
91 get
92 {
93 return m_CheckUnderflowOverflow;
94 }
95 set
96 {
97 m_CheckUnderflowOverflow = value;
98 }
99 }
100
101 [OptionNode("AllowUnsafe")]
102 private bool m_AllowUnsafe;
103
104 /// <summary>
105 ///
106 /// </summary>
107 public bool AllowUnsafe
108 {
109 get
110 {
111 return m_AllowUnsafe;
112 }
113 set
114 {
115 m_AllowUnsafe = value;
116 }
117 }
118
119 [OptionNode("PreBuildEvent")]
120 private string m_PreBuildEvent;
121
122 /// <summary>
123 ///
124 /// </summary>
125 public string PreBuildEvent
126 {
127 get
128 {
129 return m_PreBuildEvent;
130 }
131 set
132 {
133 m_PreBuildEvent = value;
134 }
135 }
136
137 [OptionNode("PostBuildEvent")]
138 private string m_PostBuildEvent;
139
140 /// <summary>
141 ///
142 /// </summary>
143 public string PostBuildEvent
144 {
145 get
146 {
147 return m_PostBuildEvent;
148 }
149 set
150 {
151 m_PostBuildEvent = value;
152 }
153 }
154
155 [OptionNode("PreBuildEventArgs")]
156 private string m_PreBuildEventArgs;
157
158 /// <summary>
159 ///
160 /// </summary>
161 public string PreBuildEventArgs
162 {
163 get
164 {
165 return m_PreBuildEventArgs;
166 }
167 set
168 {
169 m_PreBuildEventArgs = value;
170 }
171 }
172
173 [OptionNode("PostBuildEventArgs")]
174 private string m_PostBuildEventArgs;
175
176 /// <summary>
177 ///
178 /// </summary>
179 public string PostBuildEventArgs
180 {
181 get
182 {
183 return m_PostBuildEventArgs;
184 }
185 set
186 {
187 m_PostBuildEventArgs = value;
188 }
189 }
190
191 [OptionNode("RunPostBuildEvent")]
192 private string m_RunPostBuildEvent;
193
194 /// <summary>
195 ///
196 /// </summary>
197 public string RunPostBuildEvent
198 {
199 get
200 {
201 return m_RunPostBuildEvent;
202 }
203 set
204 {
205 m_RunPostBuildEvent = value;
206 }
207 }
208
209 [OptionNode("RunScript")]
210 private string m_RunScript;
211
212 /// <summary>
213 ///
214 /// </summary>
215 public string RunScript
216 {
217 get
218 {
219 return m_RunScript;
220 }
221 set
222 {
223 m_RunScript = value;
224 }
225 }
226
227 [OptionNode("WarningLevel")]
228 private int m_WarningLevel = 4;
229
230 /// <summary>
231 ///
232 /// </summary>
233 public int WarningLevel
234 {
235 get
236 {
237 return m_WarningLevel;
238 }
239 set
240 {
241 m_WarningLevel = value;
242 }
243 }
244
245 [OptionNode("WarningsAsErrors")]
246 private bool m_WarningsAsErrors;
247
248 /// <summary>
249 ///
250 /// </summary>
251 public bool WarningsAsErrors
252 {
253 get
254 {
255 return m_WarningsAsErrors;
256 }
257 set
258 {
259 m_WarningsAsErrors = value;
260 }
261 }
262
263 [OptionNode("SuppressWarnings")]
264 private string m_SuppressWarnings = "";
265
266 /// <summary>
267 ///
268 /// </summary>
269 public string SuppressWarnings
270 {
271 get
272 {
273 return m_SuppressWarnings;
274 }
275 set
276 {
277 m_SuppressWarnings = value;
278 }
279 }
280
281 [OptionNode("OutputPath")]
282 private string m_OutputPath = "bin/";
283
284 /// <summary>
285 ///
286 /// </summary>
287 public string OutputPath
288 {
289 get
290 {
291 return m_OutputPath;
292 }
293 set
294 {
295 m_OutputPath = value;
296 }
297 }
298
299 [OptionNode("GenerateDocumentation")]
300 private bool m_GenerateDocumentation;
301
302 /// <summary>
303 ///
304 /// </summary>
305 public bool GenerateDocumentation
306 {
307 get
308 {
309 return m_GenerateDocumentation;
310 }
311 set
312 {
313 m_GenerateDocumentation = value;
314 }
315 }
316
317 [OptionNode("GenerateXmlDocFile")]
318 private bool m_GenerateXmlDocFile;
319
320 /// <summary>
321 ///
322 /// </summary>
323 public bool GenerateXmlDocFile
324 {
325 get
326 {
327 return m_GenerateXmlDocFile;
328 }
329 set
330 {
331 m_GenerateXmlDocFile = value;
332 }
333 }
334
335 [OptionNode("XmlDocFile")]
336 private string m_XmlDocFile = "";
337
338 /// <summary>
339 ///
340 /// </summary>
341 public string XmlDocFile
342 {
343 get
344 {
345 return m_XmlDocFile;
346 }
347 set
348 {
349 m_XmlDocFile = value;
350 }
351 }
352
353 [OptionNode("KeyFile")]
354 private string m_KeyFile = "";
355
356 /// <summary>
357 ///
358 /// </summary>
359 public string KeyFile
360 {
361 get
362 {
363 return m_KeyFile;
364 }
365 set
366 {
367 m_KeyFile = value;
368 }
369 }
370
371 [OptionNode("DebugInformation")]
372 private bool m_DebugInformation;
373
374 /// <summary>
375 ///
376 /// </summary>
377 public bool DebugInformation
378 {
379 get
380 {
381 return m_DebugInformation;
382 }
383 set
384 {
385 m_DebugInformation = value;
386 }
387 }
388
389 [OptionNode("RegisterComInterop")]
390 private bool m_RegisterComInterop;
391
392 /// <summary>
393 ///
394 /// </summary>
395 public bool RegisterComInterop
396 {
397 get
398 {
399 return m_RegisterComInterop;
400 }
401 set
402 {
403 m_RegisterComInterop = value;
404 }
405 }
406
407 [OptionNode("RemoveIntegerChecks")]
408 private bool m_RemoveIntegerChecks;
409
410 /// <summary>
411 ///
412 /// </summary>
413 public bool RemoveIntegerChecks
414 {
415 get
416 {
417 return m_RemoveIntegerChecks;
418 }
419 set
420 {
421 m_RemoveIntegerChecks = value;
422 }
423 }
424
425 [OptionNode("IncrementalBuild")]
426 private bool m_IncrementalBuild;
427
428 /// <summary>
429 ///
430 /// </summary>
431 public bool IncrementalBuild
432 {
433 get
434 {
435 return m_IncrementalBuild;
436 }
437 set
438 {
439 m_IncrementalBuild = value;
440 }
441 }
442
443 [OptionNode("BaseAddress")]
444 private string m_BaseAddress = "285212672";
445
446 /// <summary>
447 ///
448 /// </summary>
449 public string BaseAddress
450 {
451 get
452 {
453 return m_BaseAddress;
454 }
455 set
456 {
457 m_BaseAddress = value;
458 }
459 }
460
461 [OptionNode("FileAlignment")]
462 private int m_FileAlignment = 4096;
463
464 /// <summary>
465 ///
466 /// </summary>
467 public int FileAlignment
468 {
469 get
470 {
471 return m_FileAlignment;
472 }
473 set
474 {
475 m_FileAlignment = value;
476 }
477 }
478
479 [OptionNode("NoStdLib")]
480 private bool m_NoStdLib;
481
482 /// <summary>
483 ///
484 /// </summary>
485 public bool NoStdLib
486 {
487 get
488 {
489 return m_NoStdLib;
490 }
491 set
492 {
493 m_NoStdLib = value;
494 }
495 }
496
497 private readonly List<string> m_FieldsDefined = new List<string>();
498
499 #endregion
500
501 #region Constructors
502
503 /// <summary>
504 /// Initializes the <see cref="OptionsNode"/> class.
505 /// </summary>
506 static OptionsNode()
507 {
508 Type t = typeof(OptionsNode);
509
510 foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
511 {
512 object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false);
513 if(attrs == null || attrs.Length < 1)
514 {
515 continue;
516 }
517
518 OptionNodeAttribute ona = (OptionNodeAttribute)attrs[0];
519 m_OptionFields[ona.NodeName] = f;
520 }
521 }
522
523 #endregion
524
525 #region Properties
526
527 /// <summary>
528 /// Gets the <see cref="Object"/> at the specified index.
529 /// </summary>
530 /// <value></value>
531 public object this[string index]
532 {
533 get
534 {
535 if(!m_OptionFields.ContainsKey(index))
536 {
537 return null;
538 }
539
540 FieldInfo f = m_OptionFields[index];
541 return f.GetValue(this);
542 }
543 }
544
545 /// <summary>
546 /// Gets the <see cref="Object"/> at the specified index.
547 /// </summary>
548 /// <value></value>
549 public object this[string index, object defaultValue]
550 {
551 get
552 {
553 object valueObject = this[index];
554 if(valueObject != null && valueObject is string && ((string)valueObject).Length == 0)
555 {
556 return defaultValue;
557 }
558 return valueObject;
559 }
560 }
561
562
563 #endregion
564
565 #region Private Methods
566
567 private void FlagDefined(string name)
568 {
569 if(!m_FieldsDefined.Contains(name))
570 {
571 m_FieldsDefined.Add(name);
572 }
573 }
574
575 private void SetOption(string nodeName, string val)
576 {
577 lock(m_OptionFields)
578 {
579 if(!m_OptionFields.ContainsKey(nodeName))
580 {
581 return;
582 }
583
584 FieldInfo f = m_OptionFields[nodeName];
585 f.SetValue(this, Helper.TranslateValue(f.FieldType, val));
586 FlagDefined(f.Name);
587 }
588 }
589
590 #endregion
591
592 #region Public Methods
593
594 /// <summary>
595 /// Parses the specified node.
596 /// </summary>
597 /// <param name="node">The node.</param>
598 public override void Parse(XmlNode node)
599 {
600 if( node == null )
601 {
602 throw new ArgumentNullException("node");
603 }
604
605 foreach(XmlNode child in node.ChildNodes)
606 {
607 SetOption(child.Name, Helper.InterpolateForEnvironmentVariables(child.InnerText));
608 }
609 }
610
611 /// <summary>
612 /// Copies to.
613 /// </summary>
614 /// <param name="opt">The opt.</param>
615 public void CopyTo(OptionsNode opt)
616 {
617 if(opt == null)
618 {
619 return;
620 }
621
622 foreach(FieldInfo f in m_OptionFields.Values)
623 {
624 if(m_FieldsDefined.Contains(f.Name))
625 {
626 f.SetValue(opt, f.GetValue(this));
627 opt.m_FieldsDefined.Add(f.Name);
628 }
629 }
630 }
631
632 #endregion
633 }
634}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/ProcessNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/ProcessNode.cs.svn-base
deleted file mode 100644
index 8ca8e49..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/ProcessNode.cs.svn-base
+++ /dev/null
@@ -1,108 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Process")]
39 public class ProcessNode : DataNode
40 {
41 #region Fields
42
43 private string m_Path;
44 private bool m_IsValid = true;
45
46 #endregion
47
48 #region Properties
49
50 /// <summary>
51 /// Gets the path.
52 /// </summary>
53 /// <value>The path.</value>
54 public string Path
55 {
56 get
57 {
58 return m_Path;
59 }
60 }
61
62 /// <summary>
63 /// Gets a value indicating whether this instance is valid.
64 /// </summary>
65 /// <value><c>true</c> if this instance is valid; otherwise, <c>false</c>.</value>
66 public bool IsValid
67 {
68 get
69 {
70 return m_IsValid;
71 }
72 }
73
74 #endregion
75
76 #region Public Methods
77
78 /// <summary>
79 /// Parses the specified node.
80 /// </summary>
81 /// <param name="node">The node.</param>
82 public override void Parse(XmlNode node)
83 {
84 if( node == null )
85 {
86 throw new ArgumentNullException("node");
87 }
88
89 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
90 if(m_Path == null)
91 {
92 m_Path = "";
93 }
94
95 try
96 {
97 m_Path = Helper.ResolvePath(m_Path);
98 }
99 catch(ArgumentException)
100 {
101 Kernel.Instance.Log.Write(LogType.Warning, "Could not find prebuild file for processing: {0}", m_Path);
102 m_IsValid = false;
103 }
104 }
105
106 #endregion
107 }
108}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/ProjectNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/ProjectNode.cs.svn-base
deleted file mode 100644
index fb92b32..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/ProjectNode.cs.svn-base
+++ /dev/null
@@ -1,579 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29using System.Xml;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 /// A set of values that the Project's type can be
39 /// </summary>
40 public enum ProjectType
41 {
42 /// <summary>
43 /// The project is a console executable
44 /// </summary>
45 Exe,
46 /// <summary>
47 /// The project is a windows executable
48 /// </summary>
49 WinExe,
50 /// <summary>
51 /// The project is a library
52 /// </summary>
53 Library,
54 /// <summary>
55 /// The project is a website
56 /// </summary>
57 Web,
58 }
59
60 /// <summary>
61 ///
62 /// </summary>
63 public enum ClrRuntime
64 {
65 /// <summary>
66 ///
67 /// </summary>
68 Microsoft,
69 /// <summary>
70 ///
71 /// </summary>
72 Mono
73 }
74 /// <summary>
75 /// The version of the .NET framework to use (Required for VS2008)
76 /// <remarks>We don't need .NET 1.1 in here, it'll default when using vs2003.</remarks>
77 /// </summary>
78 public enum FrameworkVersion
79 {
80 /// <summary>
81 /// .NET 2.0
82 /// </summary>
83 v2_0,
84 /// <summary>
85 /// .NET 3.0
86 /// </summary>
87 v3_0,
88 /// <summary>
89 /// .NET 3.5
90 /// </summary>
91 v3_5,
92 /// <summary>
93 /// .NET 4.0
94 /// </summary>
95 v4_0,
96 }
97 /// <summary>
98 /// The Node object representing /Prebuild/Solution/Project elements
99 /// </summary>
100 [DataNode("Project")]
101 public class ProjectNode : DataNode, IComparable
102 {
103 #region Fields
104
105 private string m_Name = "unknown";
106 private string m_Path = "";
107 private string m_FullPath = "";
108 private string m_AssemblyName;
109 private string m_AppIcon = "";
110 private string m_ConfigFile = "";
111 private string m_DesignerFolder = "";
112 private string m_Language = "C#";
113 private ProjectType m_Type = ProjectType.Exe;
114 private ClrRuntime m_Runtime = ClrRuntime.Microsoft;
115 private FrameworkVersion m_Framework = FrameworkVersion.v2_0;
116 private string m_StartupObject = "";
117 private string m_RootNamespace;
118 private string m_FilterGroups = "";
119 private string m_Version = "";
120 private Guid m_Guid;
121 private string m_DebugStartParameters;
122
123 private readonly Dictionary<string, ConfigurationNode> m_Configurations = new Dictionary<string, ConfigurationNode>();
124 private readonly List<ReferencePathNode> m_ReferencePaths = new List<ReferencePathNode>();
125 private readonly List<ReferenceNode> m_References = new List<ReferenceNode>();
126 private readonly List<AuthorNode> m_Authors = new List<AuthorNode>();
127 private FilesNode m_Files;
128
129 #endregion
130
131 #region Properties
132
133 /// <summary>
134 /// Gets the name.
135 /// </summary>
136 /// <value>The name.</value>
137 public string Name
138 {
139 get
140 {
141 return m_Name;
142 }
143 }
144 /// <summary>
145 /// The version of the .NET Framework to compile under
146 /// </summary>
147 public FrameworkVersion FrameworkVersion
148 {
149 get
150 {
151 return m_Framework;
152 }
153 }
154 /// <summary>
155 /// Gets the path.
156 /// </summary>
157 /// <value>The path.</value>
158 public string Path
159 {
160 get
161 {
162 return m_Path;
163 }
164 }
165
166 /// <summary>
167 /// Gets the filter groups.
168 /// </summary>
169 /// <value>The filter groups.</value>
170 public string FilterGroups
171 {
172 get
173 {
174 return m_FilterGroups;
175 }
176 }
177
178 /// <summary>
179 /// Gets the project's version
180 /// </summary>
181 /// <value>The project's version.</value>
182 public string Version
183 {
184 get
185 {
186 return m_Version;
187 }
188 }
189
190 /// <summary>
191 /// Gets the full path.
192 /// </summary>
193 /// <value>The full path.</value>
194 public string FullPath
195 {
196 get
197 {
198 return m_FullPath;
199 }
200 }
201
202 /// <summary>
203 /// Gets the name of the assembly.
204 /// </summary>
205 /// <value>The name of the assembly.</value>
206 public string AssemblyName
207 {
208 get
209 {
210 return m_AssemblyName;
211 }
212 }
213
214 /// <summary>
215 /// Gets the app icon.
216 /// </summary>
217 /// <value>The app icon.</value>
218 public string AppIcon
219 {
220 get
221 {
222 return m_AppIcon;
223 }
224 }
225
226 /// <summary>
227 /// Gets the app icon.
228 /// </summary>
229 /// <value>The app icon.</value>
230 public string ConfigFile
231 {
232 get
233 {
234 return m_ConfigFile;
235 }
236 }
237
238 /// <summary>
239 ///
240 /// </summary>
241 public string DesignerFolder
242 {
243 get
244 {
245 return m_DesignerFolder;
246 }
247 }
248
249 /// <summary>
250 /// Gets the language.
251 /// </summary>
252 /// <value>The language.</value>
253 public string Language
254 {
255 get
256 {
257 return m_Language;
258 }
259 }
260
261 /// <summary>
262 /// Gets the type.
263 /// </summary>
264 /// <value>The type.</value>
265 public ProjectType Type
266 {
267 get
268 {
269 return m_Type;
270 }
271 }
272
273 /// <summary>
274 /// Gets the runtime.
275 /// </summary>
276 /// <value>The runtime.</value>
277 public ClrRuntime Runtime
278 {
279 get
280 {
281 return m_Runtime;
282 }
283 }
284
285 private bool m_GenerateAssemblyInfoFile;
286
287 /// <summary>
288 ///
289 /// </summary>
290 public bool GenerateAssemblyInfoFile
291 {
292 get
293 {
294 return m_GenerateAssemblyInfoFile;
295 }
296 set
297 {
298 m_GenerateAssemblyInfoFile = value;
299 }
300 }
301
302 /// <summary>
303 /// Gets the startup object.
304 /// </summary>
305 /// <value>The startup object.</value>
306 public string StartupObject
307 {
308 get
309 {
310 return m_StartupObject;
311 }
312 }
313
314 /// <summary>
315 /// Gets the root namespace.
316 /// </summary>
317 /// <value>The root namespace.</value>
318 public string RootNamespace
319 {
320 get
321 {
322 return m_RootNamespace;
323 }
324 }
325
326 /// <summary>
327 /// Gets the configurations.
328 /// </summary>
329 /// <value>The configurations.</value>
330 public List<ConfigurationNode> Configurations
331 {
332 get
333 {
334 List<ConfigurationNode> tmp = new List<ConfigurationNode>(ConfigurationsTable.Values);
335 tmp.Sort();
336 return tmp;
337 }
338 }
339
340 /// <summary>
341 /// Gets the configurations table.
342 /// </summary>
343 /// <value>The configurations table.</value>
344 public Dictionary<string, ConfigurationNode> ConfigurationsTable
345 {
346 get
347 {
348 return m_Configurations;
349 }
350 }
351
352 /// <summary>
353 /// Gets the reference paths.
354 /// </summary>
355 /// <value>The reference paths.</value>
356 public List<ReferencePathNode> ReferencePaths
357 {
358 get
359 {
360 List<ReferencePathNode> tmp = new List<ReferencePathNode>(m_ReferencePaths);
361 tmp.Sort();
362 return tmp;
363 }
364 }
365
366 /// <summary>
367 /// Gets the references.
368 /// </summary>
369 /// <value>The references.</value>
370 public List<ReferenceNode> References
371 {
372 get
373 {
374 List<ReferenceNode> tmp = new List<ReferenceNode>(m_References);
375 tmp.Sort();
376 return tmp;
377 }
378 }
379
380 /// <summary>
381 /// Gets the Authors list.
382 /// </summary>
383 /// <value>The list of the project's authors.</value>
384 public List<AuthorNode> Authors
385 {
386 get
387 {
388 return m_Authors;
389 }
390 }
391
392 /// <summary>
393 /// Gets the files.
394 /// </summary>
395 /// <value>The files.</value>
396 public FilesNode Files
397 {
398 get
399 {
400 return m_Files;
401 }
402 }
403
404 /// <summary>
405 /// Gets or sets the parent.
406 /// </summary>
407 /// <value>The parent.</value>
408 public override IDataNode Parent
409 {
410 get
411 {
412 return base.Parent;
413 }
414 set
415 {
416 base.Parent = value;
417 if(base.Parent is SolutionNode && m_Configurations.Count < 1)
418 {
419 SolutionNode parent = (SolutionNode)base.Parent;
420 foreach(ConfigurationNode conf in parent.Configurations)
421 {
422 m_Configurations[conf.NameAndPlatform] = (ConfigurationNode) conf.Clone();
423 }
424 }
425 }
426 }
427
428 /// <summary>
429 /// Gets the GUID.
430 /// </summary>
431 /// <value>The GUID.</value>
432 public Guid Guid
433 {
434 get
435 {
436 return m_Guid;
437 }
438 }
439
440 public string DebugStartParameters
441 {
442 get
443 {
444 return m_DebugStartParameters;
445 }
446 }
447
448 #endregion
449
450 #region Private Methods
451
452 private void HandleConfiguration(ConfigurationNode conf)
453 {
454 if(String.Compare(conf.Name, "all", true) == 0) //apply changes to all, this may not always be applied first,
455 //so it *may* override changes to the same properties for configurations defines at the project level
456 {
457 foreach(ConfigurationNode confNode in m_Configurations.Values)
458 {
459 conf.CopyTo(confNode);//update the config templates defines at the project level with the overrides
460 }
461 }
462 if(m_Configurations.ContainsKey(conf.NameAndPlatform))
463 {
464 ConfigurationNode parentConf = m_Configurations[conf.NameAndPlatform];
465 conf.CopyTo(parentConf);//update the config templates defines at the project level with the overrides
466 }
467 else
468 {
469 m_Configurations[conf.NameAndPlatform] = conf;
470 }
471 }
472
473 #endregion
474
475 #region Public Methods
476
477 /// <summary>
478 /// Parses the specified node.
479 /// </summary>
480 /// <param name="node">The node.</param>
481 public override void Parse(XmlNode node)
482 {
483 m_Name = Helper.AttributeValue(node, "name", m_Name);
484 m_Path = Helper.AttributeValue(node, "path", m_Path);
485 m_FilterGroups = Helper.AttributeValue(node, "filterGroups", m_FilterGroups);
486 m_Version = Helper.AttributeValue(node, "version", m_Version);
487 m_AppIcon = Helper.AttributeValue(node, "icon", m_AppIcon);
488 m_ConfigFile = Helper.AttributeValue(node, "configFile", m_ConfigFile);
489 m_DesignerFolder = Helper.AttributeValue(node, "designerFolder", m_DesignerFolder);
490 m_AssemblyName = Helper.AttributeValue(node, "assemblyName", m_AssemblyName);
491 m_Language = Helper.AttributeValue(node, "language", m_Language);
492 m_Type = (ProjectType)Helper.EnumAttributeValue(node, "type", typeof(ProjectType), m_Type);
493 m_Runtime = (ClrRuntime)Helper.EnumAttributeValue(node, "runtime", typeof(ClrRuntime), m_Runtime);
494 m_Framework = (FrameworkVersion)Helper.EnumAttributeValue(node, "frameworkVersion", typeof(FrameworkVersion), m_Framework);
495 m_StartupObject = Helper.AttributeValue(node, "startupObject", m_StartupObject);
496 m_RootNamespace = Helper.AttributeValue(node, "rootNamespace", m_RootNamespace);
497
498 int hash = m_Name.GetHashCode();
499 Guid guidByHash = new Guid(hash, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
500 string guid = Helper.AttributeValue(node, "guid", guidByHash.ToString());
501 m_Guid = new Guid(guid);
502
503 m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false);
504 m_DebugStartParameters = Helper.AttributeValue(node, "debugStartParameters", string.Empty);
505
506 if(string.IsNullOrEmpty(m_AssemblyName))
507 {
508 m_AssemblyName = m_Name;
509 }
510
511 if(string.IsNullOrEmpty(m_RootNamespace))
512 {
513 m_RootNamespace = m_Name;
514 }
515
516 m_FullPath = m_Path;
517 try
518 {
519 m_FullPath = Helper.ResolvePath(m_FullPath);
520 }
521 catch
522 {
523 throw new WarningException("Could not resolve Solution path: {0}", m_Path);
524 }
525
526 Kernel.Instance.CurrentWorkingDirectory.Push();
527 try
528 {
529 Helper.SetCurrentDir(m_FullPath);
530
531 if( node == null )
532 {
533 throw new ArgumentNullException("node");
534 }
535
536 foreach(XmlNode child in node.ChildNodes)
537 {
538 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
539 if(dataNode is ConfigurationNode)
540 {
541 HandleConfiguration((ConfigurationNode)dataNode);
542 }
543 else if(dataNode is ReferencePathNode)
544 {
545 m_ReferencePaths.Add((ReferencePathNode)dataNode);
546 }
547 else if(dataNode is ReferenceNode)
548 {
549 m_References.Add((ReferenceNode)dataNode);
550 }
551 else if(dataNode is AuthorNode)
552 {
553 m_Authors.Add((AuthorNode)dataNode);
554 }
555 else if(dataNode is FilesNode)
556 {
557 m_Files = (FilesNode)dataNode;
558 }
559 }
560 }
561 finally
562 {
563 Kernel.Instance.CurrentWorkingDirectory.Pop();
564 }
565 }
566
567 #endregion
568
569 #region IComparable Members
570
571 public int CompareTo(object obj)
572 {
573 ProjectNode that = (ProjectNode)obj;
574 return m_Name.CompareTo(that.m_Name);
575 }
576
577 #endregion
578 }
579}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/ReferenceNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/ReferenceNode.cs.svn-base
deleted file mode 100644
index 9c5d1a3..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/ReferenceNode.cs.svn-base
+++ /dev/null
@@ -1,144 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("Reference")]
39 public class ReferenceNode : DataNode, IComparable
40 {
41 #region Fields
42
43 private string m_Name = "unknown";
44 private string m_Path;
45 private string m_LocalCopy;
46 private string m_Version;
47
48 #endregion
49
50 #region Properties
51
52 /// <summary>
53 /// Gets the name.
54 /// </summary>
55 /// <value>The name.</value>
56 public string Name
57 {
58 get
59 {
60 return m_Name;
61 }
62 }
63
64 /// <summary>
65 /// Gets the path.
66 /// </summary>
67 /// <value>The path.</value>
68 public string Path
69 {
70 get
71 {
72 return m_Path;
73 }
74 }
75
76 /// <summary>
77 /// Gets a value indicating whether [local copy specified].
78 /// </summary>
79 /// <value><c>true</c> if [local copy specified]; otherwise, <c>false</c>.</value>
80 public bool LocalCopySpecified
81 {
82 get
83 {
84 return ( m_LocalCopy != null && m_LocalCopy.Length == 0);
85 }
86 }
87
88 /// <summary>
89 /// Gets a value indicating whether [local copy].
90 /// </summary>
91 /// <value><c>true</c> if [local copy]; otherwise, <c>false</c>.</value>
92 public bool LocalCopy
93 {
94 get
95 {
96 if( m_LocalCopy == null)
97 {
98 return false;
99 }
100 return bool.Parse(m_LocalCopy);
101 }
102 }
103
104 /// <summary>
105 /// Gets the version.
106 /// </summary>
107 /// <value>The version.</value>
108 public string Version
109 {
110 get
111 {
112 return m_Version;
113 }
114 }
115
116 #endregion
117
118 #region Public Methods
119
120 /// <summary>
121 /// Parses the specified node.
122 /// </summary>
123 /// <param name="node">The node.</param>
124 public override void Parse(XmlNode node)
125 {
126 m_Name = Helper.AttributeValue(node, "name", m_Name);
127 m_Path = Helper.AttributeValue(node, "path", m_Path);
128 m_LocalCopy = Helper.AttributeValue(node, "localCopy", m_LocalCopy);
129 m_Version = Helper.AttributeValue(node, "version", m_Version);
130 }
131
132 #endregion
133
134 #region IComparable Members
135
136 public int CompareTo(object obj)
137 {
138 ReferenceNode that = (ReferenceNode)obj;
139 return this.m_Name.CompareTo(that.m_Name);
140 }
141
142 #endregion
143 }
144}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/ReferencePathNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/ReferencePathNode.cs.svn-base
deleted file mode 100644
index 7331cd7..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/ReferencePathNode.cs.svn-base
+++ /dev/null
@@ -1,97 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Xml;
28
29using Prebuild.Core.Attributes;
30using Prebuild.Core.Interfaces;
31using Prebuild.Core.Utilities;
32
33namespace Prebuild.Core.Nodes
34{
35 /// <summary>
36 ///
37 /// </summary>
38 [DataNode("ReferencePath")]
39 public class ReferencePathNode : DataNode, IComparable
40 {
41 #region Fields
42
43 private string m_Path;
44
45 #endregion
46
47 #region Properties
48
49 /// <summary>
50 /// Gets the path.
51 /// </summary>
52 /// <value>The path.</value>
53 public string Path
54 {
55 get
56 {
57 return m_Path;
58 }
59 }
60
61 #endregion
62
63 #region Public Methods
64
65 /// <summary>
66 /// Parses the specified node.
67 /// </summary>
68 /// <param name="node">The node.</param>
69 public override void Parse(XmlNode node)
70 {
71 if( node == null )
72 {
73 throw new ArgumentNullException("node");
74 }
75
76 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
77 if(m_Path == null)
78 {
79 m_Path = "";
80 }
81
82 m_Path = m_Path.Trim();
83 }
84
85 #endregion
86
87 #region IComparable Members
88
89 public int CompareTo(object obj)
90 {
91 ReferencePathNode that = (ReferencePathNode)obj;
92 return this.m_Path.CompareTo(that.m_Path);
93 }
94
95 #endregion
96 }
97}
diff --git a/Prebuild/src/Core/Nodes/.svn/text-base/SolutionNode.cs.svn-base b/Prebuild/src/Core/Nodes/.svn/text-base/SolutionNode.cs.svn-base
deleted file mode 100644
index 10c0223..0000000
--- a/Prebuild/src/Core/Nodes/.svn/text-base/SolutionNode.cs.svn-base
+++ /dev/null
@@ -1,382 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Diagnostics;
29using System.Xml;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Nodes
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [DataNode("Solution")]
41 [DataNode("EmbeddedSolution")]
42 [DebuggerDisplay("{Name}")]
43 public class SolutionNode : DataNode
44 {
45 #region Fields
46
47 private Guid m_Guid = Guid.NewGuid();
48 private string m_Name = "unknown";
49 private string m_Path = "";
50 private string m_FullPath = "";
51 private string m_ActiveConfig;
52 private string m_Version = "1.0.0";
53
54 private OptionsNode m_Options;
55 private FilesNode m_Files;
56 private readonly ConfigurationNodeCollection m_Configurations = new ConfigurationNodeCollection();
57 private readonly Dictionary<string, ProjectNode> m_Projects = new Dictionary<string, ProjectNode>();
58 private readonly Dictionary<string, DatabaseProjectNode> m_DatabaseProjects = new Dictionary<string, DatabaseProjectNode>();
59 private readonly List<ProjectNode> m_ProjectsOrder = new List<ProjectNode>();
60 private readonly Dictionary<string, SolutionNode> m_Solutions = new Dictionary<string, SolutionNode>();
61 private CleanupNode m_Cleanup;
62
63 #endregion
64
65 #region Properties
66 public override IDataNode Parent
67 {
68 get
69 {
70 return base.Parent;
71 }
72 set
73 {
74 if (value is SolutionNode)
75 {
76 SolutionNode solution = (SolutionNode)value;
77 foreach (ConfigurationNode conf in solution.Configurations)
78 {
79 m_Configurations[conf.Name] = (ConfigurationNode) conf.Clone();
80 }
81 }
82
83 base.Parent = value;
84 }
85 }
86
87 public CleanupNode Cleanup
88 {
89 get
90 {
91 return m_Cleanup;
92 }
93 set
94 {
95 m_Cleanup = value;
96 }
97 }
98
99 public Guid Guid
100 {
101 get
102 {
103 return m_Guid;
104 }
105 set
106 {
107 m_Guid = value;
108 }
109 }
110 /// <summary>
111 /// Gets or sets the active config.
112 /// </summary>
113 /// <value>The active config.</value>
114 public string ActiveConfig
115 {
116 get
117 {
118 return m_ActiveConfig;
119 }
120 set
121 {
122 m_ActiveConfig = value;
123 }
124 }
125
126 /// <summary>
127 /// Gets the name.
128 /// </summary>
129 /// <value>The name.</value>
130 public string Name
131 {
132 get
133 {
134 return m_Name;
135 }
136 }
137
138 /// <summary>
139 /// Gets the path.
140 /// </summary>
141 /// <value>The path.</value>
142 public string Path
143 {
144 get
145 {
146 return m_Path;
147 }
148 }
149
150 /// <summary>
151 /// Gets the full path.
152 /// </summary>
153 /// <value>The full path.</value>
154 public string FullPath
155 {
156 get
157 {
158 return m_FullPath;
159 }
160 }
161
162 /// <summary>
163 /// Gets the version.
164 /// </summary>
165 /// <value>The version.</value>
166 public string Version
167 {
168 get
169 {
170 return m_Version;
171 }
172 }
173
174 /// <summary>
175 /// Gets the options.
176 /// </summary>
177 /// <value>The options.</value>
178 public OptionsNode Options
179 {
180 get
181 {
182 return m_Options;
183 }
184 }
185
186 /// <summary>
187 /// Gets the files.
188 /// </summary>
189 /// <value>The files.</value>
190 public FilesNode Files
191 {
192 get
193 {
194 return m_Files;
195 }
196 }
197
198 /// <summary>
199 /// Gets the configurations.
200 /// </summary>
201 /// <value>The configurations.</value>
202 public ConfigurationNodeCollection Configurations
203 {
204 get
205 {
206 ConfigurationNodeCollection tmp = new ConfigurationNodeCollection();
207 tmp.AddRange(ConfigurationsTable);
208 return tmp;
209 }
210 }
211
212 /// <summary>
213 /// Gets the configurations table.
214 /// </summary>
215 /// <value>The configurations table.</value>
216 public ConfigurationNodeCollection ConfigurationsTable
217 {
218 get
219 {
220 return m_Configurations;
221 }
222 }
223 /// <summary>
224 /// Gets the database projects.
225 /// </summary>
226 public ICollection<DatabaseProjectNode> DatabaseProjects
227 {
228 get
229 {
230 return m_DatabaseProjects.Values;
231 }
232 }
233 /// <summary>
234 /// Gets the nested solutions.
235 /// </summary>
236 public ICollection<SolutionNode> Solutions
237 {
238 get
239 {
240 return m_Solutions.Values;
241 }
242 }
243 /// <summary>
244 /// Gets the nested solutions hash table.
245 /// </summary>
246 public Dictionary<string, SolutionNode> SolutionsTable
247 {
248 get
249 {
250 return m_Solutions;
251 }
252 }
253 /// <summary>
254 /// Gets the projects.
255 /// </summary>
256 /// <value>The projects.</value>
257 public ICollection<ProjectNode> Projects
258 {
259 get
260 {
261 List<ProjectNode> tmp = new List<ProjectNode>(m_Projects.Values);
262 tmp.Sort();
263 return tmp;
264 }
265 }
266
267 /// <summary>
268 /// Gets the projects table.
269 /// </summary>
270 /// <value>The projects table.</value>
271 public Dictionary<string, ProjectNode> ProjectsTable
272 {
273 get
274 {
275 return m_Projects;
276 }
277 }
278
279 /// <summary>
280 /// Gets the projects table.
281 /// </summary>
282 /// <value>The projects table.</value>
283 public List<ProjectNode> ProjectsTableOrder
284 {
285 get
286 {
287 return m_ProjectsOrder;
288 }
289 }
290
291 #endregion
292
293 #region Public Methods
294
295 /// <summary>
296 /// Parses the specified node.
297 /// </summary>
298 /// <param name="node">The node.</param>
299 public override void Parse(XmlNode node)
300 {
301 m_Name = Helper.AttributeValue(node, "name", m_Name);
302 m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig);
303 m_Path = Helper.AttributeValue(node, "path", m_Path);
304 m_Version = Helper.AttributeValue(node, "version", m_Version);
305
306 m_FullPath = m_Path;
307 try
308 {
309 m_FullPath = Helper.ResolvePath(m_FullPath);
310 }
311 catch
312 {
313 throw new WarningException("Could not resolve solution path: {0}", m_Path);
314 }
315
316 Kernel.Instance.CurrentWorkingDirectory.Push();
317 try
318 {
319 Helper.SetCurrentDir(m_FullPath);
320
321 if( node == null )
322 {
323 throw new ArgumentNullException("node");
324 }
325
326 foreach(XmlNode child in node.ChildNodes)
327 {
328 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
329 if(dataNode is OptionsNode)
330 {
331 m_Options = (OptionsNode)dataNode;
332 }
333 else if(dataNode is FilesNode)
334 {
335 m_Files = (FilesNode)dataNode;
336 }
337 else if(dataNode is ConfigurationNode)
338 {
339 ConfigurationNode configurationNode = (ConfigurationNode) dataNode;
340 m_Configurations[configurationNode.NameAndPlatform] = configurationNode;
341
342 // If the active configuration is null, then we populate it.
343 if (ActiveConfig == null)
344 {
345 ActiveConfig = configurationNode.Name;
346 }
347 }
348 else if(dataNode is ProjectNode)
349 {
350 m_Projects[((ProjectNode)dataNode).Name] = (ProjectNode) dataNode;
351 m_ProjectsOrder.Add((ProjectNode)dataNode);
352 }
353 else if(dataNode is SolutionNode)
354 {
355 m_Solutions[((SolutionNode)dataNode).Name] = (SolutionNode) dataNode;
356 }
357 else if (dataNode is ProcessNode)
358 {
359 ProcessNode p = (ProcessNode)dataNode;
360 Kernel.Instance.ProcessFile(p, this);
361 }
362 else if (dataNode is DatabaseProjectNode)
363 {
364 m_DatabaseProjects[((DatabaseProjectNode)dataNode).Name] = (DatabaseProjectNode) dataNode;
365 }
366 else if(dataNode is CleanupNode)
367 {
368 if(m_Cleanup != null)
369 throw new WarningException("There can only be one Cleanup node.");
370 m_Cleanup = (CleanupNode)dataNode;
371 }
372 }
373 }
374 finally
375 {
376 Kernel.Instance.CurrentWorkingDirectory.Pop();
377 }
378 }
379
380 #endregion
381 }
382}
diff --git a/Prebuild/src/Core/Parse/.svn/all-wcprops b/Prebuild/src/Core/Parse/.svn/all-wcprops
deleted file mode 100644
index c77d416..0000000
--- a/Prebuild/src/Core/Parse/.svn/all-wcprops
+++ /dev/null
@@ -1,17 +0,0 @@
1K 25
2svn:wc:ra_dav:version-url
3V 56
4/svnroot/dnpb/!svn/ver/323/trunk/Prebuild/src/Core/Parse
5END
6IfContext.cs
7K 25
8svn:wc:ra_dav:version-url
9V 69
10/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Parse/IfContext.cs
11END
12Preprocessor.cs
13K 25
14svn:wc:ra_dav:version-url
15V 72
16/svnroot/dnpb/!svn/ver/323/trunk/Prebuild/src/Core/Parse/Preprocessor.cs
17END
diff --git a/Prebuild/src/Core/Parse/.svn/dir-prop-base b/Prebuild/src/Core/Parse/.svn/dir-prop-base
deleted file mode 100644
index a1989a0..0000000
--- a/Prebuild/src/Core/Parse/.svn/dir-prop-base
+++ /dev/null
@@ -1,5 +0,0 @@
1K 10
2svn:ignore
3V 5
4*.swp
5END
diff --git a/Prebuild/src/Core/Parse/.svn/entries b/Prebuild/src/Core/Parse/.svn/entries
deleted file mode 100644
index 2aae711..0000000
--- a/Prebuild/src/Core/Parse/.svn/entries
+++ /dev/null
@@ -1,96 +0,0 @@
110
2
3dir
4323
5https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core/Parse
6https://dnpb.svn.sourceforge.net/svnroot/dnpb
7
8
9
102010-09-10T17:51:36.189738Z
11323
12jhurliman
13has-props
14
15
16
17
18
19
20
21
22
23
24
25
26
273355ff64-970d-0410-bbe8-d0fbd18be4fb
28
29IfContext.cs
30file
31
32
33
34
352010-09-10T22:51:44.000000Z
36859fca08c6a39a48f179d5ffe3d19bd0
372009-02-19T06:47:52.218324Z
38295
39kunnis
40has-props
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
613653
62
63Preprocessor.cs
64file
65
66
67
68
692010-09-10T22:51:44.000000Z
706ef27f33f41caca9d4ab6c82ead76902
712010-09-10T17:51:36.189738Z
72323
73jhurliman
74has-props
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
9518590
96
diff --git a/Prebuild/src/Core/Parse/.svn/prop-base/IfContext.cs.svn-base b/Prebuild/src/Core/Parse/.svn/prop-base/IfContext.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Parse/.svn/prop-base/IfContext.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Parse/.svn/prop-base/Preprocessor.cs.svn-base b/Prebuild/src/Core/Parse/.svn/prop-base/Preprocessor.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Parse/.svn/prop-base/Preprocessor.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Parse/.svn/text-base/IfContext.cs.svn-base b/Prebuild/src/Core/Parse/.svn/text-base/IfContext.cs.svn-base
deleted file mode 100644
index 3c79d38..0000000
--- a/Prebuild/src/Core/Parse/.svn/text-base/IfContext.cs.svn-base
+++ /dev/null
@@ -1,154 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28namespace Prebuild.Core.Parse
29{
30 /// <summary>
31 ///
32 /// </summary>
33 public enum IfState
34 {
35 /// <summary>
36 ///
37 /// </summary>
38 None,
39 /// <summary>
40 ///
41 /// </summary>
42 If,
43 /// <summary>
44 ///
45 /// </summary>
46 ElseIf,
47 /// <summary>
48 ///
49 /// </summary>
50 Else
51 }
52
53 /// <summary>
54 /// Summary description for IfContext.
55 /// </summary>
56 // Inspired by the equivalent WiX class (see www.sourceforge.net/projects/wix/)
57 public class IfContext
58 {
59 #region Properties
60
61 bool m_Active;
62 bool m_Keep;
63 bool m_EverKept;
64 IfState m_State = IfState.None;
65
66 #endregion
67
68 #region Constructors
69
70 /// <summary>
71 /// Initializes a new instance of the <see cref="IfContext"/> class.
72 /// </summary>
73 /// <param name="active">if set to <c>true</c> [active].</param>
74 /// <param name="keep">if set to <c>true</c> [keep].</param>
75 /// <param name="state">The state.</param>
76 public IfContext(bool active, bool keep, IfState state)
77 {
78 m_Active = active;
79 m_Keep = keep;
80 m_EverKept = keep;
81 m_State = state;
82 }
83
84 #endregion
85
86 #region Properties
87
88 /// <summary>
89 /// Gets or sets a value indicating whether this <see cref="IfContext"/> is active.
90 /// </summary>
91 /// <value><c>true</c> if active; otherwise, <c>false</c>.</value>
92 public bool Active
93 {
94 get
95 {
96 return m_Active;
97 }
98 set
99 {
100 m_Active = value;
101 }
102 }
103
104 /// <summary>
105 /// Gets or sets a value indicating whether this <see cref="IfContext"/> is keep.
106 /// </summary>
107 /// <value><c>true</c> if keep; otherwise, <c>false</c>.</value>
108 public bool Keep
109 {
110 get
111 {
112 return m_Keep;
113 }
114 set
115 {
116 m_Keep = value;
117 if(m_Keep)
118 {
119 m_EverKept = true;
120 }
121 }
122 }
123
124 /// <summary>
125 /// Gets a value indicating whether [ever kept].
126 /// </summary>
127 /// <value><c>true</c> if [ever kept]; otherwise, <c>false</c>.</value>
128 public bool EverKept
129 {
130 get
131 {
132 return m_EverKept;
133 }
134 }
135
136 /// <summary>
137 /// Gets or sets the state.
138 /// </summary>
139 /// <value>The state.</value>
140 public IfState State
141 {
142 get
143 {
144 return m_State;
145 }
146 set
147 {
148 m_State = value;
149 }
150 }
151
152 #endregion
153 }
154}
diff --git a/Prebuild/src/Core/Parse/.svn/text-base/Preprocessor.cs.svn-base b/Prebuild/src/Core/Parse/.svn/text-base/Preprocessor.cs.svn-base
deleted file mode 100644
index 0648fad..0000000
--- a/Prebuild/src/Core/Parse/.svn/text-base/Preprocessor.cs.svn-base
+++ /dev/null
@@ -1,652 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29using System.Text.RegularExpressions;
30using System.Xml;
31
32namespace Prebuild.Core.Parse
33{
34 /// <summary>
35 ///
36 /// </summary>
37 public enum OperatorSymbol
38 {
39 /// <summary>
40 ///
41 /// </summary>
42 None,
43 /// <summary>
44 ///
45 /// </summary>
46 Equal,
47 /// <summary>
48 ///
49 /// </summary>
50 NotEqual,
51 /// <summary>
52 ///
53 /// </summary>
54 LessThan,
55 /// <summary>
56 ///
57 /// </summary>
58 GreaterThan,
59 /// <summary>
60 ///
61 /// </summary>
62 LessThanEqual,
63 /// <summary>
64 ///
65 /// </summary>
66 GreaterThanEqual
67 }
68
69 /// <summary>
70 ///
71 /// </summary>
72 public class Preprocessor
73 {
74 #region Constants
75
76 /// <summary>
77 /// Includes the regex to look for file tags in the <?include
78 /// ?> processing instruction.
79 /// </summary>
80 private static readonly Regex includeFileRegex = new Regex("file=\"(.+?)\"");
81
82 #endregion
83
84 #region Fields
85
86 readonly XmlDocument m_OutDoc = new XmlDocument();
87 readonly Stack<IfContext> m_IfStack = new Stack<IfContext>();
88 readonly Dictionary<string, object> m_Variables = new Dictionary<string, object>();
89
90 #endregion
91
92 #region Constructors
93
94 /// <summary>
95 /// Initializes a new instance of the <see cref="Preprocessor"/> class.
96 /// </summary>
97 public Preprocessor()
98 {
99 RegisterVariable("OS", GetOS());
100 RegisterVariable("RuntimeVersion", Environment.Version.Major);
101 RegisterVariable("RuntimeMajor", Environment.Version.Major);
102 RegisterVariable("RuntimeMinor", Environment.Version.Minor);
103 RegisterVariable("RuntimeRevision", Environment.Version.Revision);
104 }
105
106 #endregion
107
108 #region Properties
109
110 /// <summary>
111 /// Gets the processed doc.
112 /// </summary>
113 /// <value>The processed doc.</value>
114 public XmlDocument ProcessedDoc
115 {
116 get
117 {
118 return m_OutDoc;
119 }
120 }
121
122 #endregion
123
124 #region Private Methods
125
126 /// <summary>
127 /// Parts of this code were taken from NAnt and is subject to the GPL
128 /// as per NAnt's license. Thanks to the NAnt guys for this little gem.
129 /// </summary>
130 /// <returns></returns>
131 public static string GetOS()
132 {
133 PlatformID platId = Environment.OSVersion.Platform;
134 if(platId == PlatformID.Win32NT || platId == PlatformID.Win32Windows)
135 {
136 return "Win32";
137 }
138
139 if (File.Exists("/System/Library/Frameworks/Cocoa.framework/Cocoa"))
140 {
141 return "MACOSX";
142 }
143
144 /*
145 * .NET 1.x, under Mono, the UNIX code is 128. Under
146 * .NET 2.x, Mono or MS, the UNIX code is 4
147 */
148 if(Environment.Version.Major == 1)
149 {
150 if((int)platId == 128)
151 {
152 return "UNIX";
153 }
154 }
155 else if((int)platId == 4)
156 {
157 return "UNIX";
158 }
159
160 return "Unknown";
161 }
162
163 private static bool CompareNum(OperatorSymbol oper, int val1, int val2)
164 {
165 switch(oper)
166 {
167 case OperatorSymbol.Equal:
168 return (val1 == val2);
169 case OperatorSymbol.NotEqual:
170 return (val1 != val2);
171 case OperatorSymbol.LessThan:
172 return (val1 < val2);
173 case OperatorSymbol.LessThanEqual:
174 return (val1 <= val2);
175 case OperatorSymbol.GreaterThan:
176 return (val1 > val2);
177 case OperatorSymbol.GreaterThanEqual:
178 return (val1 >= val2);
179 }
180
181 throw new WarningException("Unknown operator type");
182 }
183
184 private static bool CompareStr(OperatorSymbol oper, string val1, string val2)
185 {
186 switch(oper)
187 {
188 case OperatorSymbol.Equal:
189 return (val1 == val2);
190 case OperatorSymbol.NotEqual:
191 return (val1 != val2);
192 case OperatorSymbol.LessThan:
193 return (val1.CompareTo(val2) < 0);
194 case OperatorSymbol.LessThanEqual:
195 return (val1.CompareTo(val2) <= 0);
196 case OperatorSymbol.GreaterThan:
197 return (val1.CompareTo(val2) > 0);
198 case OperatorSymbol.GreaterThanEqual:
199 return (val1.CompareTo(val2) >= 0);
200 }
201
202 throw new WarningException("Unknown operator type");
203 }
204
205 private static char NextChar(int idx, string str)
206 {
207 if((idx + 1) >= str.Length)
208 {
209 return Char.MaxValue;
210 }
211
212 return str[idx + 1];
213 }
214 // Very very simple expression parser. Can only match expressions of the form
215 // <var> <op> <value>:
216 // OS = Windows
217 // OS != Linux
218 // RuntimeMinor > 0
219 private bool ParseExpression(string exp)
220 {
221 if(exp == null)
222 {
223 throw new ArgumentException("Invalid expression, cannot be null");
224 }
225
226 exp = exp.Trim();
227 if(exp.Length < 1)
228 {
229 throw new ArgumentException("Invalid expression, cannot be 0 length");
230 }
231
232 string id = "";
233 string str = "";
234 OperatorSymbol oper = OperatorSymbol.None;
235 bool inStr = false;
236
237 for(int i = 0; i < exp.Length; i++)
238 {
239 char c = exp[i];
240 if(Char.IsWhiteSpace(c))
241 {
242 continue;
243 }
244
245 if(Char.IsLetterOrDigit(c) || c == '_')
246 {
247 if(inStr)
248 {
249 str += c;
250 }
251 else
252 {
253 id += c;
254 }
255 }
256 else if(c == '\"')
257 {
258 inStr = !inStr;
259 if(inStr)
260 {
261 str = "";
262 }
263 }
264 else
265 {
266 if(inStr)
267 {
268 str += c;
269 }
270 else
271 {
272 switch(c)
273 {
274 case '=':
275 oper = OperatorSymbol.Equal;
276 break;
277
278 case '!':
279 if(NextChar(i, exp) == '=')
280 {
281 oper = OperatorSymbol.NotEqual;
282 }
283
284 break;
285
286 case '<':
287 if(NextChar(i, exp) == '=')
288 {
289 oper = OperatorSymbol.LessThanEqual;
290 }
291 else
292 {
293 oper = OperatorSymbol.LessThan;
294 }
295
296 break;
297
298 case '>':
299 if(NextChar(i, exp) == '=')
300 {
301 oper = OperatorSymbol.GreaterThanEqual;
302 }
303 else
304 {
305 oper = OperatorSymbol.GreaterThan;
306 }
307
308 break;
309 }
310 }
311 }
312 }
313
314
315 if(inStr)
316 {
317 throw new WarningException("Expected end of string in expression");
318 }
319
320 if(oper == OperatorSymbol.None)
321 {
322 throw new WarningException("Expected operator in expression");
323 }
324 if(id.Length < 1)
325 {
326 throw new WarningException("Expected identifier in expression");
327 }
328 if(str.Length < 1)
329 {
330 throw new WarningException("Expected value in expression");
331 }
332
333 bool ret;
334 try
335 {
336 object val = m_Variables[id.ToLower()];
337 if(val == null)
338 {
339 throw new WarningException("Unknown identifier '{0}'", id);
340 }
341
342 Type t = val.GetType();
343 if(t.IsAssignableFrom(typeof(int)))
344 {
345 int numVal = (int)val;
346 int numVal2 = Int32.Parse(str);
347 ret = CompareNum(oper, numVal, numVal2);
348 }
349 else
350 {
351 string strVal = val.ToString();
352 string strVal2 = str;
353 ret = CompareStr(oper, strVal, strVal2);
354 }
355 }
356 catch(ArgumentException ex)
357 {
358 ex.ToString();
359 throw new WarningException("Invalid value type for system variable '{0}', expected int", id);
360 }
361
362 return ret;
363 }
364
365 /// <summary>
366 /// Taken from current Prebuild included in OpenSim 0.7.x
367 /// </summary>
368 /// <param name="readerStack">
369 /// A <see cref="Stack<XmlReader>"/>
370 /// </param>
371 /// <param name="include">
372 /// A <see cref="System.String"/>
373 /// </param>
374 private static void WildCardInclude (Stack<XmlReader> readerStack, string include)
375 {
376 if (!include.Contains ("*")) {
377 return;
378 }
379
380 // Console.WriteLine("Processing {0}", include);
381
382 // Break up the include into pre and post wildcard sections
383 string preWildcard = include.Substring (0, include.IndexOf ("*"));
384 string postWildcard = include.Substring (include.IndexOf ("*") + 2);
385
386 // If preWildcard is a directory, recurse
387 if (Directory.Exists (preWildcard)) {
388 string[] directories = Directory.GetDirectories (preWildcard);
389 Array.Sort (directories);
390 Array.Reverse (directories);
391 foreach (string dirPath in directories) {
392 //Console.WriteLine ("Scanning : {0}", dirPath);
393
394 string includeFile = Path.Combine (dirPath, postWildcard);
395 if (includeFile.Contains ("*")) {
396 // postWildcard included another wildcard, recurse.
397 WildCardInclude (readerStack, includeFile);
398 } else {
399 FileInfo file = new FileInfo (includeFile);
400 if (file.Exists) {
401 //Console.WriteLine ("Including File: {0}", includeFile);
402 XmlReader newReader = new XmlTextReader (file.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
403 readerStack.Push (newReader);
404 }
405 }
406 }
407 } else {
408 // preWildcard is not a path to a directory, so the wildcard is in the filename
409 string searchFilename = Path.GetFileName (preWildcard.Substring (preWildcard.IndexOf ("/") + 1) + "*" + postWildcard);
410 Console.WriteLine ("searchFilename: {0}", searchFilename);
411
412 string searchDirectory = Path.GetDirectoryName (preWildcard);
413 Console.WriteLine ("searchDirectory: {0}", searchDirectory);
414
415 string[] files = Directory.GetFiles (searchDirectory, searchFilename);
416 Array.Sort (files);
417 Array.Reverse (files);
418 foreach (string includeFile in files) {
419 FileInfo file = new FileInfo (includeFile);
420 if (file.Exists) {
421 // Console.WriteLine ("Including File: {0}", includeFile);
422 XmlReader newReader = new XmlTextReader (file.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
423 readerStack.Push (newReader);
424 }
425 }
426 }
427 }
428
429 #endregion
430
431 #region Public Methods
432
433 /// <summary>
434 ///
435 /// </summary>
436 /// <param name="name"></param>
437 /// <param name="variableValue"></param>
438 public void RegisterVariable(string name, object variableValue)
439 {
440 if(name == null || variableValue == null)
441 {
442 return;
443 }
444
445 m_Variables[name.ToLower()] = variableValue;
446 }
447
448 /// <summary>
449 /// Performs validation on the xml source as well as evaluates conditional and flow expresions
450 /// </summary>
451 /// <exception cref="ArgumentException">For invalid use of conditional expressions or for invalid XML syntax. If a XmlValidatingReader is passed, then will also throw exceptions for non-schema-conforming xml</exception>
452 /// <param name="initialReader"></param>
453 /// <returns>the output xml </returns>
454 public string Process(XmlReader initialReader)
455 {
456 if(initialReader == null)
457 {
458 throw new ArgumentException("Invalid XML reader to pre-process");
459 }
460
461 IfContext context = new IfContext(true, true, IfState.None);
462 StringWriter xmlText = new StringWriter();
463 XmlTextWriter writer = new XmlTextWriter(xmlText);
464 writer.Formatting = Formatting.Indented;
465
466 // Create a queue of XML readers and add the initial
467 // reader to it. Then we process until we run out of
468 // readers which lets the <?include?> operation add more
469 // readers to generate a multi-file parser and not require
470 // XML fragments that a recursive version would use.
471 Stack<XmlReader> readerStack = new Stack<XmlReader>();
472 readerStack.Push(initialReader);
473
474 while(readerStack.Count > 0)
475 {
476 // Pop off the next reader.
477 XmlReader reader = readerStack.Pop();
478
479 // Process through this XML reader until it is
480 // completed (or it is replaced by the include
481 // operation).
482 while(reader.Read())
483 {
484 // The prebuild file has a series of processing
485 // instructions which allow for specific
486 // inclusions based on operating system or to
487 // include additional files.
488 if(reader.NodeType == XmlNodeType.ProcessingInstruction)
489 {
490 bool ignore = false;
491
492 switch(reader.LocalName)
493 {
494 case "include":
495 // use regular expressions to parse out the attributes.
496 MatchCollection matches = includeFileRegex.Matches(reader.Value);
497
498 // make sure there is only one file attribute.
499 if(matches.Count > 1)
500 {
501 throw new WarningException("An <?include ?> node was found, but it specified more than one file.");
502 }
503
504 if(matches.Count == 0)
505 {
506 throw new WarningException("An <?include ?> node was found, but it did not specify the file attribute.");
507 }
508
509 // ***** Adding for wildcard handling
510 // Push current reader back onto the stack.
511 readerStack.Push (reader);
512
513 // Pull the file out from the regex and make sure it is a valid file before using it.
514 string filename = matches[0].Groups[1].Value;
515
516 filename = String.Join (Path.DirectorySeparatorChar.ToString (), filename.Split (new char[] { '/', '\\' }));
517
518 if (!filename.Contains ("*")) {
519
520 FileInfo includeFile = new FileInfo (filename);
521 if (!includeFile.Exists) {
522 throw new WarningException ("Cannot include file: " + includeFile.FullName);
523 }
524
525 // Create a new reader object for this file. Then put the old reader back on the stack and start
526 // processing using this new XML reader.
527
528 XmlReader newReader = new XmlTextReader (includeFile.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
529 reader = newReader;
530 readerStack.Push (reader);
531
532 } else {
533 WildCardInclude (readerStack, filename);
534 }
535
536 reader = (XmlReader)readerStack.Pop ();
537 ignore = true;
538 break;
539
540 case "if":
541 m_IfStack.Push(context);
542 context = new IfContext(context.Keep & context.Active, ParseExpression(reader.Value), IfState.If);
543 ignore = true;
544 break;
545
546 case "elseif":
547 if(m_IfStack.Count == 0)
548 {
549 throw new WarningException("Unexpected 'elseif' outside of 'if'");
550 }
551 if(context.State != IfState.If && context.State != IfState.ElseIf)
552 {
553 throw new WarningException("Unexpected 'elseif' outside of 'if'");
554 }
555
556 context.State = IfState.ElseIf;
557 if(!context.EverKept)
558 {
559 context.Keep = ParseExpression(reader.Value);
560 }
561 else
562 {
563 context.Keep = false;
564 }
565
566 ignore = true;
567 break;
568
569 case "else":
570 if(m_IfStack.Count == 0)
571 {
572 throw new WarningException("Unexpected 'else' outside of 'if'");
573 }
574 if(context.State != IfState.If && context.State != IfState.ElseIf)
575 {
576 throw new WarningException("Unexpected 'else' outside of 'if'");
577 }
578
579 context.State = IfState.Else;
580 context.Keep = !context.EverKept;
581 ignore = true;
582 break;
583
584 case "endif":
585 if(m_IfStack.Count == 0)
586 {
587 throw new WarningException("Unexpected 'endif' outside of 'if'");
588 }
589
590 context = m_IfStack.Pop();
591 ignore = true;
592 break;
593 }
594
595 if(ignore)
596 {
597 continue;
598 }
599 }//end pre-proc instruction
600
601 if(!context.Active || !context.Keep)
602 {
603 continue;
604 }
605
606 switch(reader.NodeType)
607 {
608 case XmlNodeType.Element:
609 bool empty = reader.IsEmptyElement;
610 writer.WriteStartElement(reader.Name);
611
612 while (reader.MoveToNextAttribute())
613 {
614 writer.WriteAttributeString(reader.Name, reader.Value);
615 }
616
617 if(empty)
618 {
619 writer.WriteEndElement();
620 }
621
622 break;
623
624 case XmlNodeType.EndElement:
625 writer.WriteEndElement();
626 break;
627
628 case XmlNodeType.Text:
629 writer.WriteString(reader.Value);
630 break;
631
632 case XmlNodeType.CDATA:
633 writer.WriteCData(reader.Value);
634 break;
635
636 default:
637 break;
638 }
639 }
640
641 if(m_IfStack.Count != 0)
642 {
643 throw new WarningException("Mismatched 'if', 'endif' pair");
644 }
645 }
646
647 return xmlText.ToString();
648 }
649
650 #endregion
651 }
652}
diff --git a/Prebuild/src/Core/Targets/.svn/all-wcprops b/Prebuild/src/Core/Targets/.svn/all-wcprops
deleted file mode 100644
index 91d6694..0000000
--- a/Prebuild/src/Core/Targets/.svn/all-wcprops
+++ /dev/null
@@ -1,101 +0,0 @@
1K 25
2svn:wc:ra_dav:version-url
3V 58
4/svnroot/dnpb/!svn/ver/323/trunk/Prebuild/src/Core/Targets
5END
6MakefileTarget.cs
7K 25
8svn:wc:ra_dav:version-url
9V 76
10/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Targets/MakefileTarget.cs
11END
12SharpDevelop2Target.cs
13K 25
14svn:wc:ra_dav:version-url
15V 81
16/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Targets/SharpDevelop2Target.cs
17END
18ToolInfo.cs
19K 25
20svn:wc:ra_dav:version-url
21V 70
22/svnroot/dnpb/!svn/ver/290/trunk/Prebuild/src/Core/Targets/ToolInfo.cs
23END
24VSGenericTarget.cs
25K 25
26svn:wc:ra_dav:version-url
27V 77
28/svnroot/dnpb/!svn/ver/316/trunk/Prebuild/src/Core/Targets/VSGenericTarget.cs
29END
30DebugTarget.cs
31K 25
32svn:wc:ra_dav:version-url
33V 73
34/svnroot/dnpb/!svn/ver/164/trunk/Prebuild/src/Core/Targets/DebugTarget.cs
35END
36VSVersion.cs
37K 25
38svn:wc:ra_dav:version-url
39V 71
40/svnroot/dnpb/!svn/ver/316/trunk/Prebuild/src/Core/Targets/VSVersion.cs
41END
42MonoDevelopTarget.cs
43K 25
44svn:wc:ra_dav:version-url
45V 79
46/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
47END
48AutotoolsTarget.cs
49K 25
50svn:wc:ra_dav:version-url
51V 77
52/svnroot/dnpb/!svn/ver/298/trunk/Prebuild/src/Core/Targets/AutotoolsTarget.cs
53END
54VS2010Target.cs
55K 25
56svn:wc:ra_dav:version-url
57V 74
58/svnroot/dnpb/!svn/ver/317/trunk/Prebuild/src/Core/Targets/VS2010Target.cs
59END
60VS2002Target.cs
61K 25
62svn:wc:ra_dav:version-url
63V 74
64/svnroot/dnpb/!svn/ver/295/trunk/Prebuild/src/Core/Targets/VS2002Target.cs
65END
66SharpDevelopTarget.cs
67K 25
68svn:wc:ra_dav:version-url
69V 80
70/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
71END
72VS2003Target.cs
73K 25
74svn:wc:ra_dav:version-url
75V 74
76/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Targets/VS2003Target.cs
77END
78VS2005Target.cs
79K 25
80svn:wc:ra_dav:version-url
81V 74
82/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Targets/VS2005Target.cs
83END
84NAntTarget.cs
85K 25
86svn:wc:ra_dav:version-url
87V 72
88/svnroot/dnpb/!svn/ver/323/trunk/Prebuild/src/Core/Targets/NAntTarget.cs
89END
90XcodeTarget.cs
91K 25
92svn:wc:ra_dav:version-url
93V 73
94/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Targets/XcodeTarget.cs
95END
96VS2008Target.cs
97K 25
98svn:wc:ra_dav:version-url
99V 74
100/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Targets/VS2008Target.cs
101END
diff --git a/Prebuild/src/Core/Targets/.svn/dir-prop-base b/Prebuild/src/Core/Targets/.svn/dir-prop-base
deleted file mode 100644
index a1989a0..0000000
--- a/Prebuild/src/Core/Targets/.svn/dir-prop-base
+++ /dev/null
@@ -1,5 +0,0 @@
1K 10
2svn:ignore
3V 5
4*.swp
5END
diff --git a/Prebuild/src/Core/Targets/.svn/entries b/Prebuild/src/Core/Targets/.svn/entries
deleted file mode 100644
index c6daa49..0000000
--- a/Prebuild/src/Core/Targets/.svn/entries
+++ /dev/null
@@ -1,572 +0,0 @@
110
2
3dir
4323
5https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core/Targets
6https://dnpb.svn.sourceforge.net/svnroot/dnpb
7
8
9
102010-09-10T17:51:36.189738Z
11323
12jhurliman
13has-props
14
15
16
17
18
19
20
21
22
23
24
25
26
273355ff64-970d-0410-bbe8-d0fbd18be4fb
28
29MakefileTarget.cs
30file
31
32
33
34
352010-09-10T22:51:44.000000Z
369f1538adc7e579b57d104dc7f313946b
372009-04-15T01:28:16.827957Z
38307
39kunnis
40has-props
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
6119043
62
63SharpDevelop2Target.cs
64file
65
66
67
68
692010-09-10T22:51:44.000000Z
70f6e8e9d8f335a5a264babb4a8f05a2a5
712009-02-19T06:47:52.218324Z
72295
73kunnis
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
952442
96
97ToolInfo.cs
98file
99
100
101
102
1032010-09-10T22:51:44.000000Z
10420e6cf8e0ad0b0744b6189534bfd049a
1052009-02-18T05:47:43.979044Z
106290
107kunnis
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
1294315
130
131VSGenericTarget.cs
132file
133
134
135
136
1372010-09-10T22:51:44.000000Z
1386956b93fe770e1f5786cc44872c31d06
1392010-05-08T05:43:01.449559Z
140316
141jhurliman
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
16334542
164
165DebugTarget.cs
166file
167
168
169
170
1712010-09-10T22:51:44.000000Z
1727346beba16e30e642f272e7bcf3924bb
1732006-09-20T07:42:51.680045Z
174164
175jendave
176has-props
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
1972703
198
199VSVersion.cs
200file
201
202
203
204
2052010-09-10T22:51:44.000000Z
20678ab7ae5edbe12dfb34c9fbd3dba9c23
2072010-05-08T05:43:01.449559Z
208316
209jhurliman
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
2311950
232
233MonoDevelopTarget.cs
234file
235
236
237
238
2392010-09-10T22:51:44.000000Z
240d8b264553d4c2d66a19f9610be56f4b4
2412009-04-15T01:28:16.827957Z
242307
243kunnis
244has-props
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
26515976
266
267AutotoolsTarget.cs
268file
269
270
271
272
2732010-09-10T22:51:44.000000Z
274bc5383cb56dd751ac946386a51852a77
2752009-02-20T02:15:45.530129Z
276298
277kunnis
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
29941145
300
301VS2010Target.cs
302file
303
304
305
306
3072010-09-10T22:51:44.000000Z
3087d9c7f130f06ead33e747f0920b989c4
3092010-05-09T07:39:45.137959Z
310317
311jhurliman
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
3332745
334
335VS2002Target.cs
336file
337
338
339
340
3412010-09-10T22:51:44.000000Z
342912769a89b935429b3801db96c467de7
3432009-02-19T06:47:52.218324Z
344295
345kunnis
346has-props
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
3672507
368
369SharpDevelopTarget.cs
370file
371
372
373
374
3752010-09-10T22:51:44.000000Z
376f9017c8dd94137dee4b673bee40c8e6e
3772009-04-15T01:28:16.827957Z
378307
379kunnis
380has-props
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
40112773
402
403VS2003Target.cs
404file
405
406
407
408
4092010-09-10T22:51:44.000000Z
410c8e60070e9d7343d50c297d3dff12ac4
4112009-04-15T01:28:16.827957Z
412307
413kunnis
414has-props
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
43518912
436
437VS2005Target.cs
438file
439
440
441
442
4432010-09-10T22:51:44.000000Z
444812092c2b5b068e087806088d80fe635
4452009-04-15T01:28:16.827957Z
446307
447kunnis
448has-props
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
4694291
470
471NAntTarget.cs
472file
473
474
475
476
4772010-09-10T22:51:44.000000Z
478b635fc47efdd3eed660017693b9073c4
4792010-09-10T17:51:36.189738Z
480323
481jhurliman
482has-props
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
50332065
504
505VS2008Target.cs
506file
507
508
509
510
5112010-09-10T22:51:44.000000Z
512154f10d6947ee7bf4d5caf10fad8c43d
5132009-04-15T01:28:16.827957Z
514307
515kunnis
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
5372514
538
539XcodeTarget.cs
540file
541
542
543
544
5452010-09-10T22:51:44.000000Z
5467ec0bbdd62020f03a725d8f99258769d
5472009-04-15T01:28:16.827957Z
548307
549kunnis
550has-props
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
57128408
572
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/DebugTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/DebugTarget.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/DebugTarget.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/MakefileTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/MakefileTarget.cs.svn-base
deleted file mode 100644
index 05f6c06..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/MakefileTarget.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 13
6svn:mime-type
7V 13
8text/x-csharp
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/MonoDevelopTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/MonoDevelopTarget.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/MonoDevelopTarget.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/NAntTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/NAntTarget.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/NAntTarget.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/SharpDevelopTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/SharpDevelopTarget.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/SharpDevelopTarget.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/VS2002Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/VS2002Target.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/VS2002Target.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/VS2003Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/VS2003Target.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/VS2003Target.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/VS2005Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/VS2005Target.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/VS2005Target.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Targets/.svn/prop-base/XcodeTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/prop-base/XcodeTarget.cs.svn-base
deleted file mode 100644
index 05f6c06..0000000
--- a/Prebuild/src/Core/Targets/.svn/prop-base/XcodeTarget.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 13
6svn:mime-type
7V 13
8text/x-csharp
9END
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/AutotoolsTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/AutotoolsTarget.cs.svn-base
deleted file mode 100644
index 485e4dd..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/AutotoolsTarget.cs.svn-base
+++ /dev/null
@@ -1,1070 +0,0 @@
1#region BSD License
2/*
3
4Copyright (c) 2004 - 2008
5Matthew Holmes (matthew@wildfiregames.com),
6Dan Moorehead (dan05a@gmail.com),
7Dave Hudson (jendave@yahoo.com),
8C.J. Adams-Collier (cjac@colliertech.org),
9
10Redistribution and use in source and binary forms, with or without
11modification, are permitted provided that the following conditions are
12met:
13
14* Redistributions of source code must retain the above copyright
15notice, this list of conditions and the following disclaimer.
16
17* Redistributions in binary form must reproduce the above copyright
18notice, this list of conditions and the following disclaimer in the
19documentation and/or other materials provided with the distribution.
20
21* The name of the author may not be used to endorse or promote
22products derived from this software without specific prior written
23permission.
24
25THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
26IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
29INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
34IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35POSSIBILITY OF SUCH DAMAGE.
36
37*/
38#endregion
39
40#region MIT X11 license
41
42/*
43 Portions of this file authored by Lluis Sanchez Gual
44
45 Copyright (C) 2006 Novell, Inc (http://www.novell.com)
46
47 Permission is hereby granted, free of charge, to any person obtaining
48 a copy of this software and associated documentation files (the
49 "Software"), to deal in the Software without restriction, including
50 without limitation the rights to use, copy, modify, merge, publish,
51 distribute, sublicense, and/or sell copies of the Software, and to
52 permit persons to whom the Software is furnished to do so, subject to
53 the following conditions:
54
55 The above copyright notice and this permission notice shall be
56 included in all copies or substantial portions of the Software.
57
58 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
59 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
61 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
62 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
63 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
64 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
65 */
66
67#endregion
68using System;
69using System.Collections.Generic;
70using System.IO;
71using System.Reflection;
72using System.Text;
73using System.Text.RegularExpressions;
74using System.Xml;
75using System.Xml.Xsl;
76using System.Net;
77using System.Diagnostics;
78
79using Prebuild.Core.Attributes;
80using Prebuild.Core.Interfaces;
81using Prebuild.Core.Nodes;
82using Prebuild.Core.Utilities;
83
84namespace Prebuild.Core.Targets
85{
86 public enum ClrVersion
87 {
88 Default,
89 Net_1_1,
90 Net_2_0
91 }
92
93 public class SystemPackage
94 {
95 string name;
96 string version;
97 string description;
98 string[] assemblies;
99 bool isInternal;
100 ClrVersion targetVersion;
101
102 public void Initialize(string name,
103 string version,
104 string description,
105 string[] assemblies,
106 ClrVersion targetVersion,
107 bool isInternal)
108 {
109 this.isInternal = isInternal;
110 this.name = name;
111 this.version = version;
112 this.assemblies = assemblies;
113 this.description = description;
114 this.targetVersion = targetVersion;
115 }
116
117 public string Name
118 {
119 get { return name; }
120 }
121
122 public string Version
123 {
124 get { return version; }
125 }
126
127 public string Description
128 {
129 get { return description; }
130 }
131
132 public ClrVersion TargetVersion
133 {
134 get { return targetVersion; }
135 }
136
137 // The package is part of the mono SDK
138 public bool IsCorePackage
139 {
140 get { return name == "mono"; }
141 }
142
143 // The package has been registered by an add-in, and is not installed
144 // in the system.
145 public bool IsInternalPackage
146 {
147 get { return isInternal; }
148 }
149
150 public string[] Assemblies
151 {
152 get { return assemblies; }
153 }
154
155 }
156
157
158 /// <summary>
159 ///
160 /// </summary>
161 [Target("autotools")]
162 public class AutotoolsTarget : ITarget
163 {
164 #region Fields
165
166 Kernel m_Kernel;
167 XmlDocument autotoolsDoc;
168 XmlUrlResolver xr;
169 System.Security.Policy.Evidence e;
170 readonly Dictionary<string, SystemPackage> assemblyPathToPackage = new Dictionary<string, SystemPackage>();
171 readonly Dictionary<string, string> assemblyFullNameToPath = new Dictionary<string, string>();
172 readonly Dictionary<string, SystemPackage> packagesHash = new Dictionary<string, SystemPackage>();
173 readonly List<SystemPackage> packages = new List<SystemPackage>();
174
175 #endregion
176
177 #region Private Methods
178
179 private static void mkdirDashP(string dirName)
180 {
181 DirectoryInfo di = new DirectoryInfo(dirName);
182 if (di.Exists)
183 return;
184
185 string parentDirName = System.IO.Path.GetDirectoryName(dirName);
186 DirectoryInfo parentDi = new DirectoryInfo(parentDirName);
187 if (!parentDi.Exists)
188 mkdirDashP(parentDirName);
189
190 di.Create();
191 }
192
193 private static void chkMkDir(string dirName)
194 {
195 System.IO.DirectoryInfo di =
196 new System.IO.DirectoryInfo(dirName);
197
198 if (!di.Exists)
199 di.Create();
200 }
201
202 private void transformToFile(string filename, XsltArgumentList argList, string nodeName)
203 {
204 // Create an XslTransform for this file
205 XslTransform templateTransformer =
206 new XslTransform();
207
208 // Load up the template
209 XmlNode templateNode =
210 autotoolsDoc.SelectSingleNode(nodeName + "/*");
211 templateTransformer.Load(templateNode.CreateNavigator(), xr, e);
212
213 // Create a writer for the transformed template
214 XmlTextWriter templateWriter =
215 new XmlTextWriter(filename, null);
216
217 // Perform transformation, writing the file
218 templateTransformer.Transform
219 (m_Kernel.CurrentDoc, argList, templateWriter, xr);
220 }
221
222 static string NormalizeAsmName(string name)
223 {
224 int i = name.IndexOf(", PublicKeyToken=null");
225 if (i != -1)
226 return name.Substring(0, i).Trim();
227 return name;
228 }
229
230 private void AddAssembly(string assemblyfile, SystemPackage package)
231 {
232 if (!File.Exists(assemblyfile))
233 return;
234
235 try
236 {
237 System.Reflection.AssemblyName an = System.Reflection.AssemblyName.GetAssemblyName(assemblyfile);
238 assemblyFullNameToPath[NormalizeAsmName(an.FullName)] = assemblyfile;
239 assemblyPathToPackage[assemblyfile] = package;
240 }
241 catch
242 {
243 }
244 }
245
246 private static List<string> GetAssembliesWithLibInfo(string line, string file)
247 {
248 List<string> references = new List<string>();
249 List<string> libdirs = new List<string>();
250 List<string> retval = new List<string>();
251 foreach (string piece in line.Split(' '))
252 {
253 if (piece.ToLower().Trim().StartsWith("/r:") || piece.ToLower().Trim().StartsWith("-r:"))
254 {
255 references.Add(ProcessPiece(piece.Substring(3).Trim(), file));
256 }
257 else if (piece.ToLower().Trim().StartsWith("/lib:") || piece.ToLower().Trim().StartsWith("-lib:"))
258 {
259 libdirs.Add(ProcessPiece(piece.Substring(5).Trim(), file));
260 }
261 }
262
263 foreach (string refrnc in references)
264 {
265 foreach (string libdir in libdirs)
266 {
267 if (File.Exists(libdir + Path.DirectorySeparatorChar + refrnc))
268 {
269 retval.Add(libdir + Path.DirectorySeparatorChar + refrnc);
270 }
271 }
272 }
273
274 return retval;
275 }
276
277 private static List<string> GetAssembliesWithoutLibInfo(string line, string file)
278 {
279 List<string> references = new List<string>();
280 foreach (string reference in line.Split(' '))
281 {
282 if (reference.ToLower().Trim().StartsWith("/r:") || reference.ToLower().Trim().StartsWith("-r:"))
283 {
284 string final_ref = reference.Substring(3).Trim();
285 references.Add(ProcessPiece(final_ref, file));
286 }
287 }
288 return references;
289 }
290
291 private static string ProcessPiece(string piece, string pcfile)
292 {
293 int start = piece.IndexOf("${");
294 if (start == -1)
295 return piece;
296
297 int end = piece.IndexOf("}");
298 if (end == -1)
299 return piece;
300
301 string variable = piece.Substring(start + 2, end - start - 2);
302 string interp = GetVariableFromPkgConfig(variable, Path.GetFileNameWithoutExtension(pcfile));
303 return ProcessPiece(piece.Replace("${" + variable + "}", interp), pcfile);
304 }
305
306 private static string GetVariableFromPkgConfig(string var, string pcfile)
307 {
308 ProcessStartInfo psi = new ProcessStartInfo("pkg-config");
309 psi.RedirectStandardOutput = true;
310 psi.UseShellExecute = false;
311 psi.Arguments = String.Format("--variable={0} {1}", var, pcfile);
312 Process p = new Process();
313 p.StartInfo = psi;
314 p.Start();
315 string ret = p.StandardOutput.ReadToEnd().Trim();
316 p.WaitForExit();
317 if (String.IsNullOrEmpty(ret))
318 return String.Empty;
319 return ret;
320 }
321
322 private void ParsePCFile(string pcfile)
323 {
324 // Don't register the package twice
325 string pname = Path.GetFileNameWithoutExtension(pcfile);
326 if (packagesHash.ContainsKey(pname))
327 return;
328
329 List<string> fullassemblies = null;
330 string version = "";
331 string desc = "";
332
333 SystemPackage package = new SystemPackage();
334
335 using (StreamReader reader = new StreamReader(pcfile))
336 {
337 string line;
338 while ((line = reader.ReadLine()) != null)
339 {
340 string lowerLine = line.ToLower();
341 if (lowerLine.StartsWith("libs:") && lowerLine.IndexOf(".dll") != -1)
342 {
343 string choppedLine = line.Substring(5).Trim();
344 if (choppedLine.IndexOf("-lib:") != -1 || choppedLine.IndexOf("/lib:") != -1)
345 {
346 fullassemblies = GetAssembliesWithLibInfo(choppedLine, pcfile);
347 }
348 else
349 {
350 fullassemblies = GetAssembliesWithoutLibInfo(choppedLine, pcfile);
351 }
352 }
353 else if (lowerLine.StartsWith("version:"))
354 {
355 // "version:".Length == 8
356 version = line.Substring(8).Trim();
357 }
358 else if (lowerLine.StartsWith("description:"))
359 {
360 // "description:".Length == 12
361 desc = line.Substring(12).Trim();
362 }
363 }
364 }
365
366 if (fullassemblies == null)
367 return;
368
369 foreach (string assembly in fullassemblies)
370 {
371 AddAssembly(assembly, package);
372 }
373
374 package.Initialize(pname,
375 version,
376 desc,
377 fullassemblies.ToArray(),
378 ClrVersion.Default,
379 false);
380 packages.Add(package);
381 packagesHash[pname] = package;
382 }
383
384 void RegisterSystemAssemblies(string prefix, string version, ClrVersion ver)
385 {
386 SystemPackage package = new SystemPackage();
387 List<string> list = new List<string>();
388
389 string dir = Path.Combine(prefix, version);
390 if (!Directory.Exists(dir))
391 {
392 return;
393 }
394
395 foreach (string assembly in Directory.GetFiles(dir, "*.dll"))
396 {
397 AddAssembly(assembly, package);
398 list.Add(assembly);
399 }
400
401 package.Initialize("mono",
402 version,
403 "The Mono runtime",
404 list.ToArray(),
405 ver,
406 false);
407 packages.Add(package);
408 }
409
410 void RunInitialization()
411 {
412 string versionDir;
413
414 if (Environment.Version.Major == 1)
415 {
416 versionDir = "1.0";
417 }
418 else
419 {
420 versionDir = "2.0";
421 }
422
423 //Pull up assemblies from the installed mono system.
424 string prefix = Path.GetDirectoryName(typeof(int).Assembly.Location);
425
426 if (prefix.IndexOf(Path.Combine("mono", versionDir)) == -1)
427 prefix = Path.Combine(prefix, "mono");
428 else
429 prefix = Path.GetDirectoryName(prefix);
430
431 RegisterSystemAssemblies(prefix, "1.0", ClrVersion.Net_1_1);
432 RegisterSystemAssemblies(prefix, "2.0", ClrVersion.Net_2_0);
433
434 string search_dirs = Environment.GetEnvironmentVariable("PKG_CONFIG_PATH");
435 string libpath = Environment.GetEnvironmentVariable("PKG_CONFIG_LIBPATH");
436
437 if (String.IsNullOrEmpty(libpath))
438 {
439 string path_dirs = Environment.GetEnvironmentVariable("PATH");
440 foreach (string pathdir in path_dirs.Split(Path.PathSeparator))
441 {
442 if (pathdir == null)
443 continue;
444 if (File.Exists(pathdir + Path.DirectorySeparatorChar + "pkg-config"))
445 {
446 libpath = Path.Combine(pathdir, "..");
447 libpath = Path.Combine(libpath, "lib");
448 libpath = Path.Combine(libpath, "pkgconfig");
449 break;
450 }
451 }
452 }
453 search_dirs += Path.PathSeparator + libpath;
454 if (!string.IsNullOrEmpty(search_dirs))
455 {
456 List<string> scanDirs = new List<string>();
457 foreach (string potentialDir in search_dirs.Split(Path.PathSeparator))
458 {
459 if (!scanDirs.Contains(potentialDir))
460 scanDirs.Add(potentialDir);
461 }
462 foreach (string pcdir in scanDirs)
463 {
464 if (pcdir == null)
465 continue;
466
467 if (Directory.Exists(pcdir))
468 {
469 foreach (string pcfile in Directory.GetFiles(pcdir, "*.pc"))
470 {
471 ParsePCFile(pcfile);
472 }
473 }
474 }
475 }
476 }
477
478 private void WriteCombine(SolutionNode solution)
479 {
480 #region "Create Solution directory if it doesn't exist"
481 string solutionDir = Path.Combine(solution.FullPath,
482 Path.Combine("autotools",
483 solution.Name));
484 chkMkDir(solutionDir);
485 #endregion
486
487 #region "Write Solution-level files"
488 XsltArgumentList argList = new XsltArgumentList();
489 argList.AddParam("solutionName", "", solution.Name);
490 // $solutionDir is $rootDir/$solutionName/
491 transformToFile(Path.Combine(solutionDir, "configure.ac"),
492 argList, "/Autotools/SolutionConfigureAc");
493 transformToFile(Path.Combine(solutionDir, "Makefile.am"),
494 argList, "/Autotools/SolutionMakefileAm");
495 transformToFile(Path.Combine(solutionDir, "autogen.sh"),
496 argList, "/Autotools/SolutionAutogenSh");
497 #endregion
498
499 foreach (ProjectNode project in solution.ProjectsTableOrder)
500 {
501 m_Kernel.Log.Write(String.Format("Writing project: {0}",
502 project.Name));
503 WriteProject(solution, project);
504 }
505 }
506
507 private static string FindFileReference(string refName,
508 ProjectNode project)
509 {
510 foreach (ReferencePathNode refPath in project.ReferencePaths)
511 {
512 string fullPath =
513 Helper.MakeFilePath(refPath.Path, refName, "dll");
514
515 if (File.Exists(fullPath)) {
516 return fullPath;
517 }
518 }
519
520 return null;
521 }
522
523 /// <summary>
524 /// Gets the XML doc file.
525 /// </summary>
526 /// <param name="project">The project.</param>
527 /// <param name="conf">The conf.</param>
528 /// <returns></returns>
529 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
530 {
531 if (conf == null)
532 {
533 throw new ArgumentNullException("conf");
534 }
535 if (project == null)
536 {
537 throw new ArgumentNullException("project");
538 }
539 string docFile = (string)conf.Options["XmlDocFile"];
540 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
541 // {
542 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
543 // }
544 return docFile;
545 }
546
547 /// <summary>
548 /// Normalizes the path.
549 /// </summary>
550 /// <param name="path">The path.</param>
551 /// <returns></returns>
552 public static string NormalizePath(string path)
553 {
554 if (path == null)
555 {
556 return "";
557 }
558
559 StringBuilder tmpPath;
560
561 if (Core.Parse.Preprocessor.GetOS() == "Win32")
562 {
563 tmpPath = new StringBuilder(path.Replace('\\', '/'));
564 tmpPath.Replace("/", @"\\");
565 }
566 else
567 {
568 tmpPath = new StringBuilder(path.Replace('\\', '/'));
569 tmpPath = tmpPath.Replace('/', Path.DirectorySeparatorChar);
570 }
571 return tmpPath.ToString();
572 }
573
574 private void WriteProject(SolutionNode solution, ProjectNode project)
575 {
576 string solutionDir = Path.Combine(solution.FullPath, Path.Combine("autotools", solution.Name));
577 string projectDir = Path.Combine(solutionDir, project.Name);
578 string projectVersion = project.Version;
579 bool hasAssemblyConfig = false;
580 chkMkDir(projectDir);
581
582 List<string>
583 compiledFiles = new List<string>(),
584 contentFiles = new List<string>(),
585 embeddedFiles = new List<string>(),
586
587 binaryLibs = new List<string>(),
588 pkgLibs = new List<string>(),
589 systemLibs = new List<string>(),
590 runtimeLibs = new List<string>(),
591
592 extraDistFiles = new List<string>(),
593 localCopyTargets = new List<string>();
594
595 // If there exists a .config file for this assembly, copy
596 // it to the project folder
597
598 // TODO: Support copying .config.osx files
599 // TODO: support processing the .config file for native library deps
600 string projectAssemblyName = project.Name;
601 if (project.AssemblyName != null)
602 projectAssemblyName = project.AssemblyName;
603
604 if (File.Exists(Path.Combine(project.FullPath, projectAssemblyName) + ".dll.config"))
605 {
606 hasAssemblyConfig = true;
607 System.IO.File.Copy(Path.Combine(project.FullPath, projectAssemblyName + ".dll.config"), Path.Combine(projectDir, projectAssemblyName + ".dll.config"), true);
608 extraDistFiles.Add(project.AssemblyName + ".dll.config");
609 }
610
611 foreach (ConfigurationNode conf in project.Configurations)
612 {
613 if (conf.Options.KeyFile != string.Empty)
614 {
615 // Copy snk file into the project's directory
616 // Use the snk from the project directory directly
617 string source = Path.Combine(project.FullPath, conf.Options.KeyFile);
618 string keyFile = conf.Options.KeyFile;
619 Regex re = new Regex(".*/");
620 keyFile = re.Replace(keyFile, "");
621
622 string dest = Path.Combine(projectDir, keyFile);
623 // Tell the user if there's a problem copying the file
624 try
625 {
626 mkdirDashP(System.IO.Path.GetDirectoryName(dest));
627 System.IO.File.Copy(source, dest, true);
628 }
629 catch (System.IO.IOException e)
630 {
631 Console.WriteLine(e.Message);
632 }
633 }
634 }
635
636 // Copy compiled, embedded and content files into the project's directory
637 foreach (string filename in project.Files)
638 {
639 string source = Path.Combine(project.FullPath, filename);
640 string dest = Path.Combine(projectDir, filename);
641
642 if (filename.Contains("AssemblyInfo.cs"))
643 {
644 // If we've got an AssemblyInfo.cs, pull the version number from it
645 string[] sources = { source };
646 string[] args = { "" };
647 Microsoft.CSharp.CSharpCodeProvider cscp =
648 new Microsoft.CSharp.CSharpCodeProvider();
649
650 string tempAssemblyFile = Path.Combine(Path.GetTempPath(), project.Name + "-temp.dll");
651 System.CodeDom.Compiler.CompilerParameters cparam =
652 new System.CodeDom.Compiler.CompilerParameters(args, tempAssemblyFile);
653
654 System.CodeDom.Compiler.CompilerResults cr =
655 cscp.CompileAssemblyFromFile(cparam, sources);
656
657 foreach (System.CodeDom.Compiler.CompilerError error in cr.Errors)
658 Console.WriteLine("Error! '{0}'", error.ErrorText);
659
660 try {
661 string projectFullName = cr.CompiledAssembly.FullName;
662 Regex verRegex = new Regex("Version=([\\d\\.]+)");
663 Match verMatch = verRegex.Match(projectFullName);
664 if (verMatch.Success)
665 projectVersion = verMatch.Groups[1].Value;
666 }catch{
667 Console.WriteLine("Couldn't compile AssemblyInfo.cs");
668 }
669
670 // Clean up the temp file
671 try
672 {
673 if (File.Exists(tempAssemblyFile))
674 File.Delete(tempAssemblyFile);
675 }
676 catch
677 {
678 Console.WriteLine("Error! '{0}'", e);
679 }
680
681 }
682
683 // Tell the user if there's a problem copying the file
684 try
685 {
686 mkdirDashP(System.IO.Path.GetDirectoryName(dest));
687 System.IO.File.Copy(source, dest, true);
688 }
689 catch (System.IO.IOException e)
690 {
691 Console.WriteLine(e.Message);
692 }
693
694 switch (project.Files.GetBuildAction(filename))
695 {
696 case BuildAction.Compile:
697 compiledFiles.Add(filename);
698 break;
699 case BuildAction.Content:
700 contentFiles.Add(filename);
701 extraDistFiles.Add(filename);
702 break;
703 case BuildAction.EmbeddedResource:
704 embeddedFiles.Add(filename);
705 break;
706 }
707 }
708
709 // Set up references
710 for (int refNum = 0; refNum < project.References.Count; refNum++)
711 {
712 ReferenceNode refr = project.References[refNum];
713 Assembly refAssembly = Assembly.LoadWithPartialName(refr.Name);
714
715 /* Determine which pkg-config (.pc) file refers to
716 this assembly */
717
718 SystemPackage package = null;
719
720 if (packagesHash.ContainsKey(refr.Name))
721 {
722 package = packagesHash[refr.Name];
723
724 }
725 else
726 {
727 string assemblyFullName = string.Empty;
728 if (refAssembly != null)
729 assemblyFullName = refAssembly.FullName;
730
731 string assemblyFileName = string.Empty;
732 if (assemblyFullName != string.Empty &&
733 assemblyFullNameToPath.ContainsKey(assemblyFullName)
734 )
735 assemblyFileName =
736 assemblyFullNameToPath[assemblyFullName];
737
738 if (assemblyFileName != string.Empty &&
739 assemblyPathToPackage.ContainsKey(assemblyFileName)
740 )
741 package = assemblyPathToPackage[assemblyFileName];
742
743 }
744
745 /* If we know the .pc file and it is not "mono"
746 (already in the path), add a -pkg: argument */
747
748 if (package != null &&
749 package.Name != "mono" &&
750 !pkgLibs.Contains(package.Name)
751 )
752 pkgLibs.Add(package.Name);
753
754 string fileRef =
755 FindFileReference(refr.Name, (ProjectNode)refr.Parent);
756
757 if (refr.LocalCopy ||
758 solution.ProjectsTable.ContainsKey(refr.Name) ||
759 fileRef != null ||
760 refr.Path != null
761 )
762 {
763
764 /* Attempt to copy the referenced lib to the
765 project's directory */
766
767 string filename = refr.Name + ".dll";
768 string source = filename;
769 if (refr.Path != null)
770 source = Path.Combine(refr.Path, source);
771 source = Path.Combine(project.FullPath, source);
772 string dest = Path.Combine(projectDir, filename);
773
774 /* Since we depend on this binary dll to build, we
775 * will add a compile- time dependency on the
776 * copied dll, and add the dll to the list of
777 * files distributed with this package
778 */
779
780 binaryLibs.Add(refr.Name + ".dll");
781 extraDistFiles.Add(refr.Name + ".dll");
782
783 // TODO: Support copying .config.osx files
784 // TODO: Support for determining native dependencies
785 if (File.Exists(source + ".config"))
786 {
787 System.IO.File.Copy(source + ".config", Path.GetDirectoryName(dest), true);
788 extraDistFiles.Add(refr.Name + ".dll.config");
789 }
790
791 try
792 {
793 System.IO.File.Copy(source, dest, true);
794 }
795 catch (System.IO.IOException)
796 {
797 if (solution.ProjectsTable.ContainsKey(refr.Name)){
798
799 /* If an assembly is referenced, marked for
800 * local copy, in the list of projects for
801 * this solution, but does not exist, put a
802 * target into the Makefile.am to build the
803 * assembly and copy it to this project's
804 * directory
805 */
806
807 ProjectNode sourcePrj =
808 ((solution.ProjectsTable[refr.Name]));
809
810 string target =
811 String.Format("{0}:\n" +
812 "\t$(MAKE) -C ../{1}\n" +
813 "\tln ../{2}/$@ $@\n",
814 filename,
815 sourcePrj.Name,
816 sourcePrj.Name );
817
818 localCopyTargets.Add(target);
819 }
820 }
821 }
822 else if( !pkgLibs.Contains(refr.Name) )
823 {
824 // Else, let's assume it's in the GAC or the lib path
825 string assemName = string.Empty;
826 int index = refr.Name.IndexOf(",");
827
828 if (index > 0)
829 assemName = refr.Name.Substring(0, index);
830 else
831 assemName = refr.Name;
832
833 m_Kernel.Log.Write(String.Format(
834 "Warning: Couldn't find an appropriate assembly " +
835 "for reference:\n'{0}'", refr.Name
836 ));
837 systemLibs.Add(assemName);
838 }
839 }
840
841 const string lineSep = " \\\n\t";
842 string compiledFilesString = string.Empty;
843 if (compiledFiles.Count > 0)
844 compiledFilesString =
845 lineSep + string.Join(lineSep, compiledFiles.ToArray());
846
847 string embeddedFilesString = "";
848 if (embeddedFiles.Count > 0)
849 embeddedFilesString =
850 lineSep + string.Join(lineSep, embeddedFiles.ToArray());
851
852 string contentFilesString = "";
853 if (contentFiles.Count > 0)
854 contentFilesString =
855 lineSep + string.Join(lineSep, contentFiles.ToArray());
856
857 string extraDistFilesString = "";
858 if (extraDistFiles.Count > 0)
859 extraDistFilesString =
860 lineSep + string.Join(lineSep, extraDistFiles.ToArray());
861
862 string pkgLibsString = "";
863 if (pkgLibs.Count > 0)
864 pkgLibsString =
865 lineSep + string.Join(lineSep, pkgLibs.ToArray());
866
867 string binaryLibsString = "";
868 if (binaryLibs.Count > 0)
869 binaryLibsString =
870 lineSep + string.Join(lineSep, binaryLibs.ToArray());
871
872 string systemLibsString = "";
873 if (systemLibs.Count > 0)
874 systemLibsString =
875 lineSep + string.Join(lineSep, systemLibs.ToArray());
876
877 string localCopyTargetsString = "";
878 if (localCopyTargets.Count > 0)
879 localCopyTargetsString =
880 string.Join("\n", localCopyTargets.ToArray());
881
882 string monoPath = "";
883 foreach (string runtimeLib in runtimeLibs)
884 {
885 monoPath += ":`pkg-config --variable=libdir " + runtimeLib + "`";
886 }
887
888 // Add the project name to the list of transformation
889 // parameters
890 XsltArgumentList argList = new XsltArgumentList();
891 argList.AddParam("projectName", "", project.Name);
892 argList.AddParam("solutionName", "", solution.Name);
893 argList.AddParam("assemblyName", "", projectAssemblyName);
894 argList.AddParam("compiledFiles", "", compiledFilesString);
895 argList.AddParam("embeddedFiles", "", embeddedFilesString);
896 argList.AddParam("contentFiles", "", contentFilesString);
897 argList.AddParam("extraDistFiles", "", extraDistFilesString);
898 argList.AddParam("pkgLibs", "", pkgLibsString);
899 argList.AddParam("binaryLibs", "", binaryLibsString);
900 argList.AddParam("systemLibs", "", systemLibsString);
901 argList.AddParam("monoPath", "", monoPath);
902 argList.AddParam("localCopyTargets", "", localCopyTargetsString);
903 argList.AddParam("projectVersion", "", projectVersion);
904 argList.AddParam("hasAssemblyConfig", "", hasAssemblyConfig ? "true" : "");
905
906 // Transform the templates
907 transformToFile(Path.Combine(projectDir, "configure.ac"), argList, "/Autotools/ProjectConfigureAc");
908 transformToFile(Path.Combine(projectDir, "Makefile.am"), argList, "/Autotools/ProjectMakefileAm");
909 transformToFile(Path.Combine(projectDir, "autogen.sh"), argList, "/Autotools/ProjectAutogenSh");
910
911 if (project.Type == Core.Nodes.ProjectType.Library)
912 transformToFile(Path.Combine(projectDir, project.Name + ".pc.in"), argList, "/Autotools/ProjectPcIn");
913 if (project.Type == Core.Nodes.ProjectType.Exe || project.Type == Core.Nodes.ProjectType.WinExe)
914 transformToFile(Path.Combine(projectDir, project.Name.ToLower() + ".in"), argList, "/Autotools/ProjectWrapperScriptIn");
915 }
916
917 private void CleanProject(ProjectNode project)
918 {
919 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
920 string projectFile = Helper.MakeFilePath(project.FullPath, "Include", "am");
921 Helper.DeleteIfExists(projectFile);
922 }
923
924 private void CleanSolution(SolutionNode solution)
925 {
926 m_Kernel.Log.Write("Cleaning Autotools make files for", solution.Name);
927
928 string slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am");
929 Helper.DeleteIfExists(slnFile);
930
931 slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "in");
932 Helper.DeleteIfExists(slnFile);
933
934 slnFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac");
935 Helper.DeleteIfExists(slnFile);
936
937 slnFile = Helper.MakeFilePath(solution.FullPath, "configure");
938 Helper.DeleteIfExists(slnFile);
939
940 slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile");
941 Helper.DeleteIfExists(slnFile);
942
943 foreach (ProjectNode project in solution.Projects)
944 {
945 CleanProject(project);
946 }
947
948 m_Kernel.Log.Write("");
949 }
950
951 #endregion
952
953 #region ITarget Members
954
955 /// <summary>
956 /// Writes the specified kern.
957 /// </summary>
958 /// <param name="kern">The kern.</param>
959 public void Write(Kernel kern)
960 {
961 if (kern == null)
962 {
963 throw new ArgumentNullException("kern");
964 }
965 m_Kernel = kern;
966 m_Kernel.Log.Write("Parsing system pkg-config files");
967 RunInitialization();
968
969 const string streamName = "autotools.xml";
970 string fqStreamName = String.Format("Prebuild.data.{0}",
971 streamName
972 );
973
974 // Retrieve stream for the autotools template XML
975 Stream autotoolsStream = Assembly.GetExecutingAssembly()
976 .GetManifestResourceStream(fqStreamName);
977
978 if(autotoolsStream == null) {
979
980 /*
981 * try without the default namespace prepended, in
982 * case prebuild.exe assembly was compiled with
983 * something other than Visual Studio .NET
984 */
985
986 autotoolsStream = Assembly.GetExecutingAssembly()
987 .GetManifestResourceStream(streamName);
988 if(autotoolsStream == null){
989 string errStr =
990 String.Format("Could not find embedded resource file:\n" +
991 "'{0}' or '{1}'",
992 streamName, fqStreamName
993 );
994
995 m_Kernel.Log.Write(errStr);
996
997 throw new System.Reflection.TargetException(errStr);
998 }
999 }
1000
1001 // Create an XML URL Resolver with default credentials
1002 xr = new System.Xml.XmlUrlResolver();
1003 xr.Credentials = CredentialCache.DefaultCredentials;
1004
1005 // Create a default evidence - no need to limit access
1006 e = new System.Security.Policy.Evidence();
1007
1008 // Load the autotools XML
1009 autotoolsDoc = new XmlDocument();
1010 autotoolsDoc.Load(autotoolsStream);
1011
1012 /* rootDir is the filesystem location where the Autotools
1013 * build tree will be created - for now we'll make it
1014 * $PWD/autotools
1015 */
1016
1017 string pwd = Directory.GetCurrentDirectory();
1018 //string pwd = System.Environment.GetEnvironmentVariable("PWD");
1019 //if (pwd.Length != 0)
1020 //{
1021 string rootDir = Path.Combine(pwd, "autotools");
1022 //}
1023 //else
1024 //{
1025 // pwd = Assembly.GetExecutingAssembly()
1026 //}
1027 chkMkDir(rootDir);
1028
1029 foreach (SolutionNode solution in kern.Solutions)
1030 {
1031 m_Kernel.Log.Write(String.Format("Writing solution: {0}",
1032 solution.Name));
1033 WriteCombine(solution);
1034 }
1035 m_Kernel = null;
1036 }
1037
1038 /// <summary>
1039 /// Cleans the specified kern.
1040 /// </summary>
1041 /// <param name="kern">The kern.</param>
1042 public virtual void Clean(Kernel kern)
1043 {
1044 if (kern == null)
1045 {
1046 throw new ArgumentNullException("kern");
1047 }
1048 m_Kernel = kern;
1049 foreach (SolutionNode sol in kern.Solutions)
1050 {
1051 CleanSolution(sol);
1052 }
1053 m_Kernel = null;
1054 }
1055
1056 /// <summary>
1057 /// Gets the name.
1058 /// </summary>
1059 /// <value>The name.</value>
1060 public string Name
1061 {
1062 get
1063 {
1064 return "autotools";
1065 }
1066 }
1067
1068 #endregion
1069 }
1070}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/DebugTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/DebugTarget.cs.svn-base
deleted file mode 100644
index 3494c30..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/DebugTarget.cs.svn-base
+++ /dev/null
@@ -1,102 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26#region CVS Information
27/*
28 * $Source$
29 * $Author$
30 * $Date$
31 * $Revision$
32 */
33#endregion
34
35using System;
36
37using Prebuild.Core.Attributes;
38using Prebuild.Core.Interfaces;
39using Prebuild.Core.Nodes;
40
41#if (DEBUG && _DEBUG_TARGET)
42namespace Prebuild.Core.Targets
43{
44 [Target("debug")]
45 public class DebugTarget : ITarget
46 {
47#region Fields
48
49 private Kernel m_Kernel = null;
50
51#endregion
52
53#region ITarget Members
54
55 public void Write()
56 {
57 foreach(SolutionNode s in m_Kernel.Solutions)
58 {
59 Console.WriteLine("Solution [ {0}, {1} ]", s.Name, s.Path);
60 foreach(string file in s.Files)
61{
62 Console.WriteLine("\tFile [ {0} ]", file);
63}
64
65 foreach(ProjectNode proj in s.Projects)
66 {
67 Console.WriteLine("\tProject [ {0}, {1}. {2} ]", proj.Name, proj.Path, proj.Language);
68 foreach(string file in proj.Files)
69 Console.WriteLine("\t\tFile [ {0} ]", file);
70 }
71 }
72 }
73
74 public void Clean()
75 {
76 Console.WriteLine("Not implemented");
77 }
78
79 public string Name
80 {
81 get
82 {
83 return "debug";
84 }
85 }
86
87 public Kernel Kernel
88 {
89 get
90 {
91 return m_Kernel;
92 }
93 set
94 {
95 m_Kernel = value;
96 }
97 }
98
99#endregion
100 }
101}
102#endif
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/MakefileTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/MakefileTarget.cs.svn-base
deleted file mode 100644
index 54046dd..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/MakefileTarget.cs.svn-base
+++ /dev/null
@@ -1,469 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004 Crestez Leonard (cleonard@go.ro)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Text.RegularExpressions;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 [Target("makefile")]
38 public class MakefileTarget : ITarget
39 {
40 #region Fields
41
42 private Kernel m_Kernel = null;
43
44 #endregion
45
46 #region Private Methods
47
48 // This converts a path relative to the path of a project to
49 // a path relative to the solution path.
50 private string NicePath(ProjectNode proj, string path)
51 {
52 string res;
53 SolutionNode solution = (SolutionNode)proj.Parent;
54 res = Path.Combine(Helper.NormalizePath(proj.FullPath, '/'), Helper.NormalizePath(path, '/'));
55 res = Helper.NormalizePath(res, '/');
56 res = res.Replace("/./", "/");
57 while (res.IndexOf("/../") >= 0)
58 {
59 int a = res.IndexOf("/../");
60 int b = res.LastIndexOf("/", a - 1);
61 res = res.Remove(b, a - b + 3);
62 }
63 res = Helper.MakePathRelativeTo(solution.FullPath, res);
64 if (res.StartsWith("./"))
65 res = res.Substring(2, res.Length - 2);
66 res = Helper.NormalizePath(res, '/');
67 return res;
68 }
69
70 private void WriteProjectFiles(StreamWriter f, SolutionNode solution, ProjectNode project)
71 {
72 // Write list of source code files
73 f.WriteLine("SOURCES_{0} = \\", project.Name);
74 foreach (string file in project.Files)
75 if (project.Files.GetBuildAction(file) == BuildAction.Compile)
76 f.WriteLine("\t{0} \\", NicePath(project, file));
77 f.WriteLine();
78
79 // Write list of resource files
80 f.WriteLine("RESOURCES_{0} = \\", project.Name);
81 foreach (string file in project.Files)
82 if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource)
83 {
84 string path = NicePath(project, file);
85 f.WriteLine("\t-resource:{0},{1} \\", path, Path.GetFileName(path));
86 }
87 f.WriteLine();
88
89 // There's also Content and None in BuildAction.
90 // What am I supposed to do with that?
91 }
92
93 private string FindFileReference(string refName, ProjectNode project)
94 {
95 foreach (ReferencePathNode refPath in project.ReferencePaths)
96 {
97 string fullPath = NicePath(project, Helper.MakeFilePath(refPath.Path, refName, "dll"));
98 if (File.Exists(fullPath))
99 return fullPath;
100 }
101 return null;
102 }
103
104 private void WriteProjectReferences(StreamWriter f, SolutionNode solution, ProjectNode project)
105 {
106 f.WriteLine("REFERENCES_{0} = \\", project.Name);
107 foreach (ReferenceNode refr in project.References)
108 {
109 string path;
110 // Project references change with configurations.
111 if (solution.ProjectsTable.ContainsKey(refr.Name))
112 continue;
113 path = FindFileReference(refr.Name, project);
114 if (path != null)
115 f.WriteLine("\t-r:{0} \\", path);
116 else
117 f.WriteLine("\t-r:{0} \\", refr.Name);
118 }
119 f.WriteLine();
120 }
121
122 private void WriteProjectDependencies(StreamWriter f, SolutionNode solution, ProjectNode project)
123 {
124 f.WriteLine("DEPENDENCIES_{0} = \\", project.Name);
125 f.WriteLine("\t$(SOURCES_{0}) \\", project.Name);
126 foreach (string file in project.Files)
127 if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource)
128 f.WriteLine("\t{0} \\", NicePath(project, file));
129 f.WriteLine();
130 }
131
132 private string ProjectTypeToExtension(ProjectType t)
133 {
134 if (t == ProjectType.Exe || t == ProjectType.WinExe)
135 {
136 return "exe";
137 }
138 else if (t == ProjectType.Library)
139 {
140 return "dll";
141 }
142 else
143 {
144 throw new FatalException("Bad ProjectType: {0}", t);
145 }
146 }
147
148 private string ProjectTypeToTarget(ProjectType t)
149 {
150 if (t == ProjectType.Exe)
151 {
152 return "exe";
153 }
154 else if (t == ProjectType.WinExe)
155 {
156 return "winexe";
157 }
158 else if (t == ProjectType.Library)
159 {
160 return "library";
161 }
162 else
163 {
164 throw new FatalException("Bad ProjectType: {0}", t);
165 }
166 }
167
168 private string ProjectOutput(ProjectNode project, ConfigurationNode config)
169 {
170 string filepath;
171 filepath = Helper.MakeFilePath((string)config.Options["OutputPath"],
172 project.AssemblyName, ProjectTypeToExtension(project.Type));
173 return NicePath(project, filepath);
174 }
175
176 // Returns true if two configs in one project have the same output.
177 private bool ProjectClashes(ProjectNode project)
178 {
179 foreach (ConfigurationNode conf1 in project.Configurations)
180 foreach (ConfigurationNode conf2 in project.Configurations)
181 if (ProjectOutput(project, conf1) == ProjectOutput(project, conf2) && conf1 != conf2)
182 {
183 m_Kernel.Log.Write("Warning: Configurations {0} and {1} for project {2} output the same file",
184 conf1.Name, conf2.Name, project.Name);
185 m_Kernel.Log.Write("Warning: I'm going to use some timestamps(extra empty files).");
186 return true;
187 }
188 return false;
189 }
190
191 private void WriteProject(StreamWriter f, SolutionNode solution, ProjectNode project)
192 {
193 f.WriteLine("# This is for project {0}", project.Name);
194 f.WriteLine();
195
196 WriteProjectFiles(f, solution, project);
197 WriteProjectReferences(f, solution, project);
198 WriteProjectDependencies(f, solution, project);
199
200 bool clash = ProjectClashes(project);
201
202 foreach (ConfigurationNode conf in project.Configurations)
203 {
204 string outpath = ProjectOutput(project, conf);
205 string filesToClean = outpath;
206
207 if (clash)
208 {
209 f.WriteLine("{0}-{1}: .{0}-{1}-timestamp", project.Name, conf.Name);
210 f.WriteLine();
211 f.Write(".{0}-{1}-timestamp: $(DEPENDENCIES_{0})", project.Name, conf.Name);
212 }
213 else
214 {
215 f.WriteLine("{0}-{1}: {2}", project.Name, conf.Name, outpath);
216 f.WriteLine();
217 f.Write("{2}: $(DEPENDENCIES_{0})", project.Name, conf.Name, outpath);
218 }
219 // Dependencies on other projects.
220 foreach (ReferenceNode refr in project.References)
221 if (solution.ProjectsTable.ContainsKey(refr.Name))
222 {
223 ProjectNode refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
224 if (ProjectClashes(refProj))
225 f.Write(" .{0}-{1}-timestamp", refProj.Name, conf.Name);
226 else
227 f.Write(" {0}", ProjectOutput(refProj, conf));
228 }
229 f.WriteLine();
230
231 // make directory for output.
232 if (Path.GetDirectoryName(outpath) != "")
233 {
234 f.WriteLine("\tmkdir -p {0}", Path.GetDirectoryName(outpath));
235 }
236 // mcs command line.
237 f.Write("\tgmcs", project.Name);
238 f.Write(" -warn:{0}", conf.Options["WarningLevel"]);
239 if ((bool)conf.Options["DebugInformation"])
240 f.Write(" -debug");
241 if ((bool)conf.Options["AllowUnsafe"])
242 f.Write(" -unsafe");
243 if ((bool)conf.Options["CheckUnderflowOverflow"])
244 f.Write(" -checked");
245 if (project.StartupObject != "")
246 f.Write(" -main:{0}", project.StartupObject);
247 if ((string)conf.Options["CompilerDefines"] != "")
248 {
249 f.Write(" -define:\"{0}\"", conf.Options["CompilerDefines"]);
250 }
251
252 f.Write(" -target:{0} -out:{1}", ProjectTypeToTarget(project.Type), outpath);
253
254 // Build references to other projects. Now that sux.
255 // We have to reference the other project in the same conf.
256 foreach (ReferenceNode refr in project.References)
257 if (solution.ProjectsTable.ContainsKey(refr.Name))
258 {
259 ProjectNode refProj;
260 refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
261 f.Write(" -r:{0}", ProjectOutput(refProj, conf));
262 }
263
264 f.Write(" $(REFERENCES_{0})", project.Name);
265 f.Write(" $(RESOURCES_{0})", project.Name);
266 f.Write(" $(SOURCES_{0})", project.Name);
267 f.WriteLine();
268
269 // Copy references with localcopy.
270 foreach (ReferenceNode refr in project.References)
271 if (refr.LocalCopy)
272 {
273 string outPath, srcPath, destPath;
274 outPath = Helper.NormalizePath((string)conf.Options["OutputPath"]);
275 if (solution.ProjectsTable.ContainsKey(refr.Name))
276 {
277 ProjectNode refProj;
278 refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
279 srcPath = ProjectOutput(refProj, conf);
280 destPath = Path.Combine(outPath, Path.GetFileName(srcPath));
281 destPath = NicePath(project, destPath);
282 if (srcPath != destPath)
283 {
284 f.WriteLine("\tcp -f {0} {1}", srcPath, destPath);
285 filesToClean += " " + destPath;
286 }
287 continue;
288 }
289 srcPath = FindFileReference(refr.Name, project);
290 if (srcPath != null)
291 {
292 destPath = Path.Combine(outPath, Path.GetFileName(srcPath));
293 destPath = NicePath(project, destPath);
294 f.WriteLine("\tcp -f {0} {1}", srcPath, destPath);
295 filesToClean += " " + destPath;
296 }
297 }
298
299 if (clash)
300 {
301 filesToClean += String.Format(" .{0}-{1}-timestamp", project.Name, conf.Name);
302 f.WriteLine("\ttouch .{0}-{1}-timestamp", project.Name, conf.Name);
303 f.Write("\trm -rf");
304 foreach (ConfigurationNode otherConf in project.Configurations)
305 if (otherConf != conf)
306 f.WriteLine(" .{0}-{1}-timestamp", project.Name, otherConf.Name);
307 f.WriteLine();
308 }
309 f.WriteLine();
310 f.WriteLine("{0}-{1}-clean:", project.Name, conf.Name);
311 f.WriteLine("\trm -rf {0}", filesToClean);
312 f.WriteLine();
313 }
314 }
315
316 private void WriteIntro(StreamWriter f, SolutionNode solution)
317 {
318 f.WriteLine("# Makefile for {0} generated by Prebuild ( http://dnpb.sf.net )", solution.Name);
319 f.WriteLine("# Do not edit.");
320 f.WriteLine("#");
321
322 f.Write("# Configurations:");
323 foreach (ConfigurationNode conf in solution.Configurations)
324 f.Write(" {0}", conf.Name);
325 f.WriteLine();
326
327 f.WriteLine("# Projects:");
328 foreach (ProjectNode proj in solution.Projects)
329 f.WriteLine("#\t{0}", proj.Name);
330
331 f.WriteLine("#");
332 f.WriteLine("# Building:");
333 f.WriteLine("#\t\"make\" to build everything under the default(first) configuration");
334 f.WriteLine("#\t\"make CONF\" to build every project under configuration CONF");
335 f.WriteLine("#\t\"make PROJ\" to build project PROJ under the default(first) configuration");
336 f.WriteLine("#\t\"make PROJ-CONF\" to build project PROJ under configuration CONF");
337 f.WriteLine("#");
338 f.WriteLine("# Cleaning (removing results of build):");
339 f.WriteLine("#\t\"make clean\" to clean everything, that's what you probably want");
340 f.WriteLine("#\t\"make CONF\" to clean everything for a configuration");
341 f.WriteLine("#\t\"make PROJ\" to clean everything for a project");
342 f.WriteLine("#\t\"make PROJ-CONF\" to clea project PROJ under configuration CONF");
343 f.WriteLine();
344 }
345
346 private void WritePhony(StreamWriter f, SolutionNode solution)
347 {
348 string defconf = "";
349 foreach (ConfigurationNode conf in solution.Configurations)
350 {
351 defconf = conf.Name;
352 break;
353 }
354
355 f.Write(".PHONY: all");
356 foreach (ProjectNode proj in solution.Projects)
357 f.Write(" {0} {0}-clean", proj.Name);
358 foreach (ConfigurationNode conf in solution.Configurations)
359 f.Write(" {0} {0}-clean", conf.Name);
360 foreach (ProjectNode proj in solution.Projects)
361 foreach (ConfigurationNode conf in solution.Configurations)
362 f.Write(" {0}-{1} {0}-{1}-clean", proj.Name, conf.Name);
363 f.WriteLine();
364 f.WriteLine();
365
366 f.WriteLine("all: {0}", defconf);
367 f.WriteLine();
368
369 f.Write("clean:");
370 foreach (ConfigurationNode conf in solution.Configurations)
371 f.Write(" {0}-clean", conf.Name);
372 f.WriteLine();
373 f.WriteLine();
374
375 foreach (ConfigurationNode conf in solution.Configurations)
376 {
377 f.Write("{0}: ", conf.Name);
378 foreach (ProjectNode proj in solution.Projects)
379 f.Write(" {0}-{1}", proj.Name, conf.Name);
380 f.WriteLine();
381 f.WriteLine();
382
383 f.Write("{0}-clean: ", conf.Name);
384 foreach (ProjectNode proj in solution.Projects)
385 f.Write(" {0}-{1}-clean", proj.Name, conf.Name);
386 f.WriteLine();
387 f.WriteLine();
388 }
389
390 foreach (ProjectNode proj in solution.Projects)
391 {
392 f.WriteLine("{0}: {0}-{1}", proj.Name, defconf);
393 f.WriteLine();
394
395 f.Write("{0}-clean:", proj.Name);
396 foreach (ConfigurationNode conf in proj.Configurations)
397 f.Write(" {0}-{1}-clean", proj.Name, conf.Name);
398 f.WriteLine();
399 f.WriteLine();
400 }
401 }
402
403 private void WriteSolution(SolutionNode solution)
404 {
405 m_Kernel.Log.Write("Creating makefile for {0}", solution.Name);
406 m_Kernel.CurrentWorkingDirectory.Push();
407
408 string file = "Makefile";// Helper.MakeFilePath(solution.FullPath, solution.Name, "make");
409 StreamWriter f = new StreamWriter(file);
410
411 Helper.SetCurrentDir(Path.GetDirectoryName(file));
412
413 using (f)
414 {
415 WriteIntro(f, solution);
416 WritePhony(f, solution);
417
418 foreach (ProjectNode project in solution.Projects)
419 {
420 m_Kernel.Log.Write("...Creating Project: {0}", project.Name);
421 WriteProject(f, solution, project);
422 }
423 }
424
425 m_Kernel.Log.Write("");
426 m_Kernel.CurrentWorkingDirectory.Pop();
427 }
428
429 private void CleanSolution(SolutionNode solution)
430 {
431 m_Kernel.Log.Write("Cleaning makefile for {0}", solution.Name);
432
433 string file = Helper.MakeFilePath(solution.FullPath, solution.Name, "make");
434 Helper.DeleteIfExists(file);
435
436 m_Kernel.Log.Write("");
437 }
438
439 #endregion
440
441 #region ITarget Members
442
443 public void Write(Kernel kern)
444 {
445 m_Kernel = kern;
446 foreach (SolutionNode solution in kern.Solutions)
447 WriteSolution(solution);
448 m_Kernel = null;
449 }
450
451 public virtual void Clean(Kernel kern)
452 {
453 m_Kernel = kern;
454 foreach (SolutionNode sol in kern.Solutions)
455 CleanSolution(sol);
456 m_Kernel = null;
457 }
458
459 public string Name
460 {
461 get
462 {
463 return "makefile";
464 }
465 }
466
467 #endregion
468 }
469}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/MonoDevelopTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/MonoDevelopTarget.cs.svn-base
deleted file mode 100644
index ea6d2c2..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/MonoDevelopTarget.cs.svn-base
+++ /dev/null
@@ -1,515 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Reflection;
29using System.Text.RegularExpressions;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Nodes;
34using Prebuild.Core.Utilities;
35
36namespace Prebuild.Core.Targets
37{
38 /// <summary>
39 ///
40 /// </summary>
41 [Target("monodev")]
42 public class MonoDevelopTarget : ITarget
43 {
44 #region Fields
45
46 private Kernel m_Kernel;
47
48 #endregion
49
50 #region Private Methods
51
52 private static string PrependPath(string path)
53 {
54 string tmpPath = Helper.NormalizePath(path, '/');
55 Regex regex = new Regex(@"(\w):/(\w+)");
56 Match match = regex.Match(tmpPath);
57 if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
58 {
59 tmpPath = Helper.NormalizePath(tmpPath);
60 }
61 else
62 {
63 tmpPath = Helper.NormalizePath("./" + tmpPath);
64 }
65
66 return tmpPath;
67 }
68
69 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
70 {
71 string ret = "<ProjectReference type=\"";
72 if(solution.ProjectsTable.ContainsKey(refr.Name))
73 {
74 ret += "Project\"";
75 ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\" refto=\"" + refr.Name + "\" />";
76 }
77 else
78 {
79 ProjectNode project = (ProjectNode)refr.Parent;
80 string fileRef = FindFileReference(refr.Name, project);
81
82 if(refr.Path != null || fileRef != null)
83 {
84 ret += "Assembly\" refto=\"";
85
86 string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
87
88 ret += finalPath;
89 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
90 return ret;
91 }
92
93 ret += "Gac\"";
94 ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\"";
95 ret += " refto=\"";
96 try
97 {
98 /*
99 Day changed to 28 Mar 2007
100 ...
101 08:09 < cj> is there anything that replaces Assembly.LoadFromPartialName() ?
102 08:09 < jonp> no
103 08:10 < jonp> in their infinite wisdom [sic], microsoft decided that the
104 ability to load any assembly version by-name was an inherently
105 bad idea
106 08:11 < cj> I'm thinking of a bunch of four-letter words right now...
107 08:11 < cj> security through making it difficult for the developer!!!
108 08:12 < jonp> just use the Obsolete API
109 08:12 < jonp> it should still work
110 08:12 < cj> alrighty.
111 08:12 < jonp> you just get warnings when using it
112 */
113 Assembly assem = Assembly.LoadWithPartialName(refr.Name);
114 ret += assem.FullName;
115 //ret += refr.Name;
116 }
117 catch (System.NullReferenceException e)
118 {
119 e.ToString();
120 ret += refr.Name;
121 }
122 ret += "\" />";
123 }
124
125 return ret;
126 }
127
128 private static string FindFileReference(string refName, ProjectNode project)
129 {
130 foreach(ReferencePathNode refPath in project.ReferencePaths)
131 {
132 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
133
134 if(File.Exists(fullPath))
135 {
136 return fullPath;
137 }
138 }
139
140 return null;
141 }
142
143 /// <summary>
144 /// Gets the XML doc file.
145 /// </summary>
146 /// <param name="project">The project.</param>
147 /// <param name="conf">The conf.</param>
148 /// <returns></returns>
149 public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
150 {
151 if( conf == null )
152 {
153 throw new ArgumentNullException("conf");
154 }
155 if( project == null )
156 {
157 throw new ArgumentNullException("project");
158 }
159 string docFile = (string)conf.Options["XmlDocFile"];
160 if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
161 {
162 return "False";
163 }
164 return "True";
165 }
166
167 private void WriteProject(SolutionNode solution, ProjectNode project)
168 {
169 string csComp = "Mcs";
170 string netRuntime = "Mono";
171 if(project.Runtime == ClrRuntime.Microsoft)
172 {
173 csComp = "Csc";
174 netRuntime = "MsNet";
175 }
176
177 string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
178 StreamWriter ss = new StreamWriter(projFile);
179
180 m_Kernel.CurrentWorkingDirectory.Push();
181 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
182
183 using(ss)
184 {
185 ss.WriteLine(
186 "<Project name=\"{0}\" description=\"\" standardNamespace=\"{1}\" newfilesearch=\"None\" enableviewstate=\"True\" fileversion=\"2.0\" language=\"C#\" clr-version=\"Net_2_0\" ctype=\"DotNetProject\">",
187 project.Name,
188 project.RootNamespace
189 );
190
191 int count = 0;
192
193 ss.WriteLine(" <Configurations active=\"{0}\">", solution.ActiveConfig);
194
195 foreach(ConfigurationNode conf in project.Configurations)
196 {
197 ss.WriteLine(" <Configuration name=\"{0}\" ctype=\"DotNetProjectConfiguration\">", conf.Name);
198 ss.Write(" <Output");
199 ss.Write(" directory=\"{0}\"", Helper.EndPath(Helper.NormalizePath(".\\" + conf.Options["OutputPath"].ToString())));
200 ss.Write(" assembly=\"{0}\"", project.AssemblyName);
201 ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
202 //ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
203 //ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
204 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
205 {
206 ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
207 }
208 else
209 {
210 ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
211 }
212 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
213 {
214 ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
215 }
216 else
217 {
218 ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
219 }
220 ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
221 ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
222 ss.WriteLine(" />");
223
224 ss.Write(" <Build");
225 ss.Write(" debugmode=\"True\"");
226 if (project.Type == ProjectType.WinExe)
227 {
228 ss.Write(" target=\"{0}\"", ProjectType.Exe.ToString());
229 }
230 else
231 {
232 ss.Write(" target=\"{0}\"", project.Type);
233 }
234 ss.WriteLine(" />");
235
236 ss.Write(" <Execution");
237 ss.Write(" runwithwarnings=\"{0}\"", !conf.Options.WarningsAsErrors);
238 ss.Write(" consolepause=\"True\"");
239 ss.Write(" runtime=\"{0}\"", netRuntime);
240 ss.Write(" clr-version=\"Net_2_0\"");
241 ss.WriteLine(" />");
242
243 ss.Write(" <CodeGeneration");
244 ss.Write(" compiler=\"{0}\"", csComp);
245 ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
246 ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
247 ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
248 ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
249 ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
250 ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
251 ss.Write(" mainclass=\"{0}\"", project.StartupObject);
252 ss.Write(" target=\"{0}\"", project.Type);
253 ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
254 ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
255 ss.Write(" win32Icon=\"{0}\"", project.AppIcon);
256 ss.Write(" ctype=\"CSharpCompilerParameters\"");
257 ss.WriteLine(" />");
258 ss.WriteLine(" </Configuration>");
259
260 count++;
261 }
262 ss.WriteLine(" </Configurations>");
263
264 ss.Write(" <DeploymentInformation");
265 ss.Write(" target=\"\"");
266 ss.Write(" script=\"\"");
267 ss.Write(" strategy=\"File\"");
268 ss.WriteLine(">");
269 ss.WriteLine(" <excludeFiles />");
270 ss.WriteLine(" </DeploymentInformation>");
271
272 ss.WriteLine(" <Contents>");
273 foreach(string file in project.Files)
274 {
275 string buildAction;
276 string dependson = "";
277 string resource_id = "";
278 string copyToOutput = "";
279
280 switch(project.Files.GetBuildAction(file))
281 {
282 case BuildAction.None:
283 buildAction = "Nothing";
284 break;
285
286 case BuildAction.Content:
287 buildAction = "Exclude";
288 break;
289
290 case BuildAction.EmbeddedResource:
291 buildAction = "EmbedAsResource";
292 break;
293
294 default:
295 buildAction = "Compile";
296 break;
297 }
298
299 if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never)
300 buildAction = "FileCopy";
301
302 // Sort of a hack, we try and resolve the path and make it relative, if we can.
303 string extension = Path.GetExtension(file);
304 string designer_format = string.Format(".Designer{0}", extension);
305
306 if (file.EndsWith(designer_format))
307 {
308 string basename = file.Substring(0, file.LastIndexOf(designer_format));
309 string[] extensions = new string[] { ".cs", ".resx", ".settings" };
310
311 foreach(string ext in extensions)
312 {
313 if (project.Files.Contains(basename + ext))
314 {
315 dependson = string.Format(" dependson=\"{0}{1}\"", basename, ext);
316 break;
317 }
318 }
319 }
320 if (extension == ".resx")
321 {
322 buildAction = "EmbedAsResource";
323 string basename = file.Substring(0, file.LastIndexOf(".resx"));
324
325 // Visual Studio type resx + form dependency
326 if (project.Files.Contains(basename + ".cs"))
327 {
328 dependson = string.Format(" dependson=\"{0}{1}\"", basename, ".cs");
329 }
330
331 // We need to specify a resources file name to avoid MissingManifestResourceExceptions
332 // in libraries that are built.
333 resource_id = string.Format(" resource_id=\"{0}.{1}.resources\"",
334 project.AssemblyName, basename.Replace("/", "."));
335 }
336
337 switch(project.Files.GetCopyToOutput(file))
338 {
339 case CopyToOutput.Always:
340 copyToOutput = string.Format(" copyToOutputDirectory=\"Always\"");
341 break;
342 case CopyToOutput.PreserveNewest:
343 copyToOutput = string.Format(" copyToOutputDirectory=\"PreserveNewest\"");
344 break;
345 }
346
347 // Sort of a hack, we try and resolve the path and make it relative, if we can.
348 string filePath = PrependPath(file);
349 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\"{2}{3}{4} />",
350 filePath, buildAction, dependson, resource_id, copyToOutput);
351 }
352 ss.WriteLine(" </Contents>");
353
354 ss.WriteLine(" <References>");
355 foreach(ReferenceNode refr in project.References)
356 {
357 ss.WriteLine(" {0}", BuildReference(solution, refr));
358 }
359 ss.WriteLine(" </References>");
360
361
362 ss.WriteLine("</Project>");
363 }
364
365 m_Kernel.CurrentWorkingDirectory.Pop();
366 }
367
368 private void WriteCombine(SolutionNode solution)
369 {
370 m_Kernel.Log.Write("Creating MonoDevelop combine and project files");
371 foreach(ProjectNode project in solution.Projects)
372 {
373 if(m_Kernel.AllowProject(project.FilterGroups))
374 {
375 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
376 WriteProject(solution, project);
377 }
378 }
379
380 m_Kernel.Log.Write("");
381 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
382 StreamWriter ss = new StreamWriter(combFile);
383
384 m_Kernel.CurrentWorkingDirectory.Push();
385 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
386
387 int count = 0;
388
389 using(ss)
390 {
391 ss.WriteLine("<Combine name=\"{0}\" fileversion=\"2.0\" description=\"\">", solution.Name);
392
393 count = 0;
394 foreach(ConfigurationNode conf in solution.Configurations)
395 {
396 if(count == 0)
397 {
398 ss.WriteLine(" <Configurations active=\"{0}\">", conf.Name);
399 }
400
401 ss.WriteLine(" <Configuration name=\"{0}\" ctype=\"CombineConfiguration\">", conf.Name);
402 foreach(ProjectNode project in solution.Projects)
403 {
404 ss.WriteLine(" <Entry configuration=\"{1}\" build=\"True\" name=\"{0}\" />", project.Name, conf.Name);
405 }
406 ss.WriteLine(" </Configuration>");
407
408 count++;
409 }
410 ss.WriteLine(" </Configurations>");
411
412 count = 0;
413
414 foreach(ProjectNode project in solution.Projects)
415 {
416 if(count == 0)
417 ss.WriteLine(" <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
418
419 ss.WriteLine(" <Execute type=\"None\" entry=\"{0}\" />", project.Name);
420 count++;
421 }
422 ss.WriteLine(" </StartMode>");
423
424 ss.WriteLine(" <Entries>");
425 foreach(ProjectNode project in solution.Projects)
426 {
427 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
428 ss.WriteLine(" <Entry filename=\"{0}\" />",
429 Helper.MakeFilePath(path, project.Name, "mdp"));
430 }
431 ss.WriteLine(" </Entries>");
432
433 ss.WriteLine("</Combine>");
434 }
435
436 m_Kernel.CurrentWorkingDirectory.Pop();
437 }
438
439 private void CleanProject(ProjectNode project)
440 {
441 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
442 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
443 Helper.DeleteIfExists(projectFile);
444 }
445
446 private void CleanSolution(SolutionNode solution)
447 {
448 m_Kernel.Log.Write("Cleaning MonoDevelop combine and project files for", solution.Name);
449
450 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
451 Helper.DeleteIfExists(slnFile);
452
453 foreach(ProjectNode project in solution.Projects)
454 {
455 CleanProject(project);
456 }
457
458 m_Kernel.Log.Write("");
459 }
460
461 #endregion
462
463 #region ITarget Members
464
465 /// <summary>
466 /// Writes the specified kern.
467 /// </summary>
468 /// <param name="kern">The kern.</param>
469 public void Write(Kernel kern)
470 {
471 if( kern == null )
472 {
473 throw new ArgumentNullException("kern");
474 }
475 m_Kernel = kern;
476 foreach(SolutionNode solution in kern.Solutions)
477 {
478 WriteCombine(solution);
479 }
480 m_Kernel = null;
481 }
482
483 /// <summary>
484 /// Cleans the specified kern.
485 /// </summary>
486 /// <param name="kern">The kern.</param>
487 public virtual void Clean(Kernel kern)
488 {
489 if( kern == null )
490 {
491 throw new ArgumentNullException("kern");
492 }
493 m_Kernel = kern;
494 foreach(SolutionNode sol in kern.Solutions)
495 {
496 CleanSolution(sol);
497 }
498 m_Kernel = null;
499 }
500
501 /// <summary>
502 /// Gets the name.
503 /// </summary>
504 /// <value>The name.</value>
505 public string Name
506 {
507 get
508 {
509 return "sharpdev";
510 }
511 }
512
513 #endregion
514 }
515}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/NAntTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/NAntTarget.cs.svn-base
deleted file mode 100644
index 1efc16d..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/NAntTarget.cs.svn-base
+++ /dev/null
@@ -1,776 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004 - 2008
4Matthew Holmes (matthew@wildfiregames.com),
5Dan Moorehead (dan05a@gmail.com),
6C.J. Adams-Collier (cjac@colliertech.org),
7
8Redistribution and use in source and binary forms, with or without
9modification, are permitted provided that the following conditions are
10met:
11
12* Redistributions of source code must retain the above copyright
13 notice, this list of conditions and the following disclaimer.
14
15* Redistributions in binary form must reproduce the above copyright
16 notice, this list of conditions and the following disclaimer in the
17 documentation and/or other materials provided with the distribution.
18
19* The name of the author may not be used to endorse or promote
20 products derived from this software without specific prior written
21 permission.
22
23THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33POSSIBILITY OF SUCH DAMAGE.
34*/
35
36#endregion
37
38using System;
39using System.Collections.Generic;
40using System.IO;
41using System.Text.RegularExpressions;
42
43using Prebuild.Core.Attributes;
44using Prebuild.Core.Interfaces;
45using Prebuild.Core.Nodes;
46using Prebuild.Core.Utilities;
47
48namespace Prebuild.Core.Targets
49{
50 /// <summary>
51 ///
52 /// </summary>
53 [Target("nant")]
54 public class NAntTarget : ITarget
55 {
56 #region Fields
57
58 private Kernel m_Kernel;
59
60 #endregion
61
62 #region Private Methods
63
64 private static string PrependPath(string path)
65 {
66 string tmpPath = Helper.NormalizePath(path, '/');
67 Regex regex = new Regex(@"(\w):/(\w+)");
68 Match match = regex.Match(tmpPath);
69 //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
70 //{
71 tmpPath = Helper.NormalizePath(tmpPath);
72 //}
73 // else
74 // {
75 // tmpPath = Helper.NormalizePath("./" + tmpPath);
76 // }
77
78 return tmpPath;
79 }
80
81 private static string BuildReference(SolutionNode solution, ProjectNode currentProject, ReferenceNode refr)
82 {
83
84 if (!String.IsNullOrEmpty(refr.Path))
85 {
86 return refr.Path;
87 }
88
89 if (solution.ProjectsTable.ContainsKey(refr.Name))
90 {
91 ProjectNode projectRef = (ProjectNode) solution.ProjectsTable[refr.Name];
92 string finalPath =
93 Helper.NormalizePath(refr.Name + GetProjectExtension(projectRef), '/');
94 return finalPath;
95 }
96
97 ProjectNode project = (ProjectNode) refr.Parent;
98
99 // Do we have an explicit file reference?
100 string fileRef = FindFileReference(refr.Name, project);
101 if (fileRef != null)
102 {
103 return fileRef;
104 }
105
106 // Is there an explicit path in the project ref?
107 if (refr.Path != null)
108 {
109 return Helper.NormalizePath(refr.Path + "/" + refr.Name + GetProjectExtension(project), '/');
110 }
111
112 // No, it's an extensionless GAC ref, but nant needs the .dll extension anyway
113 return refr.Name + ".dll";
114 }
115
116 public static string GetRefFileName(string refName)
117 {
118 if (ExtensionSpecified(refName))
119 {
120 return refName;
121 }
122 else
123 {
124 return refName + ".dll";
125 }
126 }
127
128 private static bool ExtensionSpecified(string refName)
129 {
130 return refName.EndsWith(".dll") || refName.EndsWith(".exe");
131 }
132
133 private static string GetProjectExtension(ProjectNode project)
134 {
135 string extension = ".dll";
136 if (project.Type == ProjectType.Exe || project.Type == ProjectType.WinExe)
137 {
138 extension = ".exe";
139 }
140 return extension;
141 }
142
143 private static string FindFileReference(string refName, ProjectNode project)
144 {
145 foreach (ReferencePathNode refPath in project.ReferencePaths)
146 {
147 string fullPath = Helper.MakeFilePath(refPath.Path, refName);
148
149 if (File.Exists(fullPath))
150 {
151 return fullPath;
152 }
153
154 fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
155
156 if (File.Exists(fullPath))
157 {
158 return fullPath;
159 }
160
161 fullPath = Helper.MakeFilePath(refPath.Path, refName, "exe");
162
163 if (File.Exists(fullPath))
164 {
165 return fullPath;
166 }
167 }
168
169 return null;
170 }
171
172 /// <summary>
173 /// Gets the XML doc file.
174 /// </summary>
175 /// <param name="project">The project.</param>
176 /// <param name="conf">The conf.</param>
177 /// <returns></returns>
178 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
179 {
180 if (conf == null)
181 {
182 throw new ArgumentNullException("conf");
183 }
184 if (project == null)
185 {
186 throw new ArgumentNullException("project");
187 }
188 string docFile = (string)conf.Options["XmlDocFile"];
189 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
190 // {
191 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
192 // }
193 return docFile;
194 }
195
196 private void WriteProject(SolutionNode solution, ProjectNode project)
197 {
198 string projFile = Helper.MakeFilePath(project.FullPath, project.Name + GetProjectExtension(project), "build");
199 StreamWriter ss = new StreamWriter(projFile);
200
201 m_Kernel.CurrentWorkingDirectory.Push();
202 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
203 bool hasDoc = false;
204
205 using (ss)
206 {
207 ss.WriteLine("<?xml version=\"1.0\" ?>");
208 ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name);
209 ss.WriteLine(" <target name=\"{0}\">", "build");
210 ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />");
211 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />");
212 ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/${build.dir}\" flatten=\"true\">");
213 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
214 foreach (ReferenceNode refr in project.References)
215 {
216 if (refr.LocalCopy)
217 {
218 ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)) + "\" />", '/'));
219 }
220 }
221
222 ss.WriteLine(" </fileset>");
223 ss.WriteLine(" </copy>");
224 if (project.ConfigFile != null && project.ConfigFile.Length!=0)
225 {
226 ss.Write(" <copy file=\"" + project.ConfigFile + "\" tofile=\"${project::get-base-directory()}/${build.dir}/${project::get-name()}");
227
228 if (project.Type == ProjectType.Library)
229 {
230 ss.Write(".dll.config\"");
231 }
232 else
233 {
234 ss.Write(".exe.config\"");
235 }
236 ss.WriteLine(" />");
237 }
238
239 // Add the content files to just be copied
240 ss.WriteLine(" {0}", "<copy todir=\"${project::get-base-directory()}/${build.dir}\">");
241 ss.WriteLine(" {0}", "<fileset basedir=\".\">");
242
243 foreach (string file in project.Files)
244 {
245 // Ignore if we aren't content
246 if (project.Files.GetBuildAction(file) != BuildAction.Content)
247 continue;
248
249 // Create a include tag
250 ss.WriteLine(" {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
251 }
252
253 ss.WriteLine(" {0}", "</fileset>");
254 ss.WriteLine(" {0}", "</copy>");
255
256 ss.Write(" <csc ");
257 ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
258 ss.Write(" debug=\"{0}\"", "${build.debug}");
259 ss.Write(" platform=\"${build.platform}\"");
260
261
262 foreach (ConfigurationNode conf in project.Configurations)
263 {
264 if (conf.Options.KeyFile != "")
265 {
266 ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile);
267 break;
268 }
269 }
270 foreach (ConfigurationNode conf in project.Configurations)
271 {
272 ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe);
273 break;
274 }
275 foreach (ConfigurationNode conf in project.Configurations)
276 {
277 ss.Write(" warnaserror=\"{0}\"", conf.Options.WarningsAsErrors);
278 break;
279 }
280 foreach (ConfigurationNode conf in project.Configurations)
281 {
282 ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines);
283 break;
284 }
285 foreach (ConfigurationNode conf in project.Configurations)
286 {
287 ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
288 break;
289 }
290
291 ss.Write(" main=\"{0}\"", project.StartupObject);
292
293 foreach (ConfigurationNode conf in project.Configurations)
294 {
295 if (GetXmlDocFile(project, conf) != "")
296 {
297 ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf));
298 hasDoc = true;
299 }
300 break;
301 }
302 ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}");
303 if (project.Type == ProjectType.Library)
304 {
305 ss.Write(".dll\"");
306 }
307 else
308 {
309 ss.Write(".exe\"");
310 }
311 if (project.AppIcon != null && project.AppIcon.Length != 0)
312 {
313 ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/'));
314 }
315 // This disables a very different behavior between VS and NAnt. With Nant,
316 // If you have using System.Xml; it will ensure System.Xml.dll is referenced,
317 // but not in VS. This will force the behaviors to match, so when it works
318 // in nant, it will work in VS.
319 ss.Write(" noconfig=\"true\"");
320 ss.WriteLine(">");
321 ss.WriteLine(" <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
322 foreach (string file in project.Files)
323 {
324 switch (project.Files.GetBuildAction(file))
325 {
326 case BuildAction.EmbeddedResource:
327 ss.WriteLine(" {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
328 break;
329 default:
330 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
331 {
332 ss.WriteLine(" <include name=\"{0}\" />", file.Substring(0, file.LastIndexOf('.')) + ".resx");
333 }
334 break;
335 }
336 }
337 //if (project.Files.GetSubType(file).ToString() != "Code")
338 //{
339 // ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
340
341 ss.WriteLine(" </resources>");
342 ss.WriteLine(" <sources failonempty=\"true\">");
343 foreach (string file in project.Files)
344 {
345 switch (project.Files.GetBuildAction(file))
346 {
347 case BuildAction.Compile:
348 ss.WriteLine(" <include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
349 break;
350 default:
351 break;
352 }
353 }
354 ss.WriteLine(" </sources>");
355 ss.WriteLine(" <references basedir=\"${project::get-base-directory()}\">");
356 ss.WriteLine(" <lib>");
357 ss.WriteLine(" <include name=\"${project::get-base-directory()}\" />");
358 foreach(ReferencePathNode refPath in project.ReferencePaths)
359 {
360 ss.WriteLine(" <include name=\"${project::get-base-directory()}/" + refPath.Path.TrimEnd('/', '\\') + "\" />");
361 }
362 ss.WriteLine(" </lib>");
363 foreach (ReferenceNode refr in project.References)
364 {
365 string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/');
366 if (refr.Path != null) {
367 if (ExtensionSpecified(refr.Name))
368 {
369 ss.WriteLine (" <include name=\"" + path + refr.Name + "\"/>");
370 }
371 else
372 {
373 ss.WriteLine (" <include name=\"" + path + refr.Name + ".dll\"/>");
374 }
375 }
376 else
377 {
378 ss.WriteLine (" <include name=\"" + path + "\" />");
379 }
380 }
381 ss.WriteLine(" </references>");
382
383 ss.WriteLine(" </csc>");
384
385 foreach (ConfigurationNode conf in project.Configurations)
386 {
387 if (!String.IsNullOrEmpty(conf.Options.OutputPath))
388 {
389 string targetDir = Helper.NormalizePath(conf.Options.OutputPath, '/');
390
391 ss.WriteLine(" <echo message=\"Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/" + targetDir + "\" />");
392
393 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/" + targetDir + "\"/>");
394
395 ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/" + targetDir + "\">");
396 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}/${build.dir}/\" >");
397 ss.WriteLine(" <include name=\"*.dll\"/>");
398 ss.WriteLine(" <include name=\"*.exe\"/>");
399 ss.WriteLine(" <include name=\"*.mdb\" if='${build.debug}'/>");
400 ss.WriteLine(" <include name=\"*.pdb\" if='${build.debug}'/>");
401 ss.WriteLine(" </fileset>");
402 ss.WriteLine(" </copy>");
403 break;
404 }
405 }
406
407 ss.WriteLine(" </target>");
408
409 ss.WriteLine(" <target name=\"clean\">");
410 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
411 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
412 ss.WriteLine(" </target>");
413
414 ss.WriteLine(" <target name=\"doc\" description=\"Creates documentation.\">");
415 if (hasDoc)
416 {
417 ss.WriteLine(" <property name=\"doc.target\" value=\"\" />");
418 ss.WriteLine(" <if test=\"${platform::is-unix()}\">");
419 ss.WriteLine(" <property name=\"doc.target\" value=\"Web\" />");
420 ss.WriteLine(" </if>");
421 ss.WriteLine(" <ndoc failonerror=\"false\" verbose=\"true\">");
422 ss.WriteLine(" <assemblies basedir=\"${project::get-base-directory()}\">");
423 ss.Write(" <include name=\"${build.dir}/${project::get-name()}");
424 if (project.Type == ProjectType.Library)
425 {
426 ss.WriteLine(".dll\" />");
427 }
428 else
429 {
430 ss.WriteLine(".exe\" />");
431 }
432
433 ss.WriteLine(" </assemblies>");
434 ss.WriteLine(" <summaries basedir=\"${project::get-base-directory()}\">");
435 ss.WriteLine(" <include name=\"${build.dir}/${project::get-name()}.xml\"/>");
436 ss.WriteLine(" </summaries>");
437 ss.WriteLine(" <referencepaths basedir=\"${project::get-base-directory()}\">");
438 ss.WriteLine(" <include name=\"${build.dir}\" />");
439 // foreach(ReferenceNode refr in project.References)
440 // {
441 // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/');
442 // if (path != "")
443 // {
444 // ss.WriteLine(" <include name=\"{0}\" />", path);
445 // }
446 // }
447 ss.WriteLine(" </referencepaths>");
448 ss.WriteLine(" <documenters>");
449 ss.WriteLine(" <documenter name=\"MSDN\">");
450 ss.WriteLine(" <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />");
451 ss.WriteLine(" <property name=\"OutputTarget\" value=\"${doc.target}\" />");
452 ss.WriteLine(" <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />");
453 ss.WriteLine(" <property name=\"IncludeFavorites\" value=\"False\" />");
454 ss.WriteLine(" <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />");
455 ss.WriteLine(" <property name=\"SplitTOCs\" value=\"False\" />");
456 ss.WriteLine(" <property name=\"DefaulTOC\" value=\"\" />");
457 ss.WriteLine(" <property name=\"ShowVisualBasic\" value=\"True\" />");
458 ss.WriteLine(" <property name=\"AutoDocumentConstructors\" value=\"True\" />");
459 ss.WriteLine(" <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />");
460 ss.WriteLine(" <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />");
461 ss.WriteLine(" <property name=\"ShowMissingParams\" value=\"${build.debug}\" />");
462 ss.WriteLine(" <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />");
463 ss.WriteLine(" <property name=\"ShowMissingValues\" value=\"${build.debug}\" />");
464 ss.WriteLine(" <property name=\"DocumentInternals\" value=\"False\" />");
465 ss.WriteLine(" <property name=\"DocumentPrivates\" value=\"False\" />");
466 ss.WriteLine(" <property name=\"DocumentProtected\" value=\"True\" />");
467 ss.WriteLine(" <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />");
468 ss.WriteLine(" <property name=\"IncludeAssemblyVersion\" value=\"True\" />");
469 ss.WriteLine(" </documenter>");
470 ss.WriteLine(" </documenters>");
471 ss.WriteLine(" </ndoc>");
472 }
473 ss.WriteLine(" </target>");
474 ss.WriteLine("</project>");
475 }
476 m_Kernel.CurrentWorkingDirectory.Pop();
477 }
478
479 private void WriteCombine(SolutionNode solution)
480 {
481 m_Kernel.Log.Write("Creating NAnt build files");
482 foreach (ProjectNode project in solution.Projects)
483 {
484 if (m_Kernel.AllowProject(project.FilterGroups))
485 {
486 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
487 WriteProject(solution, project);
488 }
489 }
490
491 m_Kernel.Log.Write("");
492 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
493 StreamWriter ss = new StreamWriter(combFile);
494
495 m_Kernel.CurrentWorkingDirectory.Push();
496 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
497
498 using (ss)
499 {
500 ss.WriteLine("<?xml version=\"1.0\" ?>");
501 ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name);
502 ss.WriteLine(" <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>");
503 ss.WriteLine();
504
505 //ss.WriteLine(" <property name=\"dist.dir\" value=\"dist\" />");
506 //ss.WriteLine(" <property name=\"source.dir\" value=\"source\" />");
507 ss.WriteLine(" <property name=\"bin.dir\" value=\"bin\" />");
508 ss.WriteLine(" <property name=\"obj.dir\" value=\"obj\" />");
509 ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />");
510 ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
511
512 // Use the active configuration, which is the first configuration name in the prebuild file.
513 Dictionary<string,string> emittedConfigurations = new Dictionary<string, string>();
514
515 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", solution.ActiveConfig);
516 ss.WriteLine();
517
518 foreach (ConfigurationNode conf in solution.Configurations)
519 {
520 // If the name isn't in the emitted configurations, we give a high level target to the
521 // platform specific on. This lets "Debug" point to "Debug-AnyCPU".
522 if (!emittedConfigurations.ContainsKey(conf.Name))
523 {
524 // Add it to the dictionary so we only emit one.
525 emittedConfigurations.Add(conf.Name, conf.Platform);
526
527 // Write out the target block.
528 ss.WriteLine(" <target name=\"{0}\" description=\"{0}|{1}\" depends=\"{0}-{1}\">", conf.Name, conf.Platform);
529 ss.WriteLine(" </target>");
530 ss.WriteLine();
531 }
532
533 // Write out the target for the configuration.
534 ss.WriteLine(" <target name=\"{0}-{1}\" description=\"{0}|{1}\">", conf.Name, conf.Platform);
535 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
536 ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
537 ss.WriteLine("\t\t <property name=\"build.platform\" value=\"{0}\" />", conf.Platform);
538 ss.WriteLine(" </target>");
539 ss.WriteLine();
540 }
541
542 ss.WriteLine(" <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">");
543 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />");
544 ss.WriteLine(" </target>");
545 ss.WriteLine();
546
547 ss.WriteLine(" <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">");
548 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />");
549 ss.WriteLine(" </target>");
550 ss.WriteLine();
551
552 ss.WriteLine(" <target name=\"net-3.5\" description=\"Sets framework to .NET 3.5\">");
553 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-3.5\" />");
554 ss.WriteLine(" </target>");
555 ss.WriteLine();
556
557 ss.WriteLine(" <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">");
558 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />");
559 ss.WriteLine(" </target>");
560 ss.WriteLine();
561
562 ss.WriteLine(" <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">");
563 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />");
564 ss.WriteLine(" </target>");
565 ss.WriteLine();
566
567 ss.WriteLine(" <target name=\"mono-3.5\" description=\"Sets framework to mono 3.5\">");
568 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-3.5\" />");
569 ss.WriteLine(" </target>");
570 ss.WriteLine();
571
572 ss.WriteLine(" <target name=\"init\" description=\"\">");
573 ss.WriteLine(" <call target=\"${project.config}\" />");
574 ss.WriteLine(" <property name=\"sys.os.platform\"");
575 ss.WriteLine(" value=\"${platform::get-name()}\"");
576 ss.WriteLine(" />");
577 ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />");
578 ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />");
579 ss.WriteLine(" </target>");
580 ss.WriteLine();
581
582
583 // sdague - ok, this is an ugly hack, but what it lets
584 // us do is native include of files into the nant
585 // created files from all .nant/*include files. This
586 // lets us keep using prebuild, but allows for
587 // extended nant targets to do build and the like.
588
589 try
590 {
591 Regex re = new Regex(".include$");
592 DirectoryInfo nantdir = new DirectoryInfo(".nant");
593 foreach (FileSystemInfo item in nantdir.GetFileSystemInfos())
594 {
595 if (item is DirectoryInfo) { }
596 else if (item is FileInfo)
597 {
598 if (re.Match(item.FullName) !=
599 System.Text.RegularExpressions.Match.Empty)
600 {
601 Console.WriteLine("Including file: " + item.FullName);
602
603 using (FileStream fs = new FileStream(item.FullName,
604 FileMode.Open,
605 FileAccess.Read,
606 FileShare.None))
607 {
608 using (StreamReader sr = new StreamReader(fs))
609 {
610 ss.WriteLine("<!-- included from {0} -->", (item).FullName);
611 while (sr.Peek() != -1)
612 {
613 ss.WriteLine(sr.ReadLine());
614 }
615 ss.WriteLine();
616 }
617 }
618 }
619 }
620 }
621 }
622 catch { }
623 // ss.WriteLine(" <include buildfile=\".nant/local.include\" />");
624 // ss.WriteLine(" <target name=\"zip\" description=\"\">");
625 // ss.WriteLine(" <zip zipfile=\"{0}-{1}.zip\">", solution.Name, solution.Version);
626 // ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
627
628 // ss.WriteLine(" <include name=\"${project::get-base-directory()}/**/*.cs\" />");
629 // // ss.WriteLine(" <include name=\"${project.main.dir}/**/*\" />");
630 // ss.WriteLine(" </fileset>");
631 // ss.WriteLine(" </zip>");
632 // ss.WriteLine(" <echo message=\"Building zip target\" />");
633 // ss.WriteLine(" </target>");
634 ss.WriteLine();
635
636
637 ss.WriteLine(" <target name=\"clean\" description=\"\">");
638 ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />");
639 //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />");
640 if (solution.Cleanup != null && solution.Cleanup.CleanFiles.Count > 0)
641 {
642 foreach (CleanFilesNode cleanFile in solution.Cleanup.CleanFiles)
643 {
644 ss.WriteLine(" <delete failonerror=\"false\">");
645 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
646 ss.WriteLine(" <include name=\"{0}/*\"/>", cleanFile.Pattern);
647 ss.WriteLine(" <include name=\"{0}\"/>", cleanFile.Pattern);
648 ss.WriteLine(" </fileset>");
649 ss.WriteLine(" </delete>");
650 }
651 }
652 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
653 foreach (ProjectNode project in solution.Projects)
654 {
655 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
656 ss.Write(" <nant buildfile=\"{0}\"",
657 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + GetProjectExtension(project), "build"), '/'));
658 ss.WriteLine(" target=\"clean\" />");
659 }
660 ss.WriteLine(" </target>");
661 ss.WriteLine();
662
663 ss.WriteLine(" <target name=\"build\" depends=\"init\" description=\"\">");
664
665 foreach (ProjectNode project in solution.ProjectsTableOrder)
666 {
667 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
668 ss.Write(" <nant buildfile=\"{0}\"",
669 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + GetProjectExtension(project), "build"), '/'));
670 ss.WriteLine(" target=\"build\" />");
671 }
672 ss.WriteLine(" </target>");
673 ss.WriteLine();
674
675 ss.WriteLine(" <target name=\"build-release\" depends=\"Release, init, build\" description=\"Builds in Release mode\" />");
676 ss.WriteLine();
677 ss.WriteLine(" <target name=\"build-debug\" depends=\"Debug, init, build\" description=\"Builds in Debug mode\" />");
678 ss.WriteLine();
679 //ss.WriteLine(" <target name=\"package\" depends=\"clean, doc, copyfiles, zip\" description=\"Builds in Release mode\" />");
680 ss.WriteLine(" <target name=\"package\" depends=\"clean, doc\" description=\"Builds all\" />");
681 ss.WriteLine();
682
683 ss.WriteLine(" <target name=\"doc\" depends=\"build-release\">");
684 ss.WriteLine(" <echo message=\"Generating all documentation from all builds\" />");
685 foreach (ProjectNode project in solution.Projects)
686 {
687 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
688 ss.Write(" <nant buildfile=\"{0}\"",
689 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + GetProjectExtension(project), "build"), '/'));
690 ss.WriteLine(" target=\"doc\" />");
691 }
692 ss.WriteLine(" </target>");
693 ss.WriteLine();
694 ss.WriteLine("</project>");
695 }
696
697 m_Kernel.CurrentWorkingDirectory.Pop();
698 }
699
700 private void CleanProject(ProjectNode project)
701 {
702 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
703 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + GetProjectExtension(project), "build");
704 Helper.DeleteIfExists(projectFile);
705 }
706
707 private void CleanSolution(SolutionNode solution)
708 {
709 m_Kernel.Log.Write("Cleaning NAnt build files for", solution.Name);
710
711 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
712 Helper.DeleteIfExists(slnFile);
713
714 foreach (ProjectNode project in solution.Projects)
715 {
716 CleanProject(project);
717 }
718
719 m_Kernel.Log.Write("");
720 }
721
722 #endregion
723
724 #region ITarget Members
725
726 /// <summary>
727 /// Writes the specified kern.
728 /// </summary>
729 /// <param name="kern">The kern.</param>
730 public void Write(Kernel kern)
731 {
732 if (kern == null)
733 {
734 throw new ArgumentNullException("kern");
735 }
736 m_Kernel = kern;
737 foreach (SolutionNode solution in kern.Solutions)
738 {
739 WriteCombine(solution);
740 }
741 m_Kernel = null;
742 }
743
744 /// <summary>
745 /// Cleans the specified kern.
746 /// </summary>
747 /// <param name="kern">The kern.</param>
748 public virtual void Clean(Kernel kern)
749 {
750 if (kern == null)
751 {
752 throw new ArgumentNullException("kern");
753 }
754 m_Kernel = kern;
755 foreach (SolutionNode sol in kern.Solutions)
756 {
757 CleanSolution(sol);
758 }
759 m_Kernel = null;
760 }
761
762 /// <summary>
763 /// Gets the name.
764 /// </summary>
765 /// <value>The name.</value>
766 public string Name
767 {
768 get
769 {
770 return "nant";
771 }
772 }
773
774 #endregion
775 }
776}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/SharpDevelop2Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/SharpDevelop2Target.cs.svn-base
deleted file mode 100644
index 66dd1bc..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/SharpDevelop2Target.cs.svn-base
+++ /dev/null
@@ -1,82 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28using Prebuild.Core.Attributes;
29
30namespace Prebuild.Core.Targets
31{
32 /// <summary>
33 ///
34 /// </summary>
35 [Target("sharpdev2")]
36 public class SharpDevelop2Target : VS2005Target
37 {
38 #region Properties
39 public override string VersionName
40 {
41 get
42 {
43 return "SharpDevelop2";
44 }
45 }
46 #endregion
47
48 #region Public Methods
49
50 /// <summary>
51 /// Writes the specified kern.
52 /// </summary>
53 /// <param name="kern">The kern.</param>
54 public override void Write(Kernel kern)
55 {
56 base.Write(kern);
57 }
58
59 /// <summary>
60 /// Cleans the specified kern.
61 /// </summary>
62 /// <param name="kern">The kern.</param>
63 public override void Clean(Kernel kern)
64 {
65 base.Clean(kern);
66 }
67
68 /// <summary>
69 /// Gets the name.
70 /// </summary>
71 /// <value>The name.</value>
72 public override string Name
73 {
74 get
75 {
76 return "sharpdev2";
77 }
78 }
79
80 #endregion
81 }
82}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/SharpDevelopTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/SharpDevelopTarget.cs.svn-base
deleted file mode 100644
index 8e32050..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/SharpDevelopTarget.cs.svn-base
+++ /dev/null
@@ -1,425 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Text.RegularExpressions;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [Target("sharpdev")]
41 public class SharpDevelopTarget : ITarget
42 {
43 #region Fields
44
45 private Kernel m_Kernel;
46
47 #endregion
48
49 #region Private Methods
50
51 private static string PrependPath(string path)
52 {
53 string tmpPath = Helper.NormalizePath(path, '/');
54 Regex regex = new Regex(@"(\w):/(\w+)");
55 Match match = regex.Match(tmpPath);
56 if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
57 {
58 tmpPath = Helper.NormalizePath(tmpPath);
59 }
60 else
61 {
62 tmpPath = Helper.NormalizePath("./" + tmpPath);
63 }
64
65 return tmpPath;
66 }
67
68 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
69 {
70 string ret = "<Reference type=\"";
71 if(solution.ProjectsTable.ContainsKey(refr.Name))
72 {
73 ret += "Project\" refto=\"" + refr.Name;
74 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
75 }
76 else
77 {
78 ProjectNode project = (ProjectNode)refr.Parent;
79 string fileRef = FindFileReference(refr.Name, project);
80
81 if(refr.Path != null || fileRef != null)
82 {
83 ret += "Assembly\" refto=\"";
84
85 string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
86
87 ret += finalPath;
88 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
89 return ret;
90 }
91
92 ret += "Gac\" refto=\"";
93 try
94 {
95 //Assembly assem = Assembly.Load(refr.Name);
96 ret += refr.Name;// assem.FullName;
97 }
98 catch (System.NullReferenceException e)
99 {
100 e.ToString();
101 ret += refr.Name;
102 }
103 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
104 }
105
106 return ret;
107 }
108
109 private static string FindFileReference(string refName, ProjectNode project)
110 {
111 foreach(ReferencePathNode refPath in project.ReferencePaths)
112 {
113 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
114
115 if(File.Exists(fullPath))
116 {
117 return fullPath;
118 }
119 }
120
121 return null;
122 }
123
124 /// <summary>
125 /// Gets the XML doc file.
126 /// </summary>
127 /// <param name="project">The project.</param>
128 /// <param name="conf">The conf.</param>
129 /// <returns></returns>
130 public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
131 {
132 if( conf == null )
133 {
134 throw new ArgumentNullException("conf");
135 }
136 if( project == null )
137 {
138 throw new ArgumentNullException("project");
139 }
140 string docFile = (string)conf.Options["XmlDocFile"];
141 if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
142 {
143 return "False";
144 }
145 return "True";
146 }
147
148 private void WriteProject(SolutionNode solution, ProjectNode project)
149 {
150 string csComp = "Csc";
151 string netRuntime = "MsNet";
152 if(project.Runtime == ClrRuntime.Mono)
153 {
154 csComp = "Mcs";
155 netRuntime = "Mono";
156 }
157
158 string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
159 StreamWriter ss = new StreamWriter(projFile);
160
161 m_Kernel.CurrentWorkingDirectory.Push();
162 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
163
164 using(ss)
165 {
166 ss.WriteLine(
167 "<Project name=\"{0}\" standardNamespace=\"{1}\" description=\"\" newfilesearch=\"None\" enableviewstate=\"True\" version=\"1.1\" projecttype=\"C#\">",
168 project.Name,
169 project.RootNamespace
170 );
171
172 ss.WriteLine(" <Contents>");
173 foreach(string file in project.Files)
174 {
175 string buildAction = "Compile";
176 switch(project.Files.GetBuildAction(file))
177 {
178 case BuildAction.None:
179 buildAction = "Nothing";
180 break;
181
182 case BuildAction.Content:
183 buildAction = "Exclude";
184 break;
185
186 case BuildAction.EmbeddedResource:
187 buildAction = "EmbedAsResource";
188 break;
189
190 default:
191 buildAction = "Compile";
192 break;
193 }
194
195 // Sort of a hack, we try and resolve the path and make it relative, if we can.
196 string filePath = PrependPath(file);
197 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\" dependson=\"\" data=\"\" />", filePath, buildAction);
198 }
199 ss.WriteLine(" </Contents>");
200
201 ss.WriteLine(" <References>");
202 foreach(ReferenceNode refr in project.References)
203 {
204 ss.WriteLine(" {0}", BuildReference(solution, refr));
205 }
206 ss.WriteLine(" </References>");
207
208 ss.Write(" <DeploymentInformation");
209 ss.Write(" target=\"\"");
210 ss.Write(" script=\"\"");
211 ss.Write(" strategy=\"File\"");
212 ss.WriteLine(" />");
213
214 int count = 0;
215
216 ss.WriteLine(" <Configurations active=\"{0}\">", solution.ActiveConfig);
217
218 foreach(ConfigurationNode conf in project.Configurations)
219 {
220 ss.Write(" <Configuration");
221 ss.Write(" runwithwarnings=\"True\"");
222 ss.Write(" name=\"{0}\"", conf.Name);
223 ss.WriteLine(">");
224 ss.Write(" <CodeGeneration");
225 ss.Write(" runtime=\"{0}\"", netRuntime);
226 ss.Write(" compiler=\"{0}\"", csComp);
227 ss.Write(" compilerversion=\"\"");
228 ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
229 ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
230 ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
231 ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
232 ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
233 ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
234 ss.Write(" mainclass=\"{0}\"", project.StartupObject);
235 ss.Write(" target=\"{0}\"", project.Type);
236 ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
237 ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
238 ss.Write(" win32Icon=\"{0}\"", Helper.NormalizePath(".\\" + project.AppIcon));
239 ss.Write(" noconfig=\"{0}\"", "False");
240 ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
241 ss.WriteLine(" />");
242
243 ss.Write(" <Execution");
244 ss.Write(" commandlineparameters=\"\"");
245 ss.Write(" consolepause=\"True\"");
246 ss.WriteLine(" />");
247
248 ss.Write(" <Output");
249 ss.Write(" directory=\".\\{0}\"", Helper.NormalizePath(conf.Options["OutputPath"].ToString()));
250 ss.Write(" assembly=\"{0}\"", project.AssemblyName);
251 ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
252 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
253 {
254 ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
255 }
256 else
257 {
258 ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
259 }
260 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
261 {
262 ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
263 }
264 else
265 {
266 ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
267 }
268 ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
269 ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
270 ss.WriteLine(" />");
271 ss.WriteLine(" </Configuration>");
272
273 count++;
274 }
275 ss.WriteLine(" </Configurations>");
276 ss.WriteLine("</Project>");
277 }
278
279 m_Kernel.CurrentWorkingDirectory.Pop();
280 }
281
282 private void WriteCombine(SolutionNode solution)
283 {
284 m_Kernel.Log.Write("Creating SharpDevelop combine and project files");
285 foreach(ProjectNode project in solution.Projects)
286 {
287 if(m_Kernel.AllowProject(project.FilterGroups))
288 {
289 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
290 WriteProject(solution, project);
291 }
292 }
293
294 m_Kernel.Log.Write("");
295 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
296 StreamWriter ss = new StreamWriter(combFile);
297
298 m_Kernel.CurrentWorkingDirectory.Push();
299 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
300
301 using(ss)
302 {
303 ss.WriteLine("<Combine fileversion=\"1.0\" name=\"{0}\" description=\"\">", solution.Name);
304
305 int count = 0;
306 foreach(ProjectNode project in solution.Projects)
307 {
308 if(count == 0)
309 ss.WriteLine(" <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
310
311 ss.WriteLine(" <Execute entry=\"{0}\" type=\"None\" />", project.Name);
312 count++;
313 }
314 ss.WriteLine(" </StartMode>");
315
316 ss.WriteLine(" <Entries>");
317 foreach(ProjectNode project in solution.Projects)
318 {
319 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
320 ss.WriteLine(" <Entry filename=\"{0}\" />",
321 Helper.MakeFilePath(path, project.Name, "prjx"));
322 }
323 ss.WriteLine(" </Entries>");
324
325 count = 0;
326 foreach(ConfigurationNode conf in solution.Configurations)
327 {
328 if(count == 0)
329 {
330 ss.WriteLine(" <Configurations active=\"{0}\">", conf.Name);
331 }
332
333 ss.WriteLine(" <Configuration name=\"{0}\">", conf.Name);
334 foreach(ProjectNode project in solution.Projects)
335 {
336 ss.WriteLine(" <Entry name=\"{0}\" configurationname=\"{1}\" build=\"True\" />", project.Name, conf.Name);
337 }
338 ss.WriteLine(" </Configuration>");
339
340 count++;
341 }
342 ss.WriteLine(" </Configurations>");
343 ss.WriteLine("</Combine>");
344 }
345
346 m_Kernel.CurrentWorkingDirectory.Pop();
347 }
348
349 private void CleanProject(ProjectNode project)
350 {
351 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
352 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
353 Helper.DeleteIfExists(projectFile);
354 }
355
356 private void CleanSolution(SolutionNode solution)
357 {
358 m_Kernel.Log.Write("Cleaning SharpDevelop combine and project files for", solution.Name);
359
360 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
361 Helper.DeleteIfExists(slnFile);
362
363 foreach(ProjectNode project in solution.Projects)
364 {
365 CleanProject(project);
366 }
367
368 m_Kernel.Log.Write("");
369 }
370
371 #endregion
372
373 #region ITarget Members
374
375 /// <summary>
376 /// Writes the specified kern.
377 /// </summary>
378 /// <param name="kern">The kern.</param>
379 public void Write(Kernel kern)
380 {
381 if( kern == null )
382 {
383 throw new ArgumentNullException("kern");
384 }
385 m_Kernel = kern;
386 foreach(SolutionNode solution in kern.Solutions)
387 {
388 WriteCombine(solution);
389 }
390 m_Kernel = null;
391 }
392
393 /// <summary>
394 /// Cleans the specified kern.
395 /// </summary>
396 /// <param name="kern">The kern.</param>
397 public virtual void Clean(Kernel kern)
398 {
399 if( kern == null )
400 {
401 throw new ArgumentNullException("kern");
402 }
403 m_Kernel = kern;
404 foreach(SolutionNode sol in kern.Solutions)
405 {
406 CleanSolution(sol);
407 }
408 m_Kernel = null;
409 }
410
411 /// <summary>
412 /// Gets the name.
413 /// </summary>
414 /// <value>The name.</value>
415 public string Name
416 {
417 get
418 {
419 return "sharpdev";
420 }
421 }
422
423 #endregion
424 }
425}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/ToolInfo.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/ToolInfo.cs.svn-base
deleted file mode 100644
index 935c674..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/ToolInfo.cs.svn-base
+++ /dev/null
@@ -1,197 +0,0 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace Prebuild.Core.Targets
6{
7 /// <summary>
8 ///
9 /// </summary>
10 public struct ToolInfo
11 {
12 string name;
13 string guid;
14 string fileExtension;
15 string xmlTag;
16 string importProject;
17
18 /// <summary>
19 /// Gets or sets the name.
20 /// </summary>
21 /// <value>The name.</value>
22 public string Name
23 {
24 get
25 {
26 return name;
27 }
28 set
29 {
30 name = value;
31 }
32 }
33
34 /// <summary>
35 /// Gets or sets the GUID.
36 /// </summary>
37 /// <value>The GUID.</value>
38 public string Guid
39 {
40 get
41 {
42 return guid;
43 }
44 set
45 {
46 guid = value;
47 }
48 }
49
50 /// <summary>
51 /// Gets or sets the file extension.
52 /// </summary>
53 /// <value>The file extension.</value>
54 public string FileExtension
55 {
56 get
57 {
58 return fileExtension;
59 }
60 set
61 {
62 fileExtension = value;
63 }
64 }
65 public string LanguageExtension
66 {
67 get
68 {
69 switch (this.Name)
70 {
71 case "C#":
72 return ".cs";
73 case "VisualBasic":
74 return ".vb";
75 case "Boo":
76 return ".boo";
77 default:
78 return ".cs";
79 }
80 }
81 }
82 /// <summary>
83 /// Gets or sets the XML tag.
84 /// </summary>
85 /// <value>The XML tag.</value>
86 public string XmlTag
87 {
88 get
89 {
90 return xmlTag;
91 }
92 set
93 {
94 xmlTag = value;
95 }
96 }
97
98 /// <summary>
99 /// Gets or sets the import project property.
100 /// </summary>
101 /// <value>The ImportProject tag.</value>
102 public string ImportProject
103 {
104 get
105 {
106 return importProject;
107 }
108 set
109 {
110 importProject = value;
111 }
112 }
113
114 /// <summary>
115 /// Initializes a new instance of the <see cref="ToolInfo"/> class.
116 /// </summary>
117 /// <param name="name">The name.</param>
118 /// <param name="guid">The GUID.</param>
119 /// <param name="fileExtension">The file extension.</param>
120 /// <param name="xml">The XML.</param>
121 /// <param name="importProject">The import project.</param>
122 public ToolInfo(string name, string guid, string fileExtension, string xml, string importProject)
123 {
124 this.name = name;
125 this.guid = guid;
126 this.fileExtension = fileExtension;
127 this.xmlTag = xml;
128 this.importProject = importProject;
129 }
130
131 /// <summary>
132 /// Initializes a new instance of the <see cref="ToolInfo"/> class.
133 /// </summary>
134 /// <param name="name">The name.</param>
135 /// <param name="guid">The GUID.</param>
136 /// <param name="fileExtension">The file extension.</param>
137 /// <param name="xml">The XML.</param>
138 public ToolInfo(string name, string guid, string fileExtension, string xml)
139 {
140 this.name = name;
141 this.guid = guid;
142 this.fileExtension = fileExtension;
143 this.xmlTag = xml;
144 this.importProject = "$(MSBuildBinPath)\\Microsoft." + xml + ".Targets";
145 }
146
147 /// <summary>
148 /// Equals operator
149 /// </summary>
150 /// <param name="obj">ToolInfo to compare</param>
151 /// <returns>true if toolInfos are equal</returns>
152 public override bool Equals(object obj)
153 {
154 if (obj == null)
155 {
156 throw new ArgumentNullException("obj");
157 }
158 if (obj.GetType() != typeof(ToolInfo))
159 return false;
160
161 ToolInfo c = (ToolInfo)obj;
162 return ((this.name == c.name) && (this.guid == c.guid) && (this.fileExtension == c.fileExtension) && (this.importProject == c.importProject));
163 }
164
165 /// <summary>
166 /// Equals operator
167 /// </summary>
168 /// <param name="c1">ToolInfo to compare</param>
169 /// <param name="c2">ToolInfo to compare</param>
170 /// <returns>True if toolInfos are equal</returns>
171 public static bool operator ==(ToolInfo c1, ToolInfo c2)
172 {
173 return ((c1.name == c2.name) && (c1.guid == c2.guid) && (c1.fileExtension == c2.fileExtension) && (c1.importProject == c2.importProject) && (c1.xmlTag == c2.xmlTag));
174 }
175
176 /// <summary>
177 /// Not equals operator
178 /// </summary>
179 /// <param name="c1">ToolInfo to compare</param>
180 /// <param name="c2">ToolInfo to compare</param>
181 /// <returns>True if toolInfos are not equal</returns>
182 public static bool operator !=(ToolInfo c1, ToolInfo c2)
183 {
184 return !(c1 == c2);
185 }
186
187 /// <summary>
188 /// Hash Code
189 /// </summary>
190 /// <returns>Hash code</returns>
191 public override int GetHashCode()
192 {
193 return name.GetHashCode() ^ guid.GetHashCode() ^ this.fileExtension.GetHashCode() ^ this.importProject.GetHashCode() ^ this.xmlTag.GetHashCode();
194
195 }
196 }
197}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/VS2002Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VS2002Target.cs.svn-base
deleted file mode 100644
index 2292624..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/VS2002Target.cs.svn-base
+++ /dev/null
@@ -1,87 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27
28using Prebuild.Core.Attributes;
29
30namespace Prebuild.Core.Targets
31{
32 /// <summary>
33 ///
34 /// </summary>
35 [Target("vs2002")]
36 public class VS2002Target : VS2003Target
37 {
38 #region Private Methods
39
40 private void SetVS2002()
41 {
42 this.SolutionVersion = "7.00";
43 this.ProductVersion = "7.0.9254";
44 this.SchemaVersion = "1.0";
45 this.VersionName = "2002";
46 this.Version = VSVersion.VS70;
47 }
48
49 #endregion
50
51 #region Public Methods
52
53 /// <summary>
54 /// Writes the specified kern.
55 /// </summary>
56 /// <param name="kern">The kern.</param>
57 public override void Write(Kernel kern)
58 {
59 SetVS2002();
60 base.Write(kern);
61 }
62
63 /// <summary>
64 /// Cleans the specified kern.
65 /// </summary>
66 /// <param name="kern">The kern.</param>
67 public override void Clean(Kernel kern)
68 {
69 SetVS2002();
70 base.Clean(kern);
71 }
72
73 /// <summary>
74 /// Gets the name.
75 /// </summary>
76 /// <value>The name.</value>
77 public override string Name
78 {
79 get
80 {
81 return "vs2002";
82 }
83 }
84
85 #endregion
86 }
87}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/VS2003Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VS2003Target.cs.svn-base
deleted file mode 100644
index 10e2dc4..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/VS2003Target.cs.svn-base
+++ /dev/null
@@ -1,593 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 [Target("vs2003")]
38 public class VS2003Target : ITarget
39 {
40
41 #region Fields
42
43 string solutionVersion = "8.00";
44 string productVersion = "7.10.3077";
45 string schemaVersion = "2.0";
46 string versionName = "2003";
47 VSVersion version = VSVersion.VS71;
48
49 readonly Dictionary<string, ToolInfo> m_Tools = new Dictionary<string, ToolInfo>();
50 Kernel m_Kernel;
51
52 /// <summary>
53 /// Gets or sets the solution version.
54 /// </summary>
55 /// <value>The solution version.</value>
56 protected string SolutionVersion
57 {
58 get
59 {
60 return solutionVersion;
61 }
62 set
63 {
64 solutionVersion = value;
65 }
66 }
67 /// <summary>
68 /// Gets or sets the product version.
69 /// </summary>
70 /// <value>The product version.</value>
71 protected string ProductVersion
72 {
73 get
74 {
75 return productVersion;
76 }
77 set
78 {
79 productVersion = value;
80 }
81 }
82 /// <summary>
83 /// Gets or sets the schema version.
84 /// </summary>
85 /// <value>The schema version.</value>
86 protected string SchemaVersion
87 {
88 get
89 {
90 return schemaVersion;
91 }
92 set
93 {
94 schemaVersion = value;
95 }
96 }
97 /// <summary>
98 /// Gets or sets the name of the version.
99 /// </summary>
100 /// <value>The name of the version.</value>
101 protected string VersionName
102 {
103 get
104 {
105 return versionName;
106 }
107 set
108 {
109 versionName = value;
110 }
111 }
112 /// <summary>
113 /// Gets or sets the version.
114 /// </summary>
115 /// <value>The version.</value>
116 protected VSVersion Version
117 {
118 get
119 {
120 return version;
121 }
122 set
123 {
124 version = value;
125 }
126 }
127
128 #endregion
129
130 #region Constructors
131
132 /// <summary>
133 /// Initializes a new instance of the <see cref="VS2003Target"/> class.
134 /// </summary>
135 public VS2003Target()
136 {
137 m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP");
138 m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic");
139 }
140
141 #endregion
142
143 #region Private Methods
144
145 private string MakeRefPath(ProjectNode project)
146 {
147 string ret = "";
148 foreach(ReferencePathNode node in project.ReferencePaths)
149 {
150 try
151 {
152 string fullPath = Helper.ResolvePath(node.Path);
153 if(ret.Length < 1)
154 {
155 ret = fullPath;
156 }
157 else
158 {
159 ret += ";" + fullPath;
160 }
161 }
162 catch(ArgumentException)
163 {
164 m_Kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
165 }
166 }
167
168 return ret;
169 }
170
171 private void WriteProject(SolutionNode solution, ProjectNode project)
172 {
173 if(!m_Tools.ContainsKey(project.Language))
174 {
175 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
176 }
177
178 ToolInfo toolInfo = m_Tools[project.Language];
179 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
180 StreamWriter ps = new StreamWriter(projectFile);
181
182 m_Kernel.CurrentWorkingDirectory.Push();
183 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
184
185 using(ps)
186 {
187 ps.WriteLine("<VisualStudioProject>");
188 ps.WriteLine(" <{0}", toolInfo.XmlTag);
189 ps.WriteLine("\t\t\t\tProjectType = \"Local\"");
190 ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", ProductVersion);
191 ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", SchemaVersion);
192 ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper());
193 ps.WriteLine("\t\t>");
194
195 ps.WriteLine("\t\t\t\t<Build>");
196 ps.WriteLine(" <Settings");
197 ps.WriteLine("\t\t\t\t ApplicationIcon = \"{0}\"",project.AppIcon);
198 ps.WriteLine("\t\t\t\t AssemblyKeyContainerName = \"\"");
199 ps.WriteLine("\t\t\t\t AssemblyName = \"{0}\"", project.AssemblyName);
200 ps.WriteLine("\t\t\t\t AssemblyOriginatorKeyFile = \"\"");
201 ps.WriteLine("\t\t\t\t DefaultClientScript = \"JScript\"");
202 ps.WriteLine("\t\t\t\t DefaultHTMLPageLayout = \"Grid\"");
203 ps.WriteLine("\t\t\t\t DefaultTargetSchema = \"IE50\"");
204 ps.WriteLine("\t\t\t\t DelaySign = \"false\"");
205
206 if(Version == VSVersion.VS70)
207 {
208 ps.WriteLine("\t\t\t\t NoStandardLibraries = \"false\"");
209 }
210
211 ps.WriteLine("\t\t\t\t OutputType = \"{0}\"", project.Type);
212
213 foreach(ConfigurationNode conf in project.Configurations)
214 {
215 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
216 {
217 ps.WriteLine("\t\t\t\t PreBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
218 }
219 else
220 {
221 ps.WriteLine("\t\t\t\t PreBuildEvent = \"{0}\"", conf.Options["PreBuildEvent"]);
222 }
223 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
224 {
225 ps.WriteLine("\t\t\t\t PostBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
226 }
227 else
228 {
229 ps.WriteLine("\t\t\t\t PostBuildEvent = \"{0}\"", conf.Options["PostBuildEvent"]);
230 }
231 if (conf.Options["RunPostBuildEvent"] == null)
232 {
233 ps.WriteLine("\t\t\t\t RunPostBuildEvent = \"{0}\"", "OnBuildSuccess");
234 }
235 else
236 {
237 ps.WriteLine("\t\t\t\t RunPostBuildEvent = \"{0}\"", conf.Options["RunPostBuildEvent"]);
238 }
239 break;
240 }
241
242 ps.WriteLine("\t\t\t\t RootNamespace = \"{0}\"", project.RootNamespace);
243 ps.WriteLine("\t\t\t\t StartupObject = \"{0}\"", project.StartupObject);
244 ps.WriteLine("\t\t >");
245
246 foreach(ConfigurationNode conf in project.Configurations)
247 {
248 ps.WriteLine("\t\t\t\t <Config");
249 ps.WriteLine("\t\t\t\t Name = \"{0}\"", conf.Name);
250 ps.WriteLine("\t\t\t\t AllowUnsafeBlocks = \"{0}\"", conf.Options["AllowUnsafe"].ToString().ToLower());
251 ps.WriteLine("\t\t\t\t BaseAddress = \"{0}\"", conf.Options["BaseAddress"]);
252 ps.WriteLine("\t\t\t\t CheckForOverflowUnderflow = \"{0}\"", conf.Options["CheckUnderflowOverflow"].ToString().ToLower());
253 ps.WriteLine("\t\t\t\t ConfigurationOverrideFile = \"\"");
254 ps.WriteLine("\t\t\t\t DefineConstants = \"{0}\"", conf.Options["CompilerDefines"]);
255 ps.WriteLine("\t\t\t\t DocumentationFile = \"{0}\"", GetXmlDocFile(project, conf));//default to the assembly name
256 ps.WriteLine("\t\t\t\t DebugSymbols = \"{0}\"", conf.Options["DebugInformation"].ToString().ToLower());
257 ps.WriteLine("\t\t\t\t FileAlignment = \"{0}\"", conf.Options["FileAlignment"]);
258 ps.WriteLine("\t\t\t\t IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"].ToString().ToLower());
259
260 if(Version == VSVersion.VS71)
261 {
262 ps.WriteLine("\t\t\t\t NoStdLib = \"{0}\"", conf.Options["NoStdLib"].ToString().ToLower());
263 ps.WriteLine("\t\t\t\t NoWarn = \"{0}\"", conf.Options["SuppressWarnings"].ToString().ToLower());
264 }
265
266 ps.WriteLine("\t\t\t\t Optimize = \"{0}\"", conf.Options["OptimizeCode"].ToString().ToLower());
267 ps.WriteLine(" OutputPath = \"{0}\"",
268 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
269 ps.WriteLine(" RegisterForComInterop = \"{0}\"", conf.Options["RegisterComInterop"].ToString().ToLower());
270 ps.WriteLine(" RemoveIntegerChecks = \"{0}\"", conf.Options["RemoveIntegerChecks"].ToString().ToLower());
271 ps.WriteLine(" TreatWarningsAsErrors = \"{0}\"", conf.Options["WarningsAsErrors"].ToString().ToLower());
272 ps.WriteLine(" WarningLevel = \"{0}\"", conf.Options["WarningLevel"]);
273 ps.WriteLine(" />");
274 }
275
276 ps.WriteLine(" </Settings>");
277
278 ps.WriteLine(" <References>");
279 foreach(ReferenceNode refr in project.References)
280 {
281 ps.WriteLine(" <Reference");
282 ps.WriteLine(" Name = \"{0}\"", refr.Name);
283 ps.WriteLine(" AssemblyName = \"{0}\"", refr.Name);
284
285 if(solution.ProjectsTable.ContainsKey(refr.Name))
286 {
287 ProjectNode refProject = solution.ProjectsTable[refr.Name];
288 ps.WriteLine(" Project = \"{{{0}}}\"", refProject.Guid.ToString().ToUpper());
289 ps.WriteLine(" Package = \"{0}\"", toolInfo.Guid.ToUpper());
290 }
291 else
292 {
293 if(refr.Path != null)
294 {
295 ps.WriteLine(" HintPath = \"{0}\"", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
296 }
297
298 }
299
300 if(refr.LocalCopySpecified)
301 {
302 ps.WriteLine(" Private = \"{0}\"",refr.LocalCopy);
303 }
304
305 ps.WriteLine(" />");
306 }
307 ps.WriteLine(" </References>");
308
309 ps.WriteLine(" </Build>");
310 ps.WriteLine(" <Files>");
311
312 ps.WriteLine(" <Include>");
313
314 foreach(string file in project.Files)
315 {
316 string fileName = file.Replace(".\\", "");
317 ps.WriteLine(" <File");
318 ps.WriteLine(" RelPath = \"{0}\"", fileName);
319 ps.WriteLine(" SubType = \"{0}\"", project.Files.GetSubType(file));
320 ps.WriteLine(" BuildAction = \"{0}\"", project.Files.GetBuildAction(file));
321 ps.WriteLine(" />");
322
323 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
324 {
325 ps.WriteLine(" <File");
326 ps.WriteLine(" RelPath = \"{0}\"", fileName.Substring(0, fileName.LastIndexOf('.')) + ".resx");
327 int slash = fileName.LastIndexOf('\\');
328 if (slash == -1)
329 {
330 ps.WriteLine(" DependentUpon = \"{0}\"", fileName);
331 }
332 else
333 {
334 ps.WriteLine(" DependentUpon = \"{0}\"", fileName.Substring(slash + 1, fileName.Length - slash - 1));
335 }
336 ps.WriteLine(" BuildAction = \"{0}\"", "EmbeddedResource");
337 ps.WriteLine(" />");
338
339 }
340 }
341 ps.WriteLine(" </Include>");
342
343 ps.WriteLine(" </Files>");
344 ps.WriteLine(" </{0}>", toolInfo.XmlTag);
345 ps.WriteLine("</VisualStudioProject>");
346 }
347
348 ps = new StreamWriter(projectFile + ".user");
349 using(ps)
350 {
351 ps.WriteLine("<VisualStudioProject>");
352 ps.WriteLine(" <{0}>", toolInfo.XmlTag);
353 ps.WriteLine(" <Build>");
354
355 ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
356 foreach(ConfigurationNode conf in project.Configurations)
357 {
358 ps.WriteLine(" <Config");
359 ps.WriteLine(" Name = \"{0}\"", conf.Name);
360 ps.WriteLine(" />");
361 }
362 ps.WriteLine(" </Settings>");
363
364 ps.WriteLine(" </Build>");
365 ps.WriteLine(" </{0}>", toolInfo.XmlTag);
366 ps.WriteLine("</VisualStudioProject>");
367 }
368
369 m_Kernel.CurrentWorkingDirectory.Pop();
370 }
371
372 /// <summary>
373 /// Gets the XML doc file.
374 /// </summary>
375 /// <param name="project">The project.</param>
376 /// <param name="conf">The conf.</param>
377 /// <returns></returns>
378 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
379 {
380 if( conf == null )
381 {
382 throw new ArgumentNullException("conf");
383 }
384 if( project == null )
385 {
386 throw new ArgumentNullException("project");
387 }
388 // if(!(bool)conf.Options["GenerateXmlDocFile"]) //default to none, if the generate option is false
389 // {
390 // return string.Empty;
391 // }
392
393 //default to "AssemblyName.xml"
394 //string defaultValue = Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
395 //return (string)conf.Options["XmlDocFile", defaultValue];
396
397 //default to no XmlDocFile file
398 return (string)conf.Options["XmlDocFile", ""];
399 }
400
401 private void WriteSolution(SolutionNode solution)
402 {
403 m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", VersionName);
404
405 foreach(ProjectNode project in solution.Projects)
406 {
407 if(m_Kernel.AllowProject(project.FilterGroups))
408 {
409 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
410 WriteProject(solution, project);
411 }
412 }
413
414 m_Kernel.Log.Write("");
415 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
416 StreamWriter ss = new StreamWriter(solutionFile);
417
418 m_Kernel.CurrentWorkingDirectory.Push();
419 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
420
421 using(ss)
422 {
423 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
424 foreach(ProjectNode project in solution.Projects)
425 {
426 if(!m_Tools.ContainsKey(project.Language))
427 {
428 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
429 }
430
431 ToolInfo toolInfo = m_Tools[project.Language];
432
433 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
434 ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"",
435 toolInfo.Guid, project.Name, Helper.MakeFilePath(path, project.Name,
436 toolInfo.FileExtension), project.Guid.ToString().ToUpper());
437
438 ss.WriteLine("\tProjectSection(ProjectDependencies) = postProject");
439 ss.WriteLine("\tEndProjectSection");
440
441 ss.WriteLine("EndProject");
442 }
443
444 ss.WriteLine("Global");
445
446 ss.WriteLine("\tGlobalSection(SolutionConfiguration) = preSolution");
447 foreach(ConfigurationNode conf in solution.Configurations)
448 {
449 ss.WriteLine("\t\t{0} = {0}", conf.Name);
450 }
451 ss.WriteLine("\tEndGlobalSection");
452
453 ss.WriteLine("\tGlobalSection(ProjectDependencies) = postSolution");
454 foreach(ProjectNode project in solution.Projects)
455 {
456 for(int i = 0; i < project.References.Count; i++)
457 {
458 ReferenceNode refr = project.References[i];
459 if(solution.ProjectsTable.ContainsKey(refr.Name))
460 {
461 ProjectNode refProject = solution.ProjectsTable[refr.Name];
462 ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})",
463 project.Guid.ToString().ToUpper()
464 , i,
465 refProject.Guid.ToString().ToUpper()
466 );
467 }
468 }
469 }
470 ss.WriteLine("\tEndGlobalSection");
471
472 ss.WriteLine("\tGlobalSection(ProjectConfiguration) = postSolution");
473 foreach(ProjectNode project in solution.Projects)
474 {
475 foreach(ConfigurationNode conf in solution.Configurations)
476 {
477 ss.WriteLine("\t\t{{{0}}}.{1}.ActiveCfg = {1}|.NET",
478 project.Guid.ToString().ToUpper(),
479 conf.Name);
480
481 ss.WriteLine("\t\t{{{0}}}.{1}.Build.0 = {1}|.NET",
482 project.Guid.ToString().ToUpper(),
483 conf.Name);
484 }
485 }
486 ss.WriteLine("\tEndGlobalSection");
487
488 if(solution.Files != null)
489 {
490 ss.WriteLine("\tGlobalSection(SolutionItems) = postSolution");
491 foreach(string file in solution.Files)
492 {
493 ss.WriteLine("\t\t{0} = {0}", file);
494 }
495 ss.WriteLine("\tEndGlobalSection");
496 }
497
498 ss.WriteLine("\tGlobalSection(ExtensibilityGlobals) = postSolution");
499 ss.WriteLine("\tEndGlobalSection");
500 ss.WriteLine("\tGlobalSection(ExtensibilityAddIns) = postSolution");
501 ss.WriteLine("\tEndGlobalSection");
502
503 ss.WriteLine("EndGlobal");
504 }
505
506 m_Kernel.CurrentWorkingDirectory.Pop();
507 }
508
509 private void CleanProject(ProjectNode project)
510 {
511 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
512
513 ToolInfo toolInfo = m_Tools[project.Language];
514 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
515 string userFile = projectFile + ".user";
516
517 Helper.DeleteIfExists(projectFile);
518 Helper.DeleteIfExists(userFile);
519 }
520
521 private void CleanSolution(SolutionNode solution)
522 {
523 m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", VersionName, solution.Name);
524
525 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
526 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
527
528 Helper.DeleteIfExists(slnFile);
529 Helper.DeleteIfExists(suoFile);
530
531 foreach(ProjectNode project in solution.Projects)
532 {
533 CleanProject(project);
534 }
535
536 m_Kernel.Log.Write("");
537 }
538
539 #endregion
540
541 #region ITarget Members
542
543 /// <summary>
544 /// Writes the specified kern.
545 /// </summary>
546 /// <param name="kern">The kern.</param>
547 public virtual void Write(Kernel kern)
548 {
549 if( kern == null )
550 {
551 throw new ArgumentNullException("kern");
552 }
553 m_Kernel = kern;
554 foreach(SolutionNode sol in m_Kernel.Solutions)
555 {
556 WriteSolution(sol);
557 }
558 m_Kernel = null;
559 }
560
561 /// <summary>
562 /// Cleans the specified kern.
563 /// </summary>
564 /// <param name="kern">The kern.</param>
565 public virtual void Clean(Kernel kern)
566 {
567 if( kern == null )
568 {
569 throw new ArgumentNullException("kern");
570 }
571 m_Kernel = kern;
572 foreach(SolutionNode sol in m_Kernel.Solutions)
573 {
574 CleanSolution(sol);
575 }
576 m_Kernel = null;
577 }
578
579 /// <summary>
580 /// Gets the name.
581 /// </summary>
582 /// <value>The name.</value>
583 public virtual string Name
584 {
585 get
586 {
587 return "vs2003";
588 }
589 }
590
591 #endregion
592 }
593}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/VS2005Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VS2005Target.cs.svn-base
deleted file mode 100644
index 9c70e26..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/VS2005Target.cs.svn-base
+++ /dev/null
@@ -1,147 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Text;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Nodes;
33using Prebuild.Core.Utilities;
34
35namespace Prebuild.Core.Targets
36{
37 /// <summary>
38 ///
39 /// </summary>
40 [Target("vs2005")]
41 public class VS2005Target : VSGenericTarget
42 {
43 #region Inner Classes
44
45 #endregion
46
47 #region Fields
48
49 string solutionVersion = "9.00";
50 string productVersion = "8.0.50727";
51 string schemaVersion = "2.0";
52 string versionName = "Visual C# 2005";
53 string name = "vs2005";
54
55 VSVersion version = VSVersion.VS80;
56
57 public override string SolutionTag
58 {
59 get { return "# Visual Studio 2005"; }
60 }
61
62 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
63 {
64 return string.Empty;
65 }
66 /// <summary>
67 /// Gets or sets the solution version.
68 /// </summary>
69 /// <value>The solution version.</value>
70 public override string SolutionVersion
71 {
72 get
73 {
74 return solutionVersion;
75 }
76 }
77 /// <summary>
78 /// Gets or sets the product version.
79 /// </summary>
80 /// <value>The product version.</value>
81 public override string ProductVersion
82 {
83 get
84 {
85 return productVersion;
86 }
87 }
88 /// <summary>
89 /// Gets or sets the schema version.
90 /// </summary>
91 /// <value>The schema version.</value>
92 public override string SchemaVersion
93 {
94 get
95 {
96 return schemaVersion;
97 }
98 }
99 /// <summary>
100 /// Gets or sets the name of the version.
101 /// </summary>
102 /// <value>The name of the version.</value>
103 public override string VersionName
104 {
105 get
106 {
107 return versionName;
108 }
109 }
110 /// <summary>
111 /// Gets or sets the version.
112 /// </summary>
113 /// <value>The version.</value>
114 public override VSVersion Version
115 {
116 get
117 {
118 return version;
119 }
120 }
121 /// <summary>
122 /// Gets the name.
123 /// </summary>
124 /// <value>The name.</value>
125 public override string Name
126 {
127 get
128 {
129 return name;
130 }
131 }
132
133 #endregion
134
135 #region Constructors
136
137 /// <summary>
138 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
139 /// </summary>
140 public VS2005Target()
141 : base()
142 {
143 }
144
145 #endregion
146 }
147}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/VS2008Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VS2008Target.cs.svn-base
deleted file mode 100644
index fee4f7f..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/VS2008Target.cs.svn-base
+++ /dev/null
@@ -1,127 +0,0 @@
1using System;
2using System.IO;
3using System.Text;
4
5using Prebuild.Core.Attributes;
6using Prebuild.Core.Interfaces;
7using Prebuild.Core.Nodes;
8using Prebuild.Core.Utilities;
9using System.CodeDom.Compiler;
10
11namespace Prebuild.Core.Targets
12{
13
14 /// <summary>
15 ///
16 /// </summary>
17 [Target("vs2008")]
18 public class VS2008Target : VSGenericTarget
19 {
20 #region Fields
21 string solutionVersion = "10.00";
22 string productVersion = "9.0.21022";
23 string schemaVersion = "2.0";
24 string versionName = "Visual Studio 2008";
25 string name = "vs2008";
26 VSVersion version = VSVersion.VS90;
27
28 /// <summary>
29 /// Gets or sets the solution version.
30 /// </summary>
31 /// <value>The solution version.</value>
32 public override string SolutionVersion
33 {
34 get
35 {
36 return solutionVersion;
37 }
38 }
39 /// <summary>
40 /// Gets or sets the product version.
41 /// </summary>
42 /// <value>The product version.</value>
43 public override string ProductVersion
44 {
45 get
46 {
47 return productVersion;
48 }
49 }
50 /// <summary>
51 /// Gets or sets the schema version.
52 /// </summary>
53 /// <value>The schema version.</value>
54 public override string SchemaVersion
55 {
56 get
57 {
58 return schemaVersion;
59 }
60 }
61 /// <summary>
62 /// Gets or sets the name of the version.
63 /// </summary>
64 /// <value>The name of the version.</value>
65 public override string VersionName
66 {
67 get
68 {
69 return versionName;
70 }
71 }
72 /// <summary>
73 /// Gets or sets the version.
74 /// </summary>
75 /// <value>The version.</value>
76 public override VSVersion Version
77 {
78 get
79 {
80 return version;
81 }
82 }
83 /// <summary>
84 /// Gets the name.
85 /// </summary>
86 /// <value>The name.</value>
87 public override string Name
88 {
89 get
90 {
91 return name;
92 }
93 }
94
95 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
96 {
97 switch (frameworkVersion)
98 {
99 case FrameworkVersion.v3_5:
100 return "ToolsVersion=\"3.5\"";
101 case FrameworkVersion.v3_0:
102 return "ToolsVersion=\"3.0\"";
103 default:
104 return "ToolsVersion=\"2.0\"";
105 }
106 }
107
108 public override string SolutionTag
109 {
110 get { return "# Visual Studio 2008"; }
111 }
112
113 #endregion
114
115 #region Constructors
116
117 /// <summary>
118 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
119 /// </summary>
120 public VS2008Target()
121 : base()
122 {
123 }
124
125 #endregion
126 }
127}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/VS2010Target.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VS2010Target.cs.svn-base
deleted file mode 100644
index b16120c..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/VS2010Target.cs.svn-base
+++ /dev/null
@@ -1,138 +0,0 @@
1using System;
2using System.IO;
3using System.Text;
4
5using Prebuild.Core.Attributes;
6using Prebuild.Core.Interfaces;
7using Prebuild.Core.Nodes;
8using Prebuild.Core.Utilities;
9using System.CodeDom.Compiler;
10
11namespace Prebuild.Core.Targets
12{
13
14 /// <summary>
15 ///
16 /// </summary>
17 [Target("vs2010")]
18 public class VS2010Target : VSGenericTarget
19 {
20 #region Fields
21
22 string solutionVersion = "11.00";
23 string productVersion = "9.0.30729";
24 string schemaVersion = "2.0";
25 string versionName = "Visual Studio 2010";
26 string name = "vs2010";
27 VSVersion version = VSVersion.VS10;
28
29 #endregion
30
31 #region Properties
32
33 /// <summary>
34 /// Gets or sets the solution version.
35 /// </summary>
36 /// <value>The solution version.</value>
37 public override string SolutionVersion
38 {
39 get
40 {
41 return solutionVersion;
42 }
43 }
44
45 /// <summary>
46 /// Gets or sets the product version.
47 /// </summary>
48 /// <value>The product version.</value>
49 public override string ProductVersion
50 {
51 get
52 {
53 return productVersion;
54 }
55 }
56
57 /// <summary>
58 /// Gets or sets the schema version.
59 /// </summary>
60 /// <value>The schema version.</value>
61 public override string SchemaVersion
62 {
63 get
64 {
65 return schemaVersion;
66 }
67 }
68
69 /// <summary>
70 /// Gets or sets the name of the version.
71 /// </summary>
72 /// <value>The name of the version.</value>
73 public override string VersionName
74 {
75 get
76 {
77 return versionName;
78 }
79 }
80
81 /// <summary>
82 /// Gets or sets the version.
83 /// </summary>
84 /// <value>The version.</value>
85 public override VSVersion Version
86 {
87 get
88 {
89 return version;
90 }
91 }
92
93 /// <summary>
94 /// Gets the name.
95 /// </summary>
96 /// <value>The name.</value>
97 public override string Name
98 {
99 get
100 {
101 return name;
102 }
103 }
104
105 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
106 {
107 switch (frameworkVersion)
108 {
109 case FrameworkVersion.v4_0:
110 case FrameworkVersion.v3_5:
111 return "ToolsVersion=\"4.0\"";
112 case FrameworkVersion.v3_0:
113 return "ToolsVersion=\"3.0\"";
114 default:
115 return "ToolsVersion=\"2.0\"";
116 }
117 }
118
119 public override string SolutionTag
120 {
121 get { return "# Visual Studio 2010"; }
122 }
123
124 #endregion
125
126 #region Constructors
127
128 /// <summary>
129 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
130 /// </summary>
131 public VS2010Target()
132 : base()
133 {
134 }
135
136 #endregion
137 }
138}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/VSGenericTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VSGenericTarget.cs.svn-base
deleted file mode 100644
index cd3f5bb..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/VSGenericTarget.cs.svn-base
+++ /dev/null
@@ -1,922 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2008 Matthew Holmes (matthew@wildfiregames.com), John Anderson (sontek@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8 * Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13 * The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.IO;
29using Prebuild.Core.Interfaces;
30using Prebuild.Core.Nodes;
31using Prebuild.Core.Utilities;
32using System.CodeDom.Compiler;
33
34namespace Prebuild.Core.Targets
35{
36
37 /// <summary>
38 ///
39 /// </summary>
40 public abstract class VSGenericTarget : ITarget
41 {
42 #region Fields
43
44 readonly Dictionary<string, ToolInfo> tools = new Dictionary<string, ToolInfo>();
45 Kernel kernel;
46 #endregion
47
48 #region Properties
49 /// <summary>
50 /// Gets or sets the solution version.
51 /// </summary>
52 /// <value>The solution version.</value>
53 public abstract string SolutionVersion { get; }
54 /// <summary>
55 /// Gets or sets the product version.
56 /// </summary>
57 /// <value>The product version.</value>
58 public abstract string ProductVersion { get; }
59 /// <summary>
60 /// Gets or sets the schema version.
61 /// </summary>
62 /// <value>The schema version.</value>
63 public abstract string SchemaVersion { get; }
64 /// <summary>
65 /// Gets or sets the name of the version.
66 /// </summary>
67 /// <value>The name of the version.</value>
68 public abstract string VersionName { get; }
69 /// <summary>
70 /// Gets or sets the version.
71 /// </summary>
72 /// <value>The version.</value>
73 public abstract VSVersion Version { get; }
74 /// <summary>
75 /// Gets the name.
76 /// </summary>
77 /// <value>The name.</value>
78 public abstract string Name { get; }
79
80 protected abstract string GetToolsVersionXml(FrameworkVersion version);
81 public abstract string SolutionTag { get; }
82
83 #endregion
84
85 #region Constructors
86
87 /// <summary>
88 /// Initializes a new instance of the <see cref="VSGenericTarget"/> class.
89 /// </summary>
90 protected VSGenericTarget()
91 {
92 tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets");
93 tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN");
94 tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets");
95 tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets");
96 tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null);
97 }
98
99 #endregion
100
101 #region Private Methods
102
103 private string MakeRefPath(ProjectNode project)
104 {
105 string ret = "";
106 foreach (ReferencePathNode node in project.ReferencePaths)
107 {
108 try
109 {
110 string fullPath = Helper.ResolvePath(node.Path);
111 if (ret.Length < 1)
112 {
113 ret = fullPath;
114 }
115 else
116 {
117 ret += ";" + fullPath;
118 }
119 }
120 catch (ArgumentException)
121 {
122 kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
123 }
124 }
125
126 return ret;
127 }
128
129 private static ProjectNode FindProjectInSolution(string name, SolutionNode solution)
130 {
131 SolutionNode node = solution;
132
133 while (node.Parent is SolutionNode)
134 node = node.Parent as SolutionNode;
135
136 return FindProjectInSolutionRecursively(name, node);
137 }
138
139 private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution)
140 {
141 if (solution.ProjectsTable.ContainsKey(name))
142 return solution.ProjectsTable[name];
143
144 foreach (SolutionNode child in solution.Solutions)
145 {
146 ProjectNode node = FindProjectInSolutionRecursively(name, child);
147 if (node != null)
148 return node;
149 }
150
151 return null;
152 }
153
154 private void WriteProject(SolutionNode solution, ProjectNode project)
155 {
156 if (!tools.ContainsKey(project.Language))
157 {
158 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
159 }
160
161 ToolInfo toolInfo = tools[project.Language];
162 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
163 StreamWriter ps = new StreamWriter(projectFile);
164
165 kernel.CurrentWorkingDirectory.Push();
166 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
167
168 #region Project File
169 using (ps)
170 {
171 ps.WriteLine("<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" {0}>", GetToolsVersionXml(project.FrameworkVersion));
172 ps.WriteLine(" <PropertyGroup>");
173 ps.WriteLine(" <ProjectType>Local</ProjectType>");
174 ps.WriteLine(" <ProductVersion>{0}</ProductVersion>", ProductVersion);
175 ps.WriteLine(" <SchemaVersion>{0}</SchemaVersion>", SchemaVersion);
176 ps.WriteLine(" <ProjectGuid>{{{0}}}</ProjectGuid>", project.Guid.ToString().ToUpper());
177
178 // Visual Studio has a hard coded guid for the project type
179 if (project.Type == ProjectType.Web)
180 ps.WriteLine(" <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>");
181 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
182 ps.WriteLine(" <ApplicationIcon>{0}</ApplicationIcon>", project.AppIcon);
183 ps.WriteLine(" <AssemblyKeyContainerName>");
184 ps.WriteLine(" </AssemblyKeyContainerName>");
185 ps.WriteLine(" <AssemblyName>{0}</AssemblyName>", project.AssemblyName);
186 foreach (ConfigurationNode conf in project.Configurations)
187 {
188 if (conf.Options.KeyFile != "")
189 {
190 ps.WriteLine(" <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>", conf.Options.KeyFile);
191 ps.WriteLine(" <SignAssembly>true</SignAssembly>");
192 break;
193 }
194 }
195 ps.WriteLine(" <DefaultClientScript>JScript</DefaultClientScript>");
196 ps.WriteLine(" <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>");
197 ps.WriteLine(" <DefaultTargetSchema>IE50</DefaultTargetSchema>");
198 ps.WriteLine(" <DelaySign>false</DelaySign>");
199 ps.WriteLine(" <TargetFrameworkVersion>{0}</TargetFrameworkVersion>", project.FrameworkVersion.ToString().Replace("_", "."));
200
201 ps.WriteLine(" <OutputType>{0}</OutputType>", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString());
202 ps.WriteLine(" <AppDesignerFolder>{0}</AppDesignerFolder>", project.DesignerFolder);
203 ps.WriteLine(" <RootNamespace>{0}</RootNamespace>", project.RootNamespace);
204 ps.WriteLine(" <StartupObject>{0}</StartupObject>", project.StartupObject);
205 if (string.IsNullOrEmpty(project.DebugStartParameters))
206 {
207 ps.WriteLine(" <StartArguments>{0}</StartArguments>", project.DebugStartParameters);
208 }
209 ps.WriteLine(" <FileUpgradeFlags>");
210 ps.WriteLine(" </FileUpgradeFlags>");
211
212 ps.WriteLine(" </PropertyGroup>");
213
214 foreach (ConfigurationNode conf in project.Configurations)
215 {
216 ps.Write(" <PropertyGroup ");
217 ps.WriteLine("Condition=\" '$(Configuration)|$(Platform)' == '{0}|{1}' \">", conf.Name, conf.Platform);
218 ps.WriteLine(" <AllowUnsafeBlocks>{0}</AllowUnsafeBlocks>", conf.Options["AllowUnsafe"]);
219 ps.WriteLine(" <BaseAddress>{0}</BaseAddress>", conf.Options["BaseAddress"]);
220 ps.WriteLine(" <CheckForOverflowUnderflow>{0}</CheckForOverflowUnderflow>", conf.Options["CheckUnderflowOverflow"]);
221 ps.WriteLine(" <ConfigurationOverrideFile>");
222 ps.WriteLine(" </ConfigurationOverrideFile>");
223 ps.WriteLine(" <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]);
224 ps.WriteLine(" <DocumentationFile>{0}</DocumentationFile>", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString()));
225 ps.WriteLine(" <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]);
226 ps.WriteLine(" <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]);
227 ps.WriteLine(" <Optimize>{0}</Optimize>", conf.Options["OptimizeCode"]);
228 if (project.Type != ProjectType.Web)
229 ps.WriteLine(" <OutputPath>{0}</OutputPath>",
230 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
231 else
232 ps.WriteLine(" <OutputPath>{0}</OutputPath>",
233 Helper.EndPath(Helper.NormalizePath("bin\\")));
234
235 ps.WriteLine(" <RegisterForComInterop>{0}</RegisterForComInterop>", conf.Options["RegisterComInterop"]);
236 ps.WriteLine(" <RemoveIntegerChecks>{0}</RemoveIntegerChecks>", conf.Options["RemoveIntegerChecks"]);
237 ps.WriteLine(" <TreatWarningsAsErrors>{0}</TreatWarningsAsErrors>", conf.Options["WarningsAsErrors"]);
238 ps.WriteLine(" <WarningLevel>{0}</WarningLevel>", conf.Options["WarningLevel"]);
239 ps.WriteLine(" <NoStdLib>{0}</NoStdLib>", conf.Options["NoStdLib"]);
240 ps.WriteLine(" <NoWarn>{0}</NoWarn>", conf.Options["SuppressWarnings"]);
241 ps.WriteLine(" <PlatformTarget>{0}</PlatformTarget>", conf.Platform);
242 ps.WriteLine(" </PropertyGroup>");
243 }
244
245 //ps.WriteLine(" </Settings>");
246
247 Dictionary<ReferenceNode, ProjectNode> projectReferences = new Dictionary<ReferenceNode, ProjectNode>();
248 List<ReferenceNode> otherReferences = new List<ReferenceNode>();
249
250 foreach (ReferenceNode refr in project.References)
251 {
252 ProjectNode projectNode = FindProjectInSolution(refr.Name, solution);
253
254 if (projectNode == null)
255 otherReferences.Add(refr);
256 else
257 projectReferences.Add(refr, projectNode);
258 }
259 // Assembly References
260 ps.WriteLine(" <ItemGroup>");
261
262 foreach (ReferenceNode refr in otherReferences)
263 {
264 ps.Write(" <Reference");
265 ps.Write(" Include=\"");
266 ps.Write(refr.Name);
267 ps.WriteLine("\" >");
268 ps.Write(" <Name>");
269 ps.Write(refr.Name);
270 ps.WriteLine("</Name>");
271
272 if(!String.IsNullOrEmpty(refr.Path))
273 {
274 // Use absolute path to assembly (for determining assembly type)
275 string absolutePath = Path.Combine(project.FullPath, refr.Path);
276 if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "exe"))) {
277 // Assembly is an executable (exe)
278 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "exe"));
279 } else if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "dll"))) {
280 // Assembly is an library (dll)
281 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
282 } else {
283 string referencePath = Helper.MakeFilePath(refr.Path, refr.Name, "dll");
284 kernel.Log.Write(LogType.Warning, "Reference \"{0}\": The specified file doesn't exist.", referencePath);
285 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
286 }
287 }
288
289 ps.WriteLine(" <Private>{0}</Private>", refr.LocalCopy);
290 ps.WriteLine(" </Reference>");
291 }
292 ps.WriteLine(" </ItemGroup>");
293
294 //Project References
295 ps.WriteLine(" <ItemGroup>");
296 foreach (KeyValuePair<ReferenceNode, ProjectNode> pair in projectReferences)
297 {
298 ToolInfo tool = tools[pair.Value.Language];
299 if (tools == null)
300 throw new UnknownLanguageException();
301
302 string path =
303 Helper.MakePathRelativeTo(project.FullPath,
304 Helper.MakeFilePath(pair.Value.FullPath, pair.Value.Name, tool.FileExtension));
305 ps.WriteLine(" <ProjectReference Include=\"{0}\">", path);
306
307 // TODO: Allow reference to visual basic projects
308 ps.WriteLine(" <Name>{0}</Name>", pair.Value.Name);
309 ps.WriteLine(" <Project>{0}</Project>", pair.Value.Guid.ToString("B").ToUpper());
310 ps.WriteLine(" <Package>{0}</Package>", tool.Guid.ToUpper());
311
312 //This is the Copy Local flag in VS
313 ps.WriteLine(" <Private>{0}</Private>", pair.Key.LocalCopy);
314
315 ps.WriteLine(" </ProjectReference>");
316 }
317 ps.WriteLine(" </ItemGroup>");
318
319 // ps.WriteLine(" </Build>");
320 ps.WriteLine(" <ItemGroup>");
321
322 // ps.WriteLine(" <Include>");
323 List<string> list = new List<string>();
324
325 foreach (string path in project.Files)
326 {
327 string lower = path.ToLower();
328 if (lower.EndsWith(".resx"))
329 {
330 string codebehind = String.Format("{0}.Designer{1}", path.Substring(0, path.LastIndexOf('.')), toolInfo.LanguageExtension);
331 if (!list.Contains(codebehind))
332 list.Add(codebehind);
333 }
334
335 }
336
337 foreach (string filePath in project.Files)
338 {
339 // if (file == "Properties\\Bind.Designer.cs")
340 // {
341 // Console.WriteLine("Wait a minute!");
342 // Console.WriteLine(project.Files.GetSubType(file).ToString());
343 // }
344 SubType subType = project.Files.GetSubType(filePath);
345
346 // Visual Studio chokes on file names if forward slash is used as a path separator
347 // instead of backslash. So we must make sure that all file paths written to the
348 // project file use \ as a path separator.
349 string file = filePath.Replace(@"/", @"\");
350
351 if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer
352 && subType != SubType.CodeBehind)
353 {
354 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
355 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file));
356 ps.WriteLine(" <SubType>Designer</SubType>");
357 ps.WriteLine(" </EmbeddedResource>");
358 //
359 }
360
361 if (subType == SubType.Designer)
362 {
363 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file);
364
365 string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs";
366 string dependent_name = filePath.Substring(0, file.LastIndexOf('.')) + ".cs";
367
368 // Check for a parent .cs file with the same name as this designer file
369 if (File.Exists(Helper.NormalizePath(dependent_name)))
370 {
371 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
372 }
373 else
374 {
375 ps.WriteLine(" <Generator>ResXFileCodeGenerator</Generator>");
376 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", Path.GetFileName(autogen_name));
377 ps.WriteLine(" <SubType>" + subType + "</SubType>");
378 }
379
380 ps.WriteLine(" </EmbeddedResource>");
381 if (File.Exists(Helper.NormalizePath(autogen_name)))
382 {
383 ps.WriteLine(" <Compile Include=\"{0}\">", autogen_name);
384 //ps.WriteLine(" <DesignTime>True</DesignTime>");
385
386 // If a parent .cs file exists, link this autogen file to it. Otherwise link
387 // to the designer file
388 if (File.Exists(dependent_name))
389 {
390 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
391 }
392 else
393 {
394 ps.WriteLine(" <AutoGen>True</AutoGen>");
395 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(filePath));
396 }
397
398 ps.WriteLine(" </Compile>");
399 }
400 list.Add(autogen_name);
401 }
402 if (subType == SubType.Settings)
403 {
404 ps.Write(" <{0} ", project.Files.GetBuildAction(filePath));
405 ps.WriteLine("Include=\"{0}\">", file);
406 string fileName = Path.GetFileName(filePath);
407 if (project.Files.GetBuildAction(filePath) == BuildAction.None)
408 {
409 ps.WriteLine(" <Generator>SettingsSingleFileGenerator</Generator>");
410 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
411 }
412 else
413 {
414 ps.WriteLine(" <SubType>Code</SubType>");
415 ps.WriteLine(" <AutoGen>True</AutoGen>");
416 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>");
417 string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.'));
418 string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.'));
419 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(fileNameShorter + ".settings"));
420 }
421 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(filePath));
422 }
423 else if (subType != SubType.Designer)
424 {
425 string path = Helper.NormalizePath(file);
426 string path_lower = path.ToLower();
427
428 if (!list.Contains(filePath))
429 {
430 ps.Write(" <{0} ", project.Files.GetBuildAction(filePath));
431
432 int startPos = 0;
433 if (project.Files.GetPreservePath(filePath))
434 {
435 while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1)
436 startPos++;
437
438 }
439 else
440 {
441 startPos = file.LastIndexOf(Path.GetFileName(path));
442 }
443
444 // be sure to write out the path with backslashes so VS recognizes
445 // the file properly.
446 ps.WriteLine("Include=\"{0}\">", file);
447
448 int last_period_index = file.LastIndexOf('.');
449 string short_file_name = file.Substring(0, last_period_index);
450 string extension = Path.GetExtension(path);
451 // make this upper case, so that when File.Exists tests for the
452 // existence of a designer file on a case-sensitive platform,
453 // it is correctly identified.
454 string designer_format = string.Format(".Designer{0}", extension);
455
456 if (path_lower.EndsWith(designer_format.ToLowerInvariant()))
457 {
458 int designer_index = path.IndexOf(designer_format);
459 string file_name = path.Substring(0, designer_index);
460
461 // There are two corrections to the next lines:
462 // 1. Fix the connection between a designer file and a form
463 // or usercontrol that don't have an associated resx file.
464 // 2. Connect settings files to associated designer files.
465 if (File.Exists(file_name + extension))
466 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + extension));
467 else if (File.Exists(file_name + ".resx"))
468 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".resx"));
469 else if (File.Exists(file_name + ".settings"))
470 {
471 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".settings"));
472 ps.WriteLine(" <AutoGen>True</AutoGen>");
473 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>");
474 }
475 }
476 else if (subType == SubType.CodeBehind)
477 {
478 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(short_file_name));
479 }
480 if (project.Files.GetIsLink(filePath))
481 {
482 string alias = project.Files.GetLinkPath(filePath);
483 alias += file.Substring(startPos);
484 alias = Helper.NormalizePath(alias);
485 ps.WriteLine(" <Link>{0}</Link>", alias);
486 }
487 else if (project.Files.GetBuildAction(filePath) != BuildAction.None)
488 {
489 if (project.Files.GetBuildAction(filePath) != BuildAction.EmbeddedResource)
490 {
491 ps.WriteLine(" <SubType>{0}</SubType>", subType);
492 }
493 }
494
495 if (project.Files.GetCopyToOutput(filePath) != CopyToOutput.Never)
496 {
497 ps.WriteLine(" <CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(filePath));
498 }
499
500 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(filePath));
501 }
502 }
503 }
504
505 ps.WriteLine(" </ItemGroup>");
506 ps.WriteLine(" <Import Project=\"" + toolInfo.ImportProject + "\" />");
507 ps.WriteLine(" <PropertyGroup>");
508 ps.WriteLine(" <PreBuildEvent>");
509 ps.WriteLine(" </PreBuildEvent>");
510 ps.WriteLine(" <PostBuildEvent>");
511 ps.WriteLine(" </PostBuildEvent>");
512 ps.WriteLine(" </PropertyGroup>");
513 ps.WriteLine("</Project>");
514 }
515 #endregion
516
517 #region User File
518
519 ps = new StreamWriter(projectFile + ".user");
520 using (ps)
521 {
522 // Get the first configuration from the project.
523 ConfigurationNode firstConfiguration = null;
524
525 if (project.Configurations.Count > 0)
526 {
527 firstConfiguration = project.Configurations[0];
528 }
529
530 ps.WriteLine("<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
531 //ps.WriteLine( "<VisualStudioProject>" );
532 //ps.WriteLine(" <{0}>", toolInfo.XMLTag);
533 //ps.WriteLine(" <Build>");
534 ps.WriteLine(" <PropertyGroup>");
535 //ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
536
537 if (firstConfiguration != null)
538 {
539 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">{0}</Configuration>", firstConfiguration.Name);
540 ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">{0}</Platform>", firstConfiguration.Platform);
541 }
542
543 ps.WriteLine(" <ReferencePath>{0}</ReferencePath>", MakeRefPath(project));
544 ps.WriteLine(" <LastOpenVersion>{0}</LastOpenVersion>", ProductVersion);
545 ps.WriteLine(" <ProjectView>ProjectFiles</ProjectView>");
546 ps.WriteLine(" <ProjectTrust>0</ProjectTrust>");
547 ps.WriteLine(" </PropertyGroup>");
548 foreach (ConfigurationNode conf in project.Configurations)
549 {
550 ps.Write(" <PropertyGroup");
551 ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|{1}' \"", conf.Name, conf.Platform);
552 ps.WriteLine(" />");
553 }
554 ps.WriteLine("</Project>");
555 }
556 #endregion
557
558 kernel.CurrentWorkingDirectory.Pop();
559 }
560
561 private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk)
562 {
563 kernel.Log.Write("Creating {0} solution and project files", VersionName);
564
565 foreach (SolutionNode child in solution.Solutions)
566 {
567 kernel.Log.Write("...Creating folder: {0}", child.Name);
568 WriteSolution(child, false);
569 }
570
571 foreach (ProjectNode project in solution.Projects)
572 {
573 kernel.Log.Write("...Creating project: {0}", project.Name);
574 WriteProject(solution, project);
575 }
576
577 foreach (DatabaseProjectNode project in solution.DatabaseProjects)
578 {
579 kernel.Log.Write("...Creating database project: {0}", project.Name);
580 WriteDatabaseProject(solution, project);
581 }
582
583 if (writeSolutionToDisk) // only write main solution
584 {
585 kernel.Log.Write("");
586 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
587
588 using (StreamWriter ss = new StreamWriter(solutionFile))
589 {
590 kernel.CurrentWorkingDirectory.Push();
591 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
592
593 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
594 ss.WriteLine(SolutionTag);
595
596 WriteProjectDeclarations(ss, solution, solution);
597
598 ss.WriteLine("Global");
599
600 ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
601 foreach (ConfigurationNode conf in solution.Configurations)
602 {
603 ss.WriteLine("\t\t{0} = {0}", conf.NameAndPlatform);
604 }
605 ss.WriteLine("\tEndGlobalSection");
606
607 ss.WriteLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
608 WriteConfigurationLines(solution.Configurations, solution, ss);
609 ss.WriteLine("\tEndGlobalSection");
610
611 if (solution.Solutions.Count > 0)
612 {
613 ss.WriteLine("\tGlobalSection(NestedProjects) = preSolution");
614 foreach (SolutionNode embeddedSolution in solution.Solutions)
615 {
616 WriteNestedProjectMap(ss, embeddedSolution);
617 }
618 ss.WriteLine("\tEndGlobalSection");
619 }
620
621 ss.WriteLine("EndGlobal");
622 }
623
624 kernel.CurrentWorkingDirectory.Pop();
625 }
626 }
627
628 private void WriteProjectDeclarations(TextWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution)
629 {
630 foreach (SolutionNode childSolution in embeddedSolution.Solutions)
631 {
632 WriteEmbeddedSolution(writer, childSolution);
633 WriteProjectDeclarations(writer, actualSolution, childSolution);
634 }
635
636 foreach (ProjectNode project in embeddedSolution.Projects)
637 {
638 WriteProject(actualSolution, writer, project);
639 }
640
641 foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
642 {
643 WriteProject(actualSolution, writer, dbProject);
644 }
645
646 if (actualSolution.Guid == embeddedSolution.Guid)
647 {
648 WriteSolutionFiles(actualSolution, writer);
649 }
650 }
651
652 private static void WriteNestedProjectMap(TextWriter writer, SolutionNode embeddedSolution)
653 {
654 foreach (ProjectNode project in embeddedSolution.Projects)
655 {
656 WriteNestedProject(writer, embeddedSolution, project.Guid);
657 }
658
659 foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
660 {
661 WriteNestedProject(writer, embeddedSolution, dbProject.Guid);
662 }
663
664 foreach (SolutionNode child in embeddedSolution.Solutions)
665 {
666 WriteNestedProject(writer, embeddedSolution, child.Guid);
667 WriteNestedProjectMap(writer, child);
668 }
669 }
670
671 private static void WriteNestedProject(TextWriter writer, SolutionNode solution, Guid projectGuid)
672 {
673 WriteNestedFolder(writer, solution.Guid, projectGuid);
674 }
675
676 private static void WriteNestedFolder(TextWriter writer, Guid parentGuid, Guid childGuid)
677 {
678 writer.WriteLine("\t\t{0} = {1}",
679 childGuid.ToString("B").ToUpper(),
680 parentGuid.ToString("B").ToUpper());
681 }
682
683 private static void WriteConfigurationLines(IEnumerable<ConfigurationNode> configurations, SolutionNode solution, TextWriter ss)
684 {
685 foreach (ProjectNode project in solution.Projects)
686 {
687 foreach (ConfigurationNode conf in configurations)
688 {
689 ss.WriteLine("\t\t{0}.{1}.ActiveCfg = {1}",
690 project.Guid.ToString("B").ToUpper(),
691 conf.NameAndPlatform);
692
693 ss.WriteLine("\t\t{0}.{1}.Build.0 = {1}",
694 project.Guid.ToString("B").ToUpper(),
695 conf.NameAndPlatform);
696 }
697 }
698
699 foreach (SolutionNode child in solution.Solutions)
700 {
701 WriteConfigurationLines(configurations, child, ss);
702 }
703 }
704
705 private void WriteSolutionFiles(SolutionNode solution, TextWriter ss)
706 {
707 if(solution.Files != null && solution.Files.Count > 0)
708 WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files);
709 }
710
711 private void WriteEmbeddedSolution(TextWriter writer, SolutionNode embeddedSolution)
712 {
713 WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files);
714 }
715
716 private void WriteProject(SolutionNode solution, TextWriter ss, ProjectNode project)
717 {
718 WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath);
719 }
720
721 private void WriteProject(SolutionNode solution, TextWriter ss, DatabaseProjectNode dbProject)
722 {
723 if (solution.Files != null && solution.Files.Count > 0)
724 WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath);
725 }
726
727 const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\"";
728 const string ProjectDeclarationEndFormat = "EndProject";
729
730 private void WriteProject(TextWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath)
731 {
732 if (!tools.ContainsKey(language))
733 throw new UnknownLanguageException("Unknown .NET language: " + language);
734
735 ToolInfo toolInfo = tools[language];
736
737 string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath);
738
739 path = Helper.MakeFilePath(path, name, toolInfo.FileExtension);
740
741 WriteProject(ss, language, guid, name, path);
742 }
743
744 private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location)
745 {
746 WriteProject(writer, language, projectGuid, name, location, null);
747 }
748
749 private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files)
750 {
751 if (!tools.ContainsKey(language))
752 throw new UnknownLanguageException("Unknown .NET language: " + language);
753
754 ToolInfo toolInfo = tools[language];
755
756 writer.WriteLine(ProjectDeclarationBeginFormat,
757 toolInfo.Guid,
758 name,
759 location,
760 projectGuid.ToString("B").ToUpper());
761
762 if (files != null)
763 {
764 writer.WriteLine("\tProjectSection(SolutionItems) = preProject");
765
766 foreach (string file in files)
767 writer.WriteLine("\t\t{0} = {0}", file);
768
769 writer.WriteLine("\tEndProjectSection");
770 }
771
772 writer.WriteLine(ProjectDeclarationEndFormat);
773 }
774
775 private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project)
776 {
777 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp");
778 IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), " ");
779
780 kernel.CurrentWorkingDirectory.Push();
781
782 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
783
784 using (ps)
785 {
786 ps.WriteLine("# Microsoft Developer Studio Project File - Database Project");
787 ps.WriteLine("Begin DataProject = \"{0}\"", project.Name);
788 ps.Indent++;
789 ps.WriteLine("MSDTVersion = \"80\"");
790 // TODO: Use the project.Files property
791 if (ContainsSqlFiles(Path.GetDirectoryName(projectFile)))
792 WriteDatabaseFoldersAndFiles(ps, Path.GetDirectoryName(projectFile));
793
794 ps.WriteLine("Begin DBRefFolder = \"Database References\"");
795 ps.Indent++;
796 foreach (DatabaseReferenceNode reference in project.References)
797 {
798 ps.WriteLine("Begin DBRefNode = \"{0}\"", reference.Name);
799 ps.Indent++;
800 ps.WriteLine("ConnectStr = \"{0}\"", reference.ConnectionString);
801 ps.WriteLine("Provider = \"{0}\"", reference.ProviderId.ToString("B").ToUpper());
802 //ps.WriteLine("Colorizer = 5");
803 ps.Indent--;
804 ps.WriteLine("End");
805 }
806 ps.Indent--;
807 ps.WriteLine("End");
808 ps.Indent--;
809 ps.WriteLine("End");
810
811 ps.Flush();
812 }
813
814 kernel.CurrentWorkingDirectory.Pop();
815 }
816
817 private static bool ContainsSqlFiles(string folder)
818 {
819 if(Directory.GetFiles(folder, "*.sql").Length > 0)
820 return true; // if the folder contains 1 .sql file, that's good enough
821
822 foreach (string child in Directory.GetDirectories(folder))
823 {
824 if (ContainsSqlFiles(child))
825 return true; // if 1 child folder contains a .sql file, still good enough
826 }
827
828 return false;
829 }
830
831 private static void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder)
832 {
833 foreach (string child in Directory.GetDirectories(folder))
834 {
835 if (ContainsSqlFiles(child))
836 {
837 writer.WriteLine("Begin Folder = \"{0}\"", Path.GetFileName(child));
838 writer.Indent++;
839 WriteDatabaseFoldersAndFiles(writer, child);
840 writer.Indent--;
841 writer.WriteLine("End");
842 }
843 }
844 foreach (string file in Directory.GetFiles(folder, "*.sql"))
845 {
846 writer.WriteLine("Script = \"{0}\"", Path.GetFileName(file));
847 }
848 }
849
850 private void CleanProject(ProjectNode project)
851 {
852 kernel.Log.Write("...Cleaning project: {0}", project.Name);
853
854 ToolInfo toolInfo = tools[project.Language];
855 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
856 string userFile = projectFile + ".user";
857
858 Helper.DeleteIfExists(projectFile);
859 Helper.DeleteIfExists(userFile);
860 }
861
862 private void CleanSolution(SolutionNode solution)
863 {
864 kernel.Log.Write("Cleaning {0} solution and project files", VersionName, solution.Name);
865
866 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
867 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
868
869 Helper.DeleteIfExists(slnFile);
870 Helper.DeleteIfExists(suoFile);
871
872 foreach (ProjectNode project in solution.Projects)
873 {
874 CleanProject(project);
875 }
876
877 kernel.Log.Write("");
878 }
879
880 #endregion
881
882 #region ITarget Members
883
884 /// <summary>
885 /// Writes the specified kern.
886 /// </summary>
887 /// <param name="kern">The kern.</param>
888 public virtual void Write(Kernel kern)
889 {
890 if (kern == null)
891 {
892 throw new ArgumentNullException("kern");
893 }
894 kernel = kern;
895 foreach (SolutionNode sol in kernel.Solutions)
896 {
897 WriteSolution(sol, true);
898 }
899 kernel = null;
900 }
901
902 /// <summary>
903 /// Cleans the specified kern.
904 /// </summary>
905 /// <param name="kern">The kern.</param>
906 public virtual void Clean(Kernel kern)
907 {
908 if (kern == null)
909 {
910 throw new ArgumentNullException("kern");
911 }
912 kernel = kern;
913 foreach (SolutionNode sol in kernel.Solutions)
914 {
915 CleanSolution(sol);
916 }
917 kernel = null;
918 }
919
920 #endregion
921 }
922}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/VSVersion.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VSVersion.cs.svn-base
deleted file mode 100644
index 699b5ca..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/VSVersion.cs.svn-base
+++ /dev/null
@@ -1,54 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2008-2009 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com), John Anderson (sontek@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26namespace Prebuild.Core.Targets
27{
28 /// <summary>
29 ///
30 /// </summary>
31 public enum VSVersion
32 {
33 /// <summary>
34 /// Visual Studio 2002
35 /// </summary>
36 VS70,
37 /// <summary>
38 /// Visual Studio 2003
39 /// </summary>
40 VS71,
41 /// <summary>
42 /// Visual Studio 2005
43 /// </summary>
44 VS80,
45 /// <summary>
46 /// Visual Studio 2008
47 /// </summary>
48 VS90,
49 /// <summary>
50 /// Visual Studio 2010
51 /// </summary>
52 VS10
53 }
54}
diff --git a/Prebuild/src/Core/Targets/.svn/text-base/XcodeTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/XcodeTarget.cs.svn-base
deleted file mode 100644
index 5393cec..0000000
--- a/Prebuild/src/Core/Targets/.svn/text-base/XcodeTarget.cs.svn-base
+++ /dev/null
@@ -1,594 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28using System.Reflection;
29using System.Text.RegularExpressions;
30
31using Prebuild.Core.Attributes;
32using Prebuild.Core.Interfaces;
33using Prebuild.Core.Nodes;
34using Prebuild.Core.Utilities;
35
36namespace Prebuild.Core.Targets
37{
38 /// <summary>
39 ///
40 /// </summary>
41 [Target("xcode")]
42 public class XcodeTarget : ITarget
43 {
44 #region Fields
45
46 private Kernel m_Kernel;
47
48 #endregion
49
50 #region Private Methods
51
52 private static string PrependPath(string path)
53 {
54 string tmpPath = Helper.NormalizePath(path, '/');
55 Regex regex = new Regex(@"(\w):/(\w+)");
56 Match match = regex.Match(tmpPath);
57 //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
58 //{
59 tmpPath = Helper.NormalizePath(tmpPath);
60 //}
61 // else
62 // {
63 // tmpPath = Helper.NormalizePath("./" + tmpPath);
64 // }
65
66 return tmpPath;
67 }
68
69 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
70 {
71 string ret = "";
72 if (solution.ProjectsTable.ContainsKey(refr.Name))
73 {
74 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
75 string fileRef = FindFileReference(refr.Name, project);
76 string finalPath = Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + "/${build.dir}/", refr.Name, "dll"), '/');
77 ret += finalPath;
78 return ret;
79 }
80 else
81 {
82 ProjectNode project = (ProjectNode)refr.Parent;
83 string fileRef = FindFileReference(refr.Name, project);
84
85 if (refr.Path != null || fileRef != null)
86 {
87 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path + "/" + refr.Name + ".dll", '/') : fileRef;
88 ret += finalPath;
89 return ret;
90 }
91
92 try
93 {
94 //Assembly assem = Assembly.Load(refr.Name);
95 //if (assem != null)
96 //{
97 //ret += (refr.Name + ".dll");
98 //}
99 //else
100 //{
101 ret += (refr.Name + ".dll");
102 //}
103 }
104 catch (System.NullReferenceException e)
105 {
106 e.ToString();
107 ret += refr.Name + ".dll";
108 }
109 }
110 return ret;
111 }
112
113 private static string BuildReferencePath(SolutionNode solution, ReferenceNode refr)
114 {
115 string ret = "";
116 if (solution.ProjectsTable.ContainsKey(refr.Name))
117 {
118 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
119 string fileRef = FindFileReference(refr.Name, project);
120 string finalPath = Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + "/${build.dir}/"), '/');
121 ret += finalPath;
122 return ret;
123 }
124 else
125 {
126 ProjectNode project = (ProjectNode)refr.Parent;
127 string fileRef = FindFileReference(refr.Name, project);
128
129 if (refr.Path != null || fileRef != null)
130 {
131 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path, '/') : fileRef;
132 ret += finalPath;
133 return ret;
134 }
135
136 try
137 {
138 Assembly assem = Assembly.Load(refr.Name);
139 if (assem != null)
140 {
141 ret += "";
142 }
143 else
144 {
145 ret += "";
146 }
147 }
148 catch (System.NullReferenceException e)
149 {
150 e.ToString();
151 ret += "";
152 }
153 }
154 return ret;
155 }
156
157 private static string FindFileReference(string refName, ProjectNode project)
158 {
159 foreach (ReferencePathNode refPath in project.ReferencePaths)
160 {
161 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
162
163 if (File.Exists(fullPath))
164 {
165 return fullPath;
166 }
167 }
168
169 return null;
170 }
171
172 /// <summary>
173 /// Gets the XML doc file.
174 /// </summary>
175 /// <param name="project">The project.</param>
176 /// <param name="conf">The conf.</param>
177 /// <returns></returns>
178 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
179 {
180 if (conf == null)
181 {
182 throw new ArgumentNullException("conf");
183 }
184 if (project == null)
185 {
186 throw new ArgumentNullException("project");
187 }
188 string docFile = (string)conf.Options["XmlDocFile"];
189 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
190 // {
191 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
192 // }
193 return docFile;
194 }
195
196 private void WriteProject(SolutionNode solution, ProjectNode project)
197 {
198 string projFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build");
199 StreamWriter ss = new StreamWriter(projFile);
200
201 m_Kernel.CurrentWorkingDirectory.Push();
202 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
203 bool hasDoc = false;
204
205 using (ss)
206 {
207 ss.WriteLine("<?xml version=\"1.0\" ?>");
208 ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name);
209 ss.WriteLine(" <target name=\"{0}\">", "build");
210 ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />");
211 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />");
212 ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/${build.dir}\">");
213 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
214 foreach (ReferenceNode refr in project.References)
215 {
216 if (refr.LocalCopy)
217 {
218 ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, refr)) + "\" />", '/'));
219 }
220 }
221 ss.WriteLine(" </fileset>");
222 ss.WriteLine(" </copy>");
223 ss.Write(" <csc");
224 ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
225 ss.Write(" debug=\"{0}\"", "${build.debug}");
226 foreach (ConfigurationNode conf in project.Configurations)
227 {
228 if (conf.Options.KeyFile != "")
229 {
230 ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile);
231 break;
232 }
233 }
234 foreach (ConfigurationNode conf in project.Configurations)
235 {
236 ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe);
237 break;
238 }
239 foreach (ConfigurationNode conf in project.Configurations)
240 {
241 ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines);
242 break;
243 }
244 foreach (ConfigurationNode conf in project.Configurations)
245 {
246 if (GetXmlDocFile(project, conf) != "")
247 {
248 ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf));
249 hasDoc = true;
250 }
251 break;
252 }
253 ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}");
254 if (project.Type == ProjectType.Library)
255 {
256 ss.Write(".dll\"");
257 }
258 else
259 {
260 ss.Write(".exe\"");
261 }
262 if (project.AppIcon != null && project.AppIcon.Length != 0)
263 {
264 ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/'));
265 }
266 ss.WriteLine(">");
267 ss.WriteLine(" <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
268 foreach (string file in project.Files)
269 {
270 switch (project.Files.GetBuildAction(file))
271 {
272 case BuildAction.EmbeddedResource:
273 ss.WriteLine(" {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
274 break;
275 default:
276 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
277 {
278 ss.WriteLine(" <include name=\"{0}\" />", file.Substring(0, file.LastIndexOf('.')) + ".resx");
279 }
280 break;
281 }
282 }
283 //if (project.Files.GetSubType(file).ToString() != "Code")
284 //{
285 // ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
286
287 ss.WriteLine(" </resources>");
288 ss.WriteLine(" <sources failonempty=\"true\">");
289 foreach (string file in project.Files)
290 {
291 switch (project.Files.GetBuildAction(file))
292 {
293 case BuildAction.Compile:
294 ss.WriteLine(" <include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
295 break;
296 default:
297 break;
298 }
299 }
300 ss.WriteLine(" </sources>");
301 ss.WriteLine(" <references basedir=\"${project::get-base-directory()}\">");
302 ss.WriteLine(" <lib>");
303 ss.WriteLine(" <include name=\"${project::get-base-directory()}\" />");
304 ss.WriteLine(" <include name=\"${project::get-base-directory()}/${build.dir}\" />");
305 ss.WriteLine(" </lib>");
306 foreach (ReferenceNode refr in project.References)
307 {
308 ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, refr)) + "\" />", '/'));
309 }
310 ss.WriteLine(" </references>");
311
312 ss.WriteLine(" </csc>");
313 ss.WriteLine(" </target>");
314
315 ss.WriteLine(" <target name=\"clean\">");
316 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
317 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
318 ss.WriteLine(" </target>");
319
320 ss.WriteLine(" <target name=\"doc\" description=\"Creates documentation.\">");
321 if (hasDoc)
322 {
323 ss.WriteLine(" <property name=\"doc.target\" value=\"\" />");
324 ss.WriteLine(" <if test=\"${platform::is-unix()}\">");
325 ss.WriteLine(" <property name=\"doc.target\" value=\"Web\" />");
326 ss.WriteLine(" </if>");
327 ss.WriteLine(" <ndoc failonerror=\"false\" verbose=\"true\">");
328 ss.WriteLine(" <assemblies basedir=\"${project::get-base-directory()}\">");
329 ss.Write(" <include name=\"${build.dir}/${project::get-name()}");
330 if (project.Type == ProjectType.Library)
331 {
332 ss.WriteLine(".dll\" />");
333 }
334 else
335 {
336 ss.WriteLine(".exe\" />");
337 }
338
339 ss.WriteLine(" </assemblies>");
340 ss.WriteLine(" <summaries basedir=\"${project::get-base-directory()}\">");
341 ss.WriteLine(" <include name=\"${build.dir}/${project::get-name()}.xml\"/>");
342 ss.WriteLine(" </summaries>");
343 ss.WriteLine(" <referencepaths basedir=\"${project::get-base-directory()}\">");
344 ss.WriteLine(" <include name=\"${build.dir}\" />");
345 // foreach(ReferenceNode refr in project.References)
346 // {
347 // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/');
348 // if (path != "")
349 // {
350 // ss.WriteLine(" <include name=\"{0}\" />", path);
351 // }
352 // }
353 ss.WriteLine(" </referencepaths>");
354 ss.WriteLine(" <documenters>");
355 ss.WriteLine(" <documenter name=\"MSDN\">");
356 ss.WriteLine(" <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />");
357 ss.WriteLine(" <property name=\"OutputTarget\" value=\"${doc.target}\" />");
358 ss.WriteLine(" <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />");
359 ss.WriteLine(" <property name=\"IncludeFavorites\" value=\"False\" />");
360 ss.WriteLine(" <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />");
361 ss.WriteLine(" <property name=\"SplitTOCs\" value=\"False\" />");
362 ss.WriteLine(" <property name=\"DefaulTOC\" value=\"\" />");
363 ss.WriteLine(" <property name=\"ShowVisualBasic\" value=\"True\" />");
364 ss.WriteLine(" <property name=\"AutoDocumentConstructors\" value=\"True\" />");
365 ss.WriteLine(" <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />");
366 ss.WriteLine(" <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />");
367 ss.WriteLine(" <property name=\"ShowMissingParams\" value=\"${build.debug}\" />");
368 ss.WriteLine(" <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />");
369 ss.WriteLine(" <property name=\"ShowMissingValues\" value=\"${build.debug}\" />");
370 ss.WriteLine(" <property name=\"DocumentInternals\" value=\"False\" />");
371 ss.WriteLine(" <property name=\"DocumentPrivates\" value=\"False\" />");
372 ss.WriteLine(" <property name=\"DocumentProtected\" value=\"True\" />");
373 ss.WriteLine(" <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />");
374 ss.WriteLine(" <property name=\"IncludeAssemblyVersion\" value=\"True\" />");
375 ss.WriteLine(" </documenter>");
376 ss.WriteLine(" </documenters>");
377 ss.WriteLine(" </ndoc>");
378 }
379 ss.WriteLine(" </target>");
380 ss.WriteLine("</project>");
381 }
382 m_Kernel.CurrentWorkingDirectory.Pop();
383 }
384
385 private void WriteCombine(SolutionNode solution)
386 {
387 m_Kernel.Log.Write("Creating Xcode build files");
388 foreach (ProjectNode project in solution.Projects)
389 {
390 if (m_Kernel.AllowProject(project.FilterGroups))
391 {
392 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
393 WriteProject(solution, project);
394 }
395 }
396
397 m_Kernel.Log.Write("");
398 DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj"));
399 if (!directoryInfo.Exists)
400 {
401 directoryInfo.Create();
402 }
403 string combFile = Helper.MakeFilePath(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj"), "project", "pbxproj");
404 StreamWriter ss = new StreamWriter(combFile);
405
406 m_Kernel.CurrentWorkingDirectory.Push();
407 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
408
409 using (ss)
410 {
411 ss.WriteLine("<?xml version=\"1.0\" ?>");
412 ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name);
413 ss.WriteLine(" <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>");
414 ss.WriteLine();
415
416 //ss.WriteLine(" <property name=\"dist.dir\" value=\"dist\" />");
417 //ss.WriteLine(" <property name=\"source.dir\" value=\"source\" />");
418 ss.WriteLine(" <property name=\"bin.dir\" value=\"bin\" />");
419 ss.WriteLine(" <property name=\"obj.dir\" value=\"obj\" />");
420 ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />");
421 ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
422
423 foreach (ConfigurationNode conf in solution.Configurations)
424 {
425 // Set the project.config to a non-debug configuration
426 if (conf.Options["DebugInformation"].ToString().ToLower() != "true")
427 {
428 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
429 }
430 ss.WriteLine();
431 ss.WriteLine(" <target name=\"{0}\" description=\"\">", conf.Name);
432 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
433 ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
434 ss.WriteLine(" </target>");
435 ss.WriteLine();
436 }
437
438 ss.WriteLine(" <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">");
439 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />");
440 ss.WriteLine(" </target>");
441 ss.WriteLine();
442
443 ss.WriteLine(" <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">");
444 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />");
445 ss.WriteLine(" </target>");
446 ss.WriteLine();
447
448 ss.WriteLine(" <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">");
449 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />");
450 ss.WriteLine(" </target>");
451 ss.WriteLine();
452
453 ss.WriteLine(" <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">");
454 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />");
455 ss.WriteLine(" </target>");
456 ss.WriteLine();
457
458 ss.WriteLine(" <target name=\"init\" description=\"\">");
459 ss.WriteLine(" <call target=\"${project.config}\" />");
460 ss.WriteLine(" <sysinfo />");
461 ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />");
462 ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />");
463 ss.WriteLine(" </target>");
464 ss.WriteLine();
465
466 ss.WriteLine(" <target name=\"clean\" description=\"\">");
467 ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />");
468 //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />");
469 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
470 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
471 //foreach(ProjectNode project in solution.Projects)
472 //{
473 // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
474 // ss.Write(" <nant buildfile=\"{0}\"",
475 // Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"),'/'));
476 // ss.WriteLine(" target=\"clean\" />");
477 //}
478 ss.WriteLine(" </target>");
479 ss.WriteLine();
480
481 ss.WriteLine(" <target name=\"build\" depends=\"init\" description=\"\">");
482
483 foreach (ProjectNode project in solution.ProjectsTableOrder)
484 {
485 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
486 ss.Write(" <nant buildfile=\"{0}\"",
487 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"), '/'));
488 ss.WriteLine(" target=\"build\" />");
489 }
490 ss.WriteLine(" </target>");
491 ss.WriteLine();
492
493 ss.WriteLine(" <target name=\"build-release\" depends=\"Release, init, build\" description=\"Builds in Release mode\" />");
494 ss.WriteLine();
495 ss.WriteLine(" <target name=\"build-debug\" depends=\"Debug, init, build\" description=\"Builds in Debug mode\" />");
496 ss.WriteLine();
497 //ss.WriteLine(" <target name=\"package\" depends=\"clean, doc, copyfiles, zip\" description=\"Builds in Release mode\" />");
498 ss.WriteLine(" <target name=\"package\" depends=\"clean, doc\" description=\"Builds all\" />");
499 ss.WriteLine();
500
501 ss.WriteLine(" <target name=\"doc\" depends=\"build-release\">");
502 ss.WriteLine(" <echo message=\"Generating all documentation from all builds\" />");
503 foreach (ProjectNode project in solution.Projects)
504 {
505 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
506 ss.Write(" <nant buildfile=\"{0}\"",
507 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"), '/'));
508 ss.WriteLine(" target=\"doc\" />");
509 }
510 ss.WriteLine(" </target>");
511 ss.WriteLine();
512 ss.WriteLine("</project>");
513 }
514
515 m_Kernel.CurrentWorkingDirectory.Pop();
516 }
517
518 private void CleanProject(ProjectNode project)
519 {
520 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
521 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build");
522 Helper.DeleteIfExists(projectFile);
523 }
524
525 private void CleanSolution(SolutionNode solution)
526 {
527 m_Kernel.Log.Write("Cleaning Xcode build files for", solution.Name);
528
529 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
530 Helper.DeleteIfExists(slnFile);
531
532 foreach (ProjectNode project in solution.Projects)
533 {
534 CleanProject(project);
535 }
536
537 m_Kernel.Log.Write("");
538 }
539
540 #endregion
541
542 #region ITarget Members
543
544 /// <summary>
545 /// Writes the specified kern.
546 /// </summary>
547 /// <param name="kern">The kern.</param>
548 public void Write(Kernel kern)
549 {
550 if (kern == null)
551 {
552 throw new ArgumentNullException("kern");
553 }
554 m_Kernel = kern;
555 foreach (SolutionNode solution in kern.Solutions)
556 {
557 WriteCombine(solution);
558 }
559 m_Kernel = null;
560 }
561
562 /// <summary>
563 /// Cleans the specified kern.
564 /// </summary>
565 /// <param name="kern">The kern.</param>
566 public virtual void Clean(Kernel kern)
567 {
568 if (kern == null)
569 {
570 throw new ArgumentNullException("kern");
571 }
572 m_Kernel = kern;
573 foreach (SolutionNode sol in kern.Solutions)
574 {
575 CleanSolution(sol);
576 }
577 m_Kernel = null;
578 }
579
580 /// <summary>
581 /// Gets the name.
582 /// </summary>
583 /// <value>The name.</value>
584 public string Name
585 {
586 get
587 {
588 return "xcode";
589 }
590 }
591
592 #endregion
593 }
594}
diff --git a/Prebuild/src/Core/Utilities/.svn/all-wcprops b/Prebuild/src/Core/Utilities/.svn/all-wcprops
deleted file mode 100644
index 7418c29..0000000
--- a/Prebuild/src/Core/Utilities/.svn/all-wcprops
+++ /dev/null
@@ -1,29 +0,0 @@
1K 25
2svn:wc:ra_dav:version-url
3V 60
4/svnroot/dnpb/!svn/ver/309/trunk/Prebuild/src/Core/Utilities
5END
6Helper.cs
7K 25
8svn:wc:ra_dav:version-url
9V 70
10/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Utilities/Helper.cs
11END
12Log.cs
13K 25
14svn:wc:ra_dav:version-url
15V 67
16/svnroot/dnpb/!svn/ver/309/trunk/Prebuild/src/Core/Utilities/Log.cs
17END
18CommandLineCollection.cs
19K 25
20svn:wc:ra_dav:version-url
21V 85
22/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Utilities/CommandLineCollection.cs
23END
24CurrentDirectory.cs
25K 25
26svn:wc:ra_dav:version-url
27V 80
28/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Utilities/CurrentDirectory.cs
29END
diff --git a/Prebuild/src/Core/Utilities/.svn/dir-prop-base b/Prebuild/src/Core/Utilities/.svn/dir-prop-base
deleted file mode 100644
index a1989a0..0000000
--- a/Prebuild/src/Core/Utilities/.svn/dir-prop-base
+++ /dev/null
@@ -1,5 +0,0 @@
1K 10
2svn:ignore
3V 5
4*.swp
5END
diff --git a/Prebuild/src/Core/Utilities/.svn/entries b/Prebuild/src/Core/Utilities/.svn/entries
deleted file mode 100644
index cc148d7..0000000
--- a/Prebuild/src/Core/Utilities/.svn/entries
+++ /dev/null
@@ -1,164 +0,0 @@
110
2
3dir
4323
5https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core/Utilities
6https://dnpb.svn.sourceforge.net/svnroot/dnpb
7
8
9
102009-04-15T01:40:10.014568Z
11309
12kunnis
13has-props
14
15
16
17
18
19
20
21
22
23
24
25
26
273355ff64-970d-0410-bbe8-d0fbd18be4fb
28
29Helper.cs
30file
31
32
33
34
352010-09-10T22:51:44.000000Z
367a0749dec0ce5453fc73dd11f89ce613
372009-04-15T01:28:16.827957Z
38307
39kunnis
40has-props
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
6114966
62
63Log.cs
64file
65
66
67
68
692010-09-10T22:51:44.000000Z
70d91804d20a90778d74744cd14bb2fa4c
712009-04-15T01:40:10.014568Z
72309
73kunnis
74has-props
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
956100
96
97CommandLineCollection.cs
98file
99
100
101
102
1032010-09-10T22:51:44.000000Z
1042a00bed45ea425e5e8a21a5ff6a68d69
1052009-04-15T01:28:16.827957Z
106307
107kunnis
108has-props
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
1294032
130
131CurrentDirectory.cs
132file
133
134
135
136
1372010-09-10T22:51:44.000000Z
138e710723e685cc628a3761209001c8767
1392009-04-15T01:28:16.827957Z
140307
141kunnis
142has-props
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
1632124
164
diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base
deleted file mode 100644
index 7b57b30..0000000
--- a/Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base
+++ /dev/null
@@ -1,9 +0,0 @@
1K 13
2svn:eol-style
3V 6
4native
5K 12
6svn:keywords
7V 23
8Author Date Id Revision
9END
diff --git a/Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base
deleted file mode 100644
index 786fa1e..0000000
--- a/Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base
+++ /dev/null
@@ -1,152 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System.Collections;
27using System.Collections.Generic;
28
29namespace Prebuild.Core.Utilities
30{
31 /// <summary>
32 /// The CommandLine class parses and interprets the command-line arguments passed to
33 /// prebuild.
34 /// </summary>
35 public class CommandLineCollection : IEnumerable<KeyValuePair<string, string>>
36 {
37 #region Fields
38
39 // The raw OS arguments
40 private readonly string[] m_RawArgs;
41
42 // Command-line argument storage
43 private readonly Dictionary<string, string> m_Arguments = new Dictionary<string, string>();
44
45 #endregion
46
47 #region Constructors
48
49 /// <summary>
50 /// Create a new CommandLine instance and set some internal variables.
51 /// </summary>
52 public CommandLineCollection(string[] args)
53 {
54 m_RawArgs = args;
55
56 Parse();
57 }
58
59 #endregion
60
61 #region Private Methods
62
63 private void Parse()
64 {
65 if(m_RawArgs.Length < 1)
66 return;
67
68 int idx = 0;
69 string lastArg = null;
70
71 while(idx <m_RawArgs.Length)
72 {
73 string arg = m_RawArgs[idx];
74
75 if(arg.Length > 2 && arg[0] == '/')
76 {
77 arg = arg.Substring(1);
78 lastArg = arg;
79 m_Arguments[arg] = "";
80 }
81 else
82 {
83 if(lastArg != null)
84 {
85 m_Arguments[lastArg] = arg;
86 lastArg = null;
87 }
88 }
89
90 idx++;
91 }
92 }
93
94 #endregion
95
96 #region Public Methods
97
98 /// <summary>
99 /// Wases the passed.
100 /// </summary>
101 /// <param name="arg">The arg.</param>
102 /// <returns></returns>
103 public bool WasPassed(string arg)
104 {
105 return (m_Arguments.ContainsKey(arg));
106 }
107
108 #endregion
109
110 #region Properties
111
112 /// <summary>
113 /// Gets the parameter associated with the command line option
114 /// </summary>
115 /// <remarks>Returns null if option was not specified,
116 /// null string if no parameter was specified, and the value if a parameter was specified</remarks>
117 public string this[string index]
118 {
119 get
120 {
121 if(m_Arguments.ContainsKey(index))
122 {
123 return (m_Arguments[index]);
124 }
125 return null;
126 }
127 }
128
129 #endregion
130
131 #region IEnumerable Members
132
133 /// <summary>
134 /// Returns an enumerator that can iterate through a collection.
135 /// </summary>
136 /// <returns>
137 /// An <see cref="T:System.Collections.IDictionaryEnumerator"/>
138 /// that can be used to iterate through the collection.
139 /// </returns>
140 public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
141 {
142 return m_Arguments.GetEnumerator();
143 }
144
145 IEnumerator IEnumerable.GetEnumerator()
146 {
147 return GetEnumerator();
148 }
149
150 #endregion
151 }
152}
diff --git a/Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base
deleted file mode 100644
index 9624c35..0000000
--- a/Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base
+++ /dev/null
@@ -1,68 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28
29namespace Prebuild.Core.Utilities
30{
31 /// <summary>
32 ///
33 /// </summary>
34 public class CurrentDirectory
35 {
36 #region Fields
37
38 private readonly Stack<string> m_Stack = new Stack<string>();
39
40 #endregion
41
42 #region Public Methods
43
44 /// <summary>
45 /// Pushes this instance.
46 /// </summary>
47 public void Push()
48 {
49 m_Stack.Push(Environment.CurrentDirectory);
50 }
51
52 /// <summary>
53 /// Pops this instance.
54 /// </summary>
55 public void Pop()
56 {
57 if(m_Stack.Count < 1)
58 {
59 return;
60 }
61
62 string cwd = m_Stack.Pop();
63 Helper.SetCurrentDir(cwd);
64 }
65
66 #endregion
67 }
68}
diff --git a/Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base
deleted file mode 100644
index 8c3e968..0000000
--- a/Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base
+++ /dev/null
@@ -1,575 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Diagnostics;
29using System.IO;
30using System.Runtime.InteropServices;
31using System.Text.RegularExpressions;
32using System.Collections.Specialized;
33using System.Xml;
34using Prebuild.Core.Nodes;
35
36namespace Prebuild.Core.Utilities
37{
38 /// <summary>
39 ///
40 /// </summary>
41 public class Helper
42 {
43 #region Fields
44
45 static bool checkForOSVariables;
46
47 /// <summary>
48 ///
49 /// </summary>
50 public static bool CheckForOSVariables
51 {
52 get
53 {
54 return checkForOSVariables;
55 }
56 set
57 {
58 checkForOSVariables = value;
59 }
60 }
61
62 #endregion
63
64 #region Public Methods
65
66 #region String Parsing
67
68 public delegate string StringLookup(string key);
69
70 /// <summary>
71 /// Gets a collection of StringLocationPair objects that represent the matches
72 /// </summary>
73 /// <param name="target">The target.</param>
74 /// <param name="beforeGroup">The before group.</param>
75 /// <param name="afterGroup">The after group.</param>
76 /// <param name="includeDelimitersInSubstrings">if set to <c>true</c> [include delimiters in substrings].</param>
77 /// <returns></returns>
78 public static StringCollection FindGroups(string target, string beforeGroup, string afterGroup, bool includeDelimitersInSubstrings)
79 {
80 if( beforeGroup == null )
81 {
82 throw new ArgumentNullException("beforeGroup");
83 }
84 if( afterGroup == null )
85 {
86 throw new ArgumentNullException("afterGroup");
87 }
88 StringCollection results = new StringCollection();
89 if(target == null || target.Length == 0)
90 {
91 return results;
92 }
93
94 int beforeMod = 0;
95 int afterMod = 0;
96 if(includeDelimitersInSubstrings)
97 {
98 //be sure to not exlude the delims
99 beforeMod = beforeGroup.Length;
100 afterMod = afterGroup.Length;
101 }
102 int startIndex = 0;
103 while((startIndex = target.IndexOf(beforeGroup,startIndex)) != -1) {
104 int endIndex = target.IndexOf(afterGroup,startIndex);//the index of the char after it
105 if(endIndex == -1)
106 {
107 break;
108 }
109 int length = endIndex - startIndex - beforeGroup.Length;//move to the first char in the string
110 string substring = substring = target.Substring(startIndex + beforeGroup.Length - beforeMod,
111 length - afterMod);
112
113 results.Add(substring);
114 //results.Add(new StringLocationPair(substring,startIndex));
115 startIndex = endIndex + 1;
116 //the Interpolate*() methods will not work if expressions are expandded inside expression due to an optimization
117 //so start after endIndex
118
119 }
120 return results;
121 }
122
123 /// <summary>
124 /// Replaces the groups.
125 /// </summary>
126 /// <param name="target">The target.</param>
127 /// <param name="beforeGroup">The before group.</param>
128 /// <param name="afterGroup">The after group.</param>
129 /// <param name="lookup">The lookup.</param>
130 /// <returns></returns>
131 public static string ReplaceGroups(string target, string beforeGroup, string afterGroup, StringLookup lookup) {
132 if( target == null )
133 {
134 throw new ArgumentNullException("target");
135 }
136 //int targetLength = target.Length;
137 StringCollection strings = FindGroups(target,beforeGroup,afterGroup,false);
138 if( lookup == null )
139 {
140 throw new ArgumentNullException("lookup");
141 }
142 foreach(string substring in strings)
143 {
144 target = target.Replace(beforeGroup + substring + afterGroup, lookup(substring) );
145 }
146 return target;
147 }
148
149 /// <summary>
150 /// Replaces ${var} statements in a string with the corresonding values as detirmined by the lookup delegate
151 /// </summary>
152 /// <param name="target">The target.</param>
153 /// <param name="lookup">The lookup.</param>
154 /// <returns></returns>
155 public static string InterpolateForVariables(string target, StringLookup lookup)
156 {
157 return ReplaceGroups(target, "${" , "}" , lookup);
158 }
159
160 /// <summary>
161 /// Replaces ${var} statements in a string with the corresonding environment variable with name var
162 /// </summary>
163 /// <param name="target"></param>
164 /// <returns></returns>
165 public static string InterpolateForEnvironmentVariables(string target)
166 {
167 return InterpolateForVariables(target, new StringLookup(Environment.GetEnvironmentVariable));
168 }
169
170 #endregion
171
172 /// <summary>
173 /// Translates the value.
174 /// </summary>
175 /// <param name="translateType">Type of the translate.</param>
176 /// <param name="translationItem">The translation item.</param>
177 /// <returns></returns>
178 public static object TranslateValue(Type translateType, string translationItem)
179 {
180 if(translationItem == null)
181 {
182 return null;
183 }
184
185 try
186 {
187 string lowerVal = translationItem.ToLower();
188 if(translateType == typeof(bool))
189 {
190 return (lowerVal == "true" || lowerVal == "1" || lowerVal == "y" || lowerVal == "yes" || lowerVal == "on");
191 }
192 else if(translateType == typeof(int))
193 {
194 return (Int32.Parse(translationItem));
195 }
196 else
197 {
198 return translationItem;
199 }
200 }
201 catch(FormatException)
202 {
203 return null;
204 }
205 }
206
207 /// <summary>
208 /// Deletes if exists.
209 /// </summary>
210 /// <param name="file">The file.</param>
211 /// <returns></returns>
212 public static bool DeleteIfExists(string file)
213 {
214 string resFile = null;
215 try
216 {
217 resFile = ResolvePath(file);
218 }
219 catch(ArgumentException)
220 {
221 return false;
222 }
223
224 if(!File.Exists(resFile))
225 {
226 return false;
227 }
228
229 File.Delete(resFile);
230 return true;
231 }
232
233 static readonly char seperator = Path.DirectorySeparatorChar;
234
235 // This little gem was taken from the NeL source, thanks guys!
236 /// <summary>
237 /// Makes a relative path
238 /// </summary>
239 /// <param name="startPath">Path to start from</param>
240 /// <param name="endPath">Path to end at</param>
241 /// <returns>Path that will get from startPath to endPath</returns>
242 public static string MakePathRelativeTo(string startPath, string endPath)
243 {
244 string tmp = NormalizePath(startPath, seperator);
245 string src = NormalizePath(endPath, seperator);
246 string prefix = "";
247
248 while(true)
249 {
250 if((String.Compare(tmp, 0, src, 0, tmp.Length) == 0))
251 {
252 string ret;
253 int size = tmp.Length;
254 if(size == src.Length)
255 {
256 return "./";
257 }
258 if((src.Length > tmp.Length) && src[tmp.Length - 1] != seperator)
259 {
260 }
261 else
262 {
263 ret = prefix + endPath.Substring(size, endPath.Length - size);
264 ret = ret.Trim();
265 if(ret[0] == seperator)
266 {
267 ret = "." + ret;
268 }
269
270 return NormalizePath(ret);
271 }
272
273 }
274
275 if(tmp.Length < 2)
276 {
277 break;
278 }
279
280 int lastPos = tmp.LastIndexOf(seperator, tmp.Length - 2);
281 int prevPos = tmp.IndexOf(seperator);
282
283 if((lastPos == prevPos) || (lastPos == -1))
284 {
285 break;
286 }
287
288 tmp = tmp.Substring(0, lastPos + 1);
289 prefix += ".." + seperator.ToString();
290 }
291
292 return endPath;
293 }
294
295 /// <summary>
296 /// Resolves the path.
297 /// </summary>
298 /// <param name="path">The path.</param>
299 /// <returns></returns>
300 public static string ResolvePath(string path)
301 {
302 string tmpPath = NormalizePath(path);
303 if(tmpPath.Length < 1)
304 {
305 tmpPath = ".";
306 }
307
308 tmpPath = Path.GetFullPath(tmpPath);
309 if(!File.Exists(tmpPath) && !Directory.Exists(tmpPath))
310 {
311 throw new ArgumentException("Path could not be resolved: " + tmpPath);
312 }
313
314 return tmpPath;
315 }
316
317 /// <summary>
318 /// Normalizes the path.
319 /// </summary>
320 /// <param name="path">The path.</param>
321 /// <param name="separatorCharacter">The separator character.</param>
322 /// <returns></returns>
323 public static string NormalizePath(string path, char separatorCharacter)
324 {
325 if(path == null || path == "" || path.Length < 1)
326 {
327 return "";
328 }
329
330 string tmpPath = path.Replace('\\', '/');
331 tmpPath = tmpPath.Replace('/', separatorCharacter);
332 return tmpPath;
333 }
334
335 /// <summary>
336 /// Normalizes the path.
337 /// </summary>
338 /// <param name="path">The path.</param>
339 /// <returns></returns>
340 public static string NormalizePath(string path)
341 {
342 return NormalizePath(path, Path.DirectorySeparatorChar);
343 }
344
345 /// <summary>
346 /// Ends the path.
347 /// </summary>
348 /// <param name="path">The path.</param>
349 /// <param name="separatorCharacter">The separator character.</param>
350 /// <returns></returns>
351 public static string EndPath(string path, char separatorCharacter)
352 {
353 if(path == null || path == "" || path.Length < 1)
354 {
355 return "";
356 }
357
358 if(!path.EndsWith(separatorCharacter.ToString()))
359 {
360 return (path + separatorCharacter);
361 }
362
363 return path;
364 }
365
366 /// <summary>
367 /// Ends the path.
368 /// </summary>
369 /// <param name="path">The path.</param>
370 /// <returns></returns>
371 public static string EndPath(string path)
372 {
373 return EndPath(path, Path.DirectorySeparatorChar);
374 }
375
376 /// <summary>
377 /// Makes the file path.
378 /// </summary>
379 /// <param name="path">The path.</param>
380 /// <param name="name">The name.</param>
381 /// <param name="ext">The ext.</param>
382 /// <returns></returns>
383 public static string MakeFilePath(string path, string name, string ext)
384 {
385 string ret = EndPath(NormalizePath(path));
386
387 if( name == null )
388 {
389 throw new ArgumentNullException("name");
390 }
391
392 ret += name;
393 if(!name.EndsWith("." + ext))
394 {
395 ret += "." + ext;
396 }
397
398 //foreach(char c in Path.GetInvalidPathChars())
399 //{
400 // ret = ret.Replace(c, '_');
401 //}
402
403 return ret;
404 }
405
406 /// <summary>
407 /// Makes the file path.
408 /// </summary>
409 /// <param name="path">The path.</param>
410 /// <param name="name">The name.</param>
411 /// <returns></returns>
412 public static string MakeFilePath(string path, string name)
413 {
414 string ret = EndPath(NormalizePath(path));
415
416 if( name == null )
417 {
418 throw new ArgumentNullException("name");
419 }
420
421 ret += name;
422
423 //foreach (char c in Path.GetInvalidPathChars())
424 //{
425 // ret = ret.Replace(c, '_');
426 //}
427
428 return ret;
429 }
430
431 /// <summary>
432 ///
433 /// </summary>
434 /// <param name="path"></param>
435 /// <returns></returns>
436 public static string MakeReferencePath(string path)
437 {
438 string ret = EndPath(NormalizePath(path));
439
440 //foreach (char c in Path.GetInvalidPathChars())
441 //{
442 // ret = ret.Replace(c, '_');
443 //}
444
445 return ret;
446 }
447
448 /// <summary>
449 /// Sets the current dir.
450 /// </summary>
451 /// <param name="path">The path.</param>
452 public static void SetCurrentDir(string path)
453 {
454 if( path == null )
455 {
456 throw new ArgumentNullException("path");
457 }
458 if(path.Length < 1)
459 {
460 return;
461 }
462
463 Environment.CurrentDirectory = path;
464 }
465
466 /// <summary>
467 /// Checks the type.
468 /// </summary>
469 /// <param name="typeToCheck">The type to check.</param>
470 /// <param name="attr">The attr.</param>
471 /// <param name="inter">The inter.</param>
472 /// <returns></returns>
473 public static object CheckType(Type typeToCheck, Type attr, Type inter)
474 {
475 if(typeToCheck == null || attr == null)
476 {
477 return null;
478 }
479
480 object[] attrs = typeToCheck.GetCustomAttributes(attr, false);
481 if(attrs == null || attrs.Length < 1)
482 {
483 return null;
484 }
485 if( inter == null )
486 {
487 throw new ArgumentNullException("inter");
488 }
489
490 if(typeToCheck.GetInterface(inter.FullName) == null)
491 {
492 return null;
493 }
494
495 return attrs[0];
496 }
497
498 /// <summary>
499 /// Attributes the value.
500 /// </summary>
501 /// <param name="node">The node.</param>
502 /// <param name="attr">The attr.</param>
503 /// <param name="def">The def.</param>
504 /// <returns></returns>
505 public static string AttributeValue(XmlNode node, string attr, string def)
506 {
507 if( node == null )
508 {
509 throw new ArgumentNullException("node");
510 }
511 if(node.Attributes[attr] == null)
512 {
513 return def;
514 }
515 string val = node.Attributes[attr].Value;
516 if(!CheckForOSVariables)
517 {
518 return val;
519 }
520
521 return InterpolateForEnvironmentVariables(val);
522 }
523
524 /// <summary>
525 /// Parses the boolean.
526 /// </summary>
527 /// <param name="node">The node.</param>
528 /// <param name="attr">The attr.</param>
529 /// <param name="defaultValue">if set to <c>true</c> [default value].</param>
530 /// <returns></returns>
531 public static bool ParseBoolean(XmlNode node, string attr, bool defaultValue)
532 {
533 if( node == null )
534 {
535 throw new ArgumentNullException("node");
536 }
537 if(node.Attributes[attr] == null)
538 {
539 return defaultValue;
540 }
541 return bool.Parse(node.Attributes[attr].Value);
542 }
543
544 /// <summary>
545 /// Enums the attribute value.
546 /// </summary>
547 /// <param name="node">The node.</param>
548 /// <param name="attr">The attr.</param>
549 /// <param name="enumType">Type of the enum.</param>
550 /// <param name="def">The def.</param>
551 /// <returns></returns>
552 public static object EnumAttributeValue(XmlNode node, string attr, Type enumType, object def)
553 {
554 if( def == null )
555 {
556 throw new ArgumentNullException("def");
557 }
558 string val = AttributeValue(node, attr, def.ToString());
559 return Enum.Parse(enumType, val, true);
560 }
561
562 /// <summary>
563 ///
564 /// </summary>
565 /// <param name="assemblyName"></param>
566 /// <param name="projectType"></param>
567 /// <returns></returns>
568 public static string AssemblyFullName(string assemblyName, ProjectType projectType)
569 {
570 return assemblyName + (projectType == ProjectType.Library ? ".dll" : ".exe");
571 }
572
573 #endregion
574 }
575}
diff --git a/Prebuild/src/Core/Utilities/.svn/text-base/Log.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/Log.cs.svn-base
deleted file mode 100644
index 4df3def..0000000
--- a/Prebuild/src/Core/Utilities/.svn/text-base/Log.cs.svn-base
+++ /dev/null
@@ -1,276 +0,0 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.IO;
28
29namespace Prebuild.Core.Utilities
30{
31 /// <summary>
32 ///
33 /// </summary>
34 public enum LogType
35 {
36 /// <summary>
37 ///
38 /// </summary>
39 None,
40 /// <summary>
41 ///
42 /// </summary>
43 Info,
44 /// <summary>
45 ///
46 /// </summary>
47 Warning,
48 /// <summary>
49 ///
50 /// </summary>
51 Error
52 }
53
54 /// <summary>
55 ///
56 /// </summary>
57 [Flags]
58 public enum LogTargets
59 {
60 /// <summary>
61 ///
62 /// </summary>
63 None = 0,
64 /// <summary>
65 ///
66 /// </summary>
67 Null = 1,
68 /// <summary>
69 ///
70 /// </summary>
71 File = 2,
72 /// <summary>
73 ///
74 /// </summary>
75 Console = 4
76 }
77
78 /// <summary>
79 /// Summary description for Log.
80 /// </summary>
81 public class Log : IDisposable
82 {
83 #region Fields
84
85 private TextWriter m_Writer;
86 private LogTargets m_Target = LogTargets.Null;
87 bool disposed;
88
89 #endregion
90
91 #region Constructors
92
93 /// <summary>
94 /// Initializes a new instance of the <see cref="Log"/> class.
95 /// </summary>
96 /// <param name="target">The target.</param>
97 /// <param name="fileName">Name of the file.</param>
98 public Log(LogTargets target, string fileName)
99 {
100 m_Target = target;
101
102 if ((m_Target & LogTargets.File) != 0)
103 {
104 m_Writer = new StreamWriter(fileName, false);
105 }
106 else if ((m_Target & LogTargets.Console) != 0)
107 {
108 // Prevents null reference exceptions when outputing to the log file.
109 // This seems to only happen when running on a network drive.
110 m_Writer = Console.Out;
111 }
112 }
113
114 #endregion
115
116 #region Public Methods
117
118 /// <summary>
119 /// Writes this instance.
120 /// </summary>
121 public void Write()
122 {
123 Write(string.Empty);
124 }
125
126 /// <summary>
127 /// Writes the specified MSG.
128 /// </summary>
129 /// <param name="msg">The MSG.</param>
130 public void Write(string msg)
131 {
132 if((m_Target & LogTargets.Null) != 0)
133 {
134 return;
135 }
136
137 if((m_Target & LogTargets.Console) != 0)
138 {
139 Console.WriteLine(msg);
140 }
141 if((m_Target & LogTargets.File) != 0 && m_Writer != null)
142 {
143 m_Writer.WriteLine(msg);
144 }
145 }
146
147 /// <summary>
148 /// Writes the specified format.
149 /// </summary>
150 /// <param name="format">The format.</param>
151 /// <param name="args">The args.</param>
152 public void Write(string format, params object[] args)
153 {
154 Write(string.Format(format,args));
155 }
156
157 /// <summary>
158 /// Writes the specified type.
159 /// </summary>
160 /// <param name="type">The type.</param>
161 /// <param name="format">The format.</param>
162 /// <param name="args">The args.</param>
163 public void Write(LogType type, string format, params object[] args)
164 {
165 if((m_Target & LogTargets.Null) != 0)
166 {
167 return;
168 }
169
170 string str = "";
171 switch(type)
172 {
173 case LogType.Info:
174 str = "[I] ";
175 break;
176 case LogType.Warning:
177 str = "[!] ";
178 break;
179 case LogType.Error:
180 str = "[X] ";
181 break;
182 }
183
184 Write(str + format,args);
185 }
186
187 /// <summary>
188 /// Writes the exception.
189 /// </summary>
190 /// <param name="type">The type.</param>
191 /// <param name="ex">The ex.</param>
192 public void WriteException(LogType type, Exception ex)
193 {
194 if(ex != null)
195 {
196 Write(type, ex.Message);
197 //#if DEBUG
198 m_Writer.WriteLine("Exception @{0} stack trace [[", ex.TargetSite.Name);
199 m_Writer.WriteLine(ex.StackTrace);
200 m_Writer.WriteLine("]]");
201 //#endif
202 }
203 }
204
205 /// <summary>
206 /// Flushes this instance.
207 /// </summary>
208 public void Flush()
209 {
210 if(m_Writer != null)
211 {
212 m_Writer.Flush();
213 }
214 }
215
216 #endregion
217
218 #region IDisposable Members
219
220 /// <summary>
221 /// Performs application-defined tasks associated with freeing, releasing, or
222 /// resetting unmanaged resources.
223 /// </summary>
224 public void Dispose()
225 {
226 Dispose(true);
227 GC.SuppressFinalize(this);
228 }
229
230 /// <summary>
231 /// Dispose objects
232 /// </summary>
233 /// <param name="disposing">
234 /// If true, it will dispose close the handle
235 /// </param>
236 /// <remarks>
237 /// Will dispose managed and unmanaged resources.
238 /// </remarks>
239 protected virtual void Dispose(bool disposing)
240 {
241 if (!this.disposed)
242 {
243 if (disposing)
244 {
245 if (m_Writer != null)
246 {
247 m_Writer.Close();
248 m_Writer = null;
249 }
250 }
251 }
252 this.disposed = true;
253 }
254
255 /// <summary>
256 ///
257 /// </summary>
258 ~Log()
259 {
260 this.Dispose(false);
261 }
262
263 /// <summary>
264 /// Closes and destroys this object
265 /// </summary>
266 /// <remarks>
267 /// Same as Dispose(true)
268 /// </remarks>
269 public void Close()
270 {
271 Dispose();
272 }
273
274 #endregion
275 }
276}