From 3efd68c793ce659b760e873c5018636a7ac372fb Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Fri, 10 Sep 2021 09:53:31 +0200 Subject: [PATCH] Reintroduce setup.py changes from #8280 erased by piper import #8902 --- python/setup.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/python/setup.py b/python/setup.py index e531b89168..7450445a12 100755 --- a/python/setup.py +++ b/python/setup.py @@ -16,6 +16,7 @@ import platform # namespace_packages option for the "google" package. from setuptools import setup, Extension, find_packages +from distutils.command.build_ext import build_ext as _build_ext from distutils.command.build_py import build_py as _build_py from distutils.command.clean import clean as _clean from distutils.spawn import find_executable @@ -156,6 +157,20 @@ class build_py(_build_py): return [(pkg, mod, fil) for (pkg, mod, fil) in modules if not any(fnmatch.fnmatchcase(fil, pat=pat) for pat in exclude)] +class build_ext(_build_ext): + def get_ext_filename(self, ext_name): + # since python3.5, python extensions' shared libraries use a suffix that corresponds to the value + # of sysconfig.get_config_var('EXT_SUFFIX') and contains info about the architecture the library targets. + # E.g. on x64 linux the suffix is ".cpython-XYZ-x86_64-linux-gnu.so" + # When crosscompiling python wheels, we need to be able to override this suffix + # so that the resulting file name matches the target architecture and we end up with a well-formed + # wheel. + filename = _build_ext.get_ext_filename(self, ext_name) + orig_ext_suffix = sysconfig.get_config_var("EXT_SUFFIX") + new_ext_suffix = os.getenv("PROTOCOL_BUFFERS_OVERRIDE_EXT_SUFFIX") + if new_ext_suffix and filename.endswith(orig_ext_suffix): + filename = filename[:-len(orig_ext_suffix)] + new_ext_suffix + return filename class test_conformance(_build_py): target = 'test_python' @@ -286,6 +301,7 @@ if __name__ == '__main__': cmdclass={ 'clean': clean, 'build_py': build_py, + 'build_ext': build_ext, 'test_conformance': test_conformance, }, install_requires=install_requires,