| AC_PREREQ(2.63) | |
| # Version number. This is currently the only place. | |
| m4_define([HIDAPI_MAJOR], 0) | |
| m4_define([HIDAPI_MINOR], 8) | |
| m4_define([HIDAPI_RELEASE], 0) | |
| m4_define([HIDAPI_RC], -rc1) | |
| m4_define([VERSION_STRING], HIDAPI_MAJOR[.]HIDAPI_MINOR[.]HIDAPI_RELEASE[]HIDAPI_RC) | |
| AC_INIT([hidapi],[VERSION_STRING],[alan@signal11.us]) | |
| # Library soname version | |
| # Follow the following rules (particularly the ones in the second link): | |
| # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html | |
| # http://sourceware.org/autobook/autobook/autobook_91.html | |
| lt_current="0" | |
| lt_revision="0" | |
| lt_age="0" | |
| LTLDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age}" | |
| AC_CONFIG_MACRO_DIR([m4]) | |
| AM_INIT_AUTOMAKE([foreign -Wall -Werror]) | |
| AC_CONFIG_MACRO_DIR([m4]) | |
| m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) | |
| LT_INIT | |
| AC_PROG_CC | |
| AC_PROG_CXX | |
| AC_PROG_OBJC | |
| PKG_PROG_PKG_CONFIG | |
| m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) | |
| hidapi_lib_error() { | |
| echo "" | |
| echo " Library $1 was not found on this system." | |
| echo " Please install it and re-run ./configure" | |
| echo "" | |
| exit 1 | |
| } | |
| hidapi_prog_error() { | |
| echo "" | |
| echo " Program $1 was not found on this system." | |
| echo " This program is part of $2." | |
| echo " Please install it and re-run ./configure" | |
| echo "" | |
| exit 1 | |
| } | |
| AC_MSG_CHECKING([operating system]) | |
| AC_MSG_RESULT($host) | |
| case $host in | |
| *-linux*) | |
| AC_MSG_RESULT([ (Linux back-end)]) | |
| AC_DEFINE(OS_LINUX, 1, [Linux implementations]) | |
| AC_SUBST(OS_LINUX) | |
| backend="linux" | |
| os="linux" | |
| threads="pthreads" | |
| # HIDAPI/hidraw libs | |
| PKG_CHECK_MODULES([libudev], [libudev], true, [hidapi_lib_error libudev]) | |
| LIBS_HIDRAW_PR+=" $libudev_LIBS" | |
| CFLAGS_HIDRAW+=" $libudev_CFLAGS" | |
| # HIDAPI/libusb libs | |
| AC_CHECK_LIB([rt], [clock_gettime], [LIBS_LIBUSB_PRIVATE+=" -lrt"], [hidapi_lib_error librt]) | |
| PKG_CHECK_MODULES([libusb], [libusb-1.0 >= 1.0.9], true, [hidapi_lib_error libusb-1.0]) | |
| LIBS_LIBUSB_PRIVATE+=" $libusb_LIBS" | |
| CFLAGS_LIBUSB+=" $libusb_CFLAGS" | |
| ;; | |
| *-darwin*) | |
| AC_MSG_RESULT([ (Mac OS X back-end)]) | |
| AC_DEFINE(OS_DARWIN, 1, [Mac implementation]) | |
| AC_SUBST(OS_DARWIN) | |
| backend="mac" | |
| os="darwin" | |
| threads="pthreads" | |
| LIBS="${LIBS} -framework IOKit -framework CoreFoundation" | |
| ;; | |
| *-freebsd*) | |
| AC_MSG_RESULT([ (FreeBSD back-end)]) | |
| AC_DEFINE(OS_FREEBSD, 1, [FreeBSD implementation]) | |
| AC_SUBST(OS_FREEBSD) | |
| backend="libusb" | |
| os="freebsd" | |
| threads="pthreads" | |
| CFLAGS="$CFLAGS -I/usr/local/include" | |
| LDFLAGS="$LDFLAGS -L/usr/local/lib" | |
| LIBS="${LIBS}" | |
| AC_CHECK_LIB([usb], [libusb_init], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -lusb"], [hidapi_lib_error libusb]) | |
| AC_CHECK_LIB([iconv], [iconv_open], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -liconv"], [hidapi_lib_error libiconv]) | |
| echo libs_priv: $LIBS_LIBUSB_PRIVATE | |
| ;; | |
| *-kfreebsd*) | |
| AC_MSG_RESULT([ (kFreeBSD back-end)]) | |
| AC_DEFINE(OS_KFREEBSD, 1, [kFreeBSD implementation]) | |
| AC_SUBST(OS_KFREEBSD) | |
| backend="libusb" | |
| os="kfreebsd" | |
| threads="pthreads" | |
| AC_CHECK_LIB([usb], [libusb_init], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -lusb"], [hidapi_lib_error libusb]) | |
| echo libs_priv: $LIBS_LIBUSB_PRIVATE | |
| ;; | |
| *-mingw*) | |
| AC_MSG_RESULT([ (Windows back-end, using MinGW)]) | |
| backend="windows" | |
| os="windows" | |
| threads="windows" | |
| win_implementation="mingw" | |
| ;; | |
| *-cygwin*) | |
| AC_MSG_RESULT([ (Windows back-end, using Cygwin)]) | |
| backend="windows" | |
| os="windows" | |
| threads="windows" | |
| win_implementation="cygwin" | |
| ;; | |
| *) | |
| AC_MSG_ERROR([HIDAPI is not supported on your operating system yet]) | |
| esac | |
| LIBS_HIDRAW="${LIBS} ${LIBS_HIDRAW_PR}" | |
| LIBS_LIBUSB="${LIBS} ${LIBS_LIBUSB_PRIVATE}" | |
| AC_SUBST([LIBS_HIDRAW]) | |
| AC_SUBST([LIBS_LIBUSB]) | |
| AC_SUBST([CFLAGS_LIBUSB]) | |
| AC_SUBST([CFLAGS_HIDRAW]) | |
| if test "x$os" = xwindows; then | |
| AC_DEFINE(OS_WINDOWS, 1, [Windows implementations]) | |
| AC_SUBST(OS_WINDOWS) | |
| LDFLAGS="${LDFLAGS} -no-undefined" | |
| LIBS="${LIBS} -lsetupapi" | |
| fi | |
| if test "x$threads" = xpthreads; then | |
| AX_PTHREAD([found_pthreads=yes], [found_pthreads=no]) | |
| if test "x$found_pthreads" = xyes; then | |
| if test "x$os" = xlinux; then | |
| # Only use pthreads for libusb implementation on Linux. | |
| LIBS_LIBUSB="$PTHREAD_LIBS $LIBS_LIBUSB" | |
| CFLAGS_LIBUSB="$CFLAGS_LIBUSB $PTHREAD_CFLAGS" | |
| # There's no separate CC on Linux for threading, | |
| # so it's ok that both implementations use $PTHREAD_CC | |
| CC="$PTHREAD_CC" | |
| else | |
| LIBS="$PTHREAD_LIBS $LIBS" | |
| CFLAGS="$CFLAGS $PTHREAD_CFLAGS" | |
| CC="$PTHREAD_CC" | |
| fi | |
| fi | |
| fi | |
| # Test GUI | |
| AC_ARG_ENABLE([testgui], | |
| [AS_HELP_STRING([--enable-testgui], | |
| [enable building of test GUI (default n)])], | |
| [testgui_enabled=$enableval], | |
| [testgui_enabled='no']) | |
| AM_CONDITIONAL([BUILD_TESTGUI], [test "x$testgui_enabled" != "xno"]) | |
| # Configure the MacOS TestGUI app bundle | |
| rm -Rf testgui/TestGUI.app | |
| mkdir -p testgui/TestGUI.app | |
| cp -R ${srcdir}/testgui/TestGUI.app.in/* testgui/TestGUI.app | |
| chmod -R u+w testgui/TestGUI.app | |
| mkdir testgui/TestGUI.app/Contents/MacOS/ | |
| if test "x$testgui_enabled" != "xno"; then | |
| if test "x$os" = xdarwin; then | |
| # On Mac OS, don't use pkg-config. | |
| AC_CHECK_PROG([foxconfig], [fox-config], [fox-config], false) | |
| if test "x$foxconfig" = "xfalse"; then | |
| hidapi_prog_error fox-config "FOX Toolkit" | |
| fi | |
| LIBS_TESTGUI+=`$foxconfig --libs` | |
| LIBS_TESTGUI+=" -framework Cocoa -L/usr/X11R6/lib" | |
| CFLAGS_TESTGUI+=`$foxconfig --cflags` | |
| OBJCFLAGS+=" -x objective-c++" | |
| elif test "x$os" = xwindows; then | |
| # On Windows, just set the paths for Fox toolkit | |
| if test "x$win_implementation" = xmingw; then | |
| CFLAGS_TESTGUI="-I\$(srcdir)/../../hidapi-externals/fox/include -g -c" | |
| LIBS_TESTGUI=" -mwindows \$(srcdir)/../../hidapi-externals/fox/lib/libFOX-1.6.a -lgdi32 -Wl,--enable-auto-import -static-libgcc -static-libstdc++ -lkernel32" | |
| else | |
| # Cygwin | |
| CFLAGS_TESTGUI="-DWIN32 -I\$(srcdir)/../../hidapi-externals/fox/include -g -c" | |
| LIBS_TESTGUI="\$(srcdir)/../../hidapi-externals/fox/lib/libFOX-cygwin-1.6.a -lgdi32 -Wl,--enable-auto-import -static-libgcc -static-libstdc++ -lkernel32" | |
| fi | |
| else | |
| # On Linux and FreeBSD platforms, use pkg-config to find fox. | |
| PKG_CHECK_MODULES([fox], [fox17], [], [PKG_CHECK_MODULES([fox], [fox])]) | |
| LIBS_TESTGUI="${LIBS_TESTGUI} $fox_LIBS" | |
| if test "x$os" = xfreebsd; then | |
| LIBS_TESTGUI="${LIBS_TESTGUI} -L/usr/local/lib" | |
| fi | |
| CFLAGS_TESTGUI="${CFLAGS_TESTGUI} $fox_CFLAGS" | |
| fi | |
| fi | |
| AC_SUBST([LIBS_TESTGUI]) | |
| AC_SUBST([CFLAGS_TESTGUI]) | |
| AC_SUBST([backend]) | |
| # OS info for Automake | |
| AM_CONDITIONAL(OS_LINUX, test "x$os" = xlinux) | |
| AM_CONDITIONAL(OS_DARWIN, test "x$os" = xdarwin) | |
| AM_CONDITIONAL(OS_FREEBSD, test "x$os" = xfreebsd) | |
| AM_CONDITIONAL(OS_KFREEBSD, test "x$os" = xkfreebsd) | |
| AM_CONDITIONAL(OS_WINDOWS, test "x$os" = xwindows) | |
| AC_CONFIG_HEADERS([config.h]) | |
| if test "x$os" = "xlinux"; then | |
| AC_CONFIG_FILES([pc/hidapi-hidraw.pc]) | |
| AC_CONFIG_FILES([pc/hidapi-libusb.pc]) | |
| else | |
| AC_CONFIG_FILES([pc/hidapi.pc]) | |
| fi | |
| AC_SUBST(LTLDFLAGS) | |
| AC_CONFIG_FILES([Makefile \ | |
| hidtest/Makefile \ | |
| libusb/Makefile \ | |
| linux/Makefile \ | |
| mac/Makefile \ | |
| testgui/Makefile \ | |
| windows/Makefile]) | |
| AC_OUTPUT |