2010-03-29 02:16:21 +08:00
|
|
|
AC_PREREQ([2.60])
|
2020-05-08 02:38:59 +08:00
|
|
|
AC_INIT([jansson], [2.13.1], [https://github.com/akheron/jansson/issues])
|
2009-05-13 03:21:50 +08:00
|
|
|
|
2014-05-14 21:03:21 +08:00
|
|
|
AC_CONFIG_AUX_DIR([.])
|
2009-05-13 03:21:50 +08:00
|
|
|
AM_INIT_AUTOMAKE([1.10 foreign])
|
|
|
|
|
|
|
|
AC_CONFIG_SRCDIR([src/value.c])
|
2014-01-14 00:13:44 +08:00
|
|
|
AC_CONFIG_HEADERS([jansson_private_config.h])
|
2009-05-13 03:21:50 +08:00
|
|
|
|
|
|
|
# Checks for programs.
|
|
|
|
AC_PROG_CC
|
2019-07-18 21:49:07 +08:00
|
|
|
AC_PROG_CXX
|
2009-05-13 03:21:50 +08:00
|
|
|
AC_PROG_LIBTOOL
|
2010-08-13 01:59:48 +08:00
|
|
|
AM_CONDITIONAL([GCC], [test x$GCC = xyes])
|
2009-05-13 03:21:50 +08:00
|
|
|
|
|
|
|
# Checks for libraries.
|
|
|
|
|
|
|
|
# Checks for header files.
|
2014-01-14 17:16:39 +08:00
|
|
|
AC_CHECK_HEADERS([endian.h fcntl.h locale.h sched.h unistd.h sys/param.h sys/stat.h sys/time.h sys/types.h])
|
2009-05-13 03:21:50 +08:00
|
|
|
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
2010-02-07 03:08:56 +08:00
|
|
|
AC_TYPE_INT32_T
|
2014-01-14 17:16:39 +08:00
|
|
|
AC_TYPE_UINT32_T
|
2014-04-30 17:05:07 +08:00
|
|
|
AC_TYPE_UINT16_T
|
|
|
|
AC_TYPE_UINT8_T
|
2010-08-14 03:06:01 +08:00
|
|
|
AC_TYPE_LONG_LONG_INT
|
|
|
|
|
2010-03-29 02:14:08 +08:00
|
|
|
AC_C_INLINE
|
|
|
|
case $ac_cv_c_inline in
|
|
|
|
yes) json_inline=inline;;
|
|
|
|
no) json_inline=;;
|
|
|
|
*) json_inline=$ac_cv_c_inline;;
|
|
|
|
esac
|
|
|
|
AC_SUBST([json_inline])
|
|
|
|
|
2009-05-13 03:21:50 +08:00
|
|
|
# Checks for library functions.
|
2014-01-14 17:16:39 +08:00
|
|
|
AC_CHECK_FUNCS([close getpid gettimeofday localeconv open read sched_yield strtoll])
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([for gcc __sync builtins])
|
|
|
|
have_sync_builtins=no
|
|
|
|
AC_TRY_LINK(
|
2018-01-23 03:50:37 +08:00
|
|
|
[], [unsigned long val; __sync_bool_compare_and_swap(&val, 0, 1); __sync_add_and_fetch(&val, 1); __sync_sub_and_fetch(&val, 1);],
|
2014-01-14 17:16:39 +08:00
|
|
|
[have_sync_builtins=yes],
|
|
|
|
)
|
|
|
|
if test "x$have_sync_builtins" = "xyes"; then
|
|
|
|
AC_DEFINE([HAVE_SYNC_BUILTINS], [1],
|
|
|
|
[Define to 1 if gcc's __sync builtins are available])
|
2018-01-23 03:50:37 +08:00
|
|
|
json_have_sync_builtins=1
|
|
|
|
else
|
|
|
|
json_have_sync_builtins=0
|
2014-01-14 17:16:39 +08:00
|
|
|
fi
|
2018-01-23 03:50:37 +08:00
|
|
|
AC_SUBST([json_have_sync_builtins])
|
2014-01-14 17:16:39 +08:00
|
|
|
AC_MSG_RESULT([$have_sync_builtins])
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([for gcc __atomic builtins])
|
|
|
|
have_atomic_builtins=no
|
|
|
|
AC_TRY_LINK(
|
2018-01-23 03:50:37 +08:00
|
|
|
[], [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); __atomic_add_fetch(&v, 1, __ATOMIC_ACQUIRE); __atomic_sub_fetch(&v, 1, __ATOMIC_RELEASE);],
|
2014-01-14 17:16:39 +08:00
|
|
|
[have_atomic_builtins=yes],
|
|
|
|
)
|
|
|
|
if test "x$have_atomic_builtins" = "xyes"; then
|
|
|
|
AC_DEFINE([HAVE_ATOMIC_BUILTINS], [1],
|
|
|
|
[Define to 1 if gcc's __atomic builtins are available])
|
2018-01-23 03:50:37 +08:00
|
|
|
json_have_atomic_builtins=1
|
|
|
|
else
|
|
|
|
json_have_atomic_builtins=0
|
2014-01-14 17:16:39 +08:00
|
|
|
fi
|
2018-01-23 03:50:37 +08:00
|
|
|
AC_SUBST([json_have_atomic_builtins])
|
2014-01-14 17:16:39 +08:00
|
|
|
AC_MSG_RESULT([$have_atomic_builtins])
|
2012-03-21 02:46:17 +08:00
|
|
|
|
|
|
|
case "$ac_cv_type_long_long_int$ac_cv_func_strtoll" in
|
|
|
|
yesyes) json_have_long_long=1;;
|
|
|
|
*) json_have_long_long=0;;
|
|
|
|
esac
|
|
|
|
AC_SUBST([json_have_long_long])
|
|
|
|
|
2011-10-03 02:27:53 +08:00
|
|
|
case "$ac_cv_header_locale_h$ac_cv_func_localeconv" in
|
|
|
|
yesyes) json_have_localeconv=1;;
|
|
|
|
*) json_have_localeconv=0;;
|
|
|
|
esac
|
|
|
|
AC_SUBST([json_have_localeconv])
|
2009-05-13 03:21:50 +08:00
|
|
|
|
2014-01-14 17:16:39 +08:00
|
|
|
# Features
|
|
|
|
AC_ARG_ENABLE([urandom],
|
|
|
|
[AS_HELP_STRING([--disable-urandom],
|
|
|
|
[Don't use /dev/urandom to seed the hash function])],
|
|
|
|
[use_urandom=$enableval], [use_urandom=yes])
|
|
|
|
|
|
|
|
if test "x$use_urandom" = xyes; then
|
|
|
|
AC_DEFINE([USE_URANDOM], [1],
|
|
|
|
[Define to 1 if /dev/urandom should be used for seeding the hash function])
|
|
|
|
fi
|
|
|
|
|
|
|
|
AC_ARG_ENABLE([windows-cryptoapi],
|
|
|
|
[AS_HELP_STRING([--disable-windows-cryptoapi],
|
|
|
|
[Don't use CryptGenRandom to seed the hash function])],
|
|
|
|
[use_windows_cryptoapi=$enableval], [use_windows_cryptoapi=yes])
|
|
|
|
|
|
|
|
if test "x$use_windows_cryptoapi" = xyes; then
|
|
|
|
AC_DEFINE([USE_WINDOWS_CRYPTOAPI], [1],
|
|
|
|
[Define to 1 if CryptGenRandom should be used for seeding the hash function])
|
|
|
|
fi
|
|
|
|
|
2014-12-18 20:43:07 +08:00
|
|
|
AC_ARG_ENABLE([initial-hashtable-order],
|
|
|
|
[AS_HELP_STRING([--enable-initial-hashtable-order=VAL],
|
|
|
|
[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.])],
|
|
|
|
[initial_hashtable_order=$enableval], [initial_hashtable_order=3])
|
|
|
|
AC_DEFINE_UNQUOTED([INITIAL_HASHTABLE_ORDER], [$initial_hashtable_order],
|
|
|
|
[Number of buckets new object hashtables contain is 2 raised to this power. E.g. 3 -> 2^3 = 8.])
|
|
|
|
|
2018-08-06 13:50:35 +08:00
|
|
|
AC_ARG_ENABLE([Bsymbolic],
|
|
|
|
[AS_HELP_STRING([--disable-Bsymbolic],
|
|
|
|
[Avoid linking with -Bsymbolic-function])],
|
|
|
|
[], [with_Bsymbolic=check])
|
|
|
|
|
|
|
|
if test "x$with_Bsymbolic" != "xno" ; then
|
|
|
|
AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
|
|
|
|
saved_LDFLAGS="${LDFLAGS}"
|
|
|
|
LDFLAGS=-Wl,-Bsymbolic-functions
|
|
|
|
AC_TRY_LINK(
|
|
|
|
[], [int main (void) { return 0; }],
|
|
|
|
[AC_MSG_RESULT([yes])
|
|
|
|
have_Bsymbolic=yes],
|
|
|
|
[AC_MSG_RESULT([no])
|
|
|
|
have_Bsymbolic=no]
|
|
|
|
)
|
|
|
|
LDFLAGS="${saved_LDFLAGS}"
|
|
|
|
|
|
|
|
if test "x$with_Bsymbolic" = "xcheck" ; then
|
|
|
|
with_Bsymbolic=$have_Bsymbolic;
|
|
|
|
fi
|
|
|
|
if test "x$with_Bsymbolic:x$have_Bsymbolic" = "xyes:xno" ; then
|
|
|
|
AC_MSG_ERROR([linker support is required for -Bsymbolic])
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
AS_IF([test "x$with_Bsymbolic" = "xyes"], [JSON_BSYMBOLIC_LDFLAGS=-Wl[,]-Bsymbolic-functions])
|
|
|
|
AC_SUBST(JSON_BSYMBOLIC_LDFLAGS)
|
|
|
|
|
build: Add a symbol version to all exported symbols for glibc
The --default-symver linker option attaches a default version definition
(the SONAME) to every exported symbol. It is supported since at least
GNU binutils 2.22 in 2011 (older versions not tested).
With this version definition, newly-linked binaries that depend on the
jansson shared library will refer to its symbols in a versioned form,
preventing their references from being resolved to a symbol of the same
name exported by json-c or json-glib if those libraries appear in
dependency search order before jansson, which will usually result in
a crash. This is necessary because ELF symbol resolution normally uses
a single flat namespace, not a tree like Windows symbol resolution.
At least one symbol (json_object_iter_next()) is exported by all three
JSON libraries.
Linking with -Bsymbolic is not enough to have this effect in all cases,
because -Bsymbolic only affects symbol lookup within a shared object,
for example when parse_json() calls json_decref(). It does not affect
calls from external code into jansson, unless jansson was statically
linked into the external caller.
This change will also not prevent code that depends on json-c or
json-glib from finding jansson's symbols and crashing; to prevent
that, a corresponding change in json-c or json-glib would be needed.
Adding a symbol-version is a backwards-compatible change, but once
added, removing or changing the symbol-version would be an incompatible
change that requires a SONAME bump.
Resolves: https://github.com/akheron/jansson/issues/523
(when combined with an equivalent change to json-c).
Signed-off-by: Simon McVittie <smcv@collabora.com>
2020-06-30 01:28:38 +08:00
|
|
|
# Enable symbol versioning on GNU libc
|
|
|
|
JSON_SYMVER_LDFLAGS=
|
|
|
|
AC_CHECK_DECL([__GLIBC__], [JSON_SYMVER_LDFLAGS=-Wl,--default-symver])
|
|
|
|
AC_SUBST([JSON_SYMVER_LDFLAGS])
|
2019-07-18 21:49:07 +08:00
|
|
|
|
|
|
|
AC_ARG_ENABLE([ossfuzzers],
|
|
|
|
[AS_HELP_STRING([--enable-ossfuzzers],
|
|
|
|
[Whether to generate the fuzzers for OSS-Fuzz])],
|
|
|
|
[have_ossfuzzers=yes], [have_ossfuzzers=no])
|
|
|
|
AM_CONDITIONAL([USE_OSSFUZZERS], [test "x$have_ossfuzzers" = "xyes"])
|
|
|
|
|
|
|
|
|
|
|
|
AC_SUBST([LIB_FUZZING_ENGINE])
|
|
|
|
AM_CONDITIONAL([USE_OSSFUZZ_FLAG], [test "x$LIB_FUZZING_ENGINE" = "x-fsanitize=fuzzer"])
|
2019-07-22 18:23:54 +08:00
|
|
|
AM_CONDITIONAL([USE_OSSFUZZ_STATIC], [test -f "$LIB_FUZZING_ENGINE"])
|
2019-07-18 21:49:07 +08:00
|
|
|
|
|
|
|
|
2014-08-26 20:56:14 +08:00
|
|
|
if test x$GCC = xyes; then
|
2018-07-15 01:24:55 +08:00
|
|
|
AC_MSG_CHECKING(for -Wno-format-truncation)
|
|
|
|
wnoformat_truncation="-Wno-format-truncation"
|
|
|
|
AS_IF([${CC} -Wno-format-truncation -Werror -S -o /dev/null -xc /dev/null > /dev/null 2>&1],
|
|
|
|
[AC_MSG_RESULT(yes)],
|
|
|
|
[AC_MSG_RESULT(no)
|
|
|
|
wnoformat_truncation=""])
|
|
|
|
|
2018-08-12 23:25:51 +08:00
|
|
|
AM_CFLAGS="-Wall -Wextra -Wdeclaration-after-statement -Wshadow ${wnoformat_truncation}"
|
2014-08-26 20:56:14 +08:00
|
|
|
fi
|
|
|
|
AC_SUBST([AM_CFLAGS])
|
|
|
|
|
2009-05-13 03:21:50 +08:00
|
|
|
AC_CONFIG_FILES([
|
2010-01-08 01:28:00 +08:00
|
|
|
jansson.pc
|
2009-05-13 03:21:50 +08:00
|
|
|
Makefile
|
2009-08-03 02:26:37 +08:00
|
|
|
doc/Makefile
|
2009-05-13 03:21:50 +08:00
|
|
|
src/Makefile
|
2010-08-11 03:14:37 +08:00
|
|
|
src/jansson_config.h
|
2009-07-10 02:01:40 +08:00
|
|
|
test/Makefile
|
2009-12-15 05:01:36 +08:00
|
|
|
test/bin/Makefile
|
2019-07-18 21:49:07 +08:00
|
|
|
test/ossfuzz/Makefile
|
2009-12-15 05:01:36 +08:00
|
|
|
test/suites/Makefile
|
|
|
|
test/suites/api/Makefile
|
2009-05-13 03:21:50 +08:00
|
|
|
])
|
|
|
|
AC_OUTPUT
|