gnu: podofo: Add patch to fix build.
[jackhill/guix/guix.git] / gnu / packages / pdf.scm
index 067b406..b89d49f 100644 (file)
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
@@ -34,6 +34,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
@@ -58,6 +59,7 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
 (define-public poppler
   (package
    (name "poppler")
-   (version "0.63.0")
+   (replacement poppler/fixed)
+   (version "0.68.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://poppler.freedesktop.org/poppler-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "04d1z1ygyb3llzc6s6c99wxafvljj2sc5b76djif34f7mzfqmk17"))))
+              "0n0f7mv24lzv9p3dlzakpdhqg7ygcvl6l40grcz95xldzgq083gr"))))
    (build-system cmake-build-system)
    ;; FIXME:
    ;;  use libcurl:        no
    (inputs `(("fontconfig" ,fontconfig)
              ("freetype" ,freetype)
-             ("libjpeg" ,libjpeg)
+             ("libjpeg" ,libjpeg-turbo)
              ("libpng" ,libpng)
              ("libtiff" ,libtiff)
              ("lcms" ,lcms)
              ;; GLib.  But of course, that Cairo must not depend on Poppler.
              ("cairo" ,(package (inherit cairo)
                          (inputs (alist-delete "poppler"
-                                               (package-inputs cairo)))))
-             ("glib" ,glib)))
+                                               (package-inputs cairo)))))))
+   (propagated-inputs
+    ;; As per poppler-cairo and poppler-glib.pc.
+    ;; XXX: Ideally we'd propagate Cairo too, but that would require a
+    ;; different solution to the circular dependency mentioned above.
+    `(("glib" ,glib)))
    (native-inputs
       `(("pkg-config" ,pkg-config)
         ("glib" ,glib "bin")                      ; glib-mkenums, etc.
    (license license:gpl2+)
    (home-page "https://poppler.freedesktop.org/")))
 
+(define poppler/fixed
+  (package
+    (inherit poppler)
+    (source (origin
+              (inherit (package-source poppler))
+              (patches (append (origin-patches (package-source poppler))
+                               (search-patches "poppler-CVE-2018-19149.patch")))))))
+
 (define-public poppler-data
   (package
     (name "poppler-data")
@@ -156,56 +171,19 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
                    license:gpl2))))
 
 (define-public poppler-qt4
-  (package (inherit poppler)
+  (package/inherit poppler
    (name "poppler-qt4")
    (inputs `(("qt-4" ,qt-4)
              ,@(package-inputs poppler)))
    (synopsis "Qt4 frontend for the Poppler PDF rendering library")))
 
 (define-public poppler-qt5
-  (package (inherit poppler)
+  (package/inherit poppler
    (name "poppler-qt5")
    (inputs `(("qtbase" ,qtbase)
              ,@(package-inputs poppler)))
    (synopsis "Qt5 frontend for the Poppler PDF rendering library")))
 
-(define-public python-poppler-qt4
-  (package
-    (name "python-poppler-qt4")
-    (version "0.24.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://pypi.python.org/packages/source/p"
-                            "/python-poppler-qt4/python-poppler-qt4-"
-                            version ".tar.gz"))
-        (sha256
-         (base32
-          "0x63niylkk4q3h3ay8zrk3m1xiik0x3hlr4gvj7kswx48qi1vb99"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after
-          'unpack 'patch-poppler-include-paths
-          (lambda _
-            (substitute* (find-files "." "poppler-.*\\.sip")
-              (("qt4/poppler-.*\\.h" header)
-               (string-append "poppler/" header)))
-            #t)))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("python-sip" ,python-sip)
-       ("python-pyqt-4" ,python-pyqt-4)
-       ("poppler-qt4" ,poppler-qt4)))
-    (home-page "https://pypi.python.org/pypi/python-poppler-qt4")
-    (synopsis "Python bindings for Poppler-Qt4")
-    (description
-     "This package provides Python bindings for the Qt4 interface of the
-Poppler PDF rendering library.")
-    (license license:lgpl2.1+)))
-
 (define-public python-poppler-qt5
   (package
     (name "python-poppler-qt5")
@@ -258,26 +236,23 @@ Poppler PDF rendering library.")
    (name "libharu")
    (version "2.3.0")
    (source (origin
-             (method url-fetch)
-             (uri (string-append "https://github.com/libharu/libharu/archive/"
-                                 "RELEASE_"
-                                 (string-join (string-split version #\.) "_")
-                                 ".tar.gz"))
-             (file-name (string-append name "-" version ".tar.gz"))
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/libharu/libharu.git")
+                   (commit (string-append
+                            "RELEASE_"
+                            (string-join (string-split version #\.) "_")))))
+             (file-name (git-file-name name version))
              (sha256
               (base32
-               "1lm4v539y9cb1lvbq387j57sy7yxda3yv8b1pk8m6zazbp66i7lg"))))
+               "15s9hswnl3qqi7yh29jyrg0hma2n99haxznvcywmsp8kjqlyg75q"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags
       (list (string-append "--with-zlib="
                            (assoc-ref %build-inputs "zlib"))
             (string-append "--with-png="
-                           (assoc-ref %build-inputs "libpng")))
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'autogen
-          (lambda _ (zero? (system* "autoreconf" "-vif")))))))
+                           (assoc-ref %build-inputs "libpng")))))
    (inputs
     `(("zlib" ,zlib)
       ("libpng" ,libpng)))
@@ -450,17 +425,15 @@ using the DjVuLibre library.")
 (define-public zathura-pdf-mupdf
   (package
     (name "zathura-pdf-mupdf")
-    (version "0.3.3")
+    (version "0.3.4")
     (source (origin
               (method url-fetch)
               (uri
                (string-append "https://pwmt.org/projects/zathura-pdf-mupdf"
                               "/download/zathura-pdf-mupdf-" version ".tar.xz"))
-              (patches
-               (search-patches "zathura-pdf-mupdf-link-to-jpeg-libraries.patch"))
               (sha256
                (base32
-                "1zbdqimav4wfgimpy3nfzl10qj7vyv23rdy2z5z7z93jwbp2rc2j"))))
+                "166d5nz47ixzwj4pixsd5fd9qvjf5v34cdqi3p72vr23pswk2hyn"))))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
      `(("jbig2dec" ,jbig2dec)
@@ -472,17 +445,9 @@ using the DjVuLibre library.")
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not contain tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-plugin-directory
-           ;; Something of a regression in 0.3.3: the new Meson build system
-           ;; now hard-codes an incorrect plugin directory.  Fix it.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "meson.build"
-               (("(install_dir:).*" _ key)
-                (string-append key
-                               "'" (assoc-ref outputs "out") "/lib/zathura'\n")))
-             #t)))))
+       #:configure-flags (list (string-append "-Dplugindir="
+                                              (assoc-ref %outputs "out")
+                                              "/lib/zathura"))))
     (home-page "https://pwmt.org/projects/zathura-pdf-mupdf/")
     (synopsis "PDF support for zathura (mupdf backend)")
     (description "The zathura-pdf-mupdf plugin adds PDF support to zathura
@@ -528,7 +493,7 @@ by using the poppler rendering engine.")
 (define-public zathura
   (package
     (name "zathura")
-    (version "0.3.9")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
               (uri
@@ -536,7 +501,7 @@ by using the poppler rendering engine.")
                               version ".tar.xz"))
               (sha256
                (base32
-                "0z09kz92a2n8qqv3cy8bx5j5k612g2f9mmh4szqlc7yvi39aax1g"))
+                "1j0yah09adv3bsjhhbqra5lambal32svk8fxmf89wwmcqrcr4qma"))
               (patches (search-patches
                         "zathura-plugindir-environment-variable.patch"))))
     (native-inputs `(("pkg-config" ,pkg-config)
@@ -548,7 +513,7 @@ by using the poppler rendering engine.")
 
                      ;; For tests.
                      ("check" ,check)
-                     ("xorg-server" ,xorg-server-1.19.3)))
+                     ("xorg-server" ,xorg-server-for-tests)))
     (inputs `(("sqlite" ,sqlite)))
     ;; Listed in 'Requires.private' of 'zathura.pc'.
     (propagated-inputs `(("cairo" ,cairo)
@@ -585,23 +550,27 @@ interaction.")
 (define-public podofo
   (package
     (name "podofo")
-    (version "0.9.5")
+    (version "0.9.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/podofo/podofo/" version
                                   "/podofo-" version ".tar.gz"))
               (sha256
                (base32
-                "012kgfx5j5n6w4zkc1d290d2cwjk60jhzsjlr2x19g3yi75q2jc5"))))
+                "0wj0y4zcmj4q79wrn3vv3xq4bb0vhhxs8yifafwy9f2sjm83c5p9"))
+              (patches (search-patches "podofo-cmake-3.12.patch"))))
     (build-system cmake-build-system)
-    (inputs                                      ; TODO: Add cppunit for tests
-     `(("lua" ,lua-5.1)
-       ("libpng" ,libpng)
-       ("openssl" ,openssl)
-       ("fontconfig" ,fontconfig)
+    (native-inputs
+     `(("cppunit" ,cppunit)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libjpeg" ,libjpeg)
        ("libtiff" ,libtiff)
-       ("libjpeg" ,libjpeg-8)
+       ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
+       ("libpng" ,libpng)
+       ("lua" ,lua-5.1)
+       ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (arguments
      `(#:configure-flags '("-DPODOFO_BUILD_SHARED=ON"
@@ -628,7 +597,7 @@ extracting content or merging files.")
 (define-public mupdf
   (package
     (name "mupdf")
-    (version "1.13.0")
+    (version "1.14.0")
     (source
       (origin
         (method url-fetch)
@@ -636,9 +605,17 @@ extracting content or merging files.")
                             name "-" version "-source.tar.xz"))
         (sha256
          (base32
-          "0129k92bav692l6lyw10ryldx7h2f9khjpgnp3f3n4fdsph9hrkl"))
+          "1psnz02w5p7wc1s1ma7vvjmkjfy641xvsh9ykaqzkk84dflnjgk0"))
         (modules '((guix build utils)))
-        (snippet '(begin (delete-file-recursively "thirdparty") #t))))
+        (snippet
+         ;; We keep lcms2 since it is different than our lcms.
+         '(begin
+            (for-each
+              (lambda (dir)
+                (delete-file-recursively (string-append "thirdparty/" dir)))
+              '("curl" "freeglut" "freetype" "harfbuzz" "jbig2dec"
+                "libjpeg" "mujs" "openjpeg" "zlib"))
+                #t))))
     (build-system gnu-build-system)
     (inputs
       `(("curl" ,curl)
@@ -659,6 +636,8 @@ extracting content or merging files.")
       '(#:tests? #f ; no check target
         #:make-flags (list "CC=gcc"
                            "XCFLAGS=-fpic"
+                           "USE_SYSTEM_LIBS=yes"
+                           "USE_SYSTEM_MUJS=yes"
                            (string-append "prefix=" (assoc-ref %outputs "out")))
         #:phases (modify-phases %standard-phases
                   (delete 'configure))))
@@ -673,19 +652,23 @@ listing the table of contents and hyperlinks.
 The library ships with a rudimentary X11 viewer, and a set of command
 line tools for batch rendering @command{pdfdraw}, rewriting files
 @command{pdfclean}, and examining the file structure @command{pdfshow}.")
-    (license license:agpl3+)))
+    (license (list license:agpl3+
+                   license:bsd-3 ; resources/cmaps
+                   license:x11 ; thirdparty/lcms2
+                   license:silofl1.1 ; resources/fonts/{han,noto,sil,urw}
+                   license:asl2.0)))) ; resources/fonts/droid
 
 (define-public qpdf
   (package
    (name "qpdf")
-   (version "6.0.0")
+   (version "8.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://sourceforge/qpdf/qpdf/" version
                                 "/qpdf-" version ".tar.gz"))
             (sha256
              (base32
-              "0csj2p2gkxrc0rk8ykymlsdgfas96vzf1dip3y1x7z1q9plwgzd9"))
+              "1jdb0jj72fjdp6xip4m7yz31r5x13zs7h4smnxsycgw3vbmx6igl"))
             (modules '((guix build utils)))
             (snippet
              ;; Replace shebang with the bi-lingual shell/Perl trick to remove
@@ -717,9 +700,9 @@ eval '(exit $?0)' && eval 'exec perl -wS \"$0\" ${1+\"$@\"}'
     `(("pkg-config" ,pkg-config)
       ("perl" ,perl)))
    (propagated-inputs
-    `(("pcre" ,pcre)))
-   (inputs
-    `(("zlib" ,zlib)))
+    ;; In Requires.private of libqpdf.pc.
+    `(("libjpeg-turbo" ,libjpeg-turbo)
+      ("zlib" ,zlib)))
    (synopsis "Command-line tools and library for transforming PDF files")
    (description
     "QPDF is a command-line program that does structural, content-preserving
@@ -727,7 +710,9 @@ transformations on PDF files.  It could have been called something like
 pdf-to-pdf.  It includes support for merging and splitting PDFs and to
 manipulate the list of pages in a PDF file.  It is not a PDF viewer or a
 program capable of converting PDF into other formats.")
-   (license license:clarified-artistic)
+   ;; Prior to the 7.0 release, QPDF was licensed under Artistic 2.0.
+   ;; Users can still choose to use the old license at their option.
+   (license (list license:asl2.0 license:clarified-artistic))
    (home-page "http://qpdf.sourceforge.net/")))
 
 (define-public xournal
@@ -937,7 +922,7 @@ converter using the Poppler and Cairo libraries.")
             #t))
          (replace 'check
            (lambda _
-             (zero? (system* "python" "-m" "unittest" "Tests.tests")))))))
+             (invoke "python" "-m" "unittest" "Tests.tests"))))))
     (home-page "http://mstamy2.github.com/PyPDF2")
     (synopsis "Pure Python PDF toolkit")
     (description "PyPDF2 is a pure Python PDF library capable of:
@@ -1040,3 +1025,41 @@ Support some GNU grep options as file name output, page number output,
 optional case insensitivity, count occurrences, color highlights and search in
 multiple files.")
     (license license:gpl2+)))
+
+(define-public pdfpc
+  (package
+    (name "pdfpc")
+    (version "4.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/pdfpc/pdfpc.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1rmsrpf5vlqhnyyrhq8apndny88ld2qvfjx6258653pqbimv7mx5"))))
+    (build-system cmake-build-system)
+    (arguments '(#:tests? #f))          ; no test target
+    (inputs
+     `(("cairo" ,cairo)
+       ("gtk+" ,gtk+)
+       ("gstreamer" ,gstreamer)
+       ("gst-plugins-base" ,gst-plugins-base)
+       ("libgee" ,libgee)
+       ("poppler" ,poppler)
+       ("pango" ,pango)
+       ("vala" ,vala)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://pdfpc.github.io/")
+    (synopsis "Presenter console with multi-monitor support for PDF files")
+    (description
+     "pdfpc is a presentation viewer application which uses multi-monitor
+output to provide meta information to the speaker during the presentation.  It
+is able to show a normal presentation window on one screen, while showing a
+more sophisticated overview on the other one providing information like a
+picture of the next slide, as well as the left over time till the end of the
+presentation.  The input files processed by pdfpc are PDF documents.")
+    (license license:gpl2+)))