static public List <string> GetForcedIncludeFiles(IVCProjectWrapper project, IVCConfigurationWrapper vcProjectConfiguration, IPathResolver pathResolver) { Logging.Logging.LogInfo("Attempting to retrieve Forced Include Files for project '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.GetName()) + "'"); List <string> forcedIncludeFiles = new List <string>(); if (vcProjectConfiguration != null && vcProjectConfiguration.isValid()) { if (vcProjectConfiguration.GetCLCompilerTool() != null && vcProjectConfiguration.GetCLCompilerTool().isValid()) { forcedIncludeFiles = vcProjectConfiguration.GetCLCompilerTool().GetForcedIncludeFiles() .Select(x => x.Replace("\\", "/")) // backslashes would cause some string-escaping hassles... .Where(x => !string.IsNullOrWhiteSpace(x)) .Distinct() .ToList(); } else if (vcProjectConfiguration.GetNMakeTool() != null && vcProjectConfiguration.GetNMakeTool().isValid()) { forcedIncludeFiles = vcProjectConfiguration.GetNMakeTool().GetForcedIncludes() .Select(x => x.Replace("\\", "/")) // backslashes would cause some string-escaping hassles... .Where(x => !string.IsNullOrWhiteSpace(x)) .Distinct() .ToList(); } } Logging.Logging.LogInfo("Found " + forcedIncludeFiles.Count.ToString() + " distinct forced include files."); return(forcedIncludeFiles); }
static public List <string> GetProjectIncludeDirectories(IVCProjectWrapper project, IVCConfigurationWrapper vcProjectConfig, IPathResolver pathResolver) { // get additional include directories // source: http://www.mztools.com/articles/2014/MZ2014005.aspx Logging.Logging.LogInfo("Attempting to retrieve project Include Directories for project '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.GetName()) + "'"); List <string> includeDirectories = new List <string>(); if (vcProjectConfig != null && vcProjectConfig.isValid()) { if (vcProjectConfig.GetCLCompilerTool() != null && vcProjectConfig.GetCLCompilerTool().isValid()) { includeDirectories.AddRange(GetIncludeDirectories(vcProjectConfig.GetCLCompilerTool())); } else if (vcProjectConfig.GetNMakeTool() != null && vcProjectConfig.GetNMakeTool().isValid()) { includeDirectories.AddRange(GetIncludeDirectories(vcProjectConfig.GetNMakeTool())); } } else { Logging.Logging.LogWarning("Could not retrieve Project Configuration. No include directories could be retrieved."); return(new List <string>()); } Logging.Logging.LogInfo("Attempting to clean up."); includeDirectories = CleanIncludeDirectories(project, pathResolver, includeDirectories); Logging.Logging.LogInfo("Found " + includeDirectories.Count.ToString() + " distinct project include directories."); return(includeDirectories); }
static public List <string> GetSystemIncludeDirectories(IVCProjectWrapper project, IVCConfigurationWrapper vcProjectConfig, IPathResolver pathResolver) { Logging.Logging.LogInfo("Attempting to retrieve system Include Directories for project '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.GetName()) + "'"); List <string> includeDirectories = new List <string>(); try { IVCPlatformWrapper platform = vcProjectConfig.GetPlatform(); if (platform != null && platform.isValid()) { foreach (string directory in platform.GetIncludeDirectories()) { includeDirectories.AddRange(pathResolver.ResolveVsMacroInPath(directory, vcProjectConfig)); } } } catch (Exception e) { Logging.Logging.LogError("Failed to retrieve platform include directories: " + e.Message); return(new List <string>()); } Logging.Logging.LogInfo("Attempting to clean up."); includeDirectories = CleanIncludeDirectories(project, pathResolver, includeDirectories); Logging.Logging.LogInfo("Found " + includeDirectories.Count.ToString() + " distinct system include directories."); return(includeDirectories); }
static private List <string> CleanIncludeDirectories(IVCProjectWrapper project, IPathResolver pathResolver, List <string> includeDirectories) { return(includeDirectories .Select(x => x.Replace("\\\"", "")) .Select(x => x.Replace("\"", "")) .Select(x => pathResolver.GetAsAbsoluteCanonicalPath(x, project)) .Select(x => x.Replace("\\", "/")) // backslashes would cause some string-escaping hassles... .Where(x => !string.IsNullOrWhiteSpace(x)) .Distinct() .ToList()); }