gnu: Remove unneeded uses of 'libiconv'.
[jackhill/guix/guix.git] / gnu / packages / fontutils.scm
CommitLineData
b387a1c5 1;;; GNU Guix --- Functional package management for GNU
f1597358 2;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr>
1e69db8f 3;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
e86409c5 4;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
0be22e44 5;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
37e78bc7 6;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
4c20b0bc 7;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
3c986a7d 8;;; Copyright © 2017 Nikita <nikita@n0.is>
46175ad3 9;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
695c501d 10;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
a6f38001 11;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
6e3cbafb 12;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
cc51c03f 13;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
2c9e2587 14;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
0ad27959 15;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
0b2f4307 16;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
6f12880a 17;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
b5bbbca6 18;;; Copyright © 2022 Felipe Balbi <balbi@kernel.org>
b387a1c5
AE
19;;;
20;;; This file is part of GNU Guix.
21;;;
22;;; GNU Guix is free software; you can redistribute it and/or modify it
23;;; under the terms of the GNU General Public License as published by
24;;; the Free Software Foundation; either version 3 of the License, or (at
25;;; your option) any later version.
26;;;
27;;; GNU Guix is distributed in the hope that it will be useful, but
28;;; WITHOUT ANY WARRANTY; without even the implied warranty of
29;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30;;; GNU General Public License for more details.
31;;;
32;;; You should have received a copy of the GNU General Public License
33;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
34
a86177d6 35(define-module (gnu packages fontutils)
b387a1c5 36 #:use-module (gnu packages)
0c68fff5
MB
37 #:use-module (gnu packages autotools)
38 #:use-module (gnu packages bison)
427a51fd 39 #:use-module (gnu packages check)
0c68fff5 40 #:use-module (gnu packages compression)
25e08f32 41 #:use-module (gnu packages datastructures)
0ad27959 42 #:use-module (gnu packages docbook)
0c68fff5
MB
43 #:use-module (gnu packages flex)
44 #:use-module (gnu packages fonts)
45 #:use-module (gnu packages freedesktop)
46 #:use-module (gnu packages fribidi)
25e08f32 47 #:use-module (gnu packages gcc)
0c68fff5 48 #:use-module (gnu packages gettext)
b972db72 49 #:use-module (gnu packages ghostscript)
0c68fff5
MB
50 #:use-module (gnu packages glib)
51 #:use-module (gnu packages gnome)
52 #:use-module (gnu packages gperf)
53 #:use-module (gnu packages gtk)
54 #:use-module (gnu packages image)
019c0eda 55 #:use-module (gnu packages linux)
25e08f32 56 #:use-module (gnu packages man)
319e2d17 57 #:use-module (gnu packages perl)
6e4da6ea 58 #:use-module (gnu packages pkg-config)
319e2d17 59 #:use-module (gnu packages python)
44d10b1f 60 #:use-module (gnu packages python-xyz)
ad8aaf47 61 #:use-module (gnu packages sqlite)
5581279f 62 #:use-module (gnu packages webkit)
25e08f32 63 #:use-module (gnu packages xdisorg)
0c68fff5
MB
64 #:use-module (gnu packages xml)
65 #:use-module (gnu packages xorg)
0ad27959 66 #:use-module (gnu packages tex)
b5b73a82 67 #:use-module ((guix licenses) #:prefix license:)
b387a1c5
AE
68 #:use-module (guix packages)
69 #:use-module (guix download)
1436c5c7 70 #:use-module (guix svn-download)
579760d0 71 #:use-module (guix git-download)
319e2d17 72 #:use-module (guix build-system cmake)
427a51fd 73 #:use-module (guix build-system gnu)
ad8aaf47 74 #:use-module (guix build-system python)
4affa918
MB
75 #:use-module (guix build-system meson)
76 #:use-module (guix utils)
77 #:use-module (srfi srfi-1))
b387a1c5
AE
78
79(define-public freetype
80 (package
81 (name "freetype")
79b31767
LC
82 (version "2.10.4")
83 (source
84 (origin
85 (method url-fetch)
86 (uri (string-append "mirror://savannah/freetype/freetype-"
87 version ".tar.xz"))
88 (sha256
89 (base32 "112pyy215chg7f7fmp2l9374chhhpihbh8wgpj5nj6avj3c59a46"))))
b387a1c5 90 (build-system gnu-build-system)
695c501d
RW
91 (arguments
92 ;; The use of "freetype-config" is deprecated, but other packages still
93 ;; depend on it.
94 `(#:configure-flags (list "--enable-freetype-config")))
6983ba56 95 (native-inputs
8394619b 96 (list pkg-config))
6983ba56
SB
97 (propagated-inputs
98 ;; These are all in the Requires.private field of freetype2.pc.
99 ;; XXX: add harfbuzz.
8394619b 100 (list libpng zlib))
35b9e423 101 (synopsis "Font rendering library")
b387a1c5
AE
102 (description
103 "Freetype is a library that can be used by applications to access the
35b9e423 104contents of font files. It provides a uniform interface to access font files.
b387a1c5 105It supports both bitmap and scalable formats, including TrueType, OpenType,
35b9e423 106Type1, CID, CFF, Windows FON/FNT, X11 PCF, and others. It supports high-speed
b387a1c5 107anti-aliased glyph bitmap generation with 256 gray levels.")
79c398a2 108 (license license:freetype) ; some files have other licenses
c70047f1 109 (home-page "https://www.freetype.org/")))
6e4da6ea 110
1e69db8f
EB
111(define-public ttfautohint
112 (package
113 (name "ttfautohint")
0be22e44 114 (version "1.8.3")
1e69db8f
EB
115 (source
116 (origin
117 (method url-fetch)
118 (uri (string-append "mirror://savannah/freetype/ttfautohint-"
119 version ".tar.gz"))
120 (sha256
121 (base32
0be22e44 122 "0zpqgihn3yh3v51ynxwr8asqrijvs4gv686clwv7bm8sawr4kfw7"))))
1e69db8f
EB
123 (build-system gnu-build-system)
124 (native-inputs
8394619b 125 (list flex bison pkg-config))
1e69db8f 126 (inputs
8394619b 127 (list freetype harfbuzz))
1e69db8f 128 (arguments
f91270bf
EF
129 `(#:configure-flags '("--disable-static"
130 "--with-qt=no"))) ;no gui
1e69db8f
EB
131 (synopsis "Automated font hinting")
132 (description
133 "ttfautohint provides a 99% automated hinting process and a platform for
134finely hand-hinting the last 1%. It is ideal for web fonts and supports many
135scripts.")
136 (license (list license:gpl2+ license:freetype)) ;choose one or the other
44ff40c2 137 (home-page "https://www.freetype.org/ttfautohint/")))
1e69db8f 138
508a85df
EB
139(define-public woff-tools
140 (package
141 (name "woff-tools")
142 (version "2009.10.04")
143 (source
144 (origin
145 (method url-fetch)
146 ;; Upstream source is unversioned, so use Debian's versioned tarball
147 (uri (string-append "mirror://debian/pool/main/w/woff-tools/"
148 "woff-tools_" version ".orig.tar.gz"))
149 (file-name (string-append name "-" version ".tar.gz"))
150 (sha256
151 (base32
152 "1i97gkqa6jfzlslsngqf556kx60knlgf7yc9pzsq2pizc6f0d4zl"))))
153 (build-system gnu-build-system)
154 (inputs
8394619b 155 (list zlib))
508a85df 156 (arguments
146b7566 157 `(#:make-flags '(,(string-append "CC=" (cc-for-target)))
508a85df
EB
158 #:tests? #f ;no tests
159 #:phases
160 (modify-phases %standard-phases
161 (delete 'configure) ;no configuration
162 (replace 'install
163 (lambda* (#:key outputs #:allow-other-keys)
164 (let* ((out (assoc-ref outputs "out"))
165 (bin (string-append out "/bin")))
166 (install-file "sfnt2woff" bin)
c547efe7
EF
167 (install-file "woff2sfnt" bin))
168 #t)))))
508a85df
EB
169 (synopsis "Convert between OpenType and WOFF fonts")
170 (description
171 "This package provides two tools:
172@table @code
173@item sfnt2woff
174Converts OpenType fonts to WOFF fonts
175@item woff2sfnt
176Converts WOFF fonts to OpenType fonts
177@end table")
178 (license (list license:mpl1.1 license:gpl2+ license:lgpl2.1+))
179 (home-page "https://people.mozilla.com/~jkew/woff/")))
180
1555aee7
EB
181(define-public ttf2eot
182 (package
183 (name "ttf2eot")
af18fff0 184 (version "0.0.3")
1555aee7
EB
185 (source
186 (origin
af18fff0
TGR
187 (method git-fetch)
188 (uri (git-reference
b0e7b699 189 (url "https://github.com/wget/ttf2eot")
af18fff0
TGR
190 (commit (string-append "v" version))))
191 (file-name (git-file-name name version))
1555aee7
EB
192 (sha256
193 (base32
af18fff0 194 "0l2yh2ialx7135pjzhjs204kk3br7zxjr09zwaia493by2adzigr"))
1555aee7
EB
195 (patches (list (search-patch "ttf2eot-cstddef.patch")))))
196 (build-system gnu-build-system)
197 (arguments
af18fff0 198 `(#:tests? #f ; no tests
1555aee7
EB
199 #:phases
200 (modify-phases %standard-phases
af18fff0
TGR
201 (delete 'configure) ; no configuration
202 (replace 'install ; no install target
1555aee7
EB
203 (lambda* (#:key outputs #:allow-other-keys)
204 (let* ((out (assoc-ref outputs "out"))
205 (bin (string-append out "/bin")))
bf43e133
TGR
206 (install-file "ttf2eot" bin)
207 #t))))))
1555aee7
EB
208 (synopsis "Convert from TrueType to Embeddable Open Type")
209 (description
210 "This package contains a commandline wrapper around OpenTypeUtilities.cpp
211from Chromium, used to make EOT (Embeddable Open Type) files from
212TTF (TrueType/OpenType Font) files.")
213 ;; While the README states "License: Derived from WebKit, so BSD/LGPL
214 ;; 2/LGPL 2.1", the single derived source file includes only BSD in its
215 ;; license header, and the wrapper source contains no license header.
216 (license license:bsd-2)
af18fff0 217 (home-page "https://github.com/wget/ttf2eot")))
1555aee7 218
64965a06
LC
219(define-public ttf2pt1
220 (package
221 (name "ttf2pt1")
222 (version "3.4.4")
223 (source (origin
224 (method url-fetch)
225 (uri (string-append "mirror://sourceforge/ttf2pt1/ttf2pt1/"
226 version "/ttf2pt1-" version ".tgz"))
227 (sha256
228 (base32
229 "1l718n4k4widx49xz7qrj4mybzb8q67kp2jw7f47604ips4654mf"))
230 (modules '((guix build utils)))
231 (snippet
232 '(begin
233 ;; Remove trailing backslashes in the sed expression of the
234 ;; 'install' rule since sed would otherwise fail.
235 (substitute* "Makefile"
236 (("\\|;\\\\[[:space:]]*$") "|; "))
237 #t))))
238 (build-system gnu-build-system)
239 (arguments
240 '(#:tests? #f ;no tests
241 #:phases (modify-phases %standard-phases
242 (replace 'configure
243 (lambda* (#:key outputs #:allow-other-keys)
244 (let ((out (assoc-ref outputs "out")))
245 (substitute* "Makefile"
246 (("INSTDIR =.*")
247 (string-append "INSTDIR = " out "\n"))
248 (("OWNER = .*")
249 "OWNER = `id -un`\n")
250 (("GROUP = .*")
251 "GROUP = `id -g`\n"))
252 #t)))
253 (replace 'build
254 (lambda _
255 (invoke "make" "-j"
256 (number->string (parallel-job-count))
257 "all" "CC=gcc"))))))
8394619b 258 (inputs (list perl))
64965a06
LC
259 (synopsis "Convert TrueType fonts to Postscript Type 1")
260 (description
261 "TTF2PT1 provides tools to convert most TrueType fonts (or other formats
262supported by the FreeType library) to an Adobe Type 1 @file{.pfa} or
263@file{.pfb} file. Another use is as a hinting engine: feed it an unhinted or
264poorly hinted Adobe Type 1 font through the FreeType library and get it back
265with freshly generated hints. The files produced by default are in
266human-readable form, which further needs to be encoded with t1utilities to
267work with most software requiring Type 1 fonts.")
268 (home-page "http://ttf2pt1.sourceforge.net/")
269 (license license:bsd-3)))
270
579760d0 271(define-public woff2
d9476a37
LDB
272 (package
273 (name "woff2")
274 (version "1.0.2")
acc8a0c1
RG
275 (source
276 (origin
277 (method git-fetch)
278 (uri
279 (git-reference
8ed4c468 280 (url "https://github.com/google/woff2")
acc8a0c1
RG
281 (commit (string-append "v" version))))
282 (file-name
283 (git-file-name name version))
284 (sha256
285 (base32 "13l4g536h0pr84ww4wxs2za439s0xp1va55g6l478rfbb1spp44y"))))
d9476a37 286 (build-system cmake-build-system)
acc8a0c1
RG
287 (outputs '("out" "bin"))
288 (arguments
289 `(#:tests? #f ; No target
290 #:configure-flags
291 (list
292 (string-append "-DCMAKE_INSTALL_BINDIR="
293 (assoc-ref %outputs "bin")
294 "/bin")
295 (string-append "-DCMAKE_INSTALL_INCLUDEDIR="
296 (assoc-ref %outputs "out")
297 "/include")
298 (string-append "-DCMAKE_INSTALL_LIBDIR="
299 (assoc-ref %outputs "out")
300 "/lib"))
301 #:phases
302 (modify-phases %standard-phases
303 ;; To install both binaries and libraries.
304 (add-after 'unpack 'patch-installation
305 (lambda _
306 (substitute* "CMakeLists.txt"
307 (("NOT BUILD_SHARED_LIBS")
308 "BUILD_SHARED_LIBS"))
309 #t)))))
d9476a37 310 (native-inputs
8394619b 311 (list pkg-config))
d9476a37 312 (inputs
8394619b 313 (list brotli))
acc8a0c1 314 (synopsis "Libraries and tools for WOFF2 font format")
7230f6d5 315 (description "WOFF2 provides libraries and tools to handle the Web Open
acc8a0c1
RG
316Font Format (WOFF).")
317 (home-page "https://w3c.github.io/woff/woff2/")
318 (license license:expat)))
579760d0 319
6e4da6ea 320(define-public fontconfig
7f9da31c
MC
321 (hidden-package
322 (package
323 (name "fontconfig-minimal")
07e9bd77 324 (version "2.13.94")
7f9da31c 325 (source (origin
c738a054
MC
326 (method url-fetch)
327 (uri (string-append
328 "https://www.freedesktop.org/software/"
329 "fontconfig/release/fontconfig-" version ".tar.xz"))
330 (sha256 (base32
331 "0g004r0bkkqz00mpm3svnnxn7d83158q0yb9ggxryizxfg5m5w55"))
332 (patches (search-patches "fontconfig-cache-ignore-mtime.patch"))))
7f9da31c
MC
333 (build-system gnu-build-system)
334 ;; In Requires or Requires.private of fontconfig.pc.
335 (propagated-inputs `(("expat" ,expat)
336 ("freetype" ,freetype)
337 ("libuuid" ,util-linux "lib")))
338 (inputs
a682fea9
MD
339 ;; We use to use 'font-ghostscript' but they are not recognized by newer
340 ;; versions of Pango, causing many applications to fail to find fonts
341 ;; otherwise.
8394619b 342 (list font-dejavu))
7f9da31c
MC
343 (native-inputs
344 `(("gperf" ,gperf)
0ad27959
MC
345 ("pkg-config" ,pkg-config)
346 ("python" ,python-minimal))) ;to avoid a cycle through tk
7f9da31c
MC
347 (arguments
348 `(#:configure-flags
349 (list "--disable-docs"
350 "--with-cache-dir=/var/cache/fontconfig"
351 ;; register the default fonts
352 (string-append "--with-default-fonts="
353 (assoc-ref %build-inputs "font-dejavu")
c738a054 354 "/share/fonts"))
7f9da31c
MC
355 #:phases
356 (modify-phases %standard-phases
0ad27959
MC
357 (add-before 'check 'skip-problematic-tests
358 (lambda _
6f12880a
SM
359 ;; SOURCE_DATE_EPOCH doesn't make sense when ignoring mtime
360 (unsetenv "SOURCE_DATE_EPOCH")
361
0ad27959
MC
362 (substitute* "test/run-test.sh"
363 ;; The crbug1004254 test attempts to fetch fonts from the
364 ;; network.
365 (("\\[ -x \"\\$BUILDTESTDIR\"/test-crbug1004254 \\]")
366 "false"))))
7f9da31c
MC
367 (replace 'install
368 (lambda _
369 ;; Don't try to create /var/cache/fontconfig.
370 (invoke "make" "install"
371 "fc_cachedir=$(TMPDIR)"
372 "RUN_FC_CACHE_TEST=false"))))))
373 (synopsis "Library for configuring and customizing font access")
374 (description
375 "Fontconfig can discover new fonts when installed automatically;
6e4da6ea
AE
376perform font name substitution, so that appropriate alternative fonts can
377be selected if fonts are missing;
378identify the set of fonts required to completely cover a set of languages;
379have GUI configuration tools built as it uses an XML-based configuration file;
380efficiently and quickly find needed fonts among the set of installed fonts;
381be used in concert with the X Render Extension and FreeType to implement
382high quality, anti-aliased and subpixel rendered text on a display.")
7f9da31c
MC
383 ; The exact license is more X11-style than BSD-style.
384 (license (license:non-copyleft "file://COPYING"
385 "See COPYING in the distribution."))
c738a054
MC
386 (native-search-paths
387 ;; Since version 2.13.94, fontconfig knows to find fonts from
388 ;; XDG_DATA_DIRS.
389 (list (search-path-specification
390 (variable "XDG_DATA_DIRS")
391 (files '("share")))))
7f9da31c
MC
392 (home-page "https://www.freedesktop.org/wiki/Software/fontconfig"))))
393
394;;; The documentation of fontconfig is built in a separate package, as it
395;;; causes a dramatic increase in the size of the closure of fontconfig. This
396;;; is intentionally named 'fontconfig', as it's intended as the user-facing
397;;; fontconfig package.
398(define-public fontconfig-with-documentation
399 (package
400 (inherit fontconfig)
401 (name "fontconfig")
402 (outputs (cons "doc" (package-outputs fontconfig)))
403 (arguments
404 (substitute-keyword-arguments (package-arguments fontconfig)
405 ((#:configure-flags configure-flags)
406 `(delete "--disable-docs" ,configure-flags))
407 ((#:phases phases '%standard-phases)
408 `(modify-phases ,phases
a6f38001
LC
409 (add-after 'unpack 'no-pdf-doc
410 (lambda _
411 ;; Don't build documentation as PDF.
412 (substitute* "doc/Makefile.in"
413 (("^PDF_FILES = .*")
414 "PDF_FILES =\n"))))
7f9da31c
MC
415 (add-after 'install 'move-man-sections
416 (lambda* (#:key outputs #:allow-other-keys)
417 ;; Move share/man/man{3,5} to the "doc" output. Leave "man1" in
418 ;; "out" for convenience.
419 (let ((out (assoc-ref outputs "out"))
420 (doc (assoc-ref outputs "doc")))
421 (for-each (lambda (section)
422 (let ((source (string-append out "/share/man/"
423 section))
424 (target (string-append doc "/share/man/"
425 section)))
426 (copy-recursively source target)
427 (delete-file-recursively source)))
428 '("man3" "man5")))))))))
429 (native-inputs
430 (append (package-native-inputs fontconfig)
431 `(("docbook-utils" ,docbook-utils))))
432 (properties (alist-delete 'hidden? (package-properties fontconfig)))))
313b9012
AE
433
434(define-public t1lib
435 (package
436 (name "t1lib")
437 (version "5.1.2")
438 (source (origin
439 (method url-fetch)
a60c705b
EF
440 (uri (list (string-append "ftp://sunsite.unc.edu/pub/Linux/libs/"
441 "graphics/" name "-" version ".tar.gz")
442 (string-append "https://fossies.org/linux/misc/old/"
443 name "-" version ".tar.gz")))
313b9012 444 (sha256 (base32
4f3e02f1
EF
445 "0nbvjpnmcznib1nlgg8xckrmsw3haa154byds2h90y2g0nsjh4w2"))
446 (patches (search-patches
9c2d2c13 447 "t1lib-CVE-2010-2642.patch" ; 2011-0443, 2011-5244
4f3e02f1 448 "t1lib-CVE-2011-0764.patch"
9c2d2c13
EF
449 "t1lib-CVE-2011-1552+.patch")))) ; 2011-1553, 2011-1554
450 (properties `((lint-hidden-cve . ("CVE-2011-0433"
451 "CVE-2011-1553"
452 "CVE-2011-1554"
453 "CVE-2011-5244"))))
313b9012
AE
454 (build-system gnu-build-system)
455 (arguments
456 ;; Making the documentation requires latex, but t1lib is also an input
457 ;; for building texlive.
458 `(#:tests? #f ; no test target
459 #:make-flags
460 '("without_doc")))
9e771e3b 461 (synopsis "Library for generating bitmaps from Type 1 fonts")
313b9012
AE
462 (description
463 "T1lib is a library for generating/rasterising bitmaps from Type 1 fonts.
464It is based on the code of the X11 rasteriser of the X11 project.
465
466The bitmaps created by t1lib are returned in a data structure with type
35b9e423
EB
467GLYPH. This special GLYPH-type is also used in the X11 window system to
468describe character bitmaps. It contains the bitmap data as well as some
469metric information. But t1lib is in itself entirely independent of the
470X11-system or any other graphical user interface.")
313b9012 471 (license license:gpl2)
d716a474 472 (home-page "https://www.t1lib.org/")))
e5c0701f
AE
473
474(define-public teckit
475 (package
93a55838 476 (name "teckit")
4c230e71 477 (version "2.5.10") ; signed by key 0xC9183BEA0288CDEE
93a55838
MB
478 (source
479 (origin
480 (method url-fetch)
481 (uri (string-append "https://github.com/silnrsi/teckit/releases/"
482 "download/v" version "/teckit-" version ".tar.gz"))
483 (sha256
4c230e71 484 (base32 "12qnf8nhxyr4d5pc01s3vc6h726506957an4vvmmfz633cqi5796"))))
93a55838 485 (build-system gnu-build-system)
9d2c24d2
MB
486 (arguments
487 '(#:configure-flags '("--disable-static")))
93a55838 488 (inputs
8394619b 489 (list zlib expat))
93a55838 490 (native-inputs
8394619b 491 (list perl)) ;for the tests
93a55838
MB
492 (synopsis "Toolkit for encoding conversions")
493 (description
494 "TECkit is a low-level toolkit intended to be used by other applications
e5c0701f 495that need to perform encoding conversions (e.g., when importing legacy data
35b9e423 496into a Unicode-based application). The primary component of the TECkit
e5c0701f 497package is therefore a library that performs conversions; this is the
35b9e423 498\"TECkit engine\". The engine relies on mapping tables in a specific binary
e5c0701f
AE
499format (for which documentation is available); there is a compiler that
500creates such tables from a human-readable mapping description (a simple
501text file).
502
503To facilitate the development and testing of mapping tables for TECkit,
504several applications are also included in the current package; these
505include simple tools for applying conversions to plain-text and Standard
506Format files, as well as both command-line and simple GUI versions of the
35b9e423 507TECkit compiler. However, it is not intended that these tools will be the
e5c0701f
AE
508primary means by which end users perform conversions, and they have not
509been designed, tested, and debugged to the extent that general-purpose
510applications should be.")
93a55838 511 (license license:lgpl2.1+)
0b2f4307 512 (home-page "https://scripts.sil.org/cms/scripts/page.php?cat_id=teckit")))
319e2d17
AE
513
514(define-public graphite2
515 (package
516 (name "graphite2")
8152024c 517 (version "1.3.13")
319e2d17
AE
518 (source
519 (origin
520 (method url-fetch)
6983ba56
SB
521 (uri (string-append "https://github.com/silnrsi/graphite/releases/"
522 "download/" version "/" name "-" version ".tgz"))
319e2d17 523 (sha256
297a36ab 524 (base32
8152024c 525 "01jzhwnj1c3d68dmw15jdxly0hwkmd8ja4kw755rbkykn1ly2qyx"))))
319e2d17 526 (build-system cmake-build-system)
e6f22a82 527 (native-inputs
8394619b 528 (list python python-fonttools))
319e2d17 529 (inputs
8394619b 530 (list freetype))
35b9e423 531 (synopsis "Reimplementation of the SIL Graphite text processing engine")
319e2d17
AE
532 (description
533 "Graphite2 is a reimplementation of the SIL Graphite text processing
534engine. Graphite is a smart font technology designed to facilitate the
535process known as shaping. This process takes an input Unicode text string
536and returns a sequence of positioned glyphids from the font.")
537 (license license:lgpl2.1+)
e86409c5 538 (home-page "https://github.com/silnrsi/graphite")))
ee69f85c
EB
539
540(define-public potrace
541 (package
542 (name "potrace")
d9ff6ad8 543 (version "1.16")
ee69f85c
EB
544 (source
545 (origin
546 (method url-fetch)
de67e922
LF
547 (uri (string-append "mirror://sourceforge/potrace/" version
548 "/potrace-" version ".tar.gz"))
ee69f85c
EB
549 (sha256
550 (base32
d9ff6ad8 551 "1k3sxgjqq0jnpk9xxys05q32sl5hbf1lbk1gmfxcrmpdgnhli0my"))))
ee69f85c 552 (build-system gnu-build-system)
8394619b
LC
553 (native-inputs (list ghostscript)) ;for tests
554 (inputs (list zlib))
4797d84d
AE
555 (arguments
556 `(#:configure-flags
557 `("--with-libpotrace"))) ; install library and headers
ee69f85c
EB
558 (synopsis "Transform bitmaps into vector graphics")
559 (description
560 "Potrace is a tool for tracing a bitmap, which means, transforming a
561bitmap into a smooth, scalable image. The input is a bitmap (PBM, PGM, PPM,
562or BMP format), and the default output is an encapsulated PostScript
563file (EPS). A typical use is to create EPS files from scanned data, such as
564company or university logos, handwritten notes, etc. The resulting image is
565not \"jaggy\" like a bitmap, but smooth. It can then be rendered at any
566resolution.")
567 (license license:gpl2+)
568 (home-page "http://potrace.sourceforge.net/")))
5277dbb0 569
6ef0ec76
RJ
570(define-public libotf
571 (package
572 (name "libotf")
9b9e7481 573 (version "0.9.16")
6ef0ec76
RJ
574 (source (origin
575 (method url-fetch)
6a703976
MW
576 (uri (string-append "mirror://savannah/m17n/libotf-"
577 version ".tar.gz"))
6ef0ec76 578 (sha256
9b9e7481 579 (base32 "0sq6g3xaxw388akws6qrllp3kp2sxgk2dv4j79k6mm52rnihrnv8"))))
6ef0ec76 580 (build-system gnu-build-system)
48342a04 581 (native-inputs
8394619b 582 (list pkg-config))
6ef0ec76 583 (propagated-inputs
8394619b 584 (list freetype))
340978d7 585 (home-page "https://www.nongnu.org/m17n/")
6ef0ec76
RJ
586 (synopsis "Library for handling OpenType Font")
587 (description "This library can read Open Type Layout Tables from an OTF
588file. Currently these tables are supported; head, name, cmap, GDEF, GSUB, and
589GPOS. It can convert a Unicode character sequence to a glyph code sequence by
590using the above tables.")
591 (license license:lgpl2.0+)))
592
5277dbb0
EB
593(define-public libspiro
594 (package
595 (name "libspiro")
71016916 596 (version "20200505")
5277dbb0
EB
597 (source
598 (origin
599 (method url-fetch)
24950127 600 (uri (string-append "https://github.com/fontforge/libspiro/releases"
42080463 601 "/download/" version "/libspiro-dist-" version ".tar.gz"))
5277dbb0
EB
602 (sha256
603 (base32
71016916 604 "0j8fmyj4wz6mqk17dqs6f8jx0i52n68gv5px17qbrjnbilg9mih6"))))
5277dbb0 605 (build-system gnu-build-system)
06639876
MB
606 (arguments
607 '(#:configure-flags '("--disable-static")))
5277dbb0
EB
608 (synopsis "Clothoid to bezier conversion library")
609 (description
610 "Raph Levien's Spiro package as a library. A mechanism for drawing
611smooth contours with constant curvature at the spline joins.")
612 (license license:gpl2+)
613 (home-page "http://libspiro.sourceforge.net/")))
f945bf06
EB
614
615(define-public libuninameslist
616 (package
617 (name "libuninameslist")
3db5a01c 618 (version "20200313")
27b73b49 619 (home-page "https://github.com/fontforge/libuninameslist")
f945bf06
EB
620 (source
621 (origin
622 (method url-fetch)
27b73b49
MB
623 (uri (string-append home-page "/releases/download/" version
624 "/libuninameslist-dist-" version ".tar.gz"))
f945bf06
EB
625 (sha256
626 (base32
3db5a01c 627 "10ri80c64xb4rhbif3sr87y5vhi3m702zb0m02imvj1jib9rq0m8"))))
f945bf06 628 (build-system gnu-build-system)
f945bf06
EB
629 (synopsis "Unicode names and annotation list")
630 (description
631 "LibUniNamesList holds www.unicode.org Nameslist.txt data which can be
632useful for programs that need Unicode \"Names\", \"Annotations\", and block
633definitions.")
b19c92ef
MB
634 ;; COPYING specifies GPL2, but according to LICENSE it only covers the
635 ;; configure script. The actual code is BSD-3, and the Unicode data
636 ;; is governed by an X11-style license only found on the web.
637 (license (list license:bsd-3
638 (license:x11-style
27b73b49 639 "https://www.unicode.org/copyright.html#License")))))
0c115d8c
EB
640
641(define-public fontforge
642 (package
643 (name "fontforge")
de42af14 644 (version "20201107")
0c115d8c
EB
645 (source (origin
646 (method url-fetch)
56586557
AE
647 (uri (string-append
648 "https://github.com/fontforge/fontforge/releases/download/"
0a502c8c 649 version "/fontforge-" version ".tar.xz"))
3b08c873 650 (sha256
de42af14 651 (base32 "0y3c8x1i6yf6ak9m5dhr1nldgfmg7zhnwdfd57ffs698c27vmg38"))))
0a502c8c 652 (build-system cmake-build-system)
56586557 653 (native-inputs
8394619b 654 (list pkg-config))
56586557
AE
655 (inputs `(("cairo" ,cairo)
656 ("fontconfig" ,fontconfig) ;dlopen'd
657 ("freetype" ,freetype)
b94a6ca0 658 ("gettext" ,gettext-minimal)
0c115d8c
EB
659 ("libICE" ,libice)
660 ("libSM" ,libsm)
56586557
AE
661 ("libX11" ,libx11)
662 ("libXi" ,libxi)
4bd428a7 663 ("libjpeg" ,libjpeg-turbo)
56586557
AE
664 ("libltdl" ,libltdl)
665 ("libpng" ,libpng)
0c115d8c 666 ("libspiro" ,libspiro)
56586557 667 ("libtiff" ,libtiff)
de946028 668 ("libungif" ,libungif)
0c115d8c 669 ("libuninameslist" ,libuninameslist)
56586557
AE
670 ("libxft" ,libxft)
671 ("libxml2" ,libxml2)
0c115d8c 672 ("pango" ,pango)
56586557 673 ("potrace" ,potrace)
01a92a70 674 ("python" ,python)
56586557 675 ("zlib" ,zlib)))
0c115d8c 676 (arguments
0a502c8c
MB
677 '(#:configure-flags '(;; TODO: Provide GTK+ for the Wayland-friendly GDK
678 ;; backend, instead of the legacy X11 backend.
679 ;; Currently it introduces a circular dependency.
680 "-DENABLE_X11=ON")
681 #:phases
5ab869f9 682 (modify-phases %standard-phases
0a502c8c 683 (add-after 'unpack 'do-not-override-RPATH
6e3cbafb 684 (lambda _
0a502c8c
MB
685 ;; Do not attempt to set a default RPATH, as our ld-wrapper
686 ;; already does the right thing.
687 (substitute* "CMakeLists.txt"
688 (("^set_default_rpath\\(\\)")
689 ""))
6e3cbafb 690 #t))
5ab869f9
EB
691 (add-after 'install 'set-library-path
692 (lambda* (#:key inputs outputs #:allow-other-keys)
693 (let ((out (assoc-ref outputs "out"))
bc64d955
LC
694 (potrace (dirname
695 (search-input-file inputs "bin/potrace"))))
5ab869f9
EB
696 (wrap-program (string-append out "/bin/fontforge")
697 ;; Fontforge dynamically opens libraries.
698 `("LD_LIBRARY_PATH" ":" prefix
699 ,(map (lambda (input)
700 (string-append (assoc-ref inputs input)
701 "/lib"))
de946028 702 '("libtiff" "libjpeg" "libpng" "libungif"
5ab869f9
EB
703 "libxml2" "zlib" "libspiro" "freetype"
704 "pango" "cairo" "fontconfig")))
705 ;; Checks for potrace program at runtime
2f3f8ae0 706 `("PATH" ":" prefix (,potrace)))
5dd7bd12 707 #t))))))
0c115d8c
EB
708 (synopsis "Outline font editor")
709 (description
710 "FontForge allows you to create and modify postscript, truetype and
711opentype fonts. You can save fonts in many different outline formats, and
712generate bitmaps.")
56586557 713 (license license:gpl3+)
3ab8c224 714 (home-page "https://fontforge.github.io")))
427a51fd 715
4affa918
MB
716;; This is the last version that supports Python 2, which is needed for
717;; GNU FreeFont. Remove once no longer required.
718(define-public fontforge-20190801
719 (package
720 (inherit fontforge)
721 (version "20190801")
722 (source (origin
723 (method url-fetch)
724 (uri (string-append
725 "https://github.com/fontforge/fontforge/releases/download/"
726 version "/fontforge-" version ".tar.gz"))
727 (sha256
728 (base32 "0lh8yx01asbzxm6car5cfi64njh5p4lxc7iv8dldr5rwg357a86r"))))
729 (build-system gnu-build-system)
730 (arguments
731 (substitute-keyword-arguments (package-arguments fontforge)
732 ((#:configure-flags _)
733 ''())
734 ((#:phases phases)
735 `(modify-phases ,phases
736 (delete 'do-not-override-RPATH)))))
737 (inputs
738 `(("python" ,python-2)
739 ,@(alist-delete "python" (package-inputs fontforge))))))
740
427a51fd 741(define-public python2-ufolib
742 (package
743 (name "python2-ufolib")
a82bb552 744 (version "2.1.1")
427a51fd 745 (source
746 (origin
747 (method url-fetch)
748 (uri (pypi-uri "ufoLib" version ".zip"))
749 (sha256
a82bb552 750 (base32 "07qy6mx7z0wi9a30lc2hj5i9q1gnz1n8l40dmjz2c19mj9s6mz9l"))))
427a51fd 751 (build-system python-build-system)
752 (arguments
753 `(#:python ,python-2))
754 (propagated-inputs
8394619b 755 (list python2-fonttools))
427a51fd 756 (native-inputs
8394619b 757 (list unzip python2-pytest python2-pytest-runner))
427a51fd 758 (home-page "https://github.com/unified-font-object/ufoLib")
759 (synopsis "Low-level UFO reader and writer")
760 (description
761 "UfoLib reads and writes Unified Font Object (UFO)
762files. UFO is a file format that stores fonts source files.")
763 (license license:bsd-3)))
3715aff5 764
765(define-public python2-defcon
766 (package
767 (name "python2-defcon")
e6d7686f 768 (version "0.3.5")
3715aff5 769 (source
770 (origin
771 (method url-fetch)
772 (uri (pypi-uri "defcon" version ".zip"))
773 (sha256
774 (base32
e6d7686f 775 "03jlm2gy9lvbwj68kfdm43yaddwd634jwkdg4wf0jxx2s8mwbg22"))))
3715aff5 776 (build-system python-build-system)
777 (arguments
778 `(#:python ,python-2))
779 (native-inputs
8394619b 780 (list unzip python2-pytest python2-pytest-runner))
3715aff5 781 (propagated-inputs
8394619b 782 (list python2-fonttools python2-ufolib))
e85af137 783 (home-page "https://pypi.org/project/defcon/")
3715aff5 784 (synopsis "Flexible objects for representing @acronym{UFO, unified font object} data")
785 (description
786 "Defcon is a set of @acronym{UFO, unified font object} based objects
787optimized for use in font editing applications. The objects are built to
788be lightweight, fast and flexible. The objects are very bare-bones and
789they are not meant to be end-all, be-all objects. Rather, they are meant
790to provide base functionality so that you can focus on your application’s
791behavior, not object observing or maintaining cached data. Defcon
792implements UFO3 as described by the UFO font format.")
793 (license license:expat)))
20d2c6e7 794
795(define-public nototools
796 (package
797 (name "nototools")
798 (version "20170925")
799 (source
800 (origin
b2447228
EF
801 (method git-fetch)
802 (uri (git-reference
803 (url "https://github.com/googlei18n/nototools")
804 (commit "v2017-09-25-tooling-for-phase3-update")))
805 (file-name (git-file-name name version))
20d2c6e7 806 (sha256
807 (base32
b2447228 808 "03nzvcvwmrhfrcjhg218q2f3hfrm3vlivp4rk19sc397kh3hisiz"))))
20d2c6e7 809 (build-system python-build-system)
810 (arguments
811 `(#:python ,python-2))
812 (propagated-inputs
8394619b
LC
813 (list python2-booleanoperations
814 python2-defcon
815 python2-fonttools
816 python2-pillow
817 python2-pyclipper
818 python2-ufolib))
20d2c6e7 819 (home-page "https://github.com/googlei18n/nototools")
820 (synopsis "Noto fonts support tools and scripts")
821 (description
822 "Nototools is a Python package containing Python scripts used to
823maintain the Noto Fonts project.")
824 (license (list license:asl2.0
825 ;; Sample texts are attributed to UN and OHCHR.
826 ;; The permissions on the UDHR are pretty lax:
827 ;; http://www.ohchr.org/EN/UDHR/Pages/Introduction.aspx
828 ;; "If UDHR translations or materials are reproduced, users
829 ;; should make reference to this website as a source by
830 ;; providing a link."
831 license:public-domain
832 (license:non-copyleft
833 "file://sample_texts/attributions.txt"
834 "See sample_texts/attributions.txt in the distribution.")))))
ad8aaf47 835
25e08f32
MB
836(define-public fcft
837 (package
838 (name "fcft")
b5bbbca6 839 (version "3.0.1")
25e08f32
MB
840 (home-page "https://codeberg.org/dnkl/fcft")
841 (source (origin
842 (method git-fetch)
843 (uri (git-reference (url home-page) (commit version)))
844 (file-name (git-file-name name version))
845 (sha256
846 (base32
b5bbbca6 847 "0jxy92ny8b7s7yvz1mr8zpf7l2zsn506fi9f98pvh9k25jprg0cx"))))
25e08f32 848 (build-system meson-build-system)
25e08f32 849 (native-inputs
137ace6b 850 (list check pkg-config scdoc))
25e08f32 851 (propagated-inputs
e3196755
LC
852 (list ;; Required by fcft.pc.
853 fontconfig
854 freetype
855 harfbuzz
856 pixman
857 tllist))
25e08f32
MB
858 (synopsis "Font loading and glyph rasterization library")
859 (description
860 "@code{fcft} is a small font loading and glyph rasterization library
861built on-top of FontConfig, FreeType2 and pixman.
862
863It can load and cache fonts from a fontconfig-formatted name string, e.g.
864@code{Monospace:size=12}, optionally with user configured fallback fonts.
865
866After a font has been loaded, you can rasterize glyphs. When doing so, the
867primary font is first considered. If it does not have the requested glyph,
868the user configured fallback fonts (if any) are considered. If none of the
869user configured fallback fonts has the requested glyph, the FontConfig
870generated list of fallback fonts are checked.")
871 ;; The code is distributed under the Expat license, but embeds Unicode
872 ;; data files carrying the Unicode license.
873 (license (list license:expat license:unicode))))
874
ad8aaf47
BD
875(define-public fontmanager
876 (package
877 (name "fontmanager")
cea62941 878 (version "0.8.7")
ad8aaf47
BD
879 (source
880 (origin
881 (method git-fetch)
882 (uri (git-reference
883 (url "https://github.com/FontManager/font-manager")
884 (commit version)))
885 (file-name (git-file-name name version))
886 (sha256
cea62941 887 (base32 "0nyda2a6vbzyz4sn9mmrr8bkifzxmmjp7x9a3c4s6n925ccy79cn"))))
ad8aaf47
BD
888 (build-system meson-build-system)
889 (arguments
890 `(#:glib-or-gtk? #t
891 #:build-type "release"
892 #:configure-flags
893 (list (string-append "-Dc_link_args=-Wl,-rpath="
894 (assoc-ref %outputs "out")
895 "/lib/font-manager"))))
896 (native-inputs
5581279f 897 `(("desktop-file-utils" ,desktop-file-utils)
ad8aaf47
BD
898 ("gettext" ,gettext-minimal)
899 ("glib" ,glib "bin")
900 ("gobject-introspection" ,gobject-introspection)
5581279f 901 ("pkg-config" ,pkg-config)
9295b911 902 ("python-wrapper" ,python-wrapper)
6aece4b9 903 ("vala" ,vala-0.52)
5581279f 904 ("yelp-tools" ,yelp-tools)))
ad8aaf47 905 (inputs
5581279f 906 `(("fonconfig" ,fontconfig)
ad8aaf47 907 ("freetype" ,freetype)
5581279f
BD
908 ("gtk+" ,gtk+)
909 ("json-glib" ,json-glib)
6aece4b9 910 ("libsoup" ,libsoup-minimal-2)
5581279f 911 ("sqlite" ,sqlite)
6aece4b9 912 ("webkitgtk" ,webkitgtk-with-libsoup2)))
ad8aaf47
BD
913 (home-page "https://fontmanager.github.io/")
914 (synopsis "Simple font management for GTK+ desktop environments")
915 (description "Font Manager is intended to provide a way for users to
916easily manage desktop fonts, without having to resort to command-line
917tools or editing configuration files by hand.
918While designed primarily with the GNOME Desktop Environment in mind, it should
919work well with other GTK+ desktop environments.")
920 (license license:gpl3+)))
cc51c03f
RJ
921
922(define-public fntsample
923 (package
924 (name "fntsample")
44d0acfe 925 (version "5.4")
cc51c03f 926 (source (origin
405b9ba0
EF
927 (method git-fetch)
928 (uri (git-reference
929 (url "https://github.com/eugmes/fntsample")
930 (commit (string-append "release/" version))))
931 (file-name (git-file-name name version))
cc51c03f
RJ
932 (sha256
933 (base32
44d0acfe 934 "0pcqqdriv6hq64zrqd9vhdd9p2vhimjnajcxdz10qnqgrkmm751v"))))
cc51c03f
RJ
935 (build-system cmake-build-system)
936 (arguments
937 `(#:tests? #f ; There are no tests.
938 #:configure-flags
939 (list (string-append
940 "-DUNICODE_BLOCKS=" (assoc-ref %build-inputs "unicode-blocks")))
941 #:phases
942 (modify-phases %standard-phases
943 (add-after 'install 'set-library-path
944 (lambda* (#:key inputs outputs #:allow-other-keys)
945 (let* ((out (assoc-ref outputs "out"))
946 (pdf-api2 (assoc-ref inputs "perl-pdf-api2"))
947 (intl (assoc-ref inputs "perl-libintl-perl"))
948 (perllib (string-append pdf-api2
949 "/lib/perl5/site_perl/"
950 ,(package-version perl)
951 ":" intl
952 "/lib/perl5/site_perl/"
953 ,(package-version perl))))
954 (wrap-program (string-append out "/bin/pdfoutline")
44d0acfe 955 `("PERL5LIB" ":" prefix (,perllib)))))))))
cc51c03f
RJ
956 (native-inputs
957 `(("pkg-config" ,pkg-config)
958 ("gettext" ,gettext-minimal)))
959 (inputs
960 `(("cairo" ,cairo)
961 ("fontconfig" ,fontconfig)
962 ("freetype" ,freetype)
963 ("glib" ,glib)
964 ("pango" ,pango)
965 ("perl-pdf-api2" ,perl-pdf-api2)
966 ("perl-libintl-perl" ,perl-libintl-perl)
967 ("unicode-blocks"
3e73beaf
TGR
968 ,(let ((version "14.0.0"))
969 (origin
970 (method url-fetch)
971 (uri (string-append "https://unicode.org/Public/"
972 version "/ucd/Blocks.txt"))
973 (file-name (string-append "unicode-blocks-" version ".txt"))
974 (sha256
975 (base32
976 "05vzgrvfp35mgxjgkm4wnxjjgzva8n6545i9jxd4pczpvvfp122r")))))))
cc51c03f
RJ
977 (home-page "https://github.com/eugmes/fntsample")
978 (synopsis "PDF and PostScript font samples generator")
979 (description "This package provides a tool that can be used to make font
980samples that show coverage of the font and are similar in appearance to
981Unicode Charts. It was developed for use with DejaVu Fonts project.")
982 (license license:gpl3+)))
a1797f32
NG
983
984(define-public libraqm
985 (package
986 (name "libraqm")
2c9e2587 987 (version "0.8.0")
a1797f32
NG
988 (source
989 (origin
999ef90a
NG
990 (method git-fetch)
991 (uri (git-reference
992 (url "https://github.com/HOST-Oman/libraqm")
993 (commit (string-append "v" version))))
994 (file-name (git-file-name name version))
a1797f32 995 (sha256
2c9e2587 996 (base32 "0qrdw67n14n0km2f8l0gk8scgj3ybz662s9x8jwj3rrj33nl2d1a"))))
999ef90a 997 (build-system meson-build-system)
a1797f32 998 (native-inputs
e3196755 999 (list gtk-doc/stable pkg-config python-wrapper))
a1797f32 1000 (inputs
8394619b 1001 (list freetype fribidi harfbuzz))
a1797f32
NG
1002 (home-page "https://github.com/HOST-Oman/libraqm")
1003 (synopsis "Library for complex text layout")
1004 (description
1005 "Raqm is a small library that encapsulates the logic for complex text
1006layout and provides a convenient API.
1007
1008It currently provides bidirectional text support (using FriBiDi),
1009shaping (using HarfBuzz), and proper script itemization. As a result, Raqm
1010can support most writing systems covered by Unicode.")
1011 (license license:expat)))
eee35fe3
JL
1012
1013(define-public lcdf-typetools
1014 (package
1015 (name "lcdf-typetools")
1016 (version "2.108")
1017 (source (origin
1018 (method git-fetch)
1019 (uri (git-reference
1020 (url "https://github.com/kohler/lcdf-typetools")
1021 (commit (string-append "v" version))))
1022 (file-name (git-file-name name version))
1023 (sha256
1024 (base32
1025 "0a6jqaqwq43ldjjjlnsh6mczs2la9363qav7v9fyrfzkfj8kw9ad"))))
1026 (build-system gnu-build-system)
1027 (arguments
1028 `(#:configure-flags
1029 ;; This is only provided by the monolithic texlive distribution.
1030 ;; FIXME: texlive-kpathsea doesn't come with the library and headers
1031 (list "--without-kpathsea")))
1032 (native-inputs
8394619b 1033 (list autoconf automake))
eee35fe3
JL
1034 (home-page "https://lcdf.org/type/")
1035 (synopsis "Multiple font manipulation tools")
1036 (description "LCDF Typetools comprises several programs for manipulating
1037PostScript Type 1, Type 1 Multiple Master, OpenType, and TrueType fonts.
1038These tools are cfftot1, mmafm, mmpfb, otfinfo, otftotfm, t1dotlessj, t1lint,
1039t1rawfm, t1reencode, t1testpage and ttftotype42.")
1040 (license license:gpl2+)))