summary refs log tree commit diff
path: root/gnu/packages/pdf.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/pdf.scm')
-rw-r--r--gnu/packages/pdf.scm305
1 files changed, 151 insertions, 154 deletions
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 4d3bc76473..5645457411 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -13,14 +13,14 @@
 ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017, 2018 Rene Saavedra <pacoon@protonmail.com>
-;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019 Ben Sturmfels <ben@sturm.com.au>
 ;;; Copyright © 2019,2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -89,6 +89,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -716,63 +717,92 @@ for applications that wish to do lower level manipulation of PDF, such as
 extracting content or merging files.")
     (license license:lgpl2.0+)))
 
+(define-public python-pydyf
+  (package
+    (name "python-pydyf")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pydyf" version))
+       (sha256
+        (base32 "0b30g3hhxw1bg18r9ax85i1dkg8vy1y1wzas0bg0bxblh7j5sbqy"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-vv" "-c" "/dev/null")))))))
+    (propagated-inputs (list python-pillow))
+    (native-inputs (list ghostscript python-pytest))
+    (home-page "https://github.com/CourtBouillon/pydyf")
+    (synopsis "Low-level PDF generator")
+    (description "@code{pydyf} is a low-level PDF generator written in Python
+and based on PDF specification 1.7.")
+    (license license:bsd-3)))
+
 (define-public mupdf
   (package
     (name "mupdf")
-    (version "1.19.0")
+    (version "1.19.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://mupdf.com/downloads/archive/"
                            "mupdf-" version "-source.tar.xz"))
        (sha256
-        (base32 "1i98xqgnzp168hnnhradl8658qsif06wlbvcglz0mmh8wi1rkwrq"))
+        (base32 "0gl0wf16m1cafs20h3v1f4ysf7zlbijjyd6s1r1krwvlzriwdsmm"))
        (modules '((guix build utils)))
        (snippet
-        '(begin
-           ;; Remove bundled software.
-           (let* ((keep (list "extract"
-                              "lcms2")) ; different from our lcms2 package
-                  (from "thirdparty")
-                  (kept (string-append from "~temp")))
-             (mkdir-p kept)
-             (for-each (lambda (file) (rename-file (string-append from "/" file)
-                                              (string-append kept "/" file)))
-                       keep)
-             (delete-file-recursively from)
-             (rename-file kept from))
-           #t))))
+        #~(begin
+            ;; Remove bundled software.
+            (let* ((keep (list "extract"
+                               "lcms2")) ; different from our lcms2 package
+                   (from "thirdparty")
+                   (kept (string-append from "~temp")))
+              (mkdir-p kept)
+              (for-each (lambda (file)
+                          (rename-file (string-append from "/" file)
+                                       (string-append kept "/" file)))
+                        keep)
+              (delete-file-recursively from)
+              (rename-file kept from))))))
     (build-system gnu-build-system)
     (inputs
-      `(("curl" ,curl)
-        ("freeglut" ,freeglut)
-        ("freetype" ,freetype)
-        ("gumbo-parser" ,gumbo-parser)
-        ("harfbuzz" ,harfbuzz)
-        ("jbig2dec" ,jbig2dec)
-        ("libjpeg" ,libjpeg-turbo)
-        ("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("mujs" ,mujs)
-        ("openjpeg" ,openjpeg)
-        ("openssl" ,openssl)
-        ("zlib" ,zlib)))
+     (list curl
+           freeglut
+           freetype
+           gumbo-parser
+           harfbuzz
+           jbig2dec
+           libjpeg-turbo
+           libx11
+           libxext
+           mujs
+           openjpeg
+           openssl
+           zlib))
     (native-inputs
-      (list pkg-config))
+     (list pkg-config))
     (arguments
-      `(#:tests? #f                     ; no check target
-        #:make-flags (list "verbose=yes"
-                           (string-append "CC=" ,(cc-for-target))
-                           "XCFLAGS=-fpic"
-                           "USE_SYSTEM_LIBS=yes"
-                           "USE_SYSTEM_MUJS=yes"
-                           "shared=yes"
-                           ;; Even with the linkage patch we must fix RUNPATH.
-                           (string-append "LDFLAGS=-Wl,-rpath="
-                                          (assoc-ref %outputs "out") "/lib")
-                           (string-append "prefix=" (assoc-ref %outputs "out")))
-        #:phases (modify-phases %standard-phases
-                   (delete 'configure)))) ; no configure script
+     (list
+       #:tests? #f                      ; no check target
+       #:make-flags
+       #~(list "verbose=yes"
+               (string-append "CC=" #$(cc-for-target))
+               "XCFLAGS=-fpic"
+               "USE_SYSTEM_LIBS=yes"
+               "USE_SYSTEM_MUJS=yes"
+               "shared=yes"
+               ;; Even with the linkage patch we must fix RUNPATH.
+               (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
+               (string-append "prefix=" #$output))
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'configure))))      ; no configure script
     (home-page "https://mupdf.com")
     (synopsis "Lightweight PDF viewer and toolkit")
     (description
@@ -1032,13 +1062,10 @@ of rich PDF documents, and also creation of charts in a variety of bitmap and
 vector formats.")
     (license license:bsd-3)))
 
-(define-public python2-reportlab
-  (package-with-python2 python-reportlab))
-
 (define-public impressive
   (package
     (name "impressive")
-    (version "0.12.1")
+    (version "0.13.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1046,36 +1073,33 @@ vector formats.")
                     version "/Impressive-" version ".tar.gz"))
               (sha256
                (base32
-                "1r7ihv41awnlnlry1kymb8fka053wdhzibfwcarn78rr3vs338vl"))))
+                "0d1d2jxfl9vmy4swcdz660xd4wx91w1i3n07k522pccapwxig294"))))
     (build-system python-build-system)
-
-    ;; TODO: Add dependency on pdftk.
-    (inputs (list python2-pygame python2-pillow sdl xpdf))
-
     (arguments
-     `(#:python ,python-2
-       #:phases (modify-phases %standard-phases
-                  (delete 'build)
-                  (delete 'configure)
-                  (delete 'check)
-                  (replace 'install
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      ;; There's no 'setup.py' so install things manually.
-                      (let* ((out  (assoc-ref outputs "out"))
-                             (bin  (string-append out "/bin"))
-                             (man1 (string-append out "/share/man/man1"))
-                             (sdl  (assoc-ref inputs "sdl"))
-                             (xpdf (assoc-ref inputs "xpdf")))
-                        (mkdir-p bin)
-                        (copy-file "impressive.py"
-                                   (string-append bin "/impressive"))
-                        (wrap-program (string-append bin "/impressive")
-                          `("LIBRARY_PATH" ":" prefix ;for ctypes
-                            (,(string-append sdl "/lib")))
-                          `("PATH" ":" prefix     ;for pdftoppm
-                            (,(string-append xpdf "/bin"))))
-                        (install-file "impressive.1" man1)
-                        #t))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'build)
+          (delete 'configure)
+          (delete 'check)
+          (replace 'install
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; There's no 'setup.py' so install things manually.
+              (let* ((bin  (string-append #$output "/bin"))
+                     (impressive (string-append bin "/impressive"))
+                     (man1 (string-append #$output "/share/man/man1")))
+                (mkdir-p bin)
+                (copy-file "impressive.py" impressive)
+                (chmod impressive #o755)
+                (wrap-program (string-append bin "/impressive")
+                  `("LIBRARY_PATH" ":" prefix ;for ctypes
+                    (,(string-append #$(this-package-input "sdl")
+                                     "/lib")))
+                  `("PATH" ":" prefix   ;for pdftoppm
+                    (,(search-input-file inputs "bin/xpdf"))))
+                (install-file "impressive.1" man1)))))))
+    ;; TODO: Add dependency on pdftk.
+    (inputs (list python-pygame python-pillow sdl xpdf))
     (home-page "http://impressive.sourceforge.net")
     (synopsis "PDF presentation tool with visual effects")
     (description
@@ -1088,13 +1112,13 @@ the PDF pages.")
 (define-public img2pdf
   (package
     (name "img2pdf")
-    (version "0.4.3")
+    (version "0.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "img2pdf" version))
        (sha256
-        (base32 "17z0bn8kihiyqjd1m5jr80m7ry06l1qn0l8v918xg5gs7q2calcf"))))
+        (base32 "0g3rpq68y5phnlgxrqn39k10j9nmgksg6m5ic8wgs8v5cjlrij4f"))))
     (build-system python-build-system)
     (propagated-inputs
      (list python-pikepdf python-pillow
@@ -1229,31 +1253,6 @@ manipulation in memory.  It is therefore a useful tool for websites that
 manage or manipulate PDFs.")
     (license license:bsd-3)))
 
-(define-public python2-pypdf2
-  (package-with-python2 python-pypdf2))
-
-(define-public python2-pypdf
-  (package
-    (name "python2-pypdf")
-    (version "1.13")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "pyPdf" version))
-              (sha256
-               (base32
-                "0fqfvamir7k41w84c73rghzkiv891gdr17q5iz4hgbf6r71y9v9s"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:tests? #f  ; no tests
-       #:python ,python-2))
-    (home-page "http://pybrary.net/pyPdf/")
-    (synopsis "Pure Python PDF toolkit")
-    (description "PyPDF2 is a pure Python PDF toolkit.
-
-Note: This module isn't maintained anymore.  For new projects please use
-python-pypdf2 instead.")
-    (license license:bsd-3)))
-
 (define-public pdfarranger
   (package
     (name "pdfarranger")
@@ -1467,77 +1466,75 @@ manipulating PDF documents from the command line.  It supports
 (define-public weasyprint
   (package
     (name "weasyprint")
-    (version "52.1")
+    (version "54.3")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/FelixSchwarz/WeasyPrint")
+             (url "https://github.com/Kozea/WeasyPrint")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0rcj9yah3bp6bbvkmny3w4csx4l5v49lc7mrk29g0x77qnwswjy7"))))
+         "0cn8gpgyic6pmrnhp0540nbgplpsd5aybi7k89anz6m1sshgjzgs"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-library-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((fontconfig (assoc-ref inputs "fontconfig"))
-                   (glib (assoc-ref inputs "glib"))
-                   (pango (assoc-ref inputs "pango"))
-                   (pangoft2 (assoc-ref inputs "pangoft2")))
-               (substitute* "weasyprint/fonts.py"
-                 (("'fontconfig'")
-                  (format #f "'~a/lib/libfontconfig.so'" fontconfig))
-                 (("'pangoft2-1.0'")
-                  (format #f "'~a/lib/libpangoft2-1.0.so'" pango)))
-               (substitute* "weasyprint/text.py"
-                 (("'gobject-2.0'")
-                  (format #f "'~a/lib/libgobject-2.0.so'" glib))
-                 (("'pango-1.0'")
-                  (format #f "'~a/lib/libpango-1.0.so'" pango))
-                 (("'pangocairo-1.0'")
-                  (format #f "'~a/lib/libpangocairo-1.0.so'" pango)))
-               #t)))
-         (add-after 'unpack 'disable-linters
-           ;; Their check fails; none of our business.
-           (lambda _
-             (substitute* "setup.cfg"
-               ((".*pytest-flake8.*") "")
-               ((".*pytest-isort.*") "")
-               (("--flake8") "")
-               (("--isort") ""))
-             #t))
-         (add-before 'check 'register-dejavu-font
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; TODO: fix FreeType so that fonts found in XDG_DATA_DIRS are
-             ;; honored.
-             (let* ((HOME "/tmp")
-                    (dejavu (assoc-ref inputs "font-dejavu"))
-                    (fonts-dir (string-append HOME "/.fonts")))
-               (setenv "HOME" HOME)
-               (mkdir-p fonts-dir)
-               (symlink (string-append dejavu "/share/fonts/truetype")
-                        (string-append fonts-dir "/truetype"))
-               (invoke "fc-cache" "-rv")))))))
-    (inputs
-     `(("fontconfig" ,fontconfig)
-       ("glib" ,glib)
-       ("pango" ,pango)))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-library-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "weasyprint/text/ffi.py"
+                (("'gobject-2.0-0'")
+                 (format #f "~s"
+                         (search-input-file inputs "lib/libgobject-2.0.so")))
+                (("'pango-1.0-0'")
+                 (format #f "~s"
+                         (search-input-file inputs "lib/libpango-1.0.so")))
+                (("'harfbuzz'")
+                 (format #f "~s"
+                         (search-input-file inputs "lib/libharfbuzz.so")))
+                (("'fontconfig-1'")
+                 (format #f "~s"
+                         (search-input-file inputs "lib/libfontconfig.so")))
+                (("'pangoft2-1.0-0'")
+                 (format #f "~s"
+                         (search-input-file inputs
+                                            "lib/libpangoft2-1.0.so"))))))
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-vv" "-c" "/dev/null"
+                        "-n" (number->string (parallel-job-count))))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (inputs (list fontconfig glib harfbuzz pango))
     (propagated-inputs
      (list gdk-pixbuf
            python-cairocffi
            python-cairosvg
            python-cffi
            python-cssselect2
+           python-fonttools-full
            python-html5lib
+           python-pillow
+           python-pydyf
            python-pyphen
            python-tinycss2))
     (native-inputs
-     (list font-dejavu ;tests depend on it
-           python-pytest-cov python-pytest-runner))
+     (list font-dejavu                  ;tests depend on it
+           ghostscript
+           python-flit-core
+           python-pypa-build
+           python-pytest
+           python-pytest-xdist))
     (home-page "https://weasyprint.org/")
     (synopsis "Document factory for creating PDF files from HTML")
     (description "WeasyPrint helps web developers to create PDF documents.  It