# HG changeset patch # User Christopher Rogers # Date 1370082061 0 # Node ID 21ed7ad86c60e1d961256db2ccd36636a67478f2 # Parent c1685ec71d849f34ef41cdf07f0402c5d1e6442e Up: hplip to 3.12.11. diff -r c1685ec71d84 -r 21ed7ad86c60 hplip/receipt --- a/hplip/receipt Sat Jun 01 10:16:08 2013 +0000 +++ b/hplip/receipt Sat Jun 01 10:21:01 2013 +0000 @@ -1,18 +1,18 @@ # SliTaz package receipt. PACKAGE="hplip" -VERSION="3.12.2" +VERSION="3.12.11" CATEGORY="system-tools" SHORT_DESC="Drivers for HP DeskJet, OfficeJet, Photosmart, Business Inkjet and some LaserJet" MAINTAINER="jozee@slitaz.org" DEPENDS="ghostscript python cups dbus-python libusb jpeg tiff sane-backends \ -libgphoto2 libexif gcc-lib-base libtool libv4l" -BUILD_DEPENDS="ghostscript-dev dbus-python-dev sane-backends-dev sane-backends \ -libexif-dev libgphoto2-dev libgphoto2 pkg-config libusb-dev jpeg-dev cups-dev \ -dbus-dev tiff-dev python python-dev dbus-python libtool" +libgphoto2 libexif gcc-lib-base libtool libv4l net-snmp PyQt-x11-gpl" +BUILD_DEPENDS="ghostscript-dev dbus-python-dev sane-backends-dev \ +sane-backends libexif-dev libgphoto2-dev Qt4-dev libgphoto2 pkg-config libusb-dev \ +jpeg-dev cups-dev dbus-dev tiff-dev python python-dev dbus-python net-snmp-dev" TARBALL="$PACKAGE-$VERSION.tar.gz" WEB_SITE="http://hplipopensource.com" -WGET_URL="http://downloads.sourceforge.net/sourceforge/hplip/$TARBALL" +WGET_URL="$SF_MIRROR/$PACKAGE/$TARBALL" TAGS="printer driver printing" BUGS="Unable to delete hplip.desktop from $fs. Using hack in post_install." @@ -20,18 +20,18 @@ compile_rules() { cd $src + + # fix build with cups 1.6 - FC hplip-ipp-accessors.patch + patch -Np1 -i $stuff/cups-1.6-buildfix.diff + ./configure \ --prefix=/usr \ --sysconfdir=/etc \ - --disable-network-build \ --disable-doc-build \ - --disable-gui-build \ - --disable-fax-build \ - --disable-qt3 \ - --enable-pp-build \ + --enable-qt4 \ $CONFIGURE_ARGS && make && - make DESTDIR=$PWD/_pkg install + make DESTDIR=$DESTDIR install } # Rules to gen a SliTaz package suitable for Tazpkg. @@ -39,21 +39,23 @@ { mkdir -p $fs/etc $fs/usr/lib $fs/usr/share - cp -a $_pkg/etc $fs - cp -a $_pkg/usr/bin $fs/usr - cp -a $_pkg/usr/lib/cups $fs/usr/lib - cp -a $_pkg/usr/lib/python* $fs/usr/lib - cp -a $_pkg/usr/lib/sane $fs/usr/lib - cp -a $_pkg/usr/lib/*so* $fs/usr/lib - cp -a $_pkg/usr/share/cups \ - $_pkg/usr/share/hal \ - $_pkg/usr/share/hplip \ - $_pkg/usr/share/ppd \ + cp -a $install/etc $fs + cp -a $install/usr/bin $fs/usr + cp -a $install/usr/lib/cups $fs/usr/lib + cp -a $install/usr/lib/python* $fs/usr/lib + cp -a $install/usr/lib/sane $fs/usr/lib + cp -a $install/usr/lib/*so* $fs/usr/lib + cp -a $install/usr/share/cups \ + $install/usr/share/hplip \ + $install/usr/share/ppd \ $fs/usr/share # compress non-zipped ppd files find $fs/usr/share/ppd/HP -name "*.ppd" -exec gzip -n9 {} \; - + + # make sure hp-toolbox exist + ln -sf ../share/hplip/toolbox.py $fs/usr/bin/hp-toolbox + # remove autostart of hp-daemon rm -rf $fs/etc/sane.d @@ -63,8 +65,5 @@ post_install() { - # remove the desktop file - rm $fs/usr/share/applications/hplip.desktop - tazpkg reconfigure udev --root=$1 } diff -r c1685ec71d84 -r 21ed7ad86c60 hplip/stuff/cups-1.6-buildfix.diff --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hplip/stuff/cups-1.6-buildfix.diff Sat Jun 01 10:21:01 2013 +0000 @@ -0,0 +1,392 @@ +diff -up hplip-3.12.6/prnt/cupsext/cupsext.c.ipp_accessors hplip-3.12.6/prnt/cupsext/cupsext.c +--- hplip-3.12.6/prnt/cupsext/cupsext.c.ipp_accessors 2012-06-18 12:41:19.000000000 +0200 ++++ hplip-3.12.6/prnt/cupsext/cupsext.c 2012-07-19 17:11:47.606524137 +0200 +@@ -87,6 +87,46 @@ typedef int Py_ssize_t; + #define PY_SSIZE_T_MIN INT_MIN + #endif + ++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) ++#define HAVE_CUPS_1_6 1 ++#endif ++ ++#ifndef HAVE_CUPS_1_6 ++#define ippGetCount(attr) attr->num_values ++#define ippGetGroupTag(attr) attr->group_tag ++#define ippGetValueTag(attr) attr->value_tag ++#define ippGetName(attr) attr->name ++#define ippGetBoolean(attr, element) attr->values[element].boolean ++#define ippGetInteger(attr, element) attr->values[element].integer ++#define ippGetStatusCode(ipp) ipp->request.status.status_code ++#define ippGetString(attr, element, language) attr->values[element].string.text ++ ++static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp ) ++{ ++ if (!ipp) ++ return (NULL); ++ return (ipp->current = ipp->attrs); ++} ++ ++static ipp_attribute_t * ippNextAttribute( ipp_t *ipp ) ++{ ++ if (!ipp || !ipp->current) ++ return (NULL); ++ return (ipp->current = ipp->current->next); ++} ++ ++static int ippSetOperation( ipp_t *ipp, ipp_op_t op ) ++{ ++ ipp->request.op.operation_id = op; ++ return (1); ++} ++ ++static int ippSetRequestId( ipp_t *ipp, int request_id ) ++{ ++ ipp->request.any.request_id = request_id; ++ return (1); ++} ++#endif + + int g_num_options = 0; + cups_option_t * g_options; +@@ -333,8 +373,8 @@ PyObject * getPrinters( PyObject * self, + request = ippNew(); + language = cupsLangDefault(); + +- request->request.op.operation_id = CUPS_GET_PRINTERS; +- request->request.any.request_id = 1; ++ ippSetOperation( request, CUPS_GET_PRINTERS ); ++ ippSetRequestId ( request, 1); + + ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, + "attributes-charset", NULL, cupsLangEncoding( language ) ); +@@ -378,10 +418,10 @@ PyObject * getPrinters( PyObject * self, + ipp_pstate_t state; + int i = 0; + +- for ( attr = response->attrs; attr != NULL; attr = attr->next ) ++ for ( attr = ippFirstAttribute( response ); attr != NULL; attr = ippNextAttribute( response ) ) + { +- while ( attr != NULL && attr->group_tag != IPP_TAG_PRINTER ) +- attr = attr->next; ++ while ( attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER ) ++ attr = ippNextAttribute( response ); + + if ( attr == NULL ) + break; +@@ -390,41 +430,41 @@ PyObject * getPrinters( PyObject * self, + state = IPP_PRINTER_IDLE; + accepting = 0; + +- while ( attr != NULL && attr->group_tag == IPP_TAG_PRINTER ) ++ while ( attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER ) + { +- if ( strcmp( attr->name, "printer-name" ) == 0 && +- attr->value_tag == IPP_TAG_NAME ) +- name = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "device-uri" ) == 0 && +- attr->value_tag == IPP_TAG_URI ) +- device_uri = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-uri-supported" ) == 0 && +- attr->value_tag == IPP_TAG_URI ) +- printer_uri = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-info" ) == 0 && +- attr->value_tag == IPP_TAG_TEXT ) +- info = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-location" ) == 0 && +- attr->value_tag == IPP_TAG_TEXT ) +- location = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-make-and-model" ) == 0 && +- attr->value_tag == IPP_TAG_TEXT ) +- make_model = attr->values[ 0 ].string.text; +- +- else if ( strcmp( attr->name, "printer-state" ) == 0 && +- attr->value_tag == IPP_TAG_ENUM ) +- state = ( ipp_pstate_t ) attr->values[ 0 ].integer; +- +- else if (!strcmp(attr->name, "printer-is-accepting-jobs") && +- attr->value_tag == IPP_TAG_BOOLEAN) +- accepting = attr->values[ 0 ].boolean; ++ if ( strcmp( ippGetName( attr ), "printer-name" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_NAME ) ++ name = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "device-uri" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_URI ) ++ device_uri = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-uri-supported" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_URI ) ++ printer_uri = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-info" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_TEXT ) ++ info = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-location" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_TEXT ) ++ location = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-make-and-model" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_TEXT ) ++ make_model = ippGetString( attr, 0, NULL ); ++ ++ else if ( strcmp( ippGetName( attr ), "printer-state" ) == 0 && ++ ippGetValueTag( attr ) == IPP_TAG_ENUM ) ++ state = ( ipp_pstate_t ) ippGetInteger( attr, 0 ); ++ ++ else if (!strcmp(ippGetName( attr ), "printer-is-accepting-jobs") && ++ ippGetValueTag( attr ) == IPP_TAG_BOOLEAN) ++ accepting = ippGetBoolean( attr, 0 ); + +- attr = attr->next; ++ attr = ippNextAttribute( response ); + } + + if ( device_uri == NULL ) +@@ -522,8 +562,8 @@ PyObject * addPrinter( PyObject * self, + request = ippNew(); + language = cupsLangDefault(); + +- request->request.op.operation_id = CUPS_ADD_PRINTER; +- request->request.any.request_id = 1; ++ ippSetOperation( request, CUPS_ADD_PRINTER ); ++ ippSetRequestId ( request, 1 ); + + ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, + "attributes-charset", NULL, cupsLangEncoding( language ) ); +@@ -568,7 +608,7 @@ PyObject * addPrinter( PyObject * self, + } + else + { +- status = response->request.status.status_code; ++ status = ippGetStatusCode( response ); + //ippDelete( response ); + r = 1; + } +@@ -631,8 +671,8 @@ PyObject * delPrinter( PyObject * self, + */ + request = ippNew(); + +- request->request.op.operation_id = CUPS_DELETE_PRINTER; +- request->request.op.request_id = 1; ++ ippSetOperation( request, CUPS_DELETE_PRINTER ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -650,7 +690,7 @@ PyObject * delPrinter( PyObject * self, + */ + response = cupsDoRequest( http, request, "/admin/" ); + +- if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) ) ++ if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) ) + { + r = 1; + } +@@ -721,8 +761,8 @@ PyObject * setDefaultPrinter( PyObject * + + request = ippNew(); + +- request->request.op.operation_id = CUPS_SET_DEFAULT; +- request->request.op.request_id = 1; ++ ippSetOperation( request, CUPS_SET_DEFAULT ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -743,7 +783,7 @@ PyObject * setDefaultPrinter( PyObject * + + response = cupsDoRequest( http, request, "/admin/" ); + +- if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) ) ++ if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) ) + { + r = 1; + } +@@ -797,8 +837,8 @@ PyObject * controlPrinter( PyObject * se + + request = ippNew(); + +- request->request.op.operation_id = op; +- request->request.op.request_id = 1; ++ ippSetOperation( request, op ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -822,7 +862,7 @@ PyObject * controlPrinter( PyObject * se + + response = cupsDoRequest(http, request, "/admin/"); + +- if (( response != NULL ) && (response->request.status.status_code <= IPP_OK_CONFLICT)) ++ if (( response != NULL ) && (ippGetStatusCode( response ) <= IPP_OK_CONFLICT)) + { + r = 1; + } +@@ -837,7 +877,7 @@ abort: + if ( response != NULL ) + ippDelete( response ); + +- return Py_BuildValue( "i", r );; ++ return Py_BuildValue( "i", r ); + } + + +@@ -1116,8 +1156,8 @@ PyObject * getPPDList( PyObject * self, + + request = ippNew(); + +- request->request.op.operation_id = CUPS_GET_PPDS; +- request->request.op.request_id = 1; ++ ippSetOperation( request, CUPS_GET_PPDS ); ++ ippSetRequestId ( request, 1 ); + + language = cupsLangDefault(); + +@@ -1143,43 +1183,43 @@ PyObject * getPPDList( PyObject * self, + if ((response = cupsDoRequest(http, request, "/")) != NULL) + { + +- for (attr = response->attrs; attr; attr = attr->next) ++ for (attr = ippFirstAttribute( response ); attr; attr = ippNextAttribute( response )) + { + PyObject *dict; + char *ppdname = NULL; + +- while (attr && attr->group_tag != IPP_TAG_PRINTER) +- attr = attr->next; ++ while (attr && ippGetGroupTag( attr ) != IPP_TAG_PRINTER) ++ attr = ippNextAttribute( response ); + + if (!attr) + break; + + dict = PyDict_New (); + +- for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next) ++ for (; attr && ippGetGroupTag( attr ) == IPP_TAG_PRINTER; attr = ippNextAttribute( response )) + { + PyObject *val = NULL; + +- if (!strcmp (attr->name, "ppd-name") && attr->value_tag == IPP_TAG_NAME) ++ if (!strcmp (ippGetName( attr ), "ppd-name") && ippGetValueTag( attr ) == IPP_TAG_NAME) + { +- ppdname = attr->values[0].string.text; ++ ppdname = ippGetString( attr, 0, NULL ); + + //sprintf( buf, "print '%s'", ppdname); + //PyRun_SimpleString( buf ); + } + +- else if (attr->value_tag == IPP_TAG_TEXT || attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_KEYWORD) +- //else if ((!strcmp (attr->name, "ppd-natural-language") && attr->value_tag == IPP_TAG_LANGUAGE) || +- // (!strcmp (attr->name, "ppd-make-and-model") && attr->value_tag == IPP_TAG_TEXT) || +- // (!strcmp (attr->name, "ppd-make") && attr->value_tag == IPP_TAG_TEXT) || +- // (!strcmp (attr->name, "ppd-device-id") && attr->value_tag == IPP_TAG_TEXT)) ++ else if (ippGetValueTag( attr ) == IPP_TAG_TEXT || ippGetValueTag( attr ) == IPP_TAG_NAME || ippGetValueTag( attr ) == IPP_TAG_KEYWORD) ++ //else if ((!strcmp (ippGetName( attr ), "ppd-natural-language") && ippGetValueTag( attr ) == IPP_TAG_LANGUAGE) || ++ // (!strcmp (ippGetName( attr ), "ppd-make-and-model") && ippGetValueTag( attr ) == IPP_TAG_TEXT) || ++ // (!strcmp (ippGetName( attr ), "ppd-make") && ippGetValueTag( attr ) == IPP_TAG_TEXT) || ++ // (!strcmp (ippGetName( attr ), "ppd-device-id") && ippGetValueTag( attr ) == IPP_TAG_TEXT)) + { +- val = PyObj_from_UTF8(attr->values[0].string.text); ++ val = PyObj_from_UTF8(ippGetString( attr, 0, NULL )); + } + + if (val) + { +- PyDict_SetItemString (dict, attr->name, val); ++ PyDict_SetItemString (dict, ippGetName( attr ), val); + Py_DECREF (val); + } + } +diff -up hplip-3.12.6/scan/sane/hpaio.c.ipp_accessors hplip-3.12.6/scan/sane/hpaio.c +--- hplip-3.12.6/scan/sane/hpaio.c.ipp_accessors 2012-06-18 12:42:51.000000000 +0200 ++++ hplip-3.12.6/scan/sane/hpaio.c 2012-07-19 17:12:34.557848760 +0200 +@@ -47,6 +47,43 @@ + #define DEBUG_DECLARE_ONLY + #include "sanei_debug.h" + ++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) ++#define HAVE_CUPS_1_6 1 ++#endif ++ ++#ifndef HAVE_CUPS_1_6 ++#define ippGetGroupTag(attr) attr->group_tag ++#define ippGetValueTag(attr) attr->value_tag ++#define ippGetName(attr) attr->name ++#define ippGetString(attr, element, language) attr->values[element].string.text ++ ++static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp ) ++{ ++ if (!ipp) ++ return (NULL); ++ return (ipp->current = ipp->attrs); ++} ++ ++static ipp_attribute_t * ippNextAttribute( ipp_t *ipp ) ++{ ++ if (!ipp || !ipp->current) ++ return (NULL); ++ return (ipp->current = ipp->current->next); ++} ++ ++static int ippSetOperation( ipp_t *ipp, ipp_op_t op ) ++{ ++ ipp->request.op.operation_id = op; ++ return (1); ++} ++ ++static int ippSetRequestId( ipp_t *ipp, int request_id ) ++{ ++ ipp->request.any.request_id = request_id; ++ return (1); ++} ++#endif ++ + static SANE_Device **DeviceList = NULL; + + static int AddDeviceList(char *uri, char *model, SANE_Device ***pd) +@@ -186,8 +223,8 @@ static int GetCupsPrinters(char ***print + /* Assemble the IPP request */ + request = ippNew(); + +- request->request.op.operation_id = CUPS_GET_PRINTERS; +- request->request.any.request_id = 1; ++ ippSetOperation( request, CUPS_GET_PRINTERS ); ++ ippSetRequestId( request, 1 ); + + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en"); +@@ -197,20 +234,20 @@ static int GetCupsPrinters(char ***print + if ((response = cupsDoRequest(http, request, "/")) == NULL) + goto bugout; + +- for (attr = response->attrs; attr != NULL; attr = attr->next) ++ for (attr = ippFirstAttribute ( response ); attr != NULL; attr = ippNextAttribute( response )) + { + /* Skip leading attributes until we hit a printer. */ +- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) +- attr = attr->next; ++ while (attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER) ++ attr = ippNextAttribute( response ); + + if (attr == NULL) + break; + +- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) ++ while (attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER) + { +- if (strcmp(attr->name, "device-uri") == 0 && attr->value_tag == IPP_TAG_URI && AddCupsList(attr->values[0].string.text, printer) == 0) ++ if (strcmp(ippGetName( attr ), "device-uri") == 0 && ippGetValueTag( attr ) == IPP_TAG_URI && AddCupsList(ippGetString( attr, 0, NULL ), printer) == 0) + cnt++; +- attr = attr->next; ++ attr = ippNextAttribute( response ); + } + + if (attr == NULL) diff -r c1685ec71d84 -r 21ed7ad86c60 hplip/stuff/hplip-cups-1.5.0-compatibility.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hplip/stuff/hplip-cups-1.5.0-compatibility.patch Sat Jun 01 10:21:01 2013 +0000 @@ -0,0 +1,9 @@ +--- hplip-3.11.7~/prnt/hpps/hppsfilter.c 2011-07-24 18:58:05.000000000 +0000 ++++ hplip-3.11.7/prnt/hpps/hppsfilter.c 2011-08-09 20:51:54.150214165 +0000 +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + #include + #include