diff configure.ac @ 28751:699bba597610

Use specific configure test to detect RapidJSON PrettyWriter functionality (bug #59114) * configure.ac: Use an AC_COMPILE_IFELSE test to determine whether system has a working RapidJSON PrettyWriter implementation. Rename feature to HAVE_RAPIDJSON_PRETTYWRITER. Us AC_CACHE_CHECK to cache value since compilations are expensive. * jsonencode.cc: Rename HAVE_RAPIDJSON_DEV to HAVE_RAPIDJSON_PRETTYWRITER. Conditionally #include <rapidjson/prettywrite.h> based on HAVE_RAPIDJSON_PRETTYWRITER.
author Rik <rik@octave.org>
date Thu, 17 Sep 2020 07:42:22 -0700
parents 7db56a2694ae
children fd05bcb94ab4
line wrap: on
line diff
--- a/configure.ac	Thu Sep 17 05:07:02 2020 -0700
+++ b/configure.ac	Thu Sep 17 07:42:22 2020 -0700
@@ -1333,20 +1333,34 @@
 
 ### Check for RapidJSON header only library.
 
-AC_LANG_PUSH([C++])
-AC_CHECK_HEADER([rapidjson/rapidjson.h], [have_rapidjson=yes], [have_rapidjson=no
-  rapid_json_warning="RapidJSON library not found.  Octave will not be able to read or write JSON files."])
-if test "$have_rapidjson" = yes; then
-  AC_CHECK_HEADER([rapidjson/cursorstreamwrapper.h], [have_rapidjson_dev=yes], [have_rapidjson_dev=no
-    rapid_json_warning="RapidJSON 1.1.0 or older found.  Octave will not support the 'PrettyWriter' option in 'jsonencode'."])
-fi
-if test "$have_rapidjson" = yes; then
+AC_LANG_PUSH(C++)
+AC_CHECK_HEADER([rapidjson/rapidjson.h],
+                [have_rapidjson=yes], [have_rapidjson=no])
+
+if test $have_rapidjson = yes; then
   AC_DEFINE(HAVE_RAPIDJSON, 1, [Define to 1 if RapidJSON is available.])
-  if test "$have_rapidjson_dev" = yes; then
-    AC_DEFINE(HAVE_RAPIDJSON_DEV, 1, [Define to 1 if the development version of RapidJSON is available.])
+
+  ## Additional check on RapidJSON library that was found
+  AC_CACHE_CHECK([for working PrettyWriter in RapidJSON],
+    [octave_cv_rapidjson_has_prettywriter],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+      #include <rapidjson/prettywriter.h>
+      ]], [[
+      rapidjson::StringBuffer json;
+      rapidjson::PrettyWriter<rapidjson::StringBuffer, rapidjson::UTF8<>,
+                              rapidjson::UTF8<>, rapidjson::CrtAllocator,
+                              rapidjson::kWriteNanAndInfFlag> writer (json);
+      ]])],
+      [octave_cv_rapidjson_has_prettywriter=yes],
+      [octave_cv_rapidjson_has_prettywriter=no])
+    ])
+  if test $octave_cv_rapidjson_has_prettywriter = yes; then
+    AC_DEFINE(HAVE_RAPIDJSON_PRETTYWRITER, 1,
+      [Define to 1 if the RapidJSON PrettyWriter function is available.])
+  else
+    rapid_json_warning='Older RapidJSON library found.  The "PrettyWriter" option in jsonencode will be disabled.'
+    OCTAVE_CONFIGURE_WARNING([rapid_json_warning])
   fi
-else
-  OCTAVE_CONFIGURE_WARNING([rapid_json_warning])
 fi
 AC_LANG_POP([C++])