summary refs log tree commit diff
diff options
context:
space:
mode:
authortoonn <toonn@toonn.io>2023-09-14 15:05:13 +0200
committerGitHub <noreply@github.com>2023-09-14 15:05:13 +0200
commit924efe53136416abb7bd6faa4826ec8c756f3315 (patch)
treeed8a07fe5d4d7e859ae1de1093f63b07530bd0b3
parent67f7fb56e2f50a705a7456fb297dcf3ccce57169 (diff)
parent66884a4912003e8090ef6e2a203f9544c4d7702c (diff)
downloadnixpkgs-924efe53136416abb7bd6faa4826ec8c756f3315.tar
nixpkgs-924efe53136416abb7bd6faa4826ec8c756f3315.tar.gz
nixpkgs-924efe53136416abb7bd6faa4826ec8c756f3315.tar.bz2
nixpkgs-924efe53136416abb7bd6faa4826ec8c756f3315.tar.lz
nixpkgs-924efe53136416abb7bd6faa4826ec8c756f3315.tar.xz
nixpkgs-924efe53136416abb7bd6faa4826ec8c756f3315.tar.zst
nixpkgs-924efe53136416abb7bd6faa4826ec8c756f3315.zip
Merge pull request #249268 from Enzime/remmina-bundle
writeDarwinBundle: use binary wrapper
-rw-r--r--pkgs/applications/networking/remote/remmina/default.nix14
-rw-r--r--pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix30
-rw-r--r--pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh4
3 files changed, 33 insertions, 15 deletions
diff --git a/pkgs/applications/networking/remote/remmina/default.nix b/pkgs/applications/networking/remote/remmina/default.nix
index 64ebd27001f..9e3eeb711cb 100644
--- a/pkgs/applications/networking/remote/remmina/default.nix
+++ b/pkgs/applications/networking/remote/remmina/default.nix
@@ -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
diff --git a/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix b/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix
index fde977c3636..752cbbde2a3 100644
--- a/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix
+++ b/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix
@@ -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
 ''
diff --git a/pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh b/pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh
index e4e7fba8477..5b38f437607 100644
--- a/pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh
+++ b/pkgs/build-support/setup-hooks/desktop-to-darwin-bundle.sh
@@ -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