all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: guix-devel <guix-devel@gnu.org>
Subject: Re: [PATCH]: Add CUPS.
Date: Thu, 15 Jan 2015 17:30:37 +0100	[thread overview]
Message-ID: <idjfvbcgg5u.fsf@bimsb-sys02.mdc-berlin.net> (raw)
In-Reply-To: <87mw5qna67.fsf@gnu.org>

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

> It might be clearer and also easier (because all of %standard-phases
> would be readily usable) to make ijs a separate package, similar to the
> libtool/libltdl split.  WDYT?

Agreed.  I made it a separate package.

>> From 8e671fdd888bf9548bf52acf8789500c90d4b072 Mon Sep 17 00:00:00 2001
>> From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
>> Date: Wed, 7 Jan 2015 17:49:00 +0100
>> Subject: [PATCH 1/3] gnu: Add QPDF.
>>
>> * gnu/packages/pdf.scm (qpdf): New variable.
>
> LGTM.

Thanks, I applied this patch in master.

>> From d42e6a3233b7c5142d1c91d8c2b1c751b74bd444 Mon Sep 17 00:00:00 2001
>> From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
>> Date: Mon, 5 Jan 2015 13:56:51 +0100
>> Subject: [PATCH 3/3] gnu: Add CUPS.
>>
>> * gnu/packages/cups.scm: New file.
>> * gnu-system.am (GNU_SYSTEM_MODULES): Add it.
>
> [...]
>
>> +         "--with-gnu-ld"
>
> I suspect this is not needed; ./configure should be able to determine it
> automatically.
>
>> +         "--disable-static"
>
> Why?  By default we let packages provide both .so and .a files.

Okay, removed those two.

>> +       #:phases
>> +       (alist-cons-before
>> +        'configure
>> +        'patch-target-dirs
>> +        (lambda _
>> +          (let ((out (assoc-ref %outputs "out")))
>> +            ;; install backends, banners and filters to cups-filters output
>> +            ;; directory, not the cups server directory
>> +            (substitute* "Makefile.in"
>> +              (("CUPS_DATADIR = @CUPS_DATADIR@")
>> +               (string-append "CUPS_DATADIR = " out "/share/cups"))
>> +              (("pkgcupsserverrootdir = \\$\\(CUPS_SERVERROOT\\)")
>> +               (string-append "pkgcupsserverrootdir = " out))
>> +              (("pkgbackenddir = \\$\\(CUPS_SERVERBIN\\)/backend")
>> +               (string-append "pkgbackenddir = "
>> +                              out
>> +                              "/backend"))
>> +              (("pkgfilterdir = \\$\\(CUPS_SERVERBIN\\)/filter")
>> +               (string-append "pkgfilterdir = "
>> +                              out
>> +                              "/filter")))))
>
> Could you make this phase a ‘snippet’, by using a literal “$(prefix)” or
> “@prefix” instead of ‘out’?

This is now a snippet using $(PREFIX).

>> +    ;; see COPYING for details
>> +    (license (list license:gpl2
>> +                   license:gpl2+
>> +                   license:gpl3
>> +                   license:gpl3+
>> +                   license:lgpl2.0+
>> +                   license:expat))))
>
> Could you augment the comment to mention what this license list means?
> Each filter has its own license, or something like that?

Done.  The exact license mapping is a bit complicated, so the comment
still isn't quite as helpful as it probably could be.

>> +(define-public cups-minimal
>> +  (package
>> +    (name "cups-minimal")
>
> Could you add a comment with the explanation that you gave in this
> message as to why it is needed?

Done.

>> +(define-public cups
>> +  (package
>> +    (name "cups")
>
> I think this should inherit from ‘cups-minimal’, and just change the
> ‘name’ and ‘arguments’ fields.  WDYT?


"cups" now inherits from "cups-minimal".

>> +    (synopsis "CUPS printing system")
>
> What about “The Common Unix Printing System”?
>
>> +    (description
>> +     "CUPS printing system provides a portable printing layer for UNIX®
>> +operating systems.  It has been developed by Apple Inc. to promote a standard
>> +printing solution for all UNIX vendors and users.  CUPS provides the System V
>> +and Berkeley command-line interfaces.")
>
> What about this (based on README.txt):
>
>   CUPS is a printing system that uses the Internet Printing Protocol
>   (IPP).  It provides System V and BSD command-line interfaces, as well
>   as a Web interface and a C programming interface to manage printers
>   and print jobs.  It supports printing to both local (parallel, serial,
>   USB) and networked printers, and printers can be shared from one
>   computer to another.  Internally, CUPS uses PostScript Printer
>   Description (PPD) files to describe printer capabilities and features
>   and a wide variety of generic and device-specific programs to convert
>   and print many types of files.

I updated both synopsis and description.

Attached are the two remaining patches.

-- Ricardo



[-- Attachment #2: 0001-gnu-Add-IJS.patch --]
[-- Type: text/x-patch, Size: 2935 bytes --]

From a78114013bdbbff310014815cb47abd38bb0c59c Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
Date: Wed, 14 Jan 2015 14:47:37 +0100
Subject: [PATCH 1/2] gnu: Add IJS

* gnu/packages/ghostscript.scm (ijs): New variable.
---
 gnu/packages/ghostscript.scm | 46 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 405b4e7..3100f8a 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +20,7 @@
 
 (define-module (gnu packages ghostscript)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages image)
@@ -164,6 +166,50 @@ output file formats and printers.")
    (license license:agpl3+)
    (home-page "http://www.gnu.org/software/ghostscript/")))
 
+(define-public ijs
+  (package
+   (name "ijs")
+   (version "9.14.0")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/ghostscript/gnu-ghostscript-"
+                                version ".tar.xz"))
+            (sha256 (base32
+                     "0q4jj41p0qbr4mgcc9q78f5zs8cm1g57wgryhsm2yq4lfslm3ib1"))))
+   (build-system gnu-build-system)
+   (native-inputs
+    `(("libtool"    ,libtool "bin")
+      ("libtool"    ,libtool "out")
+      ("automake"   ,automake)
+      ("autoconf"   ,autoconf)))
+   (arguments
+    `(#:phases
+      (alist-cons-after
+       'unpack 'autogen
+       (lambda _
+         ;; need to regenerate macros
+         (system* "autoreconf" "-if")
+         ;; do not run configure
+         (substitute* "autogen.sh"
+           (("^.*\\$srcdir/configure.*") ""))
+         (system* "bash" "autogen.sh")
+
+         ;; create configure script in ./ijs/
+         (chdir "ijs")
+         ;; do not run configure
+         (substitute* "autogen.sh"
+           (("^.*\\$srcdir/configure.*") "")
+           (("^ + && echo Now type.*$")  ""))
+         (zero? (system* "bash" "autogen.sh")))
+       %standard-phases)))
+   (synopsis "IJS driver framework for inkjet and other raster devices")
+   (description
+    "IJS is a protocol for transmission of raster page images.  This package
+provides the reference implementation of the raster printer driver
+architecture.")
+   (license license:expat)
+   (home-page "http://www.gnu.org/software/ghostscript/")))
+
 (define-public gs-fonts
   (package
    (name "gs-fonts")
-- 
1.9.3


[-- Attachment #3: 0002-gnu-Add-CUPS.patch --]
[-- Type: text/x-patch, Size: 13645 bytes --]

From 72a50808f1b2d3f391b5da688bfe0b841d95af30 Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
Date: Mon, 5 Jan 2015 13:56:51 +0100
Subject: [PATCH 2/2] gnu: Add CUPS.

* gnu/packages/cups.scm: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add it.
---
 gnu-system.am         |   1 +
 gnu/packages/cups.scm | 293 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 294 insertions(+)
 create mode 100644 gnu/packages/cups.scm

diff --git a/gnu-system.am b/gnu-system.am
index c520418..a39fec5 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -67,6 +67,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/cross-base.scm			\
   gnu/packages/crypto.scm			\
   gnu/packages/cryptsetup.scm			\
+  gnu/packages/cups.scm				\
   gnu/packages/curl.scm				\
   gnu/packages/cursynth.scm			\
   gnu/packages/cyrus-sasl.scm			\
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
new file mode 100644
index 0000000..a74e409
--- /dev/null
+++ b/gnu/packages/cups.scm
@@ -0,0 +1,293 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages cups)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages avahi)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages fonts) ;font-dejavu
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnutls)
+  #:use-module (gnu packages pdf)
+  #:use-module (gnu packages pkg-config))
+
+(define-public cups-filters
+  (package
+    (name "cups-filters")
+    (version "1.0.61")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "http://openprinting.org/download/cups-filters/"
+                              "cups-filters-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1bq48nnrarlbf6qc93bz1n5wlh6j420gppbck3r45sinwhz5wa7m"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; install backends, banners and filters to cups-filters output
+               ;; directory, not the cups server directory
+               '(substitute* "Makefile.in"
+                  (("CUPS_DATADIR = @CUPS_DATADIR@")
+                   "CUPS_DATADIR = $(PREFIX)/share/cups")
+                  (("pkgcupsserverrootdir = \\$\\(CUPS_SERVERROOT\\)")
+                   "pkgcupsserverrootdir = $(PREFIX)")
+                  (("pkgbackenddir = \\$\\(CUPS_SERVERBIN\\)/backend")
+                   "pkgbackenddir = $(PREFIX)/backend")
+                  (("pkgfilterdir = \\$\\(CUPS_SERVERBIN\\)/filter")
+                   "pkgfilterdir = $(PREFIX)/filter")))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "PREFIX=" %output))
+       #:configure-flags
+       `(,(string-append "--with-test-font-path="
+                         (assoc-ref %build-inputs "font-dejavu")
+                         "/share/fonts/truetype/DejaVuSans.ttf")
+         ,(string-append "--with-rcdir="
+                         (assoc-ref %outputs "out") "/etc/rc.d"))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fontconfig"   ,fontconfig)
+       ("freetype"     ,freetype)
+       ("font-dejavu"  ,font-dejavu) ;needed by test suite
+       ("ghostscript"  ,ghostscript)
+       ("ijs"          ,ijs)
+       ("dbus"         ,dbus)
+       ("lcms"         ,lcms)
+       ("libjpeg-8"    ,libjpeg-8)
+       ("libpng"       ,libpng)
+       ("libtiff"      ,libtiff)
+       ("glib"         ,glib)
+       ("qpdf"         ,qpdf)
+       ("poppler"      ,poppler)
+       ("cups-minimal" ,cups-minimal)))
+    (home-page "http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters")
+    (synopsis "OpenPrinting CUPS filters and backends")
+    (description
+     "Contains backends, filters, and other software that was once part of the
+core CUPS distribution but is no longer maintained by Apple Inc.  In addition
+it contains additional filters developed independently of Apple, especially
+filters for the PDF-centric printing workflow introduced by OpenPrinting.")
+    ;; Different filters and backends have different licenses; see COPYING for
+    ;; details
+    (license (list license:gpl2
+                   license:gpl2+
+                   license:gpl3
+                   license:gpl3+
+                   license:lgpl2.0+
+                   license:expat))))
+
+;; CUPS on non-MacOS systems requires cups-filters.  Since cups-filters also
+;; depends on CUPS libraries and binaries, cups-minimal has been added to
+;; satisfy this dependency.
+(define-public cups-minimal
+  (package
+    (name "cups-minimal")
+    (version "2.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://www.cups.org/software/"
+                                  version "/cups-" version "-source.tar.gz"))
+              (sha256
+               (base32
+                "1kbc85kwhm1vyzahblrg3qih9yypggs91d13gdrbnaac8q7jd9jr"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       '("--disable-launchd"
+         "--disable-systemd"
+         "--disable-avahi"
+         "--disable-dnssd")
+       ;; Seven tests fail, mostly because of files that are provided by the
+       ;; cups-filters package.
+       #:tests? #f
+       #:phases
+       (alist-cons-before
+        'configure
+        'patch-makedefs
+        (lambda _
+          (substitute* "Makedefs.in"
+            (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
+            (("/bin/sh") (which "sh"))))
+        (alist-cons-before
+         'build
+         'patch-tests
+         (lambda _
+           (substitute* "test/ippserver.c"
+             (("#  else /\\* HAVE_AVAHI \\*/") "#elif defined(HAVE_AVAHI)")))
+         %standard-phases))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("zlib"  ,zlib)
+       ("gnutls" ,gnutls)))
+    (home-page "http://www.cups.org")
+    (synopsis "The Common Unix Printing System")
+    (description
+     "CUPS is a printing system that uses the Internet Printing
+Protocol (IPP).  It provides System V and BSD command-line interfaces, as well
+as a Web interface and a C programming interface to manage printers and print
+jobs.  It supports printing to both local (parallel, serial, USB) and
+networked printers, and printers can be shared from one computer to another.
+Internally, CUPS uses PostScript Printer Description (PPD) files to describe
+printer capabilities and features and a wide variety of generic and
+device-specific programs to convert and print many types of files.")
+    (license license:gpl2)))
+
+(define-public cups
+  (package (inherit cups-minimal)
+    (name "cups")
+    (arguments
+     `(;; Three tests fail:
+       ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6:
+       ;;   Get-Jobs Operation"
+       ;; * test of number of error/warning messages, probably related to a
+       ;;   missing font.
+       #:tests? #f
+       #:configure-flags
+       '("--disable-launchd"
+         "--disable-systemd")
+       #:phases
+       (alist-cons-before
+        'configure
+        'patch-makedefs
+        (lambda _
+          (substitute* "Makedefs.in"
+            (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
+            (("/bin/sh") (which "sh"))))
+        (alist-cons-before
+         'check
+         'patch-tests
+         (lambda _
+           (let ((filters (assoc-ref %build-inputs "cups-filters"))
+                 (catpath (string-append
+                           (assoc-ref %build-inputs "coreutils") "/bin/"))
+                 (testdir (string-append (getcwd) "/tmp/")))
+             (mkdir testdir)
+             (substitute* "test/run-stp-tests.sh"
+               ((" *BASE=/tmp/") (string-append "BASE=" testdir))
+
+               ;; allow installation of filters from output dir and from
+               ;; cups-filters
+               (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter")
+                (string-append
+                 "for dir in "
+                 (assoc-ref %outputs "out") "/lib/cups/filter "
+                 filters "/filter"))
+
+               ;; check for charsets in cups-filters output
+               (("/usr/share/cups/charsets")
+                (string-append filters "/share/cups/charsets"))
+
+               ;; install additional required filters
+               (("instfilter texttopdf texttopdf pdf")
+                (string-append
+                 "instfilter texttopdf texttopdf pdf;"
+                 "instfilter imagetoraster imagetoraster raster;"
+                 "instfilter gstoraster gstoraster raster;"
+                 "instfilter urftopdf urftopdf pdf;"
+                 "instfilter rastertopdf rastertopdf pdf;"
+                 "instfilter pstopdf pstopdf pdf"))
+
+               ;; specify location of lpstat binary
+               (("description=\"`lpstat -l")
+                "description=\"`../systemv/lpstat -l")
+
+               ;; patch shebangs of embedded scripts
+               (("#!/bin/sh") (string-append "#!" (which "sh")))
+
+               ;; also link mime definitions from cups-filters
+               ;; to enable the additional filters for the test suite
+               (("ln -s \\$root/conf/mime\\.types")
+                (string-append
+                 "ln -s " filters
+                 "/share/cups/mime/cupsfilters.types $BASE/share/mime; "
+                 "ln -s $root/conf/mime.types"))
+               (("ln -s \\$root/conf/mime\\.convs")
+                (string-append
+                 "ln -s " filters
+                 "/share/cups/mime/cupsfilters.convs $BASE/share/mime; "
+                 "ln -s $root/conf/mime.convs")))
+
+             ;; fix search path for "cat"
+             (substitute* "cups/testfile.c"
+               (("cupsFileFind\\(\"cat\", \"/bin\"")
+                (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
+               (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
+                (string-append "cupsFileFind(\"cat\", \"" catpath "\"")))))
+         (alist-cons-after
+          'install
+          'install-cups-filters-symlinks
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            (let ((out (assoc-ref outputs "out"))
+                  (cups-filters (assoc-ref inputs "cups-filters")))
+              ;; charsets
+              (symlink
+               (string-append cups-filters "/share/cups/charsets")
+               (string-append out "/share/charsets"))
+
+              ;; mime types, driver file, ppds
+              (for-each
+               (lambda (f)
+                 (symlink (string-append cups-filters f)
+                          (string-append out f)))
+               '("/share/cups/mime/cupsfilters.types"
+                 "/share/cups/mime/cupsfilters.convs"
+                 "/share/cups/drv/cupsfilters.drv"
+                 "/share/ppd"))
+
+              ;; filters
+              (for-each
+               (lambda (f)
+                 (symlink f
+                          (string-append out "/lib/cups/filter" (basename f))))
+               (find-files (string-append cups-filters "/filter") ".*"))
+
+              ;; backends
+              (for-each
+               (lambda (f)
+                 (symlink (string-append cups-filters f)
+                          (string-append out "/lib/cups" f)))
+               '("/backend/parallel"
+                 "/backend/serial"))
+
+              ;; banners
+              (let ((banners "/share/cups/banners"))
+                (delete-file-recursively (string-append out banners))
+                (symlink (string-append cups-filters banners)
+                         (string-append out banners)))
+
+              ;; assorted data
+              (let ((data "/share/cups/data"))
+                (delete-file-recursively (string-append out data))
+                (symlink (string-append cups-filters data)
+                         (string-append out data)))))
+          %standard-phases)))))
+    (inputs
+     `(("avahi" ,avahi)
+       ("gnutls" ,gnutls)
+       ("cups-filters" ,cups-filters)
+       ("zlib"  ,zlib)))))
-- 
1.9.3


  reply	other threads:[~2015-01-15 16:30 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-05 13:04 [PATCH]: Add CUPS Ricardo Wurmus
2015-01-05 14:26 ` Thompson, David
2015-01-05 16:38   ` Ricardo Wurmus
2015-01-05 15:35 ` Ludovic Courtès
2015-01-05 16:48   ` Ricardo Wurmus
2015-01-09 14:57     ` Ricardo Wurmus
2015-01-10 11:32       ` Ludovic Courtès
2015-01-15 16:30         ` Ricardo Wurmus [this message]
2015-01-15 20:21           ` Ludovic Courtès
2015-01-05 15:37 ` Ludovic Courtès

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=idjfvbcgg5u.fsf@bimsb-sys02.mdc-berlin.net \
    --to=ricardo.wurmus@mdc-berlin.de \
    --cc=guix-devel@gnu.org \
    --cc=ludo@gnu.org \
    /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.