]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-115119: Switch Windows build to mpdecimal external (GH-115182)
authorZachary Ware <zach@python.org>
Mon, 18 Mar 2024 17:07:25 +0000 (12:07 -0500)
committerGitHub <noreply@github.com>
Mon, 18 Mar 2024 17:07:25 +0000 (12:07 -0500)
This includes adding what should be a relatively temporary
`Modules/_decimal/windows/mpdecimal.h` shim to choose between `mpdecimal32vc.h`
or `mpdecimal64vc.h` based on which of `CONFIG_64` or `CONFIG_32` is defined.

Misc/NEWS.d/next/Windows/2024-02-08-14-48-15.gh-issue-115119.qMt32O.rst [new file with mode: 0644]
Misc/externals.spdx.json
Modules/_decimal/windows/mpdecimal.h [new file with mode: 0644]
PCbuild/_decimal.vcxproj
PCbuild/_decimal.vcxproj.filters
PCbuild/get_externals.bat
PCbuild/python.props

diff --git a/Misc/NEWS.d/next/Windows/2024-02-08-14-48-15.gh-issue-115119.qMt32O.rst b/Misc/NEWS.d/next/Windows/2024-02-08-14-48-15.gh-issue-115119.qMt32O.rst
new file mode 100644 (file)
index 0000000..f95fed1
--- /dev/null
@@ -0,0 +1,3 @@
+Switched from vendored ``libmpdecimal`` code to a separately-hosted external
+package in the ``cpython-source-deps`` repository when building the
+``_decimal`` module.
index 2acfccbb004d6b341bbb5d4124057c75bd52b655..6df6401835c6f10e3a15e8b7268626792db30670 100644 (file)
       "primaryPackagePurpose": "SOURCE",
       "versionInfo": "3.4.4"
     },
+    {
+      "SPDXID": "SPDXRef-PACKAGE-mpdecimal",
+      "checksums": [
+        {
+          "algorithm": "SHA256",
+          "checksumValue": "93118043651ffa33dcaaab445bae4f8929fca25d2d749079b78e97f220c3d8b1"
+        }
+      ],
+      "downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/mpdecimal-2.5.1.tar.gz",
+      "externalRefs": [
+        {
+          "referenceCategory": "SECURITY",
+          "referenceLocator": "cpe:2.3:a:bytereef:mpdecimal:2.5.1:*:*:*:*:*:*:*",
+          "referenceType": "cpe23Type"
+        }
+      ],
+      "licenseConcluded": "NOASSERTION",
+      "name": "mpdecimal",
+      "originator": "Organization: bytereef.org",
+      "primaryPackagePurpose": "SOURCE",
+      "versionInfo": "2.5.1"
+    },
     {
       "SPDXID": "SPDXRef-PACKAGE-openssl",
       "checksums": [
diff --git a/Modules/_decimal/windows/mpdecimal.h b/Modules/_decimal/windows/mpdecimal.h
new file mode 100644 (file)
index 0000000..77bc622
--- /dev/null
@@ -0,0 +1,17 @@
+/* Windows mpdecimal.h shim
+ *
+ * Generally, the mpdecimal library build will copy the correct header into
+ * place named "mpdecimal.h", but since we're building it ourselves directly
+ * into _decimal.pyd, we need to pick the right one.
+ *
+ * */
+
+#if defined(_MSC_VER)
+  #if defined(CONFIG_64)
+    #include <mpdecimal64vc.h>
+  #elif defined(CONFIG_32)
+    #include <mpdecimal32vc.h>
+  #else
+    #error "Unknown configuration!"
+  #endif
+#endif
index 490d7df87eb1c63cf518a09cc761b3d3ccdd085d..ee7421484b531229612cfa2320168fe950a24c33 100644 (file)
   </PropertyGroup>
   <ItemDefinitionGroup>
     <ClCompile>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>BUILD_LIBMPDEC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(Platform)' == 'Win32'">CONFIG_32;PPRO;MASM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(Platform)'=='ARM'">CONFIG_32;ANSI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(Platform)'=='ARM64'">CONFIG_64;ANSI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions Condition="'$(Platform)' == 'x64'">CONFIG_64;MASM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\Modules\_decimal;..\Modules\_decimal\libmpdec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\Modules\_decimal;..\Modules\_decimal\windows;$(mpdecimalDir)\libmpdec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\basearith.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\bits.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\constants.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\convolute.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\crt.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\difradix2.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\basearith.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\bits.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\constants.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\convolute.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\crt.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\difradix2.h" />
     <ClInclude Include="..\Modules\_decimal\docstrings.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\fnt.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\fourstep.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\mpdecimal.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\numbertheory.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\sixstep.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\transpose.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\typearith.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\umodarith.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\vccompat.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\fnt.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\fourstep.h" />
+    <ClInclude Include="..\Modules\_decimal\windows\mpdecimal.h" />
+    <ClInclude Condition="'$(Platform)' == 'Win32'" Include="$(mpdecimalDir)\libmpdec\mpdecimal32vc.h" />
+    <ClInclude Condition="'$(Platform)' == 'ARM'" Include="$(mpdecimalDir)\libmpdec\mpdecimal32vc.h" />
+    <ClInclude Condition="'$(Platform)' == 'ARM64'" Include="$(mpdecimalDir)\libmpdec\mpdecimal64vc.h" />
+    <ClInclude Condition="'$(Platform)' == 'x64'" Include="$(mpdecimalDir)\libmpdec\mpdecimal64vc.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\numbertheory.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\sixstep.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\transpose.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\typearith.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\umodarith.h" />
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\vccompat.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_decimal\_decimal.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\basearith.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\constants.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\context.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\convolute.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\crt.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\difradix2.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\fnt.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\fourstep.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\io.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\mpalloc.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\mpdecimal.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\numbertheory.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\sixstep.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\transpose.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\basearith.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\constants.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\context.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\convolute.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\crt.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\difradix2.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\fnt.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\fourstep.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\io.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\mpalloc.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\mpdecimal.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\numbertheory.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\sixstep.c" />
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\transpose.c" />
   </ItemGroup>
   <ItemGroup>
-    <CustomBuild Include="..\Modules\_decimal\libmpdec\vcdiv64.asm">
+    <CustomBuild Include="$(mpdecimalDir)\libmpdec\vcdiv64.asm">
       <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Platform)'=='ARM'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Platform)'=='ARM64'">true</ExcludedFromBuild>
index 0cbd3d0736c2413f1b246e891f1ab1a06f10d987..e4bdb64ec1fb9f862bfc5060b652bc2daa21c134 100644 (file)
     <ClInclude Include="..\Modules\_decimal\docstrings.h">
       <Filter>Header Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\basearith.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\basearith.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\bits.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\bits.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\constants.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\constants.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\convolute.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\convolute.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\crt.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\crt.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\difradix2.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\difradix2.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\fnt.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\fnt.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\fourstep.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\fourstep.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\mpdecimal.h">
+    <ClInclude Include="..\Modules\_decimal\windows\mpdecimal.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\numbertheory.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\mpdecimal32vc.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\sixstep.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\mpdecimal64vc.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\transpose.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\numbertheory.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\typearith.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\sixstep.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\umodarith.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\transpose.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\vccompat.h">
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\typearith.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\umodarith.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
+    <ClInclude Include="$(mpdecimalDir)\libmpdec\vccompat.h">
       <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
   </ItemGroup>
     <ClCompile Include="..\Modules\_decimal\_decimal.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\basearith.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\basearith.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\constants.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\constants.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\context.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\context.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\convolute.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\convolute.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\crt.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\crt.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\difradix2.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\difradix2.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\fnt.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\fnt.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\fourstep.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\fourstep.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\io.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\io.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\mpalloc.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\mpalloc.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\mpdecimal.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\mpdecimal.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\numbertheory.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\numbertheory.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\sixstep.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\sixstep.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\transpose.c">
+    <ClCompile Include="$(mpdecimalDir)\libmpdec\transpose.c">
       <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
   </ItemGroup>
     </ResourceCompile>
   </ItemGroup>
   <ItemGroup>
-    <CustomBuild Include="..\Modules\_decimal\libmpdec\vcdiv64.asm">
+    <CustomBuild Include="$(mpdecimalDir)\libmpdec\vcdiv64.asm">
       <Filter>Source Files\libmpdec</Filter>
     </CustomBuild>
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
index 60ce12b725e2331cd78acc83c8db5ca30e11b971..f5b7e114c98dedd068718f60b7138b53282b8b25 100644 (file)
@@ -54,6 +54,7 @@ set libraries=
 set libraries=%libraries%                                       bzip2-1.0.8
 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries%  libffi-3.4.4
 if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries%     openssl-3.0.13
+set libraries=%libraries%                                       mpdecimal-2.5.1
 set libraries=%libraries%                                       sqlite-3.45.1.0
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.13.1
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.13.1
index e21f1f60464bc8c3f060706690155694e52a622d..a8d08073fbd11ecd5003c8276a6aae22d61180c7 100644 (file)
@@ -74,6 +74,7 @@
     <libffiDir Condition="$(libffiDir) == ''">$(ExternalsDir)libffi-3.4.4\</libffiDir>
     <libffiOutDir Condition="$(libffiOutDir) == ''">$(libffiDir)$(ArchName)\</libffiOutDir>
     <libffiIncludeDir Condition="$(libffiIncludeDir) == ''">$(libffiOutDir)include</libffiIncludeDir>
+    <mpdecimalDir Condition="$(mpdecimalDir) == ''">$(ExternalsDir)\mpdecimal-2.5.1\</mpdecimalDir>
     <opensslDir Condition="$(opensslDir) == ''">$(ExternalsDir)openssl-3.0.13\</opensslDir>
     <opensslOutDir Condition="$(opensslOutDir) == ''">$(ExternalsDir)openssl-bin-3.0.13\$(ArchName)\</opensslOutDir>
     <opensslIncludeDir Condition="$(opensslIncludeDir) == ''">$(opensslOutDir)include</opensslIncludeDir>