1# FIXME: make gdk-pixbuf dependency optional
2{
3 stdenv,
4 buildPythonPackage,
5 pythonOlder,
6 fetchPypi,
7 lib,
8 replaceVars,
9 pikepdf,
10 pytestCheckHook,
11 cairo,
12 cffi,
13 flit-core,
14 numpy,
15 withXcffib ? false,
16 xcffib,
17 glib,
18 gdk-pixbuf,
19}:
20
21buildPythonPackage rec {
22 pname = "cairocffi";
23 version = "1.7.1";
24 format = "pyproject";
25
26 disabled = pythonOlder "3.7";
27
28 src = fetchPypi {
29 inherit pname version;
30 hash = "sha256-LkjuhkiE7Eo6NL+oyauZmfaIKG63FKFaQ+ydBow2VXs=";
31 };
32
33 patches = [
34 # OSError: dlopen() failed to load a library: gdk-pixbuf-2.0 / gdk-pixbuf-2.0-0
35 (replaceVars ./dlopen-paths.patch {
36 ext = stdenv.hostPlatform.extensions.sharedLibrary;
37 cairo = cairo.out;
38 glib = glib.out;
39 gdk_pixbuf = gdk-pixbuf.out;
40 })
41 ./fix_test_scaled_font.patch
42 ];
43
44 nativeBuildInputs = [ flit-core ];
45
46 propagatedBuildInputs = [
47 cairo
48 cffi
49 ] ++ lib.optional withXcffib xcffib;
50
51 nativeCheckInputs = [
52 numpy
53 pikepdf
54 pytestCheckHook
55 ];
56
57 pythonImportsCheck = [ "cairocffi" ];
58
59 # Cairo tries to load system fonts by default.
60 # It's surfaced as a Cairo "out of memory" error in tests.
61 __impureHostDeps = [ "/System/Library/Fonts" ];
62
63 meta = with lib; {
64 changelog = "https://github.com/Kozea/cairocffi/blob/v${version}/NEWS.rst";
65 homepage = "https://github.com/SimonSapin/cairocffi";
66 license = licenses.bsd3;
67 maintainers = [ ];
68 description = "cffi-based cairo bindings for Python";
69 };
70}