Combined additiona usrp_prims code
[debian/gnuradio] / config / usrp_libusb.m4
1 dnl Copyright 2003,2008 Free Software Foundation, Inc.
2 dnl 
3 dnl This file is part of GNU Radio
4 dnl 
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)
8 dnl any later version.
9 dnl 
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.
14 dnl 
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.
19
20 # $1 is $req_libusb1:
21 #   yes : check libusb-1.0 
22 #   no  : check libusb-0.12 
23 #   ""  : check libusb-0.12 
24
25
26 AC_DEFUN([USRP_LIBUSB], [
27   libusbok=yes
28   have_libusb1=no
29   if test [x]$1 = xyes; then
30     PKG_CHECK_MODULES(USB, libusb-1.0, [have_libusb1=yes], [
31       AC_LANG_PUSH(C)
32
33       AC_CHECK_HEADERS([libusb-1.0/libusb.h], [have_libusb1=yes],
34                        [libusbok=no; AC_MSG_RESULT([USRP requires libusb-1.0. libusb.h not found. See http://www.libusb.org])])
35
36       AC_SEARCH_LIBS(libusb_bulk_transfer, [usb], [USB_LIBS="$LIBS"],
37                      [libusbok=no; AC_MSG_RESULT([USRP requires libusb-1.0. libusb_bulk_transfer not found. See http://www.libusb.org])])
38
39       AC_LANG_POP
40     ])
41   else
42     PKG_CHECK_MODULES(USB, libusb, [], [
43       AC_LANG_PUSH(C)
44
45       AC_CHECK_HEADERS([usb.h], [],
46                        [libusbok=no; AC_MSG_RESULT([USRP requires libusb. usb.h not found. See http://www.libusb.org])])
47
48       save_LIBS="$LIBS"
49       case "$host_os" in
50         darwin*)
51           LIBS="$LIBS -lIOKit"
52           ;;
53         *) ;;
54       esac
55
56       AC_SEARCH_LIBS(usb_bulk_write, [usb], [USB_LIBS="$LIBS"],
57                      [libusbok=no; AC_MSG_RESULT([USRP requires libusb. usb_bulk_write not found. See http://www.libusb.org])])
58
59       LIBS="$save_LIBS"
60
61       AC_LANG_POP
62     ])
63   fi
64
65   if test x$libusbok = xyes; then
66     if test x$have_libusb1 = xyes; then
67       AC_DEFINE(HAVE_LIBUSB_1, [1], [Define if libusb-1.0 found])
68     fi
69     AC_OUTPUT_COMMANDS([
70       case "$CONFIG_OTHER" in
71       usrp*)
72         outfile=usrp/host/include/usrp/$CONFIG_OTHER
73         tmpfile=${outfile}T
74         dirname="sed s,^.*/,,g"
75
76         echo creating $outfile
77         cat > $tmpfile << _EOF_
78 /*  -*- Mode: C++ -*-
79 * --------------------------------------------------------------------
80 * DO NOT EDIT THIS FILE!  It has been automatically generated
81 * from:    configure.in and `echo $outfile|$dirname`.in
82 * on host: `(hostname || uname -n) 2>/dev/null | sed 1q`
83 * --------------------------------------------------------------------
84 */
85
86 _EOF_
87         echo "#ifndef _`echo $outfile | $dirname | tr a-z. A-Z_`_" >> $tmpfile
88         echo "#define _`echo $outfile | $dirname | tr a-z. A-Z_`_" >> $tmpfile
89         echo >> $tmpfile
90
91         case "$CONFIG_OTHER" in
92         usrp_prims*)
93           echo '#include <usrp/usrp_slots.h>' >> $tmpfile
94           echo '#include <string>' >> $tmpfile
95           echo >> $tmpfile
96           ;;
97         usrp_basic*)
98           echo '#include <usrp/db_base.h>' >> $tmpfile
99           echo '#include <usrp/usrp_slots.h>' >> $tmpfile
100           echo '#include <string>' >> $tmpfile
101           echo '#include <vector>' >> $tmpfile
102           echo '#include <boost/utility.hpp>' >> $tmpfile
103           echo '#include <usrp/usrp_subdev_spec.h>' >> $tmpfile
104           echo >> $tmpfile
105           ;;
106         esac
107
108         if test x$have_libusb1 = xno; then
109           echo 'struct usb_device;'>> $tmpfile
110           echo 'struct usb_dev_handle;'>> $tmpfile
111           echo 'struct usb_device_descriptor;' >> $tmpfile
112           echo 'typedef usb_device libusb_device;' >> $tmpfile
113           echo 'typedef usb_dev_handle libusb_device_handle;' >> $tmpfile
114           echo 'typedef usb_device_descriptor libusb_device_descriptor;' >> $tmpfile
115           echo >> $tmpfile
116         fi
117
118         if test x$have_libusb1 = xyes; then
119           echo 'struct libusb_device;' >> $tmpfile
120           echo 'struct libusb_device_handle;' >> $tmpfile
121           echo >> $tmpfile
122         fi
123
124         # The ugly but portable cpp stuff comes from here
125         infile=usrp/host/include/usrp/`echo $outfile | sed 's,.*/,,g;s,\..*$,,g'`.h.in
126         sed '/^##.*$/d' $infile >> $tmpfile 
127         mv ${tmpfile} ${outfile}
128         ;;
129       esac
130
131       ],[
132       have_libusb1=$have_libusb1
133     ])
134
135       AC_SUBST(USB_LIBS)
136       ifelse([$1], , :, [$1])
137   else
138       ifelse([$2], , :, [$2])
139   fi
140 ])