Skip to content

Commit

Permalink
Merge pull request #249268 from Enzime/remmina-bundle
Browse files Browse the repository at this point in the history
writeDarwinBundle: use binary wrapper
  • Loading branch information
toonn authored Sep 14, 2023
2 parents 67f7fb5 + 66884a4 commit 924efe5
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 15 deletions.
14 changes: 12 additions & 2 deletions pkgs/applications/networking/remote/remmina/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{ lib, stdenv, fetchFromGitLab, cmake, ninja, pkg-config, wrapGAppsHook
{ lib, stdenv, fetchFromGitLab, fetchpatch, cmake, ninja, pkg-config, wrapGAppsHook
, desktopToDarwinBundle
, glib, gtk3, gettext, libxkbfile, libX11, python3
, freerdp, libssh, libgcrypt, gnutls, vte
, pcre2, libdbusmenu-gtk3, libappindicator-gtk3
Expand All @@ -23,7 +24,16 @@ stdenv.mkDerivation (finalAttrs: {
sha256 = "sha256-oEgpav4oQ9Sld9PY4TsutS5xEnhQgOHnpQhDesRFTeQ=";
};

nativeBuildInputs = [ cmake ninja pkg-config wrapGAppsHook ];
patches = [
# https://gitlab.com/Remmina/Remmina/-/merge_requests/2525
(fetchpatch {
url = "https://gitlab.com/Remmina/Remmina/-/commit/2ce153411597035d0f3db5177d703541e09eaa06.patch";
hash = "sha256-RV/8Ze9aN4dW49Z+y3z0jFs4dyEWu7DK2FABtmse9Hc=";
})
];

nativeBuildInputs = [ cmake ninja pkg-config wrapGAppsHook ]
++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ];

buildInputs = [
gsettings-desktop-schemas
Expand Down
30 changes: 19 additions & 11 deletions pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{ writeScriptBin, lib, ... }:
{ writeScriptBin, lib, makeBinaryWrapper }:

let
pListText = lib.generators.toPlist { } {
Expand All @@ -17,23 +17,31 @@ in writeScriptBin "write-darwin-bundle" ''
readonly prefix=$1
readonly name=$2
readonly exec=$3
# TODO: support executables with spaces in their names
readonly execName=''${3%% *} # Before the first space
[[ $3 =~ " " ]] && readonly execArgs=''${3#* } # Everything after the first space
readonly icon=$4.icns
readonly squircle=''${5:-1}
readonly plist=$prefix/Applications/$name.app/Contents/Info.plist
readonly binary=$prefix/bin/$execName
readonly bundleExecutable=$prefix/Applications/$name.app/Contents/MacOS/$name
cat > "$plist" <<EOF
${pListText}
EOF
if [[ $squircle == 0 || $squircle == "false" ]]; then
sed '/CFBundleIconFiles/,\|</array>|d' -i "$plist"
fi
if [[ $squircle == 0 || $squircle == "false" ]]; then
sed '/CFBundleIconFiles/,\|</array>|d' -i "$plist"
fi
cat > "$prefix/Applications/$name.app/Contents/MacOS/$name" <<EOF
#!/bin/bash
exec $prefix/bin/$exec
EOF
chmod +x "$prefix/Applications/$name.app/Contents/MacOS/$name"
if [[ -n "$execArgs" ]]; then
(
source ${makeBinaryWrapper}/nix-support/setup-hook
# WORKAROUND: makeBinaryWrapper fails when -u is set
set +u
makeBinaryWrapper "$binary" "$bundleExecutable" --add-flags "$execArgs"
)
else
ln -s "$binary" "$bundleExecutable"
fi
''
4 changes: 2 additions & 2 deletions pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,8 @@ processExecFieldCodes() {
local -r execNoKC="${execNoK/\%c/$(getDesktopParam "${file}" "Name")}"
local -r icon=$(getDesktopParam "${file}" "Icon")
local -r execNoKCI="${execNoKC/\%i/${icon:+--icon }${icon}}"
local -r execNoKCIfu="${execNoKCI/\%[fu]/\$1}"
local -r exec="${execNoKCIfu/\%[FU]/\$@}"
local -r execNoKCIfu="${execNoKCI/ \%[fu]/}"
local -r exec="${execNoKCIfu/ \%[FU]/}"
if [[ "$exec" != "$execRaw" ]]; then
echo 1>&2 "desktopToDarwinBundle: Application bundles do not understand desktop entry field codes. Changed '$execRaw' to '$exec'."
fi
Expand Down

0 comments on commit 924efe5

Please sign in to comment.