diff --git a/.github/appveyor.yml b/.github/appveyor.yml
index 0936469370e..96674ce84d8 100644
--- a/.github/appveyor.yml
+++ b/.github/appveyor.yml
@@ -14,6 +14,9 @@ test_script:
- cmd: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
environment:
HOST_PYTHON: C:\Python36\python.exe
+image:
+- Visual Studio 2015
+- Visual Studio 2017
# Only trigger AppVeyor if actual code or its configuration changes
only_commits:
diff --git a/Doc/make.bat b/Doc/make.bat
index b9e8a759c51..0472a3de82f 100644
--- a/Doc/make.bat
+++ b/Doc/make.bat
@@ -6,18 +6,29 @@ pushd %~dp0
set this=%~n0
call ..\PCBuild\find_python.bat %PYTHON%
-if "%SPHINXBUILD%" EQU "" if "%PYTHON%" NEQ "" (
- set SPHINXBUILD=%PYTHON%\..\Scripts\sphinx-build.exe
- rem Cannot use %SPHINXBUILD% in the same block where we set it
- if not exist "%PYTHON%\..\Scripts\sphinx-build.exe" (
+if not defined SPHINXBUILD if defined PYTHON (
+ %PYTHON% -c "import sphinx" > nul 2> nul
+ if errorlevel 1 (
echo Installing sphinx with %PYTHON%
- "%PYTHON%" -m pip install sphinx
+ %PYTHON% -m pip install sphinx
if errorlevel 1 exit /B
)
+ set SPHINXBUILD=%PYTHON% -c "import sphinx, sys; sys.argv[0] = 'sphinx-build'; sphinx.main()"
)
-if "%PYTHON%" EQU "" set PYTHON=py
-if "%SPHINXBUILD%" EQU "" set SPHINXBUILD=sphinx-build
+if not defined BLURB if defined PYTHON (
+ %PYTHON% -c "import blurb" > nul 2> nul
+ if errorlevel 1 (
+ echo Installing blurb with %PYTHON%
+ %PYTHON% -m pip install blurb
+ if errorlevel 1 exit /B
+ )
+ set BLURB=%PYTHON% -m blurb
+)
+
+if not defined PYTHON set PYTHON=py
+if not defined SPHINXBUILD set SPHINXBUILD=sphinx-build
+if not defined BLURB set BLURB=blurb
if "%1" NEQ "htmlhelp" goto :skiphhcsearch
if exist "%HTMLHELP%" goto :skiphhcsearch
@@ -96,6 +107,19 @@ echo.be passed by setting the SPHINXOPTS environment variable.
goto end
:build
+if exist ..\Misc\NEWS (
+ echo.Copying Misc\NEWS to build\NEWS
+ copy ..\Misc\NEWS build\NEWS > nul
+) else if exist ..\Misc\NEWS.D (
+ if defined BLURB (
+ echo.Merging Misc/NEWS with %BLURB%
+ %BLURB% merge -f build\NEWS
+ ) else (
+ echo.No Misc/NEWS file and Blurb is not available.
+ exit /B 1
+ )
+)
+
if NOT "%PAPER%" == "" (
set SPHINXOPTS=-D latex_elements.papersize=%PAPER% %SPHINXOPTS%
)
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
index d3e1d3af22c..6309c3e248c 100644
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -318,26 +318,30 @@ class bdist_wininst(Command):
# string compares seem wrong, but are what sysconfig.py itself uses
if self.target_version and self.target_version < cur_version:
if self.target_version < "2.4":
- bv = 6.0
+ bv = '6.0'
elif self.target_version == "2.4":
- bv = 7.1
+ bv = '7.1'
elif self.target_version == "2.5":
- bv = 8.0
+ bv = '8.0'
elif self.target_version <= "3.2":
- bv = 9.0
+ bv = '9.0'
elif self.target_version <= "3.4":
- bv = 10.0
+ bv = '10.0'
else:
- bv = 14.0
+ bv = '14.0'
else:
# for current version - use authoritative check.
try:
from msvcrt import CRT_ASSEMBLY_VERSION
except ImportError:
# cross-building, so assume the latest version
- bv = 14.0
+ bv = '14.0'
else:
- bv = float('.'.join(CRT_ASSEMBLY_VERSION.split('.', 2)[:2]))
+ bv = '.'.join(CRT_ASSEMBLY_VERSION.split('.', 2)[:2])
+ if bv == '14.11':
+ # v141 and v140 are binary compatible,
+ # so keep using the 14.0 stub.
+ bv = '14.0'
# wininst-x.y.exe is in the same directory as this file
@@ -353,7 +357,7 @@ class bdist_wininst(Command):
else:
sfix = ''
- filename = os.path.join(directory, "wininst-%.1f%s.exe" % (bv, sfix))
+ filename = os.path.join(directory, "wininst-%s%s.exe" % (bv, sfix))
f = open(filename, "rb")
try:
return f.read()
diff --git a/Misc/NEWS.d/next/Windows/2017-09-04-13-19-05.bpo-31340.MbkzLi.rst b/Misc/NEWS.d/next/Windows/2017-09-04-13-19-05.bpo-31340.MbkzLi.rst
new file mode 100644
index 00000000000..065596fcc85
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2017-09-04-13-19-05.bpo-31340.MbkzLi.rst
@@ -0,0 +1 @@
+Change to building with MSVC v141 (included with Visual Studio 2017)
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index 81e500d5544..2e6b0a94bb5 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -104,7 +104,7 @@ if "%kill%"=="true" call :Kill
if "%do_pgo%"=="true" (
set conf=PGInstrument
- call :Build
+ call :Build %1 %2 %3 %4 %5 %6 %7 %8 %9
del /s "%dir%\*.pgc"
del /s "%dir%\..\Lib\*.pyc"
echo on
diff --git a/PCbuild/find_msbuild.bat b/PCbuild/find_msbuild.bat
index 1877906e00a..2b7413fbcde 100644
--- a/PCbuild/find_msbuild.bat
+++ b/PCbuild/find_msbuild.bat
@@ -29,6 +29,14 @@
@where msbuild > "%TEMP%\msbuild.loc" 2> nul && set /P MSBUILD= < "%TEMP%\msbuild.loc" & del "%TEMP%\msbuild.loc"
@if exist "%MSBUILD%" set MSBUILD="%MSBUILD%" & (set _Py_MSBuild_Source=PATH) & goto :found
+@rem VS 2015 and earlier register MSBuild separately, so we can find it.
+@rem Prefer MSBuild 14.0 over MSBuild 15.0, since the latter may not be able to find a VC14 install.
+@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32 >nul 2>nul
+@if NOT ERRORLEVEL 1 @for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32') DO @(
+ @if "%%i"=="MSBuildToolsPath" @if exist "%%k\msbuild.exe" @(set MSBUILD="%%k\msbuild.exe")
+)
+@if exist %MSBUILD% (set _Py_MSBuild_Source=registry) & goto :found
+
@rem VS 2017 sets exactly one install as the "main" install, so we may find MSBuild in there.
@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32 >nul 2>nul
@if NOT ERRORLEVEL 1 @for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32') DO @(
@@ -36,13 +44,6 @@
)
@if exist %MSBUILD% (set _Py_MSBuild_Source=Visual Studio 2017 registry) & goto :found
-@rem VS 2015 and earlier register MSBuild separately, so we can find it.
-@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32 >nul 2>nul
-@if NOT ERRORLEVEL 1 @for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32') DO @(
- @if "%%i"=="MSBuildToolsPath" @if exist "%%k\msbuild.exe" @(set MSBUILD="%%k\msbuild.exe")
-)
-@if exist %MSBUILD% (set _Py_MSBuild_Source=registry) & goto :found
-
@exit /b 1
diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props
index 7012170e0c7..3d46a0fcba8 100644
--- a/PCbuild/pyproject.props
+++ b/PCbuild/pyproject.props
@@ -147,13 +147,28 @@ foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses
Targets="CleanAll" />
+
+
+ <_PGCFiles Include="$(OutDir)instrumented\$(TargetName)!*.pgc" />
+ <_PGDFile Include="$(OutDir)instrumented\$(TargetName).pgd" />
+ <_CopyFiles Include="@(_PGCFiles);@(_PGDFile)" Condition="Exists(%(FullPath))" />
+
+
+
+
+
+
- $(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot10)\bin\x86
+ $(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot10)\bin\$(DefaultWindowsSDKVersion)\x86
+ $(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot10)\bin\x86
$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot81)\bin\x86
$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot)\bin\x86
$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A@InstallationFolder)\Bin\
- <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /q /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"
- <_MakeCatCommand Condition="Exists($(SdkBinPath))">"$(SdkBinPath)\makecat.exe"
+ <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /q /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)" <_MakeCatCommand Condition="Exists($(SdkBinPath))">"$(SdkBinPath)\makecat.exe"
diff --git a/PCbuild/python.props b/PCbuild/python.props
index d6bfd0877e0..c26f642a953 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -10,6 +10,7 @@
We set BasePlatformToolset for ICC's benefit, it's otherwise ignored.
-->
+ v141
v140
v120
v110
@@ -39,6 +40,7 @@
$(BuildPath64)
$(PySourcePath)PCBuild\$(ArchName)\
$(BuildPath)\
+ $(BuildPath)instrumented\
$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals\`))
@@ -62,7 +64,24 @@
$(BuildPath)python$(PyDebugExt).exe
-
+
+
+
+ 10.0.15063.0
+ 10.0.15063.0
+ 10.0.14393.0
+ 10.0.14393.0
+ 10.0.10586.0
+ 10.0.10586.0
+ 10.0.10240.0
+ 10.0.10240.0
+
+