diff options
author | sbd <sbd@pkgsrc.org> | 2010-06-05 23:03:15 +0000 |
---|---|---|
committer | sbd <sbd@pkgsrc.org> | 2010-06-05 23:03:15 +0000 |
commit | 3cdd9406d101901d3766d84cc72244cca7b05ab5 (patch) | |
tree | ab2a58a5a5ac51d90b27d6f4e2b2260b1c53332e /print | |
parent | 31d7a18279e94860f6a619c4f7c7162ae1a315ee (diff) | |
download | pkgsrc-3cdd9406d101901d3766d84cc72244cca7b05ab5.tar.gz |
Incorporate:
usb-backend-both-usblp-and-libusb.dpatch by <till.kamppeter@gmail.com>
http://www.cups.org/str.php?L3357
One "usb" CUPS backend for both libusb-based and usblp-based access.
Bump PKGREVISION.
Diffstat (limited to 'print')
-rw-r--r-- | print/cups/Makefile | 4 | ||||
-rw-r--r-- | print/cups/distinfo | 9 | ||||
-rw-r--r-- | print/cups/patches/patch-af | 18 | ||||
-rw-r--r-- | print/cups/patches/patch-aj | 39 | ||||
-rw-r--r-- | print/cups/patches/patch-ak | 96 | ||||
-rw-r--r-- | print/cups/patches/patch-al | 217 | ||||
-rw-r--r-- | print/cups/patches/patch-am | 212 | ||||
-rw-r--r-- | print/cups/patches/patch-ap | 17 |
8 files changed, 606 insertions, 6 deletions
diff --git a/print/cups/Makefile b/print/cups/Makefile index 7b2e9cb946a..a883a45df6e 100644 --- a/print/cups/Makefile +++ b/print/cups/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.162 2010/05/26 09:18:48 sbd Exp $ +# $NetBSD: Makefile,v 1.163 2010/06/05 23:03:15 sbd Exp $ # # The CUPS author is very good about taking back changes into the main # CUPS distribution. The correct place to send patches or bug-fixes is: @@ -8,7 +8,7 @@ DISTNAME= cups-${DIST_VERS}-source PKGNAME= cups-${DIST_VERS:S/-/./g} BASE_VERS= 1.4.3 DIST_VERS= ${BASE_VERS} -PKGREVISION= 1 +PKGREVISION= 2 CATEGORIES= print MASTER_SITES= http://ftp.easysw.com/pub/cups/${BASE_VERS}/ \ diff --git a/print/cups/distinfo b/print/cups/distinfo index 59ab88031f7..766381459a9 100644 --- a/print/cups/distinfo +++ b/print/cups/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.70 2010/05/25 08:52:59 wiz Exp $ +$NetBSD: distinfo,v 1.71 2010/06/05 23:03:15 sbd Exp $ SHA1 (cups-1.4.3-source.tar.bz2) = 0dd9e3d709614d26cce77728b9263556c94c9559 RMD160 (cups-1.4.3-source.tar.bz2) = 6c5ab282405d6a1132163c727583f3a572307d88 @@ -8,10 +8,15 @@ SHA1 (patch-ab) = 8269ed7f24bcd5b16c143353443d4689fef082b2 SHA1 (patch-ac) = d99dfa6e71efdc5f069c2c3e73e1b29beebf5c9b SHA1 (patch-ad) = 4ba06354ead85138340b87caabf87d153a15036a SHA1 (patch-ae) = d89b47961d899f99b6c57be3ebdb6a7b34e55324 -SHA1 (patch-af) = d062df1855e86e92f883f702996f28afc7aff90d +SHA1 (patch-af) = c05f7739d65c7b81cc712cbf6008d53568601f6a SHA1 (patch-ag) = 680c1c7fb44d8153b5825252d2e297a5196ca98e SHA1 (patch-ah) = 763220bdbc01c9ab323c62b7bc601a3082bd03e2 SHA1 (patch-ai) = fae5b2b5e54ea947d92c89c0bdcdd86c7e3bad12 +SHA1 (patch-aj) = 471a2738bd7bd6a00596dbeb120084ac37840b31 +SHA1 (patch-ak) = 25b923d85e34d42f41d9d7747c22e1a452b9bf4e +SHA1 (patch-al) = b5dd793efed46fc950f08bfbd5fb92180ba3be77 +SHA1 (patch-am) = e719b1f2666ee843a7f834aa37db61e88bcbdbf7 SHA1 (patch-an) = 231c871e31db279e8aeafba71506f93330e0a971 SHA1 (patch-ao) = 7fe50080b9a6fd4dac186020f9351ef6000373c7 +SHA1 (patch-ap) = 70c5fa4a19ca2812818844180ca9db9cb7cfd601 SHA1 (patch-at) = aee1f0e8cbcd9e2dbcfa9af3fb675ea7ce1ce622 diff --git a/print/cups/patches/patch-af b/print/cups/patches/patch-af index 805e04eab3e..fd2be5d9654 100644 --- a/print/cups/patches/patch-af +++ b/print/cups/patches/patch-af @@ -1,6 +1,11 @@ -$NetBSD: patch-af,v 1.19 2010/05/21 10:05:20 sbd Exp $ +$NetBSD: patch-af,v 1.20 2010/06/05 23:03:15 sbd Exp $ ---- backend/Makefile.orig 2009-03-03 19:39:21.000000000 +0000 +* Remove unneeded $(LIBTOOL), it's now in $(INSTALL_BIN). + +* Add usb-hybrid.c for +usb-backend-both-usblp-and-libusb.dpatch by <till.kamppeter@gmail.com> + +--- backend/Makefile.orig 2010-06-05 02:08:34.225590281 +0000 +++ backend/Makefile @@ -84,7 +84,7 @@ install-data: install-exec: @@ -11,3 +16,12 @@ $NetBSD: patch-af,v 1.19 2010/05/21 10:05:20 sbd Exp $ done for file in $(UBACKENDS); do \ $(INSTALL_BIN) $$file $(SERVERBIN)/backend; \ +@@ -267,7 +267,7 @@ usb: usb.o ../cups/$(LIBCUPS) libbackend + echo Linking $@... + $(CC) $(LDFLAGS) -o usb usb.o libbackend.a $(LIBUSB) \ + $(BACKLIBS) $(LIBS) +-usb.o: usb.c usb-darwin.c usb-libusb.c usb-unix.c ++usb.o: usb.c usb-darwin.c usb-hybrid.c usb-libusb.c usb-unix.c + + + # diff --git a/print/cups/patches/patch-aj b/print/cups/patches/patch-aj new file mode 100644 index 00000000000..f911ca2d9f8 --- /dev/null +++ b/print/cups/patches/patch-aj @@ -0,0 +1,39 @@ +$NetBSD: patch-aj,v 1.13 2010/06/05 23:09:29 sbd Exp $ + +Incorporate +usb-backend-both-usblp-and-libusb.dpatch by <till.kamppeter@gmail.com> +http://www.cups.org/str.php?L3357 + +--- backend/ieee1284.c.orig 2009-12-08 02:13:42.000000000 +0000 ++++ backend/ieee1284.c +@@ -255,6 +255,7 @@ backendGetDeviceID( + cups_option_t *values; /* Keys and values in device ID */ + const char *mfg, /* Manufacturer */ + *mdl, /* Model */ ++ *des, /* Description */ + *sern; /* Serial number */ + char temp[256], /* Temporary manufacturer string */ + *tempptr; /* Pointer into temp string */ +@@ -285,10 +286,20 @@ backendGetDeviceID( + } + else + { +- strlcpy(temp, make_model, sizeof(temp)); ++ /* ++ * No manufacturer? Use the model string or description... ++ */ ++ ++ if (mdl) ++ _ppdNormalizeMakeAndModel(mdl, temp, sizeof(temp)); ++ else if ((des = cupsGetOption("DESCRIPTION", num_values, values)) != NULL || ++ (des = cupsGetOption("DES", num_values, values)) != NULL) ++ _ppdNormalizeMakeAndModel(des, temp, sizeof(temp)); ++ else ++ strlcpy(temp, "Unknown", sizeof(temp)); + + if ((tempptr = strchr(temp, ' ')) != NULL) +- *tempptr = '\0'; ++ *tempptr = '\0'; + + mfg = temp; + } diff --git a/print/cups/patches/patch-ak b/print/cups/patches/patch-ak new file mode 100644 index 00000000000..0b9966db857 --- /dev/null +++ b/print/cups/patches/patch-ak @@ -0,0 +1,96 @@ +$NetBSD: patch-ak,v 1.13 2010/06/05 23:09:29 sbd Exp $ + +Incorporate +usb-backend-both-usblp-and-libusb.dpatch by <till.kamppeter@gmail.com> +http://www.cups.org/str.php?L3357 + +--- backend/usb-hybrid.c.orig 2010-06-05 02:02:53.089601743 +0000 ++++ backend/usb-hybrid.c +@@ -0,0 +1,87 @@ ++/* ++ * "Id: usb-hybrid.c 8807 2009-08-31 18:45:43Z mike " ++ * ++ * USB port backend for the Common UNIX Printing System (CUPS). ++ * ++ * This file is included from "usb.c" when compiled on Linux. ++ * ++ * Copyright 2007-2008 by Apple Inc. ++ * Copyright 1997-2007 by Easy Software Products, all rights reserved. ++ * ++ * These coded instructions, statements, and computer programs are the ++ * property of Apple Inc. and are protected by Federal copyright ++ * law. Distribution and use rights are outlined in the file "LICENSE.txt" ++ * "LICENSE" which should have been included with this file. If this ++ * file is missing or damaged, see the license at "http://www.cups.org/". ++ * ++ * This file is subject to the Apple OS-Developed Software exception. ++ * ++ * Contents: ++ * ++ * print_device() - Print a file to a USB device. ++ * list_devices() - List all USB devices. ++ */ ++ ++/* ++ * Include necessary headers. ++ */ ++ ++#include <sys/select.h> ++ ++/* ++ * Include the two USB implementations used under Linux ... ++ */ ++ ++#include "usb-libusb.c" ++#include "usb-unix.c" ++ ++/* ++ * 'print_device()' - Print a file to a USB device. ++ */ ++ ++int /* O - Exit status */ ++print_device(const char *uri, /* I - Device URI */ ++ const char *hostname, /* I - Hostname/manufacturer */ ++ const char *resource, /* I - Resource/modelname */ ++ char *options, /* I - Device options/serial number */ ++ int print_fd, /* I - File descriptor to print */ ++ int copies, /* I - Copies to print */ ++ int argc, /* I - Number of command-line arguments (6 or 7) */ ++ char *argv[]) /* I - Command-line arguments */ ++{ ++ int result; ++ for(;;) ++ { ++ result = print_device_unix(uri, hostname, resource, options, print_fd, ++ copies, argc, argv); ++ if (result == -1) ++ { ++ result = print_device_libusb(uri, hostname, resource, options, print_fd, ++ copies, argc, argv); ++ if (result == -1) ++ sleep(5); ++ else ++ return(result); ++ } ++ else ++ return(result); ++ } ++} ++ ++/* ++ * 'list_devices()' - List all USB devices. ++ */ ++ ++void ++list_devices(void) ++{ ++ /* Try both discovery methods, each device will appear only under one ++ of them */ ++ list_devices_libusb(); ++ list_devices_unix(); ++} ++ ++ ++/* ++ * End of "Id: usb-hybrid.c 8807 2009-08-31 18:45:43Z mike ". ++ */ diff --git a/print/cups/patches/patch-al b/print/cups/patches/patch-al new file mode 100644 index 00000000000..d3612b07bab --- /dev/null +++ b/print/cups/patches/patch-al @@ -0,0 +1,217 @@ +$NetBSD: patch-al,v 1.8 2010/06/05 23:09:29 sbd Exp $ + +Incorporate +usb-backend-both-usblp-and-libusb.dpatch by <till.kamppeter@gmail.com> +http://www.cups.org/str.php?L3357 + +--- backend/usb-libusb.c.orig 2009-09-11 20:03:31.000000000 +0000 ++++ backend/usb-libusb.c +@@ -13,16 +13,16 @@ + * + * Contents: + * +- * list_devices() - List the available printers. +- * print_device() - Print a file to a USB device. ++ * list_devices_libusb() - List the available printers. ++ * print_device_libusb() - Print a file to a USB device. + * close_device() - Close the connection to the USB printer. + * find_device() - Find or enumerate USB printers. + * get_device_id() - Get the IEEE-1284 device ID for the printer. + * list_cb() - List USB printers for discovery. + * make_device_uri() - Create a device URI for a USB printer. +- * open_device() - Open a connection to the USB printer. ++ * open_device_libusb() - Open a connection to the USB printer. + * print_cb() - Find a USB printer for printing. +- * side_cb() - Handle side-channel requests. ++ * side_cb_libusb() - Handle side-channel requests. + */ + + /* +@@ -65,30 +65,30 @@ static int list_cb(usb_printer_t *print + static char *make_device_uri(usb_printer_t *printer, + const char *device_id, + char *uri, size_t uri_size); +-static int open_device(usb_printer_t *printer, int verbose); ++static int open_device_libusb(usb_printer_t *printer, int verbose); + static int print_cb(usb_printer_t *printer, const char *device_uri, + const char *device_id, const void *data); +-static ssize_t side_cb(usb_printer_t *printer, int print_fd); ++static ssize_t side_cb_libusb(usb_printer_t *printer, int print_fd); + + + /* +- * 'list_devices()' - List the available printers. ++ * 'list_devices_libusb()' - List the available printers. + */ + + void +-list_devices(void) ++list_devices_libusb(void) + { +- fputs("DEBUG: list_devices\n", stderr); ++ fputs("DEBUG: list_devices_libusb\n", stderr); + find_device(list_cb, NULL); + } + + + /* +- * 'print_device()' - Print a file to a USB device. ++ * 'print_device_libusb()' - Print a file to a USB device. + */ + + int /* O - Exit status */ +-print_device(const char *uri, /* I - Device URI */ ++print_device_libusb(const char *uri, /* I - Device URI */ + const char *hostname, /* I - Hostname/manufacturer */ + const char *resource, /* I - Resource/modelname */ + char *options, /* I - Device options/serial number */ +@@ -105,19 +105,23 @@ print_device(const char *uri, /* I - De + struct pollfd pfds[2]; /* Poll descriptors */ + + +- fputs("DEBUG: print_device\n", stderr); ++ fputs("DEBUG: print_device_libusb\n", stderr); + + /* + * Connect to the printer... + */ + ++#if defined(__linux) || defined(__sun) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) ++ if ((printer = find_device(print_cb, uri)) == NULL) ++ return(-1); ++#else + while ((printer = find_device(print_cb, uri)) == NULL) + { + _cupsLangPuts(stderr, + _("INFO: Waiting for printer to become available...\n")); + sleep(5); + } +- ++#endif + + /* + * If we are printing data from a print driver on stdin, ignore SIGTERM +@@ -189,7 +193,7 @@ print_device(const char *uri, /* I - De + + if (pfds[1].revents & (POLLIN | POLLHUP)) + { +- if ((bytes = side_cb(printer, print_fd)) < 0) ++ if ((bytes = side_cb_libusb(printer, print_fd)) < 0) + pfds[1].events = 0; /* Filter has gone away... */ + else + tbytes += bytes; +@@ -359,7 +363,7 @@ find_device(usb_cb_t cb, /* I - Callb + printer.iface = iface; + printer.handle = NULL; + +- if (!open_device(&printer, data != NULL)) ++ if (!open_device_libusb(&printer, data != NULL)) + { + if (!get_device_id(&printer, device_id, sizeof(device_id))) + { +@@ -583,6 +587,14 @@ make_device_uri( + mfg = tempmfg; + } + ++ if (!strncasecmp(mdl, mfg, strlen(mfg))) ++ { ++ mdl += strlen(mfg); ++ ++ while (isspace(*mdl & 255)) ++ mdl ++; ++ } ++ + /* + * Generate the device URI from the manufacturer, model, serial number, + * and interface number... +@@ -611,11 +623,11 @@ make_device_uri( + + + /* +- * 'open_device()' - Open a connection to the USB printer. ++ * 'open_device_libusb()' - Open a connection to the USB printer. + */ + + static int /* O - 0 on success, -1 on error */ +-open_device(usb_printer_t *printer, /* I - Printer */ ++open_device_libusb(usb_printer_t *printer, /* I - Printer */ + int verbose) /* I - Update connecting-to-device state? */ + { + int number; /* Configuration/interface/altset numbers */ +@@ -733,16 +745,73 @@ print_cb(usb_printer_t *printer, /* I - + const char *device_id, /* I - IEEE-1284 device ID */ + const void *data) /* I - User data (make, model, S/N) */ + { +- return (!strcmp((char *)data, device_uri)); ++ char *uri = (char *)data, ++ *str1, ++ *str2, ++ buf[255], ++ requested_uri[1024]; ++ ++ /* Work on a copy of uri */ ++ strncpy(requested_uri, uri, sizeof(requested_uri)); ++ requested_uri[sizeof(requested_uri) - 1] = '\0'; ++ ++ /* ++ * libusb-discovered URIs can have an "interface" specification and this ++ * never happens for usblp-discovered URIs, so remove the "interface" ++ * specification from the URI which we are checking currently. This way a ++ * queue for a usblp-discovered printer can now be accessed via libusb ++ */ ++ if (((str1 = strstr(requested_uri, "interface=")) == NULL) && ++ ((str2 = strstr(device_uri, "interface=")) != NULL)) ++ { ++ *(str2 - 1) = '\0'; ++ } ++ ++ /* ++ * Old URI with "serial=?". Cut this part off and consider this as ++ * an URI without serial number ++ */ ++ if ((str1 = strstr(requested_uri, "serial=?")) != NULL) ++ *(str1 - 1) = '\0'; ++ ++ /* ++ * Old URI without serial number. Match it also with URIs with serial ++ * number ++ */ ++ if (((str1 = strstr(requested_uri, "serial=")) == NULL) && ++ ((str2 = strstr(device_uri, "serial=")) != NULL)) ++ *(str2 - 1) = '\0'; ++ ++ /* ++ * libusb-discovered URIs can have a "serial" specification when the ++ * usblp-discovered URI for the same printer does not have one, as ++ * with libusb we can discover serial numbers also with other methods ++ * than only via the device ID. Therefore we accept also a ++ * usblp-discovered printer without serial number as a match. This we ++ * do by removing the serial number from the queue's (libusb-discovered) ++ * URI before comparing. Also warn the user because of the incapability ++ * of the usblp-based access to distinguish printers by the serial ++ * number. ++ */ ++ if (((str1 = strstr(requested_uri, "serial=")) == NULL) && ++ ((str2 = strstr(device_uri, "serial=")) != NULL)) ++ { ++ *(str2 - 1) = '\0'; ++ if (backendGetMakeModel(device_id, buf, sizeof(buf)) == 0) ++ fprintf(stderr, "WARNING: If you have more than one %s printer connected to this machine, please make sure that the \"usblp\" kernel module is always unloaded (and blacklisted) and re-create the queues for these printers. Otherwise CUPS will not be able to distinguish them.\n", ++ buf); ++ } ++ ++ return (!strcmp(requested_uri, device_uri)); + } + + + /* +- * 'side_cb()' - Handle side-channel requests. ++ * 'side_cb_libusb()' - Handle side-channel requests. + */ + + static ssize_t /* O - Number of bytes written */ +-side_cb(usb_printer_t *printer, /* I - Printer */ ++side_cb_libusb(usb_printer_t *printer, /* I - Printer */ + int print_fd) /* I - File to print */ + { + ssize_t bytes, /* Bytes read/written */ diff --git a/print/cups/patches/patch-am b/print/cups/patches/patch-am new file mode 100644 index 00000000000..3ab3f71d9db --- /dev/null +++ b/print/cups/patches/patch-am @@ -0,0 +1,212 @@ +$NetBSD: patch-am,v 1.9 2010/06/05 23:09:29 sbd Exp $ + +Incorporate +usb-backend-both-usblp-and-libusb.dpatch by <till.kamppeter@gmail.com> +http://www.cups.org/str.php?L3357 + +--- backend/usb-unix.c.orig 2009-12-08 02:13:42.000000000 +0000 ++++ backend/usb-unix.c +@@ -18,10 +18,10 @@ + * + * Contents: + * +- * print_device() - Print a file to a USB device. +- * list_devices() - List all USB devices. +- * open_device() - Open a USB device... +- * side_cb() - Handle side-channel requests... ++ * print_device_unix() - Print a file to a USB device. ++ * list_devices_unix() - List all USB devices. ++ * open_device_unix() - Open a USB device... ++ * side_cb_unix() - Handle side-channel requests... + */ + + /* +@@ -35,17 +35,17 @@ + * Local functions... + */ + +-static int open_device(const char *uri, int *use_bc); +-static int side_cb(int print_fd, int device_fd, int snmp_fd, ++static int open_device_unix(const char *uri, int *use_bc); ++static int side_cb_unix(int print_fd, int device_fd, int snmp_fd, + http_addr_t *addr, int use_bc); + + + /* +- * 'print_device()' - Print a file to a USB device. ++ * 'print_device_unix()' - Print a file to a USB device. + */ + + int /* O - Exit status */ +-print_device(const char *uri, /* I - Device URI */ ++print_device_unix(const char *uri, /* I - Device URI */ + const char *hostname, /* I - Hostname/manufacturer */ + const char *resource, /* I - Resource/modelname */ + char *options, /* I - Device options/serial number */ +@@ -102,7 +102,7 @@ print_device(const char *uri, /* I - De + strncasecmp(hostname, "Minolta", 7); + #endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__ */ + +- if ((device_fd = open_device(uri, &use_bc)) == -1) ++ if ((device_fd = open_device_unix(uri, &use_bc)) == -1) + { + if (getenv("CLASS") != NULL) + { +@@ -132,6 +132,10 @@ print_device(const char *uri, /* I - De + _("INFO: Printer busy; will retry in 10 seconds...\n")); + sleep(10); + } ++#ifdef HAVE_USB_H ++ else ++ return (-1); ++#else + else if (errno == ENXIO || errno == EIO || errno == ENOENT || + errno == ENODEV) + { +@@ -147,6 +151,7 @@ print_device(const char *uri, /* I - De + resource, strerror(errno)); + return (CUPS_BACKEND_FAILED); + } ++#endif + } + } + while (device_fd < 0); +@@ -190,7 +195,7 @@ print_device(const char *uri, /* I - De + tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, NULL); + + #else +- tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, side_cb); ++ tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, side_cb_unix); + #endif /* __sun */ + + if (print_fd != 0 && tbytes >= 0) +@@ -214,11 +219,11 @@ print_device(const char *uri, /* I - De + + + /* +- * 'list_devices()' - List all USB devices. ++ * 'list_devices_unix()' - List all USB devices. + */ + + void +-list_devices(void) ++list_devices_unix(void) + { + #ifdef __linux + int i; /* Looping var */ +@@ -320,11 +325,11 @@ list_devices(void) + + + /* +- * 'open_device()' - Open a USB device... ++ * 'open_device_unix()' - Open a USB device... + */ + + static int /* O - File descriptor or -1 on error */ +-open_device(const char *uri, /* I - Device URI */ ++open_device_unix(const char *uri, /* I - Device URI */ + int *use_bc) /* O - Set to 0 for unidirectional */ + { + int fd; /* File descriptor */ +@@ -357,9 +362,12 @@ open_device(const char *uri, /* I - Dev + char device[255], /* Device filename */ + device_id[1024], /* Device ID string */ + make_model[1024], /* Make and model */ +- device_uri[1024]; /* Device URI string */ +- ++ device_uri[1024], /* Device URI string */ ++ requested_uri[1024], /* Device URI string */ ++ *str1, ++ *str2; + ++ + /* + * Find the correct USB device... + */ +@@ -407,7 +415,55 @@ open_device(const char *uri, /* I - Dev + device_uri[0] = '\0'; + } + +- if (!strcmp(uri, device_uri)) ++ /* Work on a copy of uri */ ++ strncpy(requested_uri, uri, sizeof(requested_uri)); ++ requested_uri[sizeof(requested_uri) - 1] = '\0'; ++ ++ /* ++ * libusb-discovered URIs can have an "interface" specification and this ++ * never happens for usblp-discovered URIs, so remove the "interface" ++ * specification from the URI of the print queue. This way a queue for ++ * a libusb-discovered printer can now be accessed via the usblip kernel ++ * module ++ */ ++ if ((str1 = strstr(requested_uri, "interface=")) != NULL) ++ *(str1 - 1) = '\0'; ++ ++ /* ++ * Old URI with "serial=?". Cut this part off and consider this as ++ * an URI without serial number ++ */ ++ if ((str1 = strstr(requested_uri, "serial=?")) != NULL) ++ *(str1 - 1) = '\0'; ++ ++ /* ++ * Old URI without serial number. Match it also with URIs with serial ++ * number ++ */ ++ if (((str1 = strstr(requested_uri, "serial=")) == NULL) && ++ ((str2 = strstr(device_uri, "serial=")) != NULL)) ++ *(str2 - 1) = '\0'; ++ ++ /* ++ * libusb-discovered URIs can have a "serial" specification when the ++ * usblp-discovered URI for the same printer does not have one, as ++ * with libusb we can discover serial numbers also with other methods ++ * than only via the device ID. Therefore we accept also a ++ * usblp-discovered printer without serial number as a match. This we ++ * do by removing the serial number from the queue's (libusb-discovered) ++ * URI before comparing. Also warn the user because of the incapability ++ * of the usblp-based access to distinguish printers by the serial ++ * number. ++ */ ++ if (((str1 = strstr(requested_uri, "serial=")) != NULL) && ++ ((str2 = strstr(device_uri, "serial=")) == NULL)) ++ { ++ *(str1 - 1) = '\0'; ++ fprintf(stderr, "WARNING: If you have more than one %s printer connected to this machine, please unload (and blacklist) the \"usblp\" kernel module as otherwise CUPS will not be able to distinguish your printers.\n", ++ make_model); ++ } ++ ++ if (!strcmp(requested_uri, device_uri)) + { + /* + * Yes, return this file descriptor... +@@ -433,10 +489,14 @@ open_device(const char *uri, /* I - Dev + */ + + if (busy) ++ { + _cupsLangPuts(stderr, + _("INFO: Printer busy; will retry in 5 seconds...\n")); + +- sleep(5); ++ sleep(5); ++ } ++ else ++ return -1; + } + } + #elif defined(__sun) && defined(ECPPIOC_GETDEVID) +@@ -557,11 +617,11 @@ open_device(const char *uri, /* I - Dev + + + /* +- * 'side_cb()' - Handle side-channel requests... ++ * 'side_cb_unix()' - Handle side-channel requests... + */ + + static int /* O - 0 on success, -1 on error */ +-side_cb(int print_fd, /* I - Print file */ ++side_cb_unix(int print_fd, /* I - Print file */ + int device_fd, /* I - Device file */ + int snmp_fd, /* I - SNMP socket (unused) */ + http_addr_t *addr, /* I - Device address (unused) */ diff --git a/print/cups/patches/patch-ap b/print/cups/patches/patch-ap new file mode 100644 index 00000000000..824dfceebd7 --- /dev/null +++ b/print/cups/patches/patch-ap @@ -0,0 +1,17 @@ +$NetBSD: patch-ap,v 1.9 2010/06/05 23:09:29 sbd Exp $ + +Incorporate +usb-backend-both-usblp-and-libusb.dpatch by <till.kamppeter@gmail.com> +http://www.cups.org/str.php?L3357 + +--- backend/usb.c.orig 2008-06-24 01:28:36.000000000 +0000 ++++ backend/usb.c +@@ -56,7 +56,7 @@ int print_device(const char *uri, const + */ + + #ifdef HAVE_USB_H +-# include "usb-libusb.c" ++# include "usb-hybrid.c" + #elif defined(__APPLE__) + # include "usb-darwin.c" + #elif defined(__linux) || defined(__sun) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) |