diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/x11/xorg/darwin/stub.patch')
-rw-r--r-- | nixpkgs/pkgs/servers/x11/xorg/darwin/stub.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/x11/xorg/darwin/stub.patch b/nixpkgs/pkgs/servers/x11/xorg/darwin/stub.patch new file mode 100644 index 000000000000..0005c3568dff --- /dev/null +++ b/nixpkgs/pkgs/servers/x11/xorg/darwin/stub.patch @@ -0,0 +1,61 @@ +When the X / Xquartz server initializes, it starts the XQuartz.app and +hands-off the display FD. To start the XQuartz.app, Xquartz normally uses some +system calls to get the path of the application by app bundle id, and then +executes the Contents/MacOS/X11 script contained inside, which in turn executes +Contents/MacOS/X11.bin (the actual app). + +This patch replaces that discovery technique with a simple call to +`getenv' and a hardcoded default. In order to make Xquartz work if the +app is moved, we'll need another wrapper that sets the `XQUARTZ_X11' +environment variable to point to the `X11' script. + +diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c +index 83252e805..f1974215b 100644 +--- a/hw/xquartz/mach-startup/stub.c ++++ b/hw/xquartz/mach-startup/stub.c +@@ -52,7 +52,6 @@ + + #include "launchd_fd.h" + +-static CFURLRef x11appURL; + static FSRef x11_appRef; + static pid_t x11app_pid = 0; + aslclient aslc; +@@ -60,29 +59,21 @@ aslclient aslc; + static void + set_x11_path(void) + { +- OSStatus osstatus = LSFindApplicationForInfo(kLSUnknownCreator, CFSTR(kX11AppBundleId), +- nil, &x11_appRef, &x11appURL); ++ unsigned char *xquartzApp = getenv("XQUARTZ_APP"); ++ if (!xquartzApp) { ++ xquartzApp = "@XQUARTZ_APP@"; ++ } ++ ++ OSStatus osstatus = FSPathMakeRef(xquartzApp, &x11_appRef, NULL); + + switch (osstatus) { + case noErr: +- if (x11appURL == NULL) { +- asl_log(aslc, NULL, ASL_LEVEL_ERR, +- "Xquartz: Invalid response from LSFindApplicationForInfo(%s)", +- kX11AppBundleId); +- exit(1); +- } + break; + +- case kLSApplicationNotFoundErr: +- asl_log(aslc, NULL, ASL_LEVEL_ERR, +- "Xquartz: Unable to find application for %s", +- kX11AppBundleId); +- exit(10); +- + default: + asl_log(aslc, NULL, ASL_LEVEL_ERR, +- "Xquartz: Unable to find application for %s, error code = %d", +- kX11AppBundleId, (int)osstatus); ++ "Xquartz: Unable to find FSRef for %s, error code = %d", ++ xquartzApp, (int)osstatus); + exit(11); + } + } |