From d4a2ec057ce6918509c622b7d388dd324cc29853 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Tue, 22 Nov 2022 22:12:50 +0100 Subject: [PATCH] [python] fix platform specific wheel to be spec compliant (#23703) * [python] fix platform specific wheel to be spec compliant The current build approach causes bdist_wheel to store the shared library in the purelib folder. However, a platform specific wheel should have shared libraries in the platform specific folder, not in the purelib folder. This has been discovered using `auditwheel check`: ``` RuntimeError: Invalid binary wheel, found the following shared library/libraries in purelib folder: _ChipDeviceCtrl.so The wheel has to be platlib compliant in order to be repaired by auditwheel. ``` This makes the wheel pass `auditwheel check`. * Restyled by autopep8 Co-authored-by: Restyled.io --- src/controller/python/build-chip-wheel.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/controller/python/build-chip-wheel.py b/src/controller/python/build-chip-wheel.py index e3ab5312cadc16..70949c3556b77c 100644 --- a/src/controller/python/build-chip-wheel.py +++ b/src/controller/python/build-chip-wheel.py @@ -23,7 +23,7 @@ from __future__ import absolute_import from datetime import datetime -from setuptools import setup +from setuptools import setup, Distribution from wheel.bdist_wheel import bdist_wheel import argparse @@ -56,6 +56,14 @@ def __init__(self, name): self.name = name self.installName = os.path.splitext(name)[0] +# Make sure wheel is not considered pure and avoid shared libraries in purelib +# folder. + + +class BinaryDistribution(Distribution): + def has_ext_modules(foo): + return True + packageName = args.package_name libName = args.lib_name @@ -103,13 +111,6 @@ def __init__(self, name): os.rename(os.path.join(tmpDir, script.name), os.path.join(tmpDir, script.installName)) - # Define a custom version of the bdist_wheel command that configures the - # resultant wheel as platform-specific (i.e. not "pure"). - class bdist_wheel_override(bdist_wheel): - def finalize_options(self): - bdist_wheel.finalize_options(self) - self.root_is_pure = False - requiredPackages = manifest['package_reqs'] # @@ -164,9 +165,7 @@ def finalize_options(self): 'egg_base': tmpDir } }, - cmdclass={ - 'bdist_wheel': bdist_wheel_override - } if libName else {}, + distclass=BinaryDistribution if libName else None, script_args=['clean', '--all', 'bdist_wheel'] )