]> git.pld-linux.org Git - packages/kdelibs.git/commitdiff
fix build with cups 1.6+ (copied from ../kde4-kde3support/kdelibs-cups16.patch)
authorElan Ruusamäe <glen@delfi.ee>
Sun, 25 May 2014 20:48:22 +0000 (23:48 +0300)
committerElan Ruusamäe <glen@delfi.ee>
Sun, 25 May 2014 20:48:22 +0000 (23:48 +0300)
kdelibs-cups16.patch [new file with mode: 0644]
kdelibs.spec

diff --git a/kdelibs-cups16.patch b/kdelibs-cups16.patch
new file mode 100644 (file)
index 0000000..e1664b3
--- /dev/null
@@ -0,0 +1,849 @@
+diff -ur kdelibs-3.5.10/kdeprint/configure.in.in kdelibs-3.5.10-cups16/kdeprint/configure.in.in
+--- kdelibs-3.5.10/kdeprint/configure.in.in    2005-09-10 10:27:43.000000000 +0200
++++ kdelibs-3.5.10-cups16/kdeprint/configure.in.in     2012-12-25 16:29:53.000000000 +0100
+@@ -84,6 +84,13 @@
+       if test "$ac_have_new_cups" = "yes"; then
+       AC_DEFINE(HAVE_CUPS_NO_PWD_CACHE, 1, CUPS doesn't have password caching)
+       fi
++
++      dnl check if CUPS is at least 1.6
++      ac_have_new_cups="no"
++      AC_CHECK_CUPS_VERSION(1.06)
++      if test "$ac_have_new_cups" = "yes"; then
++        AC_DEFINE(HAVE_CUPS_1_6, 1, CUPS is at least version 1.6)
++      fi
+     fi
+   fi
+   LDFLAGS="$ac_LDFLAGS_save"
+diff -ur kdelibs-3.5.10/kdeprint/cups/cupsdconf2/cupsdconf.cpp kdelibs-3.5.10-cups16/kdeprint/cups/cupsdconf2/cupsdconf.cpp
+--- kdelibs-3.5.10/kdeprint/cups/cupsdconf2/cupsdconf.cpp      2005-10-10 17:06:30.000000000 +0200
++++ kdelibs-3.5.10-cups16/kdeprint/cups/cupsdconf2/cupsdconf.cpp       2012-12-25 16:34:57.000000000 +0100
+@@ -629,26 +629,44 @@
+       cups_lang_t*    lang = cupsLangDefault();
+       ippAddString(request_, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, cupsLangEncoding(lang));
+       ippAddString(request_, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, lang->language);
++#ifdef HAVE_CUPS_1_6
++      ippSetOperation(request_, CUPS_GET_PRINTERS);
++#else // HAVE_CUPS_1_6
+       request_->request.op.operation_id = CUPS_GET_PRINTERS;
++#endif // HAVE_CUPS_1_6
+       request_ = cupsDoRequest(http_, request_, "/printers/");
+       if (request_)
+       {
+               QString name;
+               int     type(0);
++#ifdef HAVE_CUPS_1_6
++              ipp_attribute_t *attr = ippFirstAttribute(request_);
++#else // HAVE_CUPS_1_6
+               ipp_attribute_t *attr = request_->attrs;
++#endif // HAVE_CUPS_1_6
+               while (attr)
+               {
+                       // check new printer (keep only local non-implicit printers)
++#ifdef HAVE_CUPS_1_6
++                      if (!ippGetName(attr))
++#else // HAVE_CUPS_1_6
+                       if (!attr->name)
++#endif // HAVE_CUPS_1_6
+                       {
+                               if (!(type & CUPS_PRINTER_REMOTE) && !(type & CUPS_PRINTER_IMPLICIT) && !name.isEmpty())
+                                       resources_.append(new CupsResource("/printers/"+name));
+                               name = "";
+                               type = 0;
+                       }
++#ifdef HAVE_CUPS_1_6
++                      else if (strcmp(ippGetName(attr), "printer-name") == 0) name = ippGetString(attr, 0, NULL);
++                      else if (strcmp(ippGetName(attr), "printer-type") == 0) type = ippGetInteger(attr, 0);
++                      attr = ippNextAttribute(request_);
++#else // HAVE_CUPS_1_6
+                       else if (strcmp(attr->name, "printer-name") == 0) name = attr->values[0].string.text;
+                       else if (strcmp(attr->name, "printer-type") == 0) type = attr->values[0].integer;
+                       attr = attr->next;
++#endif // HAVE_CUPS_1_6
+               }
+               if (!(type & CUPS_PRINTER_REMOTE) && !(type & CUPS_PRINTER_IMPLICIT) && !name.isEmpty())
+                       resources_.append(new CupsResource("/printers/"+name));
+@@ -658,26 +676,44 @@
+       request_ = ippNew();
+       ippAddString(request_, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, cupsLangEncoding(lang));
+       ippAddString(request_, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, lang->language);
++#ifdef HAVE_CUPS_1_6
++      ippSetOperation(request_, CUPS_GET_CLASSES);
++#else // HAVE_CUPS_1_6
+       request_->request.op.operation_id = CUPS_GET_CLASSES;
++#endif // HAVE_CUPS_1_6
+       request_ = cupsDoRequest(http_, request_, "/classes/");
+       if (request_)
+       {
+               QString name;
+               int     type(0);
++#ifdef HAVE_CUPS_1_6
++              ipp_attribute_t *attr = ippFirstAttribute(request_);
++#else // HAVE_CUPS_1_6
+               ipp_attribute_t *attr = request_->attrs;
++#endif // HAVE_CUPS_1_6
+               while (attr)
+               {
+                       // check new class (keep only local classes)
++#ifdef HAVE_CUPS_1_6
++                      if (!ippGetName(attr))
++#else // HAVE_CUPS_1_6
+                       if (!attr->name)
++#endif // HAVE_CUPS_1_6
+                       {
+                               if (!(type & CUPS_PRINTER_REMOTE) && !name.isEmpty())
+                                       resources_.append(new CupsResource("/classes/"+name));
+                               name = "";
+                               type = 0;
+                       }
++#ifdef HAVE_CUPS_1_6
++                      else if (strcmp(ippGetName(attr), "printer-name") == 0) name = ippGetString(attr, 0, NULL);
++                      else if (strcmp(ippGetName(attr), "printer-type") == 0) type = ippGetInteger(attr, 0);
++                      attr = ippNextAttribute(request_);
++#else // HAVE_CUPS_1_6
+                       else if (strcmp(attr->name, "printer-name") == 0) name = attr->values[0].string.text;
+                       else if (strcmp(attr->name, "printer-type") == 0) type = attr->values[0].integer;
+                       attr = attr->next;
++#endif // HAVE_CUPS_1_6
+               }
+               if (!(type & CUPS_PRINTER_REMOTE) && !name.isEmpty())
+                       resources_.append(new CupsResource("/classes/"+name));
+diff -ur kdelibs-3.5.10/kdeprint/cups/ipprequest.cpp kdelibs-3.5.10-cups16/kdeprint/cups/ipprequest.cpp
+--- kdelibs-3.5.10/kdeprint/cups/ipprequest.cpp        2007-10-08 11:52:10.000000000 +0200
++++ kdelibs-3.5.10-cups16/kdeprint/cups/ipprequest.cpp 2012-12-25 16:55:53.000000000 +0100
+@@ -51,6 +51,58 @@
+               kdDebug(500) << "Null request" << endl;
+               return;
+       }
++#ifdef HAVE_CUPS_1_6
++      kdDebug(500) << "State = 0x" << QString::number(ippGetState(req), 16) << endl;
++      kdDebug(500) << "ID = 0x" << QString::number(ippGetRequestId(req), 16) << endl;
++      if (answer)
++      {
++              kdDebug(500) << "Status = 0x" << QString::number(ippGetStatusCode(req), 16) << endl;
++              kdDebug(500) << "Status message = " << ippErrorString(ippGetStatusCode(req)) << endl;
++      }
++      else
++              kdDebug(500) << "Operation = 0x" << QString::number(ippGetOperation(req), 16) << endl;
++      int minorVersion;
++      int majorVersion = ippGetVersion(req, &minorVersion);
++      kdDebug(500) << "Version = " << (int)(majorVersion) << "." << (int)(minorVersion) << endl;
++      kdDebug(500) << endl;
++
++      ipp_attribute_t *attr = ippFirstAttribute(req);
++      while (attr)
++      {
++              QString s = QString::fromLatin1("%1 (0x%2) = ").arg(ippGetName(attr)).arg(ippGetValueTag(attr), 0, 16);
++              for (int i=0;i<ippGetCount(attr);i++)
++              {
++                      switch (ippGetValueTag(attr))
++                      {
++                              case IPP_TAG_INTEGER:
++                              case IPP_TAG_ENUM:
++                                      s += ("0x"+QString::number(ippGetInteger(attr, i), 16));
++                                      break;
++                              case IPP_TAG_BOOLEAN:
++                                      s += (ippGetBoolean(attr, i) ? "true" : "false");
++                                      break;
++                              case IPP_TAG_STRING:
++                              case IPP_TAG_TEXT:
++                              case IPP_TAG_NAME:
++                              case IPP_TAG_KEYWORD:
++                              case IPP_TAG_URI:
++                              case IPP_TAG_MIMETYPE:
++                              case IPP_TAG_NAMELANG:
++                              case IPP_TAG_TEXTLANG:
++                              case IPP_TAG_CHARSET:
++                              case IPP_TAG_LANGUAGE:
++                                      s += ippGetString(attr, i, NULL);
++                                      break;
++                              default:
++                                      break;
++                      }
++                      if (i != (ippGetCount(attr)-1))
++                              s += ", ";
++              }
++              kdDebug(500) << s << endl;
++              attr = ippNextAttribute(req);
++      }
++#else // HAVE_CUPS_1_6
+       kdDebug(500) << "State = 0x" << QString::number(req->state, 16) << endl;
+       kdDebug(500) << "ID = 0x" << QString::number(req->request.status.request_id, 16) << endl;
+       if (answer)
+@@ -99,6 +151,7 @@
+               kdDebug(500) << s << endl;
+               attr = attr->next;
+       }
++#endif // HAVE_CUPS_1_6
+ }
+ QString errorString(int status)
+@@ -177,7 +230,11 @@
+               ipp_attribute_t *attr = ippAddStrings(request_,(ipp_tag_t)group,(ipp_tag_t)type,name.latin1(),(int)(values.count()),NULL,NULL);
+               int     i(0);
+               for (QStringList::ConstIterator it=values.begin(); it != values.end(); ++it, i++)
++#ifdef HAVE_CUPS_1_6
++                      ippSetString(request_, &attr, i, strdup((*it).local8Bit()));
++#else // HAVE_CUPS_1_6
+                       attr->values[i].string.text = strdup((*it).local8Bit());
++#endif // HAVE_CUPS_1_6
+       }
+ }
+@@ -193,7 +250,11 @@
+               ipp_attribute_t *attr = ippAddIntegers(request_,(ipp_tag_t)group,(ipp_tag_t)type,name.latin1(),(int)(values.count()),NULL);
+               int     i(0);
+               for (QValueList<int>::ConstIterator it=values.begin(); it != values.end(); ++it, i++)
++#ifdef HAVE_CUPS_1_6
++                      ippSetInteger(request_, &attr, i, *it);
++#else // HAVE_CUPS_1_6
+                       attr->values[i].integer = *it;
++#endif // HAVE_CUPS_1_6
+       }
+ }
+@@ -209,19 +270,32 @@
+               ipp_attribute_t *attr = ippAddBooleans(request_,(ipp_tag_t)group,name.latin1(),(int)(values.count()),NULL);
+               int     i(0);
+               for (QValueList<bool>::ConstIterator it=values.begin(); it != values.end(); ++it, i++)
++#ifdef HAVE_CUPS_1_6
++                      ippSetBoolean(request_, &attr, i, (char)(*it));
++#else // HAVE_CUPS_1_6
+                       attr->values[i].boolean = (char)(*it);
++#endif // HAVE_CUPS_1_6
+       }
+ }
+ void IppRequest::setOperation(int op)
+ {
++#ifdef HAVE_CUPS_1_6
++      ippSetOperation(request_, (ipp_op_t)op);
++      ippSetRequestId(request_, 1);           // 0 is not RFC-compliant, should be at least 1
++#else // HAVE_CUPS_1_6
+       request_->request.op.operation_id = (ipp_op_t)op;
+       request_->request.op.request_id = 1;    // 0 is not RFC-compliant, should be at least 1
++#endif // HAVE_CUPS_1_6
+ }
+ int IppRequest::status()
+ {
++#ifdef HAVE_CUPS_1_6
++      return (request_ ? ippGetStatusCode(request_) : (connect_ ? cupsLastError() : -2));
++#else // HAVE_CUPS_1_6
+       return (request_ ? request_->request.status.status_code : (connect_ ? cupsLastError() : -2));
++#endif // HAVE_CUPS_1_6
+ }
+ QString IppRequest::statusMessage()
+@@ -248,7 +322,11 @@
+       ipp_attribute_t *attr = ippFindAttribute(request_, name.latin1(), (ipp_tag_t)type);
+       if (attr)
+       {
++#ifdef HAVE_CUPS_1_6
++              value = ippGetInteger(attr, 0);
++#else // HAVE_CUPS_1_6
+               value = attr->values[0].integer;
++#endif // HAVE_CUPS_1_6
+               return true;
+       }
+       else return false;
+@@ -260,7 +338,11 @@
+       ipp_attribute_t *attr = ippFindAttribute(request_, name.latin1(), (ipp_tag_t)type);
+       if (attr)
+       {
++#ifdef HAVE_CUPS_1_6
++              value = QString::fromLocal8Bit(ippGetString(attr, 0, NULL));
++#else // HAVE_CUPS_1_6
+               value = QString::fromLocal8Bit(attr->values[0].string.text);
++#endif // HAVE_CUPS_1_6
+               return true;
+       }
+       else return false;
+@@ -273,8 +355,13 @@
+       values.clear();
+       if (attr)
+       {
++#ifdef HAVE_CUPS_1_6
++              for (int i=0;i<ippGetCount(attr);i++)
++                      values.append(QString::fromLocal8Bit(ippGetString(attr, i, NULL)));
++#else // HAVE_CUPS_1_6
+               for (int i=0;i<attr->num_values;i++)
+                       values.append(QString::fromLocal8Bit(attr->values[i].string.text));
++#endif // HAVE_CUPS_1_6
+               return true;
+       }
+       else return false;
+@@ -286,7 +373,11 @@
+       ipp_attribute_t *attr = ippFindAttribute(request_, name.latin1(), IPP_TAG_BOOLEAN);
+       if (attr)
+       {
++#ifdef HAVE_CUPS_1_6
++              value = (bool)ippGetBoolean(attr, 0);
++#else // HAVE_CUPS_1_6
+               value = (bool)attr->values[0].boolean;
++#endif // HAVE_CUPS_1_6
+               return true;
+       }
+       else return false;
+@@ -338,10 +429,18 @@
+       }
+       /* No printers found */
++#ifdef HAVE_CUPS_1_6
++      if ( request_ && ippGetStatusCode(request_) == 0x406 )
++#else // HAVE_CUPS_1_6
+       if ( request_ && request_->request.status.status_code == 0x406 )
++#endif // HAVE_CUPS_1_6
+               return true;
++#ifdef HAVE_CUPS_1_6
++      if (!request_ || ippGetState(request_) == IPP_ERROR || (ippGetStatusCode(request_) & 0x0F00))
++#else // HAVE_CUPS_1_6
+       if (!request_ || request_->state == IPP_ERROR || (request_->request.status.status_code & 0x0F00))
++#endif // HAVE_CUPS_1_6
+               return false;
+@@ -356,14 +455,88 @@
+       output << "<tr><th bgcolor=\"dark blue\"><font color=\"white\">" << i18n("Attribute") << "</font></th>" << endl;
+       output << "<th bgcolor=\"dark blue\"><font color=\"white\">" << i18n("Values") << "</font></th></tr>" << endl;
+       // go to the first attribute of the specified group
++#ifdef HAVE_CUPS_1_6
++      ipp_attribute_t *attr = ippFirstAttribute(request_);
++      while (attr && ippGetGroupTag(attr) != group)
++              attr = ippNextAttribute(request_);
++#else // HAVE_CUPS_1_6
+       ipp_attribute_t *attr = request_->attrs;
+       while (attr && attr->group_tag != group)
+               attr = attr->next;
++#endif // HAVE_CUPS_1_6
+       // print each attribute
+-      ipp_uchar_t     *d;
+-      QCString        dateStr;
+-      QDateTime       dt;
+-      bool    bg(false);
++      const ipp_uchar_t       *d;
++      QCString                dateStr;
++      QDateTime               dt;
++      bool                    bg(false);
++#ifdef HAVE_CUPS_1_6
++      while (attr && ippGetGroupTag(attr) == group)
++      {
++              output << "  <tr bgcolor=\"" << (bg ? "#ffffd9" : "#ffffff") << "\">\n    <td><b>" << ippGetName(attr) << "</b></td>\n    <td>" << endl;
++              bg = !bg;
++              for (int i=0; i<ippGetCount(attr); i++)
++              {
++                      switch (ippGetValueTag(attr))
++                      {
++                              case IPP_TAG_INTEGER:
++                                      if (ippGetName(attr) && strstr(ippGetName(attr), "time"))
++                                      {
++                                              dt.setTime_t((unsigned int)(ippGetInteger(attr, i)));
++                                              output << dt.toString();
++                                      }
++                                      else
++                                              output << ippGetInteger(attr, i);
++                                      break;
++                              case IPP_TAG_ENUM:
++                                      output << "0x" << hex << ippGetInteger(attr, i) << dec;
++                                      break;
++                              case IPP_TAG_BOOLEAN:
++                                      output << (ippGetBoolean(attr, i) ? i18n("True") : i18n("False"));
++                                      break;
++                              case IPP_TAG_STRING:
++                              case IPP_TAG_TEXTLANG:
++                              case IPP_TAG_NAMELANG:
++                              case IPP_TAG_TEXT:
++                              case IPP_TAG_NAME:
++                              case IPP_TAG_KEYWORD:
++                              case IPP_TAG_URI:
++                              case IPP_TAG_CHARSET:
++                              case IPP_TAG_LANGUAGE:
++                              case IPP_TAG_MIMETYPE:
++                                      output << ippGetString(attr, i, NULL);
++                                      break;
++                              case IPP_TAG_RESOLUTION:
++                                      int xres;
++                                      int yres;
++                                      ipp_res_t units;
++                                      xres = ippGetResolution(attr, i, &yres, &units);
++                                      output << "( " << xres
++                                             << ", " << yres << " )";
++                                      break;
++                              case IPP_TAG_RANGE:
++                                      int lowervalue;
++                                      int uppervalue;
++                                      lowervalue = ippGetRange(attr, i, &uppervalue);
++                                      output << "[ " << (lowervalue > 0 ? lowervalue : 1)
++                                             << ", " << (uppervalue > 0 ? uppervalue : 65535) << " ]";
++                                      break;
++                              case IPP_TAG_DATE:
++                                      d = ippGetDate(attr, i);
++                                      dateStr.sprintf("%.4d-%.2d-%.2d, %.2d:%.2d:%.2d %c%.2d%.2d",
++                                                      d[0]*256+d[1], d[2], d[3],
++                                                      d[4], d[5], d[6],
++                                                      d[8], d[9], d[10]);
++                                      output << dateStr;
++                                      break;
++                              default:
++                                      continue;
++                      }
++                      if (i < ippGetCount(attr)-1)
++                              output << "<br>";
++              }
++              output << "</td>\n  </tr>" << endl;
++              attr = ippNextAttribute(request_);
++#else // HAVE_CUPS_1_6
+       while (attr && attr->group_tag == group)
+       {
+               output << "  <tr bgcolor=\"" << (bg ? "#ffffd9" : "#ffffff") << "\">\n    <td><b>" << attr->name << "</b></td>\n    <td>" << endl;
+@@ -423,6 +596,7 @@
+               }
+               output << "</td>\n  </tr>" << endl;
+               attr = attr->next;
++#endif // HAVE_CUPS_1_6
+       }
+       // end table
+       output << "</table>" << endl;
+@@ -438,6 +612,59 @@
+               ipp_attribute_t *attr = first();
+               while (attr)
+               {
++#ifdef HAVE_CUPS_1_6
++                      if (group != -1 && ippGetGroupTag(attr) != group)
++                      {
++                              attr = ippNextAttribute(request_);
++                              continue;
++                      }
++                      QString value;
++                      for (int i=0; i<ippGetCount(attr); i++)
++                      {
++                              switch (ippGetValueTag(attr))
++                              {
++                                      case IPP_TAG_INTEGER:
++                                      case IPP_TAG_ENUM:
++                                              value.append(QString::number(ippGetInteger(attr, i))).append(",");
++                                              break;
++                                      case IPP_TAG_BOOLEAN:
++                                              value.append((ippGetBoolean(attr, i) ? "true" : "false")).append(",");
++                                              break;
++                                      case IPP_TAG_RANGE:
++                                              int lowervalue;
++                                              int uppervalue;
++                                              lowervalue = ippGetRange(attr, i, &uppervalue);
++                                              if (lowervalue > 0)
++                                                      value.append(QString::number(lowervalue));
++                                              if (lowervalue != uppervalue)
++                                              {
++                                                      value.append("-");
++                                                      if (uppervalue > 0)
++                                                              value.append(QString::number(uppervalue));
++                                              }
++                                              value.append(",");
++                                              break;
++                                      case IPP_TAG_STRING:
++                                      case IPP_TAG_TEXT:
++                                      case IPP_TAG_NAME:
++                                      case IPP_TAG_KEYWORD:
++                                      case IPP_TAG_URI:
++                                      case IPP_TAG_MIMETYPE:
++                                      case IPP_TAG_NAMELANG:
++                                      case IPP_TAG_TEXTLANG:
++                                      case IPP_TAG_CHARSET:
++                                      case IPP_TAG_LANGUAGE:
++                                              value.append(QString::fromLocal8Bit(ippGetString(attr, i, NULL))).append(",");
++                                              break;
++                                      default:
++                                              break;
++                              }
++                      }
++                      if (!value.isEmpty())
++                              value.truncate(value.length()-1);
++                      opts[QString::fromLocal8Bit(ippGetName(attr))] = value;
++                      attr = ippNextAttribute(request_);
++#else // HAVE_CUPS_1_6
+                       if (group != -1 && attr->group_tag != group)
+                       {
+                               attr = attr->next;
+@@ -486,6 +713,7 @@
+                               value.truncate(value.length()-1);
+                       opts[QString::fromLocal8Bit(attr->name)] = value;
+                       attr = attr->next;
++#endif // HAVE_CUPS_1_6
+               }
+       }
+       return opts;
+@@ -542,3 +770,11 @@
+       }
+ #endif
+ }
++
++#ifdef HAVE_CUPS_1_6
++ipp_attribute_t* IppRequest::first()
++{ return (request_ ? ippFirstAttribute(request_) : NULL); }
++#else // HAVE_CUPS_1_6
++ipp_attribute_t* IppRequest::first()
++{ return (request_ ? request_->attrs : NULL); }
++#endif // HAVE_CUPS_1_6
+diff -ur kdelibs-3.5.10/kdeprint/cups/ipprequest.h kdelibs-3.5.10-cups16/kdeprint/cups/ipprequest.h
+--- kdelibs-3.5.10/kdeprint/cups/ipprequest.h  2005-10-10 17:06:30.000000000 +0200
++++ kdelibs-3.5.10-cups16/kdeprint/cups/ipprequest.h   2012-12-25 16:37:50.000000000 +0100
+@@ -27,6 +27,8 @@
+ #include <cups/ipp.h>
++#include "config.h"
++
+ class IppRequest
+ {
+ public:
+@@ -72,7 +74,10 @@
+       bool keyword(const QString& name, QStringList& value);
+       bool mime(const QString& name, QString& value);
+       ipp_attribute_t* first();
++#ifndef HAVE_CUPS_1_6
+       ipp_attribute_t* last();
++#endif // HAVE_CUPS_1_6
++      ipp_t* request();
+       QMap<QString,QString> toMap(int group = -1);
+       void setMap(const QMap<QString,QString>& opts);
+@@ -178,11 +183,10 @@
+ inline bool IppRequest::doRequest(const QString& res)
+ { return doFileRequest(res); }
+-inline ipp_attribute_t* IppRequest::first()
+-{ return (request_ ? request_->attrs : NULL); }
+-
++#ifndef HAVE_CUPS_1_6
+ inline ipp_attribute_t* IppRequest::last()
+ { return (request_ ? request_->last : NULL); }
++#endif // HAVE_CUPS_1_6
+ inline void IppRequest::setHost(const QString& host)
+ { host_ = host; }
+@@ -193,4 +197,7 @@
+ inline void IppRequest::dump(int state)
+ { dump_ = state; }
++inline ipp_t* IppRequest::request()
++{ return request_; }
++
+ #endif
+diff -ur kdelibs-3.5.10/kdeprint/cups/kmcupsjobmanager.cpp kdelibs-3.5.10-cups16/kdeprint/cups/kmcupsjobmanager.cpp
+--- kdelibs-3.5.10/kdeprint/cups/kmcupsjobmanager.cpp  2007-01-15 12:34:19.000000000 +0100
++++ kdelibs-3.5.10-cups16/kdeprint/cups/kmcupsjobmanager.cpp   2012-12-25 16:34:57.000000000 +0100
+@@ -36,6 +36,8 @@
+ #include <kdebug.h>
+ #include <kurl.h>
++#include "config.h"
++
+ KMCupsJobManager::KMCupsJobManager(QObject *parent, const char *name, const QStringList & /*args*/)
+ : KMJobManager(parent,name)
+ {
+@@ -166,10 +168,79 @@
+ void KMCupsJobManager::parseListAnswer(IppRequest& req, KMPrinter *pr)
+ {
+       ipp_attribute_t *attr = req.first();
++      ipp_attribute_t *nextAttr;
+       KMJob           *job = new KMJob();
+       QString         uri;
+       while (attr)
+       {
++#ifdef HAVE_CUPS_1_6
++              QString name(ippGetName(attr));
++              if (name == "job-id") job->setId(ippGetInteger(attr, 0));
++              else if (name == "job-uri") job->setUri(QString::fromLocal8Bit(ippGetString(attr, 0, NULL)));
++              else if (name == "job-name") job->setName(QString::fromLocal8Bit(ippGetString(attr, 0, NULL)));
++              else if (name == "job-state")
++              {
++                      switch (ippGetInteger(attr, 0))
++                      {
++                              case IPP_JOB_PENDING:
++                                      job->setState(KMJob::Queued);
++                                      break;
++                              case IPP_JOB_HELD:
++                                      job->setState(KMJob::Held);
++                                      break;
++                              case IPP_JOB_PROCESSING:
++                                      job->setState(KMJob::Printing);
++                                      break;
++                              case IPP_JOB_STOPPED:
++                                      job->setState(KMJob::Error);
++                                      break;
++                              case IPP_JOB_CANCELLED:
++                                      job->setState(KMJob::Cancelled);
++                                      break;
++                              case IPP_JOB_ABORTED:
++                                      job->setState(KMJob::Aborted);
++                                      break;
++                              case IPP_JOB_COMPLETED:
++                                      job->setState(KMJob::Completed);
++                                      break;
++                              default:
++                                      job->setState(KMJob::Unknown);
++                                      break;
++                      }
++              }
++              else if (name == "job-k-octets") job->setSize(ippGetInteger(attr, 0));
++              else if (name == "job-originating-user-name") job->setOwner(QString::fromLocal8Bit(ippGetString(attr, 0, NULL)));
++              else if (name == "job-k-octets-completed") job->setProcessedSize(ippGetInteger(attr, 0));
++              else if (name == "job-media-sheets") job->setPages(ippGetInteger(attr, 0));
++              else if (name == "job-media-sheets-completed") job->setProcessedPages(ippGetInteger(attr, 0));
++              else if (name == "job-printer-uri" && !pr->isRemote())
++              {
++                      QString str(ippGetString(attr, 0, NULL));
++                      int     p = str.findRev('/');
++                      if (p != -1)
++                              job->setPrinter(str.mid(p+1));
++              }
++              else if (name == "job-priority")
++              {
++                      job->setAttribute(0, QString::fromLatin1("%1").arg(ippGetInteger(attr, 0), 3));
++              }
++              else if (name == "job-billing")
++              {
++                      job->setAttributeCount(2);
++                      job->setAttribute(1, QString::fromLocal8Bit(ippGetString(attr, 0, NULL)));
++              }
++
++              nextAttr = ippNextAttribute(req.request());
++              if (name.isEmpty() || (!nextAttr))
++              {
++                      if (job->printer().isEmpty())
++                              job->setPrinter(pr->printerName());
++                      job->setRemote(pr->isRemote());
++                      addJob(job);    // don't use job after this call !!!
++                      job = new KMJob();
++              }
++              attr = nextAttr;
++#else // HAVE_CUPS_1_6
+               QString name(attr->name);
+               if (name == "job-id") job->setId(attr->values[0].integer);
+               else if (name == "job-uri") job->setUri(QString::fromLocal8Bit(attr->values[0].string.text));
+@@ -236,6 +307,7 @@
+               }
+               attr = attr->next;
++#endif // HAVE_CUPS_1_6
+       }
+       delete job;
+ }
+diff -ur kdelibs-3.5.10/kdeprint/cups/kmcupsmanager.cpp kdelibs-3.5.10-cups16/kdeprint/cups/kmcupsmanager.cpp
+--- kdelibs-3.5.10/kdeprint/cups/kmcupsmanager.cpp     2007-01-15 12:34:19.000000000 +0100
++++ kdelibs-3.5.10-cups16/kdeprint/cups/kmcupsmanager.cpp      2012-12-25 16:34:57.000000000 +0100
+@@ -476,9 +476,59 @@
+ void KMCupsManager::processRequest(IppRequest* req)
+ {
+       ipp_attribute_t *attr = req->first();
++      ipp_attribute_t *nextAttr;
+       KMPrinter       *printer = new KMPrinter();
+       while (attr)
+       {
++#ifdef HAVE_CUPS_1_6
++              QString attrname(ippGetName(attr));
++              if (attrname == "printer-name")
++              {
++                      QString value = QString::fromLocal8Bit(ippGetString(attr, 0, NULL));
++                      printer->setName(value);
++                      printer->setPrinterName(value);
++              }
++              else if (attrname == "printer-type")
++              {
++                      int     value = ippGetInteger(attr, 0);
++                      printer->setType(0);
++                      printer->addType(((value & CUPS_PRINTER_CLASS) || (value & CUPS_PRINTER_IMPLICIT) ? KMPrinter::Class : KMPrinter::Printer));
++                      if ((value & CUPS_PRINTER_REMOTE)) printer->addType(KMPrinter::Remote);
++                      if ((value & CUPS_PRINTER_IMPLICIT)) printer->addType(KMPrinter::Implicit);
++
++                      // convert printer-type attribute
++                      printer->setPrinterCap( ( value & CUPS_PRINTER_OPTIONS ) >> 2 );
++              }
++              else if (attrname == "printer-state")
++              {
++                      switch (ippGetInteger(attr, 0))
++                      {
++                              case IPP_PRINTER_IDLE: printer->setState(KMPrinter::Idle); break;
++                              case IPP_PRINTER_PROCESSING: printer->setState(KMPrinter::Processing); break;
++                              case IPP_PRINTER_STOPPED: printer->setState(KMPrinter::Stopped); break;
++                      }
++              }
++              else if (attrname == "printer-uri-supported")
++              {
++                      printer->setUri(KURL(ippGetString(attr, 0, NULL)));
++              }
++              else if (attrname == "printer-location")
++              {
++                      printer->setLocation(QString::fromLocal8Bit(ippGetString(attr, 0, NULL)));
++              }
++              else if (attrname == "printer-is-accepting-jobs")
++              {
++                      printer->setAcceptJobs(ippGetBoolean(attr, 0));
++              }
++
++              nextAttr = ippNextAttribute(req->request());
++              if (attrname.isEmpty() || (!nextAttr))
++              {
++                      addPrinter(printer);
++                      printer = new KMPrinter();
++              }
++              attr = nextAttr;
++#else // HAVE_CUPS_1_6
+               QString attrname(attr->name);
+               if (attrname == "printer-name")
+               {
+@@ -524,6 +574,7 @@
+                       printer = new KMPrinter();
+               }
+               attr = attr->next;
++#endif // HAVE_CUPS_1_6
+       }
+       delete printer;
+ }
+@@ -817,6 +868,7 @@
+ {
+       QStringList     list;
+       IppRequest      req;
++      ipp_attribute_t *nextAttr;
+       req.setOperation(CUPS_GET_DEVICES);
+       if (req.doRequest("/"))
+       {
+@@ -824,6 +876,24 @@
+               ipp_attribute_t *attr = req.first();
+               while (attr)
+               {
++#ifdef HAVE_CUPS_1_6
++                      QString attrname(ippGetName(attr));
++                      if (attrname == "device-info") desc = ippGetString(attr, 0, NULL);
++                      else if (attrname == "device-make-and-model") printer = ippGetString(attr, 0, NULL);
++                      else if (attrname == "device-uri") uri = ippGetString(attr, 0, NULL);
++                      else if ( attrname == "device-class" ) cl = ippGetString(attr, 0, NULL);
++                      nextAttr = ippNextAttribute(req.request());
++                      if (attrname.isEmpty() || (!nextAttr))
++                      {
++                              if (!uri.isEmpty())
++                              {
++                                      if (printer == "Unknown") printer = QString::null;
++                                      list << cl << uri << desc << printer;
++                              }
++                              uri = desc = printer = cl = QString::null;
++                      }
++                      attr = nextAttr;
++#else // HAVE_CUPS_1_6
+                       QString attrname(attr->name);
+                       if (attrname == "device-info") desc = attr->values[0].string.text;
+                       else if (attrname == "device-make-and-model") printer = attr->values[0].string.text;
+@@ -839,6 +909,7 @@
+                               uri = desc = printer = cl = QString::null;
+                       }
+                       attr = attr->next;
++#endif // HAVE_CUPS_1_6
+               }
+       }
+       return list;
+diff -ur kdelibs-3.5.10/kdeprint/cups/kmcupsuimanager.cpp kdelibs-3.5.10-cups16/kdeprint/cups/kmcupsuimanager.cpp
+--- kdelibs-3.5.10/kdeprint/cups/kmcupsuimanager.cpp   2006-10-01 19:33:43.000000000 +0200
++++ kdelibs-3.5.10-cups16/kdeprint/cups/kmcupsuimanager.cpp    2012-12-25 16:34:57.000000000 +0100
+@@ -60,6 +60,8 @@
+ #include <kaction.h>
+ #include <kmessagebox.h>
++#include "config.h"
++
+ KMCupsUiManager::KMCupsUiManager(QObject *parent, const char *name, const QStringList & /*args*/)
+ : KMUiManager(parent,name)
+ {
+@@ -143,6 +145,24 @@
+               ipp_attribute_t *attr = req.first();
+               while (attr)
+               {
++#ifdef HAVE_CUPS_1_6
++                      if (ippGetName(attr) && strcmp(ippGetName(attr),"device-uri") == 0)
++                      {
++                              if (strncmp(ippGetString(attr, 0, NULL),"socket",6) == 0) backend->enableBackend(KMWizard::TCP,true);
++                              else if (strncmp(ippGetString(attr, 0, NULL),"parallel",8) == 0) backend->enableBackend(KMWizard::Local,true);
++                              else if (strncmp(ippGetString(attr, 0, NULL),"serial",6) == 0) backend->enableBackend(KMWizard::Local,true);
++                              else if (strncmp(ippGetString(attr, 0, NULL),"smb",3) == 0) backend->enableBackend(KMWizard::SMB,true);
++                              else if (strncmp(ippGetString(attr, 0, NULL),"lpd",3) == 0) backend->enableBackend(KMWizard::LPD,true);
++                              else if (strncmp(ippGetString(attr, 0, NULL),"usb",3) == 0) backend->enableBackend(KMWizard::Local,true);
++                              else if (strncmp(ippGetString(attr, 0, NULL),"http",4) == 0 || strncmp(ippGetString(attr, 0, NULL),"ipp",3) == 0)
++                              {
++                                      backend->enableBackend(KMWizard::IPP,true);
++                                      backend->enableBackend(KMWizard::Custom+1,true);
++                              }
++                              else if (strncmp(ippGetString(attr, 0, NULL),"fax",3) == 0) backend->enableBackend(KMWizard::Custom+2,true);
++                      }
++                      attr = ippNextAttribute(req.request());
++#else // HAVE_CUPS_1_6
+                       if (attr->name && strcmp(attr->name,"device-uri") == 0)
+                       {
+                               if (strncmp(attr->values[0].string.text,"socket",6) == 0) backend->enableBackend(KMWizard::TCP,true);
+@@ -159,6 +179,7 @@
+                               else if (strncmp(attr->values[0].string.text,"fax",3) == 0) backend->enableBackend(KMWizard::Custom+2,true);
+                       }
+                       attr = attr->next;
++#endif // HAVE_CUPS_1_6
+               }
+               backend->enableBackend(KMWizard::Class, true);
+               backend->enableBackend(KMWizard::Custom+5, true);
+diff -ur kdelibs-3.5.10/kdeprint/cups/kmwfax.cpp kdelibs-3.5.10-cups16/kdeprint/cups/kmwfax.cpp
+--- kdelibs-3.5.10/kdeprint/cups/kmwfax.cpp    2007-01-15 12:34:19.000000000 +0100
++++ kdelibs-3.5.10-cups16/kdeprint/cups/kmwfax.cpp     2012-12-25 16:34:57.000000000 +0100
+@@ -30,6 +30,8 @@
+ #include <kiconloader.h>
+ #include <kurl.h>
++#include "config.h"
++
+ KMWFax::KMWFax(QWidget *parent, const char *name)
+ : KMWizardPage(parent,name)
+ {
+@@ -55,11 +57,19 @@
+               ipp_attribute_t *attr = req.first();
+               while (attr)
+               {
++#ifdef HAVE_CUPS_1_6
++                      if (ippGetName(attr) && strcmp(ippGetName(attr),"device-uri") == 0 && strncmp(ippGetString(attr, 0, NULL),"fax",3) == 0)
++                      {
++                              m_list->insertItem(SmallIcon("blockdevice"),QString::fromLatin1(ippGetString(attr, 0, NULL)));
++                      }
++                      attr = ippNextAttribute(req.request());
++#else // HAVE_CUPS_1_6
+                       if (attr->name && strcmp(attr->name,"device-uri") == 0 && strncmp(attr->values[0].string.text,"fax",3) == 0)
+                       {
+                               m_list->insertItem(SmallIcon("blockdevice"),QString::fromLatin1(attr->values[0].string.text));
+                       }
+                       attr = attr->next;
++#endif // HAVE_CUPS_1_6
+               }
+       }
+ }
+diff -ur kdelibs-3.5.10/kdeprint/cups/kmwippselect.cpp kdelibs-3.5.10-cups16/kdeprint/cups/kmwippselect.cpp
+--- kdelibs-3.5.10/kdeprint/cups/kmwippselect.cpp      2007-01-15 12:34:19.000000000 +0100
++++ kdelibs-3.5.10-cups16/kdeprint/cups/kmwippselect.cpp       2012-12-25 16:34:57.000000000 +0100
+@@ -29,6 +29,8 @@
+ #include <kdebug.h>
+ #include <kiconloader.h>
++#include "config.h"
++
+ KMWIppSelect::KMWIppSelect(QWidget *parent, const char *name)
+ : KMWizardPage(parent,name)
+ {
+@@ -83,9 +85,15 @@
+               ipp_attribute_t *attr = req.first();
+               while (attr)
+               {
++#ifdef HAVE_CUPS_1_6
++                      if (ippGetName(attr) && strcmp(ippGetName(attr),"printer-name") == 0)
++                              m_list->insertItem(SmallIcon("kdeprint_printer"),QString::fromLatin1(ippGetString(attr, 0, NULL)));
++                      attr = ippNextAttribute(req.request());
++#else // HAVE_CUPS_1_6
+                       if (attr->name && strcmp(attr->name,"printer-name") == 0)
+                               m_list->insertItem(SmallIcon("kdeprint_printer"),QString::fromLatin1(attr->values[0].string.text));
+                       attr = attr->next;
++#endif // HAVE_CUPS_1_6
+               }
+               m_list->sort();
+       }
index 9eb9914e3fc639c73ca63f0fcee6906d173bec87..735614d9731e3b30e6b8b331ab40a2c02d6354d9 100644 (file)
@@ -59,6 +59,7 @@ Patch17:      %{name}-3.5.10-LDFLAG_fix-1.patch
 Patch18:       %{name}-3.5.10-ossl-1.x.patch
 Patch19:       %{name}-gcc4.patch
 Patch20:       boost-1.50.patch
+Patch21:       kdelibs-cups16.patch
 URL:           http://www.kde.org/
 %{?with_openexr:BuildRequires: OpenEXR-devel >= 1.4.0.a}
 BuildRequires: acl-devel
@@ -377,6 +378,7 @@ strony innych użytkowników lokalnych.
 %patch18 -p1
 %patch19 -p1
 %patch20 -p1
+%patch21 -p1
 
 mv -f configure{,.dist}
 :>admin/test-driver
This page took 0.174297 seconds and 4 git commands to generate.