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 2026-07-08 17:32:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cargo-c (Old) and /work/SRC/openSUSE:Factory/.cargo-c.new.1982 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cargo-c" Wed Jul 8 17:32:58 2026 rev:24 rq:1364423 version:0.10.23 Changes: -------- --- /work/SRC/openSUSE:Factory/cargo-c/cargo-c.changes 2026-02-12 17:25:01.353322983 +0100 +++ /work/SRC/openSUSE:Factory/.cargo-c.new.1982/cargo-c.changes 2026-07-08 17:34:25.049028996 +0200 @@ -1,0 +2,59 @@ +Wed Jul 8 02:00:38 UTC 2026 - William Brown <[email protected]> + +- bsc#1270996 - CVE-2026-45784 - AES-KW incorrect buffer sizing in openssl +- bsc#1270857 - CVE-2026-41898 - unchecked callback-returned length in PSK +- bsc#1270789 - CVE-2026-41681 - MdCtxRef::digest_final() writes past caller buffer +- bsc#1270913 - CVE-2026-44662 - heap buffer overflow when encrypting with AES-KW +- bsc#1270643 - CVE-2026-41678 - incorrect bounds assertion in AES-KW +- bsc#1270572 - CVE-2026-41677 - out-of-bounds read in PEM password callback +- bsc#1270502 - CVE-2026-42327 - arbitrary code execution via specially crafted certificate + +------------------------------------------------------------------- +Wed Jul 08 01:38:25 UTC 2026 - William Brown <[email protected]> + +- Update to version 0.10.23: + * Bump versions + * Bump to cargo-0.96 + * Update object requirement from 0.38.0 to 0.39.1 + * Update implib requirement from 0.4.0 to 0.6.0 + * Fix wrong dylib install name on macOS + * Bump softprops/action-gh-release from 2 to 3 + * Bump actions-rs-plus/clippy-check from 2.4.2 to 2.5.0 + * Bump codecov/codecov-action from 5 to 6 + * Bump actions/download-artifact from 7 to 8 + * Bump actions/upload-artifact from 6 to 7 + * Version bump + * Support cinstall --path and make --manifest-path take either a directory or the path to the toml + * Bump cargo version + * target: emit correct lib dir when cross compiling on Debian + * Bump egor-tensin/setup-mingw from 2 to 3 + * Bump actions/checkout from 5 to 6 + * Bump actions/upload-artifact from 5 to 6 + * Bump cargo and object versions + * Build aarch64 android bins + * Bump actions/checkout from 5 to 6 + * Bump actions/upload-artifact from 5 to 6 + * Remove old macos runner + * Bump actions/download-artifact from 6 to 7 + * Bump actions-rs-plus/clippy-check from 2.3.0 to 2.4.2 + * CI: add basics tests for Cygwin + * Add Cygwin support + * Prepare for release + * Mark the target-specific rustflag as problematic + * Fix the target-specific-lookup for rustflags + * Support target-specific rustflags + * Update to cargo 0.92 + * Bump actions/download-artifact from 5 to 6 + * Bump actions/upload-artifact from 4 to 5 + * Bump toml to 0.9 + * Bump to cargo 0.91 + * Implement installing dSYMs if available + * Fix installing debuginfo files for plugins in the wrong folder + * Bump actions/checkout from 4 to 5 + +------------------------------------------------------------------- +Tue Jul 7 04:25:32 UTC 2026 - William Brown <[email protected]> + +- bsc#1270204 - CVE-2026-41676 - update openssl to 0.10.78 + +------------------------------------------------------------------- Old: ---- cargo-c-0.10.15.tar.xz New: ---- cargo-c-0.10.23.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cargo-c.spec ++++++ --- /var/tmp/diff_new_pack.ppfrHh/_old 2026-07-08 17:34:30.305211414 +0200 +++ /var/tmp/diff_new_pack.ppfrHh/_new 2026-07-08 17:34:30.329212247 +0200 @@ -1,8 +1,7 @@ # # spec file for package cargo-c # -# Copyright (c) 2026 SUSE LLC -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # Copyright (c) 2019 Andreas Schneider <[email protected]>. # # All modifications and additions to the file contributed by third parties @@ -19,7 +18,7 @@ Name: cargo-c -Version: 0.10.15 +Version: 0.10.23 Release: 0 Summary: Helper to build and install c-like libraries from Rust License: MIT @@ -31,7 +30,7 @@ Source1000: README.suse-maint BuildRequires: cargo >= 0.80.0 BuildRequires: cargo-packaging -BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(openssl) >= 3.0.0 %description The is a cargo applet to build and install C-ABI compatibile dynamic and static ++++++ _service ++++++ --- /var/tmp/diff_new_pack.ppfrHh/_old 2026-07-08 17:34:30.773227656 +0200 +++ /var/tmp/diff_new_pack.ppfrHh/_new 2026-07-08 17:34:30.797228489 +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.10.15</param> + <param name="revision">v0.10.23</param> <param name="match-tag">*</param> <param name="versionrewrite-pattern">v?([^+]+)(\+git0.*)?(\+git[1-9][0-9]*.*)?</param> <param name="versionrewrite-replacement">\1\3</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.ppfrHh/_old 2026-07-08 17:34:30.917232654 +0200 +++ /var/tmp/diff_new_pack.ppfrHh/_new 2026-07-08 17:34:30.941233487 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/lu-zero/cargo-c.git</param> - <param name="changesrevision">3e178d5609e5dcc20de3cb0de1bf579329e43784</param></service></servicedata> + <param name="changesrevision">cfdb2752fabf40711d535011c371a8b1c20a1be2</param></service></servicedata> (No newline at EOF) ++++++ cargo-c-0.10.15.tar.xz -> cargo-c-0.10.23.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/.github/workflows/deploy.yml new/cargo-c-0.10.23/.github/workflows/deploy.yml --- old/cargo-c-0.10.15/.github/workflows/deploy.yml 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/.github/workflows/deploy.yml 2026-06-01 08:21:05.000000000 +0200 @@ -24,7 +24,7 @@ runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install stable uses: dtolnay/rust-toolchain@stable @@ -45,7 +45,7 @@ "cargo-ctest.exe" - name: Upload binaries - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: cargo-c-windows-${{ matrix.conf }}-binaries path: cargo-c-windows-${{ matrix.conf }}.zip @@ -63,7 +63,7 @@ runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable @@ -90,17 +90,84 @@ cargo-ctest - name: Upload binaries - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: cargo-c-linux-binaries-${{ matrix.target }} path: cargo-c-${{ matrix.target }}.tar.gz + android-binaries: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + targets: aarch64-linux-android + + - name: Setup Android NDK + uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: r29 + add-to-path: true + + - name: Configure linker and environment + run: | + NDK_BIN="${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin" + + cd $NDK_BIN + ln -sf aarch64-linux-android21-clang aarch64-linux-android-clang + ln -sf aarch64-linux-android21-clang++ aarch64-linux-android-clang++ + + cd $GITHUB_WORKSPACE + mkdir -p .cargo + cat > .cargo/config.toml << EOF + [target.aarch64-linux-android] + linker = "${NDK_BIN}/aarch64-linux-android21-clang" + ar = "${NDK_BIN}/llvm-ar" + EOF + + echo "CC_aarch64_linux_android=${NDK_BIN}/aarch64-linux-android21-clang" >> $GITHUB_ENV + echo "CXX_aarch64_linux_android=${NDK_BIN}/aarch64-linux-android21-clang++" >> $GITHUB_ENV + echo "AR_aarch64_linux_android=${NDK_BIN}/llvm-ar" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=${NDK_BIN}/aarch64-linux-android21-clang" >> $GITHUB_ENV + echo "${NDK_BIN}" >> $GITHUB_PATH + + - name: Build cargo-c + env: + CC_aarch64_linux_android: ${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang + CXX_aarch64_linux_android: ${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++ + AR_aarch64_linux_android: ${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar + run: | + cargo build --target aarch64-linux-android \ + --features=vendored-openssl \ + --profile release-strip + + - name: Create tar + run: | + cd target/aarch64-linux-android/release-strip + tar -czvf $GITHUB_WORKSPACE/cargo-c-aarch64-linux-android.tar.gz \ + cargo-capi \ + cargo-cbuild \ + cargo-cinstall \ + cargo-ctest + + - name: Upload binaries + uses: actions/upload-artifact@v7 + with: + name: cargo-c-android-binaries-aarch64 + path: cargo-c-aarch64-linux-android.tar.gz + macos-binaries: runs-on: macos-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install stable uses: dtolnay/rust-toolchain@stable @@ -121,19 +188,19 @@ cargo-ctest - name: Upload binaries - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: cargo-c-macos-binaries path: cargo-c-macos.zip deploy: - needs: [windows-binaries, linux-binaries, macos-binaries] + needs: [windows-binaries, linux-binaries, android-binaries, macos-binaries] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install stable uses: dtolnay/rust-toolchain@stable @@ -141,18 +208,19 @@ toolchain: stable - name: Download zip files - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v8 - name: Create Cargo.lock run: | cargo update - name: Create a release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 with: files: | Cargo.lock cargo-c-linux-binaries*/*.tar.gz + cargo-c-android-binaries*/*.tar.gz cargo-c-macos-binaries/cargo-c-macos.zip cargo-c-windows-msvc-binaries/cargo-c-windows-msvc.zip cargo-c-windows-gnu-binaries/cargo-c-windows-gnu.zip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/.github/workflows/example-project.yml new/cargo-c-0.10.23/.github/workflows/example-project.yml --- old/cargo-c-0.10.15/.github/workflows/example-project.yml 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/.github/workflows/example-project.yml 2026-06-01 08:21:05.000000000 +0200 @@ -13,9 +13,6 @@ matrix: include: - os: ubuntu-latest - # x86_64: - - os: macos-13 - # arm64: - os: macos-latest - os: windows-latest toolchain-suffix: -gnu @@ -26,7 +23,7 @@ steps: - name: Clone Git repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Install Rust uses: dtolnay/rust-toolchain@stable @@ -132,3 +129,45 @@ meson setup build meson compile -C build meson test -C build + + example-project-cygwin: + runs-on: windows-latest + + defaults: + run: + shell: msys2 {0} + + steps: + - name: Clone Git repository + uses: actions/checkout@v6 + + - name: Install rust + uses: msys2/setup-msys2@v2 + with: + update: true + msystem: MSYS + install: rust pkgconf gcc openssl-devel libopenssl make + + - name: Install cargo-c applet + run: cargo install --path . + + - name: Build C API for example project + working-directory: example-project + run: cargo cbuild --verbose --release + + - name: Install into /usr/local + working-directory: example-project + run: cargo cinstall --verbose --release --prefix=/usr/local + + - name: Test pkgconf + run: | + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + pkgconf --version + test "$(pkgconf --cflags example_project)" = "-I/usr/local/include/example-project-0.1" + test "$(pkgconf --libs example_project)" = "-L/usr/local/lib -lexample-project" + + - name: Test usage from C (using Makefile) + working-directory: example-project/usage-from-c + run: | + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + make diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/.github/workflows/rust.yml new/cargo-c-0.10.23/.github/workflows/rust.yml --- old/cargo-c-0.10.15/.github/workflows/rust.yml 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/.github/workflows/rust.yml 2026-06-01 08:21:05.000000000 +0200 @@ -8,7 +8,7 @@ name: Format and Clippy runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install stable uses: dtolnay/rust-toolchain@stable @@ -21,7 +21,7 @@ cargo fmt --all -- --check - name: Run clippy - uses: actions-rs-plus/[email protected] + uses: actions-rs-plus/[email protected] with: args: --all -- -D warnings @@ -30,7 +30,7 @@ name: Code coverage runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install toolchain uses: dtolnay/rust-toolchain@stable @@ -46,7 +46,7 @@ tar xj -C $HOME/.cargo/bin - name: Set up MinGW - uses: egor-tensin/setup-mingw@v2 + uses: egor-tensin/setup-mingw@v3 with: platform: x64 cc: false @@ -56,7 +56,7 @@ run: bash coverage.sh - name: Codecov upload - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@v6 with: files: coverage.lcov @@ -64,7 +64,7 @@ needs: rustfmt-clippy strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-13, macos-latest] + os: [ubuntu-latest, windows-latest, macos-latest] toolchain: [nightly, stable] include: - toolchain: nightly-gnu @@ -75,7 +75,7 @@ name: ${{matrix.os}}-${{matrix.toolchain}} runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install ${{matrix.toolchain}} uses: dtolnay/rust-toolchain@stable @@ -90,5 +90,29 @@ run: | cargo test --verbose + cygwin-test: + needs: rustfmt-clippy + runs-on: windows-latest + + defaults: + run: + shell: msys2 {0} + + steps: + - name: Clone Git repository + uses: actions/checkout@v6 + + - name: Install rust and dependencies + uses: msys2/setup-msys2@v2 + with: + update: true + msystem: MSYS + install: rust openssl-devel libopenssl pkgconf + - name: Build + run: | + cargo build --verbose + - name: Run tests + run: | + cargo test --verbose diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/Cargo.toml new/cargo-c-0.10.23/Cargo.toml --- old/cargo-c-0.10.15/Cargo.toml 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/Cargo.toml 2026-06-01 08:21:05.000000000 +0200 @@ -1,6 +1,6 @@ [package] name = "cargo-c" -version = "0.10.15+cargo-0.90.0" +version = "0.10.23+cargo-0.97.1" authors = ["Luca Barbato <[email protected]>"] 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.87" +rust-version = "1.94" [[bin]] name = "cargo-capi" @@ -28,14 +28,14 @@ path = "src/bin/ctest.rs" [dependencies] -cargo = "0.90.0" +cargo = "0.97.1" cargo-util = "0.2" semver = "1.0.3" log = "0.4" clap = { version = "4.5.18", features = ["color", "derive", "cargo", "string", "wrap_help"] } regex = "1.5.6" cbindgen = { version="0.29.0", default-features=false } -toml = "0.8" +toml = "1.1" serde = "1.0.123" serde_derive = "1.0" serde_json = "1.0.62" @@ -43,8 +43,11 @@ cc = "1.0" glob = "0.3" itertools = "0.14" -implib = "0.4.0" -object = { version = "0.37.1", default-features = false, features = ["std", "read_core", "pe"] } +implib = "0.6.0" +object = { version = "0.39.1", default-features = false, features = ["std", "read_core", "pe"] } +cargo-platform = "0.3.1" +clap_complete = "4.5.65" +camino = "1.2.2" [features] default = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/README.md new/cargo-c-0.10.23/README.md --- old/cargo-c-0.10.15/README.md 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/README.md 2026-06-01 08:21:05.000000000 +0200 @@ -154,6 +154,11 @@ # Used to disable the generation of additional import library file in platforms # that have the concept such as Windows import_library = false + +[package.metadata.capi.library.target.'cfg(target_os = "linux")'] +# Add target-specific rustflags, the are folded with the main rustflags above +# Note that multiple --version-script support is heavily linker dependent. +rustflags = "-Clink-arg=-Wl,--version-script=assets/version.map" ``` ### Custom data install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/src/build.rs new/cargo-c-0.10.23/src/build.rs --- old/cargo-c-0.10.15/src/build.rs 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/src/build.rs 2026-06-01 08:21:05.000000000 +0200 @@ -1,7 +1,8 @@ use std::collections::HashMap; use std::hash::{DefaultHasher, Hash, Hasher}; -use std::io::Read; +use std::io::{ErrorKind, Read}; use std::path::{Path, PathBuf}; +use std::str::FromStr; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Mutex}; @@ -11,9 +12,11 @@ use cargo::ops::{self, CompileFilter, CompileOptions, FilterRule, LibRule}; use cargo::util::command_prelude::{ArgMatches, ArgMatchesExt, ProfileChecking, UserIntent}; use cargo::util::interning::InternedString; +use cargo::util::BuildLogger; use cargo::{CliResult, GlobalContext}; use anyhow::Context as _; +use cargo_platform::Platform; use cargo_util::paths::{copy, create_dir_all, open, read, read_bytes, write}; use implib::def::ModuleDef; use implib::{Flavor, ImportLibrary, MachineType}; @@ -180,7 +183,7 @@ target: &target::Target, targetdir: &Path, ) -> anyhow::Result<()> { - if target.os == "windows" { + if target.os == "windows" || target.os == "cygwin" { ws.gctx().shell().status("Building", "implib")?; let def_path = targetdir.join(format!("{name}.def")); @@ -308,7 +311,7 @@ let mut f = open(self.path())?; let mut cache_str = String::new(); f.read_to_string(&mut cache_str)?; - let cache = toml::de::from_str(&cache_str)?; + let cache = toml::from_str(&cache_str)?; Ok(cache) } @@ -326,7 +329,7 @@ hash, static_libs: self.static_libs.to_owned(), }; - let buf = toml::ser::to_string(&cache)?; + let buf = toml::to_string(&cache)?; write(self.path(), buf)?; } @@ -486,7 +489,7 @@ .crate_name(); let root_path = pkg.root().to_path_buf(); let manifest_str = read(&root_path.join("Cargo.toml"))?; - let toml = manifest_str.parse::<toml::Value>()?; + let toml = manifest_str.parse::<toml::Table>()?; let capi = toml .get("package") @@ -648,17 +651,38 @@ }); } + fn make_args(args: &str) -> impl Iterator<Item = String> + use<'_> { + args.split(' ') + .map(str::trim) + .filter(|s| !s.is_empty()) + .map(str::to_string) + } + import_library = library .get("import_library") .and_then(|v| v.as_bool()) .unwrap_or(true); + if let Some(args) = library.get("rustflags").and_then(|v| v.as_str()) { + rustflags.extend(make_args(args)); + } + + if let Some(args) = library.get("target").and_then(|v| v.as_table()) { let args = args - .split(' ') - .map(str::trim) - .filter(|s| !s.is_empty()) - .map(str::to_string); - rustflags.extend(args); + .iter() + .filter_map(|(p, v)| { + if Platform::from_str(p) + .ok() + .is_some_and(|p| p.matches(name, &rustc_target.cfg)) + { + v.get("rustflags").and_then(|v| v.as_str()) + } else { + None + } + }) + .flat_map(make_args); + + rustflags.extend(args) } } @@ -889,7 +913,8 @@ ) -> CargoResult<HashMap<PackageId, PathBuf>> { ws.emit_warnings()?; let interner = UnitInterner::new(); - let mut bcx = create_bcx(ws, options, &interner)?; + let logger = BuildLogger::maybe_new(ws, &options.build_config)?; + let mut bcx = create_bcx(ws, options, &interner, logger.as_ref())?; let unit_graph = &bcx.unit_graph; let extra_compiler_args = &mut bcx.extra_compiler_args; @@ -898,10 +923,11 @@ let capi_config = load_manifest_capi_config(pkg, rustc_target)?; let name = &capi_config.library.name; let install_paths = InstallPaths::new(name, rustc_target, args, &capi_config); + let install_path_lib = install_paths.lib_install_dir(&capi_config); let pkg_rustflags = &capi_config.library.rustflags; let mut leaf_args: Vec<String> = rustc_target - .shared_object_link_args(&capi_config, &install_paths.libdir, root_output) + .shared_object_link_args(&capi_config, &install_path_lib, root_output) .into_iter() .flat_map(|l| ["-C".to_string(), format!("link-arg={l}")]) .collect(); @@ -939,7 +965,7 @@ .iter() .filter_map(|l| { let id = l.unit.pkg.package_id(); - if let Some(ref m) = l.script_meta { + l.script_metas.iter().flatten().find_map(|m| { if let Some(env) = r.extra_env.get(m) { env.iter().find_map(|e| { if e.0 == "OUT_DIR" { @@ -951,9 +977,7 @@ } else { None } - } else { - None - } + }) }) .collect(); @@ -1277,7 +1301,33 @@ from_build_targets.debug_info.as_ref(), build_targets.debug_info.as_ref(), ) { - copy(from_debug_info, to_debug_info)?; + if from_debug_info.exists() { + create_dir_all(to_debug_info.parent().unwrap())?; + if from_debug_info.is_dir() { + let files = + from_debug_info.read_dir()?.collect::<Result<Vec<_>, _>>()?; + for f in files.iter() { + let src = f.path(); + let file_name = src.strip_prefix(from_debug_info)?; + let dst = to_debug_info.join(file_name); + match std::fs::create_dir_all( + dst.parent().expect("Source path is not complete"), + ) { + Ok(()) => Ok(()), + Err(v) => { + if v.kind() == ErrorKind::AlreadyExists { + Ok(()) + } else { + Err(v) + } + } + }?; + copy(src, dst)?; + } + } else { + copy(from_debug_info, to_debug_info)?; + } + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/src/build_targets.rs new/cargo-c-0.10.23/src/build_targets.rs --- old/cargo-c-0.10.15/src/build_targets.rs 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/src/build_targets.rs 2026-06-01 08:21:05.000000000 +0200 @@ -131,7 +131,9 @@ pub fn shared_output_file_name(&self) -> Option<OsString> { match self.lib_type() { LibType::Windows => { - if self.shared_lib.is_some() + if self.target.os == "cygwin" { + Some(format!("cyg{}.dll", self.name).into()) + } else if self.shared_lib.is_some() && self.use_meson_naming_convention && self.target.env == "gnu" { @@ -171,9 +173,10 @@ "macos" | "ios" | "tvos" | "visionos" => { 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, None) + let pdb = Some(targetdir.join(format!("lib{lib_name}.dSYM"))); + (shared_lib, static_lib, None, pdb, None) } - "windows" => { + "windows" | "cygwin" => { let shared_lib = targetdir.join(format!("{lib_name}.dll")); let def = targetdir.join(format!("{lib_name}.def")); @@ -189,14 +192,13 @@ (shared_lib, static_lib, Some(impl_lib), pdb, Some(def)) } else { let static_lib = targetdir.join(format!("lib{lib_name}.a")); - let impl_lib = if use_meson_naming_convention { + let impl_lib = if use_meson_naming_convention || target.os == "cygwin" { targetdir.join(format!("lib{lib_name}.dll.a")) } else { targetdir.join(format!("{lib_name}.dll.a")) }; - let pdb = None; - (shared_lib, static_lib, Some(impl_lib), pdb, Some(def)) + (shared_lib, static_lib, Some(impl_lib), None, Some(def)) } } _ => return None, @@ -237,6 +239,8 @@ arch: String::from(""), os: os.to_string(), env: String::from(""), + cfg: Vec::new(), + target: None, }; let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); @@ -261,6 +265,8 @@ arch: String::from(""), os: os.to_string(), env: String::from(""), + cfg: Vec::new(), + target: None, }; let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); @@ -269,7 +275,7 @@ static_lib: PathBuf::from("/foo/bar/libferris.a"), shared_lib: PathBuf::from("/foo/bar/libferris.dylib"), impl_lib: None, - debug_info: None, + debug_info: Some(PathBuf::from("/foo/bar/libferris.dSYM")), def: None, }; @@ -284,6 +290,8 @@ arch: String::from(""), os: String::from("windows"), env: String::from("msvc"), + cfg: Vec::new(), + target: None, }; let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); @@ -305,6 +313,8 @@ arch: String::from(""), os: String::from("windows"), env: String::from("gnu"), + cfg: Vec::new(), + target: None, }; let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); @@ -315,6 +325,29 @@ debug_info: None, def: Some(PathBuf::from("/foo/bar/ferris.def")), }; + + assert_eq!(file_names.unwrap(), expected); + } + + #[test] + fn cygwin() { + let target = Target { + is_target_overridden: false, + arch: String::from(""), + os: String::from("cygwin"), + env: String::from(""), + cfg: Vec::new(), + target: None, + }; + let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); + + let expected = FileNames { + static_lib: PathBuf::from("/foo/bar/libferris.a"), + shared_lib: PathBuf::from("/foo/bar/ferris.dll"), + impl_lib: Some(PathBuf::from("/foo/bar/libferris.dll.a")), + debug_info: None, + def: Some(PathBuf::from("/foo/bar/ferris.def")), + }; assert_eq!(file_names.unwrap(), expected); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/src/cli.rs new/cargo-c-0.10.23/src/cli.rs --- old/cargo-c-0.10.15/src/cli.rs 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/src/cli.rs 2026-06-01 08:21:05.000000000 +0200 @@ -1,13 +1,16 @@ use std::ffi::{OsStr, OsString}; use std::path::PathBuf; -use cargo::util::command_prelude::CommandExt; -use cargo::util::command_prelude::{flag, multi_opt, opt}; +use camino::Utf8PathBuf; +use cargo::util::command_prelude::{flag, heading, multi_opt, opt}; +use cargo::util::command_prelude::{get_ws_member_candidates, CommandExt}; use cargo::util::{style, CliError, CliResult}; use cargo_util::{ProcessBuilder, ProcessError}; +use clap::builder::{StringValueParser, TypedValueParser}; use clap::{Arg, ArgAction, ArgMatches, Command, CommandFactory, Parser}; +use clap_complete::ArgValueCandidates; use crate::target::Target; @@ -57,6 +60,37 @@ meson: bool, } +trait CommandExtC: CommandExt { + fn arg_manifest_path_alias_path(self, with_alias: bool) -> Self { + let o = opt("manifest-path", "Path to Cargo.toml") + .value_name("PATH") + .help_heading(heading::MANIFEST_OPTIONS) + .value_parser(StringValueParser::new().map(|p| { + let mut p = Utf8PathBuf::from(p); + if p.is_dir() { + p.push("Cargo.toml"); + } + p.into_string() + })) + .add(clap_complete::engine::ArgValueCompleter::new( + clap_complete::engine::PathCompleter::any().filter(|path| { + path.join("Cargo.toml").exists() + || path.file_name() == Some(OsStr::new("Cargo.toml")) + || cargo::util::toml::is_embedded(path) + }), + )); + + let o = if with_alias { + o.visible_alias("path") + } else { + o + }; + self._arg(o) + } +} + +impl CommandExtC for Command {} + pub fn main_cli() -> Command { let styles = { clap::builder::styling::Styles::styled() @@ -135,9 +169,7 @@ .arg_features() .arg_target_triple("Build for the target triple") .arg_target_dir() - .arg_manifest_path() - .arg_message_format() - .arg_build_plan(); + .arg_message_format(); if let Ok(t) = default_target { app.mut_arg("prefix", |a| { @@ -166,7 +198,9 @@ "Package to build (see `cargo help pkgid`)", "Build all packages in the workspace", "Exclude packages from the build", + ArgValueCandidates::new(get_ws_member_candidates), ) + .arg_manifest_path_alias_path(false) .after_help( " Compilation can be configured via the use of profiles which are configured in @@ -188,7 +222,9 @@ "Package to install (see `cargo help pkgid`)", "Install all packages in the workspace", "Exclude packages from being installed", + ArgValueCandidates::new(get_ws_member_candidates), ) + .arg_manifest_path_alias_path(true) .after_help( " Compilation can be configured via the use of profiles which are configured in @@ -218,7 +254,9 @@ "Package to run tests for", "Test all packages in the workspace", "Exclude packages from the test", + ArgValueCandidates::new(get_ws_member_candidates), ) + .arg_manifest_path_alias_path(false) .arg(flag("no-run", "Compile, but don't run tests")) .arg(flag("no-fail-fast", "Run all tests regardless of failure")) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/src/install.rs new/cargo-c-0.10.23/src/install.rs --- old/cargo-c-0.10.15/src/install.rs 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/src/install.rs 2026-06-01 08:21:05.000000000 +0200 @@ -1,4 +1,5 @@ use clap::ArgMatches; +use std::io::ErrorKind; use std::path::{Component, Path, PathBuf}; use cargo::core::Workspace; @@ -106,7 +107,7 @@ | ("emscripten", _) | ("hurd", _) => LibType::So, ("macos", _) | ("ios", _) | ("tvos", _) | ("visionos", _) => LibType::Dylib, - ("windows", _) => LibType::Windows, + ("windows", _) | ("cygwin", _) => LibType::Windows, _ => unimplemented!("The target {}-{} is not supported yet", os, env), } } @@ -200,13 +201,9 @@ let destdir = &paths.destdir; - let mut install_path_lib = paths.libdir.clone(); - if let Some(subdir) = &capi_config.library.install_subdir { - install_path_lib.push(subdir); - } - let install_path_bin = append_to_destdir(destdir.as_deref(), &paths.bindir); - let install_path_lib = append_to_destdir(destdir.as_deref(), &install_path_lib); + let install_path_lib = + append_to_destdir(destdir.as_deref(), &paths.lib_install_dir(capi_config)); let install_path_pc = append_to_destdir(destdir.as_deref(), &paths.pkgconfigdir); let install_path_include = append_to_destdir(destdir.as_deref(), &paths.includedir); let install_path_data = append_to_destdir(destdir.as_deref(), &paths.datadir); @@ -285,12 +282,42 @@ ws.gctx() .shell() .status("Installing", "debugging information")?; - let destination_path = build_targets - .debug_info_file_name(&install_path_bin, &install_path_lib) - .unwrap(); + + let destination_path = if capi_config.library.install_subdir.is_none() { + build_targets + .debug_info_file_name(&install_path_bin, &install_path_lib) + .unwrap() + } else { + // We assume they are plugins, install them in the custom libdir path + build_targets + .debug_info_file_name(&install_path_lib, &install_path_lib) + .unwrap() + }; create_dir_all(destination_path.parent().unwrap())?; - copy(ws, debug_info, destination_path)?; + if debug_info.is_dir() { + let files = debug_info.read_dir()?.collect::<Result<Vec<_>, _>>()?; + for f in files.iter() { + let src = f.path(); + let file_name = src.strip_prefix(debug_info)?; + let dst = destination_path.join(file_name); + match std::fs::create_dir_all( + dst.parent().expect("Source path is not complete"), + ) { + Ok(()) => Ok(()), + Err(v) => { + if v.kind() == ErrorKind::AlreadyExists { + Ok(()) + } else { + Err(v) + } + } + }?; + copy(ws, src, dst)?; + } + } else { + copy(ws, debug_info, destination_path)?; + } } else { ws.gctx() .shell() @@ -326,6 +353,15 @@ } impl InstallPaths { + pub fn lib_install_dir(&self, capi_config: &CApiConfig) -> PathBuf { + let mut lib_install_dir = self.libdir.clone(); + if let Some(subdir) = &capi_config.library.install_subdir { + lib_install_dir.push(subdir); + } + + lib_install_dir + } + pub fn new( _name: &str, rustc_target: &Target, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cargo-c-0.10.15/src/target.rs new/cargo-c-0.10.23/src/target.rs --- old/cargo-c-0.10.15/src/target.rs 2025-08-10 18:03:53.000000000 +0200 +++ new/cargo-c-0.10.23/src/target.rs 2026-06-01 08:21:05.000000000 +0200 @@ -1,9 +1,11 @@ use std::env::consts; use std::path::{Path, PathBuf}; - -use anyhow::*; +use std::str::FromStr; use crate::build::CApiConfig; +use anyhow::*; +use cargo::core::compiler::CompileTarget; +use cargo_platform::Cfg; /// Split a target string to its components /// @@ -16,15 +18,18 @@ // pub vendor: String, pub os: String, pub env: String, + pub target: Option<CompileTarget>, + pub cfg: Vec<Cfg>, } impl Target { - pub fn new<T: AsRef<std::ffi::OsStr>>( + pub fn new<T: AsRef<std::ffi::OsStr> + AsRef<str>>( target: Option<T>, is_target_overridden: bool, - ) -> Result<Self, anyhow::Error> { + ) -> Result<Self> { let rustc = std::env::var("RUSTC").unwrap_or_else(|_| "rustc".into()); let mut cmd = std::process::Command::new(rustc); + let target = target.as_ref(); cmd.arg("--print").arg("cfg"); if let Some(target) = target { @@ -46,18 +51,39 @@ let s = std::str::from_utf8(&out.stdout).unwrap(); + let lines = s.lines(); + + let cfg = lines + .map(|line| Ok(Cfg::from_str(line)?)) + .collect::<Result<Vec<_>>>() + .with_context(|| { + format!( + "failed to parse the cfg from `rustc --print=cfg`, got:\n{}", + s + ) + })?; + Ok(Target { arch: match_re(arch_re, s), // vendor: match_re(vendor_re, s), os: match_re(os_re, s), env: match_re(env_re, s), is_target_overridden, + target: target + .map(|t| CompileTarget::new(t.as_ref(), false)) + .transpose()?, + cfg, }) } else { Err(anyhow!("Cannot run {:?}", cmd)) } } + /// Produce the target name, if known + pub fn name(&self) -> Option<&str> { + self.target.as_ref().map(|t| t.short_name()) + } + /// Build a list of linker arguments pub fn shared_object_link_args( &self, @@ -109,7 +135,7 @@ lines.push(line); // Enable larger LC_RPATH and install_name entries lines.push("-Wl,-headerpad_max_install_names".to_string()); - } else if os == "windows" && env == "gnu" { + } else if (os == "windows" && env == "gnu") || (os == "cygwin") { // This is only set up to work on GNU toolchain versions of Rust lines.push(format!( "-Wl,--output-def,{}", @@ -137,11 +163,20 @@ } pub fn default_libdir(&self) -> PathBuf { - if self.is_target_overridden || self.is_freebsd() { + if self.is_freebsd() { return "lib".into(); } if PathBuf::from("/etc/debian_version").exists() { + // cross support - if the explicit target matches what Debian sets when cross building, + // proceed with the Multi-Arch compatible lib dir. if it doesn't match (different + // target, or env var not set) proceed with the generic "lib" + if self.is_target_overridden { + let debian_target = std::env::var("DEB_HOST_RUST_TYPE").ok(); + if debian_target.as_deref() != self.name() { + return "lib".into(); + } + } let pc = std::process::Command::new("dpkg-architecture") .arg("-qDEB_HOST_MULTIARCH") .output(); @@ -153,6 +188,10 @@ } } + if self.is_target_overridden { + return "lib".into(); + } + if consts::ARCH.eq_ignore_ascii_case(&self.arch) && consts::OS.eq_ignore_ascii_case(&self.os) { ++++++ cargo-c.obsinfo ++++++ --- /var/tmp/diff_new_pack.ppfrHh/_old 2026-07-08 17:34:31.669258754 +0200 +++ /var/tmp/diff_new_pack.ppfrHh/_new 2026-07-08 17:34:31.717260419 +0200 @@ -1,5 +1,5 @@ name: cargo-c -version: 0.10.15 -mtime: 1754841833 -commit: 3e178d5609e5dcc20de3cb0de1bf579329e43784 +version: 0.10.23 +mtime: 1780294865 +commit: cfdb2752fabf40711d535011c371a8b1c20a1be2 ++++++ vendor.tar.xz ++++++ /work/SRC/openSUSE:Factory/cargo-c/vendor.tar.xz /work/SRC/openSUSE:Factory/.cargo-c.new.1982/vendor.tar.xz differ: char 15, line 1
