biome: 1.9.2 -> 1.9.3 (#349335)
[NixPkgs.git] / pkgs / applications / graphics / gimp / default.nix
blobe71cefc6ce06ca6a52783795178edff706290632
1 { stdenv
2 , lib
3 , fetchurl
4 , substituteAll
5 , autoreconfHook
6 , pkg-config
7 , intltool
8 , babl
9 , gegl
10 , gtk2
11 , glib
12 , gdk-pixbuf
13 , isocodes
14 , pango
15 , cairo
16 , freetype
17 , fontconfig
18 , lcms
19 , libpng
20 , libjpeg
21 , libjxl
22 , poppler
23 , poppler_data
24 , libtiff
25 , libmng
26 , librsvg
27 , libwmf
28 , zlib
29 , libzip
30 , ghostscript
31 , aalib
32 , shared-mime-info
33 , libexif
34 , gettext
35 , makeWrapper
36 , gtk-doc
37 , xorg
38 , glib-networking
39 , libmypaint
40 , gexiv2
41 , harfbuzz
42 , mypaint-brushes1
43 , libwebp
44 , libheif
45 , libxslt
46 , libgudev
47 , openexr
48 , desktopToDarwinBundle
49 , AppKit
50 , Cocoa
51 , gtk-mac-integration-gtk2
52 , withPython ? false
53 , python2
56 let
57   python = python2.withPackages (pp: [ pp.pygtk ]);
58 in stdenv.mkDerivation (finalAttrs: {
59   pname = "gimp";
60   version = "2.10.38";
62   outputs = [ "out" "dev" ];
64   src = fetchurl {
65     url = "http://download.gimp.org/pub/gimp/v${lib.versions.majorMinor finalAttrs.version}/gimp-${finalAttrs.version}.tar.bz2";
66     sha256 = "sha256-UKhF7sEciDH+hmFweVD1uERuNfMO37ms+Y+FwRM/hW4=";
67   };
69   patches = [
70     # to remove compiler from the runtime closure, reference was retained via
71     # gimp --version --verbose output
72     (substituteAll {
73       src = ./remove-cc-reference.patch;
74       cc_version = stdenv.cc.cc.name;
75     })
77     # Use absolute paths instead of relying on PATH
78     # to make sure plug-ins are loaded by the correct interpreter.
79     ./hardcode-plugin-interpreters.patch
81     # GIMP queries libheif.pc for builtin encoder/decoder support to determine if AVIF/HEIC files are supported
82     # (see https://gitlab.gnome.org/GNOME/gimp/-/blob/a8b1173ca441283971ee48f4778e2ffd1cca7284/configure.ac?page=2#L1846-1852)
83     # These variables have been removed since libheif 1.18.0
84     # (see https://github.com/strukturag/libheif/commit/cf0d89c6e0809427427583290547a7757428cf5a)
85     # This has already been fixed for the upcoming GIMP 3, but the fix has not been backported to 2.x yet
86     # (see https://gitlab.gnome.org/GNOME/gimp/-/issues/9080)
87     ./force-enable-libheif.patch
88   ];
90   nativeBuildInputs = [
91     autoreconfHook # hardcode-plugin-interpreters.patch changes Makefile.am
92     pkg-config
93     intltool
94     gettext
95     makeWrapper
96     gtk-doc
97     libxslt
98   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
99     desktopToDarwinBundle
100   ];
102   buildInputs = [
103     babl
104     gegl
105     gtk2
106     glib
107     gdk-pixbuf
108     pango
109     cairo
110     gexiv2
111     harfbuzz
112     isocodes
113     freetype
114     fontconfig
115     lcms
116     libpng
117     libjpeg
118     libjxl
119     poppler
120     poppler_data
121     libtiff
122     openexr
123     libmng
124     librsvg
125     libwmf
126     zlib
127     libzip
128     ghostscript
129     aalib
130     shared-mime-info
131     libwebp
132     libheif
133     libexif
134     xorg.libXpm
135     glib-networking
136     libmypaint
137     mypaint-brushes1
138   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
139     AppKit
140     Cocoa
141     gtk-mac-integration-gtk2
142   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
143     libgudev
144   ] ++ lib.optionals withPython [
145     python
146     # Duplicated here because python.withPackages does not expose the dev output with pkg-config files
147     python2.pkgs.pygtk
148   ];
150   # needed by gimp-2.0.pc
151   propagatedBuildInputs = [
152     gegl
153   ];
155   configureFlags = [
156     "--without-webkit" # old version is required
157     "--disable-check-update"
158     "--with-bug-report-url=https://github.com/NixOS/nixpkgs/issues/new"
159     "--with-icc-directory=/run/current-system/sw/share/color/icc"
160     # fix libdir in pc files (${exec_prefix} needs to be passed verbatim)
161     "--libdir=\${exec_prefix}/lib"
162   ] ++ lib.optionals (!withPython) [
163     "--disable-python" # depends on Python2 which was EOLed on 2020-01-01
164   ];
166   enableParallelBuilding = true;
168   doCheck = true;
170   env = {
171     NIX_CFLAGS_COMPILE = toString (
172       [ ]
173       ++ lib.optionals stdenv.cc.isGNU [ "-Wno-error=incompatible-pointer-types" ]
174       ++ lib.optionals stdenv.hostPlatform.isDarwin [ "-DGDK_OSX_BIG_SUR=16" ]
175     );
177     # Check if librsvg was built with --disable-pixbuf-loader.
178     PKG_CONFIG_GDK_PIXBUF_2_0_GDK_PIXBUF_MODULEDIR = "${librsvg}/${gdk-pixbuf.moduleDir}";
179   };
181   preConfigure = ''
182     # The check runs before glib-networking is registered
183     export GIO_EXTRA_MODULES="${glib-networking}/lib/gio/modules:$GIO_EXTRA_MODULES"
184   '';
186   postFixup = ''
187     wrapProgram $out/bin/gimp-${lib.versions.majorMinor finalAttrs.version} \
188       --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE"
189   '';
191   passthru = {
192     # The declarations for `gimp-with-plugins` wrapper,
193     # used for determining plug-in installation paths
194     majorVersion = "${lib.versions.major finalAttrs.version}.0";
195     targetLibDir = "lib/gimp/${finalAttrs.passthru.majorVersion}";
196     targetDataDir = "share/gimp/${finalAttrs.passthru.majorVersion}";
197     targetPluginDir = "${finalAttrs.passthru.targetLibDir}/plug-ins";
198     targetScriptDir = "${finalAttrs.passthru.targetDataDir}/scripts";
200     # probably its a good idea to use the same gtk in plugins ?
201     gtk = gtk2;
203     python2Support = withPython;
204   };
206   meta = with lib; {
207     description = "GNU Image Manipulation Program";
208     homepage = "https://www.gimp.org/";
209     maintainers = with maintainers; [ jtojnar ];
210     license = licenses.gpl3Plus;
211     platforms = platforms.unix;
212     mainProgram = "gimp";
213   };