# config.m4

AC_DEFUN([_WI_MSG_LIB_ERROR], [
	AC_MSG_ERROR([could not locate $1

If you installed $1 into a non-standard directory, please run:

    env CPPFLAGS="-I/path/to/include" LDFLAGS="-L/path/to/lib" ./configure])
])


AC_DEFUN([WI_CHECK_SVN_REVISION], [
	WI_REVISION=$(svn info 2>&1 | grep "^Revision" | sed -e 's/^Revision: //')
	
	if test -z "$WI_REVISION"; then
		WI_REVISION=0
	fi

	AC_DEFINE_UNQUOTED([WI_REVISION], $WI_REVISION, [Subversion revision])
])


AC_DEFUN([WI_INCLUDE_WARNING_FLAG], [
	OLD_CFLAGS="$CFLAGS"
	CFLAGS="$CFLAGS $1"

	AC_COMPILE_IFELSE([
		int main(void) {
			return 0;
		}
	], [
		WARNFLAGS="$WARNFLAGS $1"
	], [
		CFLAGS="$OLD_CFLAGS"
	])
])


AC_DEFUN([WI_INCLUDE_EXTRA_INCLUDE_PATHS], [
	if test -d /usr/local/include; then
		CPPFLAGS="$CPPFLAGS -I/usr/local/include"
	fi
])


AC_DEFUN([WI_INCLUDE_EXTRA_LIBRARY_PATHS], [
	if test -d /usr/local/lib; then
		LDFLAGS="$LDFLAGS -L/usr/local/lib"
	fi
])


AC_DEFUN([WI_INCLUDE_EXTRA_SSL_PATHS], [
	if test "$_wi_ssl_paths_added" != yes ; then
		if test -d /usr/local/ssl/include; then
			CPPFLAGS="$CPPFLAGS -I/usr/local/ssl/include"
		fi

		if test -d /usr/kerberos/include; then
			CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
		fi

		if test -d /usr/local/ssl/lib; then
			LDFLAGS="$LDFLAGS -L/usr/local/ssl/lib"
		fi
	fi

	_wi_ssl_paths_added=yes
])


AC_DEFUN([WI_CHECK_LIBWIRED], [
	if ! test -f "$srcdir/libwired/configure"; then
		AC_MSG_ERROR([could not locate libwired

You need to download a version of libwired and place it in the same directory as this configure script])
fi
])


AC_DEFUN([WI_INCLUDE_LIBWIRED_LIBRARIES], [
	WI_INCLUDE_MATH_LIBRARY
	WI_INCLUDE_SOCKET_LIBRARY
	WI_INCLUDE_NSL_LIBRARY
	WI_INCLUDE_RESOLV_LIBRARY
	WI_INCLUDE_CORESERVICES_FRAMEWORK
])


AC_DEFUN([WI_INCLUDE_OPENSSL_LIBRARIES], [
	WI_INCLUDE_CRYPTO_LIBRARY
	WI_INCLUDE_SSL_LIBRARY
])



AC_DEFUN([WI_INCLUDE_P7_LIBRARIES], [
	WI_INCLUDE_CRYPTO_LIBRARY
	WI_INCLUDE_LIBXML2_LIBRARY
	WI_INCLUDE_ZLIB_LIBRARY
])


AC_DEFUN([WI_INCLUDE_MATH_LIBRARY], [
	AC_CHECK_FUNC([pow], [], [
		AC_CHECK_LIB([m], [sqrt], [
			LIBS="$LIBS -lm"
		])
	])
])


AC_DEFUN([WI_INCLUDE_SOCKET_LIBRARY], [
	AC_CHECK_FUNC(setsockopt, [], [
		AC_CHECK_LIB([socket], [setsockopt], [
			LIBS="$LIBS -lsocket"
		])
	])
])


AC_DEFUN([WI_INCLUDE_NSL_LIBRARY], [
	AC_CHECK_FUNC([gethostent], [], [
		AC_CHECK_LIB([nsl], [gethostent], [
			LIBS="$LIBS -lnsl"
		])
	])
])


AC_DEFUN([WI_INCLUDE_RESOLV_LIBRARY], [
	AC_CHECK_FUNC([inet_aton], [], [
		AC_CHECK_LIB([resolv], [inet_aton], [
			LIBS="$LIBS -lresolv"
		])
	])
])


AC_DEFUN([WI_INCLUDE_CRYPTO_LIBRARY], [
	WI_INCLUDE_EXTRA_SSL_PATHS

	AC_CHECK_HEADERS([openssl/sha.h], [
		AC_CHECK_LIB([crypto], [MD5_Init], [
			LIBS="$LIBS -lcrypto"
		], [
			_WI_MSG_LIB_ERROR([OpenSSL])
		])
	], [
		_WI_MSG_LIB_ERROR([OpenSSL])
	])
])


AC_DEFUN([WI_INCLUDE_SSL_LIBRARY], [
	WI_INCLUDE_EXTRA_SSL_PATHS

	AC_CHECK_HEADERS([openssl/ssl.h], [
		AC_CHECK_LIB([ssl], [SSL_library_init], [
			LIBS="$LIBS -lssl"
		], [
			_WI_MSG_LIB_ERROR([OpenSSL])
		])
	], [
		_WI_MSG_LIB_ERROR([OpenSSL])
	])
])


AC_DEFUN([WI_INCLUDE_CORESERVICES_FRAMEWORK], [
	AC_CHECK_HEADERS([CoreServices/CoreServices.h], [
		LIBS="$LIBS -framework CoreServices -framework Carbon"
	])
])


AC_DEFUN([_WI_PTHREAD_TEST_INCLUDES], [
	#include <pthread.h>
	#include <errno.h>

	void * thread(void *arg) {
		return NULL;
	}
])


AC_DEFUN([_WI_PTHREAD_TEST_FUNCTION], [
	pthread_t tid;

	if(pthread_create(&tid, 0, thread, NULL) < 0)
		return errno;

	return 0;
])


AC_DEFUN([_WI_PTHREAD_TEST_PROGRAM], [
	_WI_PTHREAD_TEST_INCLUDES

	int main(void) {
		_WI_PTHREAD_TEST_FUNCTION
	}
])


AC_DEFUN([_WI_PTHREAD_TRY], [
	if test "$_wi_pthreads_found" != yes ; then
		OLD_LIBS="$LIBS"
		LIBS="$1 $LIBS"

		AC_RUN_IFELSE([AC_LANG_SOURCE([_WI_PTHREAD_TEST_PROGRAM])], [
			_wi_pthreads_test=yes
		], [
			_wi_pthreads_test=no
		], [
			AC_LINK_IFELSE([AC_LANG_PROGRAM([_WI_PTHREAD_TEST_INCLUDES], [_WI_PTHREAD_TEST_FUNCTION])], [
				_wi_pthreads_test=yes
			], [
				_wi_pthreads_test=no
			])
		])

		LIBS="$OLD_LIBS"

		if test "$_wi_pthreads_test" = yes ; then
			_wi_pthreads_found=yes
			_wi_pthreads_libs="$1"
		fi
	fi
])


AC_DEFUN([WI_INCLUDE_PTHREADS], [
	case $host in
		*-solaris*)
			AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], [], [Define on Solaris to get sigwait() to work using pthreads semantics.])
			;;
	esac
	
	AC_CHECK_HEADERS([pthread.h], [
		AC_MSG_CHECKING([for pthreads])

		_WI_PTHREAD_TRY([])
		_WI_PTHREAD_TRY([-pthread])
		_WI_PTHREAD_TRY([-lpthread])

		if test "$_wi_pthreads_found" = yes ; then
			AC_MSG_RESULT([yes])
			LIBS="$_wi_pthreads_libs $LIBS"
		else
			AC_MSG_RESULT([no])
			AC_MSG_ERROR([could not locate pthreads])
		fi
	], [
		AC_MSG_ERROR([could not locate pthreads])
	])
])


AC_DEFUN([WI_INCLUDE_ICONV_LIBRARY], [
	AC_CHECK_HEADERS([iconv.h], [
		AC_CHECK_LIB([iconv], [iconv], [
			LIBS="$LIBS -liconv"
		], [
			AC_CHECK_LIB([iconv], [libiconv], [
				LIBS="$LIBS -liconv"
			], [
				AC_CHECK_FUNC([iconv], [], [
					_WI_MSG_LIB_ERROR([iconv])
				])
			])
		])
	], [
		_WI_MSG_LIB_ERROR([iconv])
	])

	AC_MSG_CHECKING([if iconv understands Unicode])
	AC_RUN_IFELSE([
		#include <iconv.h>
		int main(void) {
			iconv_t conv = iconv_open("UTF-8", "UTF-16");
			if(conv == (iconv_t) -1)
				return 1;
			return 0;
		}
	], [
		AC_MSG_RESULT([yes])
	], [
		AC_MSG_ERROR([no])
	])
])


AC_DEFUN([WI_INCLUDE_TERMCAP_LIBRARY], [
	AC_CHECK_HEADERS([term.h], [
		AC_CHECK_FUNC([tgoto], [], [
			AC_CHECK_LIB([termcap], [tgoto], [
				LIBS="$LIBS -ltermcap"
			], [
				AC_CHECK_LIB([ncurses], [tgoto], [
					LIBS="$LIBS -lncurses"
				], [
					AC_CHECK_LIB([curses], [tgoto], [
						LIBS="$LIBS -lcurses"
					])
				])
			])
		])
	])
])


AC_DEFUN([WI_INCLUDE_READLINE_LIBRARY], [
	AC_CHECK_HEADERS([readline/readline.h], [
		AC_CHECK_LIB([readline], [rl_initialize], [
			LIBS="$LIBS -lreadline"

			AC_MSG_CHECKING([for GNU readline])
			AC_RUN_IFELSE([
				#include <stdio.h>
				#include <readline/readline.h>
				int main(void) {
					return rl_gnu_readline_p ? 0 : 1;
				}
			], [
				AC_MSG_RESULT([yes])
			], [
				AC_MSG_RESULT([no])
				_WI_MSG_LIB_ERROR([GNU readline])
			])

			AC_MSG_CHECKING([for rl_completion_matches])
			AC_RUN_IFELSE([
				#include <stdio.h>
				#include <readline/readline.h>
				char * generator(const char *, int);
				char * generator(const char *text, int state) {
					return NULL;
				}
				int main(void) {
					(void) rl_completion_matches("", generator);

					return 0;
				}
			], [
				AC_DEFINE([HAVE_RL_COMPLETION_MATCHES], [1], [Define to 1 if you have the `rl_completion_matches' function, and to 0 otherwise.])
				AC_MSG_RESULT([yes])

			], [
				AC_MSG_RESULT([no])
			])

			AC_CHECK_DECLS([rl_completion_display_matches_hook], [], [], [
				#include <stdio.h>
				#include <readline/readline.h>
			])
		], [
			_WI_MSG_LIB_ERROR([readline])
		])
	], [
		_WI_MSG_LIB_ERROR([readline])
	])
])


AC_DEFUN([WI_INCLUDE_LIBXML2_LIBRARY], [
	if test -d /usr/include/libxml2; then
		CPPFLAGS="$CPPFLAGS -I/usr/include/libxml2"
	fi

	if test -d /usr/local/include/libxml2; then
		CPPFLAGS="$CPPFLAGS -I/usr/local/include/libxml2"
	fi

	AC_CHECK_HEADERS([libxml/parser.h], [
		AC_CHECK_LIB([xml2], [xmlParseFile], [
			LIBS="$LIBS -lxml2"
		], [
			_WI_MSG_LIB_ERROR([libxml2])
		])
	], [
		_WI_MSG_LIB_ERROR([libxml2])
	])
])


AC_DEFUN([WI_INCLUDE_ZLIB_LIBRARY], [
	AC_CHECK_HEADERS([zlib.h], [
		AC_CHECK_LIB([z], [deflate], [
			LIBS="$LIBS -lz"
		], [
			_WI_MSG_LIB_ERROR([zlib])
		])
	], [
		_WI_MSG_LIB_ERROR([zlib])
	])
])


syntax highlighted by Code2HTML, v. 0.9.1