Meson updates (#1124)

* Modernize meson.build

* Make tests optional
* Use `files()` for quick sanity checks

* Bump version to 1.9.3

* Bump SOVERSION, as some functions were removed
  and structs were changed, as determined by
  libabigail.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e06331..c05ddcc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -70,7 +70,7 @@
         # 2. /include/json/version.h
         # 3. /CMakeLists.txt
         # IMPORTANT: also update the SOVERSION!!
-        VERSION 1.9.2 # <major>[.<minor>[.<patch>[.<tweak>]]]
+        VERSION 1.9.3 # <major>[.<minor>[.<patch>[.<tweak>]]]
         LANGUAGES CXX)
 
 message(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}")
diff --git a/include/json/version.h b/include/json/version.h
index ff94372..0f29834 100644
--- a/include/json/version.h
+++ b/include/json/version.h
@@ -9,10 +9,10 @@
 // 3. /CMakeLists.txt
 // IMPORTANT: also update the SOVERSION!!
 
-#define JSONCPP_VERSION_STRING "1.9.2"
+#define JSONCPP_VERSION_STRING "1.9.3"
 #define JSONCPP_VERSION_MAJOR 1
 #define JSONCPP_VERSION_MINOR 9
-#define JSONCPP_VERSION_PATCH 2
+#define JSONCPP_VERSION_PATCH 3
 #define JSONCPP_VERSION_QUALIFIER
 #define JSONCPP_VERSION_HEXA                                                   \
   ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) |             \
diff --git a/meson.build b/meson.build
index 1bc94a8..c293203 100644
--- a/meson.build
+++ b/meson.build
@@ -9,7 +9,7 @@
   # 2. /include/json/version.h
   # 3. /CMakeLists.txt
   # IMPORTANT: also update the SOVERSION!!
-  version : '1.9.2',
+  version : '1.9.3',
   default_options : [
     'buildtype=release',
     'cpp_std=c++11',
@@ -18,7 +18,7 @@
   meson_version : '>= 0.49.0')
 
 
-jsoncpp_headers = [
+jsoncpp_headers = files([
   'include/json/allocator.h',
   'include/json/assertions.h',
   'include/json/config.h',
@@ -28,7 +28,8 @@
   'include/json/reader.h',
   'include/json/value.h',
   'include/json/version.h',
-  'include/json/writer.h']
+  'include/json/writer.h',
+])
 jsoncpp_include_directories = include_directories('include')
 
 install_headers(
@@ -44,13 +45,12 @@
 endif
 
 jsoncpp_lib = library(
-  'jsoncpp',
-  [ jsoncpp_headers,
-    'src/lib_json/json_tool.h',
+  'jsoncpp', files([
     'src/lib_json/json_reader.cpp',
     'src/lib_json/json_value.cpp',
-    'src/lib_json/json_writer.cpp'],
-  soversion : 22,
+    'src/lib_json/json_writer.cpp',
+  ]),
+  soversion : 23,
   install : true,
   include_directories : jsoncpp_include_directories,
   cpp_args: dll_export_flag)
@@ -66,18 +66,21 @@
 jsoncpp_dep = declare_dependency(
   include_directories : jsoncpp_include_directories,
   link_with : jsoncpp_lib,
-  version : meson.project_version(),
-  )
+  version : meson.project_version())
 
 # tests
-python = import('python').find_installation()
+if meson.is_subproject() or not get_option('tests')
+  subdir_done()
+endif
+
+python = import('python').find_installation('python3')
 
 jsoncpp_test = executable(
-  'jsoncpp_test',
-  [ 'src/test_lib_json/jsontest.cpp',
-    'src/test_lib_json/jsontest.h',
+  'jsoncpp_test', files([
+    'src/test_lib_json/jsontest.cpp',
     'src/test_lib_json/main.cpp',
-    'src/test_lib_json/fuzz.cpp'],
+    'src/test_lib_json/fuzz.cpp',
+  ]),
   include_directories : jsoncpp_include_directories,
   link_with : jsoncpp_lib,
   install : false,
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..9c215ae
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,5 @@
+option(
+  'tests',
+  type : 'boolean',
+  value : true,
+  description : 'Enable building tests')