diff --git a/gutenprint-foomaticppdupdate b/gutenprint-foomaticppdupdate new file mode 100644 index 0000000..53f6a0c --- /dev/null +++ b/gutenprint-foomaticppdupdate @@ -0,0 +1,125 @@ +#!/usr/bin/python + +## gutenprint-foomaticppdupdate + +## A utility for updating foomatic-generated PPDs so that they work with +## a newly-installed gutenprint package. + +## Copyright (C) 2007 Red Hat, Inc. +## Copyright (C) 2007 Tim Waugh " + sys.exit (1) + +gutenprint_version = sys.argv[1] +dry_run = True + +def generate_ppd (ppdfile, printer, driver): + (r, w) = popen2.popen2 (["foomatic-ppdfile", + "-p", printer, + "-d", driver]) + w.close () + ppd = r.readlines () + r.close () + fname = ppdfile + ".tmp" + try: + file(fname, "w").writelines (ppd) + except IOError, e: + print e + raise + + ppdobj = cups.PPD (fname) + os.remove (fname) + return ppdobj + +def update_ppdfile (ppdfile): + ppd = cups.PPD (ppdfile) + attr = ppd.findAttr ("FoomaticIDs") + if not attr: + return + + IDs = attr.value.split (" ") + if len (IDs) != 2: + print "Don't understand FoomaticIDs: %s" % IDs + return + + if not IDs[1].startswith ("gutenprint"): + return + + attr = ppd.findAttr ("FoomaticRIPCommandLine") + if not attr: + return + + cmdline = attr.value + STP_VERSION="STP_VERSION=" + i = cmdline.find (STP_VERSION) + if i == -1: + return + + i += len (STP_VERSION) + j = i + 1 + end = len (cmdline) + while j < end: + ch = cmdline[j] + if ch != '.' and not ch.isdigit (): + break + j += 1 + + version = cmdline[i:j] + if gutenprint_version == version: + return + + # Needs updating. + try: + genppd = generate_ppd (ppdfile, IDs[0], IDs[1]) + except: + return + + os.environ['FILE'] = ppdfile + os.system ('cp -af "$FILE" "$FILE".bak') + + def update_options (options, newppd, origppd): + for newopt in options: + origopt = origppd.findOption (newopt.keyword) + if origopt: + newppd.markOption (newopt.keyword, origopt.defchoice) + + genppd.markDefaults () + for group in genppd.optionGroups: + update_options (group.options, genppd, ppd) + for subgroup in group.subgroups: + update_options (subgroup.options, genppd, ppd) + + ps = genppd.findOption ("PageSize") + if ps: + update_options ([ps], genppd, ppd) + + f = file (ppdfile, "w") + genppd.writeFd (f.fileno ()) + print "Updated PPD file %s" % ppdfile + +for ppdfile in glob.glob ("/etc/cups/ppd/*.ppd"): + update_ppdfile (ppdfile) diff --git a/gutenprint.spec b/gutenprint.spec index 47820bd..923135b 100644 --- a/gutenprint.spec +++ b/gutenprint.spec @@ -4,10 +4,11 @@ Name: gutenprint Summary: Printer Drivers Package Version: 5.0.1 -Release: 1%{?dist} +Release: 2%{?dist} Group: System Environment/Base URL: http://gimp-print.sourceforge.net/ Source0: http://dl.sf.net/gimp-print/gutenprint-%{version}.tar.bz2 +Source1: gutenprint-foomaticppdupdate Patch0: gutenprint-menu.patch Patch1: gutenprint-lpstat.patch Patch2: gutenprint-O6.patch @@ -61,6 +62,7 @@ This package contains the gutenprint GIMP plug-in. Summary: Foomatic printer database Group: System Environment/Libraries Requires: %{name} = %{version}-%{release} +Requires(post): foomatic Obsoletes: gimp-print <= 4.2.7-25 Provides: gimp-print = 4.2.7-25 @@ -144,6 +146,8 @@ make DESTDIR=%{buildroot} install mv %{buildroot}%{cups_serverbin}/driver/gutenprint.5.0 %{buildroot}%{_sbindir} ln -s %{_sbindir}/gutenprint.5.0 %{buildroot}%{cups_serverbin}/driver/ +install -m755 %{SOURCE1} %{buildroot}%{_sbindir} + rm -rf %{buildroot}%{_datadir}/gutenprint/doc rm -rf %{buildroot}%{_libdir}/gutenprint/5.0.0/modules/*.la @@ -204,6 +208,7 @@ exit 0 %files foomatic %doc %defattr(-, root, root,-) +%{_sbindir}/gutenprint-foomaticppdupdate %{_datadir}/foomatic/kitload.log %{_datadir}/foomatic/db/source/driver/* %{_datadir}/foomatic/db/source/opt/* @@ -230,11 +235,15 @@ exit 0 %post foomatic /bin/rm -f /var/cache/foomatic/* +%{_sbindir}/gutenprint-foomaticppdupdate %{version} || : %postun foomatic /bin/rm -f /var/cache/foomatic/* %changelog +* Mon Jul 2 2007 Tim Waugh 5.0.1-2 +- Fix up foomatic PPD files after upgrade (bug #246448). + * Tue Jun 26 2007 Tim Waugh 5.0.1-1 - 5.0.1.