summaryrefslogtreecommitdiff
path: root/config/usrp_libusb.m4
blob: 251f7df10160f7e6a4963e62d1947fdd6df064f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
dnl Copyright 2003,2008,2009 Free Software Foundation, Inc.
dnl 
dnl This file is part of GNU Radio
dnl 
dnl GNU Radio is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 3, or (at your option)
dnl any later version.
dnl 
dnl GNU Radio is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl 
dnl You should have received a copy of the GNU General Public License
dnl along with GNU Radio; see the file COPYING.  If not, write to
dnl the Free Software Foundation, Inc., 51 Franklin Street,
dnl Boston, MA 02110-1301, USA.

# $1 is $req_libusb1:
#   yes : check libusb-1.0
#   no  : check libusb-0.12
#   ""  : check libusb-0.12


AC_DEFUN([USRP_LIBUSB], [
  dnl Use PKGCONFIG to check for packages first, then check to
  dnl make sure the USB_* variables work (whether from PKGCONFIG
  dnl or overridden by the user)

  libusbok=no
  have_libusb1=no
  LIBUSB_PKG_CONFIG_NAME=''
  if test x$1 = xyes; then
    PKG_CHECK_MODULES(USB, libusb-1.0, [
      libusbok=yes
      have_libusb1=yes
      usb_header='libusb-1.0/libusb.h'
      usb_lib_func='libusb_bulk_transfer'
      usb_lib_name='usb-1.0'
      LIBUSB_PKG_CONFIG_NAME='libusb-1.0'
    ])
  else
    dnl not using libusb1 (for now); see if legacy version is found.
    dnl it might be installed under the name either 'libusb' or
    dnl 'libusb-legacy', or just available via the
    dnl user's shell environment

    dnl see if the pkgconfig module 'libusb' is available
    PKG_CHECK_MODULES(USB, libusb, [
      libusbok=yes
      LIBUSB_PKG_CONFIG_NAME='libusb'
      ], [libusbok=no])
    dnl PKG_CHECK_MODULES does not work correctly when embedded
    if test $libusbok = no; then
      dnl if not, see if the pkgconfig module 'libusb-legacy' is available
      PKG_CHECK_MODULES(USB, [libusb-legacy], [
        libusbok=yes
        LIBUSB_PKG_CONFIG_NAME='libusb-legacy'
        ], [libusbok=no])
    fi
    dnl set variables for further testing
    usb_header='usb.h'
    usb_lib_func='usb_bulk_write'
    usb_lib_name='usb'
  fi
  AC_SUBST(LIBUSB_PKG_CONFIG_NAME)
  if test x$1 != xyes || test $have_libusb1 = yes; then
    dnl Either (1) libusb1 was specified and found; or
    dnl (2) libusb1 was not specified. Restart checking.
    libusbok=yes

    dnl Verify that $usb_header is a valid header, and if so,
    dnl then verify that $usb_lib_func can be found in the
    dnl library $usb_lib_name.

    dnl If PKGCONFIG found variable USB_INCLUDEDIR, and it is
    dnl not empty, use it for checking for $usb_header.
    dnl Otherwise, maybe the user's shell environment is already
    dnl configured to find this header.

    AC_LANG_PUSH(C)
    save_CPPFLAGS="$CPPFLAGS"
    if test x$USB_INCLUDEDIR != x; then
      USB_INCLUDES="-I$USB_INCLUDEDIR"
      CPPFLAGS="$CPPFLAGS $USB_INCLUDES"
      AC_SUBST(USB_INCLUDES)
    fi
    AC_CHECK_HEADERS([$usb_header], [], [libusbok=no])
    CPPFLAGS="$save_CPPFLAGS"
    AC_LANG_POP(C)

    if test $libusbok = no; then
      AC_MSG_RESULT([USRP requires libusb header '$usb_header' which was not found or was not usable. See http://www.libusb.org])
    else

      dnl found the header; now make sure the library is OK
      dnl On Darwin, need to include the IOKit library.     

      AC_LANG_PUSH(C)
      save_LIBS="$LIBS"
      LIBS=""
      case "$host_os" in
        darwin*)
          USB_LIBS="$USB_LIBS -lIOKit"
          LIBS="$USB_LIBS"
          ;;
        *) ;;
      esac
      AC_CHECK_LIB([$usb_lib_name], [$usb_lib_func], [], [
        libusbok=no
        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])
      ])
      case "$host_os" in
        cygwin* | mingw*)
          USB_LIBS="$LIBS"
          ;;
        *) ;;
      esac
      LIBS="$save_LIBS"
      AC_LANG_POP(C)
    fi
  fi
  if test $libusbok = yes; then
    AC_SUBST(USB_LIBS)
    ifelse([$2], , :, [$2])
  else
    USB_INCLUDES=
    USB_LIBS=
    ifelse([$3], , :, [$3])
  fi
])