dnl These m4 macros are whitespace sensitive and break if moved around much.
m4_define([LU_VERSION_H], m4_include([libusb/version.h]))
m4_define([LU_DEFINE_VERSION_ATOM],
	[m4_define([$1], m4_bregexp(LU_VERSION_H,
	[^#define\s*$1\s*\([0-9]*\).*], [\1]))])
m4_define([LU_DEFINE_VERSION_RC_ATOM],
	[m4_define([$1], m4_bregexp(LU_VERSION_H,
	[^#define\s*$1\s*"\(-rc[0-9]*\)".*], [\1]))])
dnl The m4_bregexp() returns (only) the numbers following the #define named
dnl in the first macro parameter. m4_define() then defines the name for use
dnl in AC_INIT.

LU_DEFINE_VERSION_ATOM([LIBUSB_MAJOR])
LU_DEFINE_VERSION_ATOM([LIBUSB_MINOR])
LU_DEFINE_VERSION_ATOM([LIBUSB_MICRO])
LU_DEFINE_VERSION_RC_ATOM([LIBUSB_RC])

AC_INIT([libusb-1.0], [LIBUSB_MAJOR[.]LIBUSB_MINOR[.]LIBUSB_MICRO[]LIBUSB_RC], [libusb-devel@lists.sourceforge.net], [libusb-1.0], [http://libusb.info])

dnl Library versioning
dnl These numbers should be tweaked on every release. Read carefully:
dnl http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
dnl http://sourceware.org/autobook/autobook/autobook_91.html
lt_current=2
lt_revision=0
lt_age=2
LTLDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age}"

AM_INIT_AUTOMAKE

AC_CONFIG_SRCDIR([libusb/core.c])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])

AC_PREREQ([2.69])
AC_PROG_CC
AC_PROG_CXX
LT_INIT
LT_LANG([Windows Resource])
AC_C_INLINE
AM_PROG_CC_C_O
AC_DEFINE([_GNU_SOURCE], [1], [Use GNU extensions])

LTLDFLAGS="${LTLDFLAGS} -no-undefined"

AC_MSG_CHECKING([operating system])
case $host in
*-darwin*)
	AC_MSG_RESULT([Darwin/Mac OS X])
	backend=darwin
	poll=posix
	threads=posix
	;;
*-haiku*)
	AC_MSG_RESULT([Haiku])
	backend=haiku
	poll=posix
	threads=posix
	;;
*-linux* | *-uclinux*)
	dnl on linux-android platform, some functions are in different places
	case $host in
	*-linux-android*)
		AC_MSG_RESULT([Linux (Android system)])
		is_backend_android=yes
		;;
	*)
		AC_MSG_RESULT([Linux])
		is_backend_android=no
		;;
	esac
	backend=linux
	poll=posix
	threads=posix
	;;
*-netbsd*)
	AC_MSG_RESULT([NetBSD])
	backend=netbsd
	poll=posix
	threads=posix
	;;
*-openbsd*)
	AC_MSG_RESULT([OpenBSD])
	backend=openbsd
	poll=posix
	threads=posix
	;;
*-solaris*)
	AC_MSG_RESULT([SunOS])
	backend=sunos
	poll=posix
	threads=posix
	;;
*-cygwin*)
	AC_MSG_RESULT([Windows (using Cygwin)])
	backend=windows
	poll=windows
	threads=posix
	;;
*-mingw* | *msys*)
	AC_MSG_RESULT([Windows])
	backend=windows
	poll=windows
	threads=windows
	test "x$enable_shared" = xyes && create_import_lib=yes
	AM_CFLAGS="${AM_CFLAGS} -fno-omit-frame-pointer"
	;;
*)
	AC_MSG_RESULT([Null])
	backend="null"
	poll=posix
	threads="posix"
	;;
esac

case $backend in
darwin)
	AC_CHECK_FUNCS([pthread_threadid_np])
	LIBS="-lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation"
	LTLDFLAGS="${LTLDFLAGS} -Wl,-prebind"
	;;
haiku)
	LIBS="-lbe"
	;;
linux)
	AC_SEARCH_LIBS([clock_gettime], [rt], [], [], [-pthread])
	AC_ARG_ENABLE([udev],
		[AC_HELP_STRING([--enable-udev], [use udev for device enumeration and hotplug support (recommended) [default=yes]])],
		[], [enable_udev=yes])
	if test "x$enable_udev" = xyes ; then
		dnl system has udev. use it or fail!
		AC_CHECK_HEADER([libudev.h], [], [AC_MSG_ERROR([udev support requested but libudev header not installed])])
		AC_CHECK_LIB([udev], [udev_new], [], [AC_MSG_ERROR([udev support requested but libudev not installed])])
	else
		AC_CHECK_HEADERS([asm/types.h])
		AC_CHECK_HEADER([linux/netlink.h], [], [AC_MSG_ERROR([Linux netlink header not found])])
		AC_CHECK_HEADER([sys/socket.h], [], [AC_MSG_ERROR([Linux socket header not found])])
	fi
	if test "x$is_backend_android" != xyes; then
		THREAD_CFLAGS="-pthread"
		LIBS="${LIBS} -pthread"
	fi
	AC_CHECK_FUNCS([pthread_setname_np])
	;;
netbsd)
	THREAD_CFLAGS="-pthread"
	LIBS="-pthread"
	;;
null)
	THREAD_CFLAGS="-pthread"
	LIBS="-pthread"
	;;
openbsd)
	THREAD_CFLAGS="-pthread"
	LIBS="-pthread"
	;;
sunos)
	THREAD_CFLAGS="-pthread"
	LIBS="-pthread -ldevinfo"
	;;
windows)
	AC_CHECK_TYPES([struct timespec], [], [], [[#include <time.h>]])
	LIBS=""
	LTLDFLAGS="${LTLDFLAGS} -avoid-version -Wl,--add-stdcall-alias"
	AC_DEFINE([_WIN32_WINNT], [_WIN32_WINNT_VISTA], [Oldest Windows version supported (Vista)])
	;;
*)
	AC_MSG_ERROR([Unknown backend])
	;;
esac

AC_SUBST(LIBS)

AM_CONDITIONAL([OS_DARWIN], [test "x$backend" = xdarwin])
AM_CONDITIONAL([OS_HAIKU], [test "x$backend" = xhaiku])
AM_CONDITIONAL([OS_LINUX], [test "x$backend" = xlinux])
AM_CONDITIONAL([OS_NETBSD], [test "x$backend" = xnetbsd])
AM_CONDITIONAL([OS_NULL], [test "x$backend" = xnull])
AM_CONDITIONAL([OS_OPENBSD], [test "x$backend" = xopenbsd])
AM_CONDITIONAL([OS_SUNOS], [test "x$backend" = xsunos])
AM_CONDITIONAL([OS_WINDOWS], [test "x$backend" = xwindows])
AM_CONDITIONAL([POLL_POSIX], [test "x$poll" = xposix])
AM_CONDITIONAL([POLL_WINDOWS], [test "x$poll" = xwindows])
AM_CONDITIONAL([THREADS_POSIX], [test "x$threads" = xposix])
AM_CONDITIONAL([THREADS_WINDOWS], [test "x$threads" = xwindows])
AM_CONDITIONAL([CREATE_IMPORT_LIB], [test "x$create_import_lib" = xyes])
AM_CONDITIONAL([USE_UDEV], [test "x$enable_udev" = xyes])

if test "x$poll" = xposix; then
	AC_DEFINE([POLL_POSIX], [1], [Use POSIX poll() implementation])
	AC_CHECK_TYPES([nfds_t], [], [], [[#include <poll.h>]])
	AC_CHECK_FUNCS([pipe2])
elif test "x$poll" = xwindows; then
	AC_DEFINE([POLL_WINDOWS], [1], [Use Windows poll() implementation])
else
	AC_MSG_ERROR([Unknown poll implementation])
fi

if test "x$threads" = xposix; then
	AC_DEFINE([THREADS_POSIX], [1], [Use POSIX Threads])
elif test "x$threads" = xwindows; then
	AC_DEFINE([THREADS_WINDOWS], [1], [Use Windows Threads])
else
	AC_MSG_ERROR([Unknown threads implementation])
fi

dnl headers not available on all platforms but required on others
AC_CHECK_HEADERS([sys/time.h])

dnl the clock_gettime() function needs certain clock IDs defined
AC_CHECK_FUNCS([clock_gettime], [have_clock_gettime=yes], [have_clockgettime=no])
if test "x$have_clock_gettime" = xyes; then
	AC_CHECK_DECL([CLOCK_REALTIME], [], [AC_MSG_ERROR([C library headers missing definition for CLOCK_REALTIME])], [[#include <time.h>]])
	AC_CHECK_DECL([CLOCK_MONOTONIC], [], [AC_MSG_ERROR([C library headers missing definition for CLOCK_MONOTONIC])], [[#include <time.h>]])
elif test "x$backend" != xdarwin && test "x$backend" != xwindows; then
       AC_MSG_ERROR([clock_gettime() is required on this platform])
fi

dnl timerfd support
if test "x$backend" = xlinux || test "x$backend" = xsunos; then
	AC_ARG_ENABLE([timerfd],
		[AS_HELP_STRING([--enable-timerfd], [use timerfd for timing [default=auto]])],
		[use_timerfd=$enableval],
		[use_timerfd=auto])
	if test "x$use_timerfd" != xno; then
		AC_CHECK_HEADER([sys/timerfd.h], [timerfd_h=yes], [timerfd_h=no])
		if test "x$timerfd_h" = xyes; then
			AC_CHECK_DECLS([TFD_NONBLOCK, TFD_CLOEXEC], [timerfd_h_ok=yes], [timerfd_h_ok=no], [[#include <sys/timerfd.h>]])
			if test "x$timerfd_h_ok" = xyes; then
				AC_CHECK_FUNC([timerfd_create], [timerfd_ok=yes], [timerfd_ok=no])
				if test "x$timerfd_ok" = xyes; then
					AC_DEFINE([HAVE_TIMERFD], [1], [Define if the system has timerfd functionality])
				elif test "x$use_timerfd" = xyes; then
					AC_MSG_ERROR([timerfd_create() function not found; glibc 2.9+ required])
				fi
			elif test "x$use_timerfd" = xyes; then
				AC_MSG_ERROR([timerfd header not usable; glibc 2.9+ required])
			fi
		elif test "x$use_timerfd" = xyes; then
			AC_MSG_ERROR([timerfd header not available; glibc 2.9+ required])
		fi
	fi
	AC_MSG_CHECKING([whether to use timerfd for timing])
	if test "x$use_timerfd" = xno; then
		AC_MSG_RESULT([no (disabled by user)])
	elif test "x$timerfd_h" = xno; then
		AC_MSG_RESULT([no (header not usable)])
	elif test "x$timerfd_h_ok" = xno; then
		AC_MSG_RESULT([no (header not available)])
	elif test "x$timerfd_ok" = xno; then
		AC_MSG_RESULT([no (functions not available)])
	else
		AC_MSG_RESULT([yes])
	fi
fi

dnl Message logging
AC_ARG_ENABLE([log],
	[AS_HELP_STRING([--disable-log], [disable all logging])],
	[log_enabled=$enableval],
	[log_enabled=yes])
if test "x$log_enabled" != xno; then
	AC_DEFINE([ENABLE_LOGGING], [1], [Message logging])
fi

AC_ARG_ENABLE([debug-log],
	[AS_HELP_STRING([--enable-debug-log], [start with debug message logging enabled [default=no]])],
	[debug_log_enabled=$enableval],
	[debug_log_enabled=no])
if test "x$debug_log_enabled" != xno; then
	AC_DEFINE([ENABLE_DEBUG_LOGGING], [1], [Start with debug message logging enabled])
fi

AC_ARG_ENABLE([system-log],
	[AS_HELP_STRING([--enable-system-log], [output logging messages to system wide log, if supported by the OS [default=no]])],
	[system_log_enabled=$enableval],
	[system_log_enabled=no])
if test "x$system_log_enabled" != xno; then
	AC_DEFINE([USE_SYSTEM_LOGGING_FACILITY], [1], [Enable output to system log])
	if test "x$backend" != xwindows && test "x$is_backend_android" != xyes; then
		dnl Check if syslog is available in standard C library
		AC_CHECK_HEADER([syslog.h], [syslog_h=yes], [syslog_h=no])
		if test "x$syslog_h" = xyes; then
			AC_CHECK_FUNCS([syslog])
		fi
	fi
fi

dnl Examples build
AC_ARG_ENABLE([examples-build],
	[AS_HELP_STRING([--enable-examples-build], [build example applications [default=no]])],
	[build_examples=$enableval],
	[build_examples=no])
AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$build_examples" != xno])

dnl Tests build
AC_ARG_ENABLE([tests-build],
	[AS_HELP_STRING([--enable-tests-build], [build test applications [default=no]])],
	[build_tests=$enableval],
	[build_tests=no])
AM_CONDITIONAL([BUILD_TESTS], [test "x$build_tests" != xno])

dnl sigaction needed for some example programs
if test "x$build_examples" != xno; then
	AC_CHECK_FUNC([sigaction], [have_sigaction=yes], [have_sigaction=no])
fi
AM_CONDITIONAL([HAVE_SIGACTION], [test "x$have_sigaction" = xyes])

dnl check for -fvisibility=hidden compiler support (GCC >= 3.4)
saved_CFLAGS="${CFLAGS}"
dnl -Werror required for cygwin
CFLAGS="${CFLAGS} -Werror -fvisibility=hidden"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
	[VISIBILITY_CFLAGS="-fvisibility=hidden"
	 AC_DEFINE([DEFAULT_VISIBILITY], [__attribute__((visibility("default")))], [Default visibility])],
	[VISIBILITY_CFLAGS=""
	 AC_DEFINE([DEFAULT_VISIBILITY], [], [Default visibility])],
	])
CFLAGS="${saved_CFLAGS}"

dnl check for -Wno-pointer-sign compiler support (GCC >= 4)
saved_CFLAGS="${CFLAGS}"
CFLAGS="${CFLAGS} -Wno-pointer-sign"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
	nopointersign_cflags="-Wno-pointer-sign", nopointersign_cflags="")
CFLAGS="${saved_CFLAGS}"

dnl check for -std=gnu11 compiler support
saved_CFLAGS="${CFLAGS}"
CFLAGS="-std=gnu11"
AC_MSG_CHECKING([whether CC supports -std=gnu11])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
	[AC_MSG_RESULT([yes])
	 AM_CFLAGS="${AM_CFLAGS} -std=gnu11"],
	[AC_MSG_RESULT([no])])
CFLAGS="${saved_CFLAGS}"

dnl check for _Thread_local compiler support
if test "x$backend" != xwindows; then
	saved_CFLAGS="${CFLAGS}"
	saved_LDFLAGS="${LDFLAGS}"
	CFLAGS="${CFLAGS} -fPIC"
	LDFLAGS="${LDFLAGS} -shared"
	AC_MSG_CHECKING([whether CC supports _Thread_local])
	AC_LINK_IFELSE([AC_LANG_PROGRAM([], [static _Thread_local int v])],
		[AC_MSG_RESULT([yes])
		 AC_DEFINE([HAVE_CC_THREAD_LOCAL], [1], [Define to 1 if the compiler supports _Thread_local.])],
		[AC_MSG_RESULT([no])])
	CFLAGS="${saved_CFLAGS}"
	LDFLAGS="${saved_LDFLAGS}"
fi

AM_CFLAGS="${AM_CFLAGS} -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration ${nopointersign_cflags} -Wshadow ${THREAD_CFLAGS} ${VISIBILITY_CFLAGS}"

AC_SUBST(AM_CFLAGS)
AC_SUBST(LTLDFLAGS)

dnl set name of html output directory for doxygen
AC_SUBST(DOXYGEN_HTMLDIR, [api-1.0])

AC_CONFIG_FILES([libusb-1.0.pc])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([libusb/Makefile])
AC_CONFIG_FILES([examples/Makefile])
AC_CONFIG_FILES([tests/Makefile])
AC_CONFIG_FILES([doc/Makefile])
AC_CONFIG_FILES([doc/doxygen.cfg])
AC_OUTPUT
