Browse Source

Ensured the collected Windows SDK include dirs exist.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/621/head
Dimitar Dobrev 10 years ago
parent
commit
1223e41e3a
  1. 54
      src/Core/Toolchains/MSVCToolchain.cs

54
src/Core/Toolchains/MSVCToolchain.cs

@ -158,33 +158,17 @@ namespace CppSharp
kitsRootKey = match.Groups[0].Value; kitsRootKey = match.Groups[0].Value;
} }
List<ToolchainVersion> windowSdks; List<ToolchainVersion> windowsSdks;
GetWindowsSdks(out windowSdks); GetWindowsSdks(out windowsSdks);
var windowSdk = windowSdks.Find(version => (int) Math.Floor(version.Version) == windowsSdkMajorVer);
if (windowSdk.Directory == null)
windowSdk = windowSdks.Last();
var windowSdkDir = windowSdk.Directory;
// Older Visual Studio versions provide their own Windows SDK. // Older Visual Studio versions provide their own Windows SDK.
if (windowSdks.Count == 0) if (windowsSdks.Count == 0)
{ {
includes.Add(Path.Combine(vsDir, @"\VC\PlatformSDK\Include")); includes.Add(Path.Combine(vsDir, @"\VC\PlatformSDK\Include"));
} }
else else
{ {
if (windowsSdkMajorVer >= 8) includes.AddRange(GetIncludeDirsFromWindowsSdks(windowsSdkMajorVer, windowsSdks));
{
includes.Add(Path.Combine(windowSdkDir, @"include\shared"));
includes.Add(Path.Combine(windowSdkDir, @"include\um"));
includes.Add(Path.Combine(windowSdkDir, @"include\winrt"));
}
else
{
includes.Add(Path.Combine(windowSdkDir, "include"));
}
} }
List<ToolchainVersion> windowsKitsSdks; List<ToolchainVersion> windowsKitsSdks;
@ -200,6 +184,36 @@ namespace CppSharp
return includes; return includes;
} }
private static IEnumerable<string> GetIncludeDirsFromWindowsSdks(
int windowsSdkMajorVer, List<ToolchainVersion> windowsSdks)
{
var includes = new List<string>();
var majorWindowsSdk = windowsSdks.Find(
version => (int) Math.Floor(version.Version) == windowsSdkMajorVer);
var windowsSdkDirs = majorWindowsSdk.Directory != null ?
new[] { majorWindowsSdk.Directory } :
windowsSdks.Select(w => w.Directory).Reverse();
foreach (var windowsSdkDir in windowsSdkDirs)
{
if (windowsSdkMajorVer >= 8)
{
var shared = Path.Combine(windowsSdkDir, "include", "shared");
var um = Path.Combine(windowsSdkDir, "include", "um");
var winrt = Path.Combine(windowsSdkDir, "include", "winrt");
if (Directory.Exists(shared) && Directory.Exists(um) &&
Directory.Exists(winrt))
return new[] { shared, um, winrt };
}
else
{
var include = Path.Combine(windowsSdkDir, "include");
if (Directory.Exists(include))
return new[] { include };
}
}
return new string[0];
}
private static IEnumerable<string> CollectUniversalCRuntimeIncludeDirs( private static IEnumerable<string> CollectUniversalCRuntimeIncludeDirs(
string vsDir, ToolchainVersion windowsKitSdk, int windowsSdkMajorVer) string vsDir, ToolchainVersion windowsKitSdk, int windowsSdkMajorVer)
{ {

Loading…
Cancel
Save