guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/3] gnu: Add man-db


From: David Thompson
Subject: Re: [PATCH 2/3] gnu: Add man-db
Date: Tue, 08 Apr 2014 07:46:24 -0400
User-agent: Notmuch/0.17 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-pc-linux-gnu)

Mark H Weaver <address@hidden> writes:

> David Thompson <address@hidden> writes:
>
>>> Why is 'lynx' an input?  I remember you mentioning on IRC that if PAGER
>>> is not set, it launched a web browser by default.  I wonder: if you
>>> included 'less' and not 'lynx', would it use 'less' by default
>>> instead?
>>
>> My system seems to be doing weird things and insisting on w3m for some
>> reason.
>
> That might be because the '.bash_profile' file I showed you set PAGER to
> w3m.  I found that if I unset PAGER, this man-db uses 'less' by default,
> which I think is sensible.

Can't believe I didn't notice the PAGER variable there.  I was staring
right at it.

>
>> +    (propagated-inputs
>> +     `(("groff" ,groff)
>> +       ("less" ,less)))
>
> Instead of making these propagated inputs, how about arranging for
> man-db to invoke the programs directly from the store?  There are a
> number of ./configure options that should probably be specified with
> absolute pathnames:
>
>   --with-pager
>   --with-nroff
>   --with-eqn
>   --with-neqn
>   --with-tbl
>   --with-refer
>   --with-pic
>   --with-gzip
>   --with-bzip2
>   --with-xz
>
> You could pass add these to the #:configure-flags.  The goal should be
> for 'man' to work properly without having to look up any of its
> dependent programs from $PATH and with PAGER unset.
>
> From the #:configure-flags code, %build-inputs can be looked up for the
> input paths.  So you could do something like (untested):
>
> --8<---------------cut here---------------start------------->8---
>   `(#:configure-flags
>     (let ((groff (assoc-ref %build-inputs "groff"))
>           (less  (assoc-ref %build-inputs "less"))
>           (gzip  (assoc-ref %build-inputs "gzip"))
>           ...)
>       (append (list (string-append "--with-pager=" less "/bin/less")
>                     (string-append "--with-gzip=" gzip "/bin/gzip")
>                     ...)
>               (map (lambda (prog)
>                      (string-append "--with-" prog "=" groff "/bin/" prog))
>                    '("nroff" "eqn" "neqn" "tbl" "refer" "pic")))))
> --8<---------------cut here---------------end--------------->8---
>
>      Thanks!
>        Mark

Wow, this worked perfectly.  Now man uses less by default even when I
have no PAGER variable set and less is uninstalled.  The same thing goes
for groff, gzip, etc.

I've attached the updated patch.  Thanks for your help.  This is the
most complicated package I've tried to write so far.

- Dave

>From a0269a3830dfc2dd9cc6b8402a571a7efd90e717 Mon Sep 17 00:00:00 2001
From: David Thompson <address@hidden>
Date: Sun, 6 Apr 2014 20:25:01 -0400
Subject: [PATCH 2/3] gnu: Add man-db.

* gnu/packages.man.scm (man-db): New variable.
---
 gnu/packages/man.scm | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 68 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index e68b1f2..5457037 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -20,7 +20,13 @@
   #:use-module (guix licenses)
   #:use-module (guix download)
   #:use-module (guix packages)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages gdbm)
+  #:use-module (gnu packages groff)
+  #:use-module (gnu packages less)
+  #:use-module (gnu packages lynx)
+  #:use-module (gnu packages pkg-config))
 
 (define-public libpipeline
   (package
@@ -41,3 +47,64 @@
      "libpipeline is a C library for manipulating pipelines of subprocesses in
 a flexible and convenient way.")
     (license gpl3+)))
+
+(define-public man-db
+  (package
+    (name "man-db")
+    (version "2.6.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://download.savannah.gnu.org/releases/man-db/man-db-";
+                    version ".tar.xz"))
+              (sha256
+               (base32
+                "1hv6byj6sg6cp3jyf08gbmdm4pwhvd5hzmb94xl0w7prin6hzabx"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases
+       (alist-cons-after
+        'patch-source-shebangs 'patch-test-shebangs
+        (lambda* (#:key outputs #:allow-other-keys)
+          ;; Patch shebangs in test scripts.
+          (let ((out (assoc-ref outputs "out")))
+            (for-each (lambda (file)
+                        (substitute* file
+                          (("#! /bin/sh")
+                           (string-append "#!" (which "sh")))))
+                      (remove file-is-directory?
+                              (find-files "src/tests" ".*")))))
+        %standard-phases)
+       #:configure-flags
+       (let ((groff (assoc-ref %build-inputs "groff"))
+             (less  (assoc-ref %build-inputs "less"))
+             (gzip  (assoc-ref %build-inputs "gzip"))
+             (bzip2  (assoc-ref %build-inputs "bzip2"))
+             (xz  (assoc-ref %build-inputs "xz")))
+         ;; Invoke groff, less, gzip, bzip2, and xz directly from the store.
+         (append (list "--disable-setuid" ;; Disable setuid man user.
+                       (string-append "--with-pager=" less "/bin/less")
+                       (string-append "--with-gzip=" gzip "/bin/gzip")
+                       (string-append "--with-bzip2=" bzip2 "/bin/gzip")
+                       (string-append "--with-xz=" xz "/bin/xz"))
+                 (map (lambda (prog)
+                        (string-append "--with-" prog "=" groff "/bin/" prog))
+                      '("nroff" "eqn" "neqn" "tbl" "refer" "pic"))))
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("flex" ,flex)
+       ("gdbm" ,gdbm)
+       ("groff" ,groff)
+       ("less" ,less)
+       ("libpipeline" ,libpipeline)))
+    (home-page "http://man-db.nongnu.org/";)
+    (synopsis "Standard Unix documentation system")
+    (description
+     "Man-db is an implementation of the standard Unix documentation system
+accessed using the man command.  It uses a Berkeley DB database in place of
+the traditional flat-text whatis databases.")
+    (license gpl2+)))
-- 
1.8.4


reply via email to

[Prev in Thread] Current Thread [Next in Thread]