~ruther/guix-local

c0b390ed72425bb0856b00b6826f89dc2978a525 — Marek Benc 11 years ago 38c55e5
gnu: Add mupdf.

* gnu/packages/pdf.scm (mupdf): New variable.
* gnu/packages/patches/mupdf-buildsystem-fix.patch: New file.
* gnu-system.am (dist_patch_DATA): Added the above patch.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
3 files changed, 137 insertions(+), 0 deletions(-)

M gnu-system.am
A gnu/packages/patches/mupdf-buildsystem-fix.patch
M gnu/packages/pdf.scm
M gnu-system.am => gnu-system.am +1 -0
@@ 372,6 372,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/mit-krb5-init-fix.patch			\
  gnu/packages/patches/mpc123-initialize-ao.patch		\
  gnu/packages/patches/module-init-tools-moduledir.patch	\
  gnu/packages/patches/mupdf-buildsystem-fix.patch		\
  gnu/packages/patches/nvi-assume-preserve-path.patch           \
  gnu/packages/patches/orpheus-cast-errors-and-includes.patch	\
  gnu/packages/patches/ots-no-include-missing-file.patch	\

A gnu/packages/patches/mupdf-buildsystem-fix.patch => gnu/packages/patches/mupdf-buildsystem-fix.patch +69 -0
@@ 0,0 1,69 @@
Since openjpeg doesn't seem to ship with a .pc file, provide an alternative.

--- a/ojp2_cppflags.sh	1970-01-01 01:00:00.000000000 +0100
+++ b/ojp2_cppflags.sh	2014-09-13 22:56:38.842418777 +0200
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# Return the preprocessor flags to link against openjpeg.
+
+cpppath=$(echo ${NIX_STORE}/*-openjpeg-*/include/openjpeg-*)
+
+echo -I$cpppath

--- a/ojp2_ldflags.sh	1970-01-01 01:00:00.000000000 +0100
+++ b/ojp2_ldflags.sh	2014-09-13 22:56:38.842418777 +0200
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# Return the linker flags to link against openjpeg.
+
+ldpath=$(echo ${NIX_STORE}/*-openjpeg-*/lib)
+
+echo -L$ldpath -lopenjp2

Make use of the above alternatives, compile with gcc.

--- a/Makerules	2014-09-14 09:13:40.729149860 +0200
+++ b/Makerules	2014-09-14 09:17:06.425156595 +0200
@@ -75,12 +75,14 @@
 
 SYS_FREETYPE_CFLAGS = $(shell pkg-config --cflags freetype2)
 SYS_FREETYPE_LIBS = $(shell pkg-config --libs freetype2)
-SYS_OPENJPEG_CFLAGS = $(shell pkg-config --cflags libopenjp2)
-SYS_OPENJPEG_LIBS = $(shell pkg-config --libs libopenjp2)
+SYS_OPENJPEG_CFLAGS = $(shell ./ojp2_cppflags.sh)
+SYS_OPENJPEG_LIBS = $(shell ./ojp2_ldflags.sh)
 SYS_JBIG2DEC_LIBS = -ljbig2dec
 SYS_JPEG_LIBS = -ljpeg
 SYS_ZLIB_LIBS = -lz
 
+CC = gcc
+
 endif
 
 # The following section is an example of how to simply do cross-compilation

Remove the -x11 from the built binaries, since X11 is implied on GNU. (This
might change when Wayland gets more popular)

--- a/Makefile	2014-06-10 17:09:28.000000000 +0200
+++ b/Makefile	2014-09-14 09:57:10.381235299 +0200
@@ -255,7 +255,7 @@
 	$(LINK_CMD)
 
 ifeq "$(HAVE_X11)" "yes"
-MUVIEW_X11 := $(OUT)/mupdf-x11
+MUVIEW_X11 := $(OUT)/mupdf
 MUVIEW_X11_OBJ := $(addprefix $(OUT)/platform/x11/, x11_main.o x11_image.o pdfapp.o)
 $(MUVIEW_X11_OBJ) : $(FITZ_HDR) $(PDF_HDR)
 $(MUVIEW_X11) : $(MUPDF_LIB) $(THIRD_LIBS)
@@ -263,7 +263,7 @@
 	$(LINK_CMD) $(X11_LIBS)
 
 ifeq "$(HAVE_CURL)" "yes"
-MUVIEW_X11_CURL := $(OUT)/mupdf-x11-curl
+MUVIEW_X11_CURL := $(OUT)/mupdf-curl
 MUVIEW_X11_CURL_OBJ := $(addprefix $(OUT)/platform/x11/curl/, x11_main.o x11_image.o pdfapp.o curl_stream.o)
 $(MUVIEW_X11_CURL_OBJ) : $(FITZ_HDR) $(PDF_HDR)
 $(MUVIEW_X11_CURL) : $(MUPDF_LIB) $(THIRD_LIBS) $(CURL_LIB)

M gnu/packages/pdf.scm => gnu/packages/pdf.scm +67 -0
@@ 35,6 35,7 @@
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages lua)
  #:use-module (gnu packages curl)
  #:use-module (srfi srfi-1))

(define-public poppler


@@ 159,3 160,69 @@ it easy to modify them and write the changes to disk.  It is primarily useful
for applications that wish to do lower level manipulation of PDF, such as
extracting content or merging files.")
    (license license:lgpl2.0+)))

(define-public mupdf
  (package
    (name "mupdf")
    (version "1.5")
    (source
      (origin
        (method url-fetch)
        (uri (string-append "http://mupdf.com/downloads/" name "-" version
                            "-source.tar.gz"))
        (sha256
          (base32 "0sl47zqf4c9fhs4h5zg046vixjmwgy4vhljhr5g4md733nash7z4"))
        (patches
          (list (search-patch "mupdf-buildsystem-fix.patch")))
        (modules '((guix build utils)))
        (snippet
          '(begin
            ;; Don't build the bundled-in third party libraries.
            (delete-file-recursively "thirdparty")

            ;; Make the scripts for finding openjpeg build details executable.
            (chmod "ojp2_cppflags.sh" #o0755)
            (chmod "ojp2_ldflags.sh" #o0755)))))

    (build-system gnu-build-system)
    (inputs
      `(("curl" ,curl)
        ("freetype" ,freetype)
        ("jbig2dec" ,jbig2dec)
        ("libjpeg" ,libjpeg)
        ("libx11" ,libx11)
        ("libxext" ,libxext)
        ("openjpeg" ,openjpeg)
        ("openssl" ,openssl)
        ("zlib" ,zlib)))
    (native-inputs
      `(("pkg-config" ,pkg-config)))
    (arguments
      ;; Trying to run `$ make check' results in a no rule fault.
      '(#:tests? #f

        #:modules ((guix build gnu-build-system)
                     (guix build utils)
                     (srfi srfi-1))
        #:phases (alist-replace
                   'build
                   (lambda _ (zero? (system* "make" "XCFLAGS=-fpic")))
                   (alist-replace
                     'install
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
                         (zero? (system* "make" (string-append "prefix=" out)
                                         "install"))))
                     (alist-delete 'configure %standard-phases)))))
    (home-page "http://mupdf.com")
    (synopsis "A lightweight PDF viewer and toolkit")
    (description
      "MuPDF is a C library that implements a PDF and XPS parsing and
rendering engine.  It is used primarily to render pages into bitmaps,
but also provides support for other operations such as searching and
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 (pdfdraw), examining the file structure
(pdfshow), and rewriting files (pdfclean).")
    (license license:agpl3+)))