1 m4_define([maj_ver], [0])
2 m4_define([med_ver], [4])
3 m4_define([min_ver], [1])
4 m4_define([so_version], [1:0:0])
5 m4_define([ucl_version], [maj_ver.med_ver.min_ver])
7 AC_INIT([libucl],[ucl_version],[https://github.com/vstakhov/libucl],[libucl])
8 AC_CONFIG_SRCDIR([configure.ac])
9 AM_INIT_AUTOMAKE([1.11 foreign silent-rules -Wall -Wportability no-dist-gzip dist-xz])
11 UCL_VERSION=ucl_version
21 AC_CONFIG_MACRO_DIR([m4])
22 AC_CONFIG_HEADERS([config.h])
27 AC_CHECK_HEADERS_ONCE([fcntl.h unistd.h])
30 AC_CHECK_HEADERS_ONCE([fcntl.h])
31 AC_CHECK_HEADERS_ONCE([sys/types.h])
32 AC_CHECK_HEADERS_ONCE([sys/stat.h])
33 AC_CHECK_HEADERS_ONCE([sys/param.h])
34 AC_CHECK_HEADERS_ONCE([sys/mman.h])
35 AC_CHECK_HEADERS_ONCE([stdlib.h])
36 AC_CHECK_HEADERS_ONCE([stddef.h])
37 AC_CHECK_HEADERS_ONCE([stdarg.h])
38 AC_CHECK_HEADERS_ONCE([stdbool.h])
39 AC_CHECK_HEADERS_ONCE([stdint.h])
40 AC_CHECK_HEADERS_ONCE([string.h])
41 AC_CHECK_HEADERS_ONCE([unistd.h])
42 AC_CHECK_HEADERS_ONCE([ctype.h])
43 AC_CHECK_HEADERS_ONCE([errno.h])
44 AC_CHECK_HEADERS_ONCE([limits.h])
45 AC_CHECK_HEADERS_ONCE([libgen.h])
46 AC_CHECK_HEADERS_ONCE([stdio.h])
47 AC_CHECK_HEADERS_ONCE([float.h])
48 AC_CHECK_HEADERS_ONCE([math.h])
50 dnl Example of default-disabled feature
51 AC_ARG_ENABLE([urls], AS_HELP_STRING([--enable-urls],
52 [Enable URLs fetch (requires libfetch or libcurl) @<:@default=no@:>@]), [],
54 AC_ARG_ENABLE([regex], AS_HELP_STRING([--enable-regex],
55 [Enable regex checking for schema @<:@default=yes@:>@]), [],
57 AC_ARG_ENABLE([signatures], AS_HELP_STRING([--enable-signatures],
58 [Enable signatures check (requires openssl) @<:@default=no@:>@]), [],
59 [enable_signatures=no])
60 AC_ARG_ENABLE([utils],
61 AS_HELP_STRING([--enable-utils], [Build and install utils @<:@default=no@:>@]),
62 [case "${enableval}" in
65 *) AC_MSG_ERROR([bad value ${enableval} for --enable-utils]) ;;
67 AM_CONDITIONAL([UTILS], [test x$utils = xtrue])
69 AS_IF([test "x$enable_signatures" = "xyes"], [
70 AC_SEARCH_LIBS([EVP_MD_CTX_create], [crypto], [
71 AC_DEFINE(HAVE_OPENSSL, 1, [Define to 1 if you have the 'crypto' library (-lcrypto).])
72 LIBCRYPTO_LIB="-lcrypto"
73 LIBS_EXTRA="${LIBS_EXTRA} -lcrypto"
74 ], [AC_MSG_ERROR([unable to find the EVP_MD_CTX_create() function])])
76 AC_SUBST(LIBCRYPTO_LIB)
77 AC_PATH_PROG(PANDOC, pandoc, [/non/existent])
79 AC_SEARCH_LIBS([clock_gettime], [rt], [], [
80 AC_CHECK_HEADER([mach/mach_time.h], [
81 AC_DEFINE(HAVE_MACH_MACH_TIME_H, 1, [Define to 1 on Darwin])
82 ], [AC_MSG_ERROR([unable to find clock_gettime or mach_absolute_time])])
84 AC_SEARCH_LIBS([remainder], [m], [], [AC_MSG_ERROR([unable to find remainder() function])])
86 AS_IF([test "x$enable_regex" = "xyes"], [
87 AC_CHECK_HEADER([regex.h], [
88 AC_DEFINE(HAVE_REGEX_H, 1, [Define to 1 if you have the <regex.h> header file.])
89 AC_SEARCH_LIBS([regexec], [regex], [
90 AS_IF([test "x$ac_cv_search_regexec" = "x-lregex"], [
91 LIBREGEX_LIB="-lregex"
92 LIBS_EXTRA="${LIBS_EXTRA} -lregex"
95 [AC_MSG_ERROR([unable to find the regexec() function])])],
96 [AC_MSG_ERROR([unable to find the regex.h header])
98 [#include <sys/types.h>])
100 AC_SUBST(LIBREGEX_LIB)
102 AS_IF([test "x$enable_urls" = "xyes"], [
103 AC_CHECK_HEADER([fetch.h], [
104 AC_DEFINE(HAVE_FETCH_H, 1, [Define to 1 if you have the <fetch.h> header file.])
105 AC_CHECK_LIB(fetch, fetchXGet, [
106 AC_DEFINE(HAVE_LIBFETCH, 1, [Define to 1 if you have the 'fetch' library (-lfetch).])
107 LIBFETCH_LIBS="-lfetch"
109 LIBS_EXTRA="${LIBS_EXTRA} -lfetch"
113 #ifdef HAVE_SYS_PARAM_H
114 #include <sys/param.h>
117 AC_SUBST(LIBFETCH_LIBS)
119 AS_IF([ test "x$have_libfetch" != "xyes"], [
120 dnl Fallback to libcurl
121 PKG_CHECK_MODULES([CURL], [libcurl], [
122 AC_DEFINE(CURL_FOUND, 1, [Use libcurl])
123 LIBS_EXTRA="${LIBS_EXTRA} -lcurl"],
124 [AC_MSG_ERROR([unable to find neither libfetch nor libcurl])])
128 AC_SUBST(CURL_CFLAGS)
133 AC_MSG_CHECKING(for GCC atomic builtins)
137 volatile unsigned long val = 1;
138 __sync_synchronize();
139 __sync_val_compare_and_swap(&val, 1, 0);
140 __sync_add_and_fetch(&val, 1);
141 __sync_sub_and_fetch(&val, 1);
148 AC_DEFINE([HAVE_ATOMIC_BUILTINS], [1], [Has gcc/MSVC atomic intrinsics])
152 AC_DEFINE([HAVE_ATOMIC_BUILTINS], [0], [Has gcc/MSVC atomic intrinsics])
153 AC_MSG_WARN([Libucl references could be thread-unsafe because atomic builtins are missing])
156 AC_CONFIG_FILES(Makefile \
162 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])