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