Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package cargo-auditable for openSUSE:Factory 
checked in at 2026-09-16 17:40:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cargo-auditable (Old)
 and      /work/SRC/openSUSE:Factory/.cargo-auditable.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "cargo-auditable"

Wed Sep 16 17:40:44 2026 rev:11 rq:1378056 version:0.7.6~0

Changes:
--------
--- /work/SRC/openSUSE:Factory/cargo-auditable/cargo-auditable.changes  
2026-05-28 17:24:13.492977773 +0200
+++ 
/work/SRC/openSUSE:Factory/.cargo-auditable.new.383539/cargo-auditable.changes  
    2026-09-16 17:41:07.736007059 +0200
@@ -1,0 +2,16 @@
+Tue Sep 15 00:39:45 UTC 2026 - [email protected]
+
+- Update to version 0.7.6~0:
+  * Fill in changelog, bump version
+  * Require target_abi before naming a device-family Apple platform
+  * Emit no build version for unrecognised Apple targets
+  * Emit LC_BUILD_VERSION in Mach-O metadata objects
+  * auditable-info: bump version to 0.10.1
+  * Upgrade miniz_oxide to 0.9
+  * Change example script location to XDG location
+  * add example for rustup +toolchain syntax when replacing cargo
+  * Add a link to Ubuntu
+  * wording
+  * Document Ubuntu adoption
+
+-------------------------------------------------------------------

Old:
----
  cargo-auditable-0.7.5~0.tar.zst

New:
----
  cargo-auditable-0.7.6~0.tar.zst

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ cargo-auditable.spec ++++++
--- /var/tmp/diff_new_pack.53AG7U/_old  2026-09-16 17:41:08.734048761 +0200
+++ /var/tmp/diff_new_pack.53AG7U/_new  2026-09-16 17:41:08.736048845 +0200
@@ -21,7 +21,7 @@
 %define __cargo_common_opts %{?_smp_mflags}
 
 Name:           cargo-auditable
-Version:        0.7.5~0
+Version:        0.7.6~0
 Release:        0
 Summary:        A tool to embed auditing information in ELF sections of rust 
binaries
 #               If you know the license, put it's SPDX string here.

++++++ _service ++++++
--- /var/tmp/diff_new_pack.53AG7U/_old  2026-09-16 17:41:08.787050976 +0200
+++ /var/tmp/diff_new_pack.53AG7U/_new  2026-09-16 17:41:08.797051394 +0200
@@ -3,7 +3,7 @@
     <param 
name="url">https://github.com/rust-secure-code/cargo-auditable.git</param>
     <param name="versionformat">@PARENT_TAG@~@TAG_OFFSET@</param>
     <param name="scm">git</param>
-    <param name="revision">v0.7.5</param>
+    <param name="revision">v0.7.6</param>
     <param name="match-tag">v*</param>
     <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.53AG7U/_old  2026-09-16 17:41:08.852053692 +0200
+++ /var/tmp/diff_new_pack.53AG7U/_new  2026-09-16 17:41:08.862054110 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/rust-secure-code/cargo-auditable.git</param>
-              <param 
name="changesrevision">9dc5ff28ff204b73eae91bd96cde4413fdcb70e0</param></service></servicedata>
+              <param 
name="changesrevision">fb744c1a27950229403054d3c950ca3fe36b78d4</param></service></servicedata>
 (No newline at EOF)
 

++++++ cargo-auditable-0.7.5~0.tar.zst -> cargo-auditable-0.7.6~0.tar.zst ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cargo-auditable-0.7.5~0/Cargo.lock 
new/cargo-auditable-0.7.6~0/Cargo.lock
--- old/cargo-auditable-0.7.5~0/Cargo.lock      2026-05-22 01:24:53.000000000 
+0200
+++ new/cargo-auditable-0.7.6~0/Cargo.lock      2026-09-13 17:59:28.000000000 
+0200
@@ -35,7 +35,7 @@
 
 [[package]]
 name = "auditable-info"
-version = "0.10.0"
+version = "0.10.1"
 dependencies = [
  "auditable-extract",
  "auditable-serde",
@@ -116,7 +116,7 @@
 
 [[package]]
 name = "cargo-auditable"
-version = "0.7.5"
+version = "0.7.6"
 dependencies = [
  "auditable-info",
  "auditable-serde",
@@ -346,11 +346,12 @@
 
 [[package]]
 name = "miniz_oxide"
-version = "0.8.9"
+version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c"
 dependencies = [
  "adler2",
+ "serde",
 ]
 
 [[package]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cargo-auditable-0.7.5~0/README.md 
new/cargo-auditable-0.7.6~0/README.md
--- old/cargo-auditable-0.7.5~0/README.md       2026-05-22 01:24:53.000000000 
+0200
+++ new/cargo-auditable-0.7.6~0/README.md       2026-09-13 17:59:28.000000000 
+0200
@@ -45,6 +45,8 @@
 
 Multiple Linux distributions build their Rust packages with `cargo auditable`: 
[Alpine Linux](https://www.alpinelinux.org/), [NixOS](https://nixos.org/), 
[openSUSE](https://www.opensuse.org/), [Void Linux](https://voidlinux.org/), 
[Chimera Linux](https://chimera-linux.org/) and [Wolfi OS](https://wolfi.dev). 
If you install packages from their repositories, you can audit them!
 
+[Ubuntu 26.04](https://documentation.ubuntu.com/release-notes/26.04/) uses it 
[for select 
packages](https://documentation.ubuntu.com/release-notes/26.04/changes-since-previous-interim/#rust-cargo-auditable)
 and lets others [opt 
in](https://documentation.ubuntu.com/project/contributors/language-specific/rust/cargo-auditable/),
 including in 
[PPAs](https://documentation.ubuntu.com/launchpad/user/reference/packaging/ppas/ppa/).
+
 [Chainguard](https://chainguard.dev/) includes `cargo auditable` in their 
[rust base 
container](https://images.chainguard.dev/directory/image/rust/overview), with a 
default `cargo` wrapper to always call `cargo auditable`, so that Rust 
applications built using this container are auditable by default.
 
 ## FAQ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cargo-auditable-0.7.5~0/REPLACING_CARGO.md 
new/cargo-auditable-0.7.6~0/REPLACING_CARGO.md
--- old/cargo-auditable-0.7.5~0/REPLACING_CARGO.md      2026-05-22 
01:24:53.000000000 +0200
+++ new/cargo-auditable-0.7.6~0/REPLACING_CARGO.md      2026-09-13 
17:59:28.000000000 +0200
@@ -16,10 +16,19 @@
 2. Copy the snippet provided below and replace '/path/to/cargo' with the path 
you got at step 1
 3. Save it to a file named `cargo`
 4. Run `chmod +x cargo` to make the script executable
-5. Prepend the path to the directory where you saved the script to your `PATH` 
environment variable. For example, if you saved the script as 
`$HOME/.bin/cargo`, you need to add `$HOME/.bin/` to your `PATH`. The exact way 
to do this varies depending on the shell; in bash it's `export 
PATH="$HOME/.bin/:$PATH"`
+5. Prepend the path to the directory where you saved the script to your `PATH` 
environment variable. For example, if you saved the script as 
`$HOME/.local/bin/cargo`, you need to make sure `$HOME/.local/bin/` is on your 
`PATH`. The exact way to do this varies depending on the shell; in bash it's 
`export PATH="$HOME/.local/bin/:$PATH"`
 
 ```bash
 #!/bin/sh
 REAL_CARGO='/path/to/real/cargo' # replace this with your path
 exec "$REAL_CARGO" auditable "$@"
 ```
+
+If you want to preserve rustup's `+toolchain` syntax, shift it before the 
`auditable` subcommand:
+
+```bash
+case "$1" in
+  +*) toolchain="$1"; shift; exec "$REAL_CARGO" "$toolchain" auditable "$@" ;;
+   *)                        exec "$REAL_CARGO"              auditable "$@" ;;
+esac
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cargo-auditable-0.7.5~0/auditable-info/Cargo.toml 
new/cargo-auditable-0.7.6~0/auditable-info/Cargo.toml
--- old/cargo-auditable-0.7.5~0/auditable-info/Cargo.toml       2026-05-22 
01:24:53.000000000 +0200
+++ new/cargo-auditable-0.7.6~0/auditable-info/Cargo.toml       2026-09-13 
17:59:28.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "auditable-info"
-version = "0.10.0"
+version = "0.10.1"
 authors = ["Sergey \"Shnatsel\" Davidoff <[email protected]>"]
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-secure-code/cargo-auditable";
@@ -12,7 +12,7 @@
 
 [dependencies]
 auditable-extract = {version = "0.3.4", path = "../auditable-extract", 
default-features = false }
-miniz_oxide = { version = "0.8.0", features = ["std"] }
+miniz_oxide = { version = "0.9", features = ["std"] }
 auditable-serde = {version = "0.9.0", path = "../auditable-serde", optional = 
true}
 serde_json = { version = "1.0.57", optional = true }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cargo-auditable-0.7.5~0/auditable-info/src/error.rs 
new/cargo-auditable-0.7.6~0/auditable-info/src/error.rs
--- old/cargo-auditable-0.7.5~0/auditable-info/src/error.rs     2026-05-22 
01:24:53.000000000 +0200
+++ new/cargo-auditable-0.7.6~0/auditable-info/src/error.rs     2026-09-13 
17:59:28.000000000 +0200
@@ -140,6 +140,7 @@
             inflate::TINFLStatus::Done => Self::Done,
             inflate::TINFLStatus::NeedsMoreInput => Self::NeedsMoreInput,
             inflate::TINFLStatus::HasMoreOutput => Self::HasMoreOutput,
+            _ => Self::Failed, // Unknown status
         }
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cargo-auditable-0.7.5~0/cargo-auditable/CHANGELOG.md 
new/cargo-auditable-0.7.6~0/cargo-auditable/CHANGELOG.md
--- old/cargo-auditable-0.7.5~0/cargo-auditable/CHANGELOG.md    2026-05-22 
01:24:53.000000000 +0200
+++ new/cargo-auditable-0.7.6~0/cargo-auditable/CHANGELOG.md    2026-09-13 
17:59:28.000000000 +0200
@@ -5,6 +5,12 @@
 The format is based on [Keep a 
Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic 
Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.7.6] - 2026-09-13
+
+### Fixed
+
+ - Fixed a harmless linker warning on Apple platforms visible in Rust 1.97 and 
later.
+
 ## [0.7.5] - 2026-05-22
 
 ### Fixed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cargo-auditable-0.7.5~0/cargo-auditable/Cargo.toml 
new/cargo-auditable-0.7.6~0/cargo-auditable/Cargo.toml
--- old/cargo-auditable-0.7.5~0/cargo-auditable/Cargo.toml      2026-05-22 
01:24:53.000000000 +0200
+++ new/cargo-auditable-0.7.6~0/cargo-auditable/Cargo.toml      2026-09-13 
17:59:28.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "cargo-auditable"
-version = "0.7.5"
+version = "0.7.6"
 edition = "2021"
 authors = ["Sergey \"Shnatsel\" Davidoff <[email protected]>"]
 license = "MIT OR Apache-2.0"
@@ -15,7 +15,7 @@
 [dependencies]
 object = {version = "0.37", default-features = false, features = ["write"]}
 auditable-serde = {version = "0.9.0", path = "../auditable-serde"}
-miniz_oxide = {version = "0.8.0"}
+miniz_oxide = {version = "0.9"}
 serde_json = "1.0.57"
 cargo_metadata = "0.23"
 pico-args = { version = "0.5", features = ["eq-separator", "short-space-opt"] }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cargo-auditable-0.7.5~0/cargo-auditable/src/object_file.rs 
new/cargo-auditable-0.7.6~0/cargo-auditable/src/object_file.rs
--- old/cargo-auditable-0.7.5~0/cargo-auditable/src/object_file.rs      
2026-05-22 01:24:53.000000000 +0200
+++ new/cargo-auditable-0.7.6~0/cargo-auditable/src/object_file.rs      
2026-09-13 17:59:28.000000000 +0200
@@ -47,6 +47,60 @@
     Some(file.write().unwrap())
 }
 
+/// Mach-O object files are expected to carry an `LC_BUILD_VERSION` load 
command
+/// describing the platform they were built for. Without it Apple's `ld` has 
nothing
+/// to read the platform from, so it guesses and reports the guess on stderr:
+///
+/// ```text
+/// ld: no platform load command found in '..._audit_data.o', assuming: macOS
+/// ```
+///
+/// Since Rust 1.97 the compiler surfaces linker output through the 
`linker_messages`
+/// lint, which makes that message visible on every `cargo auditable build` on 
macOS.
+///
+/// rustc emits the load command for the same reason, in the file this module 
is
+/// adapted from: see `macho_object_build_version_for_target` in
+/// `compiler/rustc_codegen_ssa/src/back/metadata.rs`.
+///
+/// `minos` and `sdk` are deliberately left at zero. This object carries only 
the
+/// dependency list and no code, so it constrains nothing at runtime, and 
declaring a
+/// minimum OS version it does not actually require risks conflicting with the
+/// deployment target of the binary it is linked into. rustc omits the SDK 
version for
+/// the same reason.
+fn macho_build_version(info: &RustcTargetInfo) -> 
Option<write::MachOBuildVersion> {
+    let target_os = info.get("target_os").map(String::as_str);
+    let target_abi = info.get("target_abi").map(String::as_str);
+    let platform = match (target_os, target_abi) {
+        // macOS is the one Apple OS with no ABI variants — every 
`*-apple-darwin`
+        // target reports an empty `target_abi` — so it is unambiguous even 
when the
+        // key is missing entirely, which is what a pre-1.75-ish rustc gives 
us.
+        (Some("macos"), _) => object::macho::PLATFORM_MACOS,
+        // For every other Apple OS the ABI is precisely what separates device 
from
+        // simulator from Mac Catalyst, so an ABSENT `target_abi` is not 
"device" —
+        // it is "unknown", and must fall through to emitting nothing.
+        (Some("ios"), Some("macabi")) => object::macho::PLATFORM_MACCATALYST,
+        (Some("ios"), Some("sim")) => object::macho::PLATFORM_IOSSIMULATOR,
+        (Some("ios"), Some(_)) => object::macho::PLATFORM_IOS,
+        (Some("tvos"), Some("sim")) => object::macho::PLATFORM_TVOSSIMULATOR,
+        (Some("tvos"), Some(_)) => object::macho::PLATFORM_TVOS,
+        (Some("watchos"), Some("sim")) => 
object::macho::PLATFORM_WATCHOSSIMULATOR,
+        (Some("watchos"), Some(_)) => object::macho::PLATFORM_WATCHOS,
+        (Some("visionos"), Some("sim")) => 
object::macho::PLATFORM_XROSSIMULATOR,
+        (Some("visionos"), Some(_)) => object::macho::PLATFORM_XROS,
+        // An Apple target we cannot identify: either an OS added after this 
was
+        // written, or a device-family target built by a compiler too old to
+        // report `target_abi`. Emit nothing rather than assert a platform we
+        // cannot verify — the warning is the current behaviour and is
+        // recoverable, whereas a WRONG platform is a hard link failure
+        // (`ld: ... has platform iOS, which is different from target platform
+        // macCatalyst`).
+        _ => return None,
+    };
+    let mut build_version = write::MachOBuildVersion::default();
+    build_version.platform = platform;
+    Some(build_version)
+}
+
 fn create_object_file(
     info: &RustcTargetInfo,
     target_triple: &str,
@@ -97,6 +151,11 @@
     };
 
     let mut file = write::Object::new(binary_format, architecture, endianness);
+    if binary_format == BinaryFormat::MachO {
+        if let Some(build_version) = macho_build_version(info) {
+            file.set_macho_build_version(build_version);
+        }
+    }
     let e_flags = match architecture {
         Architecture::Mips => {
             // the original code matches on info we don't have to support 
pre-1999 MIPS variants:
@@ -262,6 +321,108 @@
     use super::*;
     use crate::target_info::parse_rustc_target_info;
 
+    fn apple_target_info(target_os: &str, target_abi: Option<&str>) -> 
RustcTargetInfo {
+        let mut info = HashMap::from([
+            ("target_vendor".to_owned(), "apple".to_owned()),
+            ("target_os".to_owned(), target_os.to_owned()),
+        ]);
+        if let Some(abi) = target_abi {
+            info.insert("target_abi".to_owned(), abi.to_owned());
+        }
+        info
+    }
+
+    #[test]
+    fn test_macho_platform_detection() {
+        use object::macho;
+
+        // Device targets report an EMPTY `target_abi`, which is what rustc
+        // actually emits (`aarch64-apple-ios` -> `target_abi=""`). A MISSING 
key
+        // is a different case entirely and is covered by its own test below.
+        let cases = [
+            (("macos", Some("")), macho::PLATFORM_MACOS),
+            (("ios", Some("")), macho::PLATFORM_IOS),
+            (("ios", Some("sim")), macho::PLATFORM_IOSSIMULATOR),
+            (("ios", Some("macabi")), macho::PLATFORM_MACCATALYST),
+            (("tvos", Some("")), macho::PLATFORM_TVOS),
+            (("tvos", Some("sim")), macho::PLATFORM_TVOSSIMULATOR),
+            (("watchos", Some("")), macho::PLATFORM_WATCHOS),
+            (("watchos", Some("sim")), macho::PLATFORM_WATCHOSSIMULATOR),
+            (("visionos", Some("")), macho::PLATFORM_XROS),
+            (("visionos", Some("sim")), macho::PLATFORM_XROSSIMULATOR),
+        ];
+        for ((target_os, target_abi), expected) in cases {
+            let info = apple_target_info(target_os, target_abi);
+            assert_eq!(
+                macho_build_version(&info).expect("known platform").platform,
+                expected,
+                "target_os={target_os} target_abi={target_abi:?}"
+            );
+        }
+    }
+
+    /// The minimum OS version and SDK version are deliberately left unset: 
this
+    /// object carries no code, so declaring a minimum it does not require 
could
+    /// conflict with the deployment target of the binary it is linked into.
+    #[test]
+    fn test_macho_build_version_leaves_minos_and_sdk_unset() {
+        let version =
+            macho_build_version(&apple_target_info("macos", 
None)).expect("known platform");
+        assert_eq!(version.minos, 0);
+        assert_eq!(version.sdk, 0);
+    }
+
+    /// An Apple target we do not recognise gets no load command at all, rather
+    /// than a platform we cannot verify.
+    #[test]
+    fn test_macho_build_version_absent_for_unknown_platform() {
+        assert!(macho_build_version(&apple_target_info("futureos", 
None)).is_none());
+    }
+
+    /// Regression: a compiler too old to report `target_abi` must NOT be 
treated
+    /// as "device". rustc 1.74 omits the key entirely for every Apple target —
+    /// verified against a real 1.74.0 toolchain — so `x86_64-apple-ios-macabi`
+    /// and `aarch64-apple-ios-sim` arrive indistinguishable from device iOS.
+    /// Guessing `PLATFORM_IOS` there is not a cosmetic error: the linker 
rejects
+    /// the mismatch outright (`has platform iOS, which is different from 
target
+    /// platform macCatalyst`), turning today's harmless warning into a build
+    /// failure. Emit nothing instead.
+    #[test]
+    fn test_macho_build_version_absent_when_target_abi_is_unavailable() {
+        for os in ["ios", "tvos", "watchos", "visionos"] {
+            assert!(
+                macho_build_version(&apple_target_info(os, None)).is_none(),
+                "{os} without target_abi must not be assumed to be a device 
target"
+            );
+        }
+    }
+
+    /// ...but macOS is still identifiable without `target_abi`, because it is 
the
+    /// one Apple OS with no ABI variants (every `*-apple-darwin` target 
reports an
+    /// empty `target_abi`). Requiring the key here would silently drop the 
load
+    /// command on the most common platform whenever an older compiler is 
wrapped.
+    #[test]
+    fn test_macho_build_version_present_for_macos_without_target_abi() {
+        assert_eq!(
+            macho_build_version(&apple_target_info("macos", None))
+                .expect("macOS is unambiguous without target_abi")
+                .platform,
+            object::macho::PLATFORM_MACOS
+        );
+    }
+
+    /// Device targets report an EMPTY `target_abi`, not a missing one — that 
is
+    /// what distinguishes them from the old-compiler case above.
+    #[test]
+    fn test_macho_build_version_empty_target_abi_is_a_device_target() {
+        assert_eq!(
+            macho_build_version(&apple_target_info("ios", Some("")))
+                .expect("empty target_abi is a device target")
+                .platform,
+            object::macho::PLATFORM_IOS
+        );
+    }
+
     #[test]
     fn test_riscv_abi_detection() {
         // real-world target with double floats

++++++ cargo-auditable.obsinfo ++++++
--- /var/tmp/diff_new_pack.53AG7U/_old  2026-09-16 17:41:09.154066311 +0200
+++ /var/tmp/diff_new_pack.53AG7U/_new  2026-09-16 17:41:09.162066646 +0200
@@ -1,5 +1,5 @@
 name: cargo-auditable
-version: 0.7.5~0
-mtime: 1779405893
-commit: 9dc5ff28ff204b73eae91bd96cde4413fdcb70e0
+version: 0.7.6~0
+mtime: 1789315168
+commit: fb744c1a27950229403054d3c950ca3fe36b78d4
 

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/cargo-auditable/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.cargo-auditable.new.383539/vendor.tar.zst differ: 
char 7, line 1

Reply via email to