def get_dylib_ext_path(self, ext: RustExtension, target_fname: str) -> str: build_ext = self.get_finalized_command("build_ext") bdist_wheel = self.get_finalized_command("bdist_wheel") filename = build_ext.get_ext_fullpath(target_fname) if ((ext.py_limited_api == "auto" and bdist_wheel.py_limited_api) or (ext.py_limited_api)): abi3_suffix = get_abi3_suffix() if abi3_suffix is not None: so_ext = get_config_var('EXT_SUFFIX') filename = filename[:-len(so_ext)] + get_abi3_suffix() return filename
def test_abi3_filename(self): """ Filename needs to be loadable by several versions of Python 3 if 'is_abi3' is truthy on Extension() """ print(get_abi3_suffix()) extension = Extension('spam.eggs', ['eggs.c'], py_limited_api=True) dist = Distribution(dict(ext_modules=[extension])) cmd = build_ext(dist) cmd.finalize_options() assert 'spam.eggs' in cmd.ext_map res = cmd.get_ext_filename('spam.eggs') if six.PY2 or not get_abi3_suffix(): assert res.endswith(get_config_var('SO')) elif sys.platform == 'win32': assert res.endswith('eggs.pyd') else: assert 'abi3' in res
def get_dylib_ext_path(self, ext: RustExtension, target_fname: str) -> str: assert self.plat_name is not None build_ext = cast(CommandBuildExt, self.get_finalized_command("build_ext")) ext_path: str = build_ext.get_ext_fullpath(target_fname) if _is_py_limited_api(ext.py_limited_api, self._py_limited_api()): abi3_suffix = get_abi3_suffix() if abi3_suffix is not None: so_ext = get_config_var("EXT_SUFFIX") assert isinstance(so_ext, str) ext_path = ext_path[:-len(so_ext)] + get_abi3_suffix() if ".abi3." in ext_path: return ext_path # Examples: linux_x86_64, linux_i686, manylinux2014_aarch64, manylinux_2_24_armv7l plat_name = self.plat_name.lower().replace("-", "_").replace(".", "_") if not plat_name.startswith(("linux", "manylinux")): return ext_path arch_parts = [] arch_found = False for item in plat_name.split("_"): if item.startswith(("linux", "manylinux")): continue if item.isdigit() and not arch_found: # manylinux_2_24_armv7l arch should be armv7l continue arch_found = True arch_parts.append(item) target_arch = "_".join(arch_parts) host_platform = sysconfig.get_platform() host_arch = host_platform.rsplit("-", 1)[1] # Remove incorrect platform tag if we are cross compiling if target_arch and host_arch != target_arch: ext_path, _, extension = _split_platform_and_extension(ext_path) # rust.so, removed platform tag ext_path += extension return ext_path