mirror of
https://github.com/nlohmann/json.git
synced 2026-09-29 06:14:53 +01:00
Finish the Meson changes from #4452: - Offer all eight options that change the CMake target, named like the CMake options without the JSON_ prefix. MultipleHeaders defaults to false so that existing Meson users keep the single header. - Add a compile definition only for an option that differs from its default, exactly as target_compile_definitions does. Before, the GlobalUDLs and ImplicitConversions definitions were inverted and were also added in the default configuration. - Keep the nlohmann_json_multiple_headers dependency that earlier versions of meson.build provided. - Put the definitions into the pkg-config file and the Meson-generated nlohmann_jsonTargets.cmake, and install the pkg-config file into <datadir>/pkgconfig like CMake does. - Ship meson_options.txt in include.zip, since meson.build now reads options and the zip is documented as a Meson subproject. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
103 lines
3.4 KiB
Meson
103 lines
3.4 KiB
Meson
project('nlohmann_json',
|
|
'cpp',
|
|
version : '3.12.0',
|
|
license : 'MIT',
|
|
meson_version : '>= 0.64',
|
|
default_options: ['cpp_std=c++11'],
|
|
)
|
|
|
|
if get_option('MultipleHeaders')
|
|
incdir = 'include'
|
|
else
|
|
incdir = 'single_include'
|
|
endif
|
|
|
|
# The same compile definitions as the CMake target (see target_compile_definitions
|
|
# in CMakeLists.txt): only an option that differs from its default adds one.
|
|
json_defines = []
|
|
if not get_option('GlobalUDLs')
|
|
json_defines += 'JSON_USE_GLOBAL_UDLS=0'
|
|
endif
|
|
if not get_option('ImplicitConversions')
|
|
json_defines += 'JSON_USE_IMPLICIT_CONVERSIONS=0'
|
|
endif
|
|
if get_option('DisableEnumSerialization')
|
|
json_defines += 'JSON_DISABLE_ENUM_SERIALIZATION=1'
|
|
endif
|
|
if get_option('Diagnostics')
|
|
json_defines += 'JSON_DIAGNOSTICS=1'
|
|
endif
|
|
if get_option('Diagnostic_Positions')
|
|
json_defines += 'JSON_DIAGNOSTIC_POSITIONS=1'
|
|
endif
|
|
if get_option('LegacyDiscardedValueComparison')
|
|
json_defines += 'JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1'
|
|
endif
|
|
if get_option('StrictNulHandling')
|
|
json_defines += 'JSON_STRICT_NUL_HANDLING=1'
|
|
endif
|
|
|
|
cpp_args = []
|
|
foreach define : json_defines
|
|
cpp_args += '-D' + define
|
|
endforeach
|
|
|
|
nlohmann_json_dep = declare_dependency(
|
|
compile_args: cpp_args,
|
|
include_directories: include_directories(incdir)
|
|
)
|
|
meson.override_dependency('nlohmann_json', nlohmann_json_dep)
|
|
|
|
# The multi-header version under the name earlier versions of this file used
|
|
nlohmann_json_multiple_headers = declare_dependency(
|
|
compile_args: cpp_args,
|
|
include_directories: include_directories('include')
|
|
)
|
|
|
|
if not meson.is_subproject()
|
|
install_subdir(
|
|
incdir / 'nlohmann',
|
|
install_dir: get_option('includedir'),
|
|
install_tag: 'devel',
|
|
)
|
|
|
|
pkgc = import('pkgconfig')
|
|
pkgc.generate(name: 'nlohmann_json',
|
|
version: meson.project_version(),
|
|
description: 'JSON for Modern C++',
|
|
extra_cflags: cpp_args,
|
|
install_dir: get_option('datadir') / 'pkgconfig',
|
|
)
|
|
|
|
# CMake package config files, so that find_package(nlohmann_json) works
|
|
cmake_install_dir = get_option('datadir') / 'cmake' / meson.project_name()
|
|
cmake_to_prefix = []
|
|
foreach component : cmake_install_dir.split('/')
|
|
cmake_to_prefix += '..'
|
|
endforeach
|
|
|
|
cmake_conf = configuration_data()
|
|
cmake_conf.set('PROJECT_NAME', meson.project_name())
|
|
cmake_conf.set('PROJECT_VERSION', meson.project_version())
|
|
cmake_conf.set('PROJECT_VERSION_MAJOR', meson.project_version().split('.')[0])
|
|
cmake_conf.set('NLOHMANN_JSON_TARGET_NAME', meson.project_name())
|
|
cmake_conf.set('NLOHMANN_JSON_TARGETS_EXPORT_NAME', meson.project_name() + 'Targets')
|
|
cmake_conf.set('NLOHMANN_JSON_INCLUDE_INSTALL_DIR', get_option('includedir'))
|
|
cmake_conf.set('NLOHMANN_JSON_CONFIG_TO_PREFIX', '/'.join(cmake_to_prefix))
|
|
cmake_conf.set('NLOHMANN_JSON_COMPILE_DEFINITIONS', ';'.join(json_defines))
|
|
|
|
foreach cmake_file : [
|
|
['cmake/config.cmake.in', 'nlohmann_jsonConfig.cmake'],
|
|
['cmake/nlohmann_jsonConfigVersion.cmake.in', 'nlohmann_jsonConfigVersion.cmake'],
|
|
['cmake/nlohmann_jsonTargets.cmake.in', 'nlohmann_jsonTargets.cmake'],
|
|
]
|
|
configure_file(
|
|
input: cmake_file[0],
|
|
output: cmake_file[1],
|
|
configuration: cmake_conf,
|
|
format: 'cmake@',
|
|
install_dir: cmake_install_dir,
|
|
)
|
|
endforeach
|
|
endif
|