From a0885ac42443f91a6a5009e16792e2697c4e2c82 Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Thu, 14 Jul 2022 09:27:05 -0400 Subject: [PATCH] python3-setuptools-rust: update to 1.4.1. --- .../patches/unwind_cross_breakage.patch | 219 ++++++++++++++++++ srcpkgs/python3-setuptools-rust/template | 5 +- 2 files changed, 221 insertions(+), 3 deletions(-) create mode 100644 srcpkgs/python3-setuptools-rust/patches/unwind_cross_breakage.patch diff --git a/srcpkgs/python3-setuptools-rust/patches/unwind_cross_breakage.patch b/srcpkgs/python3-setuptools-rust/patches/unwind_cross_breakage.patch new file mode 100644 index 00000000000..690285c0abf --- /dev/null +++ b/srcpkgs/python3-setuptools-rust/patches/unwind_cross_breakage.patch @@ -0,0 +1,219 @@ +From 8e9892f08b1248dc03862da86915c2745e0ff7ec Mon Sep 17 00:00:00 2001 +From: "Andrew J. Hesford" +Date: Fri, 15 Jul 2022 10:33:02 -0400 +Subject: [PATCH] build_rust: remove linker handling that broke cross + compilation + +--- + setuptools_rust/build.py | 151 ++------------------------------------- + 1 file changed, 7 insertions(+), 144 deletions(-) + +diff --git a/setuptools_rust/build.py b/setuptools_rust/build.py +index 4fe594b..e81ed8f 100644 +--- a/setuptools_rust/build.py ++++ b/setuptools_rust/build.py +@@ -113,23 +113,10 @@ def build_extension( + self, ext: RustExtension, forced_target_triple: Optional[str] = None + ) -> List["_BuiltModule"]: + +- target_info = self._detect_rust_target(forced_target_triple) +- if target_info is not None: +- target_triple = target_info.triple +- cross_lib = target_info.cross_lib +- linker = target_info.linker +- # We're ignoring target_info.linker_args for now because we're not +- # sure if they will always do the right thing. Might help with some +- # of the OS-specific logic if it does. +- +- else: +- target_triple = None +- cross_lib = None +- linker = None +- ++ target_triple = self._detect_rust_target(forced_target_triple) + rustc_cfgs = get_rustc_cfgs(target_triple) + +- env = _prepare_build_environment(cross_lib) ++ env = _prepare_build_environment() + + if not os.path.exists(ext.path): + raise DistutilsFileError( +@@ -150,9 +137,6 @@ def build_extension( + + rustflags = [] + +- if linker is not None: +- rustflags.extend(["-C", "linker=" + linker]) +- + if ext._uses_exec_binding(): + command = [self.cargo, "build", "--manifest-path", ext.path, *cargo_args] + +@@ -407,45 +391,12 @@ def _py_limited_api(self) -> _PyLimitedApi: + + def _detect_rust_target( + self, forced_target_triple: Optional[str] = None +- ) -> Optional["_TargetInfo"]: ++ ) -> Optional[str]: + assert self.plat_name is not None +- cross_compile_info = _detect_unix_cross_compile_info() +- if cross_compile_info is not None: +- cross_target_info = cross_compile_info.to_target_info() +- if forced_target_triple is not None: +- if ( +- cross_target_info is not None +- and not cross_target_info.is_compatible_with(forced_target_triple) +- ): +- self.warn( +- f"Forced Rust target `{forced_target_triple}` is not " +- f"compatible with deduced Rust target " +- f"`{cross_target_info.triple}` - the built package " +- f" may not import successfully once installed." +- ) +- +- # Forcing the target in a cross-compile environment; use +- # the cross-compile information in combination with the +- # forced target +- return _TargetInfo( +- forced_target_triple, +- cross_compile_info.cross_lib, +- cross_compile_info.linker, +- cross_compile_info.linker_args, +- ) +- elif cross_target_info is not None: +- return cross_target_info +- else: +- raise DistutilsPlatformError( +- "Don't know the correct rust target for system type " +- f"{cross_compile_info.host_type}. Please set the " +- "CARGO_BUILD_TARGET environment variable." +- ) +- +- elif forced_target_triple is not None: ++ if forced_target_triple is not None: + # Automatic target detection can be overridden via the CARGO_BUILD_TARGET + # environment variable or --target command line option +- return _TargetInfo.for_triple(forced_target_triple) ++ return forced_target_triple + + # Determine local rust target which needs to be "forced" if necessary + local_rust_target = _adjusted_local_rust_target(self.plat_name) +@@ -457,7 +408,7 @@ def _detect_rust_target( + # check for None first to avoid calling to rustc if not needed + and local_rust_target != get_rust_host() + ): +- return _TargetInfo.for_triple(local_rust_target) ++ return local_rust_target + + return None + +@@ -547,91 +498,6 @@ class _BuiltModule(NamedTuple): + path: str + + +-class _TargetInfo(NamedTuple): +- triple: str +- cross_lib: Optional[str] +- linker: Optional[str] +- linker_args: Optional[str] +- +- @staticmethod +- def for_triple(triple: str) -> "_TargetInfo": +- return _TargetInfo(triple, None, None, None) +- +- def is_compatible_with(self, target: str) -> bool: +- if self.triple == target: +- return True +- +- # the vendor field can be ignored, so x86_64-pc-linux-gnu is compatible +- # with x86_64-unknown-linux-gnu +- if _replace_vendor_with_unknown(self.triple) == target: +- return True +- +- return False +- +- +-class _CrossCompileInfo(NamedTuple): +- host_type: str +- cross_lib: Optional[str] +- linker: Optional[str] +- linker_args: Optional[str] +- +- def to_target_info(self) -> Optional[_TargetInfo]: +- """Maps this cross compile info to target info. +- +- Returns None if the corresponding target information could not be +- deduced. +- """ +- # hopefully an exact match +- targets = get_rust_target_list() +- if self.host_type in targets: +- return _TargetInfo( +- self.host_type, self.cross_lib, self.linker, self.linker_args +- ) +- +- # the vendor field can be ignored, so x86_64-pc-linux-gnu is compatible +- # with x86_64-unknown-linux-gnu +- without_vendor = _replace_vendor_with_unknown(self.host_type) +- if without_vendor is not None and without_vendor in targets: +- return _TargetInfo( +- without_vendor, self.cross_lib, self.linker, self.linker_args +- ) +- +- return None +- +- +-def _detect_unix_cross_compile_info() -> Optional["_CrossCompileInfo"]: +- # See https://github.com/PyO3/setuptools-rust/issues/138 +- # This is to support cross compiling on *NIX, where plat_name isn't +- # necessarily the same as the system we are running on. *NIX systems +- # have more detailed information available in sysconfig. We need that +- # because plat_name doesn't give us information on e.g., glibc vs musl. +- host_type = sysconfig.get_config_var("HOST_GNU_TYPE") +- build_type = sysconfig.get_config_var("BUILD_GNU_TYPE") +- +- if not host_type or host_type == build_type: +- # not *NIX, or not cross compiling +- return None +- +- if "apple-darwin" in host_type and (build_type and "apple-darwin" in build_type): +- # On macos and the build and host differ. This is probably an arm +- # Python which was built on x86_64. Don't try to handle this for now. +- # (See https://github.com/PyO3/setuptools-rust/issues/192) +- return None +- +- stdlib = sysconfig.get_path("stdlib") +- assert stdlib is not None +- cross_lib = os.path.dirname(stdlib) +- +- bldshared = sysconfig.get_config_var("BLDSHARED") +- if not bldshared: +- linker = None +- linker_args = None +- else: +- [linker, _, linker_args] = bldshared.partition(" ") +- +- return _CrossCompileInfo(host_type, cross_lib, linker, linker_args) +- +- + def _replace_vendor_with_unknown(target: str) -> Optional[str]: + """Replaces vendor in the target triple with unknown. + +@@ -644,7 +510,7 @@ def _replace_vendor_with_unknown(target: str) -> Optional[str]: + return "-".join(components) + + +-def _prepare_build_environment(cross_lib: Optional[str]) -> Dict[str, str]: ++def _prepare_build_environment() -> Dict[str, str]: + """Prepares environment variables to use when executing cargo build.""" + + # Make sure that if pythonXX-sys is used, it builds against the current +@@ -665,9 +531,6 @@ def _prepare_build_environment(cross_lib: Optional[str]) -> Dict[str, str]: + } + ) + +- if cross_lib: +- env.setdefault("PYO3_CROSS_LIB_DIR", cross_lib) +- + env.pop("CARGO", None) + return env + diff --git a/srcpkgs/python3-setuptools-rust/template b/srcpkgs/python3-setuptools-rust/template index 7c91b644872..2fa8c12f45a 100644 --- a/srcpkgs/python3-setuptools-rust/template +++ b/srcpkgs/python3-setuptools-rust/template @@ -1,7 +1,6 @@ # Template file for 'python3-setuptools-rust' pkgname=python3-setuptools-rust -reverts="1.4.1_1" -version=1.3.0 +version=1.4.1 revision=2 wrksrc="${pkgname#python3-}-${version}" build_style=python3-module @@ -13,7 +12,7 @@ license="MIT" homepage="https://github.com/PyO3/setuptools-rust" changelog="https://raw.githubusercontent.com/PyO3/setuptools-rust/master/CHANGELOG.md" distfiles="${PYPI_SITE}/s/setuptools-rust/setuptools-rust-${version}.tar.gz" -checksum=958c5bf4ab6483d59dab888538121871cc5006354a42fb0fbd50acf03caad1de +checksum=18ff850831f58ee21d5783825c99fad632da21e47645e9427fd7dec048029e76 # Tests have unpackaged dependencies make_check=no