From 7ce76cb1e6b0dfe903b24dea6707fc922095f64b Mon Sep 17 00:00:00 2001 From: tigro Date: Mon, 15 Jan 2024 20:41:01 +0300 Subject: [PATCH] import rust-cargo-c-0.9.27-2.el9 --- SOURCES/352.patch | 574 ++++++++++++++++++++++ SOURCES/cargo-c-0.9.27+cargo-0.74.0.crate | Bin 0 -> 45836 bytes SOURCES/cargo-c-fix-metadata-auto.diff | 28 ++ SOURCES/cargo-c-fix-metadata.diff | 17 +- SOURCES/macros.cargo-c | 26 + SPECS/rust-cargo-c.spec | 63 ++- 6 files changed, 682 insertions(+), 26 deletions(-) create mode 100644 SOURCES/352.patch create mode 100644 SOURCES/cargo-c-0.9.27+cargo-0.74.0.crate create mode 100644 SOURCES/cargo-c-fix-metadata-auto.diff create mode 100644 SOURCES/macros.cargo-c diff --git a/SOURCES/352.patch b/SOURCES/352.patch new file mode 100644 index 0000000..9afa864 --- /dev/null +++ b/SOURCES/352.patch @@ -0,0 +1,574 @@ +From d50a978efb8e538db90dad7128cc74f19ec2bc8d Mon Sep 17 00:00:00 2001 +From: kpcyrd +Date: Sat, 11 Nov 2023 19:45:00 +0100 +Subject: [PATCH 1/2] Add version_suffix_components setting + +--- + README.md | 4 ++ + src/build.rs | 102 +++++++++++++++++++++++++++++++++++++++++- + src/install.rs | 25 ++++++----- + src/lib.rs | 15 ------- + src/pkg_config_gen.rs | 1 + + src/target.rs | 7 ++- + 6 files changed, 122 insertions(+), 32 deletions(-) + +diff --git a/README.md b/README.md +index e53231b..5a651d0 100644 +--- a/README.md ++++ b/README.md +@@ -135,6 +135,10 @@ version = "1.2.3" + install_subdir = "gstreamer-1.0" + # Used to disable versioning links when installing the dynamic library + versioning = false ++# Instead of using semver, select a fixed number of version components for your SONAME version suffix: ++# Setting this to 1 with a version of 0.0.0 allows a suffix of `.so.0` ++# Setting this to 3 always includes the full version in the SONAME (indicate any update is ABI breaking) ++#version_suffix_components = 2 + # Add `-Cpanic=abort` to the RUSTFLAGS automatically, it may be useful in case + # something might panic in the crates used by the library. + rustflags = "-Cpanic=abort" +diff --git a/src/build.rs b/src/build.rs +index 4e8279f..45c4538 100644 +--- a/src/build.rs ++++ b/src/build.rs +@@ -14,6 +14,7 @@ use cargo::util::command_prelude::{ArgMatches, ArgMatchesExt, CompileMode, Profi + use cargo::util::interning::InternedString; + use cargo::{CliResult, Config}; + ++use anyhow::Context as _; + use cargo_util::paths::{copy, create, create_dir_all, open, read, read_bytes, write}; + use semver::Version; + +@@ -406,10 +407,33 @@ pub struct LibraryCApiConfig { + pub version: Version, + pub install_subdir: Option, + pub versioning: bool, ++ pub version_suffix_components: Option, + pub import_library: bool, + pub rustflags: Vec, + } + ++impl LibraryCApiConfig { ++ pub fn sover(&self) -> anyhow::Result { ++ let major = self.version.major; ++ let minor = self.version.minor; ++ let patch = self.version.patch; ++ ++ let sover = match self.version_suffix_components { ++ None => match (major, minor, patch) { ++ (0, 0, patch) => format!("0.0.{patch}"), ++ (0, minor, _) => format!("0.{minor}"), ++ (major, _, _) => format!("{major}"), ++ }, ++ Some(1) => format!("{major}"), ++ Some(2) => format!("{major}.{minor}"), ++ Some(3) => format!("{major}.{minor}.{patch}"), ++ Some(num) => anyhow::bail!("Unexpected number of suffix components: {num}"), ++ }; ++ ++ Ok(sover) ++ } ++} ++ + #[derive(Debug, Default)] + pub struct InstallCApiConfig { + pub include: Vec, +@@ -619,6 +643,7 @@ fn load_manifest_capi_config(pkg: &Package) -> anyhow::Result { + let mut version = pkg.version().clone(); + let mut install_subdir = None; + let mut versioning = true; ++ let mut version_suffix_components = None; + let mut import_library = true; + let mut rustflags = Vec::new(); + +@@ -636,6 +661,17 @@ fn load_manifest_capi_config(pkg: &Package) -> anyhow::Result { + .get("versioning") + .and_then(|v| v.as_bool()) + .unwrap_or(true); ++ ++ if let Some(value) = library.get("version_suffix_components") { ++ let value = value.as_integer().with_context(|| { ++ format!("Value for `version_suffix_components` is not an integer: {value:?}") ++ })?; ++ let value = value ++ .try_into() ++ .with_context(|| format!("Value is too large: {value:?}"))?; ++ version_suffix_components = Some(value); ++ } ++ + import_library = library + .get("import_library") + .and_then(|v| v.as_bool()) +@@ -655,6 +691,7 @@ fn load_manifest_capi_config(pkg: &Package) -> anyhow::Result { + version, + install_subdir, + versioning, ++ version_suffix_components, + import_library, + rustflags, + }; +@@ -886,7 +923,7 @@ fn compile_with_exec( + let pkg_rustflags = &capi_config.library.rustflags; + + let mut leaf_args: Vec = rustc_target +- .shared_object_link_args(&capi_config, &install_paths.libdir, root_output) ++ .shared_object_link_args(&capi_config, &install_paths.libdir, root_output)? + .into_iter() + .flat_map(|l| vec!["-C".to_string(), format!("link-arg={l}")]) + .collect(); +@@ -1246,3 +1283,66 @@ pub fn ctest( + + ops::run_tests(ws, &ops, &test_args) + } ++ ++#[cfg(test)] ++mod tests { ++ use super::*; ++ use semver::Version; ++ ++ fn make_test_library_config(version: &str) -> LibraryCApiConfig { ++ LibraryCApiConfig { ++ name: "example".to_string(), ++ version: Version::parse(version).unwrap(), ++ install_subdir: None, ++ versioning: true, ++ version_suffix_components: None, ++ import_library: true, ++ rustflags: vec![], ++ } ++ } ++ ++ #[test] ++ pub fn test_semver_zero_zero_zero() { ++ let library = make_test_library_config("0.0.0"); ++ let sover = library.sover().unwrap(); ++ assert_eq!(sover, "0.0.0"); ++ } ++ ++ #[test] ++ pub fn test_semver_zero_one_zero() { ++ let library = make_test_library_config("0.1.0"); ++ let sover = library.sover().unwrap(); ++ assert_eq!(sover, "0.1"); ++ } ++ ++ #[test] ++ pub fn test_semver_one_zero_zero() { ++ let library = make_test_library_config("1.0.0"); ++ let sover = library.sover().unwrap(); ++ assert_eq!(sover, "1"); ++ } ++ ++ #[test] ++ pub fn text_one_fixed_zero_zero_zero() { ++ let mut library = make_test_library_config("0.0.0"); ++ library.version_suffix_components = Some(1); ++ let sover = library.sover().unwrap(); ++ assert_eq!(sover, "0"); ++ } ++ ++ #[test] ++ pub fn text_two_fixed_one_zero_zero() { ++ let mut library = make_test_library_config("1.0.0"); ++ library.version_suffix_components = Some(2); ++ let sover = library.sover().unwrap(); ++ assert_eq!(sover, "1.0"); ++ } ++ ++ #[test] ++ pub fn text_three_fixed_one_zero_zero() { ++ let mut library = make_test_library_config("1.0.0"); ++ library.version_suffix_components = Some(3); ++ let sover = library.sover().unwrap(); ++ assert_eq!(sover, "1.0.0"); ++ } ++} +diff --git a/src/install.rs b/src/install.rs +index d0725b9..9ad4104 100644 +--- a/src/install.rs ++++ b/src/install.rs +@@ -3,11 +3,9 @@ use std::path::{Component, Path, PathBuf}; + + use cargo::core::Workspace; + use cargo_util::paths::{copy, create_dir_all}; +-use semver::Version; + + use crate::build::*; + use crate::build_targets::BuildTargets; +-use crate::VersionExt; + + fn append_to_destdir(destdir: Option<&Path>, path: &Path) -> PathBuf { + if let Some(destdir) = destdir { +@@ -107,8 +105,13 @@ pub(crate) struct UnixLibNames { + } + + impl UnixLibNames { +- pub(crate) fn new(lib_type: LibType, lib_name: &str, lib_version: &Version) -> Option { +- let main_version = lib_version.main_version(); ++ pub(crate) fn new( ++ lib_type: LibType, ++ library: &LibraryCApiConfig, ++ ) -> anyhow::Result> { ++ let lib_name = &library.name; ++ let lib_version = &library.version; ++ let main_version = library.sover()?; + + match lib_type { + LibType::So => { +@@ -119,11 +122,11 @@ impl UnixLibNames { + ); + let lib_with_main_ver = format!("{}.{}", lib, main_version); + +- Some(Self { ++ Ok(Some(Self { + canonical: lib, + with_main_ver: lib_with_main_ver, + with_full_ver: lib_with_full_ver, +- }) ++ })) + } + LibType::Dylib => { + let lib = format!("lib{lib_name}.dylib"); +@@ -133,13 +136,13 @@ impl UnixLibNames { + "lib{}.{}.{}.{}.dylib", + lib_name, lib_version.major, lib_version.minor, lib_version.patch + ); +- Some(Self { ++ Ok(Some(Self { + canonical: lib, + with_main_ver: lib_with_main_ver, + with_full_ver: lib_with_full_ver, +- }) ++ })) + } +- LibType::Windows => None, ++ LibType::Windows => Ok(None), + } + } + +@@ -236,12 +239,10 @@ pub fn cinstall(ws: &Workspace, packages: &[CPackage]) -> anyhow::Result<()> { + if let Some(ref shared_lib) = build_targets.shared_lib { + ws.config().shell().status("Installing", "shared library")?; + +- let lib_name = &capi_config.library.name; + let lib_type = LibType::from_build_targets(build_targets); + match lib_type { + LibType::So | LibType::Dylib => { +- let lib = UnixLibNames::new(lib_type, lib_name, &capi_config.library.version) +- .unwrap(); ++ let lib = UnixLibNames::new(lib_type, &capi_config.library)?.unwrap(); + lib.install(capi_config, shared_lib, &install_path_lib)?; + } + LibType::Windows => { +diff --git a/src/lib.rs b/src/lib.rs +index 66d7b9b..c63a297 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -5,18 +5,3 @@ pub mod config; + pub mod install; + pub mod pkg_config_gen; + pub mod target; +- +-trait VersionExt { +- /// build the main version string +- fn main_version(&self) -> String; +-} +- +-impl VersionExt for semver::Version { +- fn main_version(&self) -> String { +- match (self.major, self.minor, self.patch) { +- (0, 0, patch) => format!("0.0.{patch}"), +- (0, minor, _) => format!("0.{minor}"), +- (major, _, _) => format!("{major}"), +- } +- } +-} +diff --git a/src/pkg_config_gen.rs b/src/pkg_config_gen.rs +index 91d8b4d..c825d95 100644 +--- a/src/pkg_config_gen.rs ++++ b/src/pkg_config_gen.rs +@@ -298,6 +298,7 @@ mod test { + version: Version::parse("0.1.0").unwrap(), + install_subdir: None, + versioning: true, ++ version_suffix_components: None, + import_library: true, + rustflags: Vec::default(), + }, +diff --git a/src/target.rs b/src/target.rs +index 136cf54..7ada1be 100644 +--- a/src/target.rs ++++ b/src/target.rs +@@ -3,7 +3,6 @@ use std::path::Path; + use anyhow::*; + + use crate::build::CApiConfig; +-use crate::VersionExt; + + /// Split a target string to its components + /// +@@ -57,7 +56,7 @@ impl Target { + capi_config: &CApiConfig, + libdir: &Path, + target_dir: &Path, +- ) -> Vec { ++ ) -> anyhow::Result> { + let mut lines = Vec::new(); + + let lib_name = &capi_config.library.name; +@@ -70,7 +69,7 @@ impl Target { + let os = &self.os; + let env = &self.env; + +- let sover = version.main_version(); ++ let sover = capi_config.library.sover()?; + + if os == "android" { + lines.push(format!("-Wl,-soname,lib{lib_name}.so")); +@@ -112,6 +111,6 @@ impl Target { + // See: https://github.com/emscripten-core/emscripten/blob/3.1.39/emcc.py#L92-L94 + // else if os == "emscripten" + +- lines ++ Ok(lines) + } + } + +From 3f9e452500b37204efce3091c9d0fd9366393e5b Mon Sep 17 00:00:00 2001 +From: kpcyrd +Date: Sun, 12 Nov 2023 14:47:40 +0100 +Subject: [PATCH 2/2] Refactor to validate version_suffix_components while + parsing + +--- + src/build.rs | 54 ++++++++++++++++++++++++++++---------------------- + src/install.rs | 19 ++++++++---------- + src/target.rs | 6 +++--- + 3 files changed, 41 insertions(+), 38 deletions(-) + +diff --git a/src/build.rs b/src/build.rs +index 45c4538..33b77f2 100644 +--- a/src/build.rs ++++ b/src/build.rs +@@ -401,36 +401,40 @@ pub struct PkgConfigCApiConfig { + pub strip_include_path_components: usize, + } + ++#[derive(Debug)] ++pub enum VersionSuffix { ++ Major, ++ MajorMinor, ++ MajorMinorPatch, ++} ++ + #[derive(Debug)] + pub struct LibraryCApiConfig { + pub name: String, + pub version: Version, + pub install_subdir: Option, + pub versioning: bool, +- pub version_suffix_components: Option, ++ pub version_suffix_components: Option, + pub import_library: bool, + pub rustflags: Vec, + } + + impl LibraryCApiConfig { +- pub fn sover(&self) -> anyhow::Result { ++ pub fn sover(&self) -> String { + let major = self.version.major; + let minor = self.version.minor; + let patch = self.version.patch; + +- let sover = match self.version_suffix_components { ++ match self.version_suffix_components { + None => match (major, minor, patch) { + (0, 0, patch) => format!("0.0.{patch}"), + (0, minor, _) => format!("0.{minor}"), + (major, _, _) => format!("{major}"), + }, +- Some(1) => format!("{major}"), +- Some(2) => format!("{major}.{minor}"), +- Some(3) => format!("{major}.{minor}.{patch}"), +- Some(num) => anyhow::bail!("Unexpected number of suffix components: {num}"), +- }; +- +- Ok(sover) ++ Some(VersionSuffix::Major) => format!("{major}"), ++ Some(VersionSuffix::MajorMinor) => format!("{major}.{minor}"), ++ Some(VersionSuffix::MajorMinorPatch) => format!("{major}.{minor}.{patch}"), ++ } + } + } + +@@ -666,10 +670,12 @@ fn load_manifest_capi_config(pkg: &Package) -> anyhow::Result { + let value = value.as_integer().with_context(|| { + format!("Value for `version_suffix_components` is not an integer: {value:?}") + })?; +- let value = value +- .try_into() +- .with_context(|| format!("Value is too large: {value:?}"))?; +- version_suffix_components = Some(value); ++ version_suffix_components = Some(match value { ++ 1 => VersionSuffix::Major, ++ 2 => VersionSuffix::MajorMinor, ++ 3 => VersionSuffix::MajorMinorPatch, ++ _ => anyhow::bail!("Out of range value for version suffix components: {value}"), ++ }); + } + + import_library = library +@@ -923,7 +929,7 @@ fn compile_with_exec( + let pkg_rustflags = &capi_config.library.rustflags; + + let mut leaf_args: Vec = rustc_target +- .shared_object_link_args(&capi_config, &install_paths.libdir, root_output)? ++ .shared_object_link_args(&capi_config, &install_paths.libdir, root_output) + .into_iter() + .flat_map(|l| vec!["-C".to_string(), format!("link-arg={l}")]) + .collect(); +@@ -1304,45 +1310,45 @@ mod tests { + #[test] + pub fn test_semver_zero_zero_zero() { + let library = make_test_library_config("0.0.0"); +- let sover = library.sover().unwrap(); ++ let sover = library.sover(); + assert_eq!(sover, "0.0.0"); + } + + #[test] + pub fn test_semver_zero_one_zero() { + let library = make_test_library_config("0.1.0"); +- let sover = library.sover().unwrap(); ++ let sover = library.sover(); + assert_eq!(sover, "0.1"); + } + + #[test] + pub fn test_semver_one_zero_zero() { + let library = make_test_library_config("1.0.0"); +- let sover = library.sover().unwrap(); ++ let sover = library.sover(); + assert_eq!(sover, "1"); + } + + #[test] + pub fn text_one_fixed_zero_zero_zero() { + let mut library = make_test_library_config("0.0.0"); +- library.version_suffix_components = Some(1); +- let sover = library.sover().unwrap(); ++ library.version_suffix_components = Some(VersionSuffix::Major); ++ let sover = library.sover(); + assert_eq!(sover, "0"); + } + + #[test] + pub fn text_two_fixed_one_zero_zero() { + let mut library = make_test_library_config("1.0.0"); +- library.version_suffix_components = Some(2); +- let sover = library.sover().unwrap(); ++ library.version_suffix_components = Some(VersionSuffix::MajorMinor); ++ let sover = library.sover(); + assert_eq!(sover, "1.0"); + } + + #[test] + pub fn text_three_fixed_one_zero_zero() { + let mut library = make_test_library_config("1.0.0"); +- library.version_suffix_components = Some(3); +- let sover = library.sover().unwrap(); ++ library.version_suffix_components = Some(VersionSuffix::MajorMinorPatch); ++ let sover = library.sover(); + assert_eq!(sover, "1.0.0"); + } + } +diff --git a/src/install.rs b/src/install.rs +index 9ad4104..c087e74 100644 +--- a/src/install.rs ++++ b/src/install.rs +@@ -105,13 +105,10 @@ pub(crate) struct UnixLibNames { + } + + impl UnixLibNames { +- pub(crate) fn new( +- lib_type: LibType, +- library: &LibraryCApiConfig, +- ) -> anyhow::Result> { ++ pub(crate) fn new(lib_type: LibType, library: &LibraryCApiConfig) -> Option { + let lib_name = &library.name; + let lib_version = &library.version; +- let main_version = library.sover()?; ++ let main_version = library.sover(); + + match lib_type { + LibType::So => { +@@ -122,11 +119,11 @@ impl UnixLibNames { + ); + let lib_with_main_ver = format!("{}.{}", lib, main_version); + +- Ok(Some(Self { ++ Some(Self { + canonical: lib, + with_main_ver: lib_with_main_ver, + with_full_ver: lib_with_full_ver, +- })) ++ }) + } + LibType::Dylib => { + let lib = format!("lib{lib_name}.dylib"); +@@ -136,13 +133,13 @@ impl UnixLibNames { + "lib{}.{}.{}.{}.dylib", + lib_name, lib_version.major, lib_version.minor, lib_version.patch + ); +- Ok(Some(Self { ++ Some(Self { + canonical: lib, + with_main_ver: lib_with_main_ver, + with_full_ver: lib_with_full_ver, +- })) ++ }) + } +- LibType::Windows => Ok(None), ++ LibType::Windows => None, + } + } + +@@ -242,7 +239,7 @@ pub fn cinstall(ws: &Workspace, packages: &[CPackage]) -> anyhow::Result<()> { + let lib_type = LibType::from_build_targets(build_targets); + match lib_type { + LibType::So | LibType::Dylib => { +- let lib = UnixLibNames::new(lib_type, &capi_config.library)?.unwrap(); ++ let lib = UnixLibNames::new(lib_type, &capi_config.library).unwrap(); + lib.install(capi_config, shared_lib, &install_path_lib)?; + } + LibType::Windows => { +diff --git a/src/target.rs b/src/target.rs +index 7ada1be..1cbdef4 100644 +--- a/src/target.rs ++++ b/src/target.rs +@@ -56,7 +56,7 @@ impl Target { + capi_config: &CApiConfig, + libdir: &Path, + target_dir: &Path, +- ) -> anyhow::Result> { ++ ) -> Vec { + let mut lines = Vec::new(); + + let lib_name = &capi_config.library.name; +@@ -69,7 +69,7 @@ impl Target { + let os = &self.os; + let env = &self.env; + +- let sover = capi_config.library.sover()?; ++ let sover = capi_config.library.sover(); + + if os == "android" { + lines.push(format!("-Wl,-soname,lib{lib_name}.so")); +@@ -111,6 +111,6 @@ impl Target { + // See: https://github.com/emscripten-core/emscripten/blob/3.1.39/emcc.py#L92-L94 + // else if os == "emscripten" + +- Ok(lines) ++ lines + } + } diff --git a/SOURCES/cargo-c-0.9.27+cargo-0.74.0.crate b/SOURCES/cargo-c-0.9.27+cargo-0.74.0.crate new file mode 100644 index 0000000000000000000000000000000000000000..e134df3acc8e47b6f7a10b3b4df89051d710e685 GIT binary patch literal 45836 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"] + description = "Helper program to build and install c-like libraries" + readme = "README.md" +@@ -103,15 +103,4 @@ + default = [] + vendored-openssl = ["cargo/vendored-openssl"] + +-[target."cfg(windows)".dependencies.windows-sys] +-version = "0.48" +-features = [ +- "Win32_Foundation", +- "Win32_Storage_FileSystem", +- "Win32_System_IO", +- "Win32_System_Console", +- "Win32_System_Threading", +- "Win32_System_JobObjects", +- "Win32_Security", +- "Win32_System_SystemServices", +-] ++ diff --git a/SOURCES/cargo-c-fix-metadata.diff b/SOURCES/cargo-c-fix-metadata.diff index 1929a39..93271fa 100644 --- a/SOURCES/cargo-c-fix-metadata.diff +++ b/SOURCES/cargo-c-fix-metadata.diff @@ -1,16 +1,9 @@ ---- cargo-c-0.9.12+cargo-0.64/Cargo.toml 1970-01-01T00:00:01+00:00 -+++ cargo-c-0.9.12+cargo-0.64/Cargo.toml 2022-08-25T10:44:01.925899+00:00 -@@ -12,7 +12,7 @@ - [package] - edition = "2021" - name = "cargo-c" --version = "0.9.12+cargo-0.64" -+version = "0.9.12" - authors = ["Luca Barbato "] - description = "Helper program to build and install c-like libraries" - readme = "README.md" -@@ -96,4 +96,3 @@ +--- cargo-c-0.9.27+cargo-0.74.0/Cargo.toml 1970-01-01T00:00:01+00:00 ++++ cargo-c-0.9.27+cargo-0.74.0/Cargo.toml 2023-11-11T11:12:10.373660+00:00 +@@ -101,6 +101,5 @@ [features] default = [] -vendored-openssl = ["cargo/vendored-openssl"] + + diff --git a/SOURCES/macros.cargo-c b/SOURCES/macros.cargo-c new file mode 100644 index 0000000..a037810 --- /dev/null +++ b/SOURCES/macros.cargo-c @@ -0,0 +1,26 @@ +%cargo_cbuild(naf:)\ +%{shrink: \ + %{__cargo} cbuild \ + %{__cargo_common_opts} \ + --profile rpm \ + %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ + --destdir=%{buildroot} \ + --prefix=%{_prefix} \ + --libdir=%{_libdir} \ + --includedir=%{_includedir} \ + --pkgconfigdir=%{_libdir}/pkgconfig \ +} + +%cargo_cinstall(naf:)\ +%{shrink: \ + %{__cargo} cinstall \ + %{__cargo_common_opts} \ + --profile rpm \ + %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ + --destdir=%{buildroot} \ + --prefix=%{_prefix} \ + --libdir=%{_libdir} \ + --includedir=%{_includedir} \ + --pkgconfigdir=%{_libdir}/pkgconfig \ +} + diff --git a/SPECS/rust-cargo-c.spec b/SPECS/rust-cargo-c.spec index ed34040..1979b04 100644 --- a/SPECS/rust-cargo-c.spec +++ b/SPECS/rust-cargo-c.spec @@ -2,38 +2,43 @@ ## (rpmautospec version 0.3.5) ## RPMAUTOSPEC: autorelease, autochangelog %define autorelease(e:s:pb:n) %{?-p:0.}%{lua: - release_number = 4; + release_number = 2; base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); print(release_number + base_release_number - 1); }%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} ## END: Set by rpmautospec -# Generated by rust2rpm 22 +# Generated by rust2rpm 25 %bcond_without check # reduce debuginfo verbosity to work around OOM problems on 32-bit arches %global rustflags_debuginfo 1 %global crate cargo-c -%global upstream_version 0.9.12+cargo-0.64 +%global upstream_version 0.9.27+cargo-0.74.0 Name: rust-cargo-c -Version: 0.9.12 +Version: 0.9.27 Release: %autorelease Summary: Helper program to build and install c-like libraries License: MIT URL: https://crates.io/crates/cargo-c Source0: %{crates_source %{crate} %{upstream_version}} -Source1: LICENSE.dependencies +Source1: macros.cargo-c +# Automatically generated patch to strip dependencies and normalize metadata +Patch: cargo-c-fix-metadata-auto.diff # Manually created patch for downstream crate metadata changes # * drop +cargo version suffix from crate version # * remove vendored OpenSSL feature Patch: cargo-c-fix-metadata.diff +# * backport upstream change: Add version_suffix_components setting +# This is required to work around breaking changes in the default +# behaviour of cargo-c v0.9.26 and newer (using "0." as the soname +# for versions < 1.0.0 instead of just "0"). +Patch: https://github.com/lu-zero/cargo-c/pull/352.patch -ExclusiveArch: %{rust_arches} - -BuildRequires: rust-packaging >= 21 +BuildRequires: cargo-rpm-macros >= 24 %global _description %{expand: Helper program to build and install c-like libraries.} @@ -42,19 +47,25 @@ Helper program to build and install c-like libraries.} %package -n %{crate} Summary: %{summary} +# (Apache-2.0 OR MIT) AND BSD-3-Clause +# (MIT OR Apache-2.0) AND BSD-3-Clause AND GPL-2.0-only WITH GCC-exception-2.0 AND MIT # (MIT OR Apache-2.0) AND Unicode-DFS-2016 +# 0BSD OR MIT OR Apache-2.0 # Apache-2.0 # Apache-2.0 OR BSL-1.0 # Apache-2.0 OR MIT +# Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +# BSD-3-Clause +# ISC # MIT -# MIT AND GPL-2.0-only WITH GCC-exception-2.0 AND BSD-3-Clause # MIT OR Apache-2.0 +# MIT OR Apache-2.0 OR BSD-1-Clause # MIT OR Apache-2.0 OR Zlib +# MIT OR Zlib OR Apache-2.0 # MPL-2.0 -# MPL-2.0+ # Unlicense OR MIT # Zlib OR Apache-2.0 OR MIT -License: MIT AND Apache-2.0 AND BSD-3-Clause AND GPL-2.0-only WITH GCC-exception-2.0 AND MPL-2.0 AND Unicode-DFS-2016 +License: MIT AND Apache-2.0 AND BSD-3-Clause AND GPL-2.0-only WITH GCC-exception-2.0 AND ISC AND MPL-2.0 AND Unicode-DFS-2016 AND (0BSD OR MIT OR Apache-2.0) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (MIT OR Apache-2.0 OR BSD-1-Clause) AND (MIT OR Apache-2.0 OR Zlib) AND (Unlicense OR MIT) # LICENSE.dependencies contains a full license breakdown %description -n %{crate} %{_description} @@ -67,6 +78,7 @@ License: MIT AND Apache-2.0 AND BSD-3-Clause AND GPL-2.0-only WITH GCC-ex %{_bindir}/cargo-cbuild %{_bindir}/cargo-cinstall %{_bindir}/cargo-ctest +%{_rpmmacrodir}/macros.cargo-c %package devel Summary: %{summary} @@ -96,7 +108,6 @@ use the "default" feature of the "%{crate}" crate. %prep %autosetup -n %{crate}-%{upstream_version} -p1 -cp -pav %{SOURCE1} . %cargo_prep %generate_buildrequires @@ -104,9 +115,12 @@ cp -pav %{SOURCE1} . %build %cargo_build +%{cargo_license_summary} +%{cargo_license} > LICENSE.dependencies %install %cargo_install +install -D -p -m 0644 -t %{buildroot}/%{_rpmmacrodir} %{SOURCE1} %if %{with check} %check @@ -114,8 +128,29 @@ cp -pav %{SOURCE1} . %endif %changelog -* Fri Oct 13 2023 Arkady L. Shane - 0.9.12-4 -- Rebuilt for MSVSphere 9.2 +* Mon Jan 15 2024 Arkady L. Shane - 0.9.27-2 +- Rebuilt for MSVSphere 9.3 + +* Tue Dec 05 2023 Fabio Valentini - 0.9.27-2 +- Backport upstream change to add the version_suffix_components setting + +* Sat Nov 11 2023 Fabio Valentini - 0.9.27-1 +- Update to version 0.9.27+cargo-0.74.0; Fixes RHBZ#2130183 + +* Sat Sep 30 2023 Fabio Valentini - 0.9.19-5 +- Adapt cargo-c macros to support the same flags as the cargo counterparts + +* Tue Aug 22 2023 Fabio Valentini - 0.9.19-4 +- Fix license tag for binary subpackage to exclude invalid MPL-2.0+ + +* Fri Jul 21 2023 Fedora Release Engineering - 0.9.19-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Jul 07 2023 Fabio Valentini - 0.9.19-2 +- Add RPM macros for cargo-cbuild and cargo-cinstall + +* Fri Jun 16 2023 Fabio Valentini - 0.9.19-1 +- Update to version 0.9.19+cargo-0.70 * Wed May 03 2023 Fabio Valentini - 0.9.12-4 - Rebuild for openssl crate >= v0.10.48 (RUSTSEC-2023-{0022,0023,0024})