unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH]: Add CUPS.
@ 2015-01-05 13:04 Ricardo Wurmus
  2015-01-05 14:26 ` Thompson, David
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Ricardo Wurmus @ 2015-01-05 13:04 UTC (permalink / raw)
  To: guix-devel

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

Hi Guix,

attached is a patch that adds a package recipe for CUPS.

There are a couple of problems with this package, one of which is that
the test suite is failing for some reason.  I have not been able to
figure out why the "cupsFileFind" test fails, so I disabled the tests.

I'm also not sure if creating two outputs "out" and "include" is
correct.  To build OpenJDK with IcedTea I need to have both the library
output and the include files and after splitting the outputs this worked
fine.

Finally, I have not actually tried to use CUPS at all, because I only
really need the libs and headers to build OpenJDK.

Best,
Ricardo


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

From 90ce3c9a1b1a7f3ba034b7e69aef910252470d72 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] 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 | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 68 insertions(+)
 create mode 100644 gnu/packages/cups.scm

diff --git a/gnu-system.am b/gnu-system.am
index efddb99..f3b1bf8 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..f21d8bc
--- /dev/null
+++ b/gnu/packages/cups.scm
@@ -0,0 +1,67 @@
+;;; 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 gnutls)
+  #:use-module (gnu packages pkg-config))
+
+(define-public cups
+  (package
+    (name "cups")
+    (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
+     `(#:tests? #f ;cupsFileFind fails for some reason
+       #:phases
+       (alist-cons-before
+        'configure
+        'patch-makedefs
+        (lambda _
+          (substitute* "Makedefs.in"
+            (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
+            (("/bin/sh") (which "sh"))))
+        %standard-phases)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("avahi" ,avahi)
+       ("gnutls" ,gnutls)
+       ("zlib"  ,zlib)))
+    (outputs '("out" "include"))
+    (home-page "http://www.cups.org")
+    (synopsis "CUPS 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.")
+    (license license:gpl2+)))
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  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 15:37 ` Ludovic Courtès
  2 siblings, 1 reply; 10+ messages in thread
From: Thompson, David @ 2015-01-05 14:26 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

On Mon, Jan 5, 2015 at 8:04 AM, Ricardo Wurmus
<ricardo.wurmus@mdc-berlin.de> wrote:
>
> I'm also not sure if creating two outputs "out" and "include" is
> correct.  To build OpenJDK with IcedTea I need to have both the library
> output and the include files and after splitting the outputs this worked
> fine.

That doesn't seem correct.  I don't see a reason to have a second
output here.  With a single output "out", everything will be included.

- Dave

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-05 13:04 [PATCH]: Add CUPS Ricardo Wurmus
  2015-01-05 14:26 ` Thompson, David
@ 2015-01-05 15:35 ` Ludovic Courtès
  2015-01-05 16:48   ` Ricardo Wurmus
  2015-01-05 15:37 ` Ludovic Courtès
  2 siblings, 1 reply; 10+ messages in thread
From: Ludovic Courtès @ 2015-01-05 15:35 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de> skribis:

> There are a couple of problems with this package, one of which is that
> the test suite is failing for some reason.  I have not been able to
> figure out why the "cupsFileFind" test fails, so I disabled the tests.

OK.  Do you have any more details from the test suite log?

> I'm also not sure if creating two outputs "out" and "include" is
> correct.  To build OpenJDK with IcedTea I need to have both the library
> output and the include files and after splitting the outputs this worked
> fine.

The reason for splitting would be if it turns out that the include
directory takes a fair amount of space that is not needed in many
cases.  If that’s the case, then splitting makes sense.  That may well
be the case: what’s the side of each of these outputs?

If it’s just that it happens to fix OpenJDK as a side effect, that’s not
a good reason.  :-)

> Finally, I have not actually tried to use CUPS at all, because I only
> really need the libs and headers to build OpenJDK.

OK but that’ll be useful eventually to get Evince and friends to print
correctly.

> +    (license license:gpl2+)))

Isn’t it GPLv2-only?

The rest looks good to me.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-05 13:04 [PATCH]: Add CUPS Ricardo Wurmus
  2015-01-05 14:26 ` Thompson, David
  2015-01-05 15:35 ` Ludovic Courtès
@ 2015-01-05 15:37 ` Ludovic Courtès
  2 siblings, 0 replies; 10+ messages in thread
From: Ludovic Courtès @ 2015-01-05 15:37 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

BTW, if you create an account on Savannah, I can add you to the group so
you can commit by yourself.

Ludo’.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-05 14:26 ` Thompson, David
@ 2015-01-05 16:38   ` Ricardo Wurmus
  0 siblings, 0 replies; 10+ messages in thread
From: Ricardo Wurmus @ 2015-01-05 16:38 UTC (permalink / raw)
  To: Thompson, David; +Cc: guix-devel


Thompson, David writes:

> On Mon, Jan 5, 2015 at 8:04 AM, Ricardo Wurmus
> <ricardo.wurmus@mdc-berlin.de> wrote:
>>
>> I'm also not sure if creating two outputs "out" and "include" is
>> correct.  To build OpenJDK with IcedTea I need to have both the library
>> output and the include files and after splitting the outputs this worked
>> fine.
>
> That doesn't seem correct.  I don't see a reason to have a second
> output here.  With a single output "out", everything will be included.

I'm sure you are right; this is probably a case of cargo-cult
programming...  The recipe for OpenJDK/IcedTea is still pretty messy at
this point and I suppose this confused me.

I'll try again with a single output.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-05 15:35 ` Ludovic Courtès
@ 2015-01-05 16:48   ` Ricardo Wurmus
  2015-01-09 14:57     ` Ricardo Wurmus
  0 siblings, 1 reply; 10+ messages in thread
From: Ricardo Wurmus @ 2015-01-05 16:48 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel


Ludovic Courtès writes:

> Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de> skribis:
>
>> There are a couple of problems with this package, one of which is that
>> the test suite is failing for some reason.  I have not been able to
>> figure out why the "cupsFileFind" test fails, so I disabled the tests.
>
> OK.  Do you have any more details from the test suite log?

I looked at this again and suddenly figured out what went wrong
(hardcoded search path for "cat" in a call to "cupsFileFind").  The
tests take a good while longer now and there are seven more failures
that I will work on before resubmitting an updated patch.

> The reason for splitting would be if it turns out that the include
> directory takes a fair amount of space that is not needed in many
> cases.  If that’s the case, then splitting makes sense.  That may well
> be the case: what’s the side of each of these outputs?

I see that splitting would not be required in this case; the outputs are
very small (6+MB for "out" and 240+kB for "include").

>> +    (license license:gpl2+)))
>
> Isn’t it GPLv2-only?

You are right (I was so sure I checked this).  I'll fix this in the
updated patch.

Best,
Ricardo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-05 16:48   ` Ricardo Wurmus
@ 2015-01-09 14:57     ` Ricardo Wurmus
  2015-01-10 11:32       ` Ludovic Courtès
  0 siblings, 1 reply; 10+ messages in thread
From: Ricardo Wurmus @ 2015-01-09 14:57 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

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

Attached is a more comprehensive patch set to add CUPS.

CUPS on non-MacOS systems depends on cups-filters, which in turn depends
on QPDF and IJS.

* QPDF is added by the first patch.

* IJS is part of ghostscript, but for some reason is not built even when
  passing "--with-ijs" as a configure flag.  There is no configure
  script and no usable Makefile in ./ijs, so we actually have to run
  ./autogen.sh after generating macros that work with libtool 2.4.2.
  The second patch adds a new very ugly phase that does just that.  I'd
  love to change this if someone can come up with a better way to do
  this.

* cups-filters also depends on CUPS libraries and binaries, so
  cups-minimal has been added to satisfy this dependency.  During
  installation, cups-filters attempts to install files to the CUPS
  package output directory.  The install phase is modified to direct the
  files to the output directory of cups-filters.

* the CUPS package itself then adds links to the required files in
  cups-filters.  CUPS does not come with a mechanism to load filters,
  backends, charsets, mime files, etc from alternative directories, so I
  chose to use symlinks.

* the CUPS tests are run before the installation of any symlinks, so to
  establish a working test environment quite a lot of fixes to the test
  phase are needed.  Without the files from cups-filters seven tests
  fail.  With the files in place only three tests fail.  I have not been
  able to fix these remaining failures, even though I have been trying
  for a long time.

I have addressed your previous comments about outputs and the CUPS
license (gpl2 instead of gpl2+).

Thanks in advance for your review!

-- Ricardo


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-QPDF.patch --]
[-- Type: text/x-patch, Size: 2637 bytes --]

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.
---
 gnu/packages/pdf.scm | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 0f9098d..02b55ac 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -37,6 +37,8 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages perl)
   #:use-module (srfi srfi-1))
 
 (define-public poppler
@@ -238,3 +240,43 @@ 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+)))
+
+(define-public qpdf
+  (package
+   (name "qpdf")
+   (version "5.1.2")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://sourceforge/qpdf/qpdf-"
+                                version ".tar.gz"))
+            (sha256 (base32
+                     "1zbvhrp0zjzbi6q2bnbxbg6399r47pq5gw3kspzph81j19fqvpg9"))))
+   (build-system gnu-build-system)
+   (arguments
+      '(#:phases (alist-cons-before
+                  'configure 'patch-paths
+                  (lambda _
+                    (substitute* "make/libtool.mk"
+                      (("SHELL=/bin/bash")
+                       (string-append "SHELL=" (which "bash"))))
+                    (substitute* (append
+                                  '("qtest/bin/qtest-driver")
+                                  (find-files "." "\\.test"))
+                      (("/usr/bin/env") (which "env"))))
+                  %standard-phases)))
+   (native-inputs
+    `(("pkg-config" ,pkg-config)))
+   (propagated-inputs
+    `(("pcre" ,pcre)))
+   (inputs
+    `(("zlib" ,zlib)
+      ("perl" ,perl)))
+   (synopsis "Command-line tools and library for transforming PDF files")
+   (description
+    "QPDF is a command-line program that does structural, content-preserving
+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)
+   (home-page "http://qpdf.sourceforge.net/")))
-- 
1.9.3


[-- Attachment #3: 0002-gnu-ghostscript-build-IJS-library.patch --]
[-- Type: text/x-patch, Size: 4241 bytes --]

From 36eac76f1aa129f2e22d4341fe4d64d4c5b8fd0a Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
Date: Fri, 9 Jan 2015 15:19:54 +0100
Subject: [PATCH 2/3] gnu: ghostscript: build IJS library

* gnu/packages/ghostscript.scm (ghostscript): build and install IJS library
  and header files.
---
 gnu/packages/ghostscript.scm | 61 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 49 insertions(+), 12 deletions(-)

diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 405b4e7..bef0551 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)
@@ -135,12 +137,17 @@ printing, and psresize, for adjusting page sizes.")
              ("libtiff" ,libtiff)
              ("zlib" ,zlib)))
    (native-inputs
-      `(("perl" ,perl)
-        ("pkg-config" ,pkg-config) ; needed to find libtiff
-        ("python" ,python-wrapper)
-        ("tcl" ,tcl)))
+    `(("perl"       ,perl)
+      ("libtool"    ,libtool "bin")
+      ("libtool"    ,libtool "out")
+      ("automake"   ,automake)
+      ("autoconf"   ,autoconf)
+      ("pkg-config" ,pkg-config) ; needed to find libtiff
+      ("python"     ,python-wrapper)
+      ("tcl"        ,tcl)))
    (arguments
-    `(#:phases
+    `(#:configure-flags '("--with-ijs")
+      #:phases
       (alist-cons-after
        'configure 'patch-config-files
        (lambda _
@@ -148,13 +155,43 @@ printing, and psresize, for adjusting page sizes.")
            (("/bin/sh") (which "bash")))
          (substitute* "base/unixhead.mak"
            (("/bin/sh") (which "bash"))))
-      (alist-cons-after
-       'build 'build-so
-       (lambda _ (system* "make" "so"))
-      (alist-cons-after
-       'install 'install-so
-       (lambda _ (system* "make" "install-so"))
-      %standard-phases)))))
+       (alist-cons-after
+        'build 'install-ijs-so
+        (lambda* (#:key outputs #:allow-other-keys)
+          ;; need to regenerate macros
+          (system* "autoreconf" "-if")
+          (substitute* "autogen.sh"
+            (("\\$srcdir/configure") (string-append (which "bash") " $srcdir/configure")))
+          (system* "bash" "autogen.sh")
+
+          ;; build and install ijs
+          (with-directory-excursion "ijs"
+            (substitute* "autogen.sh"
+              (("/bin/sh") (which "bash")))
+            (system* "bash" "autogen.sh")
+            (substitute* "configure"
+              (("/bin/sh") (which "bash")))
+            (setenv "SHELL" (which "sh"))
+            (setenv "CONFIG_SHELL" (which "sh"))
+            (system* "./configure" (string-append "--prefix=" (assoc-ref outputs "out")))
+            (system* "make")
+            (zero? (system* "make" "install"))))
+         (alist-cons-after
+          'build 'build-so
+          (lambda _ (system* "make" "so"))
+          (alist-cons-after
+           'install 'install-so
+           (lambda _ (system* "make" "install-so"))
+           (alist-cons-after
+            'install 'install-ijs-headers
+            (lambda _
+              (let* ((out        (assoc-ref %outputs "out"))
+                     (ijsinclude (string-append out "/include/ijs/")))
+                (mkdir-p ijsinclude)
+                (for-each (lambda (file)
+                            (copy-file file (string-append ijsinclude (basename file))))
+                          (find-files "ijs/" "\\.h$"))))
+            %standard-phases)))))))
    (synopsis "PostScript and PDF interpreter")
    (description
     "Ghostscript is an interpreter for the PostScript language and the PDF
-- 
1.9.3


[-- Attachment #4: 0003-gnu-Add-CUPS.patch --]
[-- Type: text/x-patch, Size: 14373 bytes --]

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.
---
 gnu-system.am         |   1 +
 gnu/packages/cups.scm | 311 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 312 insertions(+)
 create mode 100644 gnu/packages/cups.scm

diff --git a/gnu-system.am b/gnu-system.am
index 02da1bf..456e204 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..4188d28
--- /dev/null
+++ b/gnu/packages/cups.scm
@@ -0,0 +1,311 @@
+;;; 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"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       `(,(string-append "--with-test-font-path="
+                         (assoc-ref %build-inputs "font-dejavu")
+                         "/share/fonts/truetype/DejaVuSans.ttf")
+         "--with-gnu-ld"
+         "--disable-static"
+         ,(string-append "--with-rcdir=" (assoc-ref %outputs "out") "/etc/rc.d"))
+       #: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")))))
+        %standard-phases)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fontconfig"   ,fontconfig)
+       ("freetype"     ,freetype)
+       ("font-dejavu"  ,font-dejavu) ;needed by test suite
+       ("ghostscript"  ,ghostscript)
+       ("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.")
+    ;; see COPYING for details
+    (license (list license:gpl2
+                   license:gpl2+
+                   license:gpl3
+                   license:gpl3+
+                   license:lgpl2.0+
+                   license:expat))))
+
+(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 "CUPS 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.")
+    (license license:gpl2)))
+
+(define-public cups
+  (package
+    (name "cups")
+    (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
+     `(;; 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 ((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" " "
+                 (assoc-ref %build-inputs "cups-filters") "/filter"))
+
+               ;; check for charsets in cups-filters output
+               (("/usr/share/cups/charsets")
+                (string-append
+                 (assoc-ref %build-inputs "cups-filters") "/share/cups/charsets"))
+
+               ;; install additional required filters
+               (("instfilter texttopdf texttopdf pdf")
+                "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")
+
+               ;(("/usr") (assoc-ref %outputs "out"))
+
+               ;; 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 "
+                               (assoc-ref %build-inputs "cups-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 "
+                               (assoc-ref %build-inputs "cups-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"))
+
+              ;; driver file
+              (symlink (string-append cups-filters "/share/cups/drv/cupsfilters.drv")
+                       (string-append out "/share/cups/drv/cupsfilters.drv"))
+
+              ;; ppds
+              (symlink (string-append cups-filters "/share/ppd")
+                       (string-append out "/share/ppd"))
+
+              ;; mime types
+              (for-each
+               (lambda (f)
+                 (symlink (string-append cups-filters f)
+                          (string-append out f)))
+               '("/share/cups/mime/cupsfilters.types"
+                 "/share/cups/mime/cupsfilters.convs"))
+
+              ;; 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"))
+                (system* "rm" "-rf" (string-append out banners))
+                (symlink (string-append cups-filters banners)
+                         (string-append out banners)))
+
+              ;; assorted data
+              (let ((data "/share/cups/data"))
+                (system* "rm" "-rf" (string-append out data))
+                (symlink (string-append cups-filters data)
+                         (string-append out data)))))
+          %standard-phases)))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("avahi" ,avahi)
+       ("gnutls" ,gnutls)
+       ("cups-filters" ,cups-filters)
+       ("zlib"  ,zlib)))
+    (home-page "http://www.cups.org")
+    (synopsis "CUPS 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.")
+    (license license:gpl2)))
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-09 14:57     ` Ricardo Wurmus
@ 2015-01-10 11:32       ` Ludovic Courtès
  2015-01-15 16:30         ` Ricardo Wurmus
  0 siblings, 1 reply; 10+ messages in thread
From: Ludovic Courtès @ 2015-01-10 11:32 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de> skribis:

> * IJS is part of ghostscript, but for some reason is not built even when
>   passing "--with-ijs" as a configure flag.  There is no configure
>   script and no usable Makefile in ./ijs, so we actually have to run
>   ./autogen.sh after generating macros that work with libtool 2.4.2.
>   The second patch adds a new very ugly phase that does just that.  I'd
>   love to change this if someone can come up with a better way to do
>   this.

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?

> * cups-filters also depends on CUPS libraries and binaries, so
>   cups-minimal has been added to satisfy this dependency.  During
>   installation, cups-filters attempts to install files to the CUPS
>   package output directory.  The install phase is modified to direct the
>   files to the output directory of cups-filters.

OK.

> * the CUPS package itself then adds links to the required files in
>   cups-filters.  CUPS does not come with a mechanism to load filters,
>   backends, charsets, mime files, etc from alternative directories, so I
>   chose to use symlinks.

Makes sense.

> * the CUPS tests are run before the installation of any symlinks, so to
>   establish a working test environment quite a lot of fixes to the test
>   phase are needed.  Without the files from cups-filters seven tests
>   fail.  With the files in place only three tests fail.  I have not been
>   able to fix these remaining failures, even though I have been trying
>   for a long time.

Fair enough.

> 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.

> From 36eac76f1aa129f2e22d4341fe4d64d4c5b8fd0a Mon Sep 17 00:00:00 2001
> From: Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
> Date: Fri, 9 Jan 2015 15:19:54 +0100
> Subject: [PATCH 2/3] gnu: ghostscript: build IJS library
>
> * gnu/packages/ghostscript.scm (ghostscript): build and install IJS library
>   and header files.

[...]

> +    `(#:configure-flags '("--with-ijs")

If this flag has no effect, better remove it.  However, it would be good
to add a comment explaining that --with-ijs cannot be used because it
doesn’t work as advertised.

> +       (alist-cons-after
> +        'build 'install-ijs-so
> +        (lambda* (#:key outputs #:allow-other-keys)
> +          ;; need to regenerate macros
> +          (system* "autoreconf" "-if")
> +          (substitute* "autogen.sh"
> +            (("\\$srcdir/configure") (string-append (which "bash") " $srcdir/configure")))
> +          (system* "bash" "autogen.sh")
> +
> +          ;; build and install ijs
> +          (with-directory-excursion "ijs"
> +            (substitute* "autogen.sh"
> +              (("/bin/sh") (which "bash")))
> +            (system* "bash" "autogen.sh")
> +            (substitute* "configure"
> +              (("/bin/sh") (which "bash")))
> +            (setenv "SHELL" (which "sh"))
> +            (setenv "CONFIG_SHELL" (which "sh"))
> +            (system* "./configure" (string-append "--prefix=" (assoc-ref outputs "out")))
> +            (system* "make")
> +            (zero? (system* "make" "install"))))
> +         (alist-cons-after
> +          'build 'build-so
> +          (lambda _ (system* "make" "so"))
> +          (alist-cons-after
> +           'install 'install-so
> +           (lambda _ (system* "make" "install-so"))
> +           (alist-cons-after
> +            'install 'install-ijs-headers
> +            (lambda _
> +              (let* ((out        (assoc-ref %outputs "out"))
> +                     (ijsinclude (string-append out "/include/ijs/")))
> +                (mkdir-p ijsinclude)
> +                (for-each (lambda (file)
> +                            (copy-file file (string-append ijsinclude (basename file))))
> +                          (find-files "ijs/" "\\.h$"))))
> +            %standard-phases)))))))

I suspect this will be simplified by making IJS a separate package.

BTW, make sure that phases return #t on success on #f on failure.  A
phase that finishes with a call type ‘system*’ must typically do:

  (lambda _
    ;; ...
    (zero? (system* "make" "install")))

> 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.

> +       #: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’?

> +    (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.")
> +    ;; 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?

> +(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?

> +(define-public cups
> +  (package
> +    (name "cups")

I think this should inherit from ‘cups-minimal’, and just change the
‘name’ and ‘arguments’ fields.  WDYT?

> +        (alist-cons-before
> +         'check
> +         'patch-tests

This is a hairy phase ;-), but I guess there’s no real alternative.
Please try to keep lines below 80 chars.

> +                (system* "rm" "-rf" (string-append out banners))

Use ‘delete-file-recursively’ instead.

> +                (system* "rm" "-rf" (string-append out data))

And here too.

> +    (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.

Thanks for working on it!

Ludo’.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-10 11:32       ` Ludovic Courtès
@ 2015-01-15 16:30         ` Ricardo Wurmus
  2015-01-15 20:21           ` Ludovic Courtès
  0 siblings, 1 reply; 10+ messages in thread
From: Ricardo Wurmus @ 2015-01-15 16:30 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

[-- 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


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH]: Add CUPS.
  2015-01-15 16:30         ` Ricardo Wurmus
@ 2015-01-15 20:21           ` Ludovic Courtès
  0 siblings, 0 replies; 10+ messages in thread
From: Ludovic Courtès @ 2015-01-15 20:21 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de> skribis:

> 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.

[...]

> +(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)))

I’m surprised ,(autoconf-wrapper) isn’t needed rather than ,autoconf
(the former has shebangs of generated files patched appropriately.)  But
if it works this way, OK to push.

> 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.

LGTM.

Thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-01-15 20:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2015-01-15 20:21           ` Ludovic Courtès
2015-01-05 15:37 ` Ludovic Courtès

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).