diff --git a/hpcups-update-ppds.sh b/hpcups-update-ppds.sh new file mode 100644 index 0000000..15b899d --- /dev/null +++ b/hpcups-update-ppds.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +## Copyright (C) 2010 Red Hat, Inc. +## Authors: +## Tim Waugh + +## This program 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 2 of the License, or +## (at your option) any later version. + +## This program 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 this program; if not, write to the Free Software +## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +## Purpose: Update hpcups PPDs when necessary. + +sock=/var/run/cups/cups.sock +running=$(LC_ALL=C lpstat -h "$sock" -r 2>/dev/null) +if [ "$?" -ne 0 ] +then + # No lpstat in path + exit 0 +fi + +if [ -z "${running##*not*}" ] +then + # scheduler is not running + exit 0 +fi + +trap 'rm -f "$tmpdir"/models; rmdir "$tmpdir"; exit 0' \ + 0 HUP INT QUIT ILL ABRT PIPE TERM + +debug=true +tmpdir="$(mktemp -d)" +for ppd in /etc/cups/ppd/*.ppd +do + [ -r "$ppd" ] || continue + queue="${ppd#/etc/cups/ppd/}" + queue="${queue%.ppd}" + lpstat -h "$sock" -p "$queue" &>/dev/null || continue + + # We have PPD associated with a queue. Find out its NickName + $debug && echo "Examining $queue" + nickname="$(grep '^\*NickName:' "$ppd")" + nickname="${nickname#*\"}" # strip text up to and incl first double quote + nickname="${nickname%\"*}" # strip final double quote + $debug && echo "NickName is: $nickname" + + # Is it an hpcups PPD? + [ -z "${nickname##*, hpcups*}" ] || continue + $debug && echo "hpcups: true" + + # Does it have an hpPrinterLanguage attribute? + grep -q '^\*hpPrinterLanguage:' "$ppd" &>/dev/null && continue + $debug && echo "No hpPrinterLanguage attribute" + + # No: need to regenerate the PPD. + if [ ! -f "$tmpdir/models" ] + then + # Get list of driver URIs and NickNames + lpinfo -h "$sock" --include-schemes=drv -m 2>/dev/null >"$tmpdir/models" + fi + + # Strip hpcups version from NickName + nickname="${nickname%, hpcups*}" + $debug && echo "Stripped NickName: $nickname" + while read line + do + uri=${line%% *} + nn="${line#$uri }" + [ -z "${nn##*, hpcups*}" ] || continue + + nn="${nn%, hpcups*}" + if [ "$nn" == "$nickname" ] + then + $debug && echo "Match found, URI: $uri" + + # Unfortunately CUPS will reset the page size when we + # change the PPD, due to the weird page size names that + # HPLIP uses. Try to maintain the existing page size. + size="$(grep '^\*DefaultPageSize:' "$ppd")" + size="${size##* }" # strip until after first ' ' + size="${size%% *}" # strip after any ' ' + $debug && echo "PageSize is $size" + + if [ -z "${size#*Duplex}" ] + then + # Special handling for duplex sizes because HPLIP + # broke backwards compatibility with *that* too! + size="${size%Duplex}.Duplex" + fi + + null=/dev/null + $debug && null=/dev/stdout + lpadmin -h "$sock" -p "$queue" -m "$uri" &>"$null" || : + $debug && echo "PPD regenerated" + + lpadmin -h "$sock" -p "$queue" -o PageSize="$size" &>"$null" || : + $debug && echo "PageSize restored to $size" + break + fi + done <"$tmpdir/models" +done +exit 0 diff --git a/hplip.spec b/hplip.spec index 31f3234..3fca01a 100644 --- a/hplip.spec +++ b/hplip.spec @@ -1,7 +1,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip Version: 3.10.2 -Release: 7%{?dist} +Release: 8%{?dist} License: GPLv2+ and MIT Group: System Environment/Daemons Conflicts: system-config-printer < 0.6.132 @@ -389,7 +389,7 @@ fi %{_bindir}/hpcups-update-ppds &>/dev/null ||: %changelog -* Wed Apr 7 2010 Tim Waugh - 3.10.2-7 +* Wed Apr 7 2010 Tim Waugh - 3.10.2-8 - Regenerate hpcups PPDs on upgrade if necessary (bug #579355). * Fri Mar 26 2010 Jiri Popelka - 3.10.2-6 diff --git a/sources b/sources index 73c48b1..c39277f 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ 4df6f16c47ae7edd015bf2cf5155f26f hplip-3.10.2.tar.gz -110820c749dc7ec81e949c193187cb39 hpcups-update-ppds.sh