about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/x11/xorg/darwin/stub.patch
blob: 0005c3568dff9920e3f7ac64c572c802b04f29cb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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);
     }
 }