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.
This commit is contained in:
Daniel Elstner 2015-09-07 15:01:52 +02:00
parent 534b634ce2
commit c1adbb1e23
2 changed files with 23 additions and 6 deletions

View File

@ -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 <libusb.h>]])
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`

View File

@ -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)
{