Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package cargo-c for openSUSE:Factory checked in at 2024-06-06 12:30:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cargo-c (Old)
and /work/SRC/openSUSE:Factory/.cargo-c.new.24587 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cargo-c"
Thu Jun 6 12:30:21 2024 rev:17 rq:1178628 version:0.9.32~git0.56dfe34
Changes:
--------
--- /work/SRC/openSUSE:Factory/cargo-c/cargo-c.changes 2023-10-20 23:15:55.928692147 +0200
+++ /work/SRC/openSUSE:Factory/.cargo-c.new.24587/cargo-c.changes 2024-06-06 12:30:23.095584481 +0200
@@ -1,0 +2,15 @@
+Tue Jun 04 19:59:22 UTC 2024 - david.mulder@suse.com
+
+- Update to version 0.9.32~git0.56dfe34:
+ * Prepare for release
+ * Bump cargo version
+ * Use clone_from/clone_into
+ * Do not install the versioned links and lib on Android
+ * docs: add rustls-ffi to README users list
+ * Bump the msrv again
+ * Bump msrv
+ * Bump cargo version
+ * Match the beaviour of meson regarding relative paths in the install directories
+ * Bump cargo version
+
+-------------------------------------------------------------------
Old:
----
cargo-c-0.9.27~git0.54774e0.tar.xz
New:
----
cargo-c-0.9.32~git0.56dfe34.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cargo-c.spec ++++++
--- /var/tmp/diff_new_pack.ZWcQCr/_old 2024-06-06 12:30:25.979689815 +0200
+++ /var/tmp/diff_new_pack.ZWcQCr/_new 2024-06-06 12:30:25.979689815 +0200
@@ -1,7 +1,7 @@
#
# spec file for package cargo-c
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
# Copyright (c) 2019 Andreas Schneider .
#
# All modifications and additions to the file contributed by third parties
@@ -20,7 +20,7 @@
%global rustflags -Clink-arg=-Wl,-z,relro,-z,now -C debuginfo=2
Name: cargo-c
-Version: 0.9.27~git0.54774e0
+Version: 0.9.32~git0.56dfe34
Release: 0
Summary: Helper to build and install c-like libraries from Rust
License: MIT
++++++ _service ++++++
--- /var/tmp/diff_new_pack.ZWcQCr/_old 2024-06-06 12:30:26.363703841 +0200
+++ /var/tmp/diff_new_pack.ZWcQCr/_new 2024-06-06 12:30:26.403705302 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/lu-zero/cargo-c.git</param>
<param name="versionformat">@PARENT_TAG@~git@TAG_OFFSET@.%h</param>
<param name="scm">git</param>
- <param name="revision">v0.9.27</param>
+ <param name="revision">v0.9.32</param>
<param name="match-tag">*</param>
<param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
<param name="versionrewrite-replacement">\1</param>
++++++ cargo-c-0.9.27~git0.54774e0.tar.xz -> cargo-c-0.9.32~git0.56dfe34.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/Cargo.toml new/cargo-c-0.9.32~git0.56dfe34/Cargo.toml
--- old/cargo-c-0.9.27~git0.54774e0/Cargo.toml 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/Cargo.toml 2024-05-04 09:41:19.000000000 +0200
@@ -1,6 +1,6 @@
[package]
name = "cargo-c"
-version = "0.9.27+cargo-0.74.0"
+version = "0.9.32+cargo-0.79.0"
authors = ["Luca Barbato "]
description = "Helper program to build and install c-like libraries"
license = "MIT"
@@ -9,7 +9,7 @@
repository = "https://github.com/lu-zero/cargo-c"
categories = ["command-line-utilities", "development-tools::cargo-plugins"]
keywords = ["cargo", "cdylib"]
-rust-version = "1.70"
+rust-version = "1.76"
[[bin]]
name = "cargo-capi"
@@ -28,25 +28,25 @@
path = "src/bin/ctest.rs"
[dependencies]
-cargo = "0.74.0"
+cargo = "0.79.0"
cargo-util = "0.2"
semver = "1.0.3"
log = "0.4"
clap = { version="4.0.29", features=["color", "derive", "cargo"] }
regex = "1.5.6"
cbindgen = { version="0.26.0", default-features=false }
-toml = "0.7"
+toml = "0.8"
serde = "1.0.123"
serde_derive = "1.0"
serde_json = "1.0.62"
anyhow = "1.0"
cc = "1.0"
glob = "0.3"
-itertools = "0.11"
+itertools = "0.12"
# workaround cargo
[target.'cfg(windows)'.dependencies.windows-sys]
-version = "0.48"
+version = "0.52"
features = [
"Win32_Foundation",
"Win32_Storage_FileSystem",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/README.md new/cargo-c-0.9.32~git0.56dfe34/README.md
--- old/cargo-c-0.9.27~git0.54774e0/README.md 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/README.md 2024-05-04 09:41:19.000000000 +0200
@@ -135,6 +135,10 @@
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"
@@ -181,6 +185,7 @@
- [libdovi](https://github.com/quietvoid/dovi_tool/tree/main/dolby_vision#libdovi-c-api)
- [libimagequant](https://github.com/ImageOptim/libimagequant#building-with-cargo-c)
- [rav1e](https://github.com/xiph/rav1e)
+- [rustls-ffi](https://github.com/rustls/rustls-ffi)
- [sled](https://github.com/spacejam/sled/tree/master/bindings/sled-native)
- [pathfinder](https://github.com/servo/pathfinder#c)
- [udbserver](https://github.com/bet4it/udbserver)
@@ -209,6 +214,28 @@
[![Packaging status](https://repology.org/badge/vertical-allrepos/cargo-c.svg)](https://repology.org/project/cargo-c/versions)
+## Troubleshooting
+
+### Shared libraries are not built on musl systems
+
+When running on a musl-based system (e.g. Alpine Linux), it could be that using the `cdylib` library type results in the following error (as reported [here](https://github.com/lu-zero/cargo-c/issues/180)):
+
+> Error: CliError { error: Some(cannot produce cdylib for <package> as the target x86_64-unknown-linux-musl does not support these crate types), exit_code: 101 }
+
+This suggests that Rust was not built with `crt-static=false` and it typically happens if Rust has been installed through rustup.
+
+Shared libraries can be enabled manually in this case, by editing the file `.cargo/config` like so:
+
+```toml
+# .cargo/config
+
+[target.x86_64-unknown-linux-musl]
+rustflags = [
+ "-C", "target-feature=-crt-static",
+]
+```
+
+However, it is preferred to install Rust through the system package manager instead of rustup (e.g. with `apk add rust`), because the provided package should already handle this (see e.g. [here](https://git.alpinelinux.org/aports/tree/main/rust/APKBUILD?h=3.19-stable#n23...)).
## Acknowledgements
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/bin/capi.rs new/cargo-c-0.9.32~git0.56dfe34/src/bin/capi.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/bin/capi.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/bin/capi.rs 2024-05-04 09:41:19.000000000 +0200
@@ -5,13 +5,12 @@
use cargo::util::command_prelude::flag;
use cargo::util::command_prelude::ArgMatchesExt;
-use cargo::CliResult;
-use cargo::Config;
+use cargo::{CliResult, GlobalContext};
use clap::*;
fn main() -> CliResult {
- let mut config = Config::default()?;
+ let mut config = GlobalContext::default()?;
let cli_build = subcommand_build("build", "Build the crate C-API");
let cli_install = subcommand_install("install", "Install the crate C-API");
@@ -60,7 +59,7 @@
return Ok(());
}
- config_configure(&mut config, subcommand_args)?;
+ global_context_configure(&mut config, subcommand_args)?;
let mut ws = subcommand_args.workspace(&config)?;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/bin/cbuild.rs new/cargo-c-0.9.32~git0.56dfe34/src/bin/cbuild.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/bin/cbuild.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/bin/cbuild.rs 2024-05-04 09:41:19.000000000 +0200
@@ -1,6 +1,6 @@
use cargo::util::command_prelude::ArgMatchesExt;
use cargo::CliResult;
-use cargo::Config;
+use cargo::GlobalContext;
use cargo_c::build::*;
use cargo_c::cli::run_cargo_fallback;
@@ -8,7 +8,7 @@
use cargo_c::config::*;
fn main() -> CliResult {
- let mut config = Config::default()?;
+ let mut config = GlobalContext::default()?;
let subcommand = subcommand_build("cbuild", "Build the crate C-API");
let mut app = clap::command!()
@@ -35,7 +35,7 @@
return Ok(());
}
- config_configure(&mut config, subcommand_args)?;
+ global_context_configure(&mut config, subcommand_args)?;
let mut ws = subcommand_args.workspace(&config)?;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/bin/cinstall.rs new/cargo-c-0.9.32~git0.56dfe34/src/bin/cinstall.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/bin/cinstall.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/bin/cinstall.rs 2024-05-04 09:41:19.000000000 +0200
@@ -1,15 +1,15 @@
use cargo::util::command_prelude::ArgMatchesExt;
use cargo::CliResult;
-use cargo::Config;
+use cargo::GlobalContext;
use cargo_c::build::cbuild;
use cargo_c::cli::run_cargo_fallback;
use cargo_c::cli::subcommand_install;
-use cargo_c::config::config_configure;
+use cargo_c::config::global_context_configure;
use cargo_c::install::cinstall;
fn main() -> CliResult {
- let mut config = Config::default()?;
+ let mut config = GlobalContext::default()?;
let subcommand = subcommand_install("cinstall", "Install the crate C-API");
let mut app = clap::command!()
@@ -36,7 +36,7 @@
return Ok(());
}
- config_configure(&mut config, subcommand_args)?;
+ global_context_configure(&mut config, subcommand_args)?;
let mut ws = subcommand_args.workspace(&config)?;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/bin/ctest.rs new/cargo-c-0.9.32~git0.56dfe34/src/bin/ctest.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/bin/ctest.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/bin/ctest.rs 2024-05-04 09:41:19.000000000 +0200
@@ -1,6 +1,4 @@
use cargo::util::command_prelude::*;
-use cargo::CliResult;
-use cargo::Config;
use cargo_c::build::*;
use cargo_c::cli::run_cargo_fallback;
@@ -8,7 +6,7 @@
use cargo_c::config::*;
fn main() -> CliResult {
- let mut config = Config::default()?;
+ let mut config = GlobalContext::default()?;
let subcommand = subcommand_test("ctest");
@@ -36,7 +34,7 @@
return Ok(());
}
- config_configure(&mut config, subcommand_args)?;
+ global_context_configure(&mut config, subcommand_args)?;
let mut ws = subcommand_args.workspace(&config)?;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/build.rs new/cargo-c-0.9.32~git0.56dfe34/src/build.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/build.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/build.rs 2024-05-04 09:41:19.000000000 +0200
@@ -4,16 +4,15 @@
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, Mutex};
-use cargo::core::compiler::unit_graph::UnitDep;
-use cargo::core::compiler::unit_graph::UnitGraph;
-use cargo::core::compiler::Unit;
-use cargo::core::{compiler::Executor, profiles::Profiles};
-use cargo::core::{TargetKind, Workspace};
+use cargo::core::compiler::{unit_graph::UnitDep, unit_graph::UnitGraph, Executor, Unit};
+use cargo::core::profiles::Profiles;
+use cargo::core::{FeatureValue, Package, PackageId, Target, TargetKind, Workspace};
use cargo::ops::{self, CompileFilter, CompileOptions, FilterRule, LibRule};
use cargo::util::command_prelude::{ArgMatches, ArgMatchesExt, CompileMode, ProfileChecking};
use cargo::util::interning::InternedString;
-use cargo::{CliResult, Config};
+use cargo::{CliResult, GlobalContext};
+use anyhow::Context as _;
use cargo_util::paths::{copy, create, create_dir_all, open, read, read_bytes, write};
use semver::Version;
@@ -30,7 +29,7 @@
root_output: &Path,
root_path: &Path,
) -> anyhow::Result<()> {
- ws.config()
+ ws.gctx()
.shell()
.status("Building", "header file using cbindgen")?;
let mut header_name = PathBuf::from(name);
@@ -65,7 +64,7 @@
build_targets: &BuildTargets,
root_output: &Path,
) -> anyhow::Result<()> {
- let mut shell = ws.config().shell();
+ let mut shell = ws.gctx().shell();
shell.status("Populating", "uninstalled header directory")?;
let path = &format!("PKG_CONFIG_PATH=\"{}\"", root_output.display());
shell.verbose(move |s| s.note(path))?;
@@ -91,7 +90,7 @@
root_output: &Path,
pc: &PkgConfig,
) -> anyhow::Result<()> {
- ws.config().shell().status("Building", "pkg-config files")?;
+ ws.gctx().shell().status("Building", "pkg-config files")?;
build_pc_file(filename, root_output, pc)?;
let pc_uninstalled = pc.uninstalled(root_output);
build_pc_file(
@@ -141,7 +140,7 @@
let env = &target.env;
if os == "windows" && env == "msvc" {
- ws.config()
+ ws.gctx()
.shell()
.status("Building", ".def file using dumpbin")?;
@@ -214,7 +213,7 @@
if os == "windows" {
let arch = &target.arch;
if env == "gnu" {
- ws.config()
+ ws.gctx()
.shell()
.status("Building", "implib using dlltool")?;
@@ -243,7 +242,7 @@
Err(anyhow::anyhow!("Command failed {:?}", dlltool_command))
}
} else {
- ws.config().shell().status("Building", "implib using lib")?;
+ ws.gctx().shell().status("Building", "implib using lib")?;
let target_str = format!("{}-pc-windows-msvc", &target.arch);
let mut lib = match cc::windows_registry::find(&target_str, "lib.exe") {
Some(command) => command,
@@ -401,15 +400,42 @@
}
#[derive(Debug)]
+pub enum VersionSuffix {
+ Major,
+ MajorMinor,
+ MajorMinorPatch,
+}
+
+#[derive(Debug)]
pub struct LibraryCApiConfig {
pub name: String,
pub version: Version,
pub install_subdir: Option<String>,
pub versioning: bool,
+ pub version_suffix_components: Option<VersionSuffix>,
pub import_library: bool,
pub rustflags: Vec<String>,
}
+impl LibraryCApiConfig {
+ pub fn sover(&self) -> String {
+ let major = self.version.major;
+ let minor = self.version.minor;
+ let patch = self.version.patch;
+
+ 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(VersionSuffix::Major) => format!("{major}"),
+ Some(VersionSuffix::MajorMinor) => format!("{major}.{minor}"),
+ Some(VersionSuffix::MajorMinorPatch) => format!("{major}.{minor}.{patch}"),
+ }
+ }
+}
+
#[derive(Debug, Default)]
pub struct InstallCApiConfig {
pub include: Vec<InstallTarget>,
@@ -484,7 +510,10 @@
}
}
-fn load_manifest_capi_config(pkg: &Package) -> anyhow::Result<CApiConfig> {
+fn load_manifest_capi_config(
+ pkg: &Package,
+ rustc_target: &target::Target,
+) -> anyhow::Result<CApiConfig> {
let name = &pkg
.manifest()
.targets()
@@ -619,6 +648,7 @@
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 +666,19 @@
.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:?}")
+ })?;
+ 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
.get("import_library")
.and_then(|v| v.as_bool())
@@ -650,11 +693,16 @@
}
}
+ if rustc_target.os == "android" {
+ versioning = false;
+ }
+
let library = LibraryCApiConfig {
name: lib_name,
version,
install_subdir,
versioning,
+ version_suffix_components,
import_library,
rustflags,
};
@@ -754,14 +802,14 @@
fn compile_options(
ws: &Workspace,
- config: &Config,
+ gctx: &GlobalContext,
args: &ArgMatches,
profile: InternedString,
compile_mode: CompileMode,
) -> anyhow::Result<CompileOptions> {
use cargo::core::compiler::CompileKind;
let mut compile_opts =
- args.compile_options(config, compile_mode, Some(ws), ProfileChecking::Custom)?;
+ args.compile_options(gctx, compile_mode, Some(ws), ProfileChecking::Custom)?;
compile_opts.build_config.requested_profile = profile;
@@ -779,12 +827,12 @@
compile_opts.build_config.unit_graph = false;
- let rustc = config.load_global_rustc(Some(ws))?;
+ let rustc = gctx.load_global_rustc(Some(ws))?;
// Always set the target, requested_kinds is a vec of a single element.
if compile_opts.build_config.requested_kinds[0].is_host() {
compile_opts.build_config.requested_kinds =
- CompileKind::from_requested_targets(config, &[rustc.host.to_string()])?
+ CompileKind::from_requested_targets(gctx, &[rustc.host.to_string()])?
}
Ok(compile_opts)
@@ -796,7 +844,6 @@
link_line: Mutex>,
}
-use cargo::core::*;
use cargo::CargoResult;
use cargo_util::ProcessBuilder;
@@ -846,7 +893,6 @@
use cargo::core::compiler::{unit_graph, UnitInterner};
use cargo::ops::create_bcx;
-use cargo::util::profile;
fn set_deps_args(
dep: &UnitDep,
@@ -880,7 +926,7 @@
for unit in bcx.roots.iter() {
let pkg = &unit.pkg;
- let capi_config = load_manifest_capi_config(pkg)?;
+ let capi_config = load_manifest_capi_config(pkg, rustc_target)?;
let name = &capi_config.library.name;
let install_paths = InstallPaths::new(name, args, &capi_config);
let pkg_rustflags = &capi_config.library.rustflags;
@@ -912,11 +958,10 @@
}
if options.build_config.unit_graph {
- unit_graph::emit_serialized_unit_graph(&bcx.roots, &bcx.unit_graph, ws.config())?;
+ unit_graph::emit_serialized_unit_graph(&bcx.roots, &bcx.unit_graph, ws.gctx())?;
return Ok(HashMap::new());
}
- let _p = profile::start("compiling");
- let cx = cargo::core::compiler::Context::new(&bcx)?;
+ let cx = cargo::core::compiler::BuildRunner::new(&bcx)?;
let r = cx.compile(exec)?;
@@ -967,7 +1012,7 @@
let id = pkg.package_id();
let version = pkg.version().clone();
let root_path = pkg.root().to_path_buf();
- let capi_config = load_manifest_capi_config(pkg)?;
+ let capi_config = load_manifest_capi_config(pkg, rustc_target)?;
patch_target(pkg, libkinds, &capi_config)?;
@@ -992,12 +1037,12 @@
pub fn cbuild(
ws: &mut Workspace,
- config: &Config,
+ config: &GlobalContext,
args: &ArgMatches,
default_profile: &str,
) -> anyhow::Result<(Vec<CPackage>, CompileOptions)> {
let rustc = config.load_global_rustc(Some(ws))?;
- let targets = args.targets();
+ let targets = args.targets()?;
let target = match targets.len() {
0 => rustc.host.to_string(),
1 => targets[0].to_string(),
@@ -1193,7 +1238,7 @@
pub fn ctest(
ws: &Workspace,
- config: &Config,
+ config: &GlobalContext,
args: &ArgMatches,
packages: &[CPackage],
mut compile_opts: CompileOptions,
@@ -1246,3 +1291,66 @@
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();
+ 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();
+ 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();
+ 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(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(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(VersionSuffix::MajorMinorPatch);
+ let sover = library.sover();
+ assert_eq!(sover, "1.0.0");
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/build_targets.rs new/cargo-c-0.9.32~git0.56dfe34/src/build_targets.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/build_targets.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/build_targets.rs 2024-05-04 09:41:19.000000000 +0200
@@ -89,7 +89,7 @@
let shared_lib = targetdir.join(format!("lib{lib_name}.so"));
(shared_lib, static_lib, None, None)
}
- ("macos", _) | ("ios", _) => {
+ ("macos", _) | ("ios", _) | ("tvos", _) => {
let static_lib = targetdir.join(format!("lib{lib_name}.a"));
let shared_lib = targetdir.join(format!("lib{lib_name}.dylib"));
(shared_lib, static_lib, None, None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/cli.rs new/cargo-c-0.9.32~git0.56dfe34/src/cli.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/cli.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/cli.rs 2024-05-04 09:41:19.000000000 +0200
@@ -16,27 +16,32 @@
/// Path to directory where target should be copied to
#[clap(long = "destdir")]
destdir: Option<PathBuf>,
- /// Directory path used to construct default values of
- /// includedir, libdir, bindir, pkgconfigdir
- #[clap(long = "prefix")]
- prefix: Option<PathBuf>,
+ /// Directory path used to construct the values of
+ /// `bindir`, `datarootdir`, `includedir`, `libdir`
+ ///
+ /// If they are absolute the prefix is ignored.
+ #[clap(long = "prefix", default_value = "/usr/local")]
+ prefix: PathBuf,
/// Path to directory for installing generated library files
- #[clap(long = "libdir")]
- libdir: Option<PathBuf>,
+ #[clap(long = "libdir", default_value = "lib")]
+ libdir: PathBuf,
/// Path to directory for installing generated headers files
- #[clap(long = "includedir")]
- includedir: Option<PathBuf>,
+ #[clap(long = "includedir", default_value = "include")]
+ includedir: PathBuf,
/// Path to directory for installing generated executable files
- #[clap(long = "bindir")]
- bindir: Option<PathBuf>,
+ #[clap(long = "bindir", default_value = "bin")]
+ bindir: PathBuf,
/// Path to directory for installing generated pkg-config .pc files
+ ///
+ /// [default: {libdir}/pkgconfig]
#[clap(long = "pkgconfigdir")]
pkgconfigdir: Option<PathBuf>,
- /// Path to directory for installing read-only data (defaults to {prefix}/share)
- #[clap(long = "datarootdir")]
- datarootdir: Option<PathBuf>,
+ /// Path to directory for installing read-only data
+ #[clap(long = "datarootdir", default_value = "share")]
+ datarootdir: PathBuf,
/// Path to directory for installing read-only application-specific data
- /// (defaults to {datarootdir})
+ ///
+ /// [default: {datarootdir}]
#[clap(long = "datadir")]
datadir: Option<PathBuf>,
#[clap(long = "dlltool")]
@@ -62,7 +67,7 @@
.action(ArgAction::Count)
.global(true),
)
- .arg_quiet()
+ .arg_silent_suggestion()
.arg(
opt("color", "Coloring: auto, always, never")
.value_name("WHEN")
@@ -80,7 +85,7 @@
.action(ArgAction::Append)
.global(true),
)
- .arg_jobs()
+ .arg_parallel()
.arg_targets_all(
"Build only this package's library",
"Build only the specified binary",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/config.rs new/cargo-c-0.9.32~git0.56dfe34/src/config.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/config.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/config.rs 2024-05-04 09:41:19.000000000 +0200
@@ -1,7 +1,7 @@
use std::env;
use cargo::util::command_prelude::{ArgMatches, ArgMatchesExt};
-use cargo::{CliResult, Config};
+use cargo::{CliResult, GlobalContext};
// Take the original cargo instance and save it as a separate env var if not already set.
fn setup_env() {
@@ -12,14 +12,14 @@
}
}
-pub fn config_configure(config: &mut Config, args: &ArgMatches) -> CliResult {
- let arg_target_dir = &args.value_of_path("target-dir", config);
+pub fn global_context_configure(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult {
+ let arg_target_dir = &args.value_of_path("target-dir", gctx);
let config_args: Vec<_> = args
.get_many::<String>("config")
.unwrap_or_default()
.map(|s| s.to_owned())
.collect();
- config.configure(
+ gctx.configure(
args.verbose(),
args.flag("quiet"),
args.get_one::<String>("color").map(String::as_str),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/install.rs new/cargo-c-0.9.32~git0.56dfe34/src/install.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/install.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/install.rs 2024-05-04 09:41:19.000000000 +0200
@@ -3,11 +3,9 @@
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 {
@@ -93,7 +91,7 @@
| ("haiku", _)
| ("illumos", _)
| ("emscripten", _) => LibType::So,
- ("macos", _) | ("ios", _) => LibType::Dylib,
+ ("macos", _) | ("ios", _) | ("tvos", _) => LibType::Dylib,
("windows", _) => LibType::Windows,
_ => unimplemented!("The target {}-{} is not supported yet", os, env),
}
@@ -107,8 +105,10 @@
}
impl UnixLibNames {
- pub(crate) fn new(lib_type: LibType, lib_name: &str, lib_version: &Version) -> Option<Self> {
- let main_version = lib_version.main_version();
+ pub(crate) fn new(lib_type: LibType, library: &LibraryCApiConfig) -> Option<Self> {
+ let lib_name = &library.name;
+ let lib_version = &library.version;
+ let main_version = library.sover();
match lib_type {
LibType::So => {
@@ -198,9 +198,7 @@
create_dir_all(&install_path_lib)?;
create_dir_all(&install_path_pc)?;
- ws.config()
- .shell()
- .status("Installing", "pkg-config file")?;
+ ws.gctx().shell().status("Installing", "pkg-config file")?;
copy(
&build_targets.pc,
@@ -208,7 +206,7 @@
)?;
if capi_config.header.enabled {
- ws.config().shell().status("Installing", "header file")?;
+ ws.gctx().shell().status("Installing", "header file")?;
for (from, to) in build_targets.extra.include.iter() {
let to = install_path_include.join(to);
create_dir_all(to.parent().unwrap())?;
@@ -217,7 +215,7 @@
}
if !build_targets.extra.data.is_empty() {
- ws.config().shell().status("Installing", "data file")?;
+ ws.gctx().shell().status("Installing", "data file")?;
for (from, to) in build_targets.extra.data.iter() {
let to = install_path_data.join(to);
create_dir_all(to.parent().unwrap())?;
@@ -226,7 +224,7 @@
}
if let Some(ref static_lib) = build_targets.static_lib {
- ws.config().shell().status("Installing", "static library")?;
+ ws.gctx().shell().status("Installing", "static library")?;
copy(
static_lib,
install_path_lib.join(static_lib.file_name().unwrap()),
@@ -234,14 +232,12 @@
}
if let Some(ref shared_lib) = build_targets.shared_lib {
- ws.config().shell().status("Installing", "shared library")?;
+ ws.gctx().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 => {
@@ -291,32 +287,20 @@
.get_one::<PathBuf>("prefix")
.map(PathBuf::from)
.unwrap_or_else(|| "/usr/local".into());
- let libdir = args
- .get_one::<PathBuf>("libdir")
- .map(PathBuf::from)
- .unwrap_or_else(|| prefix.join("lib"));
- let includedir = args
- .get_one::<PathBuf>("includedir")
- .map(PathBuf::from)
- .unwrap_or_else(|| prefix.join("include"));
- let datarootdir = args
- .get_one::<PathBuf>("datarootdir")
- .map(PathBuf::from)
- .unwrap_or_else(|| prefix.join("share"));
+ let libdir = prefix.join(args.get_one::<PathBuf>("libdir").unwrap());
+ let includedir = prefix.join(args.get_one::<PathBuf>("includedir").unwrap());
+ let datarootdir = prefix.join(args.get_one::<PathBuf>("datarootdir").unwrap());
let datadir = args
.get_one::<PathBuf>("datadir")
- .map(PathBuf::from)
+ .map(|d| prefix.join(d))
.unwrap_or_else(|| datarootdir.clone());
let subdir_name = PathBuf::from(&capi_config.header.subdirectory);
- let bindir = args
- .get_one::<PathBuf>("bindir")
- .map(PathBuf::from)
- .unwrap_or_else(|| prefix.join("bin"));
+ let bindir = prefix.join(args.get_one::<PathBuf>("bindir").unwrap());
let pkgconfigdir = args
.get_one::<PathBuf>("pkgconfigdir")
- .map(PathBuf::from)
+ .map(|d| prefix.join(d))
.unwrap_or_else(|| libdir.join("pkgconfig"));
InstallPaths {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/lib.rs new/cargo-c-0.9.32~git0.56dfe34/src/lib.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/lib.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/lib.rs 2024-05-04 09:41:19.000000000 +0200
@@ -5,18 +5,3 @@
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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/pkg_config_gen.rs new/cargo-c-0.9.32~git0.56dfe34/src/pkg_config_gen.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/pkg_config_gen.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/pkg_config_gen.rs 2024-05-04 09:41:19.000000000 +0200
@@ -129,7 +129,7 @@
) -> Self {
let mut pc = PkgConfig::new(name, capi_config);
- pc.prefix = install_paths.prefix.clone();
+ pc.prefix.clone_from(&install_paths.prefix);
// TODO: support exec_prefix
if args.contains_id("includedir") {
if let Ok(suffix) = install_paths.includedir.strip_prefix(&pc.prefix) {
@@ -137,7 +137,7 @@
includedir.push(suffix);
pc.includedir = includedir;
} else {
- pc.includedir = install_paths.includedir.clone();
+ pc.includedir.clone_from(&install_paths.includedir);
}
}
if args.contains_id("libdir") {
@@ -146,7 +146,7 @@
libdir.push(suffix);
pc.libdir = libdir;
} else {
- pc.libdir = install_paths.libdir.clone();
+ pc.libdir.clone_from(&install_paths.libdir);
}
}
pc
@@ -164,7 +164,7 @@
}
pub fn set_description(&mut self, descr: S) -> &mut Self {
- self.description = descr.as_ref().to_owned();
+ descr.as_ref().clone_into(&mut self.description);
self
}
@@ -298,6 +298,7 @@
version: Version::parse("0.1.0").unwrap(),
install_subdir: None,
versioning: true,
+ version_suffix_components: None,
import_library: true,
rustflags: Vec::default(),
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.9.27~git0.54774e0/src/target.rs new/cargo-c-0.9.32~git0.56dfe34/src/target.rs
--- old/cargo-c-0.9.27~git0.54774e0/src/target.rs 2023-10-12 00:51:34.000000000 +0200
+++ new/cargo-c-0.9.32~git0.56dfe34/src/target.rs 2024-05-04 09:41:19.000000000 +0200
@@ -3,7 +3,6 @@
use anyhow::*;
use crate::build::CApiConfig;
-use crate::VersionExt;
/// Split a target string to its components
///
@@ -70,7 +69,7 @@
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"));
@@ -86,7 +85,7 @@
} else {
format!("-Wl,-soname,lib{lib_name}.so")
});
- } else if os == "macos" || os == "ios" {
+ } else if os == "macos" || os == "ios" || os == "tvos" {
let line = if capi_config.library.versioning {
format!("-Wl,-install_name,{1}/lib{0}.{5}.dylib,-current_version,{2}.{3}.{4},-compatibility_version,{5}",
lib_name, libdir.display(), major, minor, patch, sover)
++++++ vendor.tar.xz ++++++
/work/SRC/openSUSE:Factory/cargo-c/vendor.tar.xz /work/SRC/openSUSE:Factory/.cargo-c.new.24587/vendor.tar.xz differ: char 8, line 1