configure.ac 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. AC_PREREQ(2.63)
  2. # Version number. This is currently the only place.
  3. m4_define([HIDAPI_MAJOR], 0)
  4. m4_define([HIDAPI_MINOR], 8)
  5. m4_define([HIDAPI_RELEASE], 0)
  6. m4_define([HIDAPI_RC], -rc1)
  7. m4_define([VERSION_STRING], HIDAPI_MAJOR[.]HIDAPI_MINOR[.]HIDAPI_RELEASE[]HIDAPI_RC)
  8. AC_INIT([hidapi],[VERSION_STRING],[alan@signal11.us])
  9. # Library soname version
  10. # Follow the following rules (particularly the ones in the second link):
  11. # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
  12. # http://sourceware.org/autobook/autobook/autobook_91.html
  13. lt_current="0"
  14. lt_revision="0"
  15. lt_age="0"
  16. LTLDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age}"
  17. AC_CONFIG_MACRO_DIR([m4])
  18. AM_INIT_AUTOMAKE([foreign -Wall -Werror])
  19. AC_CONFIG_MACRO_DIR([m4])
  20. m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
  21. LT_INIT
  22. AC_PROG_CC
  23. AC_PROG_CXX
  24. AC_PROG_OBJC
  25. PKG_PROG_PKG_CONFIG
  26. m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
  27. hidapi_lib_error() {
  28. echo ""
  29. echo " Library $1 was not found on this system."
  30. echo " Please install it and re-run ./configure"
  31. echo ""
  32. exit 1
  33. }
  34. hidapi_prog_error() {
  35. echo ""
  36. echo " Program $1 was not found on this system."
  37. echo " This program is part of $2."
  38. echo " Please install it and re-run ./configure"
  39. echo ""
  40. exit 1
  41. }
  42. AC_MSG_CHECKING([operating system])
  43. AC_MSG_RESULT($host)
  44. case $host in
  45. *-linux*)
  46. AC_MSG_RESULT([ (Linux back-end)])
  47. AC_DEFINE(OS_LINUX, 1, [Linux implementations])
  48. AC_SUBST(OS_LINUX)
  49. backend="linux"
  50. os="linux"
  51. threads="pthreads"
  52. # HIDAPI/hidraw libs
  53. PKG_CHECK_MODULES([libudev], [libudev], true, [hidapi_lib_error libudev])
  54. LIBS_HIDRAW_PR+=" $libudev_LIBS"
  55. CFLAGS_HIDRAW+=" $libudev_CFLAGS"
  56. # HIDAPI/libusb libs
  57. AC_CHECK_LIB([rt], [clock_gettime], [LIBS_LIBUSB_PRIVATE+=" -lrt"], [hidapi_lib_error librt])
  58. PKG_CHECK_MODULES([libusb], [libusb-1.0 >= 1.0.9], true, [hidapi_lib_error libusb-1.0])
  59. LIBS_LIBUSB_PRIVATE+=" $libusb_LIBS"
  60. CFLAGS_LIBUSB+=" $libusb_CFLAGS"
  61. ;;
  62. *-darwin*)
  63. AC_MSG_RESULT([ (Mac OS X back-end)])
  64. AC_DEFINE(OS_DARWIN, 1, [Mac implementation])
  65. AC_SUBST(OS_DARWIN)
  66. backend="mac"
  67. os="darwin"
  68. threads="pthreads"
  69. LIBS="${LIBS} -framework IOKit -framework CoreFoundation"
  70. ;;
  71. *-freebsd*)
  72. AC_MSG_RESULT([ (FreeBSD back-end)])
  73. AC_DEFINE(OS_FREEBSD, 1, [FreeBSD implementation])
  74. AC_SUBST(OS_FREEBSD)
  75. backend="libusb"
  76. os="freebsd"
  77. threads="pthreads"
  78. CFLAGS="$CFLAGS -I/usr/local/include"
  79. LDFLAGS="$LDFLAGS -L/usr/local/lib"
  80. LIBS="${LIBS}"
  81. AC_CHECK_LIB([usb], [libusb_init], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -lusb"], [hidapi_lib_error libusb])
  82. AC_CHECK_LIB([iconv], [iconv_open], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -liconv"], [hidapi_lib_error libiconv])
  83. echo libs_priv: $LIBS_LIBUSB_PRIVATE
  84. ;;
  85. *-kfreebsd*)
  86. AC_MSG_RESULT([ (kFreeBSD back-end)])
  87. AC_DEFINE(OS_KFREEBSD, 1, [kFreeBSD implementation])
  88. AC_SUBST(OS_KFREEBSD)
  89. backend="libusb"
  90. os="kfreebsd"
  91. threads="pthreads"
  92. AC_CHECK_LIB([usb], [libusb_init], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -lusb"], [hidapi_lib_error libusb])
  93. echo libs_priv: $LIBS_LIBUSB_PRIVATE
  94. ;;
  95. *-mingw*)
  96. AC_MSG_RESULT([ (Windows back-end, using MinGW)])
  97. backend="windows"
  98. os="windows"
  99. threads="windows"
  100. win_implementation="mingw"
  101. ;;
  102. *-cygwin*)
  103. AC_MSG_RESULT([ (Windows back-end, using Cygwin)])
  104. backend="windows"
  105. os="windows"
  106. threads="windows"
  107. win_implementation="cygwin"
  108. ;;
  109. *)
  110. AC_MSG_ERROR([HIDAPI is not supported on your operating system yet])
  111. esac
  112. LIBS_HIDRAW="${LIBS} ${LIBS_HIDRAW_PR}"
  113. LIBS_LIBUSB="${LIBS} ${LIBS_LIBUSB_PRIVATE}"
  114. AC_SUBST([LIBS_HIDRAW])
  115. AC_SUBST([LIBS_LIBUSB])
  116. AC_SUBST([CFLAGS_LIBUSB])
  117. AC_SUBST([CFLAGS_HIDRAW])
  118. if test "x$os" = xwindows; then
  119. AC_DEFINE(OS_WINDOWS, 1, [Windows implementations])
  120. AC_SUBST(OS_WINDOWS)
  121. LDFLAGS="${LDFLAGS} -no-undefined"
  122. LIBS="${LIBS} -lsetupapi"
  123. fi
  124. if test "x$threads" = xpthreads; then
  125. AX_PTHREAD([found_pthreads=yes], [found_pthreads=no])
  126. if test "x$found_pthreads" = xyes; then
  127. if test "x$os" = xlinux; then
  128. # Only use pthreads for libusb implementation on Linux.
  129. LIBS_LIBUSB="$PTHREAD_LIBS $LIBS_LIBUSB"
  130. CFLAGS_LIBUSB="$CFLAGS_LIBUSB $PTHREAD_CFLAGS"
  131. # There's no separate CC on Linux for threading,
  132. # so it's ok that both implementations use $PTHREAD_CC
  133. CC="$PTHREAD_CC"
  134. else
  135. LIBS="$PTHREAD_LIBS $LIBS"
  136. CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
  137. CC="$PTHREAD_CC"
  138. fi
  139. fi
  140. fi
  141. # Test GUI
  142. AC_ARG_ENABLE([testgui],
  143. [AS_HELP_STRING([--enable-testgui],
  144. [enable building of test GUI (default n)])],
  145. [testgui_enabled=$enableval],
  146. [testgui_enabled='no'])
  147. AM_CONDITIONAL([BUILD_TESTGUI], [test "x$testgui_enabled" != "xno"])
  148. # Configure the MacOS TestGUI app bundle
  149. rm -Rf testgui/TestGUI.app
  150. mkdir -p testgui/TestGUI.app
  151. cp -R ${srcdir}/testgui/TestGUI.app.in/* testgui/TestGUI.app
  152. chmod -R u+w testgui/TestGUI.app
  153. mkdir testgui/TestGUI.app/Contents/MacOS/
  154. if test "x$testgui_enabled" != "xno"; then
  155. if test "x$os" = xdarwin; then
  156. # On Mac OS, don't use pkg-config.
  157. AC_CHECK_PROG([foxconfig], [fox-config], [fox-config], false)
  158. if test "x$foxconfig" = "xfalse"; then
  159. hidapi_prog_error fox-config "FOX Toolkit"
  160. fi
  161. LIBS_TESTGUI+=`$foxconfig --libs`
  162. LIBS_TESTGUI+=" -framework Cocoa -L/usr/X11R6/lib"
  163. CFLAGS_TESTGUI+=`$foxconfig --cflags`
  164. OBJCFLAGS+=" -x objective-c++"
  165. elif test "x$os" = xwindows; then
  166. # On Windows, just set the paths for Fox toolkit
  167. if test "x$win_implementation" = xmingw; then
  168. CFLAGS_TESTGUI="-I\$(srcdir)/../../hidapi-externals/fox/include -g -c"
  169. LIBS_TESTGUI=" -mwindows \$(srcdir)/../../hidapi-externals/fox/lib/libFOX-1.6.a -lgdi32 -Wl,--enable-auto-import -static-libgcc -static-libstdc++ -lkernel32"
  170. else
  171. # Cygwin
  172. CFLAGS_TESTGUI="-DWIN32 -I\$(srcdir)/../../hidapi-externals/fox/include -g -c"
  173. LIBS_TESTGUI="\$(srcdir)/../../hidapi-externals/fox/lib/libFOX-cygwin-1.6.a -lgdi32 -Wl,--enable-auto-import -static-libgcc -static-libstdc++ -lkernel32"
  174. fi
  175. else
  176. # On Linux and FreeBSD platforms, use pkg-config to find fox.
  177. PKG_CHECK_MODULES([fox], [fox17], [], [PKG_CHECK_MODULES([fox], [fox])])
  178. LIBS_TESTGUI="${LIBS_TESTGUI} $fox_LIBS"
  179. if test "x$os" = xfreebsd; then
  180. LIBS_TESTGUI="${LIBS_TESTGUI} -L/usr/local/lib"
  181. fi
  182. CFLAGS_TESTGUI="${CFLAGS_TESTGUI} $fox_CFLAGS"
  183. fi
  184. fi
  185. AC_SUBST([LIBS_TESTGUI])
  186. AC_SUBST([CFLAGS_TESTGUI])
  187. AC_SUBST([backend])
  188. # OS info for Automake
  189. AM_CONDITIONAL(OS_LINUX, test "x$os" = xlinux)
  190. AM_CONDITIONAL(OS_DARWIN, test "x$os" = xdarwin)
  191. AM_CONDITIONAL(OS_FREEBSD, test "x$os" = xfreebsd)
  192. AM_CONDITIONAL(OS_KFREEBSD, test "x$os" = xkfreebsd)
  193. AM_CONDITIONAL(OS_WINDOWS, test "x$os" = xwindows)
  194. AC_CONFIG_HEADERS([config.h])
  195. if test "x$os" = "xlinux"; then
  196. AC_CONFIG_FILES([pc/hidapi-hidraw.pc])
  197. AC_CONFIG_FILES([pc/hidapi-libusb.pc])
  198. else
  199. AC_CONFIG_FILES([pc/hidapi.pc])
  200. fi
  201. AC_SUBST(LTLDFLAGS)
  202. AC_CONFIG_FILES([Makefile \
  203. hidtest/Makefile \
  204. libusb/Makefile \
  205. linux/Makefile \
  206. mac/Makefile \
  207. testgui/Makefile \
  208. windows/Makefile])
  209. AC_OUTPUT