xquartz: fix build

Things done:

- use libGLU instead of mesa for darwin support
- move patches from local to github url
- fixup xquartz install

There may still be some issues at runtime. PRs welcome!

Fixes #40196
wip/yesman
Matthew Bauer 6 years ago
parent 92cf881675
commit c839771129
  1. 41
      pkgs/servers/x11/xorg/darwin/0002-sdksyms.sh-Use-CPPFLAGS-not-CFLAGS.patch
  2. 297
      pkgs/servers/x11/xorg/darwin/0004-Use-old-miTrapezoids-and-miTriangles-routines.patch
  3. 243
      pkgs/servers/x11/xorg/darwin/0006-fb-Revert-fb-changes-that-broke-XQuartz.patch
  4. 118
      pkgs/servers/x11/xorg/darwin/bundle_main.patch
  5. 12
      pkgs/servers/x11/xorg/darwin/private-extern.patch
  6. 80
      pkgs/servers/x11/xorg/darwin/stub.patch
  7. 36
      pkgs/servers/x11/xorg/overrides.nix
  8. 4
      pkgs/servers/x11/xquartz/system-fonts.nix
  9. 2
      pkgs/top-level/all-packages.nix

@ -1,41 +0,0 @@
From 91971455ee46b1059de75260ef0d1a45170d8b65 Mon Sep 17 00:00:00 2001
From: Jeremy Huddleston <jeremyhu@apple.com>
Date: Fri, 13 Jan 2012 12:00:57 -0800
Subject: [PATCH 2/6] sdksyms.sh: Use CPPFLAGS, not CFLAGS
CFLAGS can include flags which are not useful to the preprocessor
or can even cause it to fail. This fixes a build issue on darwin
when building for more than one architecture.
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
---
hw/xfree86/Makefile.am | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 27f2cc6..d898c43 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -48,8 +48,7 @@ DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
bin_PROGRAMS = Xorg
nodist_Xorg_SOURCES = sdksyms.c
-AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
-AM_CPPFLAGS = $(XORG_INCS) -I$(srcdir)/parser -I$(top_srcdir)/miext/cw \
+AM_CPPFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@ $(XORG_INCS) -I$(srcdir)/parser -I$(top_srcdir)/miext/cw \
-I$(srcdir)/ddc -I$(srcdir)/i2c -I$(srcdir)/modes -I$(srcdir)/ramdac \
-I$(srcdir)/dri -I$(srcdir)/dri2 -I$(top_srcdir)/dri3
@@ -135,7 +134,7 @@ CLEANFILES = sdksyms.c sdksyms.dep Xorg.sh
EXTRA_DIST += sdksyms.sh
sdksyms.dep sdksyms.c: sdksyms.sh
- $(AM_V_GEN)CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CFLAGS) $(AM_CFLAGS) $(AM_CPPFLAGS)
+ $(AM_V_GEN)CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CPPFLAGS) $(AM_CPPFLAGS)
SDKSYMS_DEP = sdksyms.dep
-include $(SDKSYMS_DEP)
--
2.3.2 (Apple Git-55)

@ -1,297 +0,0 @@
From b229a04bde765424542eeba17a7e2bc25785a890 Mon Sep 17 00:00:00 2001
From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Date: Sat, 2 Nov 2013 11:00:23 -0700
Subject: [PATCH 4/6] Use old miTrapezoids and miTriangles routines
Reverts commits:
788ccb9a8bcf6a4fb4054c507111eec3338fb969
566f1931ee2916269e164e114bffaf2da1d039d1
http://xquartz.macosforge.org/trac/ticket/525
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
---
fb/fbpict.c | 2 -
render/mipict.c | 4 +-
render/mipict.h | 27 ++++++++++++++
render/mitrap.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
render/mitri.c | 61 +++++++++++++++++++++++++++++++
5 files changed, 201 insertions(+), 4 deletions(-)
diff --git a/fb/fbpict.c b/fb/fbpict.c
index c8378ad..cafb027 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -499,10 +499,8 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
ps->UnrealizeGlyph = fbUnrealizeGlyph;
ps->CompositeRects = miCompositeRects;
ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
- ps->Trapezoids = fbTrapezoids;
ps->AddTraps = fbAddTraps;
ps->AddTriangles = fbAddTriangles;
- ps->Triangles = fbTriangles;
return TRUE;
}
diff --git a/render/mipict.c b/render/mipict.c
index a725104..e14293a 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -575,8 +575,8 @@ miPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
ps->Composite = 0; /* requires DDX support */
ps->Glyphs = miGlyphs;
ps->CompositeRects = miCompositeRects;
- ps->Trapezoids = 0;
- ps->Triangles = 0;
+ ps->Trapezoids = miTrapezoids;
+ ps->Triangles = miTriangles;
ps->RasterizeTrapezoid = 0; /* requires DDX support */
ps->AddTraps = 0; /* requires DDX support */
diff --git a/render/mipict.h b/render/mipict.h
index 23ce9e8..e0f1d4c 100644
--- a/render/mipict.h
+++ b/render/mipict.h
@@ -122,6 +122,16 @@ miCompositeRects(CARD8 op,
xRenderColor * color, int nRect, xRectangle *rects);
extern _X_EXPORT void
+miTriangles (CARD8 op,
+ PicturePtr pSrc,
+ PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc,
+ INT16 ySrc,
+ int ntri,
+ xTriangle *tris);
+
+extern _X_EXPORT void
miTriStrip(CARD8 op,
PicturePtr pSrc,
@@ -137,10 +147,27 @@ miTriFan(CARD8 op,
PictFormatPtr maskFormat,
INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
+extern _X_EXPORT PicturePtr
+miCreateAlphaPicture (ScreenPtr pScreen,
+ PicturePtr pDst,
+ PictFormatPtr pPictFormat,
+ CARD16 width,
+ CARD16 height);
+
extern _X_EXPORT void
miTrapezoidBounds(int ntrap, xTrapezoid * traps, BoxPtr box);
extern _X_EXPORT void
+miTrapezoids (CARD8 op,
+ PicturePtr pSrc,
+ PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc,
+ INT16 ySrc,
+ int ntrap,
+ xTrapezoid *traps);
+
+extern _X_EXPORT void
miPointFixedBounds(int npoint, xPointFixed * points, BoxPtr bounds);
extern _X_EXPORT void
diff --git a/render/mitrap.c b/render/mitrap.c
index 17b6dcd..71c1857 100644
--- a/render/mitrap.c
+++ b/render/mitrap.c
@@ -34,6 +34,55 @@
#include "picturestr.h"
#include "mipict.h"
+PicturePtr
+miCreateAlphaPicture (ScreenPtr pScreen,
+ PicturePtr pDst,
+ PictFormatPtr pPictFormat,
+ CARD16 width,
+ CARD16 height)
+{
+ PixmapPtr pPixmap;
+ PicturePtr pPicture;
+ GCPtr pGC;
+ int error;
+ xRectangle rect;
+
+ if (width > 32767 || height > 32767)
+ return 0;
+
+ if (!pPictFormat)
+ {
+ if (pDst->polyEdge == PolyEdgeSharp)
+ pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
+ else
+ pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
+ if (!pPictFormat)
+ return 0;
+ }
+
+ pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height,
+ pPictFormat->depth, 0);
+ if (!pPixmap)
+ return 0;
+ pGC = GetScratchGC (pPixmap->drawable.depth, pScreen);
+ if (!pGC)
+ {
+ (*pScreen->DestroyPixmap) (pPixmap);
+ return 0;
+ }
+ ValidateGC (&pPixmap->drawable, pGC);
+ rect.x = 0;
+ rect.y = 0;
+ rect.width = width;
+ rect.height = height;
+ (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect);
+ FreeScratchGC (pGC);
+ pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat,
+ 0, 0, serverClient, &error);
+ (*pScreen->DestroyPixmap) (pPixmap);
+ return pPicture;
+}
+
static xFixed
miLineFixedX(xLineFixed * l, xFixed y, Bool ceil)
{
@@ -79,3 +128,65 @@ miTrapezoidBounds(int ntrap, xTrapezoid * traps, BoxPtr box)
box->x2 = x2;
}
}
+
+
+void
+miTrapezoids (CARD8 op,
+ PicturePtr pSrc,
+ PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc,
+ INT16 ySrc,
+ int ntrap,
+ xTrapezoid *traps)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+
+ /*
+ * Check for solid alpha add
+ */
+ if (op == PictOpAdd && miIsSolidAlpha (pSrc))
+ {
+ for (; ntrap; ntrap--, traps++)
+ (*ps->RasterizeTrapezoid) (pDst, traps, 0, 0);
+ }
+ else if (maskFormat)
+ {
+ PicturePtr pPicture;
+ BoxRec bounds;
+ INT16 xDst, yDst;
+ INT16 xRel, yRel;
+
+ xDst = traps[0].left.p1.x >> 16;
+ yDst = traps[0].left.p1.y >> 16;
+
+ miTrapezoidBounds (ntrap, traps, &bounds);
+ if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2)
+ return;
+ pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
+ bounds.x2 - bounds.x1,
+ bounds.y2 - bounds.y1);
+ if (!pPicture)
+ return;
+ for (; ntrap; ntrap--, traps++)
+ (*ps->RasterizeTrapezoid) (pPicture, traps,
+ -bounds.x1, -bounds.y1);
+ xRel = bounds.x1 + xSrc - xDst;
+ yRel = bounds.y1 + ySrc - yDst;
+ CompositePicture (op, pSrc, pPicture, pDst,
+ xRel, yRel, 0, 0, bounds.x1, bounds.y1,
+ bounds.x2 - bounds.x1,
+ bounds.y2 - bounds.y1);
+ FreePicture (pPicture, 0);
+ }
+ else
+ {
+ if (pDst->polyEdge == PolyEdgeSharp)
+ maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
+ else
+ maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
+ for (; ntrap; ntrap--, traps++)
+ miTrapezoids (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, traps);
+ }
+}
diff --git a/render/mitri.c b/render/mitri.c
index 922f22a..bdca9ca 100644
--- a/render/mitri.c
+++ b/render/mitri.c
@@ -65,3 +65,64 @@ miTriangleBounds(int ntri, xTriangle * tris, BoxPtr bounds)
{
miPointFixedBounds(ntri * 3, (xPointFixed *) tris, bounds);
}
+
+
+void
+miTriangles (CARD8 op,
+ PicturePtr pSrc,
+ PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc,
+ INT16 ySrc,
+ int ntri,
+ xTriangle *tris)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+
+ /*
+ * Check for solid alpha add
+ */
+ if (op == PictOpAdd && miIsSolidAlpha (pSrc))
+ {
+ (*ps->AddTriangles) (pDst, 0, 0, ntri, tris);
+ }
+ else if (maskFormat)
+ {
+ BoxRec bounds;
+ PicturePtr pPicture;
+ INT16 xDst, yDst;
+ INT16 xRel, yRel;
+
+ xDst = tris[0].p1.x >> 16;
+ yDst = tris[0].p1.y >> 16;
+
+ miTriangleBounds (ntri, tris, &bounds);
+ if (bounds.x2 <= bounds.x1 || bounds.y2 <= bounds.y1)
+ return;
+ pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
+ bounds.x2 - bounds.x1,
+ bounds.y2 - bounds.y1);
+ if (!pPicture)
+ return;
+ (*ps->AddTriangles) (pPicture, -bounds.x1, -bounds.y1, ntri, tris);
+
+ xRel = bounds.x1 + xSrc - xDst;
+ yRel = bounds.y1 + ySrc - yDst;
+ CompositePicture (op, pSrc, pPicture, pDst,
+ xRel, yRel, 0, 0, bounds.x1, bounds.y1,
+ bounds.x2 - bounds.x1, bounds.y2 - bounds.y1);
+ FreePicture (pPicture, 0);
+ }
+ else
+ {
+ if (pDst->polyEdge == PolyEdgeSharp)
+ maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
+ else
+ maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
+
+ for (; ntri; ntri--, tris++)
+ miTriangles (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, tris);
+ }
+}
+
--
2.3.2 (Apple Git-55)

@ -1,243 +0,0 @@
From 4c7572abafeac9b2dcd884c444c5a5bae5b302c3 Mon Sep 17 00:00:00 2001
From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Date: Sat, 31 May 2014 13:14:20 -0700
Subject: [PATCH 6/6] fb: Revert fb changes that broke XQuartz
http://bugs.freedesktop.org/show_bug.cgi?id=26124
Revert "Use new pixman_glyph_cache_t API that will be in pixman 0.28.0"
Revert "fb: Fix origin of source picture in fbGlyphs"
Revert "fb: Publish fbGlyphs and fbUnrealizeGlyph"
This reverts commit 9cbcb5bd6a5360a128d15b77a02d8d3351f74366.
This reverts commit 983e30361f49a67252d0b5d82630e70724d69dbf.
This reverts commit 3c2c59eed3c68c0e5a93c38cf01eedad015e3157.
---
fb/fb.h | 3 --
fb/fbpict.c | 149 +---------------------------------------------------------
fb/fbpict.h | 11 +----
fb/fbscreen.c | 1 -
4 files changed, 2 insertions(+), 162 deletions(-)
diff --git a/fb/fb.h b/fb/fb.h
index 59eaac3..046b948 100644
--- a/fb/fb.h
+++ b/fb/fb.h
@@ -1116,9 +1116,6 @@ extern _X_EXPORT void
extern _X_EXPORT Bool
fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
-extern _X_EXPORT void
-fbDestroyGlyphCache(void);
-
/*
* fbpixmap.c
*/
diff --git a/fb/fbpict.c b/fb/fbpict.c
index 6ee63e9..9c4cc42 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -65,152 +65,6 @@ fbComposite(CARD8 op,
free_pixman_pict(pDst, dest);
}
-static pixman_glyph_cache_t *glyphCache;
-
-void
-fbDestroyGlyphCache(void)
-{
- if (glyphCache)
- {
- pixman_glyph_cache_destroy (glyphCache);
- glyphCache = NULL;
- }
-}
-
-static void
-fbUnrealizeGlyph(ScreenPtr pScreen,
- GlyphPtr pGlyph)
-{
- if (glyphCache)
- pixman_glyph_cache_remove (glyphCache, pGlyph, NULL);
-}
-
-void
-fbGlyphs(CARD8 op,
- PicturePtr pSrc,
- PicturePtr pDst,
- PictFormatPtr maskFormat,
- INT16 xSrc,
- INT16 ySrc, int nlist,
- GlyphListPtr list,
- GlyphPtr *glyphs)
-{
-#define N_STACK_GLYPHS 512
- ScreenPtr pScreen = pDst->pDrawable->pScreen;
- pixman_glyph_t stack_glyphs[N_STACK_GLYPHS];
- pixman_glyph_t *pglyphs = stack_glyphs;
- pixman_image_t *srcImage, *dstImage;
- int srcXoff, srcYoff, dstXoff, dstYoff;
- GlyphPtr glyph;
- int n_glyphs;
- int x, y;
- int i, n;
- int xDst = list->xOff, yDst = list->yOff;
-
- miCompositeSourceValidate(pSrc);
-
- n_glyphs = 0;
- for (i = 0; i < nlist; ++i)
- n_glyphs += list[i].len;
-
- if (!glyphCache)
- glyphCache = pixman_glyph_cache_create();
-
- pixman_glyph_cache_freeze (glyphCache);
-
- if (n_glyphs > N_STACK_GLYPHS) {
- if (!(pglyphs = malloc (n_glyphs * sizeof (pixman_glyph_t))))
- goto out;
- }
-
- i = 0;
- x = y = 0;
- while (nlist--) {
- x += list->xOff;
- y += list->yOff;
- n = list->len;
- while (n--) {
- const void *g;
-
- glyph = *glyphs++;
-
- if (!(g = pixman_glyph_cache_lookup (glyphCache, glyph, NULL))) {
- pixman_image_t *glyphImage;
- PicturePtr pPicture;
- int xoff, yoff;
-
- pPicture = GetGlyphPicture(glyph, pScreen);
- if (!pPicture) {
- n_glyphs--;
- goto next;
- }
-
- if (!(glyphImage = image_from_pict(pPicture, FALSE, &xoff, &yoff)))
- goto out;
-
- g = pixman_glyph_cache_insert(glyphCache, glyph, NULL,
- glyph->info.x,
- glyph->info.y,
- glyphImage);
-
- free_pixman_pict(pPicture, glyphImage);
-
- if (!g)
- goto out;
- }
-
- pglyphs[i].x = x;
- pglyphs[i].y = y;
- pglyphs[i].glyph = g;
- i++;
-
- next:
- x += glyph->info.xOff;
- y += glyph->info.yOff;
- }
- list++;
- }
-
- if (!(srcImage = image_from_pict(pSrc, FALSE, &srcXoff, &srcYoff)))
- goto out;
-
- if (!(dstImage = image_from_pict(pDst, TRUE, &dstXoff, &dstYoff)))
- goto out_free_src;
-
- if (maskFormat) {
- pixman_format_code_t format;
- pixman_box32_t extents;
-
- format = maskFormat->format | (maskFormat->depth << 24);
-
- pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents);
-
- pixman_composite_glyphs(op, srcImage, dstImage, format,
- xSrc + srcXoff + extents.x1 - xDst, ySrc + srcYoff + extents.y1 - yDst,
- extents.x1, extents.y1,
- extents.x1 + dstXoff, extents.y1 + dstYoff,
- extents.x2 - extents.x1,
- extents.y2 - extents.y1,
- glyphCache, n_glyphs, pglyphs);
- }
- else {
- pixman_composite_glyphs_no_mask(op, srcImage, dstImage,
- xSrc + srcXoff - xDst, ySrc + srcYoff - yDst,
- dstXoff, dstYoff,
- glyphCache, n_glyphs, pglyphs);
- }
-
- free_pixman_pict(pDst, dstImage);
-
-out_free_src:
- free_pixman_pict(pSrc, srcImage);
-
-out:
- pixman_glyph_cache_thaw(glyphCache);
- if (pglyphs != stack_glyphs)
- free(pglyphs);
-}
-
static pixman_image_t *
create_solid_fill_image(PicturePtr pict)
{
@@ -461,8 +315,7 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
return FALSE;
ps = GetPictureScreen(pScreen);
ps->Composite = fbComposite;
- ps->Glyphs = fbGlyphs;
- ps->UnrealizeGlyph = fbUnrealizeGlyph;
+ ps->Glyphs = miGlyphs;
ps->CompositeRects = miCompositeRects;
ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
ps->AddTraps = fbAddTraps;
diff --git a/fb/fbpict.h b/fb/fbpict.h
index 5cb8663..110f32d 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -65,20 +65,11 @@ fbTrapezoids(CARD8 op,
INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid * traps);
extern _X_EXPORT void
+
fbTriangles(CARD8 op,
PicturePtr pSrc,
PicturePtr pDst,
PictFormatPtr maskFormat,
INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris);
-extern _X_EXPORT void
-fbGlyphs(CARD8 op,
- PicturePtr pSrc,
- PicturePtr pDst,
- PictFormatPtr maskFormat,
- INT16 xSrc,
- INT16 ySrc, int nlist,
- GlyphListPtr list,
- GlyphPtr *glyphs);
-
#endif /* _FBPICT_H_ */
diff --git a/fb/fbscreen.c b/fb/fbscreen.c
index 71bcc5d..55330fc 100644
--- a/fb/fbscreen.c
+++ b/fb/fbscreen.c
@@ -32,7 +32,6 @@ fbCloseScreen(ScreenPtr pScreen)
int d;
DepthPtr depths = pScreen->allowedDepths;
- fbDestroyGlyphCache();
for (d = 0; d < pScreen->numDepths; d++)
free(depths[d].vids);
free(depths);
--
2.3.2 (Apple Git-55)

@ -1,118 +0,0 @@
cstrahan:
This patch makes it possible (and necessary) to specify the default
shell, xterm client, and startx script from environment variables. These
defaults are used when launching the XQuartz.app, which in turn needs to know
how to start the X server. I've patched `command_from_prefs' so that it ignores
the preferences settings and immediately sets them to whatever the environment
variables are.
When developing an installable package for XQuartz/XQuartz.app, we'll need to
set an `LSEnvironment' entry in the plist for the XQuartz.app, we'll also need
to wrap the XQuartz.app/Contents/MacOS/X11 script (the Xquartz server will
invoke this script during initialization. See stub.patch for more details.).
diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index b403662..b1e2070 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -77,13 +77,7 @@ FatalError(const char *f, ...) _X_ATTRIBUTE_PRINTF(1, 2) _X_NORETURN;
extern int noPanoramiXExtension;
-#define DEFAULT_CLIENT X11BINDIR "/xterm"
-#define DEFAULT_STARTX X11BINDIR "/startx -- " X11BINDIR "/Xquartz"
-#define DEFAULT_SHELL "/bin/sh"
-
-#ifndef BUILD_DATE
#define BUILD_DATE ""
-#endif
#ifndef XSERVER_VERSION
#define XSERVER_VERSION "?"
#endif
@@ -718,14 +712,14 @@ main(int argc, char **argv, char **envp)
pid_t child1, child2;
int status;
- pref_app_to_run = command_from_prefs("app_to_run", DEFAULT_CLIENT);
+ pref_app_to_run = command_from_prefs("app_to_run", getenv("XQUARTZ_DEFAULT_CLIENT"));
assert(pref_app_to_run);
- pref_login_shell = command_from_prefs("login_shell", DEFAULT_SHELL);
+ pref_login_shell = command_from_prefs("login_shell", getenv("XQUARTZ_DEFAULT_SHELL"));
assert(pref_login_shell);
pref_startx_script = command_from_prefs("startx_script",
- DEFAULT_STARTX);
+ getenv("XQUARTZ_DEFAULT_STARTX"));
assert(pref_startx_script);
/* Do the fork-twice trick to avoid having to reap zombies */
@@ -804,10 +798,12 @@ execute(const char *command)
static char *
command_from_prefs(const char *key, const char *default_value)
{
+ if (default_value == NULL)
+ return NULL;
+
char *command = NULL;
CFStringRef cfKey;
- CFPropertyListRef PlistRef;
if (!key)
return NULL;
@@ -817,40 +813,24 @@ command_from_prefs(const char *key, const char *default_value)
if (!cfKey)
return NULL;
- PlistRef = CFPreferencesCopyAppValue(cfKey,
- kCFPreferencesCurrentApplication);
+ CFStringRef cfDefaultValue = CFStringCreateWithCString(
+ NULL, default_value, kCFStringEncodingASCII);
+ int len = strlen(default_value) + 1;
- if ((PlistRef == NULL) ||
- (CFGetTypeID(PlistRef) != CFStringGetTypeID())) {
- CFStringRef cfDefaultValue = CFStringCreateWithCString(
- NULL, default_value, kCFStringEncodingASCII);
- int len = strlen(default_value) + 1;
+ if (!cfDefaultValue)
+ goto command_from_prefs_out;
- if (!cfDefaultValue)
- goto command_from_prefs_out;
+ CFPreferencesSetAppValue(cfKey, cfDefaultValue,
+ kCFPreferencesCurrentApplication);
+ CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
+ CFRelease(cfDefaultValue);
- CFPreferencesSetAppValue(cfKey, cfDefaultValue,
- kCFPreferencesCurrentApplication);
- CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
- CFRelease(cfDefaultValue);
-
- command = (char *)malloc(len * sizeof(char));
- if (!command)
- goto command_from_prefs_out;
- strcpy(command, default_value);
- }
- else {
- int len = CFStringGetLength((CFStringRef)PlistRef) + 1;
- command = (char *)malloc(len * sizeof(char));
- if (!command)
- goto command_from_prefs_out;
- CFStringGetCString((CFStringRef)PlistRef, command, len,
- kCFStringEncodingASCII);
- }
+ command = (char *)malloc(len * sizeof(char));
+ if (!command)
+ goto command_from_prefs_out;
+ strcpy(command, default_value);
command_from_prefs_out:
- if (PlistRef)
- CFRelease(PlistRef);
if (cfKey)
CFRelease(cfKey);
return command;

@ -1,12 +0,0 @@
diff --git a/hw/xquartz/xpr/x-list.new.h b/hw/xquartz/xpr/x-list.h
index 28385fd..71f9d26 100644
--- a/hw/xquartz/xpr/x-list.new.h
+++ b/hw/xquartz/xpr/x-list.h
@@ -45,6 +45,7 @@ struct x_list_struct {
#endif
#ifndef X_EXTERN
+#define __private_extern__ extern
#define X_EXTERN __private_extern__
#endif

@ -1,80 +0,0 @@
cstrahan:
When the X / Xquartz server initiallizes, 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'. In order to make Xquartz actually work, 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 756e4ef..3313a55 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -61,54 +61,16 @@ aslclient aslc;
static void
set_x11_path(void)
{
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
-
- CFURLRef appURL = NULL;
- OSStatus osstatus =
- LSFindApplicationForInfo(kLSUnknownCreator, CFSTR(
- kX11AppBundleId), nil, nil, &appURL);
-
- switch (osstatus) {
- case noErr:
- if (appURL == NULL) {
- asl_log(
- aslc, NULL, ASL_LEVEL_ERR,
- "Xquartz: Invalid response from LSFindApplicationForInfo(%s)",
- kX11AppBundleId);
- exit(1);
- }
-
- if (!CFURLGetFileSystemRepresentation(appURL, true,
- (unsigned char *)x11_path,
- sizeof(x11_path))) {
- asl_log(aslc, NULL, ASL_LEVEL_ERR,
- "Xquartz: Error resolving URL for %s",
- kX11AppBundleId);
- exit(3);
- }
-
- strlcat(x11_path, kX11AppBundlePath, sizeof(x11_path));
- asl_log(aslc, NULL, ASL_LEVEL_INFO, "Xquartz: X11.app = %s", x11_path);
- 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);
- exit(11);
+ char *xquartzX11 = getenv("XQUARTZ_X11");
+ if (xquartzX11) {
+ strlcpy(x11_path, xquartzX11,
+ sizeof(x11_path));
+ } else {
+ asl_log(
+ aslc, NULL, ASL_LEVEL_ERR,
+ "Xquartz: XQUARTZ_X11 environment variable not set");
+ exit(1);
}
-#else
- /* TODO: Make Tiger smarter... but TBH, this should never get called on Tiger... */
- strlcpy(x11_path, "/Applications/Utilities/X11.app/Contents/MacOS/X11",
- sizeof(x11_path));
-#endif
}
static int

@ -456,7 +456,7 @@ in
};
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ dri2proto dri3proto renderproto libdrm openssl libX11 libXau libXaw libxcb xcbutil xcbutilwm xcbutilimage xcbutilkeysyms xcbutilrenderutil libXdmcp libXfixes libxkbfile libXmu libXpm libXrender libXres libXt ];
postPatch = "sed '1i#include <malloc.h>' -i include/os.h";
postPatch = stdenv.lib.optionalString stdenv.isLinux "sed '1i#include <malloc.h>' -i include/os.h";
meta.platforms = stdenv.lib.platforms.unix;
} else throw "unsupported xorg abiCompat ${args.abiCompat} for ${attrs_passed.name}";
@ -465,7 +465,7 @@ in
version = (builtins.parseDrvName attrs.name).version;
commonBuildInputs = attrs.buildInputs ++ [ xtrans ];
commonPropagatedBuildInputs = [
args.zlib args.libGL args.mesa_noglu args.dbus
args.zlib args.libGL args.libGLU args.dbus
xf86bigfontproto glproto xf86driproto
compositeproto scrnsaverproto resourceproto
xf86dgaproto
@ -526,6 +526,7 @@ in
'';
passthru.version = version; # needed by virtualbox guest additions
} else {
nativeBuildInputs = attrs.nativeBuildInputs ++ [ args.autoreconfHook xorg.utilmacros xorg.fontutil ];
buildInputs = commonBuildInputs ++ [
args.bootstrap_cmds args.automake args.autoconf
args.apple_sdk.libs.Xplugin
@ -535,16 +536,31 @@ in
propagatedBuildInputs = commonPropagatedBuildInputs ++ [
libAppleWM applewmproto
];
# Patches can be pulled from the server-*-apple branches of:
# http://cgit.freedesktop.org/~jeremyhu/xserver/
# XQuartz patchset
patches = commonPatches ++ [
./darwin/0002-sdksyms.sh-Use-CPPFLAGS-not-CFLAGS.patch
./darwin/0004-Use-old-miTrapezoids-and-miTriangles-routines.patch
./darwin/0006-fb-Revert-fb-changes-that-broke-XQuartz.patch
./darwin/private-extern.patch
./darwin/bundle_main.patch
./darwin/stub.patch
(args.fetchpatch {
url = "https://github.com/XQuartz/xorg-server/commit/e88fd6d785d5be477d5598e70d105ffb804771aa.patch";
sha256 = "1q0a30m1qj6ai924afz490xhack7rg4q3iig2gxsjjh98snikr1k";
name = "use-cppflags-not-cflags.patch";
})
(args.fetchpatch {
url = "https://github.com/XQuartz/xorg-server/commit/75ee9649bcfe937ac08e03e82fd45d9e18110ef4.patch";
sha256 = "1vlfylm011y00j8mig9zy6gk9bw2b4ilw2qlsc6la49zi3k0i9fg";
name = "use-old-mitrapezoids-and-mitriangles-routines.patch";
})
(args.fetchpatch {
url = "https://github.com/XQuartz/xorg-server/commit/c58f47415be79a6564a9b1b2a62c2bf866141e73.patch";
sha256 = "19sisqzw8x2ml4lfrwfvavc2jfyq2bj5xcf83z89jdxg8g1gdd1i";
name = "revert-fb-changes-1.patch";
})
(args.fetchpatch {
url = "https://github.com/XQuartz/xorg-server/commit/56e6f1f099d2821e5002b9b05b715e7b251c0c97.patch";
sha256 = "0zm9g0g1jvy79sgkvy0rjm6ywrdba2xjd1nsnjbxjccckbr6i396";
name = "revert-fb-changes-2.patch";
})
];
configureFlags = [
# note: --enable-xquartz is auto
"CPPFLAGS=-I${./darwin/dri}"

@ -26,9 +26,7 @@ stdenv.mkDerivation {
fi;
done;
cd $out/share/X11-fonts/
rm fonts.dir
rm fonts.scale
rm fonts.alias
rm -f fonts.dir fonts.scale fonts.alias
mkfontdir
mkfontscale
cat $( find ${xorg.fontalias}/ -name fonts.alias) >fonts.alias

@ -13043,7 +13043,7 @@ with pkgs;
inherit clangStdenv fetchurl fetchgit fetchpatch stdenv intltool freetype fontconfig
libxslt expat libpng zlib perl mesa_drivers spice-protocol libunwind
dbus libuuid openssl gperf m4 libevdev tradcpp libinput mcpp makeWrapper autoreconfHook
autoconf automake libtool mtdev pixman libGL
autoconf automake libtool mtdev pixman libGL libGLU
cairo epoxy;
inherit (buildPackages) pkgconfig xmlto asciidoc flex bison;
inherit (darwin) apple_sdk cf-private libobjc;

Loading…
Cancel
Save