Merge pull request #12368 from abbradar/ghostscript-update

Ghostscript and CUPS updates
This commit is contained in:
Nikolay Amiantov 2016-01-22 21:46:52 +03:00
commit c3abcd8415
16 changed files with 320 additions and 218 deletions

View file

@ -145,6 +145,26 @@ nginx.override {
from the ELPA, MELPA, and MELPA Stable repositories.
</para>
</listitem>
<listitem>
<para>CUPS, installed by <literal>services.printing</literal> module, now
has its data directory in <filename>/var/lib/cups</filename>. Old
configurations from <filename>/etc/cups</filename> are moved there
automatically, but there might be problems. Also configuration options
<literal>services.printing.cupsdConf</literal> and
<literal>services.printing.cupsdFilesConf</literal> were removed
because they had been allowing one to override configuration variables
required for CUPS to work at all on NixOS. For most use cases,
<literal>services.printing.extraConf</literal> and new option
<literal>services.printing.extraFilesConf</literal> should be enough;
if you encounter a situation when they are not, please file a bug.</para>
<para>There are also Gutenprint improvements; in particular, a new option
<literal>services.printing.gutenprint</literal> is added to enable automatic
updating of Gutenprint PPMs; it's greatly recommended to enable it instead
of adding <literal>gutenprint</literal> to the <literal>drivers</literal> list.
</para>
</listitem>
</itemizedlist>

View file

@ -99,6 +99,8 @@ with lib;
(mkRemovedOptionModule [ "services" "syslog-ng" "listenToJournal" ])
(mkRemovedOptionModule [ "ec2" "metadata" ])
(mkRemovedOptionModule [ "services" "openvpn" "enable" ])
(mkRemovedOptionModule [ "services" "printing" "cupsFilesConf" ])
(mkRemovedOptionModule [ "services" "printing" "cupsdConf" ])
];
}

View file

@ -4,10 +4,13 @@ with lib;
let
inherit (pkgs) cups cups_filters;
inherit (pkgs) cups cups-pk-helper cups_filters gutenprint;
cfg = config.services.printing;
avahiEnabled = config.services.avahi.enable;
polkitEnabled = config.security.polkit.enable;
additionalBackends = pkgs.runCommand "additional-cups-backends" { }
''
mkdir -p $out
@ -30,12 +33,75 @@ let
# cupsd.conf tells cupsd to use this tree.
bindir = pkgs.buildEnv {
name = "cups-progs";
paths = cfg.drivers;
pathsToLink = [ "/lib/cups" "/share/cups" "/bin" "/etc/cups" ];
paths =
[ cups additionalBackends cups_filters pkgs.ghostscript ]
++ optional cfg.gutenprint gutenprint
++ cfg.drivers;
pathsToLink = [ "/lib/cups" "/share/cups" "/bin" ];
postBuild = cfg.bindirCmds;
ignoreCollisions = true;
};
writeConf = name: text: pkgs.writeTextFile {
inherit name text;
destination = "/etc/cups/${name}";
};
cupsFilesFile = writeConf "cups-files.conf" ''
SystemGroup root wheel
ServerBin ${bindir}/lib/cups
DataDir ${bindir}/share/cups
AccessLog syslog
ErrorLog syslog
PageLog syslog
TempDir ${cfg.tempDir}
# User and group used to run external programs, including
# those that actually send the job to the printer. Note that
# Udev sets the group of printer devices to `lp', so we want
# these programs to run as `lp' as well.
User cups
Group lp
${cfg.extraFilesConf}
'';
cupsdFile = writeConf "cupsd.conf" ''
${concatMapStrings (addr: ''
Listen ${addr}
'') cfg.listenAddresses}
Listen /var/run/cups/cups.sock
SetEnv PATH ${bindir}/lib/cups/filter:${bindir}/bin
DefaultShared ${if cfg.defaultShared then "Yes" else "No"}
Browsing ${if cfg.browsing then "Yes" else "No"}
WebInterface ${if cfg.webInterface then "Yes" else "No"}
${cfg.extraConf}
'';
browsedFile = writeConf "cups-browsed.conf" cfg.browsedConf;
rootdir = pkgs.buildEnv {
name = "cups-progs";
paths = [
cupsFilesFile
cupsdFile
(writeConf "client.conf" cfg.clientConf)
(writeConf "snmp.conf" cfg.snmpConf)
] ++ optional avahiEnabled browsedFile
++ optional cfg.gutenprint gutenprint
++ cfg.drivers;
pathsToLink = [ "/etc/cups" ];
ignoreCollisions = true;
};
in
{
@ -96,25 +162,11 @@ in
'';
};
cupsdConf = mkOption {
type = types.lines;
default = "";
example =
''
BrowsePoll cups.example.com
LogLevel debug
'';
description = ''
The contents of the configuration file of the CUPS daemon
(<filename>cupsd.conf</filename>).
'';
};
cupsFilesConf = mkOption {
extraFilesConf = mkOption {
type = types.lines;
default = "";
description = ''
The contents of the configuration file of the CUPS daemon
Extra contents of the configuration file of the CUPS daemon
(<filename>cups-files.conf</filename>).
'';
};
@ -171,8 +223,18 @@ in
'';
};
gutenprint = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable Gutenprint drivers for CUPS. This includes auto-updating
Gutenprint PPD files.
'';
};
drivers = mkOption {
type = types.listOf types.path;
default = [];
example = literalExample "[ pkgs.splix ]";
description = ''
CUPS drivers to use. Drivers provided by CUPS, cups-filters, Ghostscript
@ -204,15 +266,10 @@ in
description = "CUPS printing services";
};
environment.systemPackages = [ cups ];
environment.systemPackages = [ cups ] ++ optional polkitEnabled cups-pk-helper;
environment.etc."cups".source = "/var/lib/cups";
environment.etc."cups/client.conf".text = cfg.clientConf;
environment.etc."cups/cups-files.conf".text = cfg.cupsFilesConf;
environment.etc."cups/cupsd.conf".text = cfg.cupsdConf;
environment.etc."cups/cups-browsed.conf".text = cfg.browsedConf;
environment.etc."cups/snmp.conf".text = cfg.snmpConf;
services.dbus.packages = [ cups ];
services.dbus.packages = [ cups ] ++ optional polkitEnabled cups-pk-helper;
# Cups uses libusb to talk to printers, and does not use the
# linux kernel driver. If the driver is not in a black list, it
@ -230,19 +287,35 @@ in
preStart =
''
mkdir -m 0755 -p /etc/cups
mkdir -m 0700 -p /var/cache/cups
mkdir -m 0700 -p /var/spool/cups
mkdir -m 0755 -p ${cfg.tempDir}
'';
restartTriggers =
[ config.environment.etc."cups/cups-files.conf".source
config.environment.etc."cups/cupsd.conf".source
];
mkdir -m 0755 -p /var/lib/cups
# Backwards compatibility
if [ ! -L /etc/cups ]; then
mv /etc/cups/* /var/lib/cups
rmdir /etc/cups
ln -s /var/lib/cups /etc/cups
fi
# First, clean existing symlinks
if [ -n "$(ls /var/lib/cups)" ]; then
for i in /var/lib/cups/*; do
[ -L "$i" ] && rm "$i"
done
fi
# Then, populate it with static files
cd ${rootdir}/etc/cups
for i in *; do
[ ! -e "/var/lib/cups/$i" ] && ln -s "${rootdir}/etc/cups/$i" "/var/lib/cups/$i"
done
${optionalString cfg.gutenprint ''
${gutenprint}/bin/cups-genppdupdate
''}
'';
};
systemd.services.cups-browsed = mkIf config.services.avahi.enable
systemd.services.cups-browsed = mkIf avahiEnabled
{ description = "CUPS Remote Printer Discovery";
wantedBy = [ "multi-user.target" ];
@ -255,54 +328,13 @@ in
serviceConfig.ExecStart = "${cups_filters}/bin/cups-browsed";
restartTriggers =
[ config.environment.etc."cups/cups-browsed.conf".source
];
restartTriggers = [ browsedFile ];
};
services.printing.drivers =
[ cups pkgs.ghostscript pkgs.cups_filters additionalBackends
pkgs.perl pkgs.coreutils pkgs.gnused pkgs.bc pkgs.gawk pkgs.gnugrep
];
services.printing.cupsFilesConf =
''
SystemGroup root wheel
ServerBin ${bindir}/lib/cups
DataDir ${bindir}/share/cups
AccessLog syslog
ErrorLog syslog
PageLog syslog
TempDir ${cfg.tempDir}
# User and group used to run external programs, including
# those that actually send the job to the printer. Note that
# Udev sets the group of printer devices to `lp', so we want
# these programs to run as `lp' as well.
User cups
Group lp
'';
services.printing.cupsdConf =
services.printing.extraConf =
''
LogLevel info
${concatMapStrings (addr: ''
Listen ${addr}
'') cfg.listenAddresses}
Listen /var/run/cups/cups.sock
SetEnv PATH ${bindir}/lib/cups/filter:${bindir}/bin:${bindir}/sbin
DefaultShared ${if cfg.defaultShared then "Yes" else "No"}
Browsing ${if cfg.browsing then "Yes" else "No"}
WebInterface ${if cfg.webInterface then "Yes" else "No"}
DefaultAuthType Basic
<Location />
@ -343,8 +375,6 @@ in
Order deny,allow
</Limit>
</Policy>
${cfg.extraConf}
'';
security.pam.services.cups = {};

View file

@ -27,6 +27,8 @@ stdenv.mkDerivation rec {
#configureFlags = [ "--disable-print" ];
enableParallelBuilding = true;
# "screenshot" needs this.
NIX_LDFLAGS = "-rpath ${xorg.libX11}/lib"
+ stdenv.lib.optionalString stdenv.isDarwin " -lintl";

View file

@ -1,16 +1,25 @@
{ stdenv, fetchurl, autoreconfHook }:
{ stdenv, fetchurl, fetchpatch, autoreconfHook }:
let version = "9.16";
let version = "9.18";
in
stdenv.mkDerivation {
name = "ijs-${version}";
src = fetchurl {
url = "http://downloads.ghostscript.com/public/ghostscript-${version}.tar.bz2";
sha256 = "0vdqbjkickb0109lk6397bb2zjmg1s46dac5p5j4gfxa4pwl8b9y";
sha256 = "18ad90za28dxybajqwf3y3dld87cgkx1ljllmcnc7ysspfxzbnl3";
};
prePatch = "cd ijs";
patches = [
# http://bugs.ghostscript.com/show_bug.cgi?id=696246
(fetchpatch {
name = "devijs-account-for-device-subclassing.patch";
url = "http://git.ghostscript.com/?p=ghostpdl.git;a=patch;h=b68e05c3";
sha256 = "1c3fzfjzvf15z533vpw3l3da8wcxw98qi3p1lc6lf13940a57c7n";
})
];
postPatch = "cd ijs";
enableParallelBuilding = true;

View file

@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
sha256 = "1v63lqc6bhhxwkpa43qmz8phqs8ci4dhzizyy16d3vkb20m846z8";
};
patches = [ ./libspectre-0.2.7-gs918.patch ];
buildInputs = [
# Need `libgs.so'.
pkgconfig ghostscript cairo /*for tests*/

View file

@ -0,0 +1,42 @@
Fixed error namespace for >=ghostscript-gpl-9.18
https://bugs.gentoo.org/563540
--- libspectre-0.2.7/libspectre/spectre-gs.c
+++ libspectre-0.2.7/libspectre/spectre-gs.c
@@ -43,12 +43,12 @@
if (code <= -100) {
switch (code) {
- case e_Fatal:
+ case gs_error_Fatal:
fprintf (stderr, "fatal internal error %d", code);
return TRUE;
break;
- case e_ExecStackUnderflow:
+ case gs_error_ExecStackUnderflow:
fprintf (stderr, "stack overflow %d", code);
return TRUE;
break;
@@ -109,9 +109,9 @@
set = _spectre_strdup_printf ("%d %d translate\n", -x, -y);
error = gsapi_run_string_continue (ghostscript_instance, set, strlen (set),
0, &exit_code);
- error = error == e_NeedInput ? 0 : error;
+ error = error == gs_error_NeedInput ? 0 : error;
free (set);
- if (error != e_NeedInput && critic_error_code (error)) {
+ if (error != gs_error_NeedInput && critic_error_code (error)) {
fclose (fd);
return FALSE;
}
@@ -126,7 +126,7 @@
read = fread (buf, sizeof (char), to_read, fd);
error = gsapi_run_string_continue (ghostscript_instance,
buf, read, 0, &exit_code);
- error = error == e_NeedInput ? 0 : error;
+ error = error == gs_error_NeedInput ? 0 : error;
left -= read;
}

View file

@ -1,13 +1,13 @@
{ stdenv, fetchurl, pcre, zlib, perl }:
let version = "5.1.3";
let version = "6.0.0";
in
stdenv.mkDerivation rec {
name = "qpdf-${version}";
src = fetchurl {
url = "mirror://sourceforge/qpdf/qpdf/${version}/${name}.tar.gz";
sha256 = "1lq1v7xghvl6p4hgrwbps3a13ad6lh4ib3myimb83hxgsgd4n5nm";
sha256 = "0csj2p2gkxrc0rk8ykymlsdgfas96vzf1dip3y1x7z1q9plwgzd9";
};
nativeBuildInputs = [ perl ];
@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
'';
doCheck = true;
enableParallelBuilding = true;
meta = with stdenv.lib; {
homepage = http://qpdf.sourceforge.net/;

View file

@ -3,7 +3,7 @@
, libusb ? null, gnutls ? null, avahi ? null, libpaper ? null
}:
let version = "2.0.4"; in
let version = "2.1.2"; in
with stdenv.lib;
stdenv.mkDerivation {
@ -13,7 +13,7 @@ stdenv.mkDerivation {
src = fetchurl {
url = "https://www.cups.org/software/${version}/cups-${version}-source.tar.bz2";
sha256 = "1gaakz24k6x5nc09rmpiq0xq20j1qdjc3szag8qwmyi4ky6ydmg1";
sha256 = "1bc1y8fjgh54ryh520gk63i5rbagn6jijsrskcqlibhfm0xwmc5s";
};
buildInputs = [ pkgconfig zlib libjpeg libpng libtiff libusb gnutls libpaper ]
@ -51,7 +51,6 @@ stdenv.mkDerivation {
# Idem for /etc.
"PAMDIR=$(out)/etc/pam.d"
"DBUSDIR=$(out)/etc/dbus-1"
"INITDIR=$(out)/etc/rc.d"
"XINETD=$(out)/etc/xinetd.d"
"SERVERROOT=$(out)/etc/cups"
# Idem for /usr.
@ -61,6 +60,8 @@ stdenv.mkDerivation {
"CUPS_PRIMARY_SYSTEM_GROUP=root"
];
enableParallelBuilding = true;
postInstall = ''
# Delete obsolete stuff that conflicts with cups-filters.
rm -rf $out/share/cups/banners $out/share/cups/data/testprint

View file

@ -1,26 +1,24 @@
{ stdenv, fetchurl, fetchpatch, pkgconfig, cups, poppler, poppler_utils, fontconfig
, libjpeg, libpng, perl, ijs, qpdf, dbus, substituteAll, bash, avahi }:
{ stdenv, fetchurl, pkgconfig, cups, poppler, poppler_utils, fontconfig
, libjpeg, libpng, perl, ijs, qpdf, dbus, substituteAll, bash, avahi
, makeWrapper, coreutils, gnused, bc, gawk, gnugrep, which
}:
stdenv.mkDerivation rec {
let
binPath = stdenv.lib.makeSearchPath "bin" [ coreutils gnused bc gawk gnugrep which ];
in stdenv.mkDerivation rec {
name = "cups-filters-${version}";
version = "1.0.71";
version = "1.5.0";
src = fetchurl {
url = "http://openprinting.org/download/cups-filters/${name}.tar.xz";
sha256 = "07wwlqcykfjfqcwj1bxk60ggahyaw7wcx32n5s104d1qkhham01i";
sha256 = "0cjrh4wpdhkvmahfkg8f2a2qzilcq12i78q5arwr7dnmx1j8hapj";
};
patches = [
./longer-shell-path.patch
(fetchpatch { # drop on update
name = "poppler-0.34.patch";
url = "https://bugs.linuxfoundation.org/attachment.cgi?id=493";
sha256 = "18za83q0b0n4hpvvw76jsv0hm89zmijvps2z5kg1srickqlxj891";
})
];
nativeBuildInputs = [ pkgconfig makeWrapper ];
buildInputs = [
pkgconfig cups poppler poppler_utils fontconfig libjpeg libpng perl
cups poppler poppler_utils fontconfig libjpeg libpng perl
ijs qpdf dbus avahi
];
@ -29,9 +27,10 @@ stdenv.mkDerivation rec {
"--enable-imagefilters"
"--with-rcdir=no"
"--with-shell=${stdenv.shell}"
"--with-test-font-path=/path-does-not-exist"
];
makeFlags = "CUPS_SERVERBIN=$(out)/lib/cups CUPS_DATADIR=$(out)/share/cups CUPS_SERVERROOT=$(out)/etc/cups";
makeFlags = [ "CUPS_SERVERBIN=$(out)/lib/cups" "CUPS_DATADIR=$(out)/share/cups" "CUPS_SERVERROOT=$(out)/etc/cups" ];
postConfigure =
''
@ -46,11 +45,13 @@ stdenv.mkDerivation rec {
postInstall =
''
for i in $out/lib/cups/filter/{pstopdf,texttops,imagetops}; do
substituteInPlace $i --replace 'which ' 'type -p '
for i in $out/lib/cups/filter/*; do
wrapProgram "$i" --prefix PATH ':' ${binPath}
done
'';
enableParallelBuilding = true;
meta = {
homepage = http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters;
description = "Backends, filters, and other software that was once part of the core CUPS distribution but is no longer maintained by Apple Inc";

View file

@ -1,13 +0,0 @@
diff --git a/filter/foomatic-rip/foomaticrip.c b/filter/foomatic-rip/foomaticrip.c
index 90a851c..689a2bd 100644
--- a/filter/foomatic-rip/foomaticrip.c
+++ b/filter/foomatic-rip/foomaticrip.c
@@ -174,7 +174,7 @@ char cupsfilterpath[PATH_MAX] = "/usr/local/lib/cups/filter:"
"/opt/cups/filter:"
"/usr/lib/cups/filter";
-char modern_shell[64] = SHELL;
+char modern_shell[] = SHELL;
void config_set_option(const char *key, const char *value)
{

View file

@ -1,78 +1,41 @@
# this package was called gimp-print in the past
{ fetchurl, stdenv, pkgconfig, composableDerivation, cups
, libtiff, libpng, makeWrapper, openssl, gimp }:
{ stdenv, lib, fetchurl, pkgconfig
, ijs, makeWrapper
, gimp2Support ? true, gimp
, cupsSupport ? true, cups, libusb, perl
}:
let
version = "5.2.10";
inherit (composableDerivation) edf wwf;
in
composableDerivation.composableDerivation {} {
name = "gutenprint-${version}";
stdenv.mkDerivation rec {
name = "gutenprint-5.2.11";
src = fetchurl {
url = "mirror://sourceforge/gimp-print/gutenprint-${version}.tar.bz2";
sha256 = "0n8f6vpadnagrp6yib3mca1c3lgwl4vmma16s44riyrd84mka7s3";
url = "mirror://sourceforge/gimp-print/${name}.tar.bz2";
sha256 = "1yadw96rgp1z0jv1wxrz6cds36nb693w3xlv596xw9r5w394r8y1";
};
# gimp, gui is still not working (TODO)
buildInputs = [ makeWrapper openssl pkgconfig ];
nativeBuildInputs = [ makeWrapper pkgconfig ];
buildInputs =
[ ijs ]
++ lib.optionals gimp2Support [ gimp.gtk gimp ]
++ lib.optionals cupsSupport [ cups libusb perl ];
configureFlags = ["--enable-static-genppd"];
NIX_CFLAGS_COMPILE="-include stdio.h";
#preConfigure = ''
# configureFlags="--with-cups=$out/usr-cups $configureFlags"
#'';
/*
is this recommended? without it this warning is printed:
configureFlags = lib.optionals cupsSupport [
"--disable-static-genppd" # should be harmless on NixOS
];
***WARNING: Use of --disable-static-genppd or --disable-static
when building CUPS is very dangerous. The build may
fail when building the PPD files, or may *SILENTLY*
build incorrect PPD files or cause other problems.
Please review the README and release notes carefully!
*/
enableParallelBuilding = true;
installPhase = ''
eval "make install $installArgs"
mkdir -p $out/lib/cups
ln -s $out/filter $out/lib/cups/
wrapProgram $out/filter/rastertogutenprint.5.2 --prefix LD_LIBRARY_PATH : $out/lib
wrapProgram $out/sbin/cups-genppd.5.2 --prefix LD_LIBRARY_PATH : $out/lib
'';
# Testing is very, very long.
# doCheck = true;
meta = {
installFlags =
lib.optionals cupsSupport [ "cups_conf_datadir=$(out)/share/cups" "cups_conf_serverbin=$(out)/lib/cups" "cups_conf_serverroot=$(out)/etc/cups" ]
++ lib.optionals gimp2Support [ "gimp2_plug_indir=$(out)/${gimp.name}-plugins" ];
meta = with stdenv.lib; {
description = "Ghostscript and cups printer drivers";
homepage = http://sourceforge.net/projects/gimp-print/;
license = "GPL";
license = licenses.gpl2;
platforms = platforms.linux;
};
mergeAttrBy = { installArgs = stdenv.lib.concat; };
# most interpreters aren't tested yet.. (see python for example how to do it)
flags =
wwf {
name = "gimp2";
enable = {
buildInputs = [gimp gimp.gtk];
installArgs = [ "gimp2_plug_indir=$out/${gimp.name}-plugins" ];
};
}
// {
cups = {
set = {
buildInputs = [cups libtiff libpng ];
installArgs = [ "cups_conf_datadir=$out cups_conf_serverbin=$out cups_conf_serverroot=$out"];
};
};
}
;
cfg = {
gimp2Support = true;
cupsSupport = true;
};
}

View file

@ -1,20 +0,0 @@
Description: Sanity check for memory allocation.
In gs_heap_alloc_bytes(), add a sanity check to ensure we don't overflow the
variable holding the actual number of bytes we allocate.
Origin: upstream, http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=0c0b085
Author: Chris Liddell <chris.liddell@artifex.com>
Forwarded: yes
Bug-Debian: http://bugs.debian.org/793489
Last-Update: 2015-07-26
--- a/base/gsmalloc.c
+++ b/base/gsmalloc.c
@@ -178,7 +178,7 @@
} else {
uint added = size + sizeof(gs_malloc_block_t);
- if (mmem->limit - added < mmem->used)
+ if (added <= size || mmem->limit - added < mmem->used)
set_msg("exceeded limit");
else if ((ptr = (byte *) Memento_label(malloc(added), cname)) == 0)
set_msg("failed");

View file

@ -1,6 +1,6 @@
{ stdenv, fetchurl, pkgconfig, zlib, expat, openssl
{ stdenv, fetchurl, fetchpatch, pkgconfig, zlib, expat, openssl, autoconf
, libjpeg, libpng, libtiff, freetype, fontconfig, lcms2, libpaper, jbig2dec
, libiconv
, libiconv, ijs
, x11Support ? false, xlibsWrapper ? null
, cupsSupport ? false, cups ? null
}:
@ -8,8 +8,8 @@
assert x11Support -> xlibsWrapper != null;
assert cupsSupport -> cups != null;
let
version = "9.15";
sha256 = "0p1isp6ssfay141klirn7n9s8b546vcz6paksfmksbwy0ljsypg6";
version = "9.18";
sha256 = "18ad90za28dxybajqwf3y3dld87cgkx1ljllmcnc7ysspfxzbnl3";
fonts = stdenv.mkDerivation {
name = "ghostscript-fonts";
@ -45,28 +45,58 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true;
nativeBuildInputs = [ pkgconfig autoconf ];
buildInputs =
[ pkgconfig zlib expat openssl
[ zlib expat openssl
libjpeg libpng libtiff freetype fontconfig lcms2 libpaper jbig2dec
libiconv
libiconv ijs
]
++ stdenv.lib.optional x11Support xlibsWrapper
++ stdenv.lib.optional cupsSupport cups
# [] # maybe sometimes jpeg2000 support
;
patches = [
./urw-font-files.patch
# fetched from debian's ghostscript 9.15_dfsg-1 (called 020150707~0c0b085.patch there)
./CVE-2015-3228.patch
# http://bugs.ghostscript.com/show_bug.cgi?id=696281
(fetchpatch {
name = "fix-check-for-using-shared-freetype-lib.patch";
url = "http://git.ghostscript.com/?p=ghostpdl.git;a=patch;h=8f5d285";
sha256 = "1f0k043rng7f0rfl9hhb89qzvvksqmkrikmm38p61yfx51l325xr";
})
# http://bugs.ghostscript.com/show_bug.cgi?id=696301
(fetchpatch {
name = "add-gserrors.h-to-the-installed-files.patch";
url = "http://git.ghostscript.com/?p=ghostpdl.git;a=patch;h=feafe5e5";
sha256 = "0s4ayzakjv809dkn7vilxwvs4dw35p3pw942ml91bk9z4kkaxyz7";
})
# http://bugs.ghostscript.com/show_bug.cgi?id=696246
(fetchpatch {
name = "guard-against-NULL-base-for-non-clist-devices.patch";
url = "http://git.ghostscript.com/?p=ghostpdl.git;a=patch;h=007bd77d08d800e6b07274d62e3c91be7c4a3f47";
sha256 = "1la53273agl92lpy7qd0qhgzynx8b90hrk8g9jsj3055ssn6rqwh";
})
(fetchpatch {
name = "ensure-plib-devices-always-use-the-clist.patch";
url = "http://git.ghostscript.com/?p=ghostpdl.git;a=patch;h=1bdbe4f87dc57648821e613ebcc591b84e8b35b3";
sha256 = "1cq83fgyvrycapxm69v4r9f9qhzsr40ygrc3bkp8pk15wsmvq0k7";
})
(fetchpatch {
name = "prevent-rinkj-device-crash-when-misconfigured.patch";
url = "http://git.ghostscript.com/?p=ghostpdl.git;a=patch;h=5571ddfa377c5d7d98f55af40e693814ac287ae4";
sha256 = "08iqdlrngi6k0ml2b71dj5q136fyp1s9g0rr87ayyshn0k0lxwkv";
})
];
makeFlags = [ "cups_serverroot=$(out)" "cups_serverbin=$(out)/lib/cups" ];
preConfigure = ''
rm -rf jpeg libpng zlib jasper expat tiff lcms{,2} jbig2dec openjpeg freetype cups/libs
# requires in-tree (heavily patched) openjpeg
rm -rf jpeg libpng zlib jasper expat tiff lcms{,2} jbig2dec freetype cups/libs ijs
sed "s@if ( test -f \$(INCLUDE)[^ ]* )@if ( true )@; s@INCLUDE=/usr/include@INCLUDE=/no-such-path@" -i base/unix-aux.mak
sed "s@^ZLIBDIR=.*@ZLIBDIR=${zlib}/include@" -i configure.ac
autoconf
'';
configureFlags =

View file

@ -5,16 +5,20 @@
, withGUI ? true
}:
stdenv.mkDerivation rec {
name = "system-config-printer-1.3.12";
let majorVersion = "1.5";
in stdenv.mkDerivation rec {
name = "system-config-printer-${majorVersion}.7";
src = fetchurl {
url = "http://cyberelk.net/tim/data/system-config-printer/1.3/${name}.tar.xz";
url = "http://cyberelk.net/tim/data/system-config-printer/${majorVersion}/${name}.tar.xz";
sha256 = "1cg9n75rg5l9vr1925n2g771kga33imikyl0mf70lww2sfgvs18r";
};
propagatedBuildInputs = [ pythonPackages.pycurl ];
patches = [ ./detect_serverbindir.patch ];
buildInputs =
[ intltool pkgconfig glib udev libusb1 cups xmlto
libxml2 docbook_xml_dtd_412 docbook_xsl desktop_file_utils
@ -32,17 +36,28 @@ stdenv.mkDerivation rec {
postInstall =
''
export makeWrapperArgs="--set prefix $out"
wrapPythonPrograms
# The program imports itself, so we need to move shell wrappers to a proper place.
fixupWrapper() {
mv "$out/share/system-config-printer/$2.py" \
"$out/bin/$1"
sed -i "s/.$2.py-wrapped/$2.py/g" "$out/bin/$1"
mv "$out/share/system-config-printer/.$2.py-wrapped" \
"$out/share/system-config-printer/$2.py"
}
fixupWrapper scp-dbus-service scp-dbus-service
fixupWrapper system-config-printer system-config-printer
fixupWrapper system-config-printer-applet applet
# This __init__.py is both executed and imported.
( cd $out/share/system-config-printer/troubleshoot
mv .__init__.py-wrapped __init__.py
)
# Upstream issue: https://github.com/twaugh/system-config-printer/issues/28
sed -i -e "s|/usr/bin|$out/bin|" "$out/share/dbus-1/services/org.fedoraproject.Config.Printing.service"
'';
meta = {
homepage = http://cyberelk.net/tim/software/system-config-printer/;
platforms = stdenv.lib.platforms.linux;
license = stdenv.lib.licenses.gpl2;
};
}

View file

@ -0,0 +1,17 @@
diff --git a/cupshelpers/config.py.in b/cupshelpers/config.py.in
index 55abbfc..1244327 100644
--- a/cupshelpers/config.py.in
+++ b/cupshelpers/config.py.in
@@ -22,3 +22,12 @@
prefix="@prefix@"
sysconfdir="@sysconfdir@"
cupsserverbindir="@cupsserverbindir@"
+
+try:
+ with open("/etc/cups/cups-files.conf") as config:
+ for cfgline in config:
+ args = cfgline.split(" ")
+ if len(args) == 2 and args[0] == "ServerBin":
+ cupsserverbindir = args[1].strip()
+except OSError:
+ pass