Example #1
0
        /// <summary>
		/// Runs the compiler with specified options.
		/// </summary>
		/// <param name="args">Command line arguments.</param>
		/// <returns>Whether the compilation was successful.</returns>
		public bool Compile(List<string>/*!*/ args)
		{
			if (args == null)
				throw new ArgumentNullException("args");
			
			TextErrorSink errorSink = null;

			// processes arguments:
			try
			{
				try
				{
					commandLineParser.Parse(args);
				}
				finally
				{
					if (commandLineParser.Quiet)
					{
						output = errors = TextWriter.Null;
					}
					else if (commandLineParser.RedirectErrors)
					{
						output = errors = Console.Out;	
					}
					else
					{
						output = Console.Out;	
						errors = Console.Error;
					}

					errorSink = new TextErrorSink(errors);

					ShowLogo();

					if (commandLineParser.ShowHelp)
					{
						ShowHelp();
					}
					else
					{	
						DumpArguments(args);
					}	
				}
			}
			catch (InvalidCommandLineArgumentException e)
			{
				e.Report(errorSink);
				return false;
			}

			if (commandLineParser.ShowHelp)
				return true;
            
            // allow loading of all assemblies in /Bin directory by their FullName
            HandleAssemblies(Path.Combine(commandLineParser.Parameters.SourceRoot, "Bin"));            
			
            //
			ApplicationContext.DefineDefaultContext(false, true, false);
			ApplicationContext app_context = ApplicationContext.Default;

			CompilerConfiguration compiler_config;

			// loads entire configuration:
			try
			{
				if (commandLineParser.Parameters.ConfigPaths.Count == 0)
				{
					// Add config files for known targets
					switch (commandLineParser.Parameters.Target)
					{
						case ApplicationCompiler.Targets.Web:
							if (File.Exists("web.config"))
								commandLineParser.Parameters.ConfigPaths.Add(new FullPath("web.config"));
							break;
						case ApplicationCompiler.Targets.WinApp:
							if (File.Exists("app.config"))
								commandLineParser.Parameters.ConfigPaths.Add(new FullPath("app.config"));
							break;
					}
				}
				compiler_config = ApplicationCompiler.LoadConfiguration(app_context, 
					commandLineParser.Parameters.ConfigPaths, output);
					
				commandLineParser.Parameters.ApplyToConfiguration(compiler_config);
			}
			catch (ConfigurationErrorsException e)
			{
				if (commandLineParser.Verbose)
				{
					output.WriteLine(CoreResources.GetString("reading_configuration") + ":");
					output.WriteLine();

					if (!String.IsNullOrEmpty(e.Filename)) // Mono puts here null
					{
						output.WriteLine(FileSystemUtils.ReadFileLine(e.Filename, e.Line).Trim());
						output.WriteLine();
					}
				}
				
				errorSink.AddConfigurationError(e);
				return false;
			}

			// load referenced assemblies:
			try
			{
				try
				{
					app_context.AssemblyLoader.Load(commandLineParser.Parameters.References);
				}
				finally
				{
					if (commandLineParser.Verbose)
						DumpLoadedLibraries();
				}	
			}
			catch (ConfigurationErrorsException e)
			{
				errorSink.AddConfigurationError(e);
				return false;
			}
			
			output.WriteLine(CoreResources.GetString("performing_compilation") + " ...");

			try
			{
				CommandLineParser p = commandLineParser;
				Statistics.DrawGraph = p.DrawInclusionGraph;

				errorSink.DisabledGroups = compiler_config.Compiler.DisabledWarnings;
				errorSink.DisabledWarnings = compiler_config.Compiler.DisabledWarningNumbers;
                errorSink.TreatWarningsAsErrors = compiler_config.Compiler.TreatWarningsAsErrors;
			
				// initializes log:
				DebugUtils.ConsoleInitialize(Path.GetDirectoryName(p.Parameters.OutPath));

                new ApplicationCompiler().Compile(app_context, compiler_config, errorSink, p.Parameters);
			}
			catch (InvalidSourceException e)
			{
				e.Report(errorSink);
				return false;
			}
			catch (Exception e)
			{
				errorSink.AddInternalError(e);
				return false;
			}

            var errorscount = errorSink.ErrorCount + errorSink.FatalErrorCount;
            var warningcount = errorSink.WarningCount + errorSink.WarningAsErrorCount;
            
            output.WriteLine();
            output.WriteLine("Build complete -- {0} error{1}, {2} warning{3}.",
                errorscount, (errorscount == 1) ? "" : "s",
                warningcount, (warningcount == 1) ? "" : "s");

			return !errorSink.AnyError;
		}
Example #2
0
        /// <summary>
        /// Runs the compiler with specified options.
        /// </summary>
        /// <param name="args">Command line arguments.</param>
        /// <returns>Whether the compilation was successful.</returns>
        public bool Compile(List <string> /*!*/ args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            TextErrorSink errorSink = null;

            // processes arguments:
            try
            {
                try
                {
                    commandLineParser.Parse(args);
                }
                finally
                {
                    if (commandLineParser.Quiet)
                    {
                        output = errors = TextWriter.Null;
                    }
                    else if (commandLineParser.RedirectErrors)
                    {
                        output = errors = Console.Out;
                    }
                    else
                    {
                        output = Console.Out;
                        errors = Console.Error;
                    }

                    errorSink = new TextErrorSink(errors);

                    ShowLogo();

                    if (commandLineParser.ShowHelp)
                    {
                        ShowHelp();
                    }
                    else
                    {
                        DumpArguments(args);
                    }
                }
            }
            catch (InvalidCommandLineArgumentException e)
            {
                e.Report(errorSink);
                return(false);
            }

            if (commandLineParser.ShowHelp)
            {
                return(true);
            }

            // allow loading of all assemblies in /Bin directory by their FullName
            HandleAssemblies(Path.Combine(commandLineParser.Parameters.SourceRoot, "Bin"));

            //
            ApplicationContext.DefineDefaultContext(false, true, false);
            ApplicationContext app_context = ApplicationContext.Default;

            CompilerConfiguration compiler_config;

            // loads entire configuration:
            try
            {
                if (commandLineParser.Parameters.ConfigPaths.Count == 0)
                {
                    // Add config files for known targets
                    switch (commandLineParser.Parameters.Target)
                    {
                    case ApplicationCompiler.Targets.Web:
                        if (File.Exists("web.config"))
                        {
                            commandLineParser.Parameters.ConfigPaths.Add(new FullPath("web.config"));
                        }
                        break;

                    case ApplicationCompiler.Targets.WinApp:
                        if (File.Exists("app.config"))
                        {
                            commandLineParser.Parameters.ConfigPaths.Add(new FullPath("app.config"));
                        }
                        break;
                    }
                }
                compiler_config = ApplicationCompiler.LoadConfiguration(app_context,
                                                                        commandLineParser.Parameters.ConfigPaths, output);

                commandLineParser.Parameters.ApplyToConfiguration(compiler_config);
            }
            catch (ConfigurationErrorsException e)
            {
                if (commandLineParser.Verbose)
                {
                    output.WriteLine(CoreResources.GetString("reading_configuration") + ":");
                    output.WriteLine();

                    if (!String.IsNullOrEmpty(e.Filename))                     // Mono puts here null
                    {
                        output.WriteLine(FileSystemUtils.ReadFileLine(e.Filename, e.Line).Trim());
                        output.WriteLine();
                    }
                }

                errorSink.AddConfigurationError(e);
                return(false);
            }

            // load referenced assemblies:
            try
            {
                try
                {
                    app_context.AssemblyLoader.Load(commandLineParser.Parameters.References);
                }
                finally
                {
                    if (commandLineParser.Verbose)
                    {
                        DumpLoadedLibraries();
                    }
                }
            }
            catch (ConfigurationErrorsException e)
            {
                errorSink.AddConfigurationError(e);
                return(false);
            }

            output.WriteLine(CoreResources.GetString("performing_compilation") + " ...");

            try
            {
                CommandLineParser p = commandLineParser;
                Statistics.DrawGraph = p.DrawInclusionGraph;

                errorSink.DisabledGroups        = compiler_config.Compiler.DisabledWarnings;
                errorSink.DisabledWarnings      = compiler_config.Compiler.DisabledWarningNumbers;
                errorSink.TreatWarningsAsErrors = compiler_config.Compiler.TreatWarningsAsErrors;

                // initializes log:
                DebugUtils.ConsoleInitialize(Path.GetDirectoryName(p.Parameters.OutPath));

                new ApplicationCompiler().Compile(app_context, compiler_config, errorSink, p.Parameters);
            }
            catch (InvalidSourceException e)
            {
                e.Report(errorSink);
                return(false);
            }
            catch (Exception e)
            {
                errorSink.AddInternalError(e);
                return(false);
            }

            var errorscount  = errorSink.ErrorCount + errorSink.FatalErrorCount;
            var warningcount = errorSink.WarningCount + errorSink.WarningAsErrorCount;

            output.WriteLine();
            output.WriteLine("Build complete -- {0} error{1}, {2} warning{3}.",
                             errorscount, (errorscount == 1) ? "" : "s",
                             warningcount, (warningcount == 1) ? "" : "s");

            return(!errorSink.AnyError);
        }
Example #3
0
        public static bool Compile(
            IList<string> units,
            string assemblyName,
            bool debug)
        {
            List<string> commands = new List<string>(units.Count * 2);
            commands.Add("/encoding:UTF-8");
            commands.Add("/pure");
            commands.Add("/target:dll");
            commands.Add("/out:" + assemblyName);
            if (debug)
            {
                commands.Add("/debug");
            }

            foreach (string filename in units)
            {
                commands.Add(filename);
            }

            CommandLineParser commandLineParser = new CommandLineParser();
            commandLineParser.Parse(commands);

            TextWriter output = Console.Out;
            TextErrorSink errorSink = new TextErrorSink(Console.Error);

            ApplicationContext.DefineDefaultContext(false, true, false);
            ApplicationContext appContext = ApplicationContext.Default;

            CompilerConfiguration compilerConfig = ApplicationCompiler.LoadConfiguration(
                                                            appContext,
                                                            commandLineParser.Parameters.ConfigPaths,
                                                            output);

            commandLineParser.Parameters.ApplyToConfiguration(compilerConfig);

            try
            {
                new ApplicationCompiler().Compile(appContext, compilerConfig, errorSink, commandLineParser.Parameters);
            }
            catch (InvalidSourceException ex)
            {
                ex.Report(errorSink);
                return false;
            }
            catch (Exception ex)
            {
                errorSink.AddInternalError(ex);
                return false;
            }

            if (errorSink.ErrorCount + errorSink.FatalErrorCount + errorSink.WarningCount > 0)
            {
                output.WriteLine();
                output.WriteLine(
                    "Build complete -- {0} error{1}, {2} warning{3}.",
                    errorSink.ErrorCount + errorSink.FatalErrorCount,
                    (errorSink.ErrorCount + errorSink.FatalErrorCount == 1) ? string.Empty : "s",
                    errorSink.WarningCount,
                    (errorSink.WarningCount == 1) ? string.Empty : "s");
            }

            return !errorSink.AnyError;
        }