2016-12-11 19:18:33 -08:00
|
|
|
AC_PREREQ(2.64)
|
2007-03-13 08:26:20 +00:00
|
|
|
|
|
|
|
|
# Process this file with autoconf to produce a configure script.
|
2017-12-09 14:59:48 -05:00
|
|
|
AC_INIT([json-c], 0.13.99, [json-c@googlegroups.com])
|
2007-03-13 08:26:20 +00:00
|
|
|
|
2014-03-02 12:16:37 -05:00
|
|
|
AM_INIT_AUTOMAKE
|
2007-03-13 08:26:20 +00:00
|
|
|
|
2017-09-03 22:35:58 -04:00
|
|
|
AC_CONFIG_MACRO_DIRS([autoconf-archive/m4])
|
|
|
|
|
|
2012-04-22 10:27:50 -05:00
|
|
|
AC_PROG_MAKE_SET
|
|
|
|
|
|
2017-07-13 09:33:39 +03:00
|
|
|
AC_CANONICAL_HOST
|
|
|
|
|
|
2017-09-03 23:37:12 -04:00
|
|
|
AC_ARG_ENABLE(threading,
|
|
|
|
|
AS_HELP_STRING([--enable-threading],
|
|
|
|
|
[Enable code to support partly multi-threaded use]),
|
|
|
|
|
[if test x$enableval = xyes; then
|
|
|
|
|
enable_threading=yes
|
|
|
|
|
AC_DEFINE(ENABLE_THREADING, 1, [Enable partial threading support])
|
|
|
|
|
fi])
|
|
|
|
|
|
|
|
|
|
if test "x$enable_threading" = "xyes"; then
|
|
|
|
|
AC_MSG_RESULT([Partial multi-threaded support enabled.])
|
|
|
|
|
else
|
|
|
|
|
AC_MSG_RESULT([Multi-threaded support disabled. Use --enable-threading to enable.])
|
|
|
|
|
fi
|
|
|
|
|
|
2014-04-09 13:48:21 +08:00
|
|
|
AC_ARG_ENABLE(rdrand,
|
|
|
|
|
AS_HELP_STRING([--enable-rdrand],
|
|
|
|
|
[Enable RDRAND Hardware RNG Hash Seed generation on supported x86/x64 platforms.]),
|
|
|
|
|
[if test x$enableval = xyes; then
|
|
|
|
|
enable_rdrand=yes
|
2017-09-03 23:37:12 -04:00
|
|
|
AC_DEFINE(ENABLE_RDRAND, 1, [Enable RDRAND Hardware RNG Hash Seed])
|
2014-04-09 13:48:21 +08:00
|
|
|
fi])
|
|
|
|
|
|
|
|
|
|
if test "x$enable_rdrand" = "xyes"; then
|
|
|
|
|
AC_MSG_RESULT([RDRAND Hardware RNG Hash Seed enabled on supported x86/x64 platforms])
|
|
|
|
|
else
|
|
|
|
|
AC_MSG_RESULT([RDRAND Hardware RNG Hash Seed disabled. Use --enable-rdrand to enable])
|
|
|
|
|
fi
|
|
|
|
|
|
2015-04-25 21:57:38 +02:00
|
|
|
# enable silent build by default
|
2015-06-02 13:59:50 -07:00
|
|
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
2015-04-25 21:57:38 +02:00
|
|
|
|
2007-03-13 08:26:20 +00:00
|
|
|
# Checks for programs.
|
|
|
|
|
|
|
|
|
|
# Checks for libraries.
|
|
|
|
|
|
|
|
|
|
# Checks for header files.
|
2013-11-18 16:25:14 +00:00
|
|
|
AM_PROG_CC_C_O
|
2016-01-05 11:43:17 +00:00
|
|
|
AC_PROG_CC_C99
|
2013-03-03 00:17:25 +01:00
|
|
|
AC_CONFIG_HEADER(config.h)
|
|
|
|
|
AC_CONFIG_HEADER(json_config.h)
|
2007-03-13 08:26:20 +00:00
|
|
|
AC_HEADER_STDC
|
2016-08-02 22:25:05 -04:00
|
|
|
AC_CHECK_HEADERS(fcntl.h limits.h strings.h syslog.h unistd.h [sys/cdefs.h] [sys/param.h] stdarg.h locale.h xlocale.h endian.h)
|
2012-02-15 20:44:54 -06:00
|
|
|
AC_CHECK_HEADER(inttypes.h,[AC_DEFINE([JSON_C_HAVE_INTTYPES_H],[1],[Public define for json_inttypes.h])])
|
2007-03-13 08:26:20 +00:00
|
|
|
|
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
|
|
|
AC_C_CONST
|
|
|
|
|
AC_TYPE_SIZE_T
|
|
|
|
|
|
2017-06-18 18:04:49 +00:00
|
|
|
AC_CACHE_CHECK([for __thread support], ac_cv___thread, [dnl
|
|
|
|
|
AC_LINK_IFELSE([dnl
|
|
|
|
|
AC_LANG_PROGRAM([[#undef __thread
|
|
|
|
|
static __thread int a; int foo (int b) { return a + b; }]],
|
|
|
|
|
[[exit (foo (0));]])],
|
|
|
|
|
ac_cv___thread=yes, ac_cv___thread=no)
|
|
|
|
|
])
|
|
|
|
|
AS_IF([test "x$ac_cv___thread" != xno],
|
2017-07-09 16:00:32 -07:00
|
|
|
[AC_DEFINE(HAVE___THREAD, 1, [Have __thread])
|
2017-06-18 18:04:49 +00:00
|
|
|
AC_DEFINE(SPEC___THREAD, [__thread], [Specifier for __thread])]
|
|
|
|
|
)
|
|
|
|
|
|
2007-03-13 08:26:20 +00:00
|
|
|
# Checks for library functions.
|
|
|
|
|
AC_FUNC_VPRINTF
|
|
|
|
|
AC_FUNC_MEMCMP
|
2016-01-01 18:35:14 +01:00
|
|
|
AC_CHECK_FUNCS([realloc])
|
2017-07-13 09:33:39 +03:00
|
|
|
AC_CHECK_FUNCS(strcasecmp strdup strerror snprintf vsnprintf vasprintf open vsyslog strncasecmp setlocale)
|
2014-03-22 17:28:40 -04:00
|
|
|
AC_CHECK_DECLS([INFINITY], [], [], [[#include <math.h>]])
|
2014-03-09 16:41:33 -04:00
|
|
|
AC_CHECK_DECLS([nan], [], [], [[#include <math.h>]])
|
2014-03-02 12:16:37 -05:00
|
|
|
AC_CHECK_DECLS([isnan], [], [], [[#include <math.h>]])
|
|
|
|
|
AC_CHECK_DECLS([isinf], [], [], [[#include <math.h>]])
|
|
|
|
|
AC_CHECK_DECLS([_isnan], [], [], [[#include <float.h>]])
|
|
|
|
|
AC_CHECK_DECLS([_finite], [], [], [[#include <float.h>]])
|
2017-09-02 14:48:17 -04:00
|
|
|
AC_MSG_CHECKING(for GCC atomic builtins)
|
|
|
|
|
AC_LINK_IFELSE(
|
|
|
|
|
[
|
|
|
|
|
AC_LANG_SOURCE([[
|
|
|
|
|
int main() {
|
|
|
|
|
volatile unsigned int val = 1;
|
|
|
|
|
/* Note: __sync_val_compare_and_swap isn't checked here
|
|
|
|
|
* because it's protected by __GCC_HAVE_SYNC_COMPARE_AND_SWAP_<n>,
|
|
|
|
|
* which is automatically defined by gcc.
|
|
|
|
|
*/
|
|
|
|
|
__sync_add_and_fetch(&val, 1);
|
|
|
|
|
__sync_sub_and_fetch(&val, 1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
]])
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
AC_DEFINE([HAVE_ATOMIC_BUILTINS],[1],[Has atomic builtins])
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
|
AC_MSG_WARN([json-c will be built without atomic refcounts because atomic builtins are missing])
|
|
|
|
|
])
|
2007-03-13 08:26:20 +00:00
|
|
|
|
2017-07-13 09:33:39 +03:00
|
|
|
case "${host_os}" in
|
|
|
|
|
linux*)
|
|
|
|
|
AC_CHECK_FUNCS([uselocale])
|
|
|
|
|
;;
|
|
|
|
|
*) # Nothing
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
2015-05-01 12:52:18 +02:00
|
|
|
if test "$ac_cv_have_decl_isnan" = "yes" ; then
|
|
|
|
|
AC_TRY_LINK([#include <math.h>], [float f = 0.0; return isnan(f)], [], [LIBS="$LIBS -lm"])
|
|
|
|
|
fi
|
|
|
|
|
|
2012-09-09 17:33:35 -07:00
|
|
|
#check if .section.gnu.warning accepts long strings (for __warn_references)
|
|
|
|
|
AC_LANG_PUSH([C])
|
|
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([if .gnu.warning accepts long strings])
|
2014-03-22 19:15:01 -04:00
|
|
|
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
2012-09-09 17:33:35 -07:00
|
|
|
extern void json_object_get();
|
|
|
|
|
__asm__(".section .gnu.json_object_get,\n\t.ascii \"Please link against libjson-c instead of libjson\"\n\t.text");
|
|
|
|
|
|
|
|
|
|
int main(int c,char* v) {return 0;}
|
2014-03-22 19:15:01 -04:00
|
|
|
]])], [
|
2012-09-09 17:33:35 -07:00
|
|
|
AC_DEFINE(HAS_GNU_WARNING_LONG, 1, [Define if .gnu.warning accepts long strings.])
|
|
|
|
|
AC_MSG_RESULT(yes)
|
|
|
|
|
], [
|
|
|
|
|
AC_MSG_RESULT(no)
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
AC_LANG_POP([C])
|
|
|
|
|
|
2017-07-03 12:17:36 +02:00
|
|
|
LT_INIT
|
2007-03-13 08:26:20 +00:00
|
|
|
|
Add a check for the -Bsymbolic-functions linker flag
The -Bsymbolic-functions linker flag reduces the amount of PLT jumps in
a shared object, and has a side effect of preventing symbol collisions
in libraries and applications linking against two different shared
objects exposing the same symbol.
While the former is (generally) a performance win, the latter is less
rare than expected. For instance, PulseAudio started linking against
json-c a while ago; now, every project linking against PulseAudio is
leaking json-c symbols. In the GNOME platform, this means that projects
linking against PulseAudio cannot be safely linked against other
libraries depending on the GLib-based JSON parsing libraries JSON-GLib,
because of a symbol conflict. Nominally, this conflict would not be an
issue: libraries and applications do not need to depend on two different
JSON parsing libraries; the symbol leakage, though, ends up causing
either segmentation faults, or weird errors. For further reference,
please see: https://bugzilla.gnome.org/show_bug.cgi?id=703734
JSON-GLib already switched to using -Bsymbolic-functions, but it would
be safe if json-c did the same, wherever the linker flag is available.
2013-09-17 13:08:14 +01:00
|
|
|
# Check for the -Bsymbolic-functions linker flag
|
|
|
|
|
AC_ARG_ENABLE([Bsymbolic],
|
|
|
|
|
[AS_HELP_STRING([--disable-Bsymbolic], [Avoid linking with -Bsymbolic-function])],
|
|
|
|
|
[],
|
|
|
|
|
[enable_Bsymbolic=check])
|
|
|
|
|
|
|
|
|
|
AS_IF([test "x$enable_Bsymbolic" = "xcheck"],
|
|
|
|
|
[
|
|
|
|
|
saved_LDFLAGS="${LDFLAGS}"
|
|
|
|
|
AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
|
|
|
|
|
LDFLAGS=-Wl,-Bsymbolic-functions
|
|
|
|
|
AC_TRY_LINK([], [int main (void) { return 0; }],
|
|
|
|
|
[
|
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
enable_Bsymbolic=yes
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
|
enable_Bsymbolic=no
|
|
|
|
|
])
|
|
|
|
|
LDFLAGS="${saved_LDFLAGS}"
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
AS_IF([test "x$enable_Bsymbolic" = "xyes"], [JSON_BSYMBOLIC_LDFLAGS=-Wl[,]-Bsymbolic-functions])
|
|
|
|
|
AC_SUBST(JSON_BSYMBOLIC_LDFLAGS)
|
|
|
|
|
|
2016-06-11 18:18:46 +00:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wall -Werror -Wcast-qual -Wno-error=deprecated-declarations])
|
2015-10-23 02:16:40 +00:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wextra -Wwrite-string -Wno-unused-parameter])
|
2018-03-04 22:32:45 -05:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-D_GNU_SOURCE])
|
|
|
|
|
|
|
|
|
|
AC_LANG_PUSH([C])
|
|
|
|
|
AC_MSG_CHECKING([for compatibility with _REENTRANT and toolchain headers])
|
|
|
|
|
AC_LINK_IFELSE(
|
|
|
|
|
[
|
|
|
|
|
AC_LANG_SOURCE([[
|
|
|
|
|
/* uClibc toolchains without threading barf when _REENTRANT is defined */
|
|
|
|
|
#define _REENTRANT 1
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
int main ()
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
]])], [
|
|
|
|
|
AC_MSG_RESULT(yes)
|
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-D_REENTRANT])
|
|
|
|
|
], [
|
|
|
|
|
AC_MSG_RESULT(no)
|
|
|
|
|
])
|
|
|
|
|
AC_LANG_POP([C])
|
|
|
|
|
|
2015-10-23 02:16:40 +00:00
|
|
|
|
2016-05-23 02:10:58 +00:00
|
|
|
AX_COMPILE_CHECK_SIZEOF(int)
|
|
|
|
|
AX_COMPILE_CHECK_SIZEOF(long)
|
2017-01-07 22:55:31 -05:00
|
|
|
AX_COMPILE_CHECK_SIZEOF(long long)
|
2016-05-23 10:18:59 +01:00
|
|
|
AX_COMPILE_CHECK_SIZEOF(size_t, [#include <stdint.h>])
|
2017-09-08 01:46:06 +00:00
|
|
|
AX_COMPILE_CHECK_SIZEOF(int64_t, [#include <stdint.h>])
|
2016-05-23 02:10:58 +00:00
|
|
|
|
2012-04-22 10:27:50 -05:00
|
|
|
AC_CONFIG_FILES([
|
2007-03-13 08:26:20 +00:00
|
|
|
Makefile
|
2012-03-30 12:28:32 -07:00
|
|
|
json-c.pc
|
2012-04-22 10:27:50 -05:00
|
|
|
tests/Makefile
|
2012-07-29 18:25:09 -05:00
|
|
|
json-c-uninstalled.pc
|
2007-03-13 08:26:20 +00:00
|
|
|
])
|
2012-04-22 10:27:50 -05:00
|
|
|
|
|
|
|
|
AC_OUTPUT
|
|
|
|
|
|