Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / gtk / 2.x.nix
blobb2afb21b6214ec4a5a25a99ea01d829eb350e7cd
1 { config
2 , lib
3 , stdenv
4 , fetchurl
5 , atk
6 , buildPackages
7 , cairo
8 , cups
9 , gdk-pixbuf
10 , gettext
11 , glib
12 , gobject-introspection
13 , libXcomposite
14 , libXcursor
15 , libXdamage
16 , libXi
17 , libXinerama
18 , libXrandr
19 , libXrender
20 , pango
21 , perl
22 , pkg-config
23 , substituteAll
24 , testers
25 , AppKit
26 , Cocoa
27 , gdktarget ? if stdenv.isDarwin then "quartz" else "x11"
28 , cupsSupport ? config.gtk2.cups or stdenv.isLinux
29 , xineramaSupport ? stdenv.isLinux
32 let
33   gtkCleanImmodulesCache = substituteAll {
34     src = ./hooks/clean-immodules-cache.sh;
35     gtk_module_path = "gtk-2.0";
36     gtk_binary_version = "2.10.0";
37   };
39 stdenv.mkDerivation (finalAttrs: {
40   pname = "gtk+";
41   version = "2.24.33";
43   src = fetchurl {
44     url = "mirror://gnome/sources/gtk+/2.24/gtk+-${finalAttrs.version}.tar.xz";
45     hash = "sha256-rCrHV/WULTGKMRpUsMgLXvKV8pnCpzxjL2v7H/Scxto=";
46   };
48   outputs = [ "out" "dev" "devdoc" ];
49   outputBin = "dev";
51   setupHooks =  [
52     ./hooks/drop-icon-theme-cache.sh
53     gtkCleanImmodulesCache
54   ];
56   nativeBuildInputs = finalAttrs.setupHooks ++ [
57     gettext
58     gobject-introspection
59     perl
60     pkg-config
61   ];
63   patches = [
64     ./patches/2.0-immodules.cache.patch
65     ./patches/gtk2-theme-paths.patch
66   ] ++ lib.optionals stdenv.isDarwin [
67     ./patches/2.0-gnome_bugzilla_557780_306776_freeciv_darwin.patch
68     ./patches/2.0-darwin-x11.patch
69     # Fixes an incompatible function pointer conversion and implicit int errors with clang 16.
70     ./patches/2.0-clang.patch
71   ];
73   propagatedBuildInputs = [
74     atk
75     cairo
76     gdk-pixbuf
77     glib
78     pango
79   ] ++ lib.optionals (stdenv.isLinux || stdenv.isDarwin) [
80     libXcomposite
81     libXcursor
82     libXi
83     libXrandr
84     libXrender
85   ] ++ lib.optional xineramaSupport libXinerama
86   ++ lib.optional cupsSupport cups
87   ++ lib.optionals stdenv.isDarwin [
88     libXdamage
89     AppKit
90     Cocoa
91   ];
93   preConfigure =
94     lib.optionalString (stdenv.isDarwin
95                         && lib.versionAtLeast
96                           stdenv.hostPlatform.darwinMinVersion "11")
97       "MACOSX_DEPLOYMENT_TARGET=10.16";
99   configureFlags = [
100     "--sysconfdir=/etc"
101     "--with-gdktarget=${gdktarget}"
102     "--with-xinput=yes"
103   ] ++ lib.optionals stdenv.isDarwin [
104     "--disable-glibtest"
105     "--disable-introspection"
106     "--disable-visibility"
107   ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
108     "ac_cv_path_GTK_UPDATE_ICON_CACHE=${buildPackages.gtk2}/bin/gtk-update-icon-cache"
109     "ac_cv_path_GDK_PIXBUF_CSOURCE=${buildPackages.gdk-pixbuf.dev}/bin/gdk-pixbuf-csource"
110   ];
112   enableParallelBuilding = true;
114   installFlags = [
115     "sysconfdir=${placeholder "out"}/etc"
116   ];
118   doCheck = false; # needs X11
120   postInstall = ''
121     moveToOutput share/gtk-2.0/demo "$devdoc"
122     # The updater is needed for nixos env and it's tiny.
123     moveToOutput bin/gtk-update-icon-cache "$out"
124   '';
126   passthru = {
127     gtkExeEnvPostBuild = ''
128       rm $out/lib/gtk-2.0/2.10.0/immodules.cache
129       $out/bin/gtk-query-immodules-2.0 $out/lib/gtk-2.0/2.10.0/immodules/*.so > $out/lib/gtk-2.0/2.10.0/immodules.cache
130     ''; # workaround for bug of nix-mode for Emacs */ '';
131     inherit gdktarget;
132     tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
133   };
135   meta = {
136     homepage = "https://www.gtk.org/";
137     description = "A multi-platform toolkit for creating graphical user interfaces";
138     longDescription = ''
139       GTK is a highly usable, feature rich toolkit for creating graphical user
140       interfaces which boasts cross platform compatibility and an easy to use
141       API.  GTK it is written in C, but has bindings to many other popular
142       programming languages such as C++, Python and C# among others.  GTK is
143       licensed under the GNU LGPL 2.1 allowing development of both free and
144       proprietary software with GTK without any license fees or royalties.
145     '';
146     changelog = "https://gitlab.gnome.org/GNOME/gtk/-/raw/${finalAttrs.version}/NEWS";
147     license = lib.licenses.lgpl2Plus;
148     maintainers = with lib.maintainers; [ lovek323 raskin ];
149     platforms = lib.platforms.all;
150     pkgConfigModules = [
151       "gdk-2.0"
152       "gtk+-2.0"
153     ] ++ lib.optionals (gdktarget == "x11") [
154       "gdk-x11-2.0"
155       "gtk+-x11-2.0"
156     ];
157   };