configure.ac 7.6 KB

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