summary refs log tree commit diff
path: root/gnu/packages/fontutils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/fontutils.scm')
-rw-r--r--gnu/packages/fontutils.scm165
1 files changed, 147 insertions, 18 deletions
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 257c7d4e37..3806d78b1e 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -138,16 +138,22 @@ them as it goes.")
 (define-public python-afdko
   (package
     (name "python-afdko")
-    (version "3.8.1")
+    (version "3.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "afdko" version))
        (sha256
-        (base32 "171r9f7n8fgz37dkcgpzj508lxfafcyzzx43ps12j1z2nk1sk905"))
+        (base32 "0k1204vykgx32saa495s1lgmz1dixcp8bjiv486imx77killvm02"))
        (modules '((guix build utils)))
        (snippet
         #~(begin
+            (substitute*
+                "tests/buildcff2vf_data/expected_output/SHSansJPVFTest.ttx"
+              ;; Adjust expected output to match newer fonttools.  Taken from:
+              ;; https://github.com/adobe-type-tools/afdko/commit/7c526390a10e
+              (("FDSelect format=\"3\"")
+               "FDSelect format=\"0\""))
             (with-directory-excursion "c/makeotf/lib/hotconv"
               ;; Delete ANTLR-generated code.
               (for-each delete-file
@@ -158,6 +164,27 @@ them as it goes.")
      (list
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'use-c++17
+            (lambda _
+              ;; ANTLR4 4.10 and later require C++ 17.
+              (substitute* "CMakeLists.txt"
+                (("CMAKE_CXX_STANDARD 11")
+                 "CMAKE_CXX_STANDARD 17"))))
+          (add-after 'unpack 'use-system-libxml2
+            (lambda _
+              ;; XXX: These horrifying substitutions revert this upstream
+              ;; PR: <https://github.com/adobe-type-tools/afdko/pull/1527>.
+              ;; Hopefully it's only temporary..!
+              (substitute* (find-files "." "^CMakeLists.txt$")
+                (("\\(\\(NOT \\$\\{LibXml2_FOUND\\}\\) OR \
+\"\\$\\{CMAKE_SYSTEM\\}\" MATCHES \"Linux\"\\)")
+                 "(NOT ${LibXml2_FOUND})")
+                (("\\(\\(\\$\\{LibXml2_FOUND\\}\\) AND \
+\\(NOT \"\\$\\{CMAKE_SYSTEM\\}\" MATCHES \"Linux\"\\)\\)")
+                 "(${LibXml2_FOUND})"))
+                (substitute* "cmake/ExternalLibXML2.cmake"
+                  (("set\\(LIBXML2_STATIC_INCLUDE_DIR")
+                   "set(LIBXML2_INCLUDE_DIR)"))))
           (add-after 'unpack 'patch-problematic-requirements
             (lambda _
               (substitute* "requirements.txt"
@@ -177,7 +204,8 @@ them as it goes.")
                  (format #f "include_directories(SYSTEM ~a)"
                          (search-input-directory inputs
                                                  "include/antlr4-runtime"))))
-              (substitute* "c/makeotf/lib/hotconv/CMakeLists.txt"
+              (substitute* '("c/makeotf/lib/hotconv/CMakeLists.txt"
+                             "c/makeotf/lib/cffread/CMakeLists.txt")
                 (("antlr4_static")
                  "antlr4-runtime"))))
           (add-after 'unpack 'regenerate-hotconv-grammar
@@ -198,7 +226,8 @@ them as it goes.")
             (lambda* (#:key tests? #:allow-other-keys)
               (when tests?
                 (setenv "HOME" "/tmp")
-                (invoke "pytest" "-vv"))))
+                (invoke "pytest" "-vv" "--dist" "loadfile" "-n"
+                        (number->string (parallel-job-count))))))
           (add-after 'check 'wrap
             (assoc-ref %standard-phases 'wrap))
           (add-before 'wrap 'wrap-PATH
@@ -216,11 +245,16 @@ them as it goes.")
      (list antlr4
            openjdk                      ;required by antlr4
            ninja
+           pkg-config
            python-pytest
+           python-pytest-xdist
            python-scikit-build
            python-setuptools-scm
            python-wheel))
-    (inputs (list java-antlr4-runtime-cpp `(,util-linux "lib")))
+    (inputs
+     (list java-antlr4-runtime-cpp
+           libxml2
+           `(,util-linux "lib")))
     (propagated-inputs
      (list psautohint
            python-booleanoperations
@@ -349,13 +383,13 @@ Kit for OpenType (AFDKO) @command{tx} tool.")
 (define-public python-compreffor
   (package
     (name "python-compreffor")
-    (version "0.5.1.post1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "compreffor" version))
        (sha256
-        (base32 "1r3wqd67qnz8p6irv68mvadqv1nklgzw53376iarw3pq4gxrma36"))))
+        (base32 "0r6vlxrm73j719f5q3n6sy737p2424n7qam52am83p55j0fb9h5f"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -405,13 +439,13 @@ converts any cubic curves to quadratic.  The most useful function is probably
 (define-public python-ufo2ft
   (package
     (name "python-ufo2ft")
-    (version "2.26.0")
+    (version "2.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ufo2ft" version))
        (sha256
-        (base32 "0a6iq5g6qdxj7nvip8nnf0mf8y5wmpd3wwq0dv7d4nm9bjrh0r6m"))))
+        (base32 "068hm62s1iphyg66w96vgiif6ahpcsaf8fr44rk6jdf71f6fyqd5"))))
     (build-system python-build-system)
     (native-inputs
      (list python-pytest python-pytest-runner python-setuptools-scm))
@@ -421,7 +455,7 @@ converts any cubic curves to quadratic.  The most useful function is probably
            python-compreffor
            python-cu2qu
            python-defcon
-           python-fonttools
+           python-fonttools-next
            python-skia-pathops
            python-ufolib2))
     (home-page "https://github.com/googlefonts/ufo2ft")
@@ -436,13 +470,13 @@ to generate OpenType font binaries from Unified Font Objects (UFOs).")
 (define-public python-fontmath
   (package
     (name "python-fontmath")
-    (version "0.9.1")
+    (version "0.9.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "fontMath" version ".zip"))
        (sha256
-        (base32 "001756zxn2386dm4svgqjgw5026hvyacxl09b2qlk7s06phpcphw"))))
+        (base32 "014407hpvqdx123g06i664qrfq86bf9l621x7jllpgqw3rqir2sc"))))
     (build-system python-build-system)
     (propagated-inputs (list python-fonttools))
     (native-inputs
@@ -509,13 +543,13 @@ implementing the pen protocol for manipulating glyphs.")
   (hidden-package
    (package
      (name "python-fontparts-bootstrap")
-     (version "0.10.4")
+     (version "0.10.8")
      (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "fontParts" version ".zip"))
         (sha256
-         (base32 "1ic453q86s5hsw8mxnclk1vr4qp69fd67gywhv23zqwz9a7kb7lh"))))
+         (base32 "0i5ww6yl9m74wnjd7gyvjkdh7m56haql4gv7lasmppdipay2209g"))))
      (build-system python-build-system)
      (propagated-inputs
       (list python-booleanoperations
@@ -540,6 +574,101 @@ process.  FontParts is the successor of RoboFab.")
      (alist-delete 'hidden?
                    (package-properties python-fontparts-bootstrap)))))
 
+(define-public python-glyphslib
+  (package
+    (name "python-glyphslib")
+    (version "6.0.7")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "glyphsLib" version))
+              (sha256
+               (base32
+                "0mkkwd09g76hvif603ij5aqicxh47zvhgyyd0pjcjmpdy6dr70yw"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'build
+            (lambda _
+              ;; The Zip format does not support pre-1980 time stamps.
+              (let ((circa-1980 (* 10 366 24 60 60)))
+                (setenv "SOURCE_DATE_EPOCH" (number->string circa-1980))
+                (invoke "python" "-m" "build" "--wheel" "--no-isolation" "."))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (setenv "GUIX_PYTHONPATH"
+                        (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
+                (invoke "pytest" "-vv"
+                        ;; These fail because the test data has not yet been
+                        ;; updated for newer FontTools:
+                        ;;   https://github.com/googlefonts/glyphsLib/issues/787
+                        ;; Re-enable for versions > 6.0.7.
+                        "--ignore=tests/builder/designspace_gen_test.py"
+                        "--ignore=tests/builder/interpolation_test.py"
+                        )))))))
+    (native-inputs
+     (list python-pypa-build
+           python-setuptools-scm
+           python-wheel
+
+           ;; For tests.
+           python-pytest
+           python-xmldiff))
+    (propagated-inputs
+     (list python-defcon
+           python-fonttools-next
+           python-openstep-plist
+           python-ufolib2
+           python-ufo2ft
+           python-ufonormalizer))
+    (home-page "https://github.com/googlefonts/glyphsLib")
+    (synopsis "Bridge Glyphs source files to UFOs")
+    (description
+     "This package provides a bridge from Glyphs source files (@file{.glyphs})
+to UFOs and DesignSpace files via @code{defcon} and @code{designspaceLib}.")
+    (license license:asl2.0)))
+
+(define-public python-glyphsets
+ (package
+  (name "python-glyphsets")
+  (version "0.5.2")
+  (source (origin
+            (method url-fetch)
+            (uri (pypi-uri "glyphsets" version))
+            (sha256
+             (base32
+              "1dc24i0hkd85gkkg3bqjhagjyw3xsqxazd86yh2l60c1wr5n9y6g"))))
+  (build-system python-build-system)
+  (arguments
+   (list #:phases
+         #~(modify-phases %standard-phases
+             (add-after 'unpack 'loosen-version-constraints
+               (lambda _
+                 (substitute* "setup.py"
+                   (("setuptools_scm>=4,<6\\.1")
+                    "setuptools_scm>=4"))))
+             (replace 'check
+               (lambda* (#:key tests? #:allow-other-keys)
+                 (when tests?
+                   (invoke "pytest" "-vv" "tests/testglyphdata.py")
+                   (invoke "pytest" "-vv" "tests/testusage.py")))))))
+  (native-inputs (list python-pytest python-setuptools-scm))
+  (propagated-inputs
+   (list python-defcon python-fonttools python-glyphslib))
+  (home-page "https://github.com/googlefonts/glyphsets/")
+  (synopsis "Evaluate coverage of glyph sets")
+  (description
+   "This package provides an API with data about glyph sets for many
+different scripts and languages.")
+  (license license:asl2.0)))
+
 (define-public python-opentype-sanitizer
   (package
     (name "python-opentype-sanitizer")
@@ -652,7 +781,7 @@ suite of the @code{psautohint} package.")
             (lambda* (#:key tests? #:allow-other-keys)
               (when tests?
                 (invoke "pytest" "-vv")))))))
-    (propagated-inputs (list python-fonttools))
+    (propagated-inputs (list python-fonttools-next))
     (native-inputs
      (list psautohint-font-data
            python-fs
@@ -1493,7 +1622,7 @@ generate bitmaps.")
     (propagated-inputs
      (list python-attrs
            python-cattrs
-           python-fonttools))
+           python-fonttools-next))
     (home-page "https://github.com/daltonmaag/statmake")
     (synopsis "Apply OpenType STAT information to a variable font")
     (description
@@ -1556,13 +1685,13 @@ API-compatible with defcon.")
 (define-public python-defcon-bootstrap
   (package
     (name "python-defcon-bootstrap")
-    (version "0.10.0")
+    (version "0.10.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "defcon" version ".zip"))
        (sha256
-        (base32 "0g0bjwzdj6sskyh8snbxsxza3czdmvb807qv38mizx631cm8c2d0"))))
+        (base32 "0i1a306b8c42dpbplwxj6ili2aac5lwq2ir6r1jswicysvk9dqxf"))))
     (build-system python-build-system)
     (propagated-inputs (list python-fontpens-bootstrap python-fonttools-full))
     (native-inputs