/// <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);
        }
Exemple #2
0
        /// <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;
		}