| 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 |