Skip to content

Commit 849e071

Browse files
authored
gh-115119: Switch Windows build to mpdecimal external (GH-115182)
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.
1 parent 7707b14 commit 849e071

File tree

7 files changed

+117
-63
lines changed

7 files changed

+117
-63
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Switched from vendored ``libmpdecimal`` code to a separately-hosted external
2+
package in the ``cpython-source-deps`` repository when building the
3+
``_decimal`` module.

Misc/externals.spdx.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,28 @@
4343
"primaryPackagePurpose": "SOURCE",
4444
"versionInfo": "3.4.4"
4545
},
46+
{
47+
"SPDXID": "SPDXRef-PACKAGE-mpdecimal",
48+
"checksums": [
49+
{
50+
"algorithm": "SHA256",
51+
"checksumValue": "93118043651ffa33dcaaab445bae4f8929fca25d2d749079b78e97f220c3d8b1"
52+
}
53+
],
54+
"downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/mpdecimal-2.5.1.tar.gz",
55+
"externalRefs": [
56+
{
57+
"referenceCategory": "SECURITY",
58+
"referenceLocator": "cpe:2.3:a:bytereef:mpdecimal:2.5.1:*:*:*:*:*:*:*",
59+
"referenceType": "cpe23Type"
60+
}
61+
],
62+
"licenseConcluded": "NOASSERTION",
63+
"name": "mpdecimal",
64+
"originator": "Organization: bytereef.org",
65+
"primaryPackagePurpose": "SOURCE",
66+
"versionInfo": "2.5.1"
67+
},
4668
{
4769
"SPDXID": "SPDXRef-PACKAGE-openssl",
4870
"checksums": [

Modules/_decimal/windows/mpdecimal.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/* Windows mpdecimal.h shim
2+
*
3+
* Generally, the mpdecimal library build will copy the correct header into
4+
* place named "mpdecimal.h", but since we're building it ourselves directly
5+
* into _decimal.pyd, we need to pick the right one.
6+
*
7+
* */
8+
9+
#if defined(_MSC_VER)
10+
#if defined(CONFIG_64)
11+
#include <mpdecimal64vc.h>
12+
#elif defined(CONFIG_32)
13+
#include <mpdecimal32vc.h>
14+
#else
15+
#error "Unknown configuration!"
16+
#endif
17+
#endif

PCbuild/_decimal.vcxproj

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -93,51 +93,55 @@
9393
</PropertyGroup>
9494
<ItemDefinitionGroup>
9595
<ClCompile>
96-
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
96+
<PreprocessorDefinitions>BUILD_LIBMPDEC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
9797
<PreprocessorDefinitions Condition="'$(Platform)' == 'Win32'">CONFIG_32;PPRO;MASM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
9898
<PreprocessorDefinitions Condition="'$(Platform)'=='ARM'">CONFIG_32;ANSI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
9999
<PreprocessorDefinitions Condition="'$(Platform)'=='ARM64'">CONFIG_64;ANSI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
100100
<PreprocessorDefinitions Condition="'$(Platform)' == 'x64'">CONFIG_64;MASM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
101-
<AdditionalIncludeDirectories>..\Modules\_decimal;..\Modules\_decimal\libmpdec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
101+
<AdditionalIncludeDirectories>..\Modules\_decimal;..\Modules\_decimal\windows;$(mpdecimalDir)\libmpdec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
102102
</ClCompile>
103103
</ItemDefinitionGroup>
104104
<ItemGroup>
105-
<ClInclude Include="..\Modules\_decimal\libmpdec\basearith.h" />
106-
<ClInclude Include="..\Modules\_decimal\libmpdec\bits.h" />
107-
<ClInclude Include="..\Modules\_decimal\libmpdec\constants.h" />
108-
<ClInclude Include="..\Modules\_decimal\libmpdec\convolute.h" />
109-
<ClInclude Include="..\Modules\_decimal\libmpdec\crt.h" />
110-
<ClInclude Include="..\Modules\_decimal\libmpdec\difradix2.h" />
105+
<ClInclude Include="$(mpdecimalDir)\libmpdec\basearith.h" />
106+
<ClInclude Include="$(mpdecimalDir)\libmpdec\bits.h" />
107+
<ClInclude Include="$(mpdecimalDir)\libmpdec\constants.h" />
108+
<ClInclude Include="$(mpdecimalDir)\libmpdec\convolute.h" />
109+
<ClInclude Include="$(mpdecimalDir)\libmpdec\crt.h" />
110+
<ClInclude Include="$(mpdecimalDir)\libmpdec\difradix2.h" />
111111
<ClInclude Include="..\Modules\_decimal\docstrings.h" />
112-
<ClInclude Include="..\Modules\_decimal\libmpdec\fnt.h" />
113-
<ClInclude Include="..\Modules\_decimal\libmpdec\fourstep.h" />
114-
<ClInclude Include="..\Modules\_decimal\libmpdec\mpdecimal.h" />
115-
<ClInclude Include="..\Modules\_decimal\libmpdec\numbertheory.h" />
116-
<ClInclude Include="..\Modules\_decimal\libmpdec\sixstep.h" />
117-
<ClInclude Include="..\Modules\_decimal\libmpdec\transpose.h" />
118-
<ClInclude Include="..\Modules\_decimal\libmpdec\typearith.h" />
119-
<ClInclude Include="..\Modules\_decimal\libmpdec\umodarith.h" />
120-
<ClInclude Include="..\Modules\_decimal\libmpdec\vccompat.h" />
112+
<ClInclude Include="$(mpdecimalDir)\libmpdec\fnt.h" />
113+
<ClInclude Include="$(mpdecimalDir)\libmpdec\fourstep.h" />
114+
<ClInclude Include="..\Modules\_decimal\windows\mpdecimal.h" />
115+
<ClInclude Condition="'$(Platform)' == 'Win32'" Include="$(mpdecimalDir)\libmpdec\mpdecimal32vc.h" />
116+
<ClInclude Condition="'$(Platform)' == 'ARM'" Include="$(mpdecimalDir)\libmpdec\mpdecimal32vc.h" />
117+
<ClInclude Condition="'$(Platform)' == 'ARM64'" Include="$(mpdecimalDir)\libmpdec\mpdecimal64vc.h" />
118+
<ClInclude Condition="'$(Platform)' == 'x64'" Include="$(mpdecimalDir)\libmpdec\mpdecimal64vc.h" />
119+
<ClInclude Include="$(mpdecimalDir)\libmpdec\numbertheory.h" />
120+
<ClInclude Include="$(mpdecimalDir)\libmpdec\sixstep.h" />
121+
<ClInclude Include="$(mpdecimalDir)\libmpdec\transpose.h" />
122+
<ClInclude Include="$(mpdecimalDir)\libmpdec\typearith.h" />
123+
<ClInclude Include="$(mpdecimalDir)\libmpdec\umodarith.h" />
124+
<ClInclude Include="$(mpdecimalDir)\libmpdec\vccompat.h" />
121125
</ItemGroup>
122126
<ItemGroup>
123127
<ClCompile Include="..\Modules\_decimal\_decimal.c" />
124-
<ClCompile Include="..\Modules\_decimal\libmpdec\basearith.c" />
125-
<ClCompile Include="..\Modules\_decimal\libmpdec\constants.c" />
126-
<ClCompile Include="..\Modules\_decimal\libmpdec\context.c" />
127-
<ClCompile Include="..\Modules\_decimal\libmpdec\convolute.c" />
128-
<ClCompile Include="..\Modules\_decimal\libmpdec\crt.c" />
129-
<ClCompile Include="..\Modules\_decimal\libmpdec\difradix2.c" />
130-
<ClCompile Include="..\Modules\_decimal\libmpdec\fnt.c" />
131-
<ClCompile Include="..\Modules\_decimal\libmpdec\fourstep.c" />
132-
<ClCompile Include="..\Modules\_decimal\libmpdec\io.c" />
133-
<ClCompile Include="..\Modules\_decimal\libmpdec\mpalloc.c" />
134-
<ClCompile Include="..\Modules\_decimal\libmpdec\mpdecimal.c" />
135-
<ClCompile Include="..\Modules\_decimal\libmpdec\numbertheory.c" />
136-
<ClCompile Include="..\Modules\_decimal\libmpdec\sixstep.c" />
137-
<ClCompile Include="..\Modules\_decimal\libmpdec\transpose.c" />
128+
<ClCompile Include="$(mpdecimalDir)\libmpdec\basearith.c" />
129+
<ClCompile Include="$(mpdecimalDir)\libmpdec\constants.c" />
130+
<ClCompile Include="$(mpdecimalDir)\libmpdec\context.c" />
131+
<ClCompile Include="$(mpdecimalDir)\libmpdec\convolute.c" />
132+
<ClCompile Include="$(mpdecimalDir)\libmpdec\crt.c" />
133+
<ClCompile Include="$(mpdecimalDir)\libmpdec\difradix2.c" />
134+
<ClCompile Include="$(mpdecimalDir)\libmpdec\fnt.c" />
135+
<ClCompile Include="$(mpdecimalDir)\libmpdec\fourstep.c" />
136+
<ClCompile Include="$(mpdecimalDir)\libmpdec\io.c" />
137+
<ClCompile Include="$(mpdecimalDir)\libmpdec\mpalloc.c" />
138+
<ClCompile Include="$(mpdecimalDir)\libmpdec\mpdecimal.c" />
139+
<ClCompile Include="$(mpdecimalDir)\libmpdec\numbertheory.c" />
140+
<ClCompile Include="$(mpdecimalDir)\libmpdec\sixstep.c" />
141+
<ClCompile Include="$(mpdecimalDir)\libmpdec\transpose.c" />
138142
</ItemGroup>
139143
<ItemGroup>
140-
<CustomBuild Include="..\Modules\_decimal\libmpdec\vcdiv64.asm">
144+
<CustomBuild Include="$(mpdecimalDir)\libmpdec\vcdiv64.asm">
141145
<ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild>
142146
<ExcludedFromBuild Condition="'$(Platform)'=='ARM'">true</ExcludedFromBuild>
143147
<ExcludedFromBuild Condition="'$(Platform)'=='ARM64'">true</ExcludedFromBuild>

PCbuild/_decimal.vcxproj.filters

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -21,96 +21,102 @@
2121
<ClInclude Include="..\Modules\_decimal\docstrings.h">
2222
<Filter>Header Files</Filter>
2323
</ClInclude>
24-
<ClInclude Include="..\Modules\_decimal\libmpdec\basearith.h">
24+
<ClInclude Include="$(mpdecimalDir)\libmpdec\basearith.h">
2525
<Filter>Header Files\libmpdec</Filter>
2626
</ClInclude>
27-
<ClInclude Include="..\Modules\_decimal\libmpdec\bits.h">
27+
<ClInclude Include="$(mpdecimalDir)\libmpdec\bits.h">
2828
<Filter>Header Files\libmpdec</Filter>
2929
</ClInclude>
30-
<ClInclude Include="..\Modules\_decimal\libmpdec\constants.h">
30+
<ClInclude Include="$(mpdecimalDir)\libmpdec\constants.h">
3131
<Filter>Header Files\libmpdec</Filter>
3232
</ClInclude>
33-
<ClInclude Include="..\Modules\_decimal\libmpdec\convolute.h">
33+
<ClInclude Include="$(mpdecimalDir)\libmpdec\convolute.h">
3434
<Filter>Header Files\libmpdec</Filter>
3535
</ClInclude>
36-
<ClInclude Include="..\Modules\_decimal\libmpdec\crt.h">
36+
<ClInclude Include="$(mpdecimalDir)\libmpdec\crt.h">
3737
<Filter>Header Files\libmpdec</Filter>
3838
</ClInclude>
39-
<ClInclude Include="..\Modules\_decimal\libmpdec\difradix2.h">
39+
<ClInclude Include="$(mpdecimalDir)\libmpdec\difradix2.h">
4040
<Filter>Header Files\libmpdec</Filter>
4141
</ClInclude>
42-
<ClInclude Include="..\Modules\_decimal\libmpdec\fnt.h">
42+
<ClInclude Include="$(mpdecimalDir)\libmpdec\fnt.h">
4343
<Filter>Header Files\libmpdec</Filter>
4444
</ClInclude>
45-
<ClInclude Include="..\Modules\_decimal\libmpdec\fourstep.h">
45+
<ClInclude Include="$(mpdecimalDir)\libmpdec\fourstep.h">
4646
<Filter>Header Files\libmpdec</Filter>
4747
</ClInclude>
48-
<ClInclude Include="..\Modules\_decimal\libmpdec\mpdecimal.h">
48+
<ClInclude Include="..\Modules\_decimal\windows\mpdecimal.h">
4949
<Filter>Header Files\libmpdec</Filter>
5050
</ClInclude>
51-
<ClInclude Include="..\Modules\_decimal\libmpdec\numbertheory.h">
51+
<ClInclude Include="$(mpdecimalDir)\libmpdec\mpdecimal32vc.h">
5252
<Filter>Header Files\libmpdec</Filter>
5353
</ClInclude>
54-
<ClInclude Include="..\Modules\_decimal\libmpdec\sixstep.h">
54+
<ClInclude Include="$(mpdecimalDir)\libmpdec\mpdecimal64vc.h">
5555
<Filter>Header Files\libmpdec</Filter>
5656
</ClInclude>
57-
<ClInclude Include="..\Modules\_decimal\libmpdec\transpose.h">
57+
<ClInclude Include="$(mpdecimalDir)\libmpdec\numbertheory.h">
5858
<Filter>Header Files\libmpdec</Filter>
5959
</ClInclude>
60-
<ClInclude Include="..\Modules\_decimal\libmpdec\typearith.h">
60+
<ClInclude Include="$(mpdecimalDir)\libmpdec\sixstep.h">
6161
<Filter>Header Files\libmpdec</Filter>
6262
</ClInclude>
63-
<ClInclude Include="..\Modules\_decimal\libmpdec\umodarith.h">
63+
<ClInclude Include="$(mpdecimalDir)\libmpdec\transpose.h">
6464
<Filter>Header Files\libmpdec</Filter>
6565
</ClInclude>
66-
<ClInclude Include="..\Modules\_decimal\libmpdec\vccompat.h">
66+
<ClInclude Include="$(mpdecimalDir)\libmpdec\typearith.h">
67+
<Filter>Header Files\libmpdec</Filter>
68+
</ClInclude>
69+
<ClInclude Include="$(mpdecimalDir)\libmpdec\umodarith.h">
70+
<Filter>Header Files\libmpdec</Filter>
71+
</ClInclude>
72+
<ClInclude Include="$(mpdecimalDir)\libmpdec\vccompat.h">
6773
<Filter>Header Files\libmpdec</Filter>
6874
</ClInclude>
6975
</ItemGroup>
7076
<ItemGroup>
7177
<ClCompile Include="..\Modules\_decimal\_decimal.c">
7278
<Filter>Source Files</Filter>
7379
</ClCompile>
74-
<ClCompile Include="..\Modules\_decimal\libmpdec\basearith.c">
80+
<ClCompile Include="$(mpdecimalDir)\libmpdec\basearith.c">
7581
<Filter>Source Files\libmpdec</Filter>
7682
</ClCompile>
77-
<ClCompile Include="..\Modules\_decimal\libmpdec\constants.c">
83+
<ClCompile Include="$(mpdecimalDir)\libmpdec\constants.c">
7884
<Filter>Source Files\libmpdec</Filter>
7985
</ClCompile>
80-
<ClCompile Include="..\Modules\_decimal\libmpdec\context.c">
86+
<ClCompile Include="$(mpdecimalDir)\libmpdec\context.c">
8187
<Filter>Source Files\libmpdec</Filter>
8288
</ClCompile>
83-
<ClCompile Include="..\Modules\_decimal\libmpdec\convolute.c">
89+
<ClCompile Include="$(mpdecimalDir)\libmpdec\convolute.c">
8490
<Filter>Source Files\libmpdec</Filter>
8591
</ClCompile>
86-
<ClCompile Include="..\Modules\_decimal\libmpdec\crt.c">
92+
<ClCompile Include="$(mpdecimalDir)\libmpdec\crt.c">
8793
<Filter>Source Files\libmpdec</Filter>
8894
</ClCompile>
89-
<ClCompile Include="..\Modules\_decimal\libmpdec\difradix2.c">
95+
<ClCompile Include="$(mpdecimalDir)\libmpdec\difradix2.c">
9096
<Filter>Source Files\libmpdec</Filter>
9197
</ClCompile>
92-
<ClCompile Include="..\Modules\_decimal\libmpdec\fnt.c">
98+
<ClCompile Include="$(mpdecimalDir)\libmpdec\fnt.c">
9399
<Filter>Source Files\libmpdec</Filter>
94100
</ClCompile>
95-
<ClCompile Include="..\Modules\_decimal\libmpdec\fourstep.c">
101+
<ClCompile Include="$(mpdecimalDir)\libmpdec\fourstep.c">
96102
<Filter>Source Files\libmpdec</Filter>
97103
</ClCompile>
98-
<ClCompile Include="..\Modules\_decimal\libmpdec\io.c">
104+
<ClCompile Include="$(mpdecimalDir)\libmpdec\io.c">
99105
<Filter>Source Files\libmpdec</Filter>
100106
</ClCompile>
101-
<ClCompile Include="..\Modules\_decimal\libmpdec\mpalloc.c">
107+
<ClCompile Include="$(mpdecimalDir)\libmpdec\mpalloc.c">
102108
<Filter>Source Files\libmpdec</Filter>
103109
</ClCompile>
104-
<ClCompile Include="..\Modules\_decimal\libmpdec\mpdecimal.c">
110+
<ClCompile Include="$(mpdecimalDir)\libmpdec\mpdecimal.c">
105111
<Filter>Source Files\libmpdec</Filter>
106112
</ClCompile>
107-
<ClCompile Include="..\Modules\_decimal\libmpdec\numbertheory.c">
113+
<ClCompile Include="$(mpdecimalDir)\libmpdec\numbertheory.c">
108114
<Filter>Source Files\libmpdec</Filter>
109115
</ClCompile>
110-
<ClCompile Include="..\Modules\_decimal\libmpdec\sixstep.c">
116+
<ClCompile Include="$(mpdecimalDir)\libmpdec\sixstep.c">
111117
<Filter>Source Files\libmpdec</Filter>
112118
</ClCompile>
113-
<ClCompile Include="..\Modules\_decimal\libmpdec\transpose.c">
119+
<ClCompile Include="$(mpdecimalDir)\libmpdec\transpose.c">
114120
<Filter>Source Files\libmpdec</Filter>
115121
</ClCompile>
116122
</ItemGroup>
@@ -120,8 +126,8 @@
120126
</ResourceCompile>
121127
</ItemGroup>
122128
<ItemGroup>
123-
<CustomBuild Include="..\Modules\_decimal\libmpdec\vcdiv64.asm">
129+
<CustomBuild Include="$(mpdecimalDir)\libmpdec\vcdiv64.asm">
124130
<Filter>Source Files\libmpdec</Filter>
125131
</CustomBuild>
126132
</ItemGroup>
127-
</Project>
133+
</Project>

PCbuild/get_externals.bat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ set libraries=
5454
set libraries=%libraries% bzip2-1.0.8
5555
if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.4.4
5656
if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-3.0.13
57+
set libraries=%libraries% mpdecimal-2.5.1
5758
set libraries=%libraries% sqlite-3.45.1.0
5859
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.13.1
5960
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.13.1

PCbuild/python.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
<libffiDir Condition="$(libffiDir) == ''">$(ExternalsDir)libffi-3.4.4\</libffiDir>
7575
<libffiOutDir Condition="$(libffiOutDir) == ''">$(libffiDir)$(ArchName)\</libffiOutDir>
7676
<libffiIncludeDir Condition="$(libffiIncludeDir) == ''">$(libffiOutDir)include</libffiIncludeDir>
77+
<mpdecimalDir Condition="$(mpdecimalDir) == ''">$(ExternalsDir)\mpdecimal-2.5.1\</mpdecimalDir>
7778
<opensslDir Condition="$(opensslDir) == ''">$(ExternalsDir)openssl-3.0.13\</opensslDir>
7879
<opensslOutDir Condition="$(opensslOutDir) == ''">$(ExternalsDir)openssl-bin-3.0.13\$(ArchName)\</opensslOutDir>
7980
<opensslIncludeDir Condition="$(opensslIncludeDir) == ''">$(opensslOutDir)include</opensslIncludeDir>

0 commit comments

Comments
 (0)