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