From: Daniel Elstner Date: Mon, 7 Sep 2015 13:01:52 +0000 (+0200) Subject: Build: Add configure check for libusb event-abstraction X-Git-Tag: libsigrok-0.4.0~330 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=c1adbb1e235629d62be02e8b579478ed1594da44;p=libsigrok.git Build: Add configure check for libusb event-abstraction This is intended to make people notice when libusb is too old for the new Windows code. However, this is not foolproof, since the libusb version may be different at runtime. --- 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) {