/// <summary> /// When overridden in a derived class, executes the task. /// </summary> /// <returns> true if the task successfully executed; otherwise, false. </returns> public override bool Execute() { Called = true; LastInstance = this; log("start dsl"); if (Lang.IsEmpty()) { Log.LogWarning("no DSL defined - skip dsl"); return(true); } log("DSL Lang: {0}", Lang); log("DSL Type: {0}", DslProjectType); log("DSL Root: {0}", DslDir); log("OutCode Dir: {0}", OutputCodeDir); log("PreprocessObly: {0}", Preprocess); if (TraceOnly) { log("skip because traceonly mode choosed"); return(true); } var proj = new DslProject { LangName = Lang, ProjectType = DslProjectType, NativeCodeDirectory = OutputCodeDir, PreprocessOnly = Preprocess, DslDirectory = DslDir }; foreach (var src in Sources) { proj.FileSources.Add(src.GetMetadata("FullPath")); } var provider = new XsltBasedDslProvider(); var result = provider.Run(proj); foreach (var srcfile in result.LoadedXmlSources) { log("Src: " + srcfile.Key); } if (Preprocess) { foreach (var generated in result.GeneratedNativeCode) { log("Generated: " + generated.Key); } } else { log("Compiled: " + result.GetProductionFileName()); } return(true); }
/// <summary> /// Generates DSL project definition using given parameters /// </summary> /// <param name="args"> </param> /// <returns> </returns> public DslProject CreateProject(DslBuilderArgs args) { args.SetupDefaults(); var result = new DslProject(); result.ResultName = Path.GetFileNameWithoutExtension(args.ProjectName); result.NativeCodeDirectory = args.OutCodeDirectory; result.OutputDirectory = args.OutDirectory; result.ReferenceDirectory = args.ReferenceDirectory; result.RootDirectory = args.ProjectName; var projdeffile = Path.Combine(args.ProjectName, "proj.def"); if (File.Exists(projdeffile)) { var projdef = Application.Current.Bxl.Parse(File.ReadAllText(projdeffile), projdeffile); var e = projdef.Element("name"); if (null != e) { result.ResultName = e.Describe().Name; } e = projdef.Element("lang"); if (null != e) { result.LangName = e.Describe().Name; } e = projdef.Element("type"); if (null != e) { result.ProjectType = e.Describe().Name.To <DslProjectType>(); } e = projdef.Element("options"); if (null != e) { result.CompilerOptions = e.Describe().Name; } foreach (var src in projdef.Elements("source")) { result.FileSources.Add(src.Describe().Name); } } if (args.DslLang.IsNotEmpty()) { result.LangName = args.DslLang; } if (args.ProjectType.IsNotEmpty()) { result.ProjectType = args.ProjectType.To <DslProjectType>(); } if (0 == result.FileSources.Count) { var files = Directory.GetFiles(result.RootDirectory, "*.bxl", SearchOption.AllDirectories); foreach (var file in files) { result.FileSources.Add(file); } } if (args.CompilerOptions.IsNotEmpty()) { result.CompilerOptions += "|" + args.CompilerOptions; } if (result.LangName.IsEmpty()) { throw new QorpentException("cannot evaluate or fine language name for this project"); } return(result); }
/// <summary> /// When overridden in a derived class, executes the task. /// </summary> /// <returns> true if the task successfully executed; otherwise, false. </returns> public override bool Execute() { Called = true; LastInstance = this; log("start dsl"); if (Lang.IsEmpty()) { Log.LogWarning("no DSL defined - skip dsl"); return true; } log("DSL Lang: {0}", Lang); log("DSL Type: {0}", DslProjectType); log("DSL Root: {0}", DslDir); log("OutCode Dir: {0}", OutputCodeDir); log("PreprocessObly: {0}", Preprocess); if (TraceOnly) { log("skip because traceonly mode choosed"); return true; } var proj = new DslProject { LangName = Lang, ProjectType = DslProjectType, NativeCodeDirectory = OutputCodeDir, PreprocessOnly = Preprocess, DslDirectory = DslDir }; foreach (var src in Sources) { proj.FileSources.Add(src.GetMetadata("FullPath")); } var provider = new XsltBasedDslProvider(); var result = provider.Run(proj); foreach (var srcfile in result.LoadedXmlSources) { log("Src: " + srcfile.Key); } if (Preprocess) { foreach (var generated in result.GeneratedNativeCode) { log("Generated: " + generated.Key); } } else { log("Compiled: " + result.GetProductionFileName()); } return true; }