signalbackup-tools: 20241220 -> 20250106 (#371523)
[NixPkgs.git] / pkgs / development / libraries / gtk / 2.x.nix
blob9b1a3fc32439f44865cf9902bb281bacf8e920b4
2   config,
3   lib,
4   stdenv,
5   fetchurl,
6   fetchpatch,
7   atk,
8   buildPackages,
9   cairo,
10   cups,
11   gdk-pixbuf,
12   gettext,
13   glib,
14   gobject-introspection,
15   libXcomposite,
16   libXcursor,
17   libXdamage,
18   libXi,
19   libXinerama,
20   libXrandr,
21   libXrender,
22   pango,
23   perl,
24   pkg-config,
25   substituteAll,
26   testers,
27   AppKit,
28   Cocoa,
29   gdktarget ? if stdenv.hostPlatform.isDarwin then "quartz" else "x11",
30   cupsSupport ? config.gtk2.cups or stdenv.hostPlatform.isLinux,
31   xineramaSupport ? stdenv.hostPlatform.isLinux,
34 let
35   gtkCleanImmodulesCache = substituteAll {
36     src = ./hooks/clean-immodules-cache.sh;
37     gtk_module_path = "gtk-2.0";
38     gtk_binary_version = "2.10.0";
39   };
41 stdenv.mkDerivation (finalAttrs: {
42   pname = "gtk+";
43   version = "2.24.33";
45   src = fetchurl {
46     url = "mirror://gnome/sources/gtk+/2.24/gtk+-${finalAttrs.version}.tar.xz";
47     hash = "sha256-rCrHV/WULTGKMRpUsMgLXvKV8pnCpzxjL2v7H/Scxto=";
48   };
50   outputs = [
51     "out"
52     "dev"
53     "devdoc"
54   ];
55   outputBin = "dev";
57   setupHooks = [
58     ./hooks/drop-icon-theme-cache.sh
59     gtkCleanImmodulesCache
60   ];
62   nativeBuildInputs = finalAttrs.setupHooks ++ [
63     gettext
64     gobject-introspection
65     perl
66     pkg-config
67   ];
69   patches =
70     [
71       ./patches/2.0-immodules.cache.patch
72       ./patches/gtk2-theme-paths.patch
73       (fetchpatch {
74         # https://gitlab.gnome.org/GNOME/gtk/-/issues/6786
75         name = "CVE-2024-6655.patch";
76         url = "https://gitlab.gnome.org/GNOME/gtk/-/commit/3bbf0b6176d42836d23c36a6ac410e807ec0a7a7.patch";
77         hash = "sha256-mstOPk9NNpUwScrdEbvGhmAv8jlds3SBdj53T0q33vM=";
78       })
79     ]
80     ++ lib.optionals stdenv.hostPlatform.isDarwin [
81       ./patches/2.0-gnome_bugzilla_557780_306776_freeciv_darwin.patch
82       ./patches/2.0-darwin-x11.patch
83       # Fixes an incompatible function pointer conversion and implicit int errors with clang 16.
84       ./patches/2.0-clang.patch
85     ];
87   propagatedBuildInputs =
88     [
89       atk
90       cairo
91       gdk-pixbuf
92       glib
93       pango
94     ]
95     ++ lib.optionals (stdenv.hostPlatform.isLinux || stdenv.hostPlatform.isDarwin) [
96       libXcomposite
97       libXcursor
98       libXi
99       libXrandr
100       libXrender
101     ]
102     ++ lib.optional xineramaSupport libXinerama
103     ++ lib.optional cupsSupport cups
104     ++ lib.optionals stdenv.hostPlatform.isDarwin [
105       libXdamage
106       AppKit
107       Cocoa
108     ];
110   preConfigure = lib.optionalString (
111     stdenv.hostPlatform.isDarwin && lib.versionAtLeast stdenv.hostPlatform.darwinMinVersion "11"
112   ) "MACOSX_DEPLOYMENT_TARGET=10.16";
114   configureFlags =
115     [
116       "--sysconfdir=/etc"
117       "--with-gdktarget=${gdktarget}"
118       "--with-xinput=yes"
119     ]
120     ++ lib.optionals stdenv.hostPlatform.isDarwin [
121       "--disable-glibtest"
122       "--disable-introspection"
123       "--disable-visibility"
124     ]
125     ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
126       "ac_cv_path_GTK_UPDATE_ICON_CACHE=${buildPackages.gtk2}/bin/gtk-update-icon-cache"
127       "ac_cv_path_GDK_PIXBUF_CSOURCE=${buildPackages.gdk-pixbuf.dev}/bin/gdk-pixbuf-csource"
128     ];
130   env = lib.optionalAttrs stdenv.cc.isGNU {
131     NIX_CFLAGS_COMPILE = toString [
132       "-Wno-error=implicit-int"
133       "-Wno-error=incompatible-pointer-types"
134     ];
135   };
137   enableParallelBuilding = true;
139   installFlags = [
140     "sysconfdir=${placeholder "out"}/etc"
141   ];
143   doCheck = false; # needs X11
145   postInstall = ''
146     moveToOutput share/gtk-2.0/demo "$devdoc"
147     # The updater is needed for nixos env and it's tiny.
148     moveToOutput bin/gtk-update-icon-cache "$out"
149   '';
151   passthru = {
152     gtkExeEnvPostBuild = ''
153       rm $out/lib/gtk-2.0/2.10.0/immodules.cache
154       $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
155     ''; # workaround for bug of nix-mode for Emacs */ '';
156     inherit gdktarget;
157     tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
158   };
160   meta = {
161     homepage = "https://www.gtk.org/";
162     description = "Multi-platform toolkit for creating graphical user interfaces";
163     longDescription = ''
164       GTK is a highly usable, feature rich toolkit for creating graphical user
165       interfaces which boasts cross platform compatibility and an easy to use
166       API.  GTK it is written in C, but has bindings to many other popular
167       programming languages such as C++, Python and C# among others.  GTK is
168       licensed under the GNU LGPL 2.1 allowing development of both free and
169       proprietary software with GTK without any license fees or royalties.
170     '';
171     changelog = "https://gitlab.gnome.org/GNOME/gtk/-/raw/${finalAttrs.version}/NEWS";
172     license = lib.licenses.lgpl2Plus;
173     maintainers = with lib.maintainers; [
174       lovek323
175       raskin
176     ];
177     platforms = lib.platforms.all;
178     pkgConfigModules =
179       [
180         "gdk-2.0"
181         "gtk+-2.0"
182       ]
183       ++ lib.optionals (gdktarget == "x11") [
184         "gdk-x11-2.0"
185         "gtk+-x11-2.0"
186       ];
187   };