Hello community,
here is the log from the commit of package cups-drivers
checked in at Sat Mar 22 11:39:41 CET 2008.
--------
--- cups-drivers/cups-drivers.changes 2008-01-24 12:06:58.000000000 +0100
+++ /mounts/work_src_done/STABLE/cups-drivers/cups-drivers.changes 2008-03-18 17:22:55.078628000 +0100
@@ -1,0 +2,11 @@
+Tue Mar 18 17:21:20 CET 2008 - kssingvo@suse.de
+
+- update OpenPrinting database to 2007-MAR-17:
+ * new printer: EPSON LP-S4000
+ * Fix default setting of the option "HalftoningAlgorithm" for some
+ drivers
+ * 62 Postscript and 60 pxlmono new PPD files for 60 Ricoh Family
+ Group printers
+ * New "<patents>" tag to driver entries
+
+-------------------------------------------------------------------
Old:
----
foomatic-db-bzr-20080116.tar.bz2
foomatic-db-engine-bzr-20080116.tar.bz2
foomatic-filters-bzr-20080116.tar.bz2
New:
----
foomatic-db-bzr-20080317.tar.bz2
foomatic-db-engine-bzr-20080317.tar.bz2
foomatic-filters-bzr-20080317.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cups-drivers.spec ++++++
--- /var/tmp/diff_new_pack.h10260/_old 2008-03-22 11:39:30.000000000 +0100
+++ /var/tmp/diff_new_pack.h10260/_new 2008-03-22 11:39:30.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package cups-drivers (Version 1.3.5)
+# spec file for package cups-drivers (Version 1.3.6)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -10,6 +10,7 @@
# norootforbuild
+
Name: cups-drivers
BuildRequires: a2ps bison cairo-devel cups-devel cupsddk foomatic-filters
BuildRequires: gcc-c++ ghostscript-ijs-devel ghostscript-library
@@ -19,8 +20,8 @@
License: GPL v2 only; GPL v2 or later
Group: Hardware/Printing
Summary: Drivers for the Common UNIX Printing System
-Version: 1.3.5
-Release: 6
+Version: 1.3.6
+Release: 1
Provides: cups_drv
Requires: ghostscript-library >= 7.05, foomatic-filters
PreReq: sysvinit, sh-utils, procps
@@ -30,7 +31,7 @@
# number of jobs to run simultaneously
%define numprocs %(cat %_sourcedir/CPUs 2>/dev/null || echo 1)
# linuxprinting.org database variables
-%define DBDate 20080116
+%define DBDate 20080317
%define foomaticver bzr
%define gutenprintver 5.0.2
%define splixver 1.0.2
@@ -541,6 +542,14 @@
%{_libdir}/gimp/2.0/plug-ins/*
%changelog
+* Tue Mar 18 2008 kssingvo@suse.de
+- update OpenPrinting database to 2007-MAR-17:
+ * new printer: EPSON LP-S4000
+ * Fix default setting of the option "HalftoningAlgorithm" for some
+ drivers
+ * 62 Postscript and 60 pxlmono new PPD files for 60 Ricoh Family
+ Group printers
+ * New "<patents>" tag to driver entries
* Thu Jan 24 2008 kssingvo@suse.de
- fixed autobuild issue in %%post when host runs old cups-1.x version
* Tue Jan 22 2008 kssingvo@suse.de
++++++ foomatic-db-bzr-20080116.tar.bz2 -> foomatic-db-bzr-20080317.tar.bz2 ++++++
++++ 4150 lines of diff (skipped)
++++++ foomatic-db-engine-bzr-20080116.tar.bz2 -> foomatic-db-engine-bzr-20080317.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/foomatic-db-engine-bzr-20080116/ChangeLog new/foomatic-db-engine-bzr-20080317/ChangeLog
--- old/foomatic-db-engine-bzr-20080116/ChangeLog 2008-01-10 16:21:29.000000000 +0100
+++ new/foomatic-db-engine-bzr-20080317/ChangeLog 2008-03-17 21:18:14.000000000 +0100
@@ -1,3 +1,10 @@
+2008-01-29 Till Kamppeter
+
+ * foomatic-perl-data.c: Added "<patents>" tag to driver entries. Drivers
+ which are free software but contain (possibly) patented algorithms
+ (like JBIG compression) should be marked with this tag to warn users
+ about the patent issues when auto-downloading the driver.
+
2007-12-13 Till Kamppeter
* foomatic-perl-data.c: Added "<group>" tag to driver entries. Drivers
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/foomatic-db-engine-bzr-20080116/foomatic-perl-data.c new/foomatic-db-engine-bzr-20080317/foomatic-perl-data.c
--- old/foomatic-db-engine-bzr-20080116/foomatic-perl-data.c 2008-01-10 16:21:29.000000000 +0100
+++ new/foomatic-db-engine-bzr-20080317/foomatic-perl-data.c 2008-03-17 21:18:14.000000000 +0100
@@ -199,6 +199,7 @@
xmlChar *license;
xmlChar *licensetext;
xmlChar *free;
+ xmlChar *patents;
int num_supportcontacts;
xmlChar **supportcontacts;
xmlChar **supportcontacturls;
@@ -333,6 +334,7 @@
xmlChar *license;
xmlChar *licensetext;
xmlChar *free;
+ xmlChar *patents;
int num_supportcontacts;
xmlChar **supportcontacts;
xmlChar **supportcontacturls;
@@ -1579,6 +1581,7 @@
ret->license = NULL;
ret->licensetext = NULL;
ret->free = NULL;
+ ret->patents = NULL;
ret->num_supportcontacts = 0;
ret->supportcontacts = NULL;
ret->supportcontacturls = NULL;
@@ -1683,7 +1686,13 @@
if (debug) fprintf(stderr, " Driver is free software\n");
} else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "nonfreesoftware"))) {
ret->free = (xmlChar *)"0";
- if (debug) fprintf(stderr, " Driver is not free software:\n");
+ if (debug) fprintf(stderr, " Driver is not free software\n");
+ } else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "patents"))) {
+ ret->patents = (xmlChar *)"1";
+ if (debug) fprintf(stderr, " There are patents applying to this driver's code\n");
+ } else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "nopatents"))) {
+ ret->patents = (xmlChar *)"0";
+ if (debug) fprintf(stderr, " There are no patents applying to this driver's code\n");
} else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "supportcontacts"))) {
cur2 = cur1->xmlChildrenNode;
if (debug) fprintf(stderr, " Driver support contacts:\n");
@@ -2770,6 +2779,7 @@
ret->license = NULL;
ret->licensetext = NULL;
ret->free = NULL;
+ ret->patents = NULL;
ret->num_supportcontacts = 0;
ret->supportcontacts = NULL;
ret->supportcontacturls = NULL;
@@ -2861,6 +2871,12 @@
} else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "nonfreesoftware"))) {
ret->free = (xmlChar *)"0";
if (debug) fprintf(stderr, " Driver is not free software\n");
+ } else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "patents"))) {
+ ret->patents = (xmlChar *)"1";
+ if (debug) fprintf(stderr, " There are patents applying to this driver's code\n");
+ } else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "nopatents"))) {
+ ret->patents = (xmlChar *)"0";
+ if (debug) fprintf(stderr, " There are no patents applying to this driver's code\n");
} else if ((!xmlStrcmp(cur1->name, (const xmlChar *) "supportcontacts"))) {
cur2 = cur1->xmlChildrenNode;
if (debug) fprintf(stderr, " Driver support contacts:\n");
@@ -3694,6 +3710,10 @@
printf(" 'free' => '%s',\n",
overview->overviewDrivers[k]->free);
}
+ if (overview->overviewDrivers[k]->patents != NULL) {
+ printf(" 'patents' => '%s',\n",
+ overview->overviewDrivers[k]->patents);
+ }
if (overview->overviewDrivers[k]->num_supportcontacts != 0) {
printf(" 'supportcontacts' => [\n");
for (l = 0;
@@ -4114,6 +4134,10 @@
printf(" 'free' => '%s',\n",
combo->free);
}
+ if (combo->patents != NULL) {
+ printf(" 'patents' => '%s',\n",
+ combo->patents);
+ }
if (combo->num_supportcontacts != 0) {
printf(" 'supportcontacts' => [\n");
for (i = 0;
@@ -4605,6 +4629,10 @@
printf(" 'free' => '%s',\n",
driver->free);
}
+ if (driver->patents != NULL) {
+ printf(" 'patents' => '%s',\n",
+ driver->patents);
+ }
if (driver->num_supportcontacts != 0) {
printf(" 'supportcontacts' => [\n");
for (i = 0;
++++++ foomatic-filters-bzr-20080116.tar.bz2 -> foomatic-filters-bzr-20080317.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/foomatic-filters-bzr-20080116/ChangeLog new/foomatic-filters-bzr-20080317/ChangeLog
--- old/foomatic-filters-bzr-20080116/ChangeLog 2008-01-10 16:21:48.000000000 +0100
+++ new/foomatic-filters-bzr-20080317/ChangeLog 2008-03-17 21:18:22.000000000 +0100
@@ -1,3 +1,15 @@
+2008-03-12 Till Kamppeter
+
+ * foomatic-rip.in: foomatic-rip did not kill all its subprocesses
+ (forks, renderer, driver, auxiliary filters) when the print job
+ got canceled and therefore the main process killed with a TERM
+ signal by the spooler. As CUPS backends stay running on job
+ cancelation, the printer keeps printing the data fed by the
+ orphan renderer/driver processes. Now the TERM signal is caught
+ and a recursive clean-up is done. For subshells which can run
+ a pipeline or script of various subprocesses a process group
+ is created which gets killed entirely on a TERM signal.
+
2007-12-04 Till Kamppeter
* foomatic-gswrapper.in: Let Ghostscript always use buffered
@@ -9,7 +21,7 @@
2007-11-30 Till Kamppeter
* foomatic-rip.in: More bug fixes:
- o If the CUPS-style duples option
+ o If the CUPS-style duplex option
"-o sides={one|two}-sided[-{long|short}-edge]" was supplied,
the "Duplex" option could be set to "0", "LongEdge", or
"ShortEdge", which do not exist in the "Duplex" options in
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/foomatic-filters-bzr-20080116/foomatic-rip.in new/foomatic-filters-bzr-20080317/foomatic-rip.in
--- old/foomatic-filters-bzr-20080116/foomatic-rip.in 2008-01-10 16:21:48.000000000 +0100
+++ new/foomatic-filters-bzr-20080317/foomatic-rip.in 2008-03-17 21:18:23.000000000 +0100
@@ -155,19 +155,19 @@
my $EXIT_JOBERR = 3; # job is defective
my $EXIT_SIGNAL = 4; # terminated after catching signal
my $EXIT_ENGAGED = 5; # printer is otherwise engaged (connection
- # refused)
+ # refused)
my $EXIT_STARVED = 6; # starved for system resources
my $EXIT_PRNERR_NORETRY_ACCESS_DENIED = 7; # bad password? bad port
- # permissions?
+ # permissions?
my $EXIT_PRNERR_NOT_RESPONDING = 8; # just doesn't answer at all
- # (turned off?)
+ # (turned off?)
my $EXIT_PRNERR_NORETRY_BAD_SETTINGS = 9; # interface settings are invalid
my $EXIT_PRNERR_NO_SUCH_ADDRESS = 10; # address lookup failed, may be
- # transient
+ # transient
my $EXIT_PRNERR_NORETRY_NO_SUCH_ADDRESS = 11; # address lookup failed, not
- # transient
+ # transient
my $EXIT_INCAPABLE = 50; # printer wants (lacks) features
- # or resources
+ # or resources
# Standard Unix signal names
#my SIGHUP = 1;
#my SIGINT = 2;
@@ -181,6 +181,21 @@
my $ESPIPE = 29; # the errno value when seeking a pipe or socket
+# The modern_shell() function will register the PIDs of all shell calls,
+# so that rip_die() can kill these processes
+my %pids;
+
+# $kidgeneration stays 0 for the main process, child processes of the
+# main process get $kidgeneration = 1, their children 2, ...
+my $kidgeneration = 0;
+
+# Catch signals
+my $retval = $EXIT_PRINTED;
+use sigtrap qw(handler set_exit_canceled normal-signals
+ handler set_exit_error error-signals
+ handler set_exit_prnerr USR1
+ handler set_exit_prnerr_noretry USR2
+ handler set_exit_engaged TTIN);
## Some important variables
@@ -2153,7 +2168,7 @@
}
-
+
## From here on we have to repeat all the rest of the program for
## every file to print
@@ -3538,13 +3553,8 @@
print $logh "${added_lf}Starting renderer\n";
- # Catch signals
+ # Reset return value of the renderer
$retval = $EXIT_PRINTED;
- use sigtrap qw(handler set_exit_prnerr USR1
- handler set_exit_prnerr_noretry USR2
- handler set_exit_engaged TTIN);
-
- # Variables for the kid processes reporting their state
# Set up a pipe for the kids to pass their exit stat to the main process
pipe KID_MESSAGE, KID_MESSAGE_IN;
@@ -3585,6 +3595,8 @@
return ( *KID3, $kid3 );
} else {
+ $kidgeneration += 1;
+
close KID3;
pipe KID4_IN, KID4;
@@ -3774,6 +3786,8 @@
print $logh "KID3 finished\n";
exit $EXIT_PRINTED;
} else {
+ $kidgeneration += 1;
+
# child, trailing task on the pipe; we write jcl stuff
close KID4;
close KID3_IN;
@@ -4112,6 +4126,8 @@
return ( *KID1_IN, $kid1 );
} else {
+ $kidgeneration += 1;
+
# We go on reading the job data and stuff it into the file
# converter
close KID1_IN;
@@ -4253,6 +4269,8 @@
print $logh "KID1 finished\n";
exit $EXIT_PRINTED;
} else {
+ $kidgeneration += 1;
+
# child, first part of the pipe, reading in the data from
# standard input and stuffing it into the file converter
# after putting in the already read data (in $alreadyread)
@@ -4580,6 +4598,8 @@
return ( *KID0_IN, $kid0 );
}
+ $kidgeneration += 1;
+
# we are the kid; we generate the documentation page
close KID0_IN;
@@ -4867,66 +4887,100 @@
my $errmsg = "$!";
my $errcod = $! + 0;
- # Close the documentation page generator (if it was used)
- if ($docgeneratorpid) {
- if ($kid0) {
- print $logh "Killing process $kid0 (KID0)\n";
- kill(9, $kid0);
+ # Log that we are dying ...
+ print $logh "Process dying with \"$message\", exit stat: $exitstat\n\terror: $errmsg ($errcod)\n";
+
+ print $logh "Cleaning up ...\n";
+ foreach my $killsignal (15, 9) {
+
+ # Kill all registered subshells
+ foreach my $pid (keys %pids) {
+ print $logh "Killing process $pid ($pids{$pid}) and its subprocesses with signal $killsignal\n";
+ # This call kills the process group with group ID $pid, the
+ # group which was formed from the initial process $pid which
+ # contains $pid and all its subprocesses
+ kill(-$killsignal, $pid);
+ # If the system does not support process groups and therefore
+ # the call above does not kill anything, kill at least $pid
+ kill($killsignal, $pid);
}
- $docgeneratorpid = 0;
- }
- # Close the file converter (if it was used)
- if ($fileconverterpid) {
+ # Close the documentation page generator (if it was used)
+ if ($kid0) {
+ print $logh "Killing process $kid0 (KID0) with signal $killsignal\n";
+ kill($killsignal, $kid0);
+ }
+
+ # Close the file converter (if it was used)
if ($kid2) {
- print $logh "Killing process $kid2 (KID2)\n";
- kill(9, $kid2);
+ print $logh "Killing process $kid2 (KID2) with signal $killsignal\n";
+ kill($killsignal, $kid2);
}
if ($kid1) {
- print $logh "Killing process $kid1 (KID1)\n";
- kill(9, $kid1);
+ print $logh "Killing process $kid1 (KID1) with signal $killsignal\n";
+ kill($killsignal, $kid1);
}
- $fileconverterpid = 0;
- }
- # Close the renderer
- if ($rendererpid) {
+ # Close the renderer
if ($kid4) {
- print $logh "Killing process $kid4 (KID4)\n";
- kill(9, $kid4);
+ print $logh "Killing process $kid4 (KID4) with signal $killsignal\n";
+ kill($killsignal, $kid4);
}
if ($kid3) {
- print $logh "Killing process $kid3 (KID3)\n";
- kill(9, $kid3);
+ print $logh "Killing process $kid3 (KID3) with signal $killsignal\n";
+ kill($killsignal, $kid3);
}
- $rendererpid = 0;
+
+ # Wait some time for the processes to close
+ sleep(5 - $kidgeneration) if $killsignal != 9;
}
- print $logh "Process dying with \"$message\", exit stat: $exitstat\n\terror: $errmsg ($errcod)\n";
- if ($spooler eq 'ppr_int') {
- # Special error handling for PPR intefaces
- $message =~ s/\\/\\\\/;
- $message =~ s/\"/\\\"/;
- my @messagelines = split("\n", $message);
- my $firstline = "TRUE";
- for my $line (@messagelines) {
- modern_system("lib/alert $printer $firstline \"$line\"");
- $firstline = "FALSE";
+ # Do the debug dump and the PPR error handling only from the main process
+ if ($kidgeneration == 0) { # We are the main process
+
+ if ($spooler eq 'ppr_int') {
+ # Special error handling for PPR intefaces
+ $message =~ s/\\/\\\\/;
+ $message =~ s/\"/\\\"/;
+ my @messagelines = split("\n", $message);
+ my $firstline = "TRUE";
+ for my $line (@messagelines) {
+ modern_system("lib/alert $printer $firstline \"$line\"");
+ $firstline = "FALSE";
+ }
+ } else {
+ print STDERR $message . "\n";
+ }
+ if ($debug) {
+ use Data::Dumper;
+ local $Data::Dumper::Purity=1;
+ local $Data::Dumper::Indent=1;
+ print $logh Dumper($dat);
}
- } else {
- print STDERR $message . "\n";
- }
- if ($debug) {
- use Data::Dumper;
- local $Data::Dumper::Purity=1;
- local $Data::Dumper::Indent=1;
- print $logh Dumper($dat);
}
+
+ ## The End
+ print $logh "${added_lf}Closing foomatic-rip.\n";
+ close $logh;
+
exit $exitstat;
}
# Signal handling routines
+sub do_nothing {
+}
+
+sub set_exit_canceled {
+ $retval = $EXIT_PRINTED;
+ rip_die ("Caught termination signal: Job canceled", $retval);
+}
+
+sub set_exit_error {
+ $retval = $EXIT_SIGNAL;
+ rip_die ("Caught error signal: Error in renderer, driver, or foomatic-rip", $retval);
+}
+
sub set_exit_prnerr {
$retval = $EXIT_PRNERR;
}
@@ -6592,20 +6646,36 @@
sub modern_system {
my (@list) = @_;
- if (($modern_shell =~ /.+/) && ($modern_shell ne '/bin/sh')) {
- # a "modern" shell other than the default shell was specified
- my $pid = fork();
-
- ($pid < 0) && die "failed to fork()";
-
- if ($pid == 0) { # child, execute the commands under a modern shell
- exec($modern_shell, "-c", @list);
- die "exec($modern_shell, \"-c\", @list);";
- } else { # parent, wait for the child
- waitpid($pid, 0);
- }
- } else { # the system shell is "modern" enough.
- system(@list);
+ if ($modern_shell |~ /.+/) {
+ # No "modern" shell other than the default shell was specified
+ $modern_shell = '/bin/sh';
+ }
+
+ my $pid = fork();
+ ($pid < 0) && die "failed to fork()";
+
+ if ($pid == 0) { # child, execute the commands under a modern shell
+ # If the system supports process groups, we create a process
+ # group of this subshell process. All the children of this
+ # process (calls of external filters, renderers, or drivers)
+ # will be members of this process group and so by killing this
+ # process group we can kill all subprocesses and so we can
+ # cleanly cancel print jobs
+ eval("setpgrp()");
+ # Stop catching signals
+ #use sigtrap qw(die normal-signals error-signals
+ # handler do_nothing USR1 USR2 TTIN);
+ exec($modern_shell, "-c", @list);
+ rip_die("exec($modern_shell, \"-c\", @list);",
+ $EXIT_PRNERR_NORETRY_BAD_SETTINGS);
+ } else { # parent, register child's PID, wait for the child, and
+ # unregister the PID
+ $pids{$pid} = substr(join(" ", @list), 0, 100) .
+ (length(join(" ", @list)) > 100 ? "..." : "");
+ print $logh "Starting process $pid: \"$pids{$pid}\"\n";
+ waitpid($pid, 0);
+ print $logh "Process $pid ending: \"$pids{$pid}\"\n";
+ delete $pids{$pid};
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org