Mark tests as not working under TARGET_JVM
[mono.git] / mcs / class / Microsoft.Build.Tasks / Microsoft.Build.Tasks / MSBuild.cs
1 //
2 // MSBuild.cs: Task that can run .*proj files
3 //
4 // Author:
5 //   Marek Sieradzki (marek.sieradzki@gmail.com)
6 //
7 // (C) 2005 Marek Sieradzki
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
28 #if NET_2_0
29
30 using System;
31 using System.Collections;
32 using System.Collections.Generic;
33 using System.IO;
34 using Microsoft.Build.Framework;
35 using Microsoft.Build.Utilities;
36
37 namespace Microsoft.Build.Tasks {
38
39         [MonoTODO]
40         public class MSBuild : TaskExtension {
41         
42                 ITaskItem []    projects;
43                 string []       properties;
44                 bool            rebaseOutputs;
45                 bool            runEachTargetSeparately;
46                 bool            stopOnFirstFailure;
47                 ITaskItem []    targetOutputs;
48                 string []       targets;
49         
50                 public MSBuild ()
51                 {
52                 }
53
54                 public override bool Execute ()
55                 {
56                         string filename;
57                         bool result = true;
58                         stopOnFirstFailure = false;
59                         List <ITaskItem > outputItems = new List <ITaskItem> ();
60                         string currentDirectory = Environment.CurrentDirectory;
61                         Hashtable outputs;
62                 
63                         foreach (ITaskItem project in projects) {
64                                 filename = project.GetMetadata ("FullPath");
65
66                                 Directory.SetCurrentDirectory (Path.GetDirectoryName (filename));
67                                 outputs = new Hashtable ();
68
69                                 result = BuildEngine.BuildProjectFile (filename, targets, null, outputs);
70
71                                 if (result) {
72                                         foreach (DictionaryEntry de in outputs) {
73                                                 ITaskItem [] array = (ITaskItem []) de.Value;
74                                                 foreach (ITaskItem item in array) {
75                                                         outputItems.Add (item);
76                                                         if (rebaseOutputs)
77                                                                 File.Copy (item.ItemSpec, Path.Combine (currentDirectory, item.ItemSpec), true);
78                                                 }
79                                         }
80                                 } else {
81                                         Log.LogError ("Error while building {0}", filename);
82                                         if (stopOnFirstFailure)
83                                                 break;
84                                 }
85                         }
86
87                         if (result)
88                                 targetOutputs = outputItems.ToArray ();
89
90                         Directory.SetCurrentDirectory (currentDirectory);
91                         return result;
92                 }
93
94                 [Required]
95                 public ITaskItem [] Projects {
96                         get { return projects; }
97                         set { projects = value; }
98                 }
99
100                 [MonoTODO]
101                 public string [] Properties {
102                         get { return properties; }
103                         set { properties = value; }
104                 }
105
106                 public bool RebaseOutputs {
107                         get { return rebaseOutputs; }
108                         set { rebaseOutputs = value; }
109                 }
110
111                 [MonoTODO]
112                 public bool RunEachTargetSeparately {
113                         get { return runEachTargetSeparately; }
114                         set { runEachTargetSeparately = value; }
115                 }
116
117                 public bool StopOnFirstFailure {
118                         get { return stopOnFirstFailure; }
119                         set { stopOnFirstFailure = value; }
120                 }
121
122                 [Output]
123                 public ITaskItem [] TargetOutputs {
124                         get { return targetOutputs; }
125                 }
126
127                 public string [] Targets {
128                         get { return targets; }
129                         set { targets = value; }
130                 }
131         }
132 }
133
134 #endif