summaryrefslogtreecommitdiff
path: root/recipes/libusb
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/libusb')
-rw-r--r--recipes/libusb/files/configure_fix.patch17
-rw-r--r--recipes/libusb/libusb-0.1.10a/ARMfix.patch20
-rw-r--r--recipes/libusb/libusb-0.1.10a/debian-changes.patch407
-rw-r--r--recipes/libusb/libusb-0.1.8/amd64-fPIC.patch11
-rw-r--r--recipes/libusb/libusb-0.1.8/configure.patch99
-rw-r--r--recipes/libusb/libusb-0.1.8/pkgconfig.patch68
-rw-r--r--recipes/libusb/libusb-compat-0.0.9+0.1.0-beta2/0.1.0-beta1-gcc3.4-fix.patch13
-rw-r--r--recipes/libusb/libusb-compat_0.0.9+0.1.0-beta2.bb39
-rw-r--r--recipes/libusb/libusb-compat_0.1.0.bb36
-rw-r--r--recipes/libusb/libusb-native_0.1.10a.bb4
-rw-r--r--recipes/libusb/libusb-native_0.1.12.bb3
-rw-r--r--recipes/libusb/libusb1-0.9.2/0.9.0-gcc3.4-compat-fix.patch13
-rw-r--r--recipes/libusb/libusb1_0.9.2.bb30
-rw-r--r--recipes/libusb/libusb1_1.0.0.bb29
-rw-r--r--recipes/libusb/libusb_0.0.0.bb27
-rw-r--r--recipes/libusb/libusb_0.1.10a.bb39
-rw-r--r--recipes/libusb/libusb_0.1.12.bb36
17 files changed, 891 insertions, 0 deletions
diff --git a/recipes/libusb/files/configure_fix.patch b/recipes/libusb/files/configure_fix.patch
new file mode 100644
index 0000000000..f01f0143f5
--- /dev/null
+++ b/recipes/libusb/files/configure_fix.patch
@@ -0,0 +1,17 @@
+For some reason libtool 2.2.2 can't cope with this, LT_LANG(C++) works though.
+
+RP - 14/4/08
+
+Index: libusb-0.1.12/configure.in
+===================================================================
+--- libusb-0.1.12.orig/configure.in 2008-04-14 22:08:26.000000000 +0100
++++ libusb-0.1.12/configure.in 2008-04-14 22:09:43.000000000 +0100
+@@ -149,7 +149,7 @@
+ fi
+
+ # Checks for programs.
+-AC_LANG_CPLUSPLUS
++AC_PROG_CXX
+ AC_PROG_CC
+ AM_PROG_CC_C_O
+ AC_PROG_INSTALL
diff --git a/recipes/libusb/libusb-0.1.10a/ARMfix.patch b/recipes/libusb/libusb-0.1.10a/ARMfix.patch
new file mode 100644
index 0000000000..803bd99bab
--- /dev/null
+++ b/recipes/libusb/libusb-0.1.10a/ARMfix.patch
@@ -0,0 +1,20 @@
+--- /tmp/usb.c 2005-07-22 01:45:43.606167000 +0200
++++ libusb-0.1.10a/usb.c 2005-07-22 01:47:22.527128728 +0200
+@@ -156,7 +156,7 @@
+ * Some ports fetch the descriptors on scanning (like Linux) so we don't
+ * need to fetch them again.
+ */
+- if (!dev->config) {
++/* if (!dev->config) { */
+ usb_dev_handle *udev;
+
+ udev = usb_open(dev);
+@@ -165,7 +165,7 @@
+
+ usb_close(udev);
+ }
+- }
++/* }*/
+
+ changes++;
+
diff --git a/recipes/libusb/libusb-0.1.10a/debian-changes.patch b/recipes/libusb/libusb-0.1.10a/debian-changes.patch
new file mode 100644
index 0000000000..6f79bc7950
--- /dev/null
+++ b/recipes/libusb/libusb-0.1.10a/debian-changes.patch
@@ -0,0 +1,407 @@
+diff -urN libusb_0.1.10a.orig/bsd.c libusb-0.1.10a/bsd.c
+--- libusb_0.1.10a.orig/bsd.c 2004-02-18 08:34:52.000000000 +0100
++++ libusb-0.1.10a/bsd.c 2005-06-30 19:40:00.000000000 +0200
+@@ -25,6 +25,10 @@
+ * for both read and write.
+ */
+
++#if defined(__FreeBSD__) && !defined(__FreeBSD_kernel__)
++#define __FreeBSD_kernel__ __FreeBSD__
++#endif
++
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <string.h>
+@@ -142,7 +146,7 @@
+ USB_ERROR(-ENOMEM);
+ dev->impl_info = info;
+
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ snprintf(ctlpath, PATH_MAX, "%s", dev->device->filename);
+ #else
+ snprintf(ctlpath, PATH_MAX, "%s.00", dev->device->filename);
+@@ -255,7 +259,7 @@
+ ep = UE_GET_ADDR(ep);
+
+ if (info->ep_fd[ep] < 0) {
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ snprintf(buf, sizeof(buf) - 1, "%s.%d", dev->device->filename, ep);
+ #else
+ snprintf(buf, sizeof(buf) - 1, "%s.%02d", dev->device->filename, ep);
+@@ -286,7 +290,7 @@
+ fd = ensure_ep_open(dev, ep, O_WRONLY);
+ if (fd < 0) {
+ if (usb_debug >= 2) {
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ fprintf (stderr, "usb_bulk_write: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep));
+ #else
+ fprintf (stderr, "usb_bulk_write: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep));
+@@ -302,7 +306,7 @@
+
+ ret = write(fd, bytes, size);
+ if (ret < 0)
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ USB_ERROR_STR(-errno, "error writing to bulk endpoint %s.%d: %s",
+ dev->device->filename, UE_GET_ADDR(ep), strerror(errno));
+ #else
+@@ -324,7 +328,7 @@
+ fd = ensure_ep_open(dev, ep, O_RDONLY);
+ if (fd < 0) {
+ if (usb_debug >= 2) {
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ fprintf (stderr, "usb_bulk_read: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep));
+ #else
+ fprintf (stderr, "usb_bulk_read: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep));
+@@ -343,7 +347,7 @@
+
+ ret = read(fd, bytes, size);
+ if (ret < 0)
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ USB_ERROR_STR(-errno, "error reading from bulk endpoint %s.%d: %s",
+ dev->device->filename, UE_GET_ADDR(ep), strerror(errno));
+ #else
+@@ -365,7 +369,7 @@
+ fd = ensure_ep_open(dev, ep, O_WRONLY);
+ if (fd < 0) {
+ if (usb_debug >= 2) {
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ fprintf (stderr, "usb_interrupt_write: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep));
+ #else
+ fprintf (stderr, "usb_interrupt_write: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep));
+@@ -382,7 +386,7 @@
+ do {
+ ret = write(fd, bytes+sent, size-sent);
+ if (ret < 0)
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ USB_ERROR_STR(-errno, "error writing to interrupt endpoint %s.%d: %s",
+ dev->device->filename, UE_GET_ADDR(ep), strerror(errno));
+ #else
+@@ -407,7 +411,7 @@
+ fd = ensure_ep_open(dev, ep, O_RDONLY);
+ if (fd < 0) {
+ if (usb_debug >= 2) {
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ fprintf (stderr, "usb_interrupt_read: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep));
+ #else
+ fprintf (stderr, "usb_interrupt_read: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep));
+@@ -427,7 +431,7 @@
+ do {
+ ret = read(fd, bytes+retrieved, size-retrieved);
+ if (ret < 0)
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ USB_ERROR_STR(-errno, "error reading from interrupt endpoint %s.%d: %s",
+ dev->device->filename, UE_GET_ADDR(ep), strerror(errno));
+ #else
+@@ -543,7 +547,7 @@
+ /* best not to play with things we don't understand */
+ continue;
+
+-#if __FreeBSD__
++#ifdef __FreeBSD_kernel__
+ snprintf(buf, sizeof(buf) - 1, "/dev/%s", di.udi_devnames[0]);
+ #else
+ snprintf(buf, sizeof(buf) - 1, "/dev/%s.00", di.udi_devnames[0]);
+diff -urN libusb_0.1.10a.orig/linux.c libusb-0.1.10a/linux.c
+--- libusb_0.1.10a.orig/linux.c 2005-02-11 03:16:10.000000000 +0100
++++ libusb-0.1.10a/linux.c 2005-06-30 19:40:00.000000000 +0200
+@@ -156,6 +156,8 @@
+ return ret;
+ }
+
++#define URB_USERCONTEXT_COOKIE ((void *)0x1)
++
+ /* Reading and writing are the same except for the endpoint */
+ static int usb_urb_transfer(usb_dev_handle *dev, int ep, int urbtype,
+ char *bytes, int size, int timeout)
+@@ -163,14 +165,16 @@
+ struct usb_urb urb;
+ unsigned int bytesdone = 0, requested;
+ struct timeval tv, tv_ref, tv_now;
+- void *context;
++ struct usb_urb *context;
+ int ret, waiting;
+
+ /*
+- * FIXME: The use of the URB interface is incorrect here if there are
+- * multiple callers at the same time. We assume we're the only caller
+- * and if we get completions from another caller, this code will fail
+- * in interesting ways.
++ * HACK: The use of urb.usercontext is a hack to get threaded applications
++ * sort of working again. Threaded support is still not recommended, but
++ * this should allow applications to work in the common cases. Basically,
++ * if we get the completion for an URB we're not waiting for, then we update
++ * the usercontext pointer to 1 for the other threads URB and it will see
++ * the change after it wakes up from the the timeout. Ugly, but it works.
+ */
+
+ /*
+@@ -198,10 +202,10 @@
+ urb.flags = 0;
+ urb.buffer = bytes + bytesdone;
+ urb.buffer_length = requested;
+- urb.usercontext = (void *)ep;
+ urb.signr = 0;
+ urb.actual_length = 0;
+ urb.number_of_packets = 0; /* don't do isochronous yet */
++ urb.usercontext = NULL;
+
+ ret = ioctl(dev->fd, IOCTL_USB_SUBMITURB, &urb);
+ if (ret < 0) {
+@@ -212,18 +216,28 @@
+ FD_ZERO(&writefds);
+ FD_SET(dev->fd, &writefds);
+
++restart:
+ waiting = 1;
+- while (((ret = ioctl(dev->fd, IOCTL_USB_REAPURBNDELAY, &context)) == -1) && waiting) {
++ context = NULL;
++ while (!urb.usercontext && ((ret = ioctl(dev->fd, IOCTL_USB_REAPURBNDELAY, &context)) == -1) && waiting) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 1000; // 1 msec
+ select(dev->fd + 1, NULL, &writefds, NULL, &tv); //sub second wait
+
+- /* compare with actual time, as the select timeout is not that precise */
+- gettimeofday(&tv_now, NULL);
++ if (timeout) {
++ /* compare with actual time, as the select timeout is not that precise */
++ gettimeofday(&tv_now, NULL);
++
++ if ((tv_now.tv_sec > tv_ref.tv_sec) ||
++ ((tv_now.tv_sec == tv_ref.tv_sec) && (tv_now.tv_usec >= tv_ref.tv_usec)))
++ waiting = 0;
++ }
++ }
+
+- if ((tv_now.tv_sec > tv_ref.tv_sec) ||
+- ((tv_now.tv_sec == tv_ref.tv_sec) && (tv_now.tv_usec >= tv_ref.tv_usec)))
+- waiting = 0;
++ if (context && context != &urb) {
++ context->usercontext = URB_USERCONTEXT_COOKIE;
++ /* We need to restart since we got a successful URB, but not ours */
++ goto restart;
+ }
+
+ /*
+@@ -231,14 +245,14 @@
+ * something happened during the reaping and we should return that
+ * error now
+ */
+- if (ret < 0 && errno != EAGAIN)
++ if (ret < 0 && !urb.usercontext && errno != EAGAIN)
+ USB_ERROR_STR(-errno, "error reaping URB: %s", strerror(errno));
+
+ bytesdone += urb.actual_length;
+- } while (ret == 0 && bytesdone < size && urb.actual_length == requested);
++ } while ((ret == 0 || urb.usercontext) && bytesdone < size && urb.actual_length == requested);
+
+ /* If the URB didn't complete in success or error, then let's unlink it */
+- if (ret < 0) {
++ if (ret < 0 && !urb.usercontext) {
+ int rc;
+
+ if (!waiting)
+diff -urN libusb_0.1.10a.orig/usb.h.in libusb-0.1.10a/usb.h.in
+--- libusb_0.1.10a.orig/usb.h.in 2004-08-03 20:20:38.000000000 +0200
++++ libusb-0.1.10a/usb.h.in 2005-06-30 19:40:00.000000000 +0200
+@@ -13,8 +13,9 @@
+
+ #include <unistd.h>
+ #include <stdlib.h>
++#include <stdint.h>
+ #include <limits.h>
+-
++#include <sys/param.h>
+ #include <dirent.h>
+
+ /*
+@@ -63,40 +64,40 @@
+
+ /* All standard descriptors have these 2 fields in common */
+ struct usb_descriptor_header {
+- u_int8_t bLength;
+- u_int8_t bDescriptorType;
+-};
++ uint8_t bLength;
++ uint8_t bDescriptorType;
++} __attribute__ ((packed));
+
+ /* String descriptor */
+ struct usb_string_descriptor {
+- u_int8_t bLength;
+- u_int8_t bDescriptorType;
+- u_int16_t wData[1];
+-};
++ uint8_t bLength;
++ uint8_t bDescriptorType;
++ uint16_t wData[1];
++} __attribute__ ((packed));
+
+ /* HID descriptor */
+ struct usb_hid_descriptor {
+- u_int8_t bLength;
+- u_int8_t bDescriptorType;
+- u_int16_t bcdHID;
+- u_int8_t bCountryCode;
+- u_int8_t bNumDescriptors;
+- /* u_int8_t bReportDescriptorType; */
+- /* u_int16_t wDescriptorLength; */
++ uint8_t bLength;
++ uint8_t bDescriptorType;
++ uint16_t bcdHID;
++ uint8_t bCountryCode;
++ uint8_t bNumDescriptors;
++ /* uint8_t bReportDescriptorType; */
++ /* uint16_t wDescriptorLength; */
+ /* ... */
+-};
++} __attribute__ ((packed));
+
+ /* Endpoint descriptor */
+ #define USB_MAXENDPOINTS 32
+ struct usb_endpoint_descriptor {
+- u_int8_t bLength;
+- u_int8_t bDescriptorType;
+- u_int8_t bEndpointAddress;
+- u_int8_t bmAttributes;
+- u_int16_t wMaxPacketSize;
+- u_int8_t bInterval;
+- u_int8_t bRefresh;
+- u_int8_t bSynchAddress;
++ uint8_t bLength __attribute__ ((packed));
++ uint8_t bDescriptorType __attribute__ ((packed));
++ uint8_t bEndpointAddress __attribute__ ((packed));
++ uint8_t bmAttributes __attribute__ ((packed));
++ uint16_t wMaxPacketSize __attribute__ ((packed));
++ uint8_t bInterval __attribute__ ((packed));
++ uint8_t bRefresh __attribute__ ((packed));
++ uint8_t bSynchAddress __attribute__ ((packed));
+
+ unsigned char *extra; /* Extra descriptors */
+ int extralen;
+@@ -114,15 +115,15 @@
+ /* Interface descriptor */
+ #define USB_MAXINTERFACES 32
+ struct usb_interface_descriptor {
+- u_int8_t bLength;
+- u_int8_t bDescriptorType;
+- u_int8_t bInterfaceNumber;
+- u_int8_t bAlternateSetting;
+- u_int8_t bNumEndpoints;
+- u_int8_t bInterfaceClass;
+- u_int8_t bInterfaceSubClass;
+- u_int8_t bInterfaceProtocol;
+- u_int8_t iInterface;
++ uint8_t bLength __attribute__ ((packed));;
++ uint8_t bDescriptorType __attribute__ ((packed));;
++ uint8_t bInterfaceNumber __attribute__ ((packed));;
++ uint8_t bAlternateSetting __attribute__ ((packed));;
++ uint8_t bNumEndpoints __attribute__ ((packed));;
++ uint8_t bInterfaceClass __attribute__ ((packed));;
++ uint8_t bInterfaceSubClass __attribute__ ((packed));;
++ uint8_t bInterfaceProtocol __attribute__ ((packed));;
++ uint8_t iInterface __attribute__ ((packed));;
+
+ struct usb_endpoint_descriptor *endpoint;
+
+@@ -140,14 +141,14 @@
+ /* Configuration descriptor information.. */
+ #define USB_MAXCONFIG 8
+ struct usb_config_descriptor {
+- u_int8_t bLength;
+- u_int8_t bDescriptorType;
+- u_int16_t wTotalLength;
+- u_int8_t bNumInterfaces;
+- u_int8_t bConfigurationValue;
+- u_int8_t iConfiguration;
+- u_int8_t bmAttributes;
+- u_int8_t MaxPower;
++ uint8_t bLength __attribute__ ((packed));
++ uint8_t bDescriptorType __attribute__ ((packed));
++ uint16_t wTotalLength __attribute__ ((packed));
++ uint8_t bNumInterfaces __attribute__ ((packed));
++ uint8_t bConfigurationValue __attribute__ ((packed));
++ uint8_t iConfiguration __attribute__ ((packed));
++ uint8_t bmAttributes __attribute__ ((packed));
++ uint8_t MaxPower __attribute__ ((packed));
+
+ struct usb_interface *interface;
+
+@@ -157,29 +158,29 @@
+
+ /* Device descriptor */
+ struct usb_device_descriptor {
+- u_int8_t bLength;
+- u_int8_t bDescriptorType;
+- u_int16_t bcdUSB;
+- u_int8_t bDeviceClass;
+- u_int8_t bDeviceSubClass;
+- u_int8_t bDeviceProtocol;
+- u_int8_t bMaxPacketSize0;
+- u_int16_t idVendor;
+- u_int16_t idProduct;
+- u_int16_t bcdDevice;
+- u_int8_t iManufacturer;
+- u_int8_t iProduct;
+- u_int8_t iSerialNumber;
+- u_int8_t bNumConfigurations;
+-};
++ uint8_t bLength;
++ uint8_t bDescriptorType;
++ uint16_t bcdUSB;
++ uint8_t bDeviceClass;
++ uint8_t bDeviceSubClass;
++ uint8_t bDeviceProtocol;
++ uint8_t bMaxPacketSize0;
++ uint16_t idVendor;
++ uint16_t idProduct;
++ uint16_t bcdDevice;
++ uint8_t iManufacturer;
++ uint8_t iProduct;
++ uint8_t iSerialNumber;
++ uint8_t bNumConfigurations;
++} __attribute__ ((packed));
+
+ struct usb_ctrl_setup {
+- u_int8_t bRequestType;
+- u_int8_t bRequest;
+- u_int16_t wValue;
+- u_int16_t wIndex;
+- u_int16_t wLength;
+-};
++ uint8_t bRequestType;
++ uint8_t bRequest;
++ uint16_t wValue;
++ uint16_t wIndex;
++ uint16_t wLength;
++} __attribute__ ((packed));
+
+ /*
+ * Standard requests
+@@ -249,7 +250,7 @@
+
+ void *dev; /* Darwin support */
+
+- u_int8_t devnum;
++ uint8_t devnum;
+
+ unsigned char num_children;
+ struct usb_device **children;
+@@ -261,7 +262,7 @@
+ char dirname[PATH_MAX + 1];
+
+ struct usb_device *devices;
+- u_int32_t location;
++ uint32_t location;
+
+ struct usb_device *root_dev;
+ };
diff --git a/recipes/libusb/libusb-0.1.8/amd64-fPIC.patch b/recipes/libusb/libusb-0.1.8/amd64-fPIC.patch
new file mode 100644
index 0000000000..b8cfdbe697
--- /dev/null
+++ b/recipes/libusb/libusb-0.1.8/amd64-fPIC.patch
@@ -0,0 +1,11 @@
+--- Makefile.in.orig 2004-03-27 16:34:18.371955584 +0100
++++ Makefile.in 2004-03-27 16:34:07.796563288 +0100
+@@ -54,7 +54,7 @@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+
+-CFLAGS = $(CFLAGS_EXT)
++CFLAGS = $(CFLAGS_EXT) -fPIC
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+ CXX = @CXX@
diff --git a/recipes/libusb/libusb-0.1.8/configure.patch b/recipes/libusb/libusb-0.1.8/configure.patch
new file mode 100644
index 0000000000..6f014a9dcd
--- /dev/null
+++ b/recipes/libusb/libusb-0.1.8/configure.patch
@@ -0,0 +1,99 @@
+--- libusb-0.1.8/configure.in~configure.patch 2004-02-12 03:27:18.000000000 +1100
++++ libusb-0.1.8/configure.in 2004-11-03 20:17:45.949802575 +1100
+@@ -1,10 +1,11 @@
+ # This configure.in is based off of the one that glib uses
+
+ # require atleast autoconf 2.13
+-AC_PREREQ(2.13)
++AC_PREREQ(2.57)
+
+ # init autoconf (and check for presence of usb.c)
+-AC_INIT(usb.c)
++AC_INIT
++AC_CONFIG_SRCDIR([usb.c])
+
+ AH_TOP(
+ #undef LINUX_API
+@@ -29,8 +30,8 @@
+
+ dnl we need to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they
+ dnl are available for $ac_help expansion (don't we all *love* autoconf?)
+-ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+- [AC_DIVERT_PUSH(NOTICE)])
++dnl ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
++dnl [AC_DIVERT_PUSH(NOTICE)])
+
+ #
+ # The following version number definitions apply to libusb
+@@ -52,7 +53,7 @@
+ LIBUSB_BINARY_AGE=4
+ LIBUSB_VERSION=$LIBUSB_MAJOR_VERSION.$LIBUSB_MINOR_VERSION.$LIBUSB_MICRO_VERSION
+ dnl
+-AC_DIVERT_POP()dnl
++dnl AC_DIVERT_POP()dnl
+
+ AC_SUBST(LIBUSB_MAJOR_VERSION)
+ AC_SUBST(LIBUSB_MINOR_VERSION)
+@@ -81,7 +82,7 @@
+ AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
+
+ # Specify a configuration file
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS([config.h])
+
+ AC_DEFINE_UNQUOTED(LIBUSB_MAJOR_VERSION, $LIBUSB_MAJOR_VERSION)
+ AC_DEFINE_UNQUOTED(LIBUSB_MINOR_VERSION, $LIBUSB_MINOR_VERSION)
+@@ -149,14 +150,14 @@
+
+ dnl figure debugging default, prior to $ac_help setup
+ dnl
+-ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+- [AC_DIVERT_PUSH(NOTICE)])
++dnl ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
++dnl [AC_DIVERT_PUSH(NOTICE)])
+ if test `expr $LIBUSB_MINOR_VERSION \% 2` = 1 ; then
+ debug_default=yes
+ else
+ debug_default=minimum
+ fi
+-AC_DIVERT_POP()dnl
++dnl AC_DIVERT_POP()dnl
+
+ dnl declare --enable-* args and collect ac_help strings
+ AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default)
+@@ -207,15 +208,11 @@
+
+ if test "$os_support" = "bsd"; then
+ AC_MSG_CHECKING(if dev/usb/usb.h uses new naming convention)
+- AC_TRY_COMPILE(
+- [#include <dev/usb/usb.h>],
+- [int main(void)
++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <dev/usb/usb.h>]], [[int main(void)
+ {
+ int a = ((struct usb_ctl_request *)0L)->ucr_addr;
+ return 0;
+- }],
+- [AC_MSG_RESULT(yes)],
+- [AC_MSG_RESULT(no)
++ }]])],[AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)
+ AC_DEFINE_UNQUOTED(HAVE_OLD_DEV_USB_USB_H)])
+ fi
+
+@@ -246,7 +243,7 @@
+
+ AM_CONDITIONAL(BUILD_DOCS, test "$build_docs" != "no")
+
+-AC_OUTPUT([
++AC_CONFIG_FILES([
+ Makefile
+ doc/Makefile
+ libusb.spec
+@@ -255,5 +252,6 @@
+ README
+ INSTALL.libusb
+ usb.h
+-],[chmod +x libusb-config])
+-
++])
++AC_CONFIG_COMMANDS([default],[[chmod +x libusb-config]],[[]])
++AC_OUTPUT
diff --git a/recipes/libusb/libusb-0.1.8/pkgconfig.patch b/recipes/libusb/libusb-0.1.8/pkgconfig.patch
new file mode 100644
index 0000000000..737c89edb0
--- /dev/null
+++ b/recipes/libusb/libusb-0.1.8/pkgconfig.patch
@@ -0,0 +1,68 @@
+--- libusb-0.1.8.orig/libusb.pc.in
++++ libusb-0.1.8/libusb.pc.in
+@@ -0,0 +1,11 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: libusb
++Description: USB access library
++Version: @VERSION@
++Libs: -L${libdir} -lusb
++Cflags: -I${includedir}
++
+--- libusb-0.1.8.orig/configure.in
++++ libusb-0.1.8/configure.in
+@@ -219,6 +219,26 @@
+ AC_DEFINE_UNQUOTED(HAVE_OLD_DEV_USB_USB_H)])
+ fi
+
++#pkg-config: pkg-config is a tool to simplify checks for libraries and versions.
++pkgconfig_msg="no (http://www.freedesktop.org/software/pkgconfig)"
++try_pkgconfig=true
++have_pkgconfig=false
++AC_ARG_WITH(pkgconfig, [ --without-pkgconfig don't use pkg-config],[
++ if test x$withval = xno; then
++ try_pkgconfig=false
++ pkgconfig_msg="no (not requested)"
++ fi])
++if $try_pkgconfig; then
++ AC_PATH_PROG(PKG_CONFIG,pkg-config)
++ if test -n "${PKG_CONFIG}"; then
++ have_pkgconfig=true
++ pkgconfig_msg="yes"
++ fi
++fi
++# guessing directory to install *.pc into
++pkgconfigdir='${libdir}/pkgconfig'
++AC_SUBST(pkgconfigdir)
++
+ # Check if the user wants to enable documentation
+ AC_MSG_CHECKING(if we should build the documentation)
+ AC_ARG_ENABLE(build-docs, [ --disable-build-docs turn off building documentation],
+@@ -249,6 +269,7 @@
+ AC_OUTPUT([
+ Makefile
+ doc/Makefile
++ libusb.pc
+ libusb.spec
+ libusb-config
+ tests/Makefile
+--- libusb-0.1.8.orig/Makefile.am
++++ libusb-0.1.8/Makefile.am
+@@ -12,11 +12,13 @@
+
+ bin_SCRIPTS = libusb-config
+
+-EXTRA_DIST = LICENSE libusb.spec.in libusb.spec libusb-config.in README.in README INSTALL.libusb.in INSTALL.libusb
++EXTRA_DIST = LICENSE libusb.spec.in libusb.spec libusb-config.in README.in README INSTALL.libusb.in INSTALL.libusb libusb.pc.in
+ EXTRA_libusb_la_SOURCE = linux.c linux.h bsd.c darwin.c
+
+ lib_LTLIBRARIES = libusb.la
+
++pkgconfig_DATA= libusb.pc
++
+ if LINUX_API
+ OS_SUPPORT = linux.c linux.h
+ else
diff --git a/recipes/libusb/libusb-compat-0.0.9+0.1.0-beta2/0.1.0-beta1-gcc3.4-fix.patch b/recipes/libusb/libusb-compat-0.0.9+0.1.0-beta2/0.1.0-beta1-gcc3.4-fix.patch
new file mode 100644
index 0000000000..501ba3fb29
--- /dev/null
+++ b/recipes/libusb/libusb-compat-0.0.9+0.1.0-beta2/0.1.0-beta1-gcc3.4-fix.patch
@@ -0,0 +1,13 @@
+Index: libusb-compat-0.1.0-beta1/configure.ac
+===================================================================
+--- libusb-compat-0.1.0-beta1.orig/configure.ac 2008-07-21 13:14:42.000000000 +0200
++++ libusb-compat-0.1.0-beta1/configure.ac 2008-07-21 13:15:03.000000000 +0200
+@@ -55,7 +55,7 @@
+ CFLAGS="$saved_cflags"
+
+ AC_DEFINE([API_EXPORTED], [__attribute__((visibility("default")))], [Default visibility])
+-AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow"
++AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wshadow"
+ AC_SUBST(AM_CFLAGS)
+
+ AC_CONFIG_FILES([libusb.pc] [libusb-config] [Makefile] [libusb/Makefile] [examples/Makefile])
diff --git a/recipes/libusb/libusb-compat_0.0.9+0.1.0-beta2.bb b/recipes/libusb/libusb-compat_0.0.9+0.1.0-beta2.bb
new file mode 100644
index 0000000000..34cc1ac50d
--- /dev/null
+++ b/recipes/libusb/libusb-compat_0.0.9+0.1.0-beta2.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "libusb is a library to provide userspace \
+access to USB devices."
+HOMEPAGE = "http://libusb.sf.net"
+SECTION = "libs"
+LICENSE = "LGPL"
+
+PE = "1"
+PR = "r0"
+
+DEPENDS = "libusb1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-compat-0.1.0-beta2.tar.bz2 \
+ file://0.1.0-beta1-gcc3.4-fix.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/libusb-compat-0.1.0-beta2"
+
+inherit autotools pkgconfig binconfig lib_package
+
+PARALLEL_MAKE = ""
+EXTRA_OECONF = "--disable-build-docs"
+
+export CXXFLAGS += "-lstdc++ -I${STAGING_INCDIR}"
+
+do_stage() {
+ autotools_stage_all
+ install -m 755 ${S}/libusb-config ${STAGING_BINDIR}
+ # can we get rid of that? wouldn't a sed statement do as well?
+ sed -i 's:\-L${libdir} :-L${STAGING_LIBDIR} :' ${STAGING_BINDIR}/libusb-config
+
+ if [ "${STAGING_BINDIR}" != "${STAGING_BINDIR_CROSS}" ]; then
+ install -d ${STAGING_BINDIR_CROSS}/
+ mv ${STAGING_BINDIR}/libusb-config ${STAGING_BINDIR_CROSS}/libusb-config
+ fi
+}
+
+PACKAGES =+ "libusbpp"
+
+FILES_libusbpp = "${libdir}/libusbpp*.so.*"
diff --git a/recipes/libusb/libusb-compat_0.1.0.bb b/recipes/libusb/libusb-compat_0.1.0.bb
new file mode 100644
index 0000000000..887765133a
--- /dev/null
+++ b/recipes/libusb/libusb-compat_0.1.0.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "libusb is a library to provide userspace \
+access to USB devices."
+HOMEPAGE = "http://libusb.sf.net"
+SECTION = "libs"
+LICENSE = "LGPL"
+
+PE = "1"
+PR = "r0"
+
+DEPENDS = "libusb1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-compat-${PV}.tar.bz2 \
+ "
+
+inherit autotools pkgconfig binconfig lib_package
+
+PARALLEL_MAKE = ""
+EXTRA_OECONF = "--disable-build-docs"
+
+export CXXFLAGS += "-lstdc++ -I${STAGING_INCDIR}"
+
+do_stage() {
+ autotools_stage_all
+ install -m 755 ${S}/libusb-config ${STAGING_BINDIR}
+ # can we get rid of that? wouldn't a sed statement do as well?
+ sed -i 's:\-L${libdir} :-L${STAGING_LIBDIR} :' ${STAGING_BINDIR}/libusb-config
+
+ if [ "${STAGING_BINDIR}" != "${STAGING_BINDIR_CROSS}" ]; then
+ install -d ${STAGING_BINDIR_CROSS}/
+ mv ${STAGING_BINDIR}/libusb-config ${STAGING_BINDIR_CROSS}/libusb-config
+ fi
+}
+
+PACKAGES =+ "libusbpp"
+
+FILES_libusbpp = "${libdir}/libusbpp*.so.*"
diff --git a/recipes/libusb/libusb-native_0.1.10a.bb b/recipes/libusb/libusb-native_0.1.10a.bb
new file mode 100644
index 0000000000..a76768c3b6
--- /dev/null
+++ b/recipes/libusb/libusb-native_0.1.10a.bb
@@ -0,0 +1,4 @@
+require libusb_${PV}.bb
+inherit native
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libusb-0.1.10a"
diff --git a/recipes/libusb/libusb-native_0.1.12.bb b/recipes/libusb/libusb-native_0.1.12.bb
new file mode 100644
index 0000000000..637ded28e4
--- /dev/null
+++ b/recipes/libusb/libusb-native_0.1.12.bb
@@ -0,0 +1,3 @@
+require libusb_${PV}.bb
+inherit native
+
diff --git a/recipes/libusb/libusb1-0.9.2/0.9.0-gcc3.4-compat-fix.patch b/recipes/libusb/libusb1-0.9.2/0.9.0-gcc3.4-compat-fix.patch
new file mode 100644
index 0000000000..1b06945d1a
--- /dev/null
+++ b/recipes/libusb/libusb1-0.9.2/0.9.0-gcc3.4-compat-fix.patch
@@ -0,0 +1,13 @@
+Index: libusb-0.9.0/configure.ac
+===================================================================
+--- libusb-0.9.0.orig/configure.ac 2008-07-21 08:04:03.000000000 +0200
++++ libusb-0.9.0/configure.ac 2008-07-21 08:04:16.000000000 +0200
+@@ -62,7 +62,7 @@
+ CFLAGS="$saved_cflags"
+
+ AC_DEFINE([API_EXPORTED], [__attribute__((visibility("default")))], [Default visibility])
+-AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow"
++AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wshadow"
+ AC_SUBST(AM_CFLAGS)
+
+ AC_CONFIG_FILES([libusb-1.0.pc] [Makefile] [libusb/Makefile] [examples/Makefile] [doc/Makefile])
diff --git a/recipes/libusb/libusb1_0.9.2.bb b/recipes/libusb/libusb1_0.9.2.bb
new file mode 100644
index 0000000000..2c144f053d
--- /dev/null
+++ b/recipes/libusb/libusb1_0.9.2.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "libusb is a library to provide userspace \
+access to USB devices."
+HOMEPAGE = "http://libusb.sf.net"
+SECTION = "libs"
+LICENSE = "LGPL"
+
+PR = "r0"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.bz2 \
+ file://0.9.0-gcc3.4-compat-fix.patch;patch=1 \
+"
+S = "${WORKDIR}/libusb-${PV}"
+
+inherit autotools pkgconfig binconfig lib_package
+
+PARALLEL_MAKE = ""
+EXTRA_OECONF = "--disable-build-docs"
+
+export CXXFLAGS += "-lstdc++ -I${STAGING_INCDIR}"
+
+LIBTOOL = "${HOST_SYS}-libtool"
+EXTRA_OEMAKE = "'LIBTOOL=${LIBTOOL}'"
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES =+ "libusbpp"
+FILES_libusbpp = "${libdir}/libusbpp*.so.*"
diff --git a/recipes/libusb/libusb1_1.0.0.bb b/recipes/libusb/libusb1_1.0.0.bb
new file mode 100644
index 0000000000..8450a7c946
--- /dev/null
+++ b/recipes/libusb/libusb1_1.0.0.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "libusb is a library to provide userspace \
+access to USB devices."
+HOMEPAGE = "http://libusb.sf.net"
+SECTION = "libs"
+LICENSE = "LGPL"
+
+PR = "r0"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.bz2 \
+"
+S = "${WORKDIR}/libusb-${PV}"
+
+inherit autotools pkgconfig binconfig lib_package
+
+PARALLEL_MAKE = ""
+EXTRA_OECONF = "--disable-build-docs"
+
+export CXXFLAGS += "-lstdc++ -I${STAGING_INCDIR}"
+
+LIBTOOL = "${HOST_SYS}-libtool"
+EXTRA_OEMAKE = "'LIBTOOL=${LIBTOOL}'"
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES =+ "libusbpp"
+FILES_libusbpp = "${libdir}/libusbpp*.so.*"
diff --git a/recipes/libusb/libusb_0.0.0.bb b/recipes/libusb/libusb_0.0.0.bb
new file mode 100644
index 0000000000..fe4595611d
--- /dev/null
+++ b/recipes/libusb/libusb_0.0.0.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "libusb is a library to provide userspace access to USB \
+devices. This version is a metapackage that pulls in libusb-compat, \
+the replacement for libusb."
+
+# This version of libusb will never be pulled in automagically. The
+# intention is that a distro wishing to use libusb1 and libusb-compat
+# will place the following in the appropriate conf file:
+#
+# PREFERRED_VERSION_libusb = "0.0.0"
+#
+# This essentially results in the replacement of libusb by libusb-compat,
+# and resolves the issues of some packages depending on libusb, while
+# other (newer) ones depend on libusb-compat.
+#
+# Note that using this version of libusb will break certain packages
+# that cannot work with libusb-compat (gnuradio is said to be such a
+# packages, as is dfu-util). Unfortunately other packages (such as bluez)
+# require libusb-compat -- there's no good solution for this conflict
+# at this time. The fundamental problem is that both libusb and
+# libusb-compat stage to the same libs (/usr/lib/libusb.a, for example),
+# so if you have built both, the last one staged wins.
+#
+# This "hack" seems to be the most flexible and least intrusive workaround.
+
+DEFAULT_PREFERENCE = "-1"
+
+DEPENDS = "libusb-compat"
diff --git a/recipes/libusb/libusb_0.1.10a.bb b/recipes/libusb/libusb_0.1.10a.bb
new file mode 100644
index 0000000000..8648f96571
--- /dev/null
+++ b/recipes/libusb/libusb_0.1.10a.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "libusb is a library to provide userspace \
+access to USB devices."
+SECTION = "libs"
+LICENSE = "LGPL"
+PR = "r7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.gz \
+ file://debian-changes.patch;patch=1"
+
+S = "${WORKDIR}/libusb-${PV}"
+
+inherit autotools pkgconfig
+
+PARALLEL_MAKE = ""
+
+EXTRA_OECONF = "--disable-build-docs"
+
+do_stage() {
+ oe_libinstall -a -so libusb ${STAGING_LIBDIR}
+
+ install -d ${STAGING_BINDIR}
+ install -m 755 ${S}/libusb-config ${STAGING_BINDIR}
+ perl -pi -e 's:\-L${libdir} :-L${STAGING_LIBDIR} :' ${STAGING_BINDIR}/libusb-config
+
+ if [ "${STAGING_BINDIR}" != "${STAGING_BINDIR_CROSS}" ]; then
+ install -d ${STAGING_BINDIR_CROSS}/
+ mv ${STAGING_BINDIR}/libusb-config ${STAGING_BINDIR_CROSS}/libusb-config
+ fi
+
+ install -d ${STAGING_INCDIR}/
+ for X in usb.h
+ do
+ install -m 0644 ${S}/$X ${STAGING_INCDIR}/$X
+ done
+}
+
+PACKAGES =+ "libusbpp"
+
+FILES_libusbpp = "${libdir}/libusbpp*.so.*"
diff --git a/recipes/libusb/libusb_0.1.12.bb b/recipes/libusb/libusb_0.1.12.bb
new file mode 100644
index 0000000000..3d6a213b45
--- /dev/null
+++ b/recipes/libusb/libusb_0.1.12.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "libusb is a library to provide userspace \
+access to USB devices."
+HOMEPAGE = "http://libusb.sf.net"
+SECTION = "libs"
+LICENSE = "LGPL"
+PR = "r3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.gz \
+ file://configure_fix.patch;patch=1"
+
+S = "${WORKDIR}/libusb-${PV}"
+
+inherit autotools pkgconfig binconfig lib_package
+
+PARALLEL_MAKE = ""
+EXTRA_OECONF = "--disable-build-docs"
+
+export CXXFLAGS += "-lstdc++ -I${STAGING_INCDIR}"
+
+do_stage() {
+
+ autotools_stage_all
+ install -m 755 ${S}/libusb-config ${STAGING_BINDIR}
+ # can we get rid of that? wouldn't a sed statement do as well?
+ sed -i 's:\-L${libdir} :-L${STAGING_LIBDIR} :' ${STAGING_BINDIR}/libusb-config
+
+ if [ "${STAGING_BINDIR}" != "${STAGING_BINDIR_CROSS}" ]; then
+ install -d ${STAGING_BINDIR_CROSS}/
+ mv ${STAGING_BINDIR}/libusb-config ${STAGING_BINDIR_CROSS}/libusb-config
+ fi
+
+}
+
+PACKAGES =+ "libusbpp"
+
+FILES_libusbpp = "${libdir}/libusbpp*.so.*"