summary refs log tree commit diff
path: root/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix')
-rw-r--r--pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix30
1 files changed, 19 insertions, 11 deletions
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
 ''