1{
2 lib,
3 stdenv,
4 fetchurl,
5 meson,
6 ninja,
7 gettext,
8 itstool,
9 pkg-config,
10 libxml2,
11 libjpeg,
12 libpeas,
13 libportal-gtk3,
14 gnome,
15 gtk3,
16 libhandy,
17 glib,
18 gsettings-desktop-schemas,
19 gnome-desktop,
20 lcms2,
21 gdk-pixbuf,
22 exempi,
23 shared-mime-info,
24 wrapGAppsHook3,
25 libjxl,
26 librsvg,
27 webp-pixbuf-loader,
28 libheif,
29 libexif,
30 gobject-introspection,
31 gi-docgen,
32}:
33
34stdenv.mkDerivation rec {
35 pname = "eog";
36 version = "47.0";
37
38 outputs = [
39 "out"
40 "dev"
41 "devdoc"
42 ];
43
44 src = fetchurl {
45 url = "mirror://gnome/sources/eog/${lib.versions.major version}/eog-${version}.tar.xz";
46 hash = "sha256-217b9SJNdRJqe32O5OknKi8wqVMzHVuvbT88DODL3mY=";
47 };
48
49 patches = [
50 # Fix path to libeog.so in the gir file.
51 # We patch gobject-introspection to hardcode absolute paths but
52 # our Meson patch will only pass the info when install_dir is absolute as well.
53 ./fix-gir-lib-path.patch
54 ];
55
56 nativeBuildInputs = [
57 meson
58 ninja
59 pkg-config
60 gettext
61 itstool
62 wrapGAppsHook3
63 libxml2 # for xmllint for xml-stripblanks
64 gobject-introspection
65 gi-docgen
66 ];
67
68 buildInputs = [
69 libjpeg
70 libportal-gtk3
71 gtk3
72 libhandy
73 gdk-pixbuf
74 glib
75 libpeas
76 librsvg
77 lcms2
78 gnome-desktop
79 libexif
80 exempi
81 gsettings-desktop-schemas
82 shared-mime-info
83 ];
84
85 mesonFlags = [
86 "-Dgtk_doc=true"
87 ];
88
89 postInstall = ''
90 # Pull in WebP and JXL support for gnome-backgrounds.
91 # In postInstall to run before gappsWrapperArgsHook.
92 export GDK_PIXBUF_MODULE_FILE="${
93 gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
94 extraLoaders = [
95 libjxl
96 librsvg
97 webp-pixbuf-loader
98 libheif.out
99 ];
100 }
101 }"
102 '';
103
104 preFixup = ''
105 gappsWrapperArgs+=(
106 # Thumbnailers
107 --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
108 --prefix XDG_DATA_DIRS : "${libjxl}/share"
109 --prefix XDG_DATA_DIRS : "${librsvg}/share"
110 --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
111 )
112 '';
113
114 postFixup = ''
115 # Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
116 moveToOutput "share/doc" "$devdoc"
117 '';
118
119 passthru = {
120 updateScript = gnome.updateScript {
121 packageName = "eog";
122 };
123 };
124
125 meta = {
126 description = "GNOME image viewer";
127 homepage = "https://gitlab.gnome.org/GNOME/eog";
128 changelog = "https://gitlab.gnome.org/GNOME/eog/-/blob/${version}/NEWS?ref_type=tags";
129 license = lib.licenses.gpl2Plus;
130 teams = [ lib.teams.gnome ];
131 platforms = lib.platforms.unix;
132 mainProgram = "eog";
133 };
134}