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
|
{
lib,
stdenv,
fetchurl,
pkg-config,
glib,
freetype,
libintl,
meson,
ninja,
gobject-introspection,
buildPackages,
withIntrospection ?
lib.meta.availableOn stdenv.hostPlatform gobject-introspection
&& stdenv.hostPlatform.emulatorAvailable buildPackages,
withRaster ? false,
withCairo ? false,
cairo,
icu,
graphite2,
harfbuzz, # The icu variant uses and propagates the non-icu one.
withCoreText ? stdenv.hostPlatform.isDarwin, # withCoreText is required for macOS
withIcu ? false, # recommended by upstream as default, but most don't needed and it's big
withGraphite2 ? true, # it is small and major distros do include it
python3,
gtk-doc,
docbook-xsl-nons,
docbook_xml_dtd_43,
# for passthru.tests
gimp,
gtk3,
gtk4,
mapnik,
qt5,
testers,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "harfbuzz${lib.optionalString withIcu "-icu"}";
version = "13.2.1";
src = fetchurl {
url = "https://github.com/harfbuzz/harfbuzz/releases/download/${finalAttrs.version}/harfbuzz-${finalAttrs.version}.tar.xz";
hash = "sha256-ZpXaPrfhvgqjCS/k2BQzoztH9FGSWcdZ1ynjqaVcFCk=";
};
# This test fails reliably when executed through mesonCheckPhase but passes with
# a direct 'meson test' checkPhase, the validated symbols are fine but msan is not happy
# skipping this for now as it is not relevant for the packaging
patches = [ ./disable-check-symbols-test.patch ];
postPatch = ''
patchShebangs src/*.py test
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
# ApplicationServices.framework headers have cast-align warnings.
substituteInPlace src/hb.hh \
--replace-fail '#pragma GCC diagnostic error "-Wcast-align"' ""
'';
outputs = [
"out"
"dev"
"devdoc"
];
outputBin = "dev";
mesonFlags = [
# upstream recommends cairo, but it is only used for development purposes
# and hb-raster and is not part of the main library.
# Cairo causes transitive (build) dependencies on various X11 or other
# GUI-related libraries, so it shouldn't be re-added lightly.
(lib.mesonEnable "cairo" withCairo)
(lib.mesonEnable "raster" withRaster)
# chafa is only used in a development utility, not in the library
(lib.mesonEnable "chafa" false)
(lib.mesonEnable "coretext" withCoreText)
(lib.mesonEnable "graphite" withGraphite2)
(lib.mesonEnable "icu" withIcu)
(lib.mesonEnable "introspection" withIntrospection)
(lib.mesonOption "cmakepackagedir" "${placeholder "dev"}/lib/cmake")
];
depsBuildBuild = [
pkg-config
];
nativeBuildInputs = [
meson
ninja
libintl
pkg-config
python3
glib
gtk-doc
docbook-xsl-nons
docbook_xml_dtd_43
]
++ lib.optional withIntrospection gobject-introspection
++ lib.optional withCairo cairo;
buildInputs = [
glib
freetype
];
propagatedBuildInputs =
lib.optional withGraphite2 graphite2
++ lib.optionals withIcu [
icu
harfbuzz
];
doCheck = true;
# test_native_coretext_variations depends on the system fonts.
__impureHostDeps = lib.optionals stdenv.hostPlatform.isDarwin [
"/System/Library/Fonts"
];
# Slightly hacky; some pkgs expect them in a single directory.
postFixup = lib.optionalString withIcu ''
rm "$out"/lib/libharfbuzz.* "$dev/lib/pkgconfig/harfbuzz.pc"
ln -s {'${harfbuzz.dev}',"$dev"}/lib/pkgconfig/harfbuzz.pc
${lib.optionalString stdenv.hostPlatform.isDarwin ''
ln -s {'${harfbuzz.out}',"$out"}/lib/libharfbuzz.dylib
ln -s {'${harfbuzz.out}',"$out"}/lib/libharfbuzz.0.dylib
''}
'';
passthru.tests = {
inherit
gimp
gtk3
gtk4
mapnik
;
inherit (qt5) qtbase;
pkg-config = testers.hasPkgConfigModules {
package = finalAttrs.finalPackage;
};
};
meta = {
description = "OpenType text shaping engine";
homepage = "https://harfbuzz.github.io/";
changelog = "https://github.com/harfbuzz/harfbuzz/raw/${finalAttrs.version}/NEWS";
maintainers = [ lib.maintainers.cobalt ];
license = lib.licenses.mit;
platforms = lib.platforms.unix ++ lib.platforms.windows;
pkgConfigModules = [
"harfbuzz"
"harfbuzz-gobject"
"harfbuzz-subset"
"harfbuzz-vector"
]
++ (lib.optional withIcu "harfbuzz-icu")
++ (lib.optional withRaster "harfbuzz-raster")
++ (lib.optional withCairo "harfbuzz-cairo");
};
})
|