1263646Sbaptm4_define([maj_ver], [0])
2298166Sbaptm4_define([med_ver], [8])
3298166Sbaptm4_define([min_ver], [0])
4298166Sbaptm4_define([so_version], [6:0:0])
5263646Sbaptm4_define([ucl_version], [maj_ver.med_ver.min_ver])
6263646Sbapt
7263646SbaptAC_INIT([libucl],[ucl_version],[https://github.com/vstakhov/libucl],[libucl])
8263646SbaptAC_CONFIG_SRCDIR([configure.ac])
9275223SbaptAM_INIT_AUTOMAKE([1.11 foreign -Wall -Wportability no-dist-gzip dist-xz])
10275223Sbaptm4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
11263646Sbapt
12263646SbaptUCL_VERSION=ucl_version
13263646SbaptSO_VERSION=so_version
14263646Sbapt
15263646SbaptAC_SUBST(UCL_VERSION)
16263646SbaptAC_SUBST(SO_VERSION)
17263646Sbapt
18263646SbaptAC_PROG_CC_C99
19263646SbaptAM_PROG_CC_C_O
20263646SbaptAM_PROG_AR
21263646SbaptLT_INIT
22263646SbaptAC_CONFIG_MACRO_DIR([m4])
23263646SbaptAC_CONFIG_HEADERS([config.h])
24263646Sbapt
25263646SbaptAC_C_CONST
26263646SbaptAC_TYPE_SIZE_T
27263646Sbapt
28263646SbaptAC_CHECK_HEADERS_ONCE([fcntl.h unistd.h])
29263646SbaptAC_TYPE_OFF_T
30263646SbaptAC_FUNC_MMAP
31263646SbaptAC_CHECK_HEADERS_ONCE([fcntl.h])
32263646SbaptAC_CHECK_HEADERS_ONCE([sys/types.h])
33263646SbaptAC_CHECK_HEADERS_ONCE([sys/stat.h])
34263646SbaptAC_CHECK_HEADERS_ONCE([sys/param.h])
35263646SbaptAC_CHECK_HEADERS_ONCE([sys/mman.h])
36263646SbaptAC_CHECK_HEADERS_ONCE([stdlib.h])
37263646SbaptAC_CHECK_HEADERS_ONCE([stddef.h])
38263646SbaptAC_CHECK_HEADERS_ONCE([stdarg.h])
39263646SbaptAC_CHECK_HEADERS_ONCE([stdbool.h])
40263646SbaptAC_CHECK_HEADERS_ONCE([stdint.h])
41263646SbaptAC_CHECK_HEADERS_ONCE([string.h])
42314278SbaptAC_CHECK_HEADERS_ONCE([strings.h])
43263646SbaptAC_CHECK_HEADERS_ONCE([unistd.h])
44263646SbaptAC_CHECK_HEADERS_ONCE([ctype.h])
45263646SbaptAC_CHECK_HEADERS_ONCE([errno.h])
46263646SbaptAC_CHECK_HEADERS_ONCE([limits.h])
47263646SbaptAC_CHECK_HEADERS_ONCE([libgen.h])
48263646SbaptAC_CHECK_HEADERS_ONCE([stdio.h])
49263646SbaptAC_CHECK_HEADERS_ONCE([float.h])
50263646SbaptAC_CHECK_HEADERS_ONCE([math.h])
51290071SbaptAC_CHECK_HEADERS_ONCE([endian.h sys/endian.h machine/endian.h])
52263646Sbapt
53263646Sbaptdnl Example of default-disabled feature
54264789SbaptAC_ARG_ENABLE([urls], AS_HELP_STRING([--enable-urls], 
55264789Sbapt	[Enable URLs fetch (requires libfetch or libcurl) @<:@default=no@:>@]), [],
56264789Sbapt	[enable_urls=no])
57264789SbaptAC_ARG_ENABLE([regex], AS_HELP_STRING([--enable-regex], 
58264789Sbapt	[Enable regex checking for schema @<:@default=yes@:>@]), [],
59264789Sbapt	[enable_regex=yes])
60263646SbaptAC_ARG_ENABLE([signatures], AS_HELP_STRING([--enable-signatures],
61264789Sbapt	[Enable signatures check (requires openssl) @<:@default=no@:>@]), [],
62264789Sbapt	[enable_signatures=no])
63275223SbaptAC_ARG_ENABLE([lua], AS_HELP_STRING([--enable-lua],
64275223Sbapt	[Enable lua API build (requires lua libraries and headers) @<:@default=no@:>@]), [],
65275223Sbapt	[enable_lua=no])
66263646SbaptAC_ARG_ENABLE([utils],
67264789Sbapt	AS_HELP_STRING([--enable-utils], [Build and install utils @<:@default=no@:>@]),
68263646Sbapt	[case "${enableval}" in
69263646Sbapt  		yes) utils=true ;;
70263646Sbapt  		no)  utils=false ;;
71263646Sbapt  		*) AC_MSG_ERROR([bad value ${enableval} for --enable-utils]) ;;
72263646Sbapt	esac],[utils=false])
73263646SbaptAM_CONDITIONAL([UTILS], [test x$utils = xtrue])
74263646Sbapt
75263646SbaptAS_IF([test "x$enable_signatures" = "xyes"], [
76263646Sbapt	AC_SEARCH_LIBS([EVP_MD_CTX_create], [crypto], [
77263646Sbapt		AC_DEFINE(HAVE_OPENSSL, 1, [Define to 1 if you have the 'crypto' library (-lcrypto).])
78264789Sbapt		LIBCRYPTO_LIB="-lcrypto"
79263646Sbapt		LIBS_EXTRA="${LIBS_EXTRA} -lcrypto"
80263646Sbapt		], [AC_MSG_ERROR([unable to find the EVP_MD_CTX_create() function])])
81263646Sbapt])
82264789SbaptAC_SUBST(LIBCRYPTO_LIB)
83263646SbaptAC_PATH_PROG(PANDOC, pandoc, [/non/existent])
84263646Sbapt
85263646SbaptAC_SEARCH_LIBS([clock_gettime], [rt], [], [
86263646Sbapt	AC_CHECK_HEADER([mach/mach_time.h], [
87263646Sbapt		AC_DEFINE(HAVE_MACH_MACH_TIME_H, 1, [Define to 1 on Darwin])
88263646Sbapt	], [AC_MSG_ERROR([unable to find clock_gettime or mach_absolute_time])])
89263646Sbapt])
90263646SbaptAC_SEARCH_LIBS([remainder], [m], [], [AC_MSG_ERROR([unable to find remainder() function])])
91263646Sbapt
92264789SbaptAS_IF([test "x$enable_regex" = "xyes"], [
93264789Sbapt	AC_CHECK_HEADER([regex.h], [
94264789Sbapt		AC_DEFINE(HAVE_REGEX_H, 1, [Define to 1 if you have the <regex.h> header file.])
95264789Sbapt		AC_SEARCH_LIBS([regexec], [regex], [
96264789Sbapt			AS_IF([test "x$ac_cv_search_regexec" = "x-lregex"], [
97264789Sbapt				LIBREGEX_LIB="-lregex"
98264789Sbapt				LIBS_EXTRA="${LIBS_EXTRA} -lregex"
99264789Sbapt				]
100264789Sbapt			)], 
101264789Sbapt			[AC_MSG_ERROR([unable to find the regexec() function])])],
102264789Sbapt			[AC_MSG_ERROR([unable to find the regex.h header])
103264789Sbapt		],
104264789Sbapt		[#include <sys/types.h>])
105264789Sbapt])
106264789SbaptAC_SUBST(LIBREGEX_LIB)
107263646Sbapt
108275223SbaptAS_IF([test "x$enable_lua" = "xyes"], [
109275223Sbapt	AX_PROG_LUA([5.1], [], [
110275223Sbapt		AX_LUA_HEADERS([
111275223Sbapt			AX_LUA_LIBS([
112275223Sbapt				AC_DEFINE(HAVE_LUA, 1, [Define to 1 for lua support.])
113275223Sbapt				with_lua="yes"
114275223Sbapt			], [AC_MSG_ERROR([unable to find the lua libraries])
115275223Sbapt			])
116275223Sbapt		], [AC_MSG_ERROR([unable to find the lua header files])
117275223Sbapt		])
118275223Sbapt	], [AC_MSG_ERROR([unable to find the lua interpreter])])
119275223Sbapt], [with_lua="no"])
120275223Sbapt
121275223SbaptAM_CONDITIONAL([LUA_SUB], [test "$with_lua" = "yes"])
122275223Sbapt
123263646SbaptAS_IF([test "x$enable_urls" = "xyes"], [
124263646Sbapt	AC_CHECK_HEADER([fetch.h], [
125263646Sbapt		AC_DEFINE(HAVE_FETCH_H, 1, [Define to 1 if you have the <fetch.h> header file.])
126263646Sbapt		AC_CHECK_LIB(fetch, fetchXGet, [
127263646Sbapt			AC_DEFINE(HAVE_LIBFETCH, 1, [Define to 1 if you have the 'fetch' library (-lfetch).])
128263646Sbapt			LIBFETCH_LIBS="-lfetch"
129263646Sbapt			have_libfetch="yes"
130263646Sbapt			LIBS_EXTRA="${LIBS_EXTRA} -lfetch"
131263646Sbapt		])
132263646Sbapt	], [],[
133263646Sbapt	#include <stdio.h>
134263646Sbapt	#ifdef HAVE_SYS_PARAM_H
135263646Sbapt	#include <sys/param.h>
136263646Sbapt	#endif
137263646Sbapt	])
138263646Sbapt	AC_SUBST(LIBFETCH_LIBS)
139263646Sbapt
140263646Sbapt	AS_IF([ test "x$have_libfetch" != "xyes"], [
141263646Sbapt		dnl Fallback to libcurl
142263646Sbapt		PKG_CHECK_MODULES([CURL], [libcurl], [
143263646Sbapt			AC_DEFINE(CURL_FOUND, 1, [Use libcurl])
144263646Sbapt			LIBS_EXTRA="${LIBS_EXTRA} -lcurl"],
145263646Sbapt		[AC_MSG_ERROR([unable to find neither libfetch nor libcurl])])
146263646Sbapt	])
147263646Sbapt	AC_SUBST(CURL_FOUND)
148263646Sbapt	AC_SUBST(CURL_LIBS)
149263646Sbapt	AC_SUBST(CURL_CFLAGS)
150263646Sbapt])
151263646Sbapt
152263646SbaptAC_SUBST(LIBS_EXTRA)
153263646Sbapt
154264789SbaptAC_MSG_CHECKING(for GCC atomic builtins)
155264789SbaptAC_LINK_IFELSE([
156264789Sbapt	AC_LANG_SOURCE([[
157264789Sbapt		int main() {
158264789Sbapt			volatile unsigned long val = 1;
159264789Sbapt			__sync_synchronize();
160264789Sbapt			__sync_val_compare_and_swap(&val, 1, 0);
161264789Sbapt			__sync_add_and_fetch(&val, 1);
162264789Sbapt			__sync_sub_and_fetch(&val, 1);
163264789Sbapt			return 0;
164264789Sbapt		}
165264789Sbapt	]])
166264789Sbapt],
167264789Sbapt[
168264789Sbapt	AC_MSG_RESULT([yes])
169264789Sbapt	AC_DEFINE([HAVE_ATOMIC_BUILTINS], [1], [Has gcc/MSVC atomic intrinsics])
170264789Sbapt],
171264789Sbapt[
172264789Sbapt	AC_MSG_RESULT([no])
173264789Sbapt	AC_DEFINE([HAVE_ATOMIC_BUILTINS], [0], [Has gcc/MSVC atomic intrinsics])
174264789Sbapt	AC_MSG_WARN([Libucl references could be thread-unsafe because atomic builtins are missing])
175264789Sbapt])
176264789Sbapt
177298166SbaptAX_CODE_COVERAGE
178298166Sbapt
179263646SbaptAC_CONFIG_FILES(Makefile \
180263646Sbapt	src/Makefile \
181275223Sbapt	lua/Makefile
182263646Sbapt	tests/Makefile \
183263646Sbapt	utils/Makefile \
184263646Sbapt	doc/Makefile \
185275223Sbapt	lua/libucl.rockspec \
186263646Sbapt	libucl.pc)
187263646SbaptAC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
188263646SbaptAC_OUTPUT
189