示例#1
0
        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;
	        }
        }
示例#2
0
        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);
            }
        }
示例#3
0
	    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;
	    }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }