gobjectIntrospection: use absolute path for cairo GIR

Cairo does not provide its own GObject bindinds so they are provided
by gobject-introspection package. Unfortunately, this means that if we
want to use the absolute path, we need gi to depend on cairo, which
increases the closure size from 41M to 56M. We will probably want
to split the typelib into a separate output.

Closes: #34080
This commit is contained in:
Jan Tojnar 2018-01-20 15:08:27 +01:00
parent 4fd0a3a43d
commit e44038bcca
No known key found for this signature in database
GPG Key ID: 7FAB2A15F7A607A4
2 changed files with 23 additions and 5 deletions

View File

@ -0,0 +1,11 @@
--- a/gir/cairo-1.0.gir.in
+++ b/gir/cairo-1.0.gir.in
@@ -5,7 +5,7 @@
xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
<package name="%CAIRO_GIR_PACKAGE%"/>
<namespace name="cairo" version="1.0"
- shared-library="%CAIRO_SHARED_LIBRARY%"
+ shared-library="@cairoLib@/%CAIRO_SHARED_LIBRARY%"
c:identifier-prefixes="cairo"
c:symbol-prefixes="cairo">
<record name="Context" c:type="cairo_t" foreign="1"

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, glib, flex, bison, pkgconfig, libffi, python { stdenv, fetchurl, glib, flex, bison, pkgconfig, libffi, python
, libintlOrEmpty, cctools , libintlOrEmpty, cctools, cairo
, substituteAll, nixStoreDir ? builtins.storeDir , substituteAll, nixStoreDir ? builtins.storeDir
}: }:
# now that gobjectIntrospection creates large .gir files (eg gtk3 case) # now that gobjectIntrospection creates large .gir files (eg gtk3 case)
@ -38,10 +38,17 @@ stdenv.mkDerivation rec {
setupHook = ./setup-hook.sh; setupHook = ./setup-hook.sh;
patches = stdenv.lib.singleton (substituteAll { patches = [
src = ./absolute_shlib_path.patch; (substituteAll {
inherit nixStoreDir; src = ./absolute_shlib_path.patch;
}); inherit nixStoreDir;
})
# https://github.com/NixOS/nixpkgs/issues/34080
(substituteAll {
src = ./absolute_gir_path.patch;
cairoLib = "${getLib cairo}/lib";
})
];
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "A middleware layer between C libraries and language bindings"; description = "A middleware layer between C libraries and language bindings";