> 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.wur...@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.wur...@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
>From a78114013bdbbff310014815cb47abd38bb0c59c Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus <ricardo.wur...@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 <andr...@enge.fr> ;;; Copyright © 2014 Mark H Weaver <m...@netris.org> +;;; Copyright © 2015 Ricardo Wurmus <rek...@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
>From 72a50808f1b2d3f391b5da688bfe0b841d95af30 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus <ricardo.wur...@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 <rek...@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