138494Sobrienm4_define([maj_ver], [0])
2174294Sobrienm4_define([med_ver], [8])
338494Sobrienm4_define([min_ver], [1])
438494Sobrienm4_define([so_version], [6:0:1])
538494Sobrienm4_define([ucl_version], [maj_ver.med_ver.min_ver])
638494Sobrien
738494SobrienAC_INIT([libucl],[ucl_version],[https://github.com/vstakhov/libucl],[libucl])
838494SobrienAC_CONFIG_SRCDIR([configure.ac])
938494SobrienAM_INIT_AUTOMAKE([1.11 foreign -Wall -Wportability no-dist-gzip dist-xz])
1038494Sobrienm4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
1138494Sobrien
1238494SobrienUCL_VERSION=ucl_version
1338494SobrienSO_VERSION=so_version
1438494Sobrien
1538494SobrienAC_SUBST(UCL_VERSION)
1638494SobrienAC_SUBST(SO_VERSION)
1738494Sobrien
1838494SobrienAC_PROG_CC_C99
1938494SobrienAM_PROG_CC_C_O
2042629SobrienAM_PROG_AR
2138494SobrienLT_INIT
2238494SobrienAC_CONFIG_MACRO_DIR([m4])
2338494SobrienAC_CONFIG_HEADERS([config.h])
2438494Sobrien
2538494SobrienAC_C_CONST
2638494SobrienAC_TYPE_SIZE_T
2738494Sobrien
2838494SobrienAC_CHECK_HEADERS_ONCE([fcntl.h unistd.h])
2938494SobrienAC_TYPE_OFF_T
3038494SobrienAC_FUNC_MMAP
3138494SobrienAC_CHECK_HEADERS_ONCE([fcntl.h])
3238494SobrienAC_CHECK_HEADERS_ONCE([sys/types.h])
3338494SobrienAC_CHECK_HEADERS_ONCE([sys/stat.h])
3438494SobrienAC_CHECK_HEADERS_ONCE([sys/param.h])
3538494SobrienAC_CHECK_HEADERS_ONCE([sys/mman.h])
3638494SobrienAC_CHECK_HEADERS_ONCE([stdlib.h])
3738494SobrienAC_CHECK_HEADERS_ONCE([stddef.h])
3838494SobrienAC_CHECK_HEADERS_ONCE([stdarg.h])
3938494SobrienAC_CHECK_HEADERS_ONCE([stdbool.h])
40174294SobrienAC_CHECK_HEADERS_ONCE([stdint.h])
4138494SobrienAC_CHECK_HEADERS_ONCE([string.h])
4238494SobrienAC_CHECK_HEADERS_ONCE([strings.h])
4338494SobrienAC_CHECK_HEADERS_ONCE([unistd.h])
4438494SobrienAC_CHECK_HEADERS_ONCE([ctype.h])
4538494SobrienAC_CHECK_HEADERS_ONCE([errno.h])
4638494SobrienAC_CHECK_HEADERS_ONCE([limits.h])
4738494SobrienAC_CHECK_HEADERS_ONCE([libgen.h])
4838494SobrienAC_CHECK_HEADERS_ONCE([stdio.h])
4938494SobrienAC_CHECK_HEADERS_ONCE([float.h])
5038494SobrienAC_CHECK_HEADERS_ONCE([math.h])
5138494SobrienAC_CHECK_HEADERS_ONCE([endian.h sys/endian.h machine/endian.h])
5238494Sobrien
5338494Sobriendnl Example of default-disabled feature
5438494SobrienAC_ARG_ENABLE([urls], AS_HELP_STRING([--enable-urls], 
5538494Sobrien	[Enable URLs fetch (requires libfetch or libcurl) @<:@default=no@:>@]), [],
56174294Sobrien	[enable_urls=no])
5738494SobrienAC_ARG_ENABLE([regex], AS_HELP_STRING([--enable-regex], 
5838494Sobrien	[Enable regex checking for schema @<:@default=yes@:>@]), [],
5938494Sobrien	[enable_regex=yes])
6038494SobrienAC_ARG_ENABLE([signatures], AS_HELP_STRING([--enable-signatures],
6138494Sobrien	[Enable signatures check (requires openssl) @<:@default=no@:>@]), [],
6238494Sobrien	[enable_signatures=no])
6338494SobrienAC_ARG_ENABLE([lua], AS_HELP_STRING([--enable-lua],
6438494Sobrien	[Enable lua API build (requires lua libraries and headers) @<:@default=no@:>@]), [],
6538494Sobrien	[enable_lua=no])
6638494SobrienAC_ARG_ENABLE([utils],
6738494Sobrien	AS_HELP_STRING([--enable-utils], [Build and install utils @<:@default=no@:>@]),
6838494Sobrien	[case "${enableval}" in
6938494Sobrien  		yes) utils=true ;;
7038494Sobrien  		no)  utils=false ;;
7138494Sobrien  		*) AC_MSG_ERROR([bad value ${enableval} for --enable-utils]) ;;
7238494Sobrien	esac],[utils=false])
7338494SobrienAM_CONDITIONAL([UTILS], [test x$utils = xtrue])
7438494Sobrien
7538494SobrienAS_IF([test "x$enable_signatures" = "xyes"], [
7638494Sobrien	AC_SEARCH_LIBS([CRYPTO_new_ex_data], [crypto], [
7738494Sobrien		AC_DEFINE(HAVE_OPENSSL, 1, [Define to 1 if you have the 'crypto' library (-lcrypto).])
7838494Sobrien		LIBCRYPTO_LIB="-lcrypto"
7938494Sobrien		LIBS_EXTRA="${LIBS_EXTRA} -lcrypto"
8038494Sobrien		], [AC_MSG_ERROR([unable to find the CRYPTO_new_ex_data() function])])
8138494Sobrien])
8238494SobrienAC_SUBST(LIBCRYPTO_LIB)
8338494SobrienAC_PATH_PROG(PANDOC, pandoc, [/non/existent])
8438494Sobrien
8538494SobrienAC_SEARCH_LIBS([clock_gettime], [rt], [], [
8638494Sobrien	AC_CHECK_HEADER([mach/mach_time.h], [
8738494Sobrien		AC_DEFINE(HAVE_MACH_MACH_TIME_H, 1, [Define to 1 on Darwin])
8838494Sobrien	], [AC_MSG_ERROR([unable to find clock_gettime or mach_absolute_time])])
8938494Sobrien])
9038494SobrienAC_SEARCH_LIBS([remainder], [m], [], [AC_MSG_ERROR([unable to find remainder() function])])
9138494Sobrien
9238494SobrienAS_IF([test "x$enable_regex" = "xyes"], [
9338494Sobrien	AC_CHECK_HEADER([regex.h], [
9438494Sobrien		AC_DEFINE(HAVE_REGEX_H, 1, [Define to 1 if you have the <regex.h> header file.])
9538494Sobrien		AC_SEARCH_LIBS([regexec], [regex], [
9638494Sobrien			AS_IF([test "x$ac_cv_search_regexec" = "x-lregex"], [
9738494Sobrien				LIBREGEX_LIB="-lregex"
9838494Sobrien				LIBS_EXTRA="${LIBS_EXTRA} -lregex"
9938494Sobrien				]
10038494Sobrien			)], 
10138494Sobrien			[AC_MSG_ERROR([unable to find the regexec() function])])],
10238494Sobrien			[AC_MSG_ERROR([unable to find the regex.h header])
10338494Sobrien		],
10438494Sobrien		[#include <sys/types.h>])
10538494Sobrien])
10638494SobrienAC_SUBST(LIBREGEX_LIB)
10738494Sobrien
10838494SobrienAS_IF([test "x$enable_lua" = "xyes"], [
10938494Sobrien	AX_PROG_LUA([5.1], [], [
11038494Sobrien		AX_LUA_HEADERS([
11138494Sobrien			AX_LUA_LIBS([
11238494Sobrien				AC_DEFINE(HAVE_LUA, 1, [Define to 1 for lua support.])
11338494Sobrien				with_lua="yes"
11438494Sobrien			], [AC_MSG_ERROR([unable to find the lua libraries])
11538494Sobrien			])
11638494Sobrien		], [AC_MSG_ERROR([unable to find the lua header files])
11738494Sobrien		])
11838494Sobrien	], [AC_MSG_ERROR([unable to find the lua interpreter])])
11938494Sobrien], [with_lua="no"])
12038494Sobrien
12138494SobrienAM_CONDITIONAL([LUA_SUB], [test "$with_lua" = "yes"])
12238494Sobrien
12338494SobrienAS_IF([test "x$enable_urls" = "xyes"], [
12438494Sobrien	AC_CHECK_HEADER([fetch.h], [
12538494Sobrien		AC_DEFINE(HAVE_FETCH_H, 1, [Define to 1 if you have the <fetch.h> header file.])
12638494Sobrien		AC_CHECK_LIB(fetch, fetchXGet, [
12738494Sobrien			AC_DEFINE(HAVE_LIBFETCH, 1, [Define to 1 if you have the 'fetch' library (-lfetch).])
12838494Sobrien			LIBFETCH_LIBS="-lfetch"
12938494Sobrien			have_libfetch="yes"
13038494Sobrien			LIBS_EXTRA="${LIBS_EXTRA} -lfetch"
13142629Sobrien		])
13238494Sobrien	], [],[
13338494Sobrien	#include <stdio.h>
13438494Sobrien	#ifdef HAVE_SYS_PARAM_H
13538494Sobrien	#include <sys/param.h>
13638494Sobrien	#endif
137174294Sobrien	])
138174294Sobrien	AC_SUBST(LIBFETCH_LIBS)
13938494Sobrien
14038494Sobrien	AS_IF([ test "x$have_libfetch" != "xyes"], [
14138494Sobrien		dnl Fallback to libcurl
14238494Sobrien		PKG_CHECK_MODULES([CURL], [libcurl], [
14338494Sobrien			AC_DEFINE(CURL_FOUND, 1, [Use libcurl])
14438494Sobrien			LIBS_EXTRA="${LIBS_EXTRA} -lcurl"],
14538494Sobrien		[AC_MSG_ERROR([unable to find neither libfetch nor libcurl])])
14638494Sobrien	])
14738494Sobrien	AC_SUBST(CURL_FOUND)
14838494Sobrien	AC_SUBST(CURL_LIBS)
14938494Sobrien	AC_SUBST(CURL_CFLAGS)
15038494Sobrien])
15138494Sobrien
15238494SobrienAC_SUBST(LIBS_EXTRA)
15338494Sobrien
15438494SobrienAC_MSG_CHECKING(for GCC atomic builtins)
15538494SobrienAC_LINK_IFELSE([
15638494Sobrien	AC_LANG_SOURCE([[
15738494Sobrien		int main() {
15838494Sobrien			volatile unsigned long val = 1;
15938494Sobrien			__sync_synchronize();
16038494Sobrien			__sync_val_compare_and_swap(&val, 1, 0);
16138494Sobrien			__sync_add_and_fetch(&val, 1);
16238494Sobrien			__sync_sub_and_fetch(&val, 1);
16338494Sobrien			return 0;
16438494Sobrien		}
16538494Sobrien	]])
16638494Sobrien],
16738494Sobrien[
16838494Sobrien	AC_MSG_RESULT([yes])
16938494Sobrien	AC_DEFINE([HAVE_ATOMIC_BUILTINS], [1], [Has gcc/MSVC atomic intrinsics])
17038494Sobrien],
17138494Sobrien[
17238494Sobrien	AC_MSG_RESULT([no])
17338494Sobrien	AC_DEFINE([HAVE_ATOMIC_BUILTINS], [0], [Has gcc/MSVC atomic intrinsics])
17438494Sobrien	AC_MSG_WARN([Libucl references could be thread-unsafe because atomic builtins are missing])
17538494Sobrien])
17638494Sobrien
17738494SobrienAX_CODE_COVERAGE
17838494Sobrien
17938494SobrienAC_CONFIG_FILES(Makefile \
18038494Sobrien	src/Makefile \
18138494Sobrien	lua/Makefile
18238494Sobrien	tests/Makefile \
18338494Sobrien	utils/Makefile \
18438494Sobrien	doc/Makefile \
18538494Sobrien	lua/libucl.rockspec \
18638494Sobrien	libucl.pc)
18738494SobrienAC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
18838494SobrienAC_OUTPUT
18938494Sobrien