aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac236
1 files changed, 236 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..c6747f9
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,236 @@
+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