diff --git a/src/Core/Toolchains/MSVCToolchain.cs b/src/Core/Toolchains/MSVCToolchain.cs index 271e0aba..2ed75d36 100644 --- a/src/Core/Toolchains/MSVCToolchain.cs +++ b/src/Core/Toolchains/MSVCToolchain.cs @@ -80,8 +80,7 @@ namespace CppSharp VisualStudioVersion.Latest) { Console.WriteLine("\nInclude search path (VS: {0}):", vsVersion); - VisualStudioVersion foundVsVersion; - foreach (var include in GetSystemIncludes(vsVersion, out foundVsVersion)) + foreach (var include in GetSystemIncludes(vsVersion)) Console.WriteLine($"\t{include}"); } @@ -162,49 +161,41 @@ namespace CppSharp return windowsKitSdk; } - /// Gets the system include folders for the given Visual Studio version. - /// The version of Visual Studio to get - /// system includes from. - /// The found version of Visual Studio - /// system includes are actually got from. - public static List GetSystemIncludes(VisualStudioVersion wantedVsVersion, - out VisualStudioVersion foundVsVersion) - { - var vsSdk = GetVisualStudioSdk(wantedVsVersion, out foundVsVersion); - var vsDir = vsSdk.Directory; - if (Path.GetFileName(vsDir) == "IDE") - { - string secondToLastDirPath = Path.GetDirectoryName(vsDir); - if (Path.GetFileName(secondToLastDirPath) == "Common7") - vsDir = Path.GetDirectoryName(secondToLastDirPath); - } - return GetSystemIncludes(foundVsVersion, vsDir); - } - - private static ToolchainVersion GetVisualStudioSdk( - VisualStudioVersion wantedVsVersion, out VisualStudioVersion foundVsVersion) + public static VisualStudioVersion FindVSVersion(VisualStudioVersion vsVersion) { - if (wantedVsVersion != VisualStudioVersion.Latest) + if (vsVersion != VisualStudioVersion.Latest) { - var vsSdk = GetVSToolchain(wantedVsVersion); + var vsSdk = GetVSToolchain(vsVersion); if (vsSdk.IsValid) - { - foundVsVersion = wantedVsVersion; - return vsSdk; - } + return vsVersion; } // we don't know what "latest" is on a given machine // so start from the latest specified version and loop until a match is found for (var i = VisualStudioVersion.Latest - 1; i >= VisualStudioVersion.VS2012; i--) { - var vsSdk = GetVisualStudioSdk(i, out foundVsVersion); - if (vsSdk.IsValid) - return vsSdk; + vsVersion = FindVSVersion(i); + if (vsVersion != VisualStudioVersion.Latest) + return vsVersion; } - foundVsVersion = VisualStudioVersion.Latest; - return new ToolchainVersion(); + return VisualStudioVersion.Latest; + } + + /// Gets the system include folders for the given Visual Studio version. + /// The version of Visual Studio to get + /// system includes from. + public static List GetSystemIncludes(VisualStudioVersion vsVersion) + { + var vsSdk = GetVSToolchain(vsVersion); + var vsDir = vsSdk.Directory; + if (Path.GetFileName(vsDir) == "IDE") + { + string secondToLastDirPath = Path.GetDirectoryName(vsDir); + if (Path.GetFileName(secondToLastDirPath) == "Common7") + vsDir = Path.GetDirectoryName(secondToLastDirPath); + } + return GetSystemIncludes(vsVersion, vsDir); } private static void DumpSdks(string sku, IEnumerable sdks) diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs index 02af6163..19efa455 100644 --- a/src/Parser/ParserOptions.cs +++ b/src/Parser/ParserOptions.cs @@ -95,6 +95,7 @@ namespace CppSharp.Parser /// /// Sets up the parser options to work with the given Visual Studio toolchain. /// + /// The version of Visual Studio to look for. public void SetupMSVC(VisualStudioVersion vsVersion) { MicrosoftMode = true; @@ -102,15 +103,14 @@ namespace CppSharp.Parser NoStandardIncludes = true; Abi = CppAbi.Microsoft; - VisualStudioVersion foundVsVersion; - var includes = MSVCToolchain.GetSystemIncludes(vsVersion, out foundVsVersion); - foreach (var include in includes) + vsVersion = MSVCToolchain.FindVSVersion(vsVersion); + foreach (var include in MSVCToolchain.GetSystemIncludes(vsVersion)) AddSystemIncludeDirs(include); if (!LanguageVersion.HasValue) LanguageVersion = CppSharp.Parser.LanguageVersion.CPP14_GNU; - var clVersion = MSVCToolchain.GetCLVersion(foundVsVersion); + var clVersion = MSVCToolchain.GetCLVersion(vsVersion); ToolSetToUse = clVersion.Major * 10000000 + clVersion.Minor * 100000; AddArguments("-fms-extensions");