static int Main(string[] args) { try{ if (null != args && 0 != args.Length){ var wdir = Array.IndexOf(args, "--workdir"); if (-1 != wdir){ Environment.CurrentDirectory = Path.GetFullPath(args[wdir + 1]); } } var builder = new BSharpBuilder(); var adict = new ConsoleArgumentHelper().ParseDictionary(args); if (adict.ContainsKey("debug")){ Debugger.Launch(); } var log = SetupLog(adict); var project = SetupProject(adict, log, builder); builder.Log = log; builder.Initialize(project); var resultContext = builder.Build(); WriteOutErrors(resultContext, log); return 0; } catch (Exception ex){ Console.Error.WriteLine(ex.ToString()); return -1; } }
static int Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; try{ if (null != args && 0 != args.Length) { var wdir = Array.IndexOf(args, "--workdir"); if (-1 != wdir) { Environment.CurrentDirectory = Path.GetFullPath(args[wdir + 1]); } } ConsoleMode = args.Contains("--console-mode"); var builder = new BSharpBuilder(); var adict = new ConsoleArgumentHelper().ParseDictionary(args); if (adict.ContainsKey("debug")) { Debugger.Launch(); } var log = SetupLog(adict); bool watch = args.Contains("--watch"); var project = DoBuild(adict, log, builder, watch); if (watch) { var laststamp = GetStamp(project); Console.WriteLine("----------------------------------------------"); while (true) { Thread.Sleep(2000); var newstamp = GetStamp(project); if (newstamp > laststamp) { project = DoBuild(adict, log, new BSharpBuilder(), true); laststamp = newstamp; Console.WriteLine("----------------------------------------------"); } } } return(0); } catch (Exception ex) { if (ConsoleMode) { Console.Error.WriteLine(new XElement("generic-error", ex.ToString()).ToString()); } else { Console.Error.WriteLine(ex.ToString()); } return(-1); } }
private static IBSharpProject SetupProject(IDictionary<string, string> adict, IUserLog log, BSharpBuilder builder) { var project = new BSharpProject {IsFullyQualifiedProject = true}; project.IsFullyQualifiedProject = true; if (adict.ContainsKey("project")) { project.ProjectName = adict["project"]; project.IsFullyQualifiedProject = false; }else if (adict.ContainsKey("arg1")) { project.ProjectName = adict["arg1"]; project.IsFullyQualifiedProject = false; } if (!project.OutputAttributes.HasFlag(BSharpBuilderOutputAttributes.IncludeWork)) { if (!adict.ContainsKey("noIncludeWork")) { project.OutputAttributes |= BSharpBuilderOutputAttributes.IncludeWork; } } if (adict.ContainsKey("out-layout")) { project.OutputAttributes = adict["out-layout"].To<BSharpBuilderOutputAttributes>(); } if (adict.ContainsKey("out")) { project.MainOutputDirectory = adict["out"]; } if (adict.ContainsKey("log")) { project.LogOutputDirectory = adict["log"]; } if (adict.ContainsKey("extension")) { project.OutputExtension = adict["extension"]; } if (adict.ContainsKey("root")) { project.RootDirectory = adict["root"]; } if (adict.ContainsKey("dot")) { project.GenerateGraph = adict["dot"].ToBool(); } if (adict.ContainsKey("include")) { project.Targets.Paths.RemoveTarget("*"); var parsed = ParseKeyValueEnumeration(adict["include"], ',', ':'); foreach (var el in parsed) { Console.WriteLine("Include: <" +el.Key+ "," + el.Value+">"); WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Include); } } if (adict.ContainsKey("exclude")) { var parsed = ParseKeyValueEnumeration(adict["exclude"], ',', ':'); foreach (var el in parsed) { Console.WriteLine("Exclude: <" + el.Key + "," + el.Value + ">"); WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Exclude); } } project.Log = log; foreach (var c in adict) { if (c.Key.StartsWith("set-")) { project.Conditions[c.Key.Substring(4)] = c.Value; log.Info("set option " + c.Key.Substring(4) + " = " + c.Value); } } log.Info("root dir = " + project.GetRootDirectory()); log.Info("out dir = " + project.GetOutputDirectory()); log.Info("log dir = " + project.GetLogDirectory()); return project; }
private static IBSharpProject SingleFileProject(string resolvePath, IDictionary <string, string> adict, IUserLog log, BSharpBuilder builder) { var result = new BSharpProject { IsFullyQualifiedProject = true, Log = log }; result.RootDirectory = Path.GetDirectoryName(resolvePath); result.Targets.Paths[resolvePath] = BSharpBuilderTargetType.Include; if (adict.ContainsKey("cls")) { result.Targets.Classes[adict["cls"]] = BSharpBuilderTargetType.Include; } return(result); }
private static IBSharpProject SetupProject(IDictionary <string, string> adict, IUserLog log, BSharpBuilder builder) { var project = new BSharpProject { IsFullyQualifiedProject = true }; project.IsFullyQualifiedProject = true; var filename = adict.resolvestr("arg1"); if (!string.IsNullOrWhiteSpace(filename) && filename.Contains(".")) { //direct file log.Info("Single file compiled"); project = (BSharpProject)SingleFileProject(EnvironmentInfo.ResolvePath(filename), adict, log, builder); } else { if (adict.ContainsKey("project")) { project.ProjectName = adict["project"]; project.IsFullyQualifiedProject = false; } else if (adict.ContainsKey("arg1")) { project.ProjectName = adict["arg1"]; project.IsFullyQualifiedProject = false; } } if (!project.OutputAttributes.HasFlag(BSharpBuilderOutputAttributes.IncludeWork)) { if (!adict.ContainsKey("noIncludeWork")) { project.OutputAttributes |= BSharpBuilderOutputAttributes.IncludeWork; } } if (adict.ContainsKey("out-layout")) { project.OutputAttributes = adict["out-layout"].To <BSharpBuilderOutputAttributes>(); } if (adict.ContainsKey("compile-extensions")) { project.DoCompileExtensions = adict["compile-extensions"].ToBool(); } if (adict.ContainsKey("out")) { project.MainOutputDirectory = adict["out"]; } if (adict.ContainsKey("log")) { project.LogOutputDirectory = adict["log"]; } if (adict.ContainsKey("extension")) { project.OutputExtension = adict["extension"]; } if (adict.ContainsKey("root")) { project.RootDirectory = adict["root"]; } if (adict.ContainsKey("dot")) { project.GenerateGraph = adict["dot"].ToBool(); } if (adict.ContainsKey("include")) { project.Targets.Paths.RemoveTarget("*"); var parsed = ParseKeyValueEnumeration(adict["include"], ',', ':'); foreach (var el in parsed) { Console.WriteLine("Include: <" + el.Key + "," + el.Value + ">"); WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Include); } } if (adict.ContainsKey("exclude")) { var parsed = ParseKeyValueEnumeration(adict["exclude"], ',', ':'); foreach (var el in parsed) { Console.WriteLine("Exclude: <" + el.Key + "," + el.Value + ">"); WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Exclude); } } project.Log = log; foreach (var c in adict) { if (c.Key.StartsWith("set-")) { project.Conditions[c.Key.Substring(4)] = c.Value; log.Info("set option " + c.Key.Substring(4) + " = " + c.Value); } } log.Info("root dir = " + project.GetRootDirectory()); log.Info("out dir = " + project.GetOutputDirectory()); log.Info("log dir = " + project.GetLogDirectory()); return(project); }
private static IBSharpProject DoBuild(IDictionary <string, string> adict, IUserLog log, BSharpBuilder builder, bool errorsafe = false) { var project = SetupProject(adict, log, builder); project.NoOutput = ConsoleMode; try { builder.Log = log; builder.Initialize(project); var resultContext = builder.Build(); if (ConsoleMode) { WriteOutConsoleMode(resultContext); } else { WriteOutErrors(resultContext, log); } } catch (Exception e) { if (errorsafe) { project.Log.Error("Error in cycle " + e, e); return(project); } throw; } return(project); }