Author: msierad
Date: 2005-08-26 18:44:01 -0400 (Fri, 26 Aug 2005)
New Revision: 48932
Added:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.Engine.targets
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework.targets
trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks.targets
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities.targets
trunk/xbuild/Microsoft.Build.csproj
trunk/xbuild/Microsoft.Common.tasks
trunk/xbuild/xbuild/XBuild.targets
Modified:
trunk/xbuild/ChangeLog
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Expression.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ImportedProject.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/MetadataReference.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildErrorEventArgs.cs
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildEventArgs.cs
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildWarningEventArgs.cs
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/ChangeLog
trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AL.cs
trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/ChangeLog
trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Csc.cs
trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Exec.cs
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ChangeLog
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/Logger.cs
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskLoggingHelper.cs
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs
trunk/xbuild/README
Log:
2005-08-27 Marek Sieradzki <[EMAIL PROTECTED]>
* Microsoft.Build.Engine: Added transforms.
* Microsoft.Build.Utilities: Added error/warning handling in ToolTask.
Modified: trunk/xbuild/ChangeLog
===================================================================
--- trunk/xbuild/ChangeLog 2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/ChangeLog 2005-08-26 22:44:01 UTC (rev 48932)
@@ -1,3 +1,9 @@
+2005-08-27 Marek Sieradzki <[EMAIL PROTECTED]>
+
+ * Microsoft.Build.Engine, Microsoft.Build.Framework,
+ Microsoft.Build.Utilities, Microsoft.Build.Tasks, xbuild: Added test
+ files which can be used to build xbuild.
+
2005-08-06 Marek Sieradzki <[EMAIL PROTECTED]>
* xbuild: Initial check-in of command line tool.
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -28,6 +28,7 @@
using System;
using System.Collections;
using System.IO;
+using System.Text;
using System.Xml;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
@@ -125,12 +126,55 @@
public string GetMetadata (string metadataName)
{
- string value = GetEvaluatedMetadata (metadataName);
- if (value == null)
- return String.Empty;
+ if (evaluatedMetadata.Contains (metadataName) == true)
+ return (string) evaluatedMetadata
[metadataName];
else
- return value;
+ return CheckBuiltinMetadata (metadataName);
}
+
+ private string CheckBuiltinMetadata (string metadataName)
+ {
+ if (File.Exists (finalItemSpec)) {
+ switch (metadataName.ToLower ()) {
+ case "fullpath":
+ return Path.GetFullPath (finalItemSpec);
+ break;
+ case "rootdir":
+ return "/";
+ break;
+ case "filename":
+ return Path.GetFileNameWithoutExtension
(finalItemSpec);
+ break;
+ case "extension":
+ return Path.GetExtension
(finalItemSpec);
+ break;
+ case "relativedir":
+ return Path.GetDirectoryName
(finalItemSpec);
+ break;
+ case "directory":
+ return Path.GetDirectoryName
(Path.GetFullPath (finalItemSpec));
+ break;
+ case "recursivedir":
+ return recursiveDir;
+ break;
+ case "identity":
+ return Path.Combine
(Path.GetDirectoryName (finalItemSpec), Path.GetFileName (finalItemSpec));
+ break;
+ case "modifiedtime":
+ return File.GetLastWriteTime
(finalItemSpec).ToString ();
+ break;
+ case "createdtime":
+ return File.GetCreationTime
(finalItemSpec).ToString ();
+ break;
+ case "accessedtime":
+ return File.GetLastAccessTime
(finalItemSpec).ToString ();
+ break;
+ default:
+ return String.Empty;
+ }
+ } else
+ return String.Empty;
+ }
public bool HasMetadata (string metadataName)
{
@@ -273,18 +317,41 @@
}
}
- internal new string ToString ()
+ internal new string ToString (Expression transform)
{
- return finalItemSpec;
+ return GetItemSpecFromTransform (transform);
}
- internal ITaskItem ToITaskItem ()
+ internal ITaskItem ToITaskItem (Expression transform)
{
TaskItem taskItem;
- taskItem = new TaskItem (finalItemSpec, (IDictionary)
evaluatedMetadata.Clone ());
+ taskItem = new TaskItem (GetItemSpecFromTransform
(transform), (IDictionary) evaluatedMetadata.Clone ());
return taskItem;
}
+ private string GetItemSpecFromTransform (Expression transform)
+ {
+ StringBuilder sb;
+
+ if (transform == null)
+ return finalItemSpec;
+ else {
+ sb = new StringBuilder ();
+ foreach (object o in transform) {
+ if (o is string) {
+ sb.Append ((string)o);
+ } else if (o is PropertyReference) {
+ sb.Append
(((PropertyReference)o).ToString ());
+ } else if (o is ItemReference) {
+ sb.Append
(((ItemReference)o).ToString ());
+ } else if (o is MetadataReference) {
+ sb.Append (GetMetadata
(((MetadataReference)o).MetadataName));
+ }
+ }
+ return sb.ToString ();
+ }
+ }
+
public string Condition {
get {
if (condition == null)
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -117,7 +117,6 @@
buildItems.RemoveAt (index);
}
- // sealed doesn't work
public BuildItem[] ToArray ()
{
BuildItem[] array;
@@ -132,7 +131,6 @@
throw new ArgumentNullException ("xmlElement");
this.condition = xmlElement.GetAttributeNode
("Condition");
this.itemGroupElement = xmlElement;
- //foreach (XmlElement xe in xmlElement.ChildNodes) {
foreach (XmlNode xn in xmlElement.ChildNodes) {
if (xn is XmlElement) {
XmlElement xe = (XmlElement) xn;
@@ -143,21 +141,21 @@
}
}
- internal string ToString (string separator)
+ internal string ToString (Expression transform, string
separator)
{
string[] items = new string [buildItems.Count];
int i = 0;
foreach (BuildItem bi in buildItems)
- items [i++] = bi.ToString ();
+ items [i++] = bi.ToString (transform);
return String.Join (separator,items);
}
- internal ITaskItem[] ToITaskItemArray ()
+ internal ITaskItem[] ToITaskItemArray (Expression transform)
{
ITaskItem[] array = new ITaskItem [buildItems.Count];
int i = 0;
foreach (BuildItem item in buildItems)
- array [i++] = item.ToITaskItem ();
+ array [i++] = item.ToITaskItem (transform);
return array;
}
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
===================================================================
--- trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
2005-08-26 22:44:01 UTC (rev 48932)
@@ -1,3 +1,16 @@
+2005-08-27 Marek Sieradzki <[EMAIL PROTECTED]>
+
+ * Target.cs: Added checks for target existence.
+ * BuildItemGroup.cs: Changed to use transforms.
+ * MetadataReference.cs: Wrote real implementation.
+ * ItemReference.cs: Rewritten to use transforms.
+ * BuildItem.cs: Changes for transforms and metadata.
+ * ConsoleLogger.cs: Added verbosity checking and fixed error/warning
+ formatting.
+ * Project.cs: Fixed project importing.
+ * ImportedProject.cs: Changed to throw exceptions instead of returning
+ bool.
+
2005-08-24 Marek Sieradzki <[EMAIL PROTECTED]>
* Engine.cs: Removed FIXME.
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -38,10 +38,10 @@
int indent;
LoggerVerbosity verbosity;
WriteHandler writeHandler;
- TimeSpan taskStart;
+ TimeSpan taskStart;
int errorCount;
int warningCount;
- DateTime buildStart;
+ DateTime buildStart;
bool performanceSummary;
bool summary;
@@ -56,7 +56,7 @@
this.indent = 0;
this.errorCount = 0;
this.warningCount = 0;
- this.writeHandler += new
WriteHandler(WriteHandlerFunction);
+ this.writeHandler += new WriteHandler
(WriteHandlerFunction);
this.performanceSummary = false;
this.summary = true;
}
@@ -117,7 +117,7 @@
public void ProjectFinished (object sender,
ProjectFinishedEventArgs args)
{
- if (verbosity == LoggerVerbosity.Diagnostic) {
+ if (IsVerbosityGreaterOrEqual
(LoggerVerbosity.Diagnostic)) {
WriteLine (String.Format ("Done building
project \"{0}\".", args.ProjectFile));
WriteLine ("");
}
@@ -132,7 +132,7 @@
public void TargetFinished (object sender,
TargetFinishedEventArgs args)
{
indent--;
- if (this.verbosity == LoggerVerbosity.Diagnostic)
+ if (IsVerbosityGreaterOrEqual
(LoggerVerbosity.Diagnostic))
WriteLine (String.Format ("Done building target
\"{0}\" in project \"{1}\".",
args.TargetName, args.ProjectFile));
WriteLine ("");
@@ -154,26 +154,22 @@
public void MessageRaised (object sender, BuildMessageEventArgs
args)
{
- // FIXME: check for importance and verbosity
- //WriteLineWithSender (sender, args.Message);
- WriteLine (args.Message);
+ if (IsMessageOk (args)) {
+ WriteLine (args.Message);
+ }
}
public void WarningRaised (object sender, BuildWarningEventArgs
args)
{
- string warning = String.Format (": Warning
{0}({1},{2})",
- args.File, args.LineNumber, args.ColumnNumber);
- //WriteLineWithSender (sender, warning);
- WriteLine (args.Message);
+ if (IsVerbosityGreaterOrEqual (LoggerVerbosity.Normal))
+ WriteLineWithoutIndent (FormatWarningEvent
(args));
warningCount++;
}
public void ErrorRaised (object sender, BuildErrorEventArgs
args)
{
- string error = String.Format (": Error {0}({1},{2})",
- args.File, args.LineNumber, args.ColumnNumber);
- //WriteLineWithSender (sender, error);
- WriteLine (args.Message);
+ if (IsVerbosityGreaterOrEqual
(LoggerVerbosity.Minimal))
+ WriteLineWithoutIndent (FormatErrorEvent
(args));
errorCount++;
}
@@ -184,6 +180,11 @@
writeHandler (message);
}
+ private void WriteLineWithoutIndent (string message)
+ {
+ writeHandler (message);
+ }
+
private void WriteLineWithSender (object sender, string message)
{
if ((string) sender == "MSBuild")
@@ -218,7 +219,59 @@
public virtual void Shutdown ()
{
}
+
+ private string FormatErrorEvent (BuildErrorEventArgs args)
+ {
+ // FIXME: show more complicated args
+ if (args.LineNumber != 0 && args.ColumnNumber != 0) {
+ return String.Format ("{0}({1},{2}): {3} error
{4}: {5}", args.File, args.LineNumber, args.ColumnNumber,
+ args.Subcategory, args.Code,
args.Message);
+ } else {
+ return String.Format ("{0}: {1} error {2}:
{3}", args.File, args.Subcategory, args.Code,
+ args.Message);
+ }
+ }
+ private string FormatWarningEvent (BuildWarningEventArgs args)
+ {
+ // FIXME: show more complicated args
+ if (args.LineNumber != 0 && args.ColumnNumber != 0) {
+ return String.Format ("{0}({1},{2}): {3}
warning {4}: {5}", args.File, args.LineNumber, args.ColumnNumber,
+ args.Subcategory, args.Code,
args.Message);
+ } else {
+ return String.Format ("{0}: {1} warning {2}:
{3}", args.File, args.Subcategory, args.Code,
+ args.Message);
+ }
+ }
+
+ private bool IsMessageOk (BuildMessageEventArgs bsea)
+ {
+ if (bsea.Importance == MessageImportance.High &&
IsVerbosityGreaterOrEqual (LoggerVerbosity.Minimal)) {
+ return true;
+ } else if (bsea.Importance == MessageImportance.Normal
&& IsVerbosityGreaterOrEqual (LoggerVerbosity.Normal)) {
+ return true;
+ } else if (bsea.Importance == MessageImportance.Low &&
IsVerbosityGreaterOrEqual (LoggerVerbosity.Detailed)) {
+ return true;
+ } else
+ return false;
+ }
+
+ private bool IsVerbosityGreaterOrEqual (LoggerVerbosity v)
+ {
+ if (v == LoggerVerbosity.Diagnostic) {
+ return LoggerVerbosity.Diagnostic <=
verbosity;
+ } else if (v == LoggerVerbosity.Detailed) {
+ return LoggerVerbosity.Detailed <=
verbosity;
+ } else if (v == LoggerVerbosity.Normal) {
+ return LoggerVerbosity.Normal <=
verbosity;
+ } else if (v == LoggerVerbosity.Minimal) {
+ return LoggerVerbosity.Minimal <=
verbosity;
+ } else if (v == LoggerVerbosity.Quiet) {
+ return true;
+ } else
+ return false;
+ }
+
public string Parameters {
get {
return parameters;
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Expression.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Expression.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Expression.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -36,6 +36,7 @@
IList objects;
Project project;
+ ItemReference parentItemReference;
public Expression (Project project)
{
@@ -84,6 +85,14 @@
eState =
EvaluationState.InProperty;
start = current;
break;
+ case '%':
+ if (temp.Length > 0) {
+ objects.Add
(temp.ToString ());
+ temp = new
StringBuilder ();
+ }
+ eState =
EvaluationState.InMetadata;
+ start = current;
+ break;
default:
temp.Append (it.Current);
if (current == source.Length -
1)
@@ -94,10 +103,10 @@
case EvaluationState.InItem:
switch (it.Current) {
case '(':
- if (pState == ParenState.Out)
+ if (pState == ParenState.Out &&
aState == ApostropheState.Out)
pState =
ParenState.Left;
- else
- throw new Exception
("'(' expected.");
+ else if (aState ==
ApostropheState.Out)
+ throw new Exception
("'(' not expected.");
break;
case ')':
if (pState == ParenState.Left
&& aState == ApostropheState.Out) {
@@ -135,6 +144,23 @@
break;
}
break;
+ case EvaluationState.InMetadata:
+ switch (it.Current) {
+ case '(':
+ if (pState == ParenState.Out)
+ pState =
ParenState.Left;
+ break;
+ case ')':
+ if (pState == ParenState.Left) {
+ objects.Add (new
MetadataReference (this, source.Substring (start, current - start + 1)));
+ eState =
EvaluationState.Out;
+ pState = ParenState.Out;
+ }
+ break;
+ default:
+ break;
+ }
+ break;
default:
throw new Exception ("Invalid
evaluation state.");
break;
@@ -178,7 +204,7 @@
return objects;
}
- private string ToString ()
+ public new string ToString ()
{
StringBuilder sb = new StringBuilder ();
@@ -218,7 +244,10 @@
public ITaskItem ToITaskItem ()
{
ITaskItem item;
-
+
+ if (objects == null)
+ throw new Exception ("Cannot cast empty
expression to ITaskItem.");
+
if (objects [0] is ItemReference) {
ItemReference ir = (ItemReference) objects [0];
ITaskItem[] array = ir.ToITaskItemArray ();
@@ -298,11 +327,16 @@
public Project Project {
get { return project; }
}
+
+ public ItemReference ParentItemReference {
+ get { return parentItemReference; }
+ }
}
internal enum EvaluationState {
Out,
InItem,
+ InMetadata,
InProperty
}
@@ -315,4 +349,11 @@
In,
Out
}
-}
+
+ internal enum ItemParsingState {
+ Name,
+ Transform1,
+ Transform2,
+ Separator
+ }
+}
\ No newline at end of file
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ImportedProject.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ImportedProject.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ImportedProject.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -41,13 +41,12 @@
{
}
- public bool Load (string filename)
+ public void Load (string filename)
{
if (filename == null)
throw new ArgumentNullException ("filename");
StreamReader sr = new StreamReader (filename);
- bool result = false;
try {
string text = sr.ReadToEnd ();
size = text.Length;
@@ -55,15 +54,13 @@
xmlDocument.LoadXml (text);
lastWrite = File.GetLastWriteTime (filename);
fullFileName = filename;
- result = true;
}
catch (Exception ex) {
- result = false;
+ throw;
}
finally {
sr.Close ();
}
- return result;
}
public XmlDocument XmlDocument {
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -1,5 +1,5 @@
//
-// ItemReference.cs
+// ItemReference.cs: Represents "@(Reference)" in expression.
//
// Author:
// Marek Sieradzki ([EMAIL PROTECTED])
@@ -36,8 +36,7 @@
string itemName;
string separator;
Expression parent;
- // FIXME: should it be that way?
- //Expression transform;
+ Expression transform;
public ItemReference (Expression parent)
{
@@ -56,18 +55,24 @@
public void ParseSource (string source)
{
+ string sourceWithoutParens;
+ ApostropheState aState = ApostropheState.Out;
+ ItemParsingState iState = ItemParsingState.Name;
+ int c = -1;
+ int itemNameEnd;
+ int transformEnd = -1;
+ int separatorStart = -1;
+
if (source == null)
throw new ArgumentNullException ("source");
- // add support for transforms
if (source.Length < 3)
throw new ArgumentException ("Invalid item.");
- string sourceWithoutParens = source.Substring (2,
source.Length - 3);
- ApostropheState aState = ApostropheState.Out;
- int c = -1;
- bool separatorSet = false;
+ sourceWithoutParens = source.Substring (2,
source.Length - 3);
+ itemNameEnd = sourceWithoutParens.Length - 1;
CharEnumerator it = sourceWithoutParens.GetEnumerator
();
+
while (it.MoveNext ()) {
c++;
if (it.Current == '\'') {
@@ -75,18 +80,39 @@
aState = ApostropheState.Out;
else
aState = ApostropheState.In;
- continue;
- } else if (it.Current == ',') {
- if (aState == ApostropheState.Out) {
- separator =
sourceWithoutParens.Substring (c + 2, sourceWithoutParens.Length - c - 3);
- itemName =
sourceWithoutParens.Substring (0, c);
- separatorSet = true;
- break;
- }
+ } else if (it.Current == '-' && iState ==
ItemParsingState.Name && aState == ApostropheState.Out) {
+ iState = ItemParsingState.Transform1;
+ itemNameEnd = c - 1;
+ } else if (it.Current == '>' && iState ==
ItemParsingState.Transform1 && aState == ApostropheState.Out) {
+ iState = ItemParsingState.Transform2;
+ } else if (iState ==
ItemParsingState.Transform2 && aState == ApostropheState.Out && c ==
sourceWithoutParens.Length - 1) {
+ transformEnd = c;
+ } else if (iState ==
ItemParsingState.Transform2 && aState == ApostropheState.Out && it.Current ==
',') {
+ transformEnd = c - 1;
+ separatorStart = c + 1;
+ break;
+ } else if (iState == ItemParsingState.Name &&
aState == ApostropheState.Out && it.Current == ',') {
+ separatorStart = c + 1;
+ itemNameEnd = c - 1;
+ break;
}
}
- if (separatorSet == false) {
- itemName = sourceWithoutParens;
+ itemName = sourceWithoutParens.Substring (0,
itemNameEnd + 1);
+ if (transformEnd != -1) {
+ if (separatorStart != -1) {
+ separator =
sourceWithoutParens.Substring (separatorStart + 1, sourceWithoutParens.Length
+ - separatorStart - 2);
+ transform = new Expression
(parent.Project, sourceWithoutParens.Substring (itemNameEnd + 4, transformEnd
+ - itemNameEnd - 4));
+ } else {
+ transform = new Expression
(parent.Project, sourceWithoutParens.Substring (itemNameEnd + 4,
sourceWithoutParens.Length
+ - itemNameEnd - 5));
+ }
+ } else {
+ if (separatorStart != -1) {
+ separator =
sourceWithoutParens.Substring (separatorStart + 1, sourceWithoutParens.Length
+ - separatorStart - 2);
+ }
}
}
@@ -97,7 +123,7 @@
BuildItemGroup big;
if (p.EvaluatedItemsByName.Contains (itemName))
{
big =
(BuildItemGroup)p.EvaluatedItemsByName [itemName];
- return big.ToITaskItemArray ();
+ return big.ToITaskItemArray (transform);
} else
return null;
} else
@@ -111,7 +137,7 @@
BuildItemGroup big;
if (p.EvaluatedItemsByName.Contains (itemName))
{
big =
(BuildItemGroup)p.EvaluatedItemsByName [itemName];
- return big.ToString (separator);
+ return big.ToString (transform,
separator);
} else
return String.Empty;
} else
@@ -126,4 +152,4 @@
get { return separator; }
}
}
-}
+}
\ No newline at end of file
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/MetadataReference.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/MetadataReference.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/MetadataReference.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -26,6 +26,8 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
using System;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
namespace Microsoft.Build.BuildEngine {
internal class MetadataReference {
@@ -44,21 +46,33 @@
public MetadataReference (Expression parent, string source)
{
this.parent = parent;
- Evaluate (source);
+ ParseSource (source);
}
public MetadataReference (Expression parent, string itemName,
string metadataName)
{
this.parent = parent;
- //Evaluate (itemName, metadataName);
+ this.itemName = itemName;
+ this.metadataName = metadataName;
}
- public void Evaluate (string source)
+ public void ParseSource (string source)
{
- if (source.Length < 3)
+ string sourceWithoutParens;
+ int dot;
+
+ if (source.Length < 4)
throw new ArgumentException ("source is too
short.");
- //metadataName =
- //return item.GetEvaluatedMetadata (source.Substring
(2, source.Length -3 ));
+
+ sourceWithoutParens = source.Substring (2,
source.Length - 3);
+ dot = sourceWithoutParens.IndexOf ('.');
+
+ if (dot != -1) {
+ itemName = sourceWithoutParens.Substring (0,
dot);
+ metadataName = sourceWithoutParens.Substring
(dot + 1, sourceWithoutParens.Length - dot - 1);
+ } else {
+ metadataName = sourceWithoutParens;
+ }
}
public string ItemName {
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs
===================================================================
--- trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -450,10 +450,13 @@
}
ImportedProject importedProject = new ImportedProject
();
- importedProject.Load (importedFile);
- Console.WriteLine (importedFile);
- ProcessElements
(importedProject.XmlDocument.DocumentElement, importedProject);
-
+ try {
+ importedProject.Load (importedFile);
+ ProcessElements
(importedProject.XmlDocument.DocumentElement, importedProject);
+ }
+ catch (Exception ex) {
+ Console.WriteLine (ex);
+ }
}
private void AddItemGroup (XmlElement xmlElement)
@@ -617,7 +620,7 @@
name = sourceWithoutParens;
}
if (evaluatedItemsByName.Contains (name))
- return ((BuildItemGroup) evaluatedItemsByName
[name]).ToString (separator);
+ return ((BuildItemGroup) evaluatedItemsByName
[name]).ToString (null, separator);
else
return "";
}
Modified:
trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs
===================================================================
--- trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -93,9 +93,13 @@
} else if (dependsOnTargets.Value == "") {
;
} else {
- string[] targetsToBuildFirst =
dependsOnTargets.Value.Split (';');
+ Expression dependencies = new Expression
(Project, dependsOnTargets.Value);
+ string [] targetsToBuildFirst =
dependencies.ToString ().Split (';');
foreach (string target in targetsToBuildFirst) {
- Target t = (Target) project.Targets
[target];
+ string trimmed = target.Trim ();
+ Target t = (Target) project.Targets
[trimmed];
+ if (t == null)
+ throw new
InvalidProjectFileException (String.Format ("Target {0} not found.", trimmed));
if (t.BuildState ==
BuildState.NotStarted) {
t.Build ();
}
Added: trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.Engine.targets
===================================================================
--- trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.Engine.targets
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Engine/Microsoft.Build.Engine.targets
2005-08-26 22:44:01 UTC (rev 48932)
@@ -0,0 +1,16 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <MicrosoftBuildEngineSources
Include="Microsoft.Build.Engine/Microsoft.Build.BuildEngine/*.cs" />
+ <MicrosoftBuildEngineDll Include="Microsoft.Build.Engine.dll" />
+ <MicrosoftBuildEngineReferences
Include="Microsoft.Build.Framework.dll;Microsoft.Build.Utilities.dll" />
+ </ItemGroup>
+ <Target Name="MicrosoftBuildEngine" >
+ <Csc
+ Sources="@(MicrosoftBuildEngineSources)"
+ TargetType="library"
+ OutputAssembly="@(MicrosoftBuildEngineDll)"
+ References="@(MicrosoftBuildEngineReferences)"
+ WarningLevel="3"
+ />
+ </Target>
+</Project>
Modified:
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildErrorEventArgs.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildErrorEventArgs.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildErrorEventArgs.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -31,15 +31,15 @@
namespace Microsoft.Build.Framework {
[Serializable]
public class BuildErrorEventArgs : BuildEventArgs {
- string code;
- int columnNumber;
- int endColumnNumber;
- int endLineNumber;
- string file;
- int lineNumber;
- string subcategory;
+
+ string code;
+ int columnNumber;
+ int endColumnNumber;
+ int endLineNumber;
+ string file;
+ int lineNumber;
+ string subcategory;
- // FIXME: what is that for?
protected BuildErrorEventArgs ()
{
}
Modified:
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildEventArgs.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildEventArgs.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildEventArgs.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -33,6 +33,7 @@
{
[Serializable]
public abstract class BuildEventArgs : System.EventArgs {
+
protected string helpKeyword;
protected string message;
protected string senderName;
@@ -40,7 +41,7 @@
protected DateTime timeStamp;
protected BuildEventArgs ()
- : this(null, null, null)
+ : this (null, null, null)
{
}
@@ -50,8 +51,7 @@
this.message = message;
this.helpKeyword = helpKeyword;
this.senderName = senderName;
- Thread c = Thread.CurrentThread;
- this.threadId = c.GetHashCode ();
+ this.threadId = Thread.CurrentThread.GetHashCode ();
this.timeStamp = DateTime.Now;
}
Modified:
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildWarningEventArgs.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildWarningEventArgs.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildWarningEventArgs.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -31,6 +31,7 @@
namespace Microsoft.Build.Framework {
[Serializable]
public class BuildWarningEventArgs : BuildEventArgs {
+
protected string subcategory;
protected string code;
protected string file;
@@ -55,6 +56,7 @@
this.subcategory = subcategory;
this.code = code;
this.file = file;
+ this.lineNumber = lineNumber;
this.columnNumber = columnNumber;
this.endLineNumber = endLineNumber;
this.endColumnNumber = endColumnNumber;
Modified:
trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/ChangeLog
===================================================================
--- trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/ChangeLog
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework/ChangeLog
2005-08-26 22:44:01 UTC (rev 48932)
@@ -1,3 +1,9 @@
+2005-08-27 Marek Sieradzki <[EMAIL PROTECTED]>
+
+ * BuildErrorEventArgs.cs: Formatting.
+ * BuildWarningEventArgs.cs: Fixed ctor.
+ * BuildEventArgs.cs: Formatting.
+
2005-08-19 Marek Sieradzki <[EMAIL PROTECTED]>
* TargetFinishedEventArgs.cs: Added Succeeded property.
Added: trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework.targets
===================================================================
--- trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework.targets
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Framework/Microsoft.Build.Framework.targets
2005-08-26 22:44:01 UTC (rev 48932)
@@ -0,0 +1,15 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <MicrosoftBuildFrameworkSources
Include="Microsoft.Build.Framework/Microsoft.Build.Framework/*.cs" />
+ <MicrosoftBuildFrameworkSources
Include="Microsoft.Build.Framework/Mono.XBuild.Shared/*.cs" />
+ <MicrosoftBuildFrameworkDll
Include="Microsoft.Build.Framework.dll" />
+ </ItemGroup>
+ <Target Name="MicrosoftBuildFramework" >
+ <Csc
+ Sources="@(MicrosoftBuildFrameworkSources)"
+ TargetType="library"
+ OutputAssembly="@(MicrosoftBuildFrameworkDll)"
+ WarningLevel="3"
+ />
+ </Target>
+</Project>
Modified: trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AL.cs
===================================================================
--- trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AL.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AL.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -68,25 +68,11 @@
string win32Resource;
Process alProcess;
- static Regex regex;
public AL ()
{
}
- static AL ()
- {
- regex = new Regex (
- @"^\s*"
- +
@"(((?<ORIGIN>(((\d+>)?[a-zA-Z]?:[^:]*)|([^:]*))):)"
- + "|())"
- + "(?<SUBCATEGORY>(()|([^:]*? )))"
- + "(?<CATEGORY>(error|warning)) "
- + "(?<CODE>[^:]*):"
- + "(?<TEXT>.*)$",
- RegexOptions.IgnoreCase);
- }
-
protected internal override void AddResponseFileCommands (
CommandLineBuilderExtension
commandLine)
{
Modified: trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/ChangeLog
===================================================================
--- trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/ChangeLog
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/ChangeLog
2005-08-26 22:44:01 UTC (rev 48932)
@@ -1,3 +1,9 @@
+2005-08-27 Marek Sieradzki <[EMAIL PROTECTED]>
+
+ * Exec.cs: Removed "exited".
+ * AL.cs: Removed Regex.
+ * Csc.cs: Changed default GenerateFullPaths to false.
+
2005-08-24 Marek Sieradzki <[EMAIL PROTECTED]>
* Exec.cs: Reformatted and added try/catch.
Modified: trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Csc.cs
===================================================================
--- trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Csc.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Csc.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -79,7 +79,7 @@
commandLine.AppendSwitch ("/nostdlib");
if (Optimize)
commandLine.AppendSwitch ("/optimize");
- commandLine.AppendSwitchIfNotNull ("/out:",
OutputAssembly);
+ commandLine.AppendSwitchIfNotNull ("/out:",
OutputAssembly.ItemSpec);
//platform
if (References != null) {
foreach (ITaskItem item in References) {
@@ -169,7 +169,7 @@
}
public bool GenerateFullPaths {
- get { return GetBoolParameterWithDefault
("GenerateFullPaths", true); }
+ get { return GetBoolParameterWithDefault
("GenerateFullPaths", false); }
set { Bag ["GenerateFullPaths"] = value; }
}
Modified: trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Exec.cs
===================================================================
--- trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Exec.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Exec.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -46,7 +46,6 @@
string workingDirectory;
Process process;
- bool exited;
int executionTime;
public Exec ()
@@ -54,7 +53,6 @@
process = new Process ();
timeout = Int32.MaxValue;
ignoreExitCode = false;
- exited = false;
executionTime = 0;
}
Added: trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks.targets
===================================================================
--- trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks.targets
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Tasks/Microsoft.Build.Tasks.targets
2005-08-26 22:44:01 UTC (rev 48932)
@@ -0,0 +1,23 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <MicrosoftBuildTasksSources
Include="Microsoft.Build.Tasks/Microsoft.Build.Tasks/*.cs" />
+ <MicrosoftBuildTasksSources
+
Include="Microsoft.Build.Tasks/Microsoft.Build.Tasks.Hosting/*.cs"
+
Exclude="Microsoft.Build.Tasks/Microsoft.Build.Tasks.Hosting/CscHostObject.cs"
+ />
+ <MicrosoftBuildTasksSources
Include="Microsoft.Build.Tasks/Mono.XBuild.Tasks.GenerateResourceInternal/*.cs"
/>
+ <MicrosoftBuildTasksDll Include="Microsoft.Build.Tasks.dll" />
+ <MicrosoftBuildTasksReferences
Include="Microsoft.Build.Framework.dll" />
+ <MicrosoftBuildTasksReferences
Include="Microsoft.Build.Utilities.dll" />
+ <MicrosoftBuildTasksReferences Include="System.Windows.Forms" />
+ </ItemGroup>
+ <Target Name="MicrosoftBuildTasks"
DependsOnTargets="MicrosoftBuildFramework;MicrosoftBuildUtilities">
+ <Csc
+ Sources="@(MicrosoftBuildTasksSources)"
+ TargetType="library"
+ OutputAssembly="@(MicrosoftBuildTasksDll)"
+ References="@(MicrosoftBuildTasksReferences)"
+ WarningLevel="3"
+ />
+ </Target>
+</Project>
Modified:
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ChangeLog
===================================================================
--- trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ChangeLog
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ChangeLog
2005-08-26 22:44:01 UTC (rev 48932)
@@ -1,3 +1,9 @@
+2005-08-27 Marek Sieradzki <[EMAIL PROTECTED]>
+
+ * Logger.cs: Formatting.
+ * ToolTask.cs: Added error/warning handling.
+ * TaskLoggingHelper.cs: Fixed LogErrorFromException ().
+
2005-08-24 Marek Sieradzki <[EMAIL PROTECTED]>
* CommandLineBuilder.cs: Added checking for null values.
Modified:
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/Logger.cs
===================================================================
--- trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/Logger.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/Logger.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -71,9 +71,9 @@
args.Subcategory, args.Code, args.Message);
}
- public abstract void Initialize(IEventSource eventSource);
+ public abstract void Initialize (IEventSource eventSource);
- public virtual void Shutdown()
+ public virtual void Shutdown ()
{
}
}
Modified:
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskLoggingHelper.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskLoggingHelper.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskLoggingHelper.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -105,7 +105,8 @@
{
StringBuilder sb = new StringBuilder ();
sb.Append (e.Message);
- sb.Append (e.StackTrace);
+ if (showStackTrace == true)
+ sb.Append (e.StackTrace);
BuildErrorEventArgs beea = new BuildErrorEventArgs (
null, null, null, 0, 0, 0, 0, sb.ToString (),
e.HelpLink, e.Source);
Modified:
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs
===================================================================
---
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs
2005-08-26 22:38:23 UTC (rev 48931)
+++
trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs
2005-08-26 22:44:01 UTC (rev 48932)
@@ -1,5 +1,5 @@
//
-// ToolTask.cs:
+// ToolTask.cs: Base class for command line tool tasks.
//
// Author:
// Marek Sieradzki ([EMAIL PROTECTED])
@@ -42,6 +42,8 @@
string toolPath;
Process process;
+ static Regex regex;
+
protected ToolTask ()
: this (null, null)
{
@@ -59,6 +61,19 @@
this.HelpKeywordPrefix = helpKeywordPrefix;
}
+ static ToolTask ()
+ {
+ regex = new Regex (
+ @"^\s*"
+ +
@"(((?<ORIGIN>(((\d+>)?[a-zA-Z]?:[^:]*)|([^:]*))):)"
+ + "|())"
+ + "(?<SUBCATEGORY>(()|([^:]*? )))"
+ + "(?<CATEGORY>(error|warning)) "
+ + "(?<CODE>[^:]*):"
+ + "(?<TEXT>.*)$",
+ RegexOptions.IgnoreCase);
+ }
+
protected virtual bool CallHostObjectToExecute ()
{
return true;
@@ -75,6 +90,8 @@
private bool RealExecute (string filename, string arguments)
{
+ string line;
+
if (filename == null)
throw new ArgumentNullException ("filename");
if (arguments == null)
@@ -88,20 +105,97 @@
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
- Log.LogMessage (MessageImportance.Normal, String.Format
("Tool {0} execution started with arguments: {1}",
+ Log.LogMessage (MessageImportance.Low, String.Format
("Tool {0} execution started with arguments: {1}",
filename, arguments));
process.Start ();
process.WaitForExit ();
+ while ((line = process.StandardError.ReadLine ()) !=
null) {
+ HandleError (line);
+ }
+
Log.LogMessage (MessageImportance.Low, String.Format
("Tool {0} execution finished.", filename));
- return true;
+ return !Log.HasLoggedErrors;
}
private void HandleError (string line)
{
+ string filename, origin, category, code, subcategory,
text;
+ int lineNumber, columnNumber, endLineNumber,
endColumnNumber;
+
+ Match m = regex.Match (line);
+ origin = m.Groups [regex.GroupNumberFromName
("ORIGIN")].Value;
+ category = m.Groups [regex.GroupNumberFromName
("CATEGORY")].Value;
+ code = m.Groups [regex.GroupNumberFromName
("CODE")].Value;
+ subcategory = m.Groups [regex.GroupNumberFromName
("SUBCATEGORY")].Value;
+ text = m.Groups [regex.GroupNumberFromName
("TEXT")].Value;
+
+ ParseOrigin (origin, out filename, out lineNumber, out
columnNumber, out endLineNumber, out endColumnNumber);
+
+ if (category == "warning") {
+ Log.LogWarning (subcategory, code, null,
filename, lineNumber, columnNumber, endLineNumber,
+ endColumnNumber, text, null);
+ } else if (category == "error") {
+ Log.LogError (subcategory, code, null,
filename, lineNumber, columnNumber, endLineNumber,
+ endColumnNumber, text, null);
+ }
}
+
+ private void ParseOrigin (string origin, out string filename,
+ out int lineNumber, out int columnNumber,
+ out int endLineNumber, out int
endColumnNumber)
+ {
+ int lParen;
+ string[] temp;
+ string[] left, right;
+
+ if (origin.IndexOf ('(') != -1 ) {
+ lParen = origin.IndexOf ('(');
+ filename = origin.Substring (0, lParen);
+ temp = origin.Substring (lParen + 1,
origin.Length - lParen - 2).Split (',');
+ if (temp.Length == 1) {
+ left = temp [0].Split ('-');
+ if (left.Length == 1) {
+ lineNumber = Int32.Parse (left
[0]);
+ columnNumber = 0;
+ endLineNumber = 0;
+ endColumnNumber = 0;
+ } else if (left.Length == 2) {
+ lineNumber = Int32.Parse (left
[0]);
+ columnNumber = 0;
+ endLineNumber = Int32.Parse
(left [1]);
+ endColumnNumber = 0;
+ } else
+ throw new Exception ("Invalid
line/column format.");
+ } else if (temp.Length == 2) {
+ right = temp [1].Split ('-');
+ lineNumber = Int32.Parse (temp [0]);
+ endLineNumber = 0;
+ if (right.Length == 1) {
+ columnNumber = Int32.Parse
(right [0]);
+ endColumnNumber = 0;
+ } else if (right.Length == 2) {
+ columnNumber = Int32.Parse
(right [0]);
+ endColumnNumber = Int32.Parse
(right [0]);
+ } else
+ throw new Exception ("Invalid
line/column format.");
+ } else if (temp.Length == 4) {
+ lineNumber = Int32.Parse (temp [0]);
+ endLineNumber = Int32.Parse (temp [2]);
+ columnNumber = Int32.Parse (temp [1]);
+ endColumnNumber = Int32.Parse (temp
[3]);
+ } else
+ throw new Exception ("Invalid
line/column format.");
+ } else {
+ filename = origin;
+ lineNumber = 0;
+ columnNumber = 0;
+ endLineNumber = 0;
+ endColumnNumber = 0;
+ }
+ }
protected virtual string GenerateCommandLineCommands ()
{
Added: trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities.targets
===================================================================
--- trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities.targets
2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.Utilities/Microsoft.Build.Utilities.targets
2005-08-26 22:44:01 UTC (rev 48932)
@@ -0,0 +1,16 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <MicrosoftBuildUtilitiesSources
Include="Microsoft.Build.Utilities/Microsoft.Build.Utilities/*.cs" />
+ <MicrosoftBuildUtilitiesDll
Include="Microsoft.Build.Utilities.dll" />
+ <MicrosoftBuildUtilitiesReferences
Include="Microsoft.Build.Framework.dll" />
+ </ItemGroup>
+ <Target Name="MicrosoftBuildUtilities"
DependsOnTargets="MicrosoftBuildFramework">
+ <Csc
+ Sources="@(MicrosoftBuildUtilitiesSources)"
+ TargetType="library"
+ OutputAssembly="@(MicrosoftBuildUtilitiesDll)"
+ References="@(MicrosoftBuildUtilitiesReferences)"
+ WarningLevel="3"
+ />
+ </Target>
+</Project>
Added: trunk/xbuild/Microsoft.Build.csproj
===================================================================
--- trunk/xbuild/Microsoft.Build.csproj 2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Build.csproj 2005-08-26 22:44:01 UTC (rev 48932)
@@ -0,0 +1,24 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="Microsoft.Common.tasks" />
+ <Import Project="Microsoft.Build.Engine/Microsoft.Build.Engine.targets"
/>
+ <Import
Project="Microsoft.Build.Framework/Microsoft.Build.Framework.targets" />
+ <Import Project="Microsoft.Build.Tasks/Microsoft.Build.Tasks.targets" />
+ <Import
Project="Microsoft.Build.Utilities/Microsoft.Build.Utilities.targets" />
+ <Import Project="xbuild/XBuild.targets" />
+ <ItemGroup>
+ <Targets Include="MicrosoftBuildEngine" />
+ <Targets Include="MicrosoftBuildFramework" />
+ <Targets Include="MicrosoftBuildTasks" />
+ <Targets Include="MicrosoftBuildUtilities" />
+ <Targets Include="XBuild" />
+ </ItemGroup>
+ <ItemGroup>
+ <DllsToClean Include="*.dll" />
+ </ItemGroup>
+ <Target Name="Clean" >
+ <Delete Files="@(DllsToClean)" />
+ </Target>
+ <Target Name="Main" DependsOnTargets="@(Targets)">
+ <Message Text="XBuild build is successful." />
+ </Target>
+</Project>
Added: trunk/xbuild/Microsoft.Common.tasks
===================================================================
--- trunk/xbuild/Microsoft.Common.tasks 2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/Microsoft.Common.tasks 2005-08-26 22:44:01 UTC (rev 48932)
@@ -0,0 +1,23 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
+ <UsingTask TaskName="Microsoft.Build.Tasks.AL"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Copy"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.CreateItem"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.CreateProperty"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Csc"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Delete"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Error"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Exec"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.FindUnderPath"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.GenerateResource"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.GetFramworkPath"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.GetFramworkSdkPath"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.MakeDir"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Message"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.MSBuild"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.ReadLinesFromFile"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.RemoveDir"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.SignFile"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Touch"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.Warning"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.WriteLinesToFile"
AssemblyFile="xbuild/bin/Debug/Microsoft.Build.Tasks.dll" />
+</Project>
Modified: trunk/xbuild/README
===================================================================
--- trunk/xbuild/README 2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/README 2005-08-26 22:44:01 UTC (rev 48932)
@@ -5,4 +5,7 @@
Microsoft.Build.Tasks
Microsoft.Build.Utilities
+There are .targets files that can be used to build XBuild. To do it you must
have finished build in xbuild/bin/Debug.
+Microsoft.Build.csproj is not a regular VS2005 project.
+
It is licensed on MIT X11 license.
Added: trunk/xbuild/xbuild/XBuild.targets
===================================================================
--- trunk/xbuild/xbuild/XBuild.targets 2005-08-26 22:38:23 UTC (rev 48931)
+++ trunk/xbuild/xbuild/XBuild.targets 2005-08-26 22:44:01 UTC (rev 48932)
@@ -0,0 +1,20 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <XBuildSources Include="xbuild/*.cs" />
+ <XBuildExe Include="xbuild.exe" />
+ <!-- not all of them are really used -->
+ <XBuildReferences Include="Microsoft.Build.Engine.dll" />
+ <XBuildReferences Include="Microsoft.Build.Framework.dll" />
+ <XBuildReferences Include="Microsoft.Build.Utilities.dll" />
+ <XBuildReferences Include="Microsoft.Build.Tasks.dll" />
+ </ItemGroup>
+ <Target Name="XBuild" DependsOnTargets="MicrosoftBuildEngine">
+ <Csc
+ Sources="@(XBuildSources)"
+ TargetType="exe"
+ OutputAssembly="@(XBuildExe)"
+ References="@(XBuildReferences)"
+ WarningLevel="3"
+ />
+ </Target>
+</Project>
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches