Skip to content
267 changes: 267 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,26 @@ PKGPATH=$($PKG_CONFIG --variable pc_path pkg-config)
AC_PROG_CXX
AC_PROG_CC

JSONC_CFLAGS=""
JSONC_LDADD=""
JSONC_LDFLAGS=""
JANSSON_CFLAGS=""
JANSSON_LDADD=""
JANSSON_LDFLAGS=""
CJSON_CFLAGS=""
CJSON_LDADD=""
CJSON_LDFLAGS=""
JSONCPP_CFLAGS=""
JSONCPP_LDADD=""
JSONCPP_LDFLAGS=""
SIMDJSON_CFLAGS=""
SIMDJSON_LDADD=""
SIMDJSON_LDFLAGS=""
YYJSON_CFLAGS=""
YYJSON_LDADD=""
YYJSON_LDFLAGS=""
GLAZE_CFLAGS=""

# Verbose output
AC_ARG_ENABLE(verbose-output,
AS_HELP_STRING([--enable-verbose-output],
Expand Down Expand Up @@ -164,6 +184,253 @@ fi
AM_CONDITIONAL([HAVE_NLOHMANNJSON], [test "x$enable_nlohmannjson" = "xyes"])
#dnl End check for nlohmannjson

dnl Check if we want to use json-c or not
AC_MSG_CHECKING([whether to use json-c])
AC_ARG_WITH(
[jsonc],
[AS_HELP_STRING([--with-jsonc], [Enable json-c (default is enabled if exists)])],
[case "$withval" in
yes) wantjsonc=yes ;;
no) wantjsonc=no; AC_DEFINE([HAVE_JSONC], [0], [Mark that user does not want json-c]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantjsonc="notset"]
)

if test "$wantjsonc" != "no"; then
PKG_CHECK_MODULES([JSONC], [json-c], [
JSONC_CFLAGS="$JSONC_CFLAGS"
JSONC_LDADD="$JSONC_LIBS"
AC_DEFINE([HAVE_JSONC], [1], [Mark that system has json-c])
], [
AC_MSG_ERROR([json-c was requested but not found via pkg-config. Install json-c or disable with --with-jsonc=no])
])
fi

dnl Check if we want to use jansson or not
AC_MSG_CHECKING([whether to use jansson])
AC_ARG_WITH(
[jansson],
[AS_HELP_STRING([--with-jansson], [Enable jansson (default is enabled if exists)])],
[case "$withval" in
yes) wantjansson=yes ;;
no) wantjansson=no; AC_DEFINE([HAVE_JANSSON], [0], [Mark that user does not want jansson]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantjansson="notset"]
)

if test "$wantjansson" != "no"; then
PKG_CHECK_MODULES([JANSSON], [jansson], [
JANSSON_CFLAGS="$JANSSON_CFLAGS"
JANSSON_LDADD="$JANSSON_LIBS"
AC_DEFINE([HAVE_JANSSON], [1], [Mark that system has jansson])
], [
AC_MSG_ERROR([jansson was requested but not found via pkg-config. Install jansson or disable with --with-jansson=no])
])
fi

dnl Check if we want to use cJSON or not
AC_MSG_CHECKING([whether to use cJSON])
AC_ARG_WITH(
[cjson],
[AS_HELP_STRING([--with-cjson], [Enable cJSON (default is enabled if exists)])],
[case "$withval" in
yes) wantcjson=yes ;;
no) wantcjson=no; AC_DEFINE([HAVE_CJSON], [0], [Mark that user does not want cJSON]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantcjson="notset"]
)

if test "$wantcjson" != "no"; then
PKG_CHECK_MODULES([CJSON], [libcjson], [
CJSON_CFLAGS="$CJSON_CFLAGS"
CJSON_LDADD="$CJSON_LIBS"
AC_DEFINE([HAVE_CJSON], [1], [Mark that system has cJSON])
], [
AC_MSG_ERROR([cJSON was requested but not found via pkg-config as libcjson. Install libcjson or disable with --with-cjson=no])
])
fi

dnl Check if we want to use jsoncpp or not
AC_MSG_CHECKING([whether to use jsoncpp])
AC_ARG_WITH(
[jsoncpp],
[AS_HELP_STRING([--with-jsoncpp], [Enable jsoncpp (default is enabled if exists)])],
[case "$withval" in
yes) wantjsoncpp=yes ;;
no) wantjsoncpp=no; AC_DEFINE([HAVE_JSONCPP], [0], [Mark that user does not want JsonCpp]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantjsoncpp="notset"]
)

if test "$wantjsoncpp" != "no"; then
PKG_CHECK_MODULES([JSONCPP], [jsoncpp], [
JSONCPP_CFLAGS="$JSONCPP_CFLAGS"
JSONCPP_LDADD="$JSONCPP_LIBS"
AC_DEFINE([HAVE_JSONCPP], [1], [Mark that system has JsonCpp])
], [
AC_LANG_PUSH([C++])
jsoncpp_header="no"
AC_CHECK_HEADERS([json/json.h], [jsoncpp_header="json/json.h"])
if test "$jsoncpp_header" = "no"; then
AC_CHECK_HEADERS([jsoncpp/json/json.h], [
jsoncpp_header="jsoncpp/json/json.h"
JSONCPP_CFLAGS="-I/usr/include/jsoncpp"
])
fi
if test "$jsoncpp_header" = "no"; then
AC_MSG_ERROR([JsonCpp header not found (tried json/json.h and jsoncpp/json/json.h). Install jsoncpp development headers or disable with --with-jsoncpp=no])
fi
old_LIBS="$LIBS"
LIBS="$LIBS -ljsoncpp"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([[#include <$jsoncpp_header>]], [[Json::Value root; return root.isNull() ? 0 : 1;]])],
[
JSONCPP_LDADD="-ljsoncpp"
AC_DEFINE([HAVE_JSONCPP], [1], [Mark that system has JsonCpp])
],
[AC_MSG_ERROR([JsonCpp library not found. Install libjsoncpp or disable with --with-jsoncpp=no])]
)
LIBS="$old_LIBS"
AC_LANG_POP([C++])
])
fi



dnl Check if we want to use simdjson or not
AC_MSG_CHECKING([whether to use simdjson])
AC_ARG_WITH(
[simdjson],
[AS_HELP_STRING([--with-simdjson], [Enable simdjson (default is enabled if exists)])],
[case "$withval" in
yes) wantsimdjson=yes ;;
no) wantsimdjson=no; AC_DEFINE([HAVE_SIMDJSON], [0], [Mark that user does not want simdjson]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantsimdjson="notset"]
)

if test "$wantsimdjson" != "no"; then
PKG_CHECK_MODULES([SIMDJSON], [simdjson], [
SIMDJSON_CFLAGS="$SIMDJSON_CFLAGS"
SIMDJSON_LDADD="$SIMDJSON_LIBS"
AC_DEFINE([HAVE_SIMDJSON], [1], [Mark that system has simdjson])
], [
AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([simdjson.h], [],
[AC_MSG_ERROR([simdjson.h not found. Install simdjson headers or disable with --with-simdjson=no])]
)
old_LIBS="$LIBS"
LIBS="$LIBS -lsimdjson"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([[#include <simdjson.h>]], [[simdjson::ondemand::parser parser; return 0;]])],
[
SIMDJSON_LDADD="-lsimdjson"
AC_DEFINE([HAVE_SIMDJSON], [1], [Mark that system has simdjson])
],
[AC_MSG_ERROR([simdjson library not found. Install libsimdjson or disable with --with-simdjson=no])]
)
LIBS="$old_LIBS"
AC_LANG_POP([C++])
])
fi

dnl Check if we want to use yyjson or not
AC_MSG_CHECKING([whether to use yyjson])
AC_ARG_WITH(
[yyjson],
[AS_HELP_STRING([--with-yyjson], [Enable yyjson (default is enabled if exists)])],
[case "$withval" in
yes) wantyyjson=yes ;;
no) wantyyjson=no; AC_DEFINE([HAVE_YYJSON], [0], [Mark that user does not want yyjson]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantyyjson="notset"]
)

if test "$wantyyjson" != "no"; then
PKG_CHECK_MODULES([YYJSON], [yyjson], [
YYJSON_CFLAGS="$YYJSON_CFLAGS"
YYJSON_LDADD="$YYJSON_LIBS"
AC_DEFINE([HAVE_YYJSON], [1], [Mark that system has yyjson])
], [
AC_MSG_ERROR([yyjson was requested but not found via pkg-config. Install yyjson or disable with --with-yyjson=no])
])
fi

dnl Check if we want to use glaze or not
AC_MSG_CHECKING([whether to use glaze])
AC_ARG_WITH(
[glaze],
[AS_HELP_STRING([--with-glaze], [Enable glaze (default is enabled if exists)])],
[case "$withval" in
yes) wantglaze=yes ;;
no) wantglaze=no; AC_DEFINE([HAVE_GLAZE], [0], [Mark that user does not want glaze]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantglaze="notset"]
)

if test "$wantglaze" != "no"; then
AC_LANG_PUSH([C++])
AC_MSG_CHECKING([for usable glaze/glaze.hpp with C++ compiler])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <glaze/glaze.hpp>]], [[return 0;]])],
[AC_MSG_RESULT([yes])],
[
AC_MSG_RESULT([no])
AC_MSG_ERROR([glaze/glaze.hpp not found or not compilable with C++. Install glaze headers or disable with --with-glaze=no])
]
)
AC_LANG_POP([C++])
AC_DEFINE([HAVE_GLAZE], [1], [Mark that system has glaze])
fi

dnl Check if we want to use jsoncons or not
AC_MSG_CHECKING([whether to use jsoncons])
AC_ARG_WITH(
[jsoncons],
[AS_HELP_STRING([--with-jsoncons], [Enable jsoncons (default is enabled if exists)])],
[case "$withval" in
yes) wantjsoncons=yes ;;
no) wantjsoncons=no; AC_DEFINE([HAVE_JSONCONS], [0], [Mark that user does not want jsoncons]) ;;
*) AC_MSG_ERROR([Invalid value for --with-feature: $withval]) ;;
esac],
[wantjsoncons="notset"]
)

if test "$wantjsoncons" != "no"; then
AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([jsoncons/json.hpp], [],
[AC_MSG_ERROR([jsoncons/json.hpp not found. Install jsoncons headers or disable with --with-jsoncons=no])]
)
AC_LANG_POP([C++])
AC_DEFINE([HAVE_JSONCONS], [1], [Mark that system has jsoncons])
fi

AC_SUBST(JSONC_CFLAGS)
AC_SUBST(JSONC_LDADD)
AC_SUBST(JSONC_LDFLAGS)
AC_SUBST(JANSSON_CFLAGS)
AC_SUBST(JANSSON_LDADD)
AC_SUBST(JANSSON_LDFLAGS)
AC_SUBST(CJSON_CFLAGS)
AC_SUBST(CJSON_LDADD)
AC_SUBST(CJSON_LDFLAGS)
AC_SUBST(JSONCPP_CFLAGS)
AC_SUBST(JSONCPP_LDADD)
AC_SUBST(JSONCPP_LDFLAGS)
AC_SUBST(SIMDJSON_CFLAGS)
AC_SUBST(SIMDJSON_LDADD)
AC_SUBST(SIMDJSON_LDFLAGS)
AC_SUBST(YYJSON_CFLAGS)
AC_SUBST(YYJSON_LDADD)
AC_SUBST(YYJSON_LDFLAGS)
AC_SUBST(GLAZE_CFLAGS)

AC_ARG_WITH(
[file-buffer-size],
Expand Down
10 changes: 6 additions & 4 deletions src/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
AM_CXXFLAGS = -Wall -g -O0 -std=c++17 -fPIC
AM_CFLAGS = -Wall -g -O0
AM_LDFLAGS= $(YAJL_LDFLAGS)
AM_LDFLAGS= $(YAJL_LDFLAGS) $(JSONC_LDFLAGS) $(JANSSON_LDFLAGS) $(CJSON_LDFLAGS) $(JSONCPP_LDFLAGS) $(SIMDJSON_LDFLAGS) $(YYJSON_LDFLAGS)

bin_PROGRAMS = jsonbench

jsonbench_SOURCES = yajlparser.c rjparser.cpp nlparser.cpp jsonbench.c
jsonbench_CFLAGS = $(AM_CFLAGS) $(YAJL_CFLAGS)
jsonbench_LDADD = $(YAJL_LDADD)
jsonbench_SOURCES = yajlparser.c rjparser.cpp nlparser.cpp jsoncparser.c janssonparser.c cjsonparser.c jsoncppparser.cpp jsonconsparser.cpp simdjsonparser.cpp yyjsonparser.c glazeparser.cpp jsonbench.c
jsonbench_CPPFLAGS = $(YAJL_CFLAGS) $(JSONC_CFLAGS) $(JANSSON_CFLAGS) $(CJSON_CFLAGS) $(JSONCPP_CFLAGS) $(SIMDJSON_CFLAGS) $(YYJSON_CFLAGS) $(GLAZE_CFLAGS)
jsonbench_CFLAGS = $(AM_CFLAGS)
jsonbench_CXXFLAGS = $(AM_CXXFLAGS)
jsonbench_LDADD = $(YAJL_LDADD) $(JSONC_LDADD) $(JANSSON_LDADD) $(CJSON_LDADD) $(JSONCPP_LDADD) $(SIMDJSON_LDADD) $(YYJSON_LDADD)
Loading