2009-03-04 Astushi Enomoto <atsushi@ximian.com>
[mcs.git] / tools / xbuild / Main.cs
blobe2bb69c17aa3c4f6b370fa1e71143c49b68bdff4
1 //
2 // Main.cs: Main program file of command line utility.
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:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
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.
28 #if NET_2_0
30 using System;
31 using System.Collections;
32 using System.IO;
33 using System.Reflection;
34 using Microsoft.Build.BuildEngine;
35 using Microsoft.Build.Framework;
36 using Microsoft.Build.Utilities;
37 using Mono.XBuild.Framework;
39 namespace Mono.XBuild.CommandLine {
40 public class MainClass {
42 Parameters parameters;
43 string[] args;
44 string binPath;
45 string defaultSchema;
47 Engine engine;
48 Project project;
50 public static void Main (string[] args)
52 MainClass mc = new MainClass ();
53 mc.args = args;
54 mc.Execute ();
57 public MainClass ()
59 binPath = ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version20);
60 defaultSchema = Path.Combine (binPath, "Microsoft.Build.xsd");
61 parameters = new Parameters (binPath);
64 public void Execute ()
66 bool result = false;
68 try {
69 parameters.ParseArguments (args);
71 if (parameters.DisplayVersion)
72 ErrorUtilities.ShowVersion (false);
74 engine = new Engine (binPath);
76 engine.GlobalProperties = this.parameters.Properties;
78 if (!parameters.NoConsoleLogger) {
79 ConsoleLogger cl = new ConsoleLogger ();
80 cl.Parameters = parameters.ConsoleLoggerParameters;
81 cl.Verbosity = parameters.LoggerVerbosity;
82 engine.RegisterLogger (cl);
85 foreach (LoggerInfo li in parameters.Loggers) {
86 Assembly assembly;
87 if (li.InfoType == LoadInfoType.AssemblyFilename)
88 assembly = Assembly.LoadFrom (li.Filename);
89 else
90 assembly = Assembly.Load (li.AssemblyName);
91 ILogger logger = (ILogger)Activator.CreateInstance (assembly.GetType (li.ClassName));
92 logger.Parameters = li.Parameters;
93 engine.RegisterLogger (logger);
96 project = engine.CreateNewProject ();
98 if (parameters.Validate) {
99 if (parameters.ValidationSchema == null)
100 project.SchemaFile = defaultSchema;
101 else
102 project.SchemaFile = parameters.ValidationSchema;
105 string projectFile = parameters.ProjectFile;
106 if (projectFile.EndsWith (".sln"))
107 projectFile = GenerateSolutionProject (projectFile);
109 project.Load (projectFile);
111 result = engine.BuildProject (project, parameters.Targets, null);
114 catch (InvalidProjectFileException ipfe) {
115 ErrorUtilities.ReportError (0, ipfe.Message);
118 catch (InternalLoggerException ile) {
119 ErrorUtilities.ReportError (0, ile.Message);
122 catch (Exception) {
123 throw;
126 finally {
127 if (engine != null)
128 engine.UnregisterAllLoggers ();
130 Environment.Exit (result ? 0 : 1);
135 string GenerateSolutionProject (string solutionFile)
137 SolutionParser s = new SolutionParser ();
138 Project p = engine.CreateNewProject ();
139 s.ParseSolution (solutionFile, p);
140 string projectFile = solutionFile + ".proj";
141 p.Save (projectFile);
143 return projectFile;
148 #endif