Skip to content

Commit

Permalink
[python3] Upgrade to Python 3.10.0 (microsoft#20519)
Browse files Browse the repository at this point in the history
* [python3] Update to Python 3.10.0rc2 (for testing).

* [python3] Revert trivial patch changes.

* [python3] Bump to 3.10.0 final.

* x-add-version

* update python tools to 3.10.0

* [ecm] Add patch from upstream for Python 3.10.

Remove this on the next release.

* x-add-version

* [python3] Add patch to fix static interpreter.

* x-add-version
  • Loading branch information
Hoikas authored Oct 6, 2021
1 parent 90e5686 commit 15dab6a
Show file tree
Hide file tree
Showing 14 changed files with 104 additions and 59 deletions.
61 changes: 61 additions & 0 deletions ports/ecm/fix_python_version.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
From 12f4266eb71b30da1df92a5d628d402ea1a45b3b Mon Sep 17 00:00:00 2001
From: Michael Pyne <[email protected]>
Date: Sun, 4 Jul 2021 18:47:45 -0400
Subject: [PATCH] python: Bump maximum version for Python 3 module generator
check.

The proximate problem is that the Python Module generator cmake script
has started failing for people with Python 3.10, which a CMake backtrace
pointing into FindPythonModuleGeneration.cmake with an error of the form
"The max python version in PythonModuleGeneration must be updated."

At least one distro has addressed this by simply patching out modules
that happen to use this CMake module [1].

From what I can tell and the testing I've done, the cause is pretty
simple: The CMake script attempts to find the best Python 3 version by
starting from an impossible version and working backwards until it finds
a version that is installed.

As a sanity check, if the "impossible" version is actually present, it
aborts. But this appears to be just a sanity check, and not any sort of
guard against buggy version handling code later.

While the best fix is probably to start from a known *good* version and
move up until we stop finding better versions, there's problems here
(e.g. a user with 3.6 and 3.8 installed would fail to see 3.7 and so be
left with 3.6 as the "best" match), so I opted just to increase the max
version significantly, and improve the documentation as to what's
happening and whether it is safe to repeat the step again later.

[1]: https://bugs.gentoo.org/746866
---
find-modules/FindPythonModuleGeneration.cmake | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/find-modules/FindPythonModuleGeneration.cmake b/find-modules/FindPythonModuleGeneration.cmake
index 210ba662..6104c1f4 100644
--- a/find-modules/FindPythonModuleGeneration.cmake
+++ b/find-modules/FindPythonModuleGeneration.cmake
@@ -162,14 +162,19 @@ endif()

if (NOT GPB_PYTHON3_LIBRARY)
set(_PYTHON3_MIN_VERSION 4)
- set(_PYTHON3_MAX_VERSION 10)

- _find_python(3 ${_PYTHON3_MAX_VERSION}) # Canary check
+ # This value is safe to increment over time, it is used only as a reasonable
+ # upper bound to start searching from
+ set(_PYTHON3_MAX_VERSION 50)
+
+ _find_python(3 ${_PYTHON3_MAX_VERSION})

if (GPB_PYTHON3_LIBRARY)
message(FATAL_ERROR "The max python version in ${CMAKE_FIND_PACKAGE_NAME} must be updated.")
endif()

+ # Look for the highest supported version of Python 3 by looking for a minor
+ # version that doesn't exist and decrementing until we find a match.
set(_PYTHON3_FIND_VERSION ${_PYTHON3_MAX_VERSION})

while(NOT GPB_PYTHON3_LIBRARY
1 change: 1 addition & 0 deletions ports/ecm/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ vcpkg_from_github(
HEAD_REF master
PATCHES
fix_canberra.patch
fix_python_version.patch # Remove on next release
)

vcpkg_cmake_configure(
Expand Down
2 changes: 1 addition & 1 deletion ports/ecm/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "ecm",
"version": "5.84.0",
"port-version": 1,
"port-version": 2,
"description": "Extra CMake Modules (ECM), extra modules and scripts for CMake",
"homepage": "https://github.com/KDE/extra-cmake-modules",
"dependencies": [
Expand Down
14 changes: 14 additions & 0 deletions ports/python3/0001-static-library.patch
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,20 @@ index 2625d0293d..2f8bdaa931 100644
<PreprocessorDefinitions Condition="$(IncludeExternals)">_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index ac49f7867a..f3583345ff 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -2804,6 +2804,9 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict)
#ifdef MS_COREDLL
SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule));
SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString);
+#elif defined(MS_WINDOWS)
+ SET_SYS("dllhandle", PyLong_FromVoidPtr(NULL));
+ SET_SYS_FROM_STRING("winver", MS_DLL_ID);
#endif
#ifdef ABIFLAGS
SET_SYS_FROM_STRING("abiflags", ABIFLAGS);
--
2.28.0.windows.1

39 changes: 0 additions & 39 deletions ports/python3/0006-fix-duplicate-symbols.patch

This file was deleted.

11 changes: 5 additions & 6 deletions ports/python3/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,15 @@ if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic AND VCPKG_CRT_LINKAGE STREQUAL static
endif()

set(PYTHON_VERSION_MAJOR 3)
set(PYTHON_VERSION_MINOR 9)
set(PYTHON_VERSION_PATCH 7)
set(PYTHON_VERSION_MINOR 10)
set(PYTHON_VERSION_PATCH 0)
set(PYTHON_VERSION ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH})

set(PATCHES
0002-use-vcpkg-zlib.patch
0003-devendor-external-dependencies.patch
0004-dont-copy-vcruntime.patch
0005-only-build-required-projects.patch
0006-fix-duplicate-symbols.patch
)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
list(PREPEND PATCHES 0001-static-library.patch)
Expand All @@ -22,7 +21,7 @@ endif()
# Python 3.9 removed support for Windows 7. This patch re-adds support for Windows 7 and is therefore
# required to build this port on Windows 7 itself due to Python using itself in its own build system.
if("deprecated-win7-support" IN_LIST FEATURES)
list(APPEND PATCHES 0007-restore-support-for-windows-7.patch)
list(APPEND PATCHES 0006-restore-support-for-windows-7.patch)
message(WARNING "Windows 7 support is deprecated and may be removed at any time.")
elseif(VCPKG_TARGET_IS_WINDOWS AND CMAKE_SYSTEM_VERSION EQUAL 6.1)
message(FATAL_ERROR "python3 requires the feature deprecated-win7-support when building on Windows 7.")
Expand All @@ -32,15 +31,15 @@ endif()
if(VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_UWP)
vcpkg_get_windows_sdk(WINSDK_VERSION)
if("${WINSDK_VERSION}" VERSION_GREATER_EQUAL "10.0.22000")
list(APPEND PATCHES "0008-workaround-windows-11-sdk-rc-compiler-error.patch")
list(APPEND PATCHES "0007-workaround-windows-11-sdk-rc-compiler-error.patch")
endif()
endif()

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO python/cpython
REF v${PYTHON_VERSION}
SHA512 05de4e485fb6f5f21e4e48fb4d7ec0e9a420fab243cba08663e52b8062f86df3e4f57b8afd49ad94d363ca0972ab85efe132b980a7f84188c82814b6df0ba191
SHA512 d83e0685c274be09da7833a3c24b7379ae0e43b43c131f11bfaccd5902f6a1c510a3ae67c42471a4281922ead3bd34856608ec47be7dd76ddd734e59906ba03b
HEAD_REF master
PATCHES ${PATCHES}
)
Expand Down
3 changes: 1 addition & 2 deletions ports/python3/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{
"name": "python3",
"version-semver": "3.9.7",
"port-version": 2,
"version-semver": "3.10.0",
"description": "The Python programming language",
"homepage": "https://github.com/python/cpython",
"supports": "!(arm | uwp)",
Expand Down
8 changes: 4 additions & 4 deletions scripts/cmake/vcpkg_find_acquire_program.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -149,20 +149,20 @@ function(vcpkg_find_acquire_program VAR)
elseif(VAR MATCHES "PYTHON3")
if(CMAKE_HOST_WIN32)
set(PROGNAME python)
set(PYTHON_VERSION 3.9.7)
set(PYTHON_VERSION 3.10.0)
if (VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
set(SUBDIR "python-${PYTHON_VERSION}-x86")
set(URL "https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-embed-win32.zip")
set(ARCHIVE "python-${PYTHON_VERSION}-embed-win32.zip")
set(HASH 5f12f693c6df68b75f96b797740a156f2dcd471e96e7980a6e297bbfd064467ba2b2cc9d2f450296388402a8a0b716fce1c4a25b94b50615503d528e33fea870)
set(HASH 0b007bfa02cdd48b3c260986493fa124a6b9d794da6eba2b4fad0d779fd655e9ae4e16daf5f02ff5b30a17abcfc1499bc6bee394c0f8abe933f2d4fe702af3cd)
else()
set(SUBDIR "python-${PYTHON_VERSION}-x64")
set(URL "https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-embed-amd64.zip")
set(ARCHIVE "python-${PYTHON_VERSION}-embed-amd64.zip")
set(HASH 482765de165863f86637591d57141930e2c4ca6e210d0c2569bd0e5fe63157966fb44dea0d5adf249ff15ec9c50cb2dddb704c4ea79369d598f348ee5406f160)
set(HASH 23d81d007698383d8dc088da532dcb86c6ceca7eb78ba5688fc2e18ee7f33f53a5632282873762293b8164556dfb15870f8ffb7abd368faba0a3d8d5d5bc6297)
endif()
set(PATHS ${DOWNLOADS}/tools/python/${SUBDIR})
set(POST_INSTALL_COMMAND ${CMAKE_COMMAND} -E rm python39._pth)
set(POST_INSTALL_COMMAND ${CMAKE_COMMAND} -E rm python310._pth)
else()
set(PROGNAME python3)
set(BREW_PACKAGE_NAME "python")
Expand Down
8 changes: 4 additions & 4 deletions scripts/vcpkgTools.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<?xml version="1.0"?>
<tools version="2">
<tool name="python3" os="windows">
<version>3.9.7</version>
<version>3.10.0</version>
<exeRelativePath>python.exe</exeRelativePath>
<url>https://www.python.org/ftp/python/3.9.7/python-3.9.7-embed-win32.zip</url>
<sha512>5f12f693c6df68b75f96b797740a156f2dcd471e96e7980a6e297bbfd064467ba2b2cc9d2f450296388402a8a0b716fce1c4a25b94b50615503d528e33fea870</sha512>
<archiveName>python-3.9.7-embed-win32.zip</archiveName>
<url>https://www.python.org/ftp/python/3.10.0/python-3.10.0-embed-win32.zip</url>
<sha512>0b007bfa02cdd48b3c260986493fa124a6b9d794da6eba2b4fad0d779fd655e9ae4e16daf5f02ff5b30a17abcfc1499bc6bee394c0f8abe933f2d4fe702af3cd</sha512>
<archiveName>python-3.10.0-embed-win32.zip</archiveName>
</tool>
<tool name="cmake" os="windows">
<version>3.21.1</version>
Expand Down
6 changes: 3 additions & 3 deletions versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -1930,7 +1930,7 @@
},
"ecm": {
"baseline": "5.84.0",
"port-version": 1
"port-version": 2
},
"ecos": {
"baseline": "2.0.8",
Expand Down Expand Up @@ -5337,8 +5337,8 @@
"port-version": 1
},
"python3": {
"baseline": "3.9.7",
"port-version": 2
"baseline": "3.10.0",
"port-version": 0
},
"qca": {
"baseline": "2.3.1",
Expand Down
5 changes: 5 additions & 0 deletions versions/e-/ecm.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "e01bd7b91852c7fa2dffc588bad45167d8d45c6b",
"version": "5.84.0",
"port-version": 2
},
{
"git-tree": "5832b19b778f60eb0fb24654e0c8b665f0f8fb20",
"version": "5.84.0",
Expand Down
5 changes: 5 additions & 0 deletions versions/p-/python3.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "08e4258968ff551133ae315eb8ed207f87f085b6",
"version-semver": "3.10.0",
"port-version": 0
},
{
"git-tree": "3975ee0659914edc75d63f914ac91bb3b7453f0c",
"version-semver": "3.9.7",
Expand Down

0 comments on commit 15dab6a

Please sign in to comment.