[Python-checkins] bpo-39930: Ensure vcruntime140.dll is included in all Windows packages (GH-18918)
Miss Islington (bot)
webhook-mailer at python.org
Wed Mar 11 07:38:23 EDT 2020
https://github.com/python/cpython/commit/d01c5507e5f9bd5072d94f007d29b37f41c6e6b5
commit: d01c5507e5f9bd5072d94f007d29b37f41c6e6b5
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2020-03-11T04:38:18-07:00
summary:
bpo-39930: Ensure vcruntime140.dll is included in all Windows packages (GH-18918)
Also adds GitHub CI test for Windows installer changes
(cherry picked from commit 2dd41740c97bd77695ddcc590caa7f53e76dc35a)
Co-authored-by: Steve Dower <steve.dower at python.org>
files:
A .github/workflows/build_msi.yml
A Misc/NEWS.d/next/Windows/2020-03-11-10-15-56.bpo-39930.LGHw1j.rst
M PCbuild/pyproject.props
M PCbuild/pythoncore.vcxproj
M Tools/msi/exe/exe.wixproj
M Tools/msi/exe/exe_files.wxs
diff --git a/.github/workflows/build_msi.yml b/.github/workflows/build_msi.yml
new file mode 100644
index 0000000000000..e9ecf54727562
--- /dev/null
+++ b/.github/workflows/build_msi.yml
@@ -0,0 +1,34 @@
+name: TestsMSI
+
+on:
+ push:
+ branches:
+ - master
+ - 3.8
+ - 3.7
+ paths:
+ - 'Tools/msi/**'
+ pull_request:
+ branches:
+ - master
+ - 3.8
+ - 3.7
+ paths:
+ - 'Tools/msi/**'
+
+jobs:
+ build_win32:
+ name: 'Windows (x86) Installer'
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout at v1
+ - name: Build CPython installer
+ run: .\Tools\msi\build.bat -x86
+
+ build_win_amd64:
+ name: 'Windows (x64) Installer'
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout at v1
+ - name: Build CPython installer
+ run: .\Tools\msi\build.bat -x64
diff --git a/Misc/NEWS.d/next/Windows/2020-03-11-10-15-56.bpo-39930.LGHw1j.rst b/Misc/NEWS.d/next/Windows/2020-03-11-10-15-56.bpo-39930.LGHw1j.rst
new file mode 100644
index 0000000000000..c3011897b6dc8
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2020-03-11-10-15-56.bpo-39930.LGHw1j.rst
@@ -0,0 +1,2 @@
+Ensures the required :file:`vcruntime140.dll` is included in install
+packages.
diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props
index 7c0f50be9ea8e..80221333bee6e 100644
--- a/PCbuild/pyproject.props
+++ b/PCbuild/pyproject.props
@@ -200,4 +200,25 @@ public override bool Execute() {
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
<Exec Command='$(_SignCommand) "$(TargetPath)" || $(_SignCommand) "$(TargetPath)" || $(_SignCommand) "$(TargetPath)"' ContinueOnError="false" />
</Target>
+
+
+ <Target Name="FindVCRuntime" Returns="VCRuntimeDLL">
+ <PropertyGroup Condition="$(PlatformToolset) != 'v140'">
+ <VCRedistDir>$(VCInstallDir)\Redist\MSVC\$(VCToolsRedistVersion)\</VCRedistDir>
+ <VCRedistDir Condition="$(Platform) == 'Win32'">$(VCRedistDir)x86\</VCRedistDir>
+ <VCRedistDir Condition="$(Platform) != 'Win32'">$(VCRedistDir)$(Platform)\</VCRedistDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="$(PlatformToolset) == 'v140'">
+ <VCRedistDir>$(VCInstallDir)\redist\</VCRedistDir>
+ <VCRedistDir Condition="$(Platform) == 'Win32'">$(VCRedistDir)x86\</VCRedistDir>
+ <VCRedistDir Condition="$(Platform) != 'Win32'">$(VCRedistDir)$(Platform)\</VCRedistDir>
+ </PropertyGroup>
+
+ <ItemGroup Condition="$(VCInstallDir) != ''">
+ <VCRuntimeDLL Include="$(VCRedistDir)\Microsoft.VC*.CRT\vcruntime*.dll" />
+ </ItemGroup>
+
+ <Error Text="vcruntime14*.dll not found under $(VCInstallDir)" Condition="@(VCRuntimeDLL) == ''" />
+ <Message Text="VCRuntimeDLL: @(VCRuntimeDLL)" Importance="high" />
+ </Target>
</Project>
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index bd16c1e070bc2..0666b90f66cc9 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -519,15 +519,7 @@
<Warning Text="Not including zlib is not a supported configuration." />
</Target>
- <PropertyGroup>
- <VCRedistDir>$(VCInstallDir)\Redist\MSVC\$(VCToolsRedistVersion)\</VCRedistDir>
- <VCRedistDir Condition="$(Platform) == 'Win32'">$(VCRedistDir)x86\</VCRedistDir>
- <VCRedistDir Condition="$(Platform) != 'Win32'">$(VCRedistDir)$(Platform)\</VCRedistDir>
- </PropertyGroup>
- <ItemGroup Condition="$(VCInstallDir) != ''">
- <VCRuntimeDLL Include="$(VCRedistDir)\**\vcruntime*.dll" />
- </ItemGroup>
- <Target Name="_CopyVCRuntime" AfterTargets="Build" Inputs="@(VCRuntimeDLL)" Outputs="$(OutDir)%(Filename)%(Extension)">
+ <Target Name="_CopyVCRuntime" AfterTargets="Build" Inputs="@(VCRuntimeDLL)" Outputs="$(OutDir)%(Filename)%(Extension)" DependsOnTargets="FindVCRuntime">
<!-- bpo-38597: When we switch to another VCRuntime DLL, include vcruntime140.dll as well -->
<Warning Text="A copy of vcruntime140.dll is also required" Condition="!$(VCToolsRedistVersion.StartsWith(`14.`))" />
<Copy SourceFiles="%(VCRuntimeDLL.FullPath)" DestinationFolder="$(OutDir)" />
diff --git a/Tools/msi/exe/exe.wixproj b/Tools/msi/exe/exe.wixproj
index 326766bf2d473..be44f442f7c9d 100644
--- a/Tools/msi/exe/exe.wixproj
+++ b/Tools/msi/exe/exe.wixproj
@@ -11,6 +11,9 @@
<SuppressICEs>ICE43</SuppressICEs>
</PropertyGroup>
<Import Project="..\msi.props" />
+ <PropertyGroup Condition="exists('$(BuildPath)vcruntime140_1.dll')">
+ <DefineConstants>$(DefineConstants);Include_Vcruntime140_1_dll=1</DefineConstants>
+ </PropertyGroup>
<ItemGroup>
<Compile Include="exe.wxs" />
<Compile Include="exe_files.wxs" />
diff --git a/Tools/msi/exe/exe_files.wxs b/Tools/msi/exe/exe_files.wxs
index 483d06c65b2e5..15bf6a06634bf 100644
--- a/Tools/msi/exe/exe_files.wxs
+++ b/Tools/msi/exe/exe_files.wxs
@@ -30,8 +30,13 @@
</RegistryKey>
</Component>
<Component Id="vcruntime140.dll" Directory="InstallDirectory" Guid="*">
- <File Name="vcruntime140.dll" Source="!(bindpath.redist)vcruntime140.dll" KeyPath="yes" />
+ <File Name="vcruntime140.dll" Source="vcruntime140.dll" KeyPath="yes" />
</Component>
+<?ifdef Include_Vcruntime140_1_dll ?>
+ <Component Id="vcruntime140_1.dll" Directory="InstallDirectory" Guid="*">
+ <File Name="vcruntime140_1.dll" Source="vcruntime140_1.dll" KeyPath="yes" />
+ </Component>
+<?endif ?>
</ComponentGroup>
</Fragment>
More information about the Python-checkins
mailing list