Ghee, If the change will not happen in the libpapi, then this fix seems to do the job just fine.
So +1 from my side. best Michal Pryc On 01/29/10 11:11 AM, Ghee Teo wrote: > resend to include Norm and Venky. > > http://defect.opensolaris.org/bz/show_bug.cgi?id=14156 > The bug is caused by PAPI print backend is loading the same list of > printers in /etc/printers.conf that CUPS generated. The fix is to check > that if CUPS is the active print system, do not create the PAPI print > backend. That check is done through the scf properties "general/active" > in svc:/application/cups/scheduler:default. > > > > code diff: > > Index: base-specs/gtk2.spec > =================================================================== > --- base-specs/gtk2.spec (revision 20645) > +++ base-specs/gtk2.spec (working copy) > @@ -50,6 +50,8 @@ > Patch13: gtk+-13-show-lpr-backend.diff > # date:2009-10-11 owner:gheet type:bug doo#11830 > Patch14: gtk+-14-check-libs.diff > +# date:2010-01-29 owner:gheet type:bug doo#14156 > +Patch15: gtk+-15-check-cups.diff > > BuildRoot: %{_tmppath}/%{name}-%{version}-build > Docdir: %{_defaultdocdir}/doc > @@ -132,6 +134,7 @@ > %patch12 -p1 > %patch13 -p1 > %patch14 -p1 > +%patch15 -p1 > > > > $ cat patches/gtk+-15-check-cups.diff > diff -urN gtk+-2.18.5/modules/printbackends/papi/gtkprintbackendpapi.c > ../../SUNWgtk2-2.18.5.hacked/i386/gtk+-2.18.5/modules/printbackends/papi/gtkprintbackendpapi.c > > > --- gtk+-2.18.5/modules/printbackends/papi/gtkprintbackendpapi.c > 2010-01-29 10:17:03.373625542 +0000 > +++ > ../../SUNWgtk2-2.18.5.hacked/i386/gtk+-2.18.5/modules/printbackends/papi/gtkprintbackendpapi.c > > > 2010-01-29 10:20:00.173396452 +0000 > @@ -26,6 +26,7 @@ > #include <fcntl.h> > #include <stdlib.h> > #include <string.h> > +#include <libscf.h> > #include <papi.h> > > #include <config.h> > @@ -124,6 +125,33 @@ > > &print_backend_papi_info, 0); > } > > +/* > + * Test to see if CUPS is the "active" print service on Solaris by > looking for > + * a special "general/active" boolean property in the CUPS service > instance > + * svc:/application/cups/scheduler:default. If it exists and is > true, CUPS > + * is the active print service. > + */ > +static int > +cups_is_active() > +{ > + int active = 0; > + > + scf_simple_prop_t *prop = scf_simple_prop_get(NULL, > + > "svc:/application/cups/scheduler:default", > + "general", "active"); > + > + if ((prop != NULL) && (scf_simple_prop_numvalues(prop) > 0)) { > + uint8_t *value = scf_simple_prop_next_boolean(prop); > + > + if (value != NULL) > + active = *value; > + } > + > + scf_simple_prop_free(prop); > + > + return (active); > +} > + > G_MODULE_EXPORT void > pb_module_init (GTypeModule *module) > { > @@ -142,6 +170,9 @@ > { > static gboolean loaded = FALSE; > > + if (cups_is_active ()) > + return NULL; > + > if (!loaded) > { > GModule *papi; > >
