diff --git a/configure.ac b/configure.ac index e88e5e49..c562d1b7 100644 --- a/configure.ac +++ b/configure.ac @@ -92,10 +92,15 @@ SR_ARG_OPT_PKG([libftdi], [LIBFTDI],, # FreeBSD comes with an "integrated" libusb-1.0-style USB API. # This means libusb-1.0 is always available; no need to check for it. -AS_CASE([$host], [*freebsd*], [sr_have_libusb=yes]) +# On Windows, require the latest version we can get our hands on, +# until the new generic event handling has seen an official release. +AS_CASE([$host_os], + [freebsd*], [sr_libusb_req='libusb-1.0' sr_have_libusb=yes], + [mingw*], [sr_libusb_req='libusb-1.0 >= 1.0.20'], + [sr_libusb_req='libusb-1.0 >= 1.0.16']) SR_ARG_OPT_PKG([libusb], [LIBUSB_1_0], [NEED_USB], - [libusb-1.0 >= 1.0.16]) + [$sr_libusb_req]) SR_ARG_OPT_PKG([librevisa], [LIBREVISA], [NEED_VISA], [librevisa >= 0.0.20130412]) @@ -421,6 +426,18 @@ AM_COND_IF([BINDINGS_CXX], [ PKG_CHECK_MODULES([LIBSIGROKCXX], [$SR_PKGLIBS_CXX]) PKG_CHECK_MODULES([PYSIGROK], [$SR_PKGLIBS_PYTHON $SR_PKGLIBS_CXX]) ]) + +# Check for specific libusb features, now that we know the CFLAGS. +AC_LANG([C]) +sr_save_cflags=$CFLAGS +CFLAGS="$LIBSIGROK_CFLAGS $CFLAGS" +AC_CHECK_TYPES([libusb_os_handle], + [sr_have_libusb_os_handle=yes], [sr_have_libusb_os_handle=no], + [[#include ]]) +CFLAGS=$sr_save_cflags +AM_COND_IF([NEED_USB], [AS_CASE([$sr_have_libusb_os_handle:$host_os], [no:mingw*], + [AC_MSG_ERROR([Windows builds require the event-abstraction branch of libusb])])]) + sr_glib_version=`$PKG_CONFIG --modversion glib-2.0 2>&AS_MESSAGE_LOG_FD` sr_libzip_version=`$PKG_CONFIG --modversion libzip 2>&AS_MESSAGE_LOG_FD` diff --git a/src/usb.c b/src/usb.c index 122371f6..1b22de41 100644 --- a/src/usb.c +++ b/src/usb.c @@ -32,6 +32,10 @@ #define LOG_PREFIX "usb" +#if !HAVE_LIBUSB_OS_HANDLE +typedef int libusb_os_handle; +#endif + /** * Find USB devices according to a connection string. * @@ -184,10 +188,6 @@ SR_PRIV void sr_usb_close(struct sr_usb_dev_inst *usb) sr_dbg("Closed USB device %d.%d.", usb->bus, usb->address); } -#if (LIBUSB_API_VERSION < 0x01000104) -typedef int libusb_os_handle; -#endif - static LIBUSB_CALL void usb_pollfd_added(libusb_os_handle fd, short events, void *user_data) {