Skip to content

Commit

Permalink
Enabled android-ndk to work with Python 3.13+
Browse files Browse the repository at this point in the history
distutils was dropped from Python 3.13. Fortunately, our usage of
android-ndk only relied on distutils.dir_util.copy_tree() in
build/tools/make_standalone_toolchain.py which
is easy to replace with shutil.copytree(). That is done via a small
patch.

Note that there are more references to distutils in the following
files but it looks like our CI/CD flows aren't affected by those:

sources/third_party/shaderc/third_party/spirv-tools/utils/generate_registry_tables.py
sources/third_party/vulkan/src/scripts/update_deps.py
prebuilt/linux-x86_64/bin/python2.7-config
prebuilt/linux-x86_64/bin/python-config
prebuilt/linux-x86_64/bin/python2-config
various files under prebuilt/linux-x86_64/lib/python2.7/
python-packages/fastboot/setup.py
python-packages/adb/setup.py
  • Loading branch information
veloman-yunkan committed Mar 5, 2025
1 parent 8a911cc commit 2c96505
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
4 changes: 4 additions & 0 deletions kiwixbuild/dependencies/tc_android_ndk.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ class Source(ReleaseDownload):
def source_dir(self):
return self.target.full_name()

patches = [
"android-ndk-r21e-linux-x86_64-python3.13+.patch",
]

class Builder(Builder):
@property
def install_path(self):
Expand Down
26 changes: 26 additions & 0 deletions kiwixbuild/patches/android-ndk-r21e-linux-x86_64-python3.13+.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
--- android-ndk-r21e/build/tools/make_standalone_toolchain.py.orig 2025-03-04 20:48:14.681288830 +0400
+++ android-ndk-r21e/build/tools/make_standalone_toolchain.py 2025-03-05 12:10:47.252578915 +0400
@@ -21,7 +21,6 @@
"""
import argparse
import atexit
-from distutils.dir_util import copy_tree
import inspect
import logging
import os
@@ -221,13 +220,13 @@

def create_toolchain(install_path, arch, api, toolchain_path, host_tag):
"""Create a standalone toolchain."""
- copy_tree(toolchain_path, install_path)
+ shutil.copytree(toolchain_path, install_path)
triple = get_triple(arch)
make_clang_scripts(install_path, arch, api, host_tag == 'windows-x86_64')
replace_gcc_wrappers(install_path, triple, host_tag == 'windows-x86_64')

prebuilt_path = os.path.join(NDK_DIR, 'prebuilt', host_tag)
- copy_tree(prebuilt_path, install_path)
+ shutil.copytree(prebuilt_path, install_path, dirs_exist_ok=True)

gdbserver_path = os.path.join(
NDK_DIR, 'prebuilt', 'android-' + arch, 'gdbserver')

0 comments on commit 2c96505

Please sign in to comment.