···11+commit 705dc9a55bd160625d9996e63fc7dc532d0ad0ab
22+Author: Alexander V. Nikolaev <avn@avnik.info>
33+Date: Sat Feb 6 08:09:06 2016 +0200
44+55+ Patch dlopen() to allow direct paths to all required libs
66+77+ This patch is NixOS specific
88+99+diff --git a/cairocffi/__init__.py b/cairocffi/__init__.py
1010+index 718aa7f..1a1dcff 100644
1111+--- a/cairocffi/__init__.py
1212++++ b/cairocffi/__init__.py
1313+@@ -27,20 +27,22 @@ VERSION = '0.7.2'
1414+ version = '1.10.0'
1515+ version_info = (1, 10, 0)
1616+1717++# Use hardcoded soname, because ctypes.util use gcc/objdump which shouldn't be required for runtime
1818++_LIBS = {
1919++ 'cairo': '@cairo@/lib/libcairo.so.2',
2020++ 'glib-2.0': '@glib@/lib/libglib-2.0.so.0',
2121++ 'gobject-2.0': '@glib@/lib/libgobject-2.0.so.0',
2222++ 'gdk_pixbuf-2.0': '@gdk_pixbuf@/lib/libgdk_pixbuf-2.0.so.0',
2323++}
2424+2525+-def dlopen(ffi, *names):
2626++def dlopen(ffi, name, *names):
2727+ """Try various names for the same library, for different platforms."""
2828+- for name in names:
2929+- for lib_name in [name, 'lib' + name]:
3030+- try:
3131+- path = ctypes.util.find_library(lib_name)
3232+- if path:
3333+- lib = ffi.dlopen(path)
3434+- if lib:
3535+- return lib
3636+- except OSError:
3737+- pass
3838+- raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
3939++ path = _LIBS.get(name, None)
4040++ if path:
4141++ lib = ffi.dlopen(path)
4242++ if lib:
4343++ return lib
4444++ raise OSError("dlopen() failed to load a library: %s as %s" % (name, path))
4545+4646+4747+ cairo = dlopen(ffi, 'cairo', 'cairo-2')
+23-4
pkgs/top-level/python-packages.nix
···26092609 };
2610261026112611 LC_ALL = "en_US.UTF-8";
26122612+26132613+ # checkPhase require at least one 'normal' font and one 'monospace',
26142614+ # otherwise glyph tests fails
26152615+ FONTCONFIG_FILE = pkgs.makeFontsConf {
26162616+ fontDirectories = [ pkgs.freefont_ttf ];
26172617+ };
26182618+26122619 buildInputs = with self; [ pytest pkgs.glibcLocales ];
26132620 propagatedBuildInputs = with self; [ pkgs.cairo cffi ];
26142621···26162623 py.test $out/${python.sitePackages}
26172624 '';
2618262526192619- # Marked broken since according to test
26262626+ # FIXME: make gdk_pixbuf dependency optional (as wel as xcfffi)
26202627 # Happens with 0.7.1 and 0.7.2
26212628 # OSError: dlopen() failed to load a library: gdk_pixbuf-2.0 / gdk_pixbuf-2.0-0
2622262926232623- patchPhase = ''
26302630+ patches = [
26312631+ # This patch from PR substituted upstream
26322632+ (pkgs.fetchpatch {
26332633+ url = "https://github.com/avnik/cairocffi/commit/2266882e263c5efc87350cf016d117b2ec6a1d59.patch";
26342634+ sha256 = "0gb570z3ivf1b0ixsk526n3h29m8c5rhjsiyam7rr3x80dp65cdl";
26352635+ })
26362636+26372637+ ../development/python-modules/cairocffi/dlopen-paths.patch
26382638+ ];
26392639+26402640+ postPatch = ''
26242641 # Hardcode cairo library path
26252625- sed -e 's,ffi\.dlopen(,&"${pkgs.cairo}/lib/" + ,' -i cairocffi/__init__.py
26422642+ # FIXME: for closure-size branch all pkgs.foo should be replaced with pkgs.foo.lib
26432643+ substituteInPlace cairocffi/__init__.py --subst-var-by cairo ${pkgs.cairo}
26442644+ substituteInPlace cairocffi/__init__.py --subst-var-by glib ${pkgs.glib}
26452645+ substituteInPlace cairocffi/__init__.py --subst-var-by gdk_pixbuf ${pkgs.gdk_pixbuf}
26262646 '';
2627264726282648 meta = {
26292629- broken = true;
26302649 homepage = https://github.com/SimonSapin/cairocffi;
26312650 license = "bsd";
26322651 description = "cffi-based cairo bindings for Python";