summaryrefslogtreecommitdiffstats
path: root/perl-install
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install')
-rw-r--r--perl-install/printer.pm10
-rw-r--r--perl-install/printerdrake.pm143
2 files changed, 119 insertions, 34 deletions
diff --git a/perl-install/printer.pm b/perl-install/printer.pm
index a592dbcb8..9ed8dbb90 100644
--- a/perl-install/printer.pm
+++ b/perl-install/printer.pm
@@ -110,6 +110,14 @@ sub stop_service ($) {
|| die "Could not stop $service!";
}
+sub files_exist {
+ my @files = @_;
+ for (@files) {
+ if (! -f "$prefix$_") {return 0;}
+ }
+ return 1;
+}
+
sub copy_printer_params($$) {
my ($from, $to) = @_;
map { $to->{$_} = $from->{$_} } grep { $_ ne 'configured' } keys %$from;
@@ -750,7 +758,7 @@ sub print_pages($@) {
# images must be treated seperately
if ($page =~ /\.jpg$/) {
system(($::testing ? "$prefix" : "chroot $prefix/ ") .
- "convert $page -page 427x654+100+65 PS:- | " .
+ "/usr/bin/convert $page -page 427x654+100+65 PS:- | " .
"$lpr -s $printer->{SPOOLER} -P $queue");
} else {
run_program::rooted($prefix, $lpr, "-s", $printer->{SPOOLER},
diff --git a/perl-install/printerdrake.pm b/perl-install/printerdrake.pm
index f4c6a621e..7d75106bd 100644
--- a/perl-install/printerdrake.pm
+++ b/perl-install/printerdrake.pm
@@ -281,7 +281,10 @@ complete => sub {
#- LPD does not support filtered queues to a remote LPD server by itself
#- It needs an additional program as "rlpr"
- $printer->{SPOOLER} eq 'lpd' and $in->do_pkgs->install('rlpr');
+ if (($printer->{SPOOLER} eq 'lpd') && (!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/rlpr))))) {
+ $in->do_pkgs->install('rlpr');
+ }
1;
}
@@ -370,7 +373,10 @@ complete => sub {
($smbpassword && ":$smbpassword") . "@")), ($workgroup && ("$workgroup/")),
($smbserver || $smbserverip), "/$smbshare");
- $in->do_pkgs->install('samba-client');
+ if ((!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/smbclient))))) {
+ $in->do_pkgs->install('samba-client');
+ }
$printer->{SPOOLER} eq 'cups' and printer::restart_queue($printer);
1;
}
@@ -440,7 +446,11 @@ complete => sub {
($ncppassword && ":$ncppassword") . "@")),
"$ncpserver/$ncpqueue");
- $in->do_pkgs->install('ncpfs');
+ if ((!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/nprint))))) {
+ $in->do_pkgs->install('ncpfs');
+ }
+
1;
}
@@ -489,7 +499,11 @@ complete => sub {
join '', ("socket://$remotehost", $remoteport ? (":$remoteport") : ());
#- LPD and LPRng need netcat ('nc') to access to socket printers
- $printer->{SPOOLER} eq 'lpd' || $printer->{SPOOLER} eq 'lprng' and $in->do_pkgs->install('nc');
+ if ((($printer->{SPOOLER} eq 'lpd') || ($printer->{SPOOLER} eq 'lprng'))&&
+ (!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/nc))))) {
+ $in->do_pkgs->install('nc');
+ }
1;
}
@@ -519,13 +533,32 @@ complete => sub {
return 0;
}
);
- if ($printer->{currentqueue}{'connect'} =~ /^smb:/) {
- $in->do_pkgs->install('samba-client');
- printer::restart_queue($printer);
+
+ # If the chosen protocol needs additional software, install it.
+
+ # LPD does not support filtered queues to a remote LPD server by itself
+ # It needs an additional program as "rlpr"
+ if (($printer->{currentqueue}{'connect'} =~ /^lpd:/) &&
+ ($printer->{SPOOLER} eq 'lpd') && (!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/rlpr))))) {
+ $in->do_pkgs->install('rlpr');
+ }
+ if (($printer->{currentqueue}{'connect'} =~ /^smb:/) &&
+ (!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/smbclient))))) {
+ $in->do_pkgs->install('samba-client');
+ }
+ if (($printer->{currentqueue}{'connect'} =~ /^ncp:/) &&
+ (!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/nprint))))) {
+ $in->do_pkgs->install('ncpfs');
}
- if ($printer->{currentqueue}{'connect'} =~ /^ncp:/) {
- $in->do_pkgs->install('ncpfs');
- printer::restart_queue($printer);
+ #- LPD and LPRng need netcat ('nc') to access to socket printers
+ if (($printer->{currentqueue}{'connect'} =~ /^socket:/) &&
+ (($printer->{SPOOLER} eq 'lpd') || ($printer->{SPOOLER} eq 'lprng'))&&
+ (!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/nc))))) {
+ $in->do_pkgs->install('nc');
}
1;
}
@@ -961,7 +994,10 @@ In most cases it is enough to print the standard test page."),
my $asciitestpage = "/usr/share/printer-testpages/testpage.asc";
my @testpages;
# Install the filter to convert the photo test page to PS
- $photo && $in->do_pkgs->install('ImageMagick');
+ if (($photo) && (!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/convert))))) {
+ $in->do_pkgs->install('ImageMagick');
+ }
# set up list of pages to print
$standard && push (@testpages, $stdtestpage);
$altletter && push (@testpages, $altlttestpage);
@@ -1019,29 +1055,59 @@ sub install_spooler {
my ($printer, $in) = @_;
if (!$::testing) {
if ($printer->{SPOOLER} eq "cups") {
- $in->do_pkgs->install(('cups', 'xpp', 'qtcups',
- if_($in->do_pkgs->is_installed('kdebase'), 'kups'),
- ($::expert ? 'cups-drivers' : ())));
+ if ((!$::testing) &&
+ (!printer::files_exist((qw(/usr/lib/cups/cgi-bin/printers.cgi
+ /usr/bin/xpp
+ /usr/bin/qtcups),
+ (printer::files_exist("/usr/bin/kwin")?
+ "/usr/bin/kups" : ()),
+ ($::expert ?
+ "/usr/share/cups/model/postscript.ppd.gz" : ())
+ )))) {
+ $in->do_pkgs->install(('cups', 'xpp', 'qtcups',
+ if_($in->do_pkgs->is_installed('kdebase'), 'kups'),
+ ($::expert ? 'cups-drivers' : ())));
+ }
# Start daemon
printer::start_service("cups");
- sleep 1;
+ #sleep 1;
} elsif ($printer->{SPOOLER} eq "lpd") {
# "lpr" conflicts with "LPRng", remove "LPRng"
- $in->do_pkgs->remove_nodeps('LPRng');
- $in->do_pkgs->install('lpr');
+ if ((!$::testing) &&
+ (printer::files_exist((qw(/usr/lib/filters/lpf))))) {
+ my $w = $in->wait_message('', _("Removing LPRng..."));
+ $in->do_pkgs->remove_nodeps('LPRng');
+ }
+ if ((!$::testing) &&
+ (!printer::files_exist((qw(/usr/sbin/lpf
+ /usr/sbin/lpd))))) {
+ $in->do_pkgs->install('lpr');
+ }
# Start daemon
printer::restart_service("lpd");
- sleep 1;
+ #sleep 1;
} elsif ($printer->{SPOOLER} eq "lprng") {
# "LPRng" conflicts with "lpr", remove "lpr"
- $in->do_pkgs->remove_nodeps('lpr');
- $in->do_pkgs->install('LPRng');
+ if ((!$::testing) &&
+ (printer::files_exist((qw(/usr/sbin/lpf))))) {
+ my $w = $in->wait_message('', _("Removing LPD..."));
+ $in->do_pkgs->remove_nodeps('lpr');
+ }
+ if ((!$::testing) &&
+ (!printer::files_exist((qw(/usr/lib/filters/lpf
+ /usr/sbin/lpd))))) {
+ $in->do_pkgs->install('LPRng');
+ }
# Start daemon
printer::restart_service("lpd");
- sleep 1;
+ #sleep 1;
} elsif ($printer->{SPOOLER} eq "pdq") {
- $in->do_pkgs->install('pdq');
- # PDQ has no daemon
+ if ((!$::testing) &&
+ (!printer::files_exist((qw(/usr/bin/pdq
+ /usr/X11R6/bin/xpdq))))) {
+ $in->do_pkgs->install('pdq');
+ }
+ # PDQ has no daemon, so nothing needs to be started
}
}
}
@@ -1052,19 +1118,30 @@ sub main {
# printerdrake does not work without foomatic, and for more convenience
# we install some more stuff
- if (!$::testing) {
- $in->do_pkgs->install('foomatic', 'printer-utils','printer-testpages',
- if_($in->do_pkgs->is_installed('gimp'), 'gimpprint'));
- }
+ {
+ my $w = $in->wait_message('', _("Checking installed software..."));
+ if ((!$::testing) &&
+ (!printer::files_exist((qw(/usr/sbin/foomatic-configure
+ /usr/lib/perl5/site_perl/5.6.1/Foomatic/DB.pm
+ /usr/bin/escputil
+ /usr/share/printer-testpages/testprint.ps
+ ),
+ (printer::files_exist("/usr/bin/gimp") ?
+ "/usr/lib/gimp/1.2/plug-ins/print" : ())
+ )))) {
+ $in->do_pkgs->install('foomatic', 'printer-utils','printer-testpages',
+ if_($in->do_pkgs->is_installed('gimp'), 'gimpprint'));
+ }
- # only experts should be asked for the spooler
- !$::expert && ($printer->{SPOOLER} ||= 'cups');
+ # only experts should be asked for the spooler
+ !$::expert && ($printer->{SPOOLER} ||= 'cups');
- # If we have chosen a spooler, install it.
- if (($printer->{SPOOLER}) && ($printer->{SPOOLER} ne '')) {
- install_spooler($printer, $in);
- }
+ # If we have chosen a spooler, install it.
+ if (($printer->{SPOOLER}) && ($printer->{SPOOLER} ne '')) {
+ install_spooler($printer, $in);
+ }
+ }
# Control variables for the main loop
my ($queue, $continue, $newqueue, $editqueue, $expertswitch) =
('', 1, 0, 0, 0);