summaryrefslogtreecommitdiff
path: root/config/usrp_libusb.m4
blob: 107144e338842d8807e70e0c1759d238df4069a7 (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
133
134
135
136
137
138
dnl Copyright 2003,2008 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], [
  libusbok=yes
  have_libusb1=no
  if test [x]$1 = xyes; then
    PKG_CHECK_MODULES(USB, libusb-1.0, [have_libusb1=yes], [
      AC_LANG_PUSH(C)

      AC_CHECK_HEADERS([libusb-1.0/libusb.h], [have_libusb1=yes],
                       [libusbok=no; AC_MSG_RESULT([USRP requires libusb-1.0. libusb.h not found. See http://www.libusb.org])])

      AC_SEARCH_LIBS(libusb_bulk_transfer, [usb], [USB_LIBS="$LIBS"],
                     [libusbok=no; AC_MSG_RESULT([USRP requires libusb-1.0. libusb_bulk_transfer not found. See http://www.libusb.org])])

      AC_LANG_POP
    ])
  else
    PKG_CHECK_MODULES(USB, libusb, [], [
      AC_LANG_PUSH(C)

      AC_CHECK_HEADERS([usb.h], [],
                       [libusbok=no; AC_MSG_RESULT([USRP requires libusb. usb.h not found. See http://www.libusb.org])])

      save_LIBS="$LIBS"
      case "$host_os" in
        darwin*)
          LIBS="$LIBS -lIOKit"
          ;;
        *) ;;
      esac

      AC_SEARCH_LIBS(usb_bulk_write, [usb], [USB_LIBS="$LIBS"],
                     [libusbok=no; AC_MSG_RESULT([USRP requires libusb. usb_bulk_write not found. See http://www.libusb.org])])

      LIBS="$save_LIBS"

      AC_LANG_POP
    ])
  fi

  if test x$libusbok = xyes; then
    if test x$have_libusb1 = xyes; then
      AC_DEFINE(HAVE_LIBUSB_1, [1], [Define if libusb-1.0 found])
    fi
    AC_OUTPUT_COMMANDS([
      case "$CONFIG_OTHER" in
      usrp*)
        outfile=usrp/host/include/usrp/$CONFIG_OTHER
        tmpfile=${outfile}T
        dirname="sed s,^.*/,,g"

        echo creating $outfile
        cat > $tmpfile << _EOF_
/*  -*- Mode: C++ -*-
* --------------------------------------------------------------------
* DO NOT EDIT THIS FILE!  It has been automatically generated
* from:    configure.in and `echo $outfile|$dirname`.in
* on host: `(hostname || uname -n) 2>/dev/null | sed 1q`
* --------------------------------------------------------------------
*/

_EOF_
        echo "#ifndef _`echo $outfile | $dirname | tr a-z. A-Z_`_" >> $tmpfile
        echo "#define _`echo $outfile | $dirname | tr a-z. A-Z_`_" >> $tmpfile
        echo >> $tmpfile

        case "$CONFIG_OTHER" in
        usrp_prims*)
          echo '#include <usrp/usrp_slots.h>' >> $tmpfile
          echo '#include <string>' >> $tmpfile
          echo >> $tmpfile
          ;;
        usrp_basic*)
          echo '#include <usrp/db_base.h>' >> $tmpfile
          echo '#include <usrp/usrp_slots.h>' >> $tmpfile
          echo '#include <string>' >> $tmpfile
          echo '#include <vector>' >> $tmpfile
          echo '#include <boost/utility.hpp>' >> $tmpfile
          echo '#include <usrp/usrp_subdev_spec.h>' >> $tmpfile
          echo >> $tmpfile
          ;;
        esac

        if test x$have_libusb1 = xno; then
          echo 'struct usb_device;'>> $tmpfile
          echo 'struct usb_dev_handle;'>> $tmpfile
          echo 'typedef struct usb_device libusb_device;' >> $tmpfile
          echo 'typedef struct usb_dev_handle libusb_device_handle;' >> $tmpfile
          echo >> $tmpfile
        fi

        if test x$have_libusb1 = xyes; then
          echo 'struct libusb_device;' >> $tmpfile
          echo 'struct libusb_device_handle;' >> $tmpfile
          echo >> $tmpfile
        fi

        # The ugly but portable cpp stuff comes from here
        infile=usrp/host/include/usrp/`echo $outfile | sed 's,.*/,,g;s,\..*$,,g'`.h.in
        sed '/^##.*$/d' $infile >> $tmpfile 
        mv ${tmpfile} ${outfile}
        ;;
      esac

      ],[
      have_libusb1=$have_libusb1
    ])

      AC_SUBST(USB_LIBS)
      ifelse([$1], , :, [$1])
  else
      ifelse([$2], , :, [$2])
  fi
])