1 dnl Copyright 2003,2008,2009 Free Software Foundation, Inc.
3 dnl This file is part of GNU Radio
5 dnl GNU Radio is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 3, or (at your option)
10 dnl GNU Radio is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 dnl GNU General Public License for more details.
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with GNU Radio; see the file COPYING. If not, write to
17 dnl the Free Software Foundation, Inc., 51 Franklin Street,
18 dnl Boston, MA 02110-1301, USA.
21 # yes : check libusb-1.0
22 # no : check libusb-0.12
23 # "" : check libusb-0.12
26 AC_DEFUN([USRP_LIBUSB], [
27 dnl Use PKGCONFIG to check for packages first, then check to
28 dnl make sure the USB_* variables work (whether from PKGCONFIG
29 dnl or overridden by the user)
31 dnl do not use LDFLAGS, since PKGCONFIG will provide everything
32 saved_LDFLAGS=${LDFLAGS}
34 LIBUSB_PKG_CONFIG_NAME=
36 dnl loop over various possible 'libusb' PKGCONFIG names, and choose
37 dnl the first one that meets both the user's selection (via
38 dnl configure flags) as well as what is installed
40 dnl create the list of libusb PKGCONFIG modules to test
42 if test x$1 = xyes; then
43 dnl libusb-1.0 was requested; just test for it
44 libusb_list="libusb-1.0"
46 dnl test for legacy libusb only
47 libusb_list="libusb libusb-legacy"
49 for libusb_name in ${libusb_list}; do
50 dnl clear internal variables
58 AC_MSG_NOTICE([Checking for LIBUSB version '${libusb_name}'])
59 if test ${libusb_name} = "libusb-1.0"; then
60 dnl see if the pkgconfig module is available
61 PKG_CHECK_MODULES(USB, ${libusb_name}, [
64 usb_header='libusb-1.0/libusb.h'
65 usb_lib_func='libusb_bulk_transfer'
68 dnl see if the pkgconfig module is available
69 PKG_CHECK_MODULES(USB, ${libusb_name}, [
72 usb_lib_func='usb_bulk_write'
75 if test $libusbok = yes; then
76 dnl PKGCONFIG found a version of LIBUSB.
77 dnl Check it to make sure it meets enough criteria:
78 dnl Verify that $usb_header is a valid header. If so, then
79 dnl verify that $usb_lib_func can be found in the library
80 dnl $usb_lib_name. if so, verify that the symbol 'usb_debug' is
81 dnl found in the library.
83 dnl Check for the header. Similar to AC_CHECK_HEADERS,
84 dnl but doesn't append to known \#defines.
85 dnl If PKGCONFIG found variable USB_INCLUDEDIR, and it is
86 dnl not empty, use it for checking for $usb_header.
87 dnl Otherwise, maybe the user's shell environment is already
88 dnl configured to find this header.
90 save_CPPFLAGS="$CPPFLAGS"
91 if test x$USB_INCLUDEDIR != x; then
92 USB_INCLUDES="-I$USB_INCLUDEDIR"
93 CPPFLAGS="$USB_INCLUDES"
95 AC_MSG_CHECKING([$libusb_name for header $usb_header])
96 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
97 #include "$usb_header"
99 [libusbok=yes],[libusbok=no])
100 AC_MSG_RESULT([$libusbok])
101 CPPFLAGS="$save_CPPFLAGS"
104 if test $libusbok = yes; then
105 dnl found the header; now make sure the library is OK
106 dnl On Darwin, need to include the IOKit library.
113 USB_LIBS="$USB_LIBS -lIOKit"
119 dnl find the library link name
120 usb_lib_name=`echo $USB_LIBS | sed -e "s@.*-l\(usb[[^ ]]*\).*@\1@"`
122 dnl Check for the function in the library. Similar to
123 dnl AC_CHECK_LIB, but doesn't append to known \#defines.
124 AC_MSG_CHECKING([$libusb_name for function $usb_lib_func in library $usb_lib_name])
125 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
129 char $usb_lib_func ();
130 ]], [[return $usb_lib_func ();]])],
131 [libusbok=yes],[libusbok=no])
132 AC_MSG_RESULT([$libusbok])
142 if test $libusbok = yes; then
143 if test ${libusb_name} != "libusb-1.0"; then
144 dnl PKGCONFIG found a legacy version of libusb; make sure the
145 dnl variable _usb_debug is available in the found library
147 save_CPPFLAGS="$CPPFLAGS"
148 CPPFLAGS="$USB_INCLUDES"
151 AC_MSG_CHECKING([$libusb_name for symbol usb_debug in library $usb_lib_name])
152 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
153 extern int usb_debug;]],
154 [[usb_debug = 0;]])],
155 [libusbok=yes],[libusbok=no])
156 AC_MSG_RESULT([$libusbok])
158 CPPFLAGS="$save_CPPFLAGS"
164 dnl if everything checks out OK, finish up
165 if test $libusbok = yes; then
166 LIBUSB_PKG_CONFIG_NAME="${libusb_name}"
169 dnl something wasn't found in this LIBUSB version.
170 dnl HACK: clear cache variables for header and library
179 if test $libusbok = yes; then
180 dnl final error checking, mostly to create #define's
182 save_CPPFLAGS="$CPPFLAGS"
183 CPPFLAGS="$USB_INCLUDES"
184 dnl Check for the header.
185 AC_CHECK_HEADERS([$usb_header], [], [libusbok=no])
186 CPPFLAGS="$save_CPPFLAGS"
189 if test $libusbok = no; then
190 AC_MSG_RESULT([USRP requires libusb header '$usb_header' which was not found or was not usable. See http://www.libusb.org])
192 dnl check for the library (again)
194 save_CPPFLAGS="$CPPFLAGS"
195 CPPFLAGS="$USB_INCLUDES"
198 AC_CHECK_LIB([$usb_lib_name], [$usb_lib_func], [], [
200 AC_MSG_RESULT([USRP requires library '$usb_lib_name' with function '$usb_lib_func', which was either not found or was not usable. See http://www.libusb.org])])
202 CPPFLAGS="$save_CPPFLAGS"
207 if test $libusbok = yes; then
209 AC_MSG_NOTICE([Using LIBUSB version '${libusb_name}'])
210 ifelse([$2], , :, [$2])
212 dnl not found; clear substitution variables
213 LIBUSB_PKG_CONFIG_NAME=
216 ifelse([$3], , :, [$3])
219 dnl create substitution variables
220 AC_SUBST(USB_INCLUDES)
222 AC_SUBST(LIBUSB_PKG_CONFIG_NAME)
225 LDFLAGS=${saved_LDFLAGS}