all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Alex Kost <alezost@gmail.com>
To: Ricardo Wurmus <rekado@elephly.net>
Cc: Guix-devel <guix-devel@gnu.org>
Subject: Re: [PATCH] Add Emacs PDF tools
Date: Mon, 06 Jul 2015 16:40:39 +0300	[thread overview]
Message-ID: <87twthflpk.fsf@gmail.com> (raw)
In-Reply-To: <878uaujxiu.fsf@elephly.net> (Ricardo Wurmus's message of "Sun, 05 Jul 2015 19:59:37 +0200")

[-- Attachment #1: Type: text/plain, Size: 3166 bytes --]

Ricardo Wurmus (2015-07-05 20:59 +0300) wrote:

Thank you very much for packaging it!

[...]
> +(define-public emacs-pdf-tools
> +  (package
> +    (name "emacs-pdf-tools")
> +    (version "0.60")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (string-append
> +                    "https://github.com/politza/pdf-tools/archive/v"
> +                    version ".tar.gz"))
> +              (file-name (string-append name "-" version ".tar.gz"))
> +              (sha256
> +               (base32
> +                "1y8k5n2jbyaxby0j6f4m9xbm0ddpmbkrfj6rp6ll5sb97lcg3vrx"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     `(#:tests? #f ; there are no tests

Actually there are tests, but I see the problem you faced.  There is
top-level Makefile which takes care of elisp files (compiling, testing)
and runs autogen, configure, etc. in the "server" subdir.  So you chose
to move to this subdir and do a usual build process there, and to handle
elisp files manually.

Perhaps there is a way to get a benefit from the Makefile as well to
byte-compile elisp files and to perform tests.  (It's a question for a
more experienced packager; I don't know the answer)

> +       #:phases
> +       (modify-phases %standard-phases
> +         (add-after 'unpack 'enter-dir (lambda _ (chdir "server") #t))
> +         (add-before
> +          'configure 'autogen
> +          (lambda _
> +            (zero? (system* "bash" "autogen.sh"))))
> +         (add-after
> +          'install 'install-lisp
> +          (lambda* (#:key outputs #:allow-other-keys)
> +            (let ((target (string-append (assoc-ref outputs "out")
> +                                         "/share/emacs/site-lisp/")))
> +              (mkdir-p target)
> +              (for-each
> +               (lambda (file)
> +                 (copy-file file (string-append target (basename file))))
> +               (find-files "../lisp" "^(pdf|tab).*\\.elc?"))
> +
> +              ;; Set path to epdfinfo program
> +              (substitute* (string-append target "pdf-info.el")
> +                (("or load-file-name")
> +                 (string-append "or \""
> +                                (string-append (assoc-ref outputs "out")
> +                                               "/bin/")
> +                                "\" load-file-name"))))

There is 'emacs-substitute-variables' procedure from (guix build
emacs-utils) for this.  And I think it should be moved to an earlier
phase, since this and other elisp files may be (ideally) compiled after
this change.

Also there is another change that should be done IMO – a change of the
default value of 'pdf-tools-handle-upgrades' variable to prevent auto
updating, as it makes sense only if the package is updated from MELPA
(it tries to recompile the epdfinfo program).

And another thing: it is very useful to generate an "…-autoloads.el"
file so that some "pdf-…" functions and commands become available.

Here is the modified version of this package, I've tested (without
byte-compiling and tests):


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: emacs-pdf-tools.scm --]
[-- Type: text/x-scheme, Size: 2975 bytes --]

(define-public emacs-pdf-tools
  (package
    (name "emacs-pdf-tools")
    (version "0.60")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/politza/pdf-tools/archive/v"
                    version ".tar.gz"))
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "1y8k5n2jbyaxby0j6f4m9xbm0ddpmbkrfj6rp6ll5sb97lcg3vrx"))))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f ; there are no tests
       #:modules ((guix build gnu-build-system)
                  (guix build utils)
                  (guix build emacs-utils))
       #:imported-modules (,@%gnu-build-system-modules
                           (guix build emacs-utils))
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'enter-dir (lambda _ (chdir "server") #t))
         (add-before
          'configure 'autogen
          (lambda _
            (zero? (system* "bash" "autogen.sh"))))
         (add-before
          'build 'patch-variables
          (lambda* (#:key outputs #:allow-other-keys)
            (with-directory-excursion "../lisp"
              ;; Set path to epdfinfo program.
              (emacs-substitute-variables "pdf-info.el"
                ("pdf-info-epdfinfo-program"
                 (string-append (assoc-ref outputs "out")
                                "/bin/epdfinfo")))
              ;; Set 'pdf-tools-handle-upgrades' to nil to avoid "auto
              ;; upgrading" that pdf-tools tries to perform.
              (emacs-substitute-variables "pdf-tools.el"
                ("pdf-tools-handle-upgrades" '())))))
         (add-after
          'install 'install-lisp
          (lambda* (#:key outputs #:allow-other-keys)
            (let ((target (string-append (assoc-ref outputs "out")
                                         "/share/emacs/site-lisp/")))
              (mkdir-p target)
              (for-each
               (lambda (file)
                 (copy-file file (string-append target (basename file))))
               (find-files "../lisp" "^(pdf|tab).*\\.elc?"))
              (emacs-generate-autoloads "pdf-tools" target)))))))
    (native-inputs `(("autoconf" ,autoconf)
                     ("automake" ,automake)
                     ("pkg-config" ,pkg-config)
                     ("emacs" ,emacs-no-x)))
    (inputs `(("poppler" ,poppler)
              ("cairo" ,cairo)
              ("glib" ,glib)
              ("libpng" ,libpng)
              ("zlib" ,zlib)))
    (synopsis "Emacs support library for PDF files")
    (description
     "PDF Tools is, among other things, a replacement of DocView for PDF
files.  The key difference is that pages are not pre-rendered by
e.g. ghostscript and stored in the file-system, but rather created on-demand
and stored in memory.")
    (home-page "https://github.com/politza/pdf-tools")
    (license license:gpl3+)))

  reply	other threads:[~2015-07-06 13:40 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-05 17:59 [PATCH] Add Emacs PDF tools Ricardo Wurmus
2015-07-06 13:40 ` Alex Kost [this message]
2015-07-09 13:56   ` Alex Kost
2015-07-10  7:16     ` Ricardo Wurmus
2015-07-11 14:24       ` Alex Kost

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87twthflpk.fsf@gmail.com \
    --to=alezost@gmail.com \
    --cc=guix-devel@gnu.org \
    --cc=rekado@elephly.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.