1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
{ lib
, stdenv
, fetchurl
, fetchFromGitLab
, fetchpatch
, cairo
, cmake
, boost
, curl
, fontconfig
, freetype
, lcms
, libiconv
, libintl
, libjpeg
, ninja
, openjpeg
, pkg-config
, python3
, zlib
, withData ? true, poppler_data
, qt5Support ? false, qt6Support ? false, qtbase ? null
, introspectionSupport ? false, gobject-introspection ? null
, gpgmeSupport ? false, gpgme ? null
, utils ? false, nss ? null
, minimal ? false
, suffix ? "glib"
# for passthru.tests
, cups-filters
, gdal
, gegl
, inkscape
, pdfslicer
, scribus
, vips
}:
let
mkFlag = optset: flag: "-DENABLE_${flag}=${if optset then "on" else "off"}";
# unclear relationship between test data repo versions and poppler
# versions, though files don't appear to be updated after they're
# added, so it's probably safe to just always use the latest available
# version.
testData = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "poppler";
repo = "test";
rev = "400f3ff05b2b1c0ae17797a0bd50e75e35c1f1b1";
hash = "sha256-Y4aNOJLqo4g6tTW6TAb60jAWtBhRgT/JXsub12vi3aU=";
};
in
stdenv.mkDerivation (finalAttrs: rec {
pname = "poppler-${suffix}";
version = "24.02.0"; # beware: updates often break cups-filters build, check scribus too!
outputs = [ "out" "dev" ];
src = fetchurl {
url = "https://poppler.freedesktop.org/poppler-${version}.tar.xz";
hash = "sha256-GRh6P90F8z59YExHmcGD3lygEYZAyIs3DdzzE2NDIi4=";
};
patches = [
(fetchpatch {
# https://access.redhat.com/security/cve/CVE-2024-6239
name = "CVE-2024-6239.patch";
url = "https://gitlab.freedesktop.org/poppler/poppler/-/commit/0554731052d1a97745cb179ab0d45620589dd9c4.patch";
hash = "sha256-I78wJ4l1DSh+x/e00ZL8uvrGdBH+ufp+EDm0A1XWyCU=";
})
];
nativeBuildInputs = [
cmake
ninja
pkg-config
python3
];
buildInputs = [
boost
libiconv
libintl
] ++ lib.optionals withData [
poppler_data
];
# TODO: reduce propagation to necessary libs
propagatedBuildInputs = [
zlib
freetype
fontconfig
libjpeg
openjpeg
] ++ lib.optionals (!minimal) [
cairo
lcms
curl
nss
] ++ lib.optionals (qt5Support || qt6Support) [
qtbase
] ++ lib.optionals introspectionSupport [
gobject-introspection
] ++ lib.optionals gpgmeSupport [
gpgme
];
cmakeFlags = [
(mkFlag true "UNSTABLE_API_ABI_HEADERS") # previously "XPDF_HEADERS"
(mkFlag (!minimal) "GLIB")
(mkFlag (!minimal) "CPP")
(mkFlag (!minimal) "LIBCURL")
(mkFlag (!minimal) "LCMS")
(mkFlag (!minimal) "LIBTIFF")
(mkFlag (!minimal) "NSS3")
(mkFlag utils "UTILS")
(mkFlag qt5Support "QT5")
(mkFlag qt6Support "QT6")
(mkFlag gpgmeSupport "GPGME")
] ++ lib.optionals finalAttrs.finalPackage.doCheck [
"-DTESTDATADIR=${testData}"
];
disallowedReferences = lib.optional finalAttrs.finalPackage.doCheck testData;
dontWrapQtApps = true;
# Workaround #54606
preConfigure = lib.optionalString stdenv.hostPlatform.isDarwin ''
sed -i -e '1i cmake_policy(SET CMP0025 NEW)' CMakeLists.txt
'';
# Work around gpgme trying to write to $HOME during qt5 and qt6 tests:
preCheck = lib.optionalString gpgmeSupport ''
HOME_orig="$HOME"
export HOME="$(mktemp -d)"
'';
postCheck = lib.optionalString gpgmeSupport ''
export HOME="$HOME_orig"
unset -v HOME_orig
'';
doCheck = true;
passthru = {
inherit testData;
tests = {
# These depend on internal poppler code that frequently changes.
inherit
cups-filters
inkscape
scribus
;
inherit
gegl
pdfslicer
vips
;
gdal = gdal.override { usePoppler = true; };
python-poppler-qt5 = python3.pkgs.poppler-qt5;
};
};
meta = with lib; {
homepage = "https://poppler.freedesktop.org/";
changelog = "https://gitlab.freedesktop.org/poppler/poppler/-/blob/poppler-${version}/NEWS";
description = "PDF rendering library";
longDescription = ''
Poppler is a PDF rendering library based on the xpdf-3.0 code base. In
addition it provides a number of tools that can be installed separately.
'';
license = licenses.gpl2Plus;
platforms = platforms.all;
maintainers = with maintainers; [ ttuegel ] ++ teams.freedesktop.members;
};
})
|