Merge pull request #249268 from Enzime/remmina-bundle

writeDarwinBundle: use binary wrapper
This commit is contained in:
toonn 2023-09-14 15:05:13 +02:00 committed by GitHub
commit 924efe5313
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 15 deletions

View file

@ -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
@ -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

View file

@ -1,4 +1,4 @@
{ writeScriptBin, lib, ... }:
{ writeScriptBin, lib, makeBinaryWrapper }:
let
pListText = lib.generators.toPlist { } {
@ -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
''

View file

@ -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