Ejemplo n.º 1
0
        protected override bool Execute(ConfigFile config)
        {
            var cppHeaderGenerator = new CppHeaderGenerator(SharpGenLogger, OutputPath);

            var configsWithHeaders    = new HashSet <ConfigFile>(ConfigFile.IdComparer);
            var configsWithExtensions = new HashSet <ConfigFile>(ConfigFile.IdComparer);

            foreach (var cfg in config.ConfigFilesLoaded)
            {
                if (HeaderFiles.Any(item => item.GetMetadata("ConfigId") == cfg.Id))
                {
                    configsWithHeaders.Add(cfg);
                }

                if (ExtensionHeaders.Any(item => item.GetMetadata("ConfigId") == cfg.Id))
                {
                    configsWithExtensions.Add(cfg);
                }
            }

            var cppHeaderGenerationResult = cppHeaderGenerator.GenerateCppHeaders(config, configsWithHeaders, configsWithExtensions);

            var consumerConfig = new ConfigFile
            {
                Id            = "CppConsumerConfig",
                IncludeProlog = { cppHeaderGenerationResult.Prologue }
            };

            consumerConfig.Write(CppConsumerConfigCache.ItemSpec);

            var updatedConfigFiles = new List <ITaskItem>();

            foreach (var cfg in configsWithHeaders)
            {
                if (cppHeaderGenerationResult.UpdatedConfigs.Contains(cfg) && cfg.AbsoluteFilePath != null)
                {
                    var item = new TaskItem(cfg.AbsoluteFilePath);
                    item.SetMetadata("Id", cfg.Id);
                    updatedConfigFiles.Add(item);
                }
            }

            UpdatedConfigs = updatedConfigFiles.ToArray();

            return(!SharpGenLogger.HasErrors);
        }
Ejemplo n.º 2
0
        protected override bool Execute(ConfigFile config)
        {
            var updatedConfigs        = new HashSet <ConfigFile>(ConfigFile.IdComparer);
            var configsWithExtensions = new HashSet <ConfigFile>(ConfigFile.IdComparer);

            foreach (var cfg in config.ConfigFilesLoaded)
            {
                if (UpdatedConfigs.Any(updated => updated.GetMetadata("Id") == cfg.Id))
                {
                    updatedConfigs.Add(cfg);
                }

                if (ExtensionHeaders.Any(updated => updated.GetMetadata("ConfigId") == cfg.Id))
                {
                    configsWithExtensions.Add(cfg);
                }
            }

            var resolver = new IncludeDirectoryResolver(SharpGenLogger);

            resolver.Configure(config);

            var castXml = new CastXmlRunner(SharpGenLogger, resolver, CastXmlExecutablePath, CastXmlArguments)
            {
                OutputPath = OutputPath
            };

            var macroManager = new MacroManager(castXml);

            var cppExtensionGenerator = new CppExtensionHeaderGenerator(macroManager);

            var module = cppExtensionGenerator.GenerateExtensionHeaders(config, OutputPath, configsWithExtensions, updatedConfigs);

            ReferencedHeaders = macroManager.IncludedFiles.Select(file => new TaskItem(file)).ToArray <ITaskItem>();

            if (SharpGenLogger.HasErrors)
            {
                return(false);
            }

            module.Write(PartialCppModuleCache.ItemSpec);

            return(!SharpGenLogger.HasErrors);
        }