nixpkgs/pkgs/development/libraries/gobject-introspection/default.nix
Jan Tojnar e44038bcca
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
2018-01-20 15:58:20 +01:00

68 lines
2.1 KiB
Nix

{ stdenv, fetchurl, glib, flex, bison, pkgconfig, libffi, python
, libintlOrEmpty, cctools, cairo
, substituteAll, nixStoreDir ? builtins.storeDir
}:
# now that gobjectIntrospection creates large .gir files (eg gtk3 case)
# it may be worth thinking about using multiple derivation outputs
# In that case its about 6MB which could be separated
let
ver_maj = "1.54";
ver_min = "1";
in
with stdenv.lib;
stdenv.mkDerivation rec {
name = "gobject-introspection-${ver_maj}.${ver_min}";
src = fetchurl {
url = "mirror://gnome/sources/gobject-introspection/${ver_maj}/${name}.tar.xz";
sha256 = "0zl7pfkzkm07733391b4f3cwjbnvb1nwvpmajf5bajh6bxgfv3dq";
};
outputs = [ "out" "dev" ];
outputBin = "dev";
outputMan = "dev"; # tiny pages
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ flex bison python setupHook/*move .gir*/ ]
++ libintlOrEmpty
++ stdenv.lib.optional stdenv.isDarwin cctools;
propagatedBuildInputs = [ libffi glib ];
preConfigure = ''
sed 's|/usr/bin/env ||' -i tools/g-ir-tool-template.in
'';
# outputs TODO: share/gobject-introspection-1.0/tests is needed during build
# by pygobject3 (and maybe others), but it's only searched in $out
setupHook = ./setup-hook.sh;
patches = [
(substituteAll {
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; {
description = "A middleware layer between C libraries and language bindings";
homepage = http://live.gnome.org/GObjectIntrospection;
maintainers = with maintainers; [ lovek323 lethalman ];
platforms = platforms.unix;
longDescription = ''
GObject introspection is a middleware layer between C libraries (using
GObject) and language bindings. The C library can be scanned at compile
time and generate a metadata file, in addition to the actual native C
library. Then at runtime, language bindings can read this metadata and
automatically provide bindings to call into the C library.
'';
};
}