blob: f68db30dd3f1e646039474c601c02fcc0bb634b4 [file] [log] [blame]
David Seiferted258de2017-06-26 06:11:51 +02001project(
2 'jsoncpp',
3 'cpp',
Jordan Bayles7b286982019-08-13 22:41:43 -07004
5 # Note: version must be updated in three places when doing a release. This
6 # annoying process ensures that amalgamate, CMake, and meson all report the
7 # correct version.
8 # 1. /meson.build
9 # 2. /include/json/version.h
10 # 3. /CMakeLists.txt
11 # IMPORTANT: also update the SOVERSION!!
Jordan Bayles9059f5c2020-09-25 19:19:16 -070012 version : '1.9.4',
David Seiferted258de2017-06-26 06:11:51 +020013 default_options : [
14 'buildtype=release',
Christopher Dunn899894f2017-12-21 01:22:40 -060015 'cpp_std=c++11',
David Seiferted258de2017-06-26 06:11:51 +020016 'warning_level=1'],
17 license : 'Public Domain',
Jordan Bayles645cd042019-11-08 19:49:16 -080018 meson_version : '>= 0.49.0')
David Seiferted258de2017-06-26 06:11:51 +020019
David Seiferted258de2017-06-26 06:11:51 +020020
David Seifert6bc55ec2020-01-07 02:23:50 +010021jsoncpp_headers = files([
David Seiferted258de2017-06-26 06:11:51 +020022 'include/json/allocator.h',
23 'include/json/assertions.h',
David Seiferted258de2017-06-26 06:11:51 +020024 'include/json/config.h',
Jordan Bayles00b979f2019-09-25 14:04:53 -070025 'include/json/json_features.h',
David Seiferted258de2017-06-26 06:11:51 +020026 'include/json/forwards.h',
27 'include/json/json.h',
28 'include/json/reader.h',
29 'include/json/value.h',
Jordan Bayles7b286982019-08-13 22:41:43 -070030 'include/json/version.h',
David Seifert6bc55ec2020-01-07 02:23:50 +010031 'include/json/writer.h',
32])
David Seiferted258de2017-06-26 06:11:51 +020033jsoncpp_include_directories = include_directories('include')
34
35install_headers(
36 jsoncpp_headers,
37 subdir : 'json')
38
Peter Spiess-Knaflb87f6db2018-06-18 11:28:56 +020039if get_option('default_library') == 'shared' and meson.get_compiler('cpp').get_id() == 'msvc'
40 dll_export_flag = '-DJSON_DLL_BUILD'
41 dll_import_flag = '-DJSON_DLL'
42else
Christopher Dunn59d41de2018-06-23 17:34:40 -050043 dll_export_flag = []
44 dll_import_flag = []
Peter Spiess-Knaflb87f6db2018-06-18 11:28:56 +020045endif
46
David Seiferted258de2017-06-26 06:11:51 +020047jsoncpp_lib = library(
David Seifert6bc55ec2020-01-07 02:23:50 +010048 'jsoncpp', files([
David Seiferted258de2017-06-26 06:11:51 +020049 'src/lib_json/json_reader.cpp',
50 'src/lib_json/json_value.cpp',
David Seifert6bc55ec2020-01-07 02:23:50 +010051 'src/lib_json/json_writer.cpp',
52 ]),
Christopher Dunnc4904b22021-11-03 11:39:54 -050053 soversion : 25,
David Seiferted258de2017-06-26 06:11:51 +020054 install : true,
Peter Spiess-Knaflb87f6db2018-06-18 11:28:56 +020055 include_directories : jsoncpp_include_directories,
56 cpp_args: dll_export_flag)
David Seiferted258de2017-06-26 06:11:51 +020057
58import('pkgconfig').generate(
59 libraries : jsoncpp_lib,
60 version : meson.project_version(),
61 name : 'jsoncpp',
62 filebase : 'jsoncpp',
63 description : 'A C++ library for interacting with JSON')
64
65# for libraries bundling jsoncpp
Jason S Zang43fd41d2017-09-16 11:19:30 +010066jsoncpp_dep = declare_dependency(
David Seiferted258de2017-06-26 06:11:51 +020067 include_directories : jsoncpp_include_directories,
68 link_with : jsoncpp_lib,
David Seifert6bc55ec2020-01-07 02:23:50 +010069 version : meson.project_version())
David Seiferted258de2017-06-26 06:11:51 +020070
71# tests
David Seifert6bc55ec2020-01-07 02:23:50 +010072if meson.is_subproject() or not get_option('tests')
73 subdir_done()
74endif
75
Daniel Engberg45733df2020-06-03 12:19:51 +020076python = import('python').find_installation()
David Seiferted258de2017-06-26 06:11:51 +020077
78jsoncpp_test = executable(
David Seifert6bc55ec2020-01-07 02:23:50 +010079 'jsoncpp_test', files([
80 'src/test_lib_json/jsontest.cpp',
Google AutoFuzz Team879a5b82019-06-26 17:40:59 -040081 'src/test_lib_json/main.cpp',
David Seifert6bc55ec2020-01-07 02:23:50 +010082 'src/test_lib_json/fuzz.cpp',
83 ]),
David Seiferted258de2017-06-26 06:11:51 +020084 include_directories : jsoncpp_include_directories,
85 link_with : jsoncpp_lib,
Peter Spiess-Knaflb87f6db2018-06-18 11:28:56 +020086 install : false,
87 cpp_args: dll_import_flag)
David Seiferted258de2017-06-26 06:11:51 +020088test(
89 'unittest_jsoncpp_test',
90 jsoncpp_test)
91
92jsontestrunner = executable(
93 'jsontestrunner',
94 'src/jsontestrunner/main.cpp',
95 include_directories : jsoncpp_include_directories,
96 link_with : jsoncpp_lib,
Peter Spiess-Knaflb87f6db2018-06-18 11:28:56 +020097 install : false,
98 cpp_args: dll_import_flag)
David Seiferted258de2017-06-26 06:11:51 +020099test(
100 'unittest_jsontestrunner',
101 python,
102 args : [
103 '-B',
104 join_paths(meson.current_source_dir(), 'test/runjsontests.py'),
105 jsontestrunner,
Jordan Baylesb3492212019-11-14 10:52:13 -0800106 join_paths(meson.current_source_dir(), 'test/data')],
David Seiferted258de2017-06-26 06:11:51 +0200107 )
Jordan Bayles9e23f662019-11-14 10:41:25 -0800108test(
109 'jsonchecker_jsontestrunner',
110 python,
Christopher Dunna0b8c3e2020-04-24 09:24:22 -0500111 is_parallel : false,
Jordan Bayles9e23f662019-11-14 10:41:25 -0800112 args : [
113 '-B',
114 join_paths(meson.current_source_dir(), 'test/runjsontests.py'),
115 '--with-json-checker',
116 jsontestrunner,
Jordan Baylesb3492212019-11-14 10:52:13 -0800117 join_paths(meson.current_source_dir(), 'test/data')],
118 workdir : join_paths(meson.current_source_dir(), 'test/data'),
Jordan Bayles9e23f662019-11-14 10:41:25 -0800119 )