summaryrefslogtreecommitdiffstats
path: root/perl-install/printer/gimp.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/printer/gimp.pm')
-rw-r--r--perl-install/printer/gimp.pm361
1 files changed, 0 insertions, 361 deletions
diff --git a/perl-install/printer/gimp.pm b/perl-install/printer/gimp.pm
deleted file mode 100644
index 8da3a7625..000000000
--- a/perl-install/printer/gimp.pm
+++ /dev/null
@@ -1,361 +0,0 @@
-package printer::gimp;
-
-use strict;
-use run_program;
-use common;
-use printer::common;
-use printer::data;
-use printer::cups;
-
-# ------------------------------------------------------------------
-# GIMP-print related stuff
-# ------------------------------------------------------------------
-
-sub configure {
- my ($printer) = @_;
- # Do we have files to treat?
- my @configfilenames = findconfigfiles();
- return 1 if $#configfilenames < 0;
- # There is no system-wide config file, treat every user's config file
- foreach my $configfilename (@configfilenames) {
- # Load GIMP's printer config file
- my $configfilecontent = readconfigfile($configfilename);
- # Update local printer queues
- foreach my $queue (keys(%{$printer->{configured}})) {
- # Check if we have a PPD file
- if (! -r "$::prefix/etc/foomatic/$queue.ppd") {
- if (-r "$::prefix/etc/cups/ppd/$queue.ppd") {
- # If we have a PPD file in the CUPS config dir, link to it
- run_program::rooted($::prefix,
- "ln", "-sf",
- "/etc/cups/ppd/$queue.ppd",
- "/etc/foomatic/$queue.ppd");
- } elsif (-r "$::prefix/usr/share/postscript/ppd/$queue.ppd") {
- # Check PPD directory of GPR, too
- run_program::rooted(
- $::prefix,
- "ln", "-sf",
- "/usr/share/postscript/ppd/$queue.ppd",
- "/etc/foomatic/$queue.ppd");
- } else {
- # No PPD file at all? We cannot set up this printer
- next;
- }
- }
- # Add the printer entry
- if (!isprinterconfigured($queue, $configfilecontent)) {
- # Remove the old printer entry
- $configfilecontent =
- removeprinter($queue, $configfilecontent);
- # Add the new printer entry
- $configfilecontent =
- makeprinterentry($printer, $queue,
- $configfilecontent);
- }
- }
- # Default printer
- if ($printer->{DEFAULT}) {
- if ($configfilecontent !~ /^\s*Current\-Printer\s*:/m) {
- $configfilecontent =~
- s/\n/\nCurrent-Printer: $printer->{DEFAULT}\n/s;
- } else {
- if ($configfilecontent =~ /^\s*Current\-Printer\s*:\s*(\S+)\s*$/m &&
- !isprinterconfigured($1, $configfilecontent)) {
- $configfilecontent =~
- s/(Current\-Printer\s*:\s*)\S+/$1$printer->{DEFAULT}/;
- }
- }
- }
- # Write back GIMP's printer configuration file
- writeconfigfile($configfilename, $configfilecontent);
- }
- return 1;
-}
-
-sub addcupsremoteto {
- my ($printer, $queue) = @_;
- # Do we have files to treat?
- my @configfilenames = findconfigfiles();
- return 1 if $#configfilenames < 0;
- my @printerlist = printer::cups::get_remote_queues();
- my $ppdfile = "";
- if ($printer->{SPOOLER} eq "cups" &&
- (-x "$::prefix/usr/bin/curl" || -x "$::prefix/usr/bin/wget")) {
- foreach my $listentry (@printerlist) {
- next if $listentry !~ /^([^\|]+)\|([^\|]+)$/;
- my $q = $1;
- next if $q ne $queue;
- my $server = $2;
- # Remove server name from queue name
- $q =~ s/^([^@]*)@.*$/$1/;
- if (-x "$::prefix/usr/bin/wget") {
- eval(run_program::rooted(
- $::prefix, "/usr/bin/wget", "-O",
- "/etc/foomatic/$queue.ppd",
- "http://$server:631/printers/$q.ppd"));
- } else {
- eval(run_program::rooted(
- $::prefix, "/usr/bin/curl", "-o",
- "/etc/foomatic/$queue.ppd",
- "http://$server:631/printers/$q.ppd"));
- }
- # Does the file exist and is it not an error message?
- if (-r "$::prefix/etc/foomatic/$queue.ppd" &&
- cat_("$::prefix/etc/foomatic/$queue.ppd") =~ /^\*PPD-Adobe/) {
- $ppdfile = "/etc/foomatic/$queue.ppd";
- } else {
- unlink "$::prefix/etc/foomatic/$queue.ppd";
- return 0;
- }
- }
- } else { return 1 }
- # There is no system-wide config file, treat every user's config file
- foreach my $configfilename (@configfilenames) {
- # Load GIMP's printer config file
- my $configfilecontent = readconfigfile($configfilename);
- # Add the printer entry
- if (!isprinterconfigured($queue, $configfilecontent)) {
- # Remove the old printer entry
- $configfilecontent = removeprinter($queue, $configfilecontent);
- # Add the new printer entry
- $configfilecontent = makeprinterentry($printer, $queue, $configfilecontent);
- }
- # Write back GIMP's printer configuration file
- writeconfigfile($configfilename, $configfilecontent);
- }
- return 1;
-}
-
-sub removeprinterfrom {
- my ($_printer, $queue) = @_;
- # Do we have files to treat?
- my @configfilenames = findconfigfiles();
- return 1 if $#configfilenames < 0;
- # There is no system-wide config file, treat every user's config file
- foreach my $configfilename (@configfilenames) {
- # Load GIMP's printer config file
- my $configfilecontent = readconfigfile($configfilename);
- # Remove the printer entry
- $configfilecontent = removeprinter($queue, $configfilecontent);
- # Write back GIMP's printer configuration file
- writeconfigfile($configfilename, $configfilecontent);
- }
- return 1;
-}
-
-sub removelocalprintersfrom {
- my ($printer) = @_;
- # Do we have files to treat?
- my @configfilenames = findconfigfiles();
- return 1 if $#configfilenames < 0;
- # There is no system-wide config file, treat every user's config file
- foreach my $configfilename (@configfilenames) {
- # Load GIMP's printer config file
- my $configfilecontent = readconfigfile($configfilename);
- # Remove the printer entries
- foreach my $queue (keys(%{$printer->{configured}})) {
- $configfilecontent = removeprinter($queue, $configfilecontent);
- }
- # Write back GIMP's printer configuration file
- writeconfigfile($configfilename, $configfilecontent);
- }
- return 1;
-}
-
-sub makeprinterentry {
- my ($printer, $queue, $configfile) = @_;
- # Make printer's section
- $configfile = addprinter($queue, $configfile);
- # Load PPD file
- my $ppd = cat_("$::prefix/etc/foomatic/$queue.ppd");
- # Is the printer configured with GIMP-Print?
- my $gimpprintqueue = 0;
- my $gimpprintdriver = "ps2";
- if ($ppd =~ /CUPS\s*\+\s*GIMP\s*\-\s*Print/im) {
- # Native CUPS driver
- $gimpprintqueue = 1;
- $gimpprintdriver = $1 if $ppd =~ /\s*\*ModelName:\s*\"(\S+)\"\s*$/im;
- } elsif ($ppd =~ /Foomatic\s*\+\s*gimp\s*\-\s*print/im) {
- # GhostScript + Foomatic driver
- $gimpprintqueue = 1;
- $ppd =~ /\-sModel=((escp2|pcl|bjc|lexmark)\-[^\s\"\']*)/im and
- $gimpprintdriver = $1;
- }
- if ($gimpprintqueue) {
- # Get the paper size from the PPD file
- if ($ppd =~ /^\s*\*DefaultPageSize:\s*(\S+)\s*$/m) {
- my $papersize = $1;
- $configfile = removeentry($queue,
- "Media-Size", $configfile);
- $configfile = addentry($queue,
- "Media-Size: $papersize", $configfile);
- }
- $configfile = removeentry($queue, "PPD-File:", $configfile);
- $configfile = addentry($queue, "PPD-File:", $configfile);
- $configfile = removeentry($queue, "Driver:", $configfile);
- $configfile = addentry($queue, "Driver: $gimpprintdriver", $configfile);
- $configfile = removeentry($queue, "Destination:", $configfile);
- $configfile = addentry($queue,
- sprintf("Destination: /usr/bin/%s -P %s -o raw", $spoolers{$printer->{SPOOLER}}{print_command}, $queue), $configfile);
- } else {
- $configfile = removeentry($queue, "PPD-File:", $configfile);
- $configfile = addentry($queue, "PPD-File: /etc/foomatic/$queue.ppd", $configfile);
- $configfile = removeentry($queue, "Driver:", $configfile);
- $configfile = addentry($queue, "Driver: ps2", $configfile);
- $configfile = removeentry($queue, "Destination:", $configfile);
- $configfile = addentry($queue,
- sprintf("Destination: /usr/bin/%s -P %s", $spoolers{$printer->{SPOOLER}}{print_command}, $queue), $configfile);
- }
- return $configfile;
-}
-
-sub findconfigfiles() {
- my @configfilenames = (if_(-d "$::prefix/usr/lib/gimp/1.2", ".gimp-1.2/printrc"),
- if_(-d "$::prefix/usr/lib/gimp/1.3", ".gimp-1.3/printrc"),
- if_(-d "$::prefix/usr/lib/gimp/2.0", ".gimp-2.0/printrc"));
- return () unless @configfilenames;
- my @filestotreat;
- foreach (&list_passwd()) {
- last if ($#filestotreat > 50);
- my ($username, undef, $uid, $gid, undef, undef, undef, $homedir) = @$_;
- next if 0 < $uid && $uid < 500 || $username eq "nobody";
- foreach my $file (@configfilenames) {
- my $dir = "$homedir/$file";
- $dir =~ s,/[^/]*$,,;
- next if -f $dir;
- if (! -d "$::prefix$dir") {
- eval { mkdir_p("$::prefix$dir") } or next;
- run_program::rooted($::prefix, "/bin/chown", "$uid.$gid", $dir) or next;
- }
- if (! -f "$::prefix$homedir/$file") {
- eval { output("$::prefix$homedir/$file", "#PRINTRCv1 written by GIMP-PRINT 4.2.2 - 13 Sep 2002\n") } or next;
- run_program::rooted($::prefix, "/bin/chown", "$uid.$gid", "$homedir/$file") or next;
- }
- push @filestotreat, "$homedir/$file";
- }
- }
- @filestotreat;
-}
-
-sub readconfigfile {
- my ($file) = @_;
- local *F;
- open F, "< $::prefix$file" or return "";
- my $filecontent = join("", <F>);
- close F;
- return $filecontent;
-}
-
-sub writeconfigfile {
- my ($file, $filecontent) = @_;
- local *F;
- open F, "> $::prefix$file" or return 0;
- print F $filecontent;
- close F;
- return 1;
-}
-
-sub addentry {
- my ($section, $entry, $filecontent) = @_;
- my $sectionfound = 0;
- my $entryinserted = 0;
- my @lines = pop_spaces(split("\n", $filecontent));
- foreach (@lines) {
- if (!$sectionfound) {
- $sectionfound = 1 if /^\s*Printer\s*:\s*($section)\s*$/;
- } else {
- if (!/^\s*$/ && !/^\s*;/) {
- $_ = "$entry\n$_";
- $entryinserted = 1;
- last;
- }
- }
- }
- push(@lines, $entry) if $sectionfound && !$entryinserted;
- return join("\n", @lines) . "\n";
-}
-
-sub addprinter {
- my ($section, $filecontent) = @_;
- foreach (pop_spaces(split("\n", $filecontent))) {
- # section already there, nothing to be done
- return $filecontent if /^\s*Printer\s*:\s*($section)\s*$/;
- }
- return $filecontent . "\nPrinter: $section\n";
-}
-
-sub pop_spaces {
- my @lines = @_;
- pop @lines while @lines && $lines[-1] !~ /\S/;
-}
-
-sub removeentry {
- my ($section, $entry, $filecontent) = @_;
- my $sectionfound;
- my @lines = pop_spaces(split(/^/, $filecontent));
- foreach (@lines) {
- if (!$sectionfound) {
- $sectionfound = /^\s*Printer\s*:\s*($section)\s*$/;
- } else {
- last if /^\s*Printer\s*:\s*.*\s*$/; # Next section
- if (/^\s*$entry/) {
- $_ = "";
- last;
- }
- }
- }
- return join "", @lines;
-}
-
-sub removeprinter {
- my ($section, $filecontent) = @_;
- my $sectionfound;
- my @lines = pop_spaces(split(/^/, $filecontent));
- foreach (@lines) {
- if (!$sectionfound) {
- if (/^\s*Printer\s*:\s*($section)\s*$/) {
- $_ = "";
- $sectionfound = 1;
- }
- } else {
- last if /^\s*Printer\s*:\s*.*\s*$/; # Next section
- $_ = "";
- }
- }
- return join "", @lines;
-}
-
-sub isprinterconfigured {
- my ($queue, $filecontent) = @_;
- my $sectionfound = 0;
- my $done = 0;
- my $drivernotps2 = 0;
- my $ppdfileset = 0;
- my $nonrawprinting = 0;
- foreach (split("\n", $filecontent)) {
- if (!$sectionfound) {
- if (/^\s*Printer\s*:\s*($queue)\s*$/) {
- $sectionfound = 1;
- }
- } else {
- if (/^\s*Printer\s*:\s*.*\s*$/) { # Next section
- $done = 1;
- last;
- } elsif (/^\s*Driver:\s*(\S+)\s*$/) {
- $drivernotps2 = $1 ne "ps2";
- } elsif (/^\s*PPD\-File:\s*(\S+)\s*$/) {
- $ppdfileset = 1;
- } elsif (my ($dest) = /^\s*Destination:\s*(\S+.*)$/) {
- $nonrawprinting = $dest !~ /\-o\s*raw/;
- }
- }
- }
- return 0 if $done && !$sectionfound; # FIXME: IMPOSSIBLE; should be just $done
- return 1 if $ppdfileset || $drivernotps2 || $nonrawprinting;
- return 0;
-}
-
-
-# ------------------------------------------------------------------
-
-1;