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