Alex Nicolaou | diff --git a/pkgs/applications/networking/p2p/transmission/4.nix b/pkgs/applications/networking/p2p/transmission/4.nix
index 77585c18484c..8382a0c7d52e 100644
--- a/pkgs/applications/networking/p2p/transmission/4.nix
+++ b/pkgs/applications/networking/p2p/transmission/4.nix
@@ -49,7 +49,7 @@
}:
let
- inherit (lib) cmakeBool optional optionals;
+ inherit (lib) cmakeBool optional optionals optionalString;
apparmorRules = apparmorRulesFromClosure { name = "transmission-daemon"; } (
[
@@ -204,6 +204,17 @@ stdenv.mkDerivation (finalAttrs: {
install -Dm0444 -t $out/share/icons ../icons/hicolor_apps_scalable_transmission.svg
'';
+ postFixup = optionalString enableMac ''
+ # The macOS bundle fixup collapses different store paths that share the
+ # basename libiconv.2.dylib into a single bundled file. libintl is linked
+ # against Darwin libiconv's ABI (_iconv), while libpsl pulls GNU libiconv
+ # (_libiconv) into the closure. Point libintl back at the Darwin store path
+ # to avoid the basename collision inside the app bundle.
+ install_name_tool \
+ -change @rpath/libiconv.2.dylib ${libiconv}/lib/libiconv.2.dylib \
+ $out/Applications/Transmission.app/Contents/MacOS/libintl.8.dylib
+ '';
+
passthru.tests = {
apparmor = nixosTests.transmission_4; # starts the service with apparmor enabled
smoke-test = nixosTests.bittorrent;
| 04:55:51 |
Alex Nicolaou | Here's Gemini's version, seems a bit longer (needlessly?)
--- gemini/transmission.nix.orig 2026-03-20 00:57:41
+++ gemini/transmission.nix 2026-03-20 00:55:01
@@ -25,6 +25,7 @@
dht,
libnatpmp,
libiconv,
+ gettext,
# Build options
enableGTK3 ? false,
gtkmm3,
@@ -111,7 +112,7 @@
# Excluding gtest since it is hardcoded to vendored version. The rest of the listed libraries are not packaged.
pushd third-party
for f in *; do
- if [[ ! $f =~ googletest|wildmat|wide-integer|jsonsl|madler-crcany ]]; then
+ if [[ ! $f =~ googletest|wildmat|wide-integer|jsonsl|madler-crcany|libutp|dht|natpmp ]]; then
rm -r "$f"
fi
done
@@ -178,9 +179,12 @@
]
++ optionals enableSystemd [ systemd ]
++ optionals stdenv.hostPlatform.isLinux [ inotify-tools ]
- ++ optionals enableMac [ libiconv ];
+ ++ optionals enableMac [
+ darwin.libiconv
+ gettext
+ ];
- postInstall = optional stdenv.hostPlatform.isLinux ''
+ postInstall = lib.optionalString stdenv.hostPlatform.isLinux ''
mkdir $apparmor
cat >$apparmor/bin.transmission-daemon <<EOF
abi <abi/4.0>,
@@ -202,6 +206,14 @@
}
EOF
install -Dm0444 -t $out/share/icons ../icons/hicolor_apps_scalable_transmission.svg
+ '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
+ # The build system's bundling logic is flawed and picks up the wrong libiconv.
+ # We manually replace it with the Apple-compatible one from nixpkgs.
+ APP_MACOS="$out/Applications/Transmission.app/Contents/MacOS"
+ rm "$APP_MACOS/libiconv.2.dylib"
+ cp "${darwin.libiconv}/lib/libiconv.2.dylib" "$APP_MACOS/"
+ chmod +w "$APP_MACOS/libiconv.2.dylib"
+ install_name_tool -id "@rpath/libiconv.2.dylib" "$APP_MACOS/libiconv.2.dylib"
'';
passthru.tests = {
| 04:59:01 |