lib/cmake: check for libusb_handle_events_timeout_completed()

libusb < 1.0.9 doesn't have libusb_handle_events_timeout_completed(),
but libusb <= 1.0.8 doesn't have version.h, so we need to check
for the function.

The cmake-code was borrowed from UHD, which also checks
for libusb_error_name(), we add that as well since it might come
handy later on.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
master
Steve Markgraf 11 years ago
parent 929972f835
commit a2bc5b5117
  1. 18
      cmake/Modules/FindLibUSB.cmake
  2. 8
      src/librtlsdr.c

@ -24,6 +24,24 @@ endif()
/usr/local/lib /usr/local/lib
) )
include(CheckFunctionExists)
if(LIBUSB_INCLUDE_DIRS)
set(CMAKE_REQUIRED_INCLUDES ${LIBUSB_INCLUDE_DIRS})
endif()
if(LIBUSB_LIBRARIES)
set(CMAKE_REQUIRED_LIBRARIES ${LIBUSB_LIBRARIES})
endif()
CHECK_FUNCTION_EXISTS("libusb_handle_events_timeout_completed" HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)
if(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)
add_definitions(-DHAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED=1)
endif(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)
CHECK_FUNCTION_EXISTS("libusb_error_name" HAVE_LIBUSB_ERROR_NAME)
if(HAVE_LIBUSB_ERROR_NAME)
add_definitions(-DHAVE_LIBUSB_ERROR_NAME=1)
endif(HAVE_LIBUSB_ERROR_NAME)
if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found") set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found")
message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}") message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}")

@ -1775,7 +1775,11 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
} }
while (RTLSDR_INACTIVE != dev->async_status) { while (RTLSDR_INACTIVE != dev->async_status) {
#ifdef HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED
r = libusb_handle_events_timeout_completed(dev->ctx, &tv, &dev->async_cancel); r = libusb_handle_events_timeout_completed(dev->ctx, &tv, &dev->async_cancel);
#else
r = libusb_handle_events_timeout(dev->ctx, &tv);
#endif
if (r < 0) { if (r < 0) {
/*fprintf(stderr, "handle_events returned: %d\n", r);*/ /*fprintf(stderr, "handle_events returned: %d\n", r);*/
if (r == LIBUSB_ERROR_INTERRUPTED) /* stray signal */ if (r == LIBUSB_ERROR_INTERRUPTED) /* stray signal */
@ -1807,7 +1811,11 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
/* handle any events that still need to /* handle any events that still need to
* be handled before exiting after we * be handled before exiting after we
* just cancelled all transfers */ * just cancelled all transfers */
#ifdef HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED
libusb_handle_events_timeout_completed(dev->ctx, &zerotv, NULL); libusb_handle_events_timeout_completed(dev->ctx, &zerotv, NULL);
#else
libusb_handle_events_timeout(dev->ctx, &zerotv);
#endif
break; break;
} }
} }

Loading…
Cancel
Save