From b002825f28966905b0224f9649d0e6f05c491275 Mon Sep 17 00:00:00 2001 From: Fabio Valentini Date: Sat, 29 Jul 2023 16:52:29 +0200 Subject: [PATCH] Update to version 1.1.12; Fixes RHBZ#2224862 --- .gitignore | 1 + ...use-pkg-config-to-link-with-system-z.patch | 277 ++++++++++++++++++ libz-sys-fix-metadata-auto.diff | 8 - libz-sys-fix-metadata.diff | 10 +- rust-libz-sys.spec | 7 +- sources | 2 +- 6 files changed, 289 insertions(+), 16 deletions(-) create mode 100644 0001-unconditionally-use-pkg-config-to-link-with-system-z.patch delete mode 100644 libz-sys-fix-metadata-auto.diff diff --git a/.gitignore b/.gitignore index dd865ff..b2d3b18 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ /libz-sys-1.1.6.crate /libz-sys-1.1.8.crate /libz-sys-1.1.9.crate +/libz-sys-1.1.12.crate diff --git a/0001-unconditionally-use-pkg-config-to-link-with-system-z.patch b/0001-unconditionally-use-pkg-config-to-link-with-system-z.patch new file mode 100644 index 0000000..9afbea6 --- /dev/null +++ b/0001-unconditionally-use-pkg-config-to-link-with-system-z.patch @@ -0,0 +1,277 @@ +From 1d8cd791f014ff2a3e043730eaaaf3b7c5be114f Mon Sep 17 00:00:00 2001 +From: Fabio Valentini +Date: Sat, 29 Jul 2023 16:48:39 +0200 +Subject: [PATCH] unconditionally use pkg-config to link with system zlib + +--- + build.rs | 188 ++------------------------------------------------- + build_zng.rs | 60 ---------------- + 2 files changed, 5 insertions(+), 243 deletions(-) + delete mode 100644 build_zng.rs + +diff --git a/build.rs b/build.rs +index 51ebe6b..8d1acf7 100644 +--- a/build.rs ++++ b/build.rs +@@ -1,187 +1,9 @@ +-use std::env; +-use std::fs; +-use std::path::PathBuf; +- + fn main() { +- println!("cargo:rerun-if-env-changed=LIBZ_SYS_STATIC"); + println!("cargo:rerun-if-changed=build.rs"); +- let host = env::var("HOST").unwrap(); +- let target = env::var("TARGET").unwrap(); +- +- let host_and_target_contain = |s| host.contains(s) && target.contains(s); +- +- let want_ng = cfg!(feature = "zlib-ng") && !cfg!(feature = "stock-zlib"); +- +- if want_ng && target != "wasm32-unknown-unknown" { +- return build_zlib_ng(&target, true); +- } +- +- // Don't run pkg-config if we're linking statically (we'll build below) and +- // also don't run pkg-config on FreeBSD/DragonFly. That'll end up printing +- // `-L /usr/lib` which wreaks havoc with linking to an OpenSSL in /usr/local/lib +- // (Ports, etc.) +- let want_static = +- cfg!(feature = "static") || env::var("LIBZ_SYS_STATIC").unwrap_or(String::new()) == "1"; +- if !want_static && +- !target.contains("msvc") && // pkg-config just never works here +- !(host_and_target_contain("freebsd") || +- host_and_target_contain("dragonfly")) +- { +- // Don't print system lib dirs to cargo since this interferes with other +- // packages adding non-system search paths to link against libraries +- // that are also found in a system-wide lib dir. +- let zlib = pkg_config::Config::new() +- .cargo_metadata(true) +- .print_system_libs(false) +- .probe("zlib"); +- match zlib { +- Ok(_) => return, +- Err(e) => { +- println!("cargo-warning={}", e.to_string()) +- } +- } +- } +- +- if target.contains("windows") { +- if try_vcpkg() { +- return; +- } +- } +- +- // All android compilers should come with libz by default, so let's just use +- // the one already there. Likewise, Haiku always ships with libz, so we can +- // link to it even when cross-compiling. +- if target.contains("android") || target.contains("haiku") { +- println!("cargo:rustc-link-lib=z"); +- return; +- } +- +- let mut cfg = cc::Build::new(); +- +- // Situations where we build unconditionally. +- // +- // MSVC basically never has it preinstalled, MinGW picks up a bunch of weird +- // paths we don't like, `want_static` may force us, and cross compiling almost +- // never has a prebuilt version. +- // +- // Apple platforms have libz.1.dylib, and it's usually available even when +- // cross compiling (via fat binary or in the target's Xcode SDK) +- let cross_compiling = target != host; +- let apple_to_apple = host.contains("-apple-") && target.contains("-apple-"); +- if target.contains("msvc") +- || target.contains("pc-windows-gnu") +- || want_static +- || (cross_compiling && !apple_to_apple) +- { +- return build_zlib(&mut cfg, &target); +- } +- +- // If we've gotten this far we're probably a pretty standard platform. +- // Almost all platforms here ship libz by default, but some don't have +- // pkg-config files that we would find above. +- // +- // In any case test if zlib is actually installed and if so we link to it, +- // otherwise continue below to build things. +- if zlib_installed(&mut cfg) { +- println!("cargo:rustc-link-lib=z"); +- return; +- } +- +- build_zlib(&mut cfg, &target) +-} +- +-fn build_zlib(cfg: &mut cc::Build, target: &str) { +- let dst = PathBuf::from(env::var_os("OUT_DIR").unwrap()); +- let lib = dst.join("lib"); +- +- cfg.warnings(false).out_dir(&lib).include("src/zlib"); +- +- cfg.file("src/zlib/adler32.c") +- .file("src/zlib/compress.c") +- .file("src/zlib/crc32.c") +- .file("src/zlib/deflate.c") +- .file("src/zlib/infback.c") +- .file("src/zlib/inffast.c") +- .file("src/zlib/inflate.c") +- .file("src/zlib/inftrees.c") +- .file("src/zlib/trees.c") +- .file("src/zlib/uncompr.c") +- .file("src/zlib/zutil.c"); +- +- if !cfg!(feature = "libc") || target.starts_with("wasm32") { +- cfg.define("Z_SOLO", None); +- } else { +- cfg.file("src/zlib/gzclose.c") +- .file("src/zlib/gzlib.c") +- .file("src/zlib/gzread.c") +- .file("src/zlib/gzwrite.c"); +- } +- +- if !target.contains("windows") { +- cfg.define("STDC", None); +- cfg.define("_LARGEFILE64_SOURCE", None); +- cfg.define("_POSIX_SOURCE", None); +- cfg.flag("-fvisibility=hidden"); +- } +- if target.contains("apple") { +- cfg.define("_C99_SOURCE", None); +- } +- if target.contains("solaris") { +- cfg.define("_XOPEN_SOURCE", "700"); +- } +- +- cfg.compile("z"); +- +- fs::create_dir_all(dst.join("include")).unwrap(); +- fs::copy("src/zlib/zlib.h", dst.join("include/zlib.h")).unwrap(); +- fs::copy("src/zlib/zconf.h", dst.join("include/zconf.h")).unwrap(); +- +- fs::create_dir_all(lib.join("pkgconfig")).unwrap(); +- fs::write( +- lib.join("pkgconfig/zlib.pc"), +- fs::read_to_string("src/zlib/zlib.pc.in") +- .unwrap() +- .replace("@prefix@", dst.to_str().unwrap()), +- ) +- .unwrap(); +- +- println!("cargo:root={}", dst.to_str().unwrap()); +- println!("cargo:rustc-link-search=native={}", lib.to_str().unwrap()); +- println!("cargo:include={}/include", dst.to_str().unwrap()); +-} +- +-#[cfg(not(feature = "zlib-ng"))] +-fn build_zlib_ng(_target: &str, _compat: bool) {} +- +-#[cfg(feature = "zlib-ng")] +-mod build_zng; +-#[cfg(feature = "zlib-ng")] +-use build_zng::build_zlib_ng; +- +-fn try_vcpkg() -> bool { +- // see if there is a vcpkg tree with zlib installed +- match vcpkg::Config::new() +- .emit_includes(true) +- .find_package("zlib") +- { +- Ok(_) => true, +- Err(e) => { +- println!("note, vcpkg did not find zlib: {}", e); +- false +- } +- } +-} +- +-fn zlib_installed(cfg: &mut cc::Build) -> bool { +- let mut cmd = cfg.get_compiler().to_command(); +- cmd.arg("src/smoke.c").arg("-o").arg("/dev/null").arg("-lz"); +- +- println!("running {:?}", cmd); +- if let Ok(status) = cmd.status() { +- if status.success() { +- return true; +- } +- } + +- false ++ pkg_config::Config::new() ++ .cargo_metadata(true) ++ .print_system_libs(false) ++ .probe("zlib") ++ .unwrap(); + } +diff --git a/build_zng.rs b/build_zng.rs +deleted file mode 100644 +index 2557625..0000000 +--- a/build_zng.rs ++++ /dev/null +@@ -1,60 +0,0 @@ +-use std::env; +- +-pub fn build_zlib_ng(target: &str, compat: bool) { +- let mut cmake = cmake::Config::new("src/zlib-ng"); +- cmake +- .define("BUILD_SHARED_LIBS", "OFF") +- .define("ZLIB_COMPAT", if compat { "ON" } else { "OFF" }) +- .define("ZLIB_ENABLE_TESTS", "OFF") +- .define("WITH_GZFILEOP", "ON"); +- if target.contains("s390x") { +- // Enable hardware compression on s390x. +- cmake +- .define("WITH_DFLTCC_DEFLATE", "1") +- .define("WITH_DFLTCC_INFLATE", "1") +- .cflag("-DDFLTCC_LEVEL_MASK=0x7e"); +- } +- if target == "i686-pc-windows-msvc" { +- cmake.define("CMAKE_GENERATOR_PLATFORM", "Win32"); +- } +- +- let install_dir = cmake.build(); +- +- let includedir = install_dir.join("include"); +- let libdir = install_dir.join("lib"); +- let libdir64 = install_dir.join("lib64"); +- println!( +- "cargo:rustc-link-search=native={}", +- libdir.to_str().unwrap() +- ); +- println!( +- "cargo:rustc-link-search=native={}", +- libdir64.to_str().unwrap() +- ); +- let mut debug_suffix = ""; +- let libname = if target.contains("windows") && target.contains("msvc") { +- if env::var("OPT_LEVEL").unwrap() == "0" { +- debug_suffix = "d"; +- } +- "zlibstatic" +- } else { +- "z" +- }; +- println!( +- "cargo:rustc-link-lib=static={}{}{}", +- libname, +- if compat { "" } else { "-ng" }, +- debug_suffix, +- ); +- println!("cargo:root={}", install_dir.to_str().unwrap()); +- println!("cargo:include={}", includedir.to_str().unwrap()); +- if !compat { +- println!("cargo:rustc-cfg=zng"); +- } +-} +- +-#[allow(dead_code)] +-fn main() { +- let target = env::var("TARGET").unwrap(); +- build_zlib_ng(&target, false); +-} +-- +2.41.0 + diff --git a/libz-sys-fix-metadata-auto.diff b/libz-sys-fix-metadata-auto.diff deleted file mode 100644 index 95d5703..0000000 --- a/libz-sys-fix-metadata-auto.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- libz-sys-1.1.9/Cargo.toml 1970-01-01T00:00:01+00:00 -+++ libz-sys-1.1.9/Cargo.toml 2023-05-01T11:31:00.134761+00:00 -@@ -66,5 +66,3 @@ - "cmake", - ] - --[target."cfg(target_env = \"msvc\")".build-dependencies.vcpkg] --version = "0.2" diff --git a/libz-sys-fix-metadata.diff b/libz-sys-fix-metadata.diff index 98ee0ff..6baba85 100644 --- a/libz-sys-fix-metadata.diff +++ b/libz-sys-fix-metadata.diff @@ -1,6 +1,6 @@ ---- libz-sys-1.1.9/Cargo.toml 1970-01-01T00:00:01+00:00 -+++ libz-sys-1.1.9/Cargo.toml 2023-05-01T11:31:33.242720+00:00 -@@ -46,23 +46,12 @@ +--- libz-sys-1.1.12/Cargo.toml 1970-01-01T00:00:01+00:00 ++++ libz-sys-1.1.12/Cargo.toml 2023-07-29T14:43:10.223812+00:00 +@@ -47,25 +47,12 @@ [build-dependencies.cc] version = "1.0.18" @@ -11,6 +11,9 @@ [build-dependencies.pkg-config] version = "0.3.9" +-[build-dependencies.vcpkg] +-version = "0.2" +- [features] -asm = [] default = [ @@ -23,4 +26,3 @@ - "libc", - "cmake", -] -- diff --git a/rust-libz-sys.spec b/rust-libz-sys.spec index 49e176c..d121dc7 100644 --- a/rust-libz-sys.spec +++ b/rust-libz-sys.spec @@ -5,18 +5,19 @@ %global crate libz-sys Name: rust-libz-sys -Version: 1.1.9 +Version: 1.1.12 Release: %autorelease Summary: Low-level bindings to the system libz library (also known as zlib) License: MIT OR Apache-2.0 URL: https://crates.io/crates/libz-sys Source: %{crates_source} -# Automatically generated patch to strip foreign dependencies -Patch: libz-sys-fix-metadata-auto.diff # Manually created patch for downstream crate metadata changes # * drop features for zlib-ng, static linking, and unavailalbe asm optimizations Patch: libz-sys-fix-metadata.diff +# * remove code related to building vendored zlib / zlib-ng sources +# * unconditionally use pkg-config to link with system libz +Patch: 0001-unconditionally-use-pkg-config-to-link-with-system-z.patch BuildRequires: rust-packaging >= 21 diff --git a/sources b/sources index 72e9b4b..89b34c9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (libz-sys-1.1.9.crate) = 0d474b79aa55f1cdda8f52c87fd2cde84da80db5e18485b3e6845d40c49c6f3b3b92ae73e286b06acbc0e05f36ef3975231fb57e1b5b6546ad90a46752fa88b2 +SHA512 (libz-sys-1.1.12.crate) = 03daeb5f03193887b692cbe8d631c83ac632f3e92fca4f10e881058fea38d85e11c090de04be9d70d52a22dec669474a0044a3d45d4adeb3a0f39e3398cdac11