diff options
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.nix | 30 |
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 '' |