PrintOptions( System.Collections.Generic.IEnumerable <System.Type> optionTypes) { var options = new Core.Array <Core.ICommandLineArgument>(); foreach (var optType in optionTypes) { var arg = System.Activator.CreateInstance(optType) as Core.ICommandLineArgument; options.Add(arg); } foreach (var arg in options.OrderBy(key => key.LongName)) { if (arg is Core.ICustomHelpText) { Core.Log.Info("{0}: {1}", (arg as Core.ICustomHelpText).OptionHelp, arg.ContextHelp); } else { if (null == arg.ShortName) { Core.Log.Info("{0}: {1}", arg.LongName, arg.ContextHelp); } else { Core.Log.Info("{0} (or {1}): {2}", arg.LongName, arg.ShortName, arg.ContextHelp); } } Core.Log.Info(""); } }
Main( string[] args) { #if false // take control of Ctrl+C System.Console.CancelKeyPress += new System.ConsoleCancelEventHandler(HandleCancellation); #endif try { var totalTimeProfile = new Core.TimeProfile(Core.ETimingProfiles.TimedTotal); var processCommandLineProfile = new Core.TimeProfile(Core.ETimingProfiles.ProcessCommandLine); totalTimeProfile.StartProfile(); processCommandLineProfile.StartProfile(); var verbosityLevel = (Core.EVerboseLevel)Core.CommandLineProcessor.Evaluate(new Core.Options.VerbosityLevel()); switch (verbosityLevel) { case Core.EVerboseLevel.None: case Core.EVerboseLevel.Info: case Core.EVerboseLevel.Detail: case Core.EVerboseLevel.Full: Core.Graph.Instance.VerbosityLevel = verbosityLevel; break; default: throw new Core.Exception("Unrecognized verbosity level, {0}", verbosityLevel); } if (Core.CommandLineProcessor.Evaluate(new Core.Options.PrintHelp())) { CommandLineArgumentHelper.PrintHelp(); return; } if (Core.CommandLineProcessor.Evaluate(new Core.Options.PrintVersion())) { CommandLineArgumentHelper.PrintVersion(); return; } if (Core.CommandLineProcessor.Evaluate(new Core.Options.CreateDebugProject())) { DebugProject.Create(); return; } if (Core.CommandLineProcessor.Evaluate(new Core.Options.MakePackage())) { Core.PackageUtilities.MakePackage(); return; } if (Core.CommandLineProcessor.Evaluate(new Core.Options.AddDependentPackage())) { Core.PackageUtilities.AddDependentPackage(); return; } if (Core.CommandLineProcessor.Evaluate(new Core.Options.ShowDefinitionFile())) { Core.PackageUtilities.IdentifyAllPackages(allowDuplicates: true, enforceBamAssemblyVersions: false); Core.Graph.Instance.MasterPackage.Show(); return; } // configure Core.Graph.Instance.BuildRoot = Core.CommandLineProcessor.Evaluate(new Core.Options.BuildRoot()); Core.Graph.Instance.Mode = Core.CommandLineProcessor.Evaluate(new Core.Options.BuildMode()); if (null == Core.Graph.Instance.Mode) { throw new Core.Exception("No build mode specified"); } var configs = new Core.Array <Core.Environment>(); var requestedConfigs = Core.CommandLineProcessor.Evaluate(new Core.Options.BuildConfigurations()); if (0 == requestedConfigs.Count) { // default requestedConfigs.Add(new Core.StringArray("debug")); } foreach (var configOption in requestedConfigs) { foreach (var config in configOption) { var env = new Core.Environment(); env.Configuration = Core.Configuration.FromString(config); configs.Add(env); } } processCommandLineProfile.StopProfile(); Core.EntryPoint.Execute(configs); totalTimeProfile.StopProfile(); } catch (Core.Exception exception) { Core.Exception.DisplayException(exception); System.Environment.ExitCode = -1; } catch (System.Exception exception) { var message = new System.Text.StringBuilder(); message.AppendFormat("{0} not handled: {1}", exception.GetType().ToString(), exception.Message); message.AppendLine(); message.AppendLine(exception.StackTrace); Core.Log.ErrorMessage(message.ToString()); System.Environment.ExitCode = -2; } finally { if (Core.Graph.Instance.BuildEnvironments.Count > 0) { Core.Log.Info((0 == System.Environment.ExitCode) ? "\nBuild Succeeded" : "\nBuild Failed"); if (Core.CommandLineProcessor.Evaluate(new Core.Options.PrintStatistics())) { Core.Statistics.Display(); } Core.Log.DebugMessage("Exit code {0}", System.Environment.ExitCode); } } }