nixpkgs/pkgs/development/libraries/gtk+/3.x.nix
Silvan Mosberger 2206a3ebad
Merge #57095: gtk3: Fix for missing symbols (again)
(cherry picked from commit 3ea5f97ac4c44b427fcd1a39f50c430116600677)
Forward-picking from staging to staging-next.  It seems quite
an important fix with little risk of breakage, and it isn't such a huge
rebuild, especially considering the unfinished amount on staging-next ATM.
2019-03-10 08:36:15 +01:00

130 lines
4.6 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ stdenv, fetchurl, fetchpatch, pkgconfig, gettext, perl, makeWrapper, shared-mime-info, isocodes
, expat, glib, cairo, pango, gdk_pixbuf, atk, at-spi2-atk, gobject-introspection, fribidi
, xorg, epoxy, json-glib, libxkbcommon, gmp, gnome3, autoreconfHook
, x11Support ? stdenv.isLinux
, waylandSupport ? stdenv.isLinux, mesa_noglu, wayland, wayland-protocols
, xineramaSupport ? stdenv.isLinux
, cupsSupport ? stdenv.isLinux, cups ? null
, AppKit, Cocoa
}:
assert cupsSupport -> cups != null;
with stdenv.lib;
let
version = "3.24.5";
in
stdenv.mkDerivation rec {
name = "gtk+3-${version}";
src = fetchurl {
url = "mirror://gnome/sources/gtk+/${stdenv.lib.versions.majorMinor version}/gtk+-${version}.tar.xz";
sha256 = "0bxhvnixc1hjxbzx063lghmix0wmv282khsqmckdxhrb606zpr8b";
};
outputs = [ "out" "dev" ];
outputBin = "dev";
nativeBuildInputs = [ pkgconfig gettext gobject-introspection perl makeWrapper autoreconfHook ];
patches = [
./3.0-immodules.cache.patch
(fetchpatch {
name = "Xft-setting-fallback-compute-DPI-properly.patch";
url = "https://bug757142.bugzilla-attachments.gnome.org/attachment.cgi?id=344123";
sha256 = "0g6fhqcv8spfy3mfmxpyji93k8d4p4q4fz1v9a1c1cgcwkz41d7p";
})
(fetchpatch {
name = "fix-fribidi-linking.patch";
url = https://github.com/gnome/gtk/compare/3.24.5..47e4a111c2666961ab47b6df48460d3c9075d92d.patch;
sha256 = "0ky4kmgcywg0qlwndn9aw083bkwnkr49bnlsz0ii93fxzvbiqglr";
})
(fetchpatch {
# https://gitlab.gnome.org/GNOME/gtk/merge_requests/505 already merged
# but isn't in 3.24.5
name = "export-missing-symbols.patch";
url = https://gitlab.gnome.org/GNOME/gtk/commit/95c0f07295fd300ab7f3416a39290ae33585ea6c.patch;
sha256 = "0z9w7f39xcn1cbcd8jhx731vq64nvi5q6kyc86bq8r00daysjwnl";
})
] ++ optionals stdenv.isDarwin [
# X11 module requires <gio/gdesktopappinfo.h> which is not installed on Darwin
# lets drop that dependency in similar way to how other parts of the library do it
# e.g. https://gitlab.gnome.org/GNOME/gtk/blob/3.24.4/gtk/gtk-launch.c#L31-33
./3.0-darwin-x11.patch
];
buildInputs = [ libxkbcommon epoxy json-glib isocodes ]
++ optional stdenv.isDarwin AppKit;
propagatedBuildInputs = with xorg; with stdenv.lib;
[ expat glib cairo pango gdk_pixbuf atk at-spi2-atk gnome3.gsettings-desktop-schemas fribidi
libXrandr libXrender libXcomposite libXi libXcursor libSM libICE ]
++ optional stdenv.isDarwin Cocoa # explicitly propagated, always needed
++ optionals waylandSupport [ mesa_noglu wayland wayland-protocols ]
++ optional xineramaSupport libXinerama
++ optional cupsSupport cups;
#TODO: colord?
# demos fail to install, no idea where's the problem
preConfigure = "sed '/^SRC_SUBDIRS /s/demos//' -i Makefile.in";
enableParallelBuilding = true;
configureFlags = optional stdenv.isDarwin [
"--disable-debug"
"--disable-dependency-tracking"
"--disable-glibtest"
] ++ optional (stdenv.isDarwin && !x11Support)
"--enable-quartz-backend"
++ optional x11Support [
"--enable-x11-backend"
] ++ optional waylandSupport [
"--enable-wayland-backend"
];
doCheck = false; # needs X11
postInstall = optionalString (!stdenv.isDarwin) ''
substituteInPlace "$out/lib/gtk-3.0/3.0.0/printbackends/libprintbackend-cups.la" \
--replace '-L${gmp.dev}/lib' '-L${gmp.out}/lib'
# The updater is needed for nixos env and it's tiny.
moveToOutput bin/gtk-update-icon-cache "$out"
# Launcher
moveToOutput bin/gtk-launch "$out"
# TODO: patch glib directly
for f in $dev/bin/gtk-encode-symbolic-svg; do
wrapProgram $f --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
done
'';
passthru = {
updateScript = gnome3.updateScript {
packageName = "gtk+";
attrPath = "gtk3";
};
};
meta = with stdenv.lib; {
description = "A multi-platform toolkit for creating graphical user interfaces";
longDescription = ''
GTK+ is a highly usable, feature rich toolkit for creating
graphical user interfaces which boasts cross platform
compatibility and an easy to use API. GTK+ it is written in C,
but has bindings to many other popular programming languages
such as C++, Python and C# among others. GTK+ is licensed
under the GNU LGPL 2.1 allowing development of both free and
proprietary software with GTK+ without any license fees or
royalties.
'';
homepage = https://www.gtk.org/;
license = licenses.lgpl2Plus;
maintainers = with maintainers; [ raskin vcunat lethalman ];
platforms = platforms.all;
};
}