1AC_PREREQ([2.60])
2AC_INIT([jansson], [2.9], [petri@digip.org])
3
4AC_CONFIG_AUX_DIR([.])
5AM_INIT_AUTOMAKE([1.10 foreign])
6
7AC_CONFIG_SRCDIR([src/value.c])
8AC_CONFIG_HEADERS([jansson_private_config.h])
9
10# Checks for programs.
11AC_PROG_CC
12AC_PROG_LIBTOOL
13AM_CONDITIONAL([GCC], [test x$GCC = xyes])
14
15# Checks for libraries.
16
17# Checks for header files.
18AC_CHECK_HEADERS([endian.h fcntl.h locale.h sched.h unistd.h sys/param.h sys/stat.h sys/time.h sys/types.h])
19
20# Checks for typedefs, structures, and compiler characteristics.
21AC_TYPE_INT32_T
22AC_TYPE_UINT32_T
23AC_TYPE_UINT16_T
24AC_TYPE_UINT8_T
25AC_TYPE_LONG_LONG_INT
26
27AC_C_INLINE
28case $ac_cv_c_inline in
29    yes) json_inline=inline;;
30    no) json_inline=;;
31    *) json_inline=$ac_cv_c_inline;;
32esac
33AC_SUBST([json_inline])
34
35# Checks for library functions.
36AC_CHECK_FUNCS([close getpid gettimeofday localeconv open read sched_yield strtoll])
37
38AC_MSG_CHECKING([for gcc __sync builtins])
39have_sync_builtins=no
40AC_TRY_LINK(
41  [], [unsigned long val; __sync_bool_compare_and_swap(&val, 0, 1);],
42  [have_sync_builtins=yes],
43)
44if test "x$have_sync_builtins" = "xyes"; then
45  AC_DEFINE([HAVE_SYNC_BUILTINS], [1],
46    [Define to 1 if gcc's __sync builtins are available])
47fi
48AC_MSG_RESULT([$have_sync_builtins])
49
50AC_MSG_CHECKING([for gcc __atomic builtins])
51have_atomic_builtins=no
52AC_TRY_LINK(
53  [], [char l; unsigned long v; __atomic_test_and_set(&l, __ATOMIC_RELAXED); __atomic_store_n(&v, 1, __ATOMIC_RELEASE); __atomic_load_n(&v, __ATOMIC_ACQUIRE);],
54  [have_atomic_builtins=yes],
55)
56if test "x$have_atomic_builtins" = "xyes"; then
57  AC_DEFINE([HAVE_ATOMIC_BUILTINS], [1],
58    [Define to 1 if gcc's __atomic builtins are available])
59fi
60AC_MSG_RESULT([$have_atomic_builtins])
61
62case "$ac_cv_type_long_long_int$ac_cv_func_strtoll" in
63     yesyes) json_have_long_long=1;;
64     *) json_have_long_long=0;;
65esac
66AC_SUBST([json_have_long_long])
67
68case "$ac_cv_header_locale_h$ac_cv_func_localeconv" in
69     yesyes) json_have_localeconv=1;;
70     *) json_have_localeconv=0;;
71esac
72AC_SUBST([json_have_localeconv])
73
74# Features
75AC_ARG_ENABLE([urandom],
76  [AS_HELP_STRING([--disable-urandom],
77    [Don't use /dev/urandom to seed the hash function])],
78  [use_urandom=$enableval], [use_urandom=yes])
79
80if test "x$use_urandom" = xyes; then
81AC_DEFINE([USE_URANDOM], [1],
82  [Define to 1 if /dev/urandom should be used for seeding the hash function])
83fi
84
85AC_ARG_ENABLE([windows-cryptoapi],
86  [AS_HELP_STRING([--disable-windows-cryptoapi],
87    [Don't use CryptGenRandom to seed the hash function])],
88  [use_windows_cryptoapi=$enableval], [use_windows_cryptoapi=yes])
89
90if test "x$use_windows_cryptoapi" = xyes; then
91AC_DEFINE([USE_WINDOWS_CRYPTOAPI], [1],
92  [Define to 1 if CryptGenRandom should be used for seeding the hash function])
93fi
94
95AC_ARG_ENABLE([initial-hashtable-order],
96  [AS_HELP_STRING([--enable-initial-hashtable-order=VAL],
97    [Number of buckets new object hashtables contain is 2 raised to this power. The default is 3, so empty hashtables contain 2^3 = 8 buckets.])],
98  [initial_hashtable_order=$enableval], [initial_hashtable_order=3])
99AC_DEFINE_UNQUOTED([INITIAL_HASHTABLE_ORDER], [$initial_hashtable_order],
100  [Number of buckets new object hashtables contain is 2 raised to this power. E.g. 3 -> 2^3 = 8.])
101
102if test x$GCC = xyes; then
103    AM_CFLAGS="-Wall -Wextra -Wdeclaration-after-statement"
104fi
105AC_SUBST([AM_CFLAGS])
106
107AC_CONFIG_FILES([
108        jansson.pc
109        Makefile
110        doc/Makefile
111        src/Makefile
112        src/jansson_config.h
113        test/Makefile
114        test/bin/Makefile
115        test/suites/Makefile
116        test/suites/api/Makefile
117])
118AC_OUTPUT
119