17db96d56Sopenharmony_ci<?xml version="1.0" encoding="utf-8"?>
27db96d56Sopenharmony_ci<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
37db96d56Sopenharmony_ci  <PropertyGroup>
47db96d56Sopenharmony_ci    <__Python_Props_Imported>true</__Python_Props_Imported>
57db96d56Sopenharmony_ci    <Platform Condition="'$(Platform)' == ''">Win32</Platform>
67db96d56Sopenharmony_ci    <Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
77db96d56Sopenharmony_ci    <!--
87db96d56Sopenharmony_ci    Use the latest available version of Visual Studio to build. To override
97db96d56Sopenharmony_ci    this and build with an earlier version, pass "/p:PlatformToolset=v100"
107db96d56Sopenharmony_ci    (for example) when building.
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci    We set BasePlatformToolset for ICC's benefit, it's otherwise ignored.
137db96d56Sopenharmony_ci    -->
147db96d56Sopenharmony_ci    <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VisualStudioVersion)' == '17.0'">v143</BasePlatformToolset>
157db96d56Sopenharmony_ci    <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VisualStudioVersion)' == '16.0'">v142</BasePlatformToolset>
167db96d56Sopenharmony_ci    <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '15.0' or '$(VisualStudioVersion)' == '15.0')">v141</BasePlatformToolset>
177db96d56Sopenharmony_ci    <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VCTargetsPath14)' != ''">v140</BasePlatformToolset>
187db96d56Sopenharmony_ci    <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VCTargetsPath12)' != ''">v120</BasePlatformToolset>
197db96d56Sopenharmony_ci    <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VCTargetsPath11)' != ''">v110</BasePlatformToolset>
207db96d56Sopenharmony_ci    <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VCTargetsPath10)' != ''">v100</BasePlatformToolset>
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci    <PlatformToolset Condition="'$(PlatformToolset)' == ''">$(BasePlatformToolset)</PlatformToolset>
237db96d56Sopenharmony_ci    <ICCBuild>false</ICCBuild>
247db96d56Sopenharmony_ci    <ICCBuild Condition="$(PlatformToolset.StartsWith(`Intel C++ Compiler`))">true</ICCBuild>
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci    <!--
277db96d56Sopenharmony_ci    Convincing MSVC/MSBuild to prefer our platform names is too difficult,
287db96d56Sopenharmony_ci    so we define our own constant ArchName and use wherever we need it.
297db96d56Sopenharmony_ci    -->
307db96d56Sopenharmony_ci    <ArchName Condition="'$(ArchName)' == '' and $(Platform) == 'x64'">amd64</ArchName>
317db96d56Sopenharmony_ci    <ArchName Condition="'$(ArchName)' == '' and $(Platform) == 'ARM'">arm32</ArchName>
327db96d56Sopenharmony_ci    <ArchName Condition="'$(ArchName)' == '' and $(Platform) == 'ARM64'">arm64</ArchName>
337db96d56Sopenharmony_ci    <ArchName Condition="'$(ArchName)' == ''">win32</ArchName>
347db96d56Sopenharmony_ci    
357db96d56Sopenharmony_ci    <!-- Root directory of the repository -->
367db96d56Sopenharmony_ci    <PySourcePath Condition="'$(PySourcePath)' == ''">$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)\..\))</PySourcePath>
377db96d56Sopenharmony_ci    <PySourcePath Condition="!HasTrailingSlash($(PySourcePath))">$(PySourcePath)\</PySourcePath>
387db96d56Sopenharmony_ci    
397db96d56Sopenharmony_ci    <!-- Directory where build outputs are put -->
407db96d56Sopenharmony_ci    <BuildPath32 Condition="'$(Py_OutDir)' == ''">$(PySourcePath)PCbuild\win32\</BuildPath32>
417db96d56Sopenharmony_ci    <BuildPath32 Condition="'$(Py_OutDir)' != ''">$(Py_OutDir)\win32\</BuildPath32>
427db96d56Sopenharmony_ci    <BuildPath64 Condition="'$(Py_OutDir)' == ''">$(PySourcePath)PCbuild\amd64\</BuildPath64>
437db96d56Sopenharmony_ci    <BuildPath64 Condition="'$(Py_OutDir)' != ''">$(Py_OutDir)\amd64\</BuildPath64>
447db96d56Sopenharmony_ci    <BuildPathArm32 Condition="'$(Py_OutDir)' == ''">$(PySourcePath)PCbuild\arm32\</BuildPathArm32>
457db96d56Sopenharmony_ci    <BuildPathArm32 Condition="'$(Py_OutDir)' != ''">$(Py_OutDir)\arm32\</BuildPathArm32>
467db96d56Sopenharmony_ci    <BuildPathArm64 Condition="'$(Py_OutDir)' == ''">$(PySourcePath)PCbuild\arm64\</BuildPathArm64>
477db96d56Sopenharmony_ci    <BuildPathArm64 Condition="'$(Py_OutDir)' != ''">$(Py_OutDir)\arm64\</BuildPathArm64>
487db96d56Sopenharmony_ci    <BuildPath Condition="'$(ArchName)' == 'win32'">$(BuildPath32)</BuildPath>
497db96d56Sopenharmony_ci    <BuildPath Condition="'$(ArchName)' == 'amd64'">$(BuildPath64)</BuildPath>
507db96d56Sopenharmony_ci    <BuildPath Condition="'$(ArchName)' == 'arm32'">$(BuildPathArm32)</BuildPath>
517db96d56Sopenharmony_ci    <BuildPath Condition="'$(ArchName)' == 'arm64'">$(BuildPathArm64)</BuildPath>
527db96d56Sopenharmony_ci    <BuildPath Condition="'$(BuildPath)' == ''">$(PySourcePath)PCbuild\$(ArchName)\</BuildPath>
537db96d56Sopenharmony_ci    <BuildPath Condition="!HasTrailingSlash($(BuildPath))">$(BuildPath)\</BuildPath>
547db96d56Sopenharmony_ci    <BuildPath Condition="$(Configuration) == 'PGInstrument'">$(BuildPath)instrumented\</BuildPath>
557db96d56Sopenharmony_ci    
567db96d56Sopenharmony_ci    <!-- VPATH definition (escaped) -->
577db96d56Sopenharmony_ci    <PyVPath Condition="$(Configuration) != 'PGInstrument'">..\\..</PyVPath>
587db96d56Sopenharmony_ci    <PyVPath Condition="$(Configuration) == 'PGInstrument'">..\\..\\..</PyVPath>
597db96d56Sopenharmony_ci  </PropertyGroup>
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci  <!-- Directories of external projects. tcltk is handled in tcltk.props -->
627db96d56Sopenharmony_ci  <PropertyGroup>
637db96d56Sopenharmony_ci    <ExternalsDir Condition="$(ExternalsDir) == ''">$(EXTERNALS_DIR)</ExternalsDir>
647db96d56Sopenharmony_ci    <ExternalsDir Condition="$(ExternalsDir) == ''">$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`))</ExternalsDir>
657db96d56Sopenharmony_ci    <ExternalsDir Condition="!HasTrailingSlash($(ExternalsDir))">$(ExternalsDir)\</ExternalsDir>
667db96d56Sopenharmony_ci  </PropertyGroup>
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci  <Import Project="$(ExternalProps)" Condition="$(ExternalProps) != '' and Exists('$(ExternalProps)')" />
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci  <PropertyGroup>
717db96d56Sopenharmony_ci    <sqlite3Dir Condition="$(sqlite3Dir) == ''">$(ExternalsDir)sqlite-3.42.0.0\</sqlite3Dir>
727db96d56Sopenharmony_ci    <bz2Dir Condition="$(bz2Dir) == ''">$(ExternalsDir)bzip2-1.0.8\</bz2Dir>
737db96d56Sopenharmony_ci    <lzmaDir Condition="$(lzmaDir) == ''">$(ExternalsDir)xz-5.2.5\</lzmaDir>
747db96d56Sopenharmony_ci    <libffiDir Condition="$(libffiDir) == ''">$(ExternalsDir)libffi-3.4.4\</libffiDir>
757db96d56Sopenharmony_ci    <libffiOutDir Condition="$(libffiOutDir) == ''">$(libffiDir)$(ArchName)\</libffiOutDir>
767db96d56Sopenharmony_ci    <libffiIncludeDir Condition="$(libffiIncludeDir) == ''">$(libffiOutDir)include</libffiIncludeDir>
777db96d56Sopenharmony_ci    <opensslDir Condition="$(opensslDir) == ''">$(ExternalsDir)openssl-1.1.1u\</opensslDir>
787db96d56Sopenharmony_ci    <opensslOutDir Condition="$(opensslOutDir) == ''">$(ExternalsDir)openssl-bin-1.1.1u\$(ArchName)\</opensslOutDir>
797db96d56Sopenharmony_ci    <opensslIncludeDir Condition="$(opensslIncludeDir) == ''">$(opensslOutDir)include</opensslIncludeDir>
807db96d56Sopenharmony_ci    <nasmDir Condition="$(nasmDir) == ''">$(ExternalsDir)\nasm-2.11.06\</nasmDir>
817db96d56Sopenharmony_ci    <zlibDir Condition="$(zlibDir) == ''">$(ExternalsDir)\zlib-1.2.13\</zlibDir>
827db96d56Sopenharmony_ci  </PropertyGroup>
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci  <PropertyGroup>
857db96d56Sopenharmony_ci    <!-- Suffix for all binaries when building for debug -->
867db96d56Sopenharmony_ci    <PyDebugExt Condition="'$(PyDebugExt)' == '' and $(Configuration) == 'Debug'">_d</PyDebugExt>
877db96d56Sopenharmony_ci    
887db96d56Sopenharmony_ci    <!-- Suffix for versions/keys when building with test markers -->
897db96d56Sopenharmony_ci    <PyTestExt Condition="$(UseTestMarker) == 'true'">-test</PyTestExt>
907db96d56Sopenharmony_ci    
917db96d56Sopenharmony_ci    <!-- Suffix for versions/keys when building for particular platforms -->
927db96d56Sopenharmony_ci    <PyArchExt Condition="'$(ArchName)' == 'win32'">-32</PyArchExt>
937db96d56Sopenharmony_ci    <PyArchExt Condition="'$(ArchName)' == 'arm32'">-arm32</PyArchExt>
947db96d56Sopenharmony_ci    <PyArchExt Condition="'$(ArchName)' == 'arm64'">-arm64</PyArchExt>
957db96d56Sopenharmony_ci    
967db96d56Sopenharmony_ci    <!-- Full path of the resulting python.exe binary -->
977db96d56Sopenharmony_ci    <PythonExe Condition="'$(PythonExe)' == ''">$(BuildPath)python$(PyDebugExt).exe</PythonExe>
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci    <!-- Include Tkinter by default -->
1007db96d56Sopenharmony_ci    <IncludeTkinter Condition="'$(IncludeTkinter)' == ''">true</IncludeTkinter>
1017db96d56Sopenharmony_ci  </PropertyGroup>
1027db96d56Sopenharmony_ci  
1037db96d56Sopenharmony_ci  <PropertyGroup Condition="'$(Platform)'=='ARM'" Label="ArmConfiguration">
1047db96d56Sopenharmony_ci    <WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
1057db96d56Sopenharmony_ci  </PropertyGroup>
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci  <PropertyGroup Condition="'$(Platform)'=='ARM64'" Label="Arm64Configuration">
1087db96d56Sopenharmony_ci    <WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
1097db96d56Sopenharmony_ci  </PropertyGroup>
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci  <PropertyGroup Condition="$(DefaultWindowsSDKVersion) == ''">
1127db96d56Sopenharmony_ci    <!--
1137db96d56Sopenharmony_ci    Attempt to select the latest installed WinSDK. If we don't find any, then we will
1147db96d56Sopenharmony_ci    let the MSBuild targets determine which one it wants to use (typically the earliest
1157db96d56Sopenharmony_ci    possible version). Since we limit WINVER to Windows 7 anyway, it doesn't really
1167db96d56Sopenharmony_ci    matter which WinSDK version we use.
1177db96d56Sopenharmony_ci    -->
1187db96d56Sopenharmony_ci    <_RegistryVersion>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion)</_RegistryVersion>
1197db96d56Sopenharmony_ci    <_RegistryVersion Condition="$(_RegistryVersion) == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion)</_RegistryVersion>
1207db96d56Sopenharmony_ci    <!-- Sometimes the version in the registry has to .0 suffix, and sometimes it doesn't. Check and add it -->
1217db96d56Sopenharmony_ci    <_RegistryVersion Condition="$(_RegistryVersion) != '' and !$(_RegistryVersion.EndsWith('.0'))">$(_RegistryVersion).0</_RegistryVersion>
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci    <!-- The minimum allowed SDK version to use for building -->
1247db96d56Sopenharmony_ci    <DefaultWindowsSDKVersion>10.0.10586.0</DefaultWindowsSDKVersion>
1257db96d56Sopenharmony_ci    <DefaultWindowsSDKVersion Condition="$(_RegistryVersion) != '' and $([System.Version]::Parse($(_RegistryVersion))) > $([System.Version]::Parse($(DefaultWindowsSDKVersion)))">$(_RegistryVersion)</DefaultWindowsSDKVersion>
1267db96d56Sopenharmony_ci  </PropertyGroup>
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci  <Target Name="_CheckWindowsSDKFound" BeforeTargets="_CheckWindowsSDKInstalled" Condition="$(_RegistryVersion) == ''">
1297db96d56Sopenharmony_ci    <PropertyGroup>
1307db96d56Sopenharmony_ci      <_Message>Failed to locate a Windows SDK installation.</_Message>
1317db96d56Sopenharmony_ci      <_Message>$(_Message) If the build fails, please use the Visual Studio Installer to install the Windows SDK.</_Message>
1327db96d56Sopenharmony_ci      <_Message>$(_Message) (Ignore the version number specified in the error message and select the latest.)</_Message>
1337db96d56Sopenharmony_ci    </PropertyGroup>
1347db96d56Sopenharmony_ci    <Warning Text="$(_Message)" />
1357db96d56Sopenharmony_ci  </Target>
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci  <PropertyGroup Condition="$(WindowsTargetPlatformVersion) == ''">
1387db96d56Sopenharmony_ci    <WindowsTargetPlatformVersion>$(DefaultWindowsSDKVersion)</WindowsTargetPlatformVersion>
1397db96d56Sopenharmony_ci  </PropertyGroup>
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci  <PropertyGroup Condition="'$(OverrideVersion)' == ''">
1427db96d56Sopenharmony_ci    <!--
1437db96d56Sopenharmony_ci    Read version information from Include\patchlevel.h. The following properties are set:
1447db96d56Sopenharmony_ci    
1457db96d56Sopenharmony_ci        MajorVersionNumber  -   the '3' in '3.5.2a1'
1467db96d56Sopenharmony_ci        MinorVersionNumber  -   the '5' in '3.5.2a1'
1477db96d56Sopenharmony_ci        MicroVersionNumber  -   the '2' in '3.5.2a1'
1487db96d56Sopenharmony_ci        ReleaseSerial       -   the '1' in '3.5.2a1'
1497db96d56Sopenharmony_ci        ReleaseLevelName    -   the 'a1' in '3.5.2a1'
1507db96d56Sopenharmony_ci        PythonVersionNumber -   '3.5.2' for '3.5.2a1'
1517db96d56Sopenharmony_ci        PythonVersion       -   '3.5.2a1'
1527db96d56Sopenharmony_ci        PythonVersionHex    -   0x030502a1 for '3.5.2a1'
1537db96d56Sopenharmony_ci        ReleaseLevelNumber  -   10 for alpha, 11 for beta, 12 for RC (gamma), and 15 for final
1547db96d56Sopenharmony_ci        Field3Value         -   2101 for '3.5.2a1' (== 1000*2 + 10*10 ('a') + 1)
1557db96d56Sopenharmony_ci    -->
1567db96d56Sopenharmony_ci    <_PatchLevelContent>$([System.IO.File]::ReadAllText(`$(PySourcePath)Include\patchlevel.h`))</_PatchLevelContent>
1577db96d56Sopenharmony_ci    <MajorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_MAJOR_VERSION\s+(\d+)`).Groups[1].Value)</MajorVersionNumber>
1587db96d56Sopenharmony_ci    <MinorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_MINOR_VERSION\s+(\d+)`).Groups[1].Value)</MinorVersionNumber>
1597db96d56Sopenharmony_ci    <MicroVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_MICRO_VERSION\s+(\d+)`).Groups[1].Value)</MicroVersionNumber>
1607db96d56Sopenharmony_ci    <_ReleaseLevel>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_RELEASE_LEVEL\s+PY_RELEASE_LEVEL_(\w+)`).Groups[1].Value)</_ReleaseLevel>
1617db96d56Sopenharmony_ci    <ReleaseSerial>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_RELEASE_SERIAL\s+(\d+)`).Groups[1].Value)</ReleaseSerial>
1627db96d56Sopenharmony_ci    <ReleaseLevelNumber>15</ReleaseLevelNumber>
1637db96d56Sopenharmony_ci    <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'ALPHA'">10</ReleaseLevelNumber>
1647db96d56Sopenharmony_ci    <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'BETA'">11</ReleaseLevelNumber>
1657db96d56Sopenharmony_ci    <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'GAMMA'">12</ReleaseLevelNumber>
1667db96d56Sopenharmony_ci    <ReleaseLevelName Condition="$(_ReleaseLevel) == 'ALPHA'">a$(ReleaseSerial)</ReleaseLevelName>
1677db96d56Sopenharmony_ci    <ReleaseLevelName Condition="$(_ReleaseLevel) == 'BETA'">b$(ReleaseSerial)</ReleaseLevelName>
1687db96d56Sopenharmony_ci    <ReleaseLevelName Condition="$(_ReleaseLevel) == 'GAMMA'">rc$(ReleaseSerial)</ReleaseLevelName>
1697db96d56Sopenharmony_ci  </PropertyGroup>
1707db96d56Sopenharmony_ci  
1717db96d56Sopenharmony_ci  <PropertyGroup Condition="'$(OverrideVersion)' != ''">
1727db96d56Sopenharmony_ci    <!--
1737db96d56Sopenharmony_ci    Override the version number when building by specifying OverrideVersion.
1747db96d56Sopenharmony_ci    For example:
1757db96d56Sopenharmony_ci    
1767db96d56Sopenharmony_ci        PCbuild\build.bat "/p:OverrideVersion=3.5.2a1"
1777db96d56Sopenharmony_ci    
1787db96d56Sopenharmony_ci    Use the -V option to check your version is valid:
1797db96d56Sopenharmony_ci    
1807db96d56Sopenharmony_ci        PCbuild\build.bat -V "/p:OverrideVersion=3.5.2a1"
1817db96d56Sopenharmony_ci          PythonVersionNumber: 3.5.2
1827db96d56Sopenharmony_ci          PythonVersion:       3.5.2a1
1837db96d56Sopenharmony_ci          PythonVersionHex:    0x030502A1
1847db96d56Sopenharmony_ci          Field3Value:         2101
1857db96d56Sopenharmony_ci    
1867db96d56Sopenharmony_ci    Note that this only affects the version numbers embedded in resources and
1877db96d56Sopenharmony_ci    installers, but not sys.version.
1887db96d56Sopenharmony_ci    -->
1897db96d56Sopenharmony_ci    <MajorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[1].Value)</MajorVersionNumber>
1907db96d56Sopenharmony_ci    <MinorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[2].Value)</MinorVersionNumber>
1917db96d56Sopenharmony_ci    <MicroVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[3].Value)</MicroVersionNumber>
1927db96d56Sopenharmony_ci    <ReleaseLevelName>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[4].Value)</ReleaseLevelName>
1937db96d56Sopenharmony_ci    <_ReleaseLevel>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[5].Value)</_ReleaseLevel>
1947db96d56Sopenharmony_ci    <ReleaseSerial>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[6].Value)</ReleaseSerial>
1957db96d56Sopenharmony_ci    <ReleaseSerial Condition="'$(ReleaseSerial)' == ''">0</ReleaseSerial>
1967db96d56Sopenharmony_ci    <ReleaseLevelNumber>15</ReleaseLevelNumber>
1977db96d56Sopenharmony_ci    <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'a'">10</ReleaseLevelNumber>
1987db96d56Sopenharmony_ci    <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'b'">11</ReleaseLevelNumber>
1997db96d56Sopenharmony_ci    <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'rc'">12</ReleaseLevelNumber>
2007db96d56Sopenharmony_ci  </PropertyGroup>
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci  <PropertyGroup>
2037db96d56Sopenharmony_ci    <PythonVersionNumber>$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)</PythonVersionNumber>
2047db96d56Sopenharmony_ci    <PythonVersion>$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)$(ReleaseLevelName)</PythonVersion>
2057db96d56Sopenharmony_ci    <PythonVersionHex>$([msbuild]::BitwiseOr(
2067db96d56Sopenharmony_ci        $([msbuild]::Multiply($(MajorVersionNumber), 16777216)),
2077db96d56Sopenharmony_ci        $([msbuild]::BitwiseOr(
2087db96d56Sopenharmony_ci            $([msbuild]::Multiply($(MinorVersionNumber), 65536)),
2097db96d56Sopenharmony_ci            $([msbuild]::BitwiseOr(
2107db96d56Sopenharmony_ci                $([msbuild]::Multiply($(MicroVersionNumber), 256)),
2117db96d56Sopenharmony_ci                $([msbuild]::BitwiseOr(
2127db96d56Sopenharmony_ci                    $([msbuild]::Multiply($(ReleaseLevelNumber), 16)),
2137db96d56Sopenharmony_ci                    $(ReleaseSerial)
2147db96d56Sopenharmony_ci                ))
2157db96d56Sopenharmony_ci            ))
2167db96d56Sopenharmony_ci        ))
2177db96d56Sopenharmony_ci    ))</PythonVersionHex>
2187db96d56Sopenharmony_ci    <Field3Value>$([msbuild]::Add(
2197db96d56Sopenharmony_ci        $(ReleaseSerial),
2207db96d56Sopenharmony_ci        $([msbuild]::Add(
2217db96d56Sopenharmony_ci            $([msbuild]::Multiply($(ReleaseLevelNumber), 10)),
2227db96d56Sopenharmony_ci            $([msbuild]::Multiply($(MicroVersionNumber), 1000))
2237db96d56Sopenharmony_ci        ))
2247db96d56Sopenharmony_ci    ))</Field3Value>
2257db96d56Sopenharmony_ci    <Field3Value Condition="$(UseTestMarker) == 'true'">$([msbuild]::Add($(Field3Value), 9000))</Field3Value>
2267db96d56Sopenharmony_ci    
2277db96d56Sopenharmony_ci    <!-- The name of the resulting pythonXY.dll (without the extension) -->
2287db96d56Sopenharmony_ci    <PyDllName>python$(MajorVersionNumber)$(MinorVersionNumber)$(PyDebugExt)</PyDllName>
2297db96d56Sopenharmony_ci    <!-- The name of the resulting pythonX.dll (without the extension) -->
2307db96d56Sopenharmony_ci    <Py3DllName>python3$(PyDebugExt)</Py3DllName>
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci    <!-- The version and platform tag to include in .pyd filenames -->
2337db96d56Sopenharmony_ci    <PydTag Condition="$(ArchName) == 'win32'">.cp$(MajorVersionNumber)$(MinorVersionNumber)-win32</PydTag>
2347db96d56Sopenharmony_ci    <PydTag Condition="$(ArchName) == 'arm32'">.cp$(MajorVersionNumber)$(MinorVersionNumber)-win_arm32</PydTag>
2357db96d56Sopenharmony_ci    <PydTag Condition="$(ArchName) == 'arm64'">.cp$(MajorVersionNumber)$(MinorVersionNumber)-win_arm64</PydTag>
2367db96d56Sopenharmony_ci    <PydTag Condition="$(ArchName) == 'amd64'">.cp$(MajorVersionNumber)$(MinorVersionNumber)-win_amd64</PydTag>
2377db96d56Sopenharmony_ci    
2387db96d56Sopenharmony_ci    <!-- The version number for sys.winver -->
2397db96d56Sopenharmony_ci    <SysWinVer>$(MajorVersionNumber).$(MinorVersionNumber)$(PyArchExt)$(PyTestExt)</SysWinVer>
2407db96d56Sopenharmony_ci  </PropertyGroup>
2417db96d56Sopenharmony_ci  
2427db96d56Sopenharmony_ci  <!-- Displays the calculated version info -->
2437db96d56Sopenharmony_ci  <Target Name="ShowVersionInfo">
2447db96d56Sopenharmony_ci    <Message Importance="high" Text="PythonVersionNumber: $(PythonVersionNumber)" />
2457db96d56Sopenharmony_ci    <Message Importance="high" Text="PythonVersion:       $(PythonVersion)" />
2467db96d56Sopenharmony_ci    <Message Importance="high" Text="PythonVersionHex:    0x$([System.UInt32]::Parse($(PythonVersionHex)).ToString(`X08`))" />
2477db96d56Sopenharmony_ci    <Message Importance="high" Text="PythonVersionUnique: $(MajorVersionNumber).$(MinorVersionNumber).$(Field3Value)" />
2487db96d56Sopenharmony_ci    <Message Importance="high" Text="Field3Value:         $(Field3Value)" />
2497db96d56Sopenharmony_ci    <Message Importance="high" Text="SysWinVer:           $(SysWinVer)" />
2507db96d56Sopenharmony_ci    <Message Importance="high" Text="PyDllName:           $(PyDllName)" />
2517db96d56Sopenharmony_ci    <Message Importance="high" Text="WindowsSdkVersion:   $(TargetPlatformVersion)" />
2527db96d56Sopenharmony_ci  </Target>
2537db96d56Sopenharmony_ci</Project>
254