1268896Sbaptm4_define([maj_ver], [0]) 2268896Sbaptm4_define([med_ver], [4]) 3268896Sbaptm4_define([min_ver], [1]) 4268896Sbaptm4_define([so_version], [1:0:0]) 5268896Sbaptm4_define([ucl_version], [maj_ver.med_ver.min_ver]) 6268896Sbapt 7268896SbaptAC_INIT([libucl],[ucl_version],[https://github.com/vstakhov/libucl],[libucl]) 8268896SbaptAC_CONFIG_SRCDIR([configure.ac]) 9268896SbaptAM_INIT_AUTOMAKE([1.11 foreign silent-rules -Wall -Wportability no-dist-gzip dist-xz]) 10268896Sbapt 11268896SbaptUCL_VERSION=ucl_version 12268896SbaptSO_VERSION=so_version 13268896Sbapt 14268896SbaptAC_SUBST(UCL_VERSION) 15268896SbaptAC_SUBST(SO_VERSION) 16268896Sbapt 17268896SbaptAC_PROG_CC_C99 18268896SbaptAM_PROG_CC_C_O 19268896SbaptAM_PROG_AR 20268896SbaptLT_INIT 21268896SbaptAC_CONFIG_MACRO_DIR([m4]) 22268896SbaptAC_CONFIG_HEADERS([config.h]) 23268896Sbapt 24268896SbaptAC_C_CONST 25268896SbaptAC_TYPE_SIZE_T 26268896Sbapt 27268896SbaptAC_CHECK_HEADERS_ONCE([fcntl.h unistd.h]) 28268896SbaptAC_TYPE_OFF_T 29268896SbaptAC_FUNC_MMAP 30268896SbaptAC_CHECK_HEADERS_ONCE([fcntl.h]) 31268896SbaptAC_CHECK_HEADERS_ONCE([sys/types.h]) 32268896SbaptAC_CHECK_HEADERS_ONCE([sys/stat.h]) 33268896SbaptAC_CHECK_HEADERS_ONCE([sys/param.h]) 34268896SbaptAC_CHECK_HEADERS_ONCE([sys/mman.h]) 35268896SbaptAC_CHECK_HEADERS_ONCE([stdlib.h]) 36268896SbaptAC_CHECK_HEADERS_ONCE([stddef.h]) 37268896SbaptAC_CHECK_HEADERS_ONCE([stdarg.h]) 38268896SbaptAC_CHECK_HEADERS_ONCE([stdbool.h]) 39268896SbaptAC_CHECK_HEADERS_ONCE([stdint.h]) 40268896SbaptAC_CHECK_HEADERS_ONCE([string.h]) 41268896SbaptAC_CHECK_HEADERS_ONCE([unistd.h]) 42268896SbaptAC_CHECK_HEADERS_ONCE([ctype.h]) 43268896SbaptAC_CHECK_HEADERS_ONCE([errno.h]) 44268896SbaptAC_CHECK_HEADERS_ONCE([limits.h]) 45268896SbaptAC_CHECK_HEADERS_ONCE([libgen.h]) 46268896SbaptAC_CHECK_HEADERS_ONCE([stdio.h]) 47268896SbaptAC_CHECK_HEADERS_ONCE([float.h]) 48268896SbaptAC_CHECK_HEADERS_ONCE([math.h]) 49268896Sbapt 50268896Sbaptdnl Example of default-disabled feature 51268896SbaptAC_ARG_ENABLE([urls], AS_HELP_STRING([--enable-urls], 52268896Sbapt [Enable URLs fetch (requires libfetch or libcurl) @<:@default=no@:>@]), [], 53268896Sbapt [enable_urls=no]) 54268896SbaptAC_ARG_ENABLE([regex], AS_HELP_STRING([--enable-regex], 55268896Sbapt [Enable regex checking for schema @<:@default=yes@:>@]), [], 56268896Sbapt [enable_regex=yes]) 57268896SbaptAC_ARG_ENABLE([signatures], AS_HELP_STRING([--enable-signatures], 58268896Sbapt [Enable signatures check (requires openssl) @<:@default=no@:>@]), [], 59268896Sbapt [enable_signatures=no]) 60268896SbaptAC_ARG_ENABLE([utils], 61268896Sbapt AS_HELP_STRING([--enable-utils], [Build and install utils @<:@default=no@:>@]), 62268896Sbapt [case "${enableval}" in 63268896Sbapt yes) utils=true ;; 64268896Sbapt no) utils=false ;; 65268896Sbapt *) AC_MSG_ERROR([bad value ${enableval} for --enable-utils]) ;; 66268896Sbapt esac],[utils=false]) 67268896SbaptAM_CONDITIONAL([UTILS], [test x$utils = xtrue]) 68268896Sbapt 69268896SbaptAS_IF([test "x$enable_signatures" = "xyes"], [ 70268896Sbapt AC_SEARCH_LIBS([EVP_MD_CTX_create], [crypto], [ 71268896Sbapt AC_DEFINE(HAVE_OPENSSL, 1, [Define to 1 if you have the 'crypto' library (-lcrypto).]) 72268896Sbapt LIBCRYPTO_LIB="-lcrypto" 73268896Sbapt LIBS_EXTRA="${LIBS_EXTRA} -lcrypto" 74268896Sbapt ], [AC_MSG_ERROR([unable to find the EVP_MD_CTX_create() function])]) 75268896Sbapt]) 76268896SbaptAC_SUBST(LIBCRYPTO_LIB) 77268896SbaptAC_PATH_PROG(PANDOC, pandoc, [/non/existent]) 78268896Sbapt 79268896SbaptAC_SEARCH_LIBS([clock_gettime], [rt], [], [ 80268896Sbapt AC_CHECK_HEADER([mach/mach_time.h], [ 81268896Sbapt AC_DEFINE(HAVE_MACH_MACH_TIME_H, 1, [Define to 1 on Darwin]) 82268896Sbapt ], [AC_MSG_ERROR([unable to find clock_gettime or mach_absolute_time])]) 83268896Sbapt]) 84268896SbaptAC_SEARCH_LIBS([remainder], [m], [], [AC_MSG_ERROR([unable to find remainder() function])]) 85268896Sbapt 86268896SbaptAS_IF([test "x$enable_regex" = "xyes"], [ 87268896Sbapt AC_CHECK_HEADER([regex.h], [ 88268896Sbapt AC_DEFINE(HAVE_REGEX_H, 1, [Define to 1 if you have the <regex.h> header file.]) 89268896Sbapt AC_SEARCH_LIBS([regexec], [regex], [ 90268896Sbapt AS_IF([test "x$ac_cv_search_regexec" = "x-lregex"], [ 91268896Sbapt LIBREGEX_LIB="-lregex" 92268896Sbapt LIBS_EXTRA="${LIBS_EXTRA} -lregex" 93268896Sbapt ] 94268896Sbapt )], 95268896Sbapt [AC_MSG_ERROR([unable to find the regexec() function])])], 96268896Sbapt [AC_MSG_ERROR([unable to find the regex.h header]) 97268896Sbapt ], 98268896Sbapt [#include <sys/types.h>]) 99268896Sbapt]) 100268896SbaptAC_SUBST(LIBREGEX_LIB) 101268896Sbapt 102268896SbaptAS_IF([test "x$enable_urls" = "xyes"], [ 103268896Sbapt AC_CHECK_HEADER([fetch.h], [ 104268896Sbapt AC_DEFINE(HAVE_FETCH_H, 1, [Define to 1 if you have the <fetch.h> header file.]) 105268896Sbapt AC_CHECK_LIB(fetch, fetchXGet, [ 106268896Sbapt AC_DEFINE(HAVE_LIBFETCH, 1, [Define to 1 if you have the 'fetch' library (-lfetch).]) 107268896Sbapt LIBFETCH_LIBS="-lfetch" 108268896Sbapt have_libfetch="yes" 109268896Sbapt LIBS_EXTRA="${LIBS_EXTRA} -lfetch" 110268896Sbapt ]) 111268896Sbapt ], [],[ 112268896Sbapt #include <stdio.h> 113268896Sbapt #ifdef HAVE_SYS_PARAM_H 114268896Sbapt #include <sys/param.h> 115268896Sbapt #endif 116268896Sbapt ]) 117268896Sbapt AC_SUBST(LIBFETCH_LIBS) 118268896Sbapt 119268896Sbapt AS_IF([ test "x$have_libfetch" != "xyes"], [ 120268896Sbapt dnl Fallback to libcurl 121268896Sbapt PKG_CHECK_MODULES([CURL], [libcurl], [ 122268896Sbapt AC_DEFINE(CURL_FOUND, 1, [Use libcurl]) 123268896Sbapt LIBS_EXTRA="${LIBS_EXTRA} -lcurl"], 124268896Sbapt [AC_MSG_ERROR([unable to find neither libfetch nor libcurl])]) 125268896Sbapt ]) 126268896Sbapt AC_SUBST(CURL_FOUND) 127268896Sbapt AC_SUBST(CURL_LIBS) 128268896Sbapt AC_SUBST(CURL_CFLAGS) 129268896Sbapt]) 130268896Sbapt 131268896SbaptAC_SUBST(LIBS_EXTRA) 132268896Sbapt 133268896SbaptAC_MSG_CHECKING(for GCC atomic builtins) 134268896SbaptAC_LINK_IFELSE([ 135268896Sbapt AC_LANG_SOURCE([[ 136268896Sbapt int main() { 137268896Sbapt volatile unsigned long val = 1; 138268896Sbapt __sync_synchronize(); 139268896Sbapt __sync_val_compare_and_swap(&val, 1, 0); 140268896Sbapt __sync_add_and_fetch(&val, 1); 141268896Sbapt __sync_sub_and_fetch(&val, 1); 142268896Sbapt return 0; 143268896Sbapt } 144268896Sbapt ]]) 145268896Sbapt], 146268896Sbapt[ 147268896Sbapt AC_MSG_RESULT([yes]) 148268896Sbapt AC_DEFINE([HAVE_ATOMIC_BUILTINS], [1], [Has gcc/MSVC atomic intrinsics]) 149268896Sbapt], 150268896Sbapt[ 151268896Sbapt AC_MSG_RESULT([no]) 152268896Sbapt AC_DEFINE([HAVE_ATOMIC_BUILTINS], [0], [Has gcc/MSVC atomic intrinsics]) 153268896Sbapt AC_MSG_WARN([Libucl references could be thread-unsafe because atomic builtins are missing]) 154268896Sbapt]) 155268896Sbapt 156268896SbaptAC_CONFIG_FILES(Makefile \ 157268896Sbapt src/Makefile \ 158268896Sbapt tests/Makefile \ 159268896Sbapt utils/Makefile \ 160268896Sbapt doc/Makefile \ 161268896Sbapt libucl.pc) 162268896SbaptAC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h]) 163268896SbaptAC_OUTPUT 164