diff --git a/AUTHORS.md b/AUTHORS.md index 53108463e..27aae63f4 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -55,6 +55,7 @@ - ([@civilx64](https://github.com/civilx64)) - ([@GSPP](https://github.com/GSPP)) - ([@omnicognate](https://github.com/omnicognate)) +- ([@OneBlue](https://github.com/OneBlue)) - ([@rico-chet](https://github.com/rico-chet)) - ([@rmadsen-ks](https://github.com/rmadsen-ks)) - ([@stonebig](https://github.com/stonebig)) diff --git a/CHANGELOG.md b/CHANGELOG.md index d611b2656..e863fa3d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ This document follows the conventions laid out in [Keep a CHANGELOG][]. ## [unreleased][] +- Look for installed Windows 10 sdk's during installation instead of relying on specific versions. + ### Added - Added support for embedding python into dotnet core 2.0 (NetStandard 2.0) diff --git a/setup.py b/setup.py index 1b6f07ea6..f5690962a 100644 --- a/setup.py +++ b/setup.py @@ -39,7 +39,7 @@ kits_root = "SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots" kits_suffix = os.path.join("bin", ARCH) -WIN_SDK_KEYS = ( +WIN_SDK_KEYS = [ RegKey(sdk_name="Windows Kit 10.0", key=kits_root, value_name="KitsRoot10", suffix=os.path.join("bin", "10.0.16299.0", ARCH)), @@ -69,7 +69,7 @@ RegKey(sdk_name="Windows SDK 6.0A", key=sdks_root.format("6.0A\\WinSDK"), value_name="InstallationFolder", suffix=""), -) +] VS_KEYS = ( RegKey(sdk_name="MSBuild 15", key=vs_root.format("15.0"), @@ -145,6 +145,29 @@ def _update_xlat_devtools(): elif DEVTOOLS == "Mono": DEVTOOLS = "dotnet" +def _collect_installed_windows_kits_v10(winreg): + """Adds the installed Windows 10 kits to WIN_SDK_KEYS """ + global WIN_SDK_KEYS + installed_kits = [] + + with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, kits_root, 0, winreg.KEY_READ) as key: + i = 0 + while True: + try: + installed_kits.append(winreg.EnumKey(key, i)) + i += 1 + except WindowsError: + break + + def make_reg_key(version): + return RegKey(sdk_name="Windows Kit 10.0", key=kits_root, + value_name="KitsRoot10", suffix=os.path.join("bin", version, ARCH)) + + WIN_SDK_KEYS += [make_reg_key(e) for e in installed_kits if e.startswith('10.')] + + # Make sure this function won't be called again + _collect_installed_windows_kits_v10 = (lambda:None) + class BuildExtPythonnet(build_ext.build_ext): user_options = build_ext.build_ext.user_options + [ ('xplat', None, None) @@ -367,6 +390,8 @@ def _find_msbuild_tool(self, tool="msbuild.exe", use_windows_sdk=False): except ImportError: # PY3 import winreg + _collect_installed_windows_kits_v10(winreg) + keys_to_check = WIN_SDK_KEYS if use_windows_sdk else VS_KEYS hklm = winreg.HKEY_LOCAL_MACHINE for rkey in keys_to_check:
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: