Skip to content

Commit 00ddf28

Browse files
committed
build: add no-x11 option to disable X11 surface support
This avoids using any of the xlib and xcb APIs provided by cairo as if cairo was not built with support for those. This is to allow downstream to provide non-x cairo builds, and a pycairo build that works with both cairo variants. PR pygobject#421 is a more dynamic solution for this problem, but this is easier and less risky for now. See pygobject#420
1 parent 7ac832e commit 00ddf28

File tree

6 files changed

+27
-18
lines changed

6 files changed

+27
-18
lines changed

cairo/cairomodule.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,12 @@ static Pycairo_CAPI_t CAPI = {
9696
0,
9797
0,
9898
#endif
99-
#ifdef CAIRO_HAS_XCB_SURFACE
99+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
100100
&PycairoXCBSurface_Type,
101101
#else
102102
0,
103103
#endif
104-
#ifdef CAIRO_HAS_XLIB_SURFACE
104+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
105105
&PycairoXlibSurface_Type,
106106
#else
107107
0,
@@ -242,11 +242,11 @@ static int exec_cairo(PyObject *m)
242242
if (PyType_Ready(&PycairoWin32PrintingSurface_Type) < 0)
243243
return -1;
244244
#endif
245-
#ifdef CAIRO_HAS_XCB_SURFACE
245+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
246246
if (PyType_Ready(&PycairoXCBSurface_Type) < 0)
247247
return -1;
248248
#endif
249-
#ifdef CAIRO_HAS_XLIB_SURFACE
249+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
250250
if (PyType_Ready(&PycairoXlibSurface_Type) < 0)
251251
return -1;
252252
#endif
@@ -391,13 +391,13 @@ static int exec_cairo(PyObject *m)
391391
return -1;
392392
#endif
393393

394-
#ifdef CAIRO_HAS_XCB_SURFACE
394+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
395395
if (PyModule_AddObjectRef(m, "XCBSurface",
396396
(PyObject *)&PycairoXCBSurface_Type) < 0)
397397
return -1;
398398
#endif
399399

400-
#ifdef CAIRO_HAS_XLIB_SURFACE
400+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
401401
if (PyModule_AddObjectRef(m, "XlibSurface",
402402
(PyObject *)&PycairoXlibSurface_Type) < 0)
403403
return -1;
@@ -501,14 +501,14 @@ static int exec_cairo(PyObject *m)
501501
if (PyModule_AddIntConstant(m, "HAS_WIN32_SURFACE", 0) < 0)
502502
return -1;
503503
#endif
504-
#ifdef CAIRO_HAS_XCB_SURFACE
504+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
505505
if (PyModule_AddIntConstant(m, "HAS_XCB_SURFACE", 1) < 0)
506506
return -1;
507507
#else
508508
if (PyModule_AddIntConstant(m, "HAS_XCB_SURFACE", 0) < 0)
509509
return -1;
510510
#endif
511-
#ifdef CAIRO_HAS_XLIB_SURFACE
511+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
512512
if (PyModule_AddIntConstant(m, "HAS_XLIB_SURFACE", 1) < 0)
513513
return -1;
514514
#else

cairo/private.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,11 @@ extern PyTypeObject PycairoWin32Surface_Type;
157157
extern PyTypeObject PycairoWin32PrintingSurface_Type;
158158
#endif
159159

160-
#ifdef CAIRO_HAS_XCB_SURFACE
160+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
161161
extern PyTypeObject PycairoXCBSurface_Type;
162162
#endif
163163

164-
#ifdef CAIRO_HAS_XLIB_SURFACE
164+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
165165
extern PyTypeObject PycairoXlibSurface_Type;
166166
#endif
167167

cairo/surface.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ PycairoSurface_FromSurface (cairo_surface_t *surface, PyObject *base) {
8383
type = &PycairoWin32PrintingSurface_Type;
8484
break;
8585
#endif
86-
#ifdef CAIRO_HAS_XCB_SURFACE
86+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
8787
case CAIRO_SURFACE_TYPE_XCB:
8888
type = &PycairoXCBSurface_Type;
8989
break;
9090
#endif
91-
#ifdef CAIRO_HAS_XLIB_SURFACE
91+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
9292
case CAIRO_SURFACE_TYPE_XLIB:
9393
type = &PycairoXlibSurface_Type;
9494
break;
@@ -2314,7 +2314,7 @@ PyTypeObject PycairoWin32PrintingSurface_Type = {
23142314

23152315

23162316
/* Class XCBSurface(Surface) --------------------------------------------- */
2317-
#ifdef CAIRO_HAS_XCB_SURFACE
2317+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
23182318
#include <cairo-xcb.h>
23192319

23202320
static PyObject *
@@ -2382,11 +2382,11 @@ PyTypeObject PycairoXCBSurface_Type = {
23822382
0, /* tp_is_gc */
23832383
0, /* tp_bases */
23842384
};
2385-
#endif /* CAIRO_HAS_XCB_SURFACE */
2385+
#endif /* defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11) */
23862386

23872387

23882388
/* Class XlibSurface(Surface) --------------------------------------------- */
2389-
#ifdef CAIRO_HAS_XLIB_SURFACE
2389+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
23902390
#include <cairo-xlib.h>
23912391

23922392
static PyObject *
@@ -2461,7 +2461,7 @@ PyTypeObject PycairoXlibSurface_Type = {
24612461
0, /* tp_is_gc */
24622462
0, /* tp_bases */
24632463
};
2464-
#endif /* CAIRO_HAS_XLIB_SURFACE */
2464+
#endif /* defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11) */
24652465

24662466
#ifdef CAIRO_HAS_TEE_SURFACE
24672467
#include <cairo-tee.h>

meson.build

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ pyext_c_args = [
115115
'-DPYCAIRO_VERSION_MICRO=@0@'.format(pycairo_version_micro),
116116
]
117117

118+
if get_option('no-x11')
119+
pyext_c_args += ['-DPYCAIRO_NO_X11']
120+
endif
121+
118122
if not for_wheel
119123
pkginfo_conf = configuration_data()
120124
pkginfo_conf.set('VERSION', pycairo_version)

meson_options.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
option('python', type : 'string', value : 'python3')
22
option('tests', type : 'boolean', value : true, description : 'build unit tests')
33
option('wheel', type : 'boolean', value : false, description : 'build for a Python wheel')
4+
option('no-x11',
5+
type: 'boolean',
6+
value: false,
7+
description: 'Disable X11 surface support (Xlib and XCB) even if cairo has it enabled'
8+
)

tests/cmodule/cmodulelib.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,14 @@ test_capi (PyObject *self, PyObject *args)
226226
#endif
227227

228228
// PycairoXCBSurface_Type
229-
#ifdef CAIRO_HAS_XCB_SURFACE
229+
#if defined(CAIRO_HAS_XCB_SURFACE) && !defined(PYCAIRO_NO_X11)
230230
if(PyType_Ready(&PycairoXCBSurface_Type) != 0) {
231231
return NULL;
232232
}
233233
#endif
234234

235235
// PycairoXlibSurface_Type
236-
#ifdef CAIRO_HAS_XLIB_SURFACE
236+
#if defined(CAIRO_HAS_XLIB_SURFACE) && !defined(PYCAIRO_NO_X11)
237237
if(PyType_Ready(&PycairoXlibSurface_Type) != 0) {
238238
return NULL;
239239
}

0 commit comments

Comments
 (0)