| 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('DisableTupleReferenceConversion') | |
| json_defines += 'JSON_DISABLE_TUPLE_REFERENCE_CONVERSION=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 | |
| if get_option('StrictBinaryUTF8') | |
| json_defines += 'JSON_STRICT_BINARY_UTF8=1' | |
| endif | |
| if get_option('DeleteDeprecatedFunctions') | |
| json_defines += 'JSON_DELETE_DEPRECATED_FUNCTIONS=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. The | |
| # include directory is given relative to the config files, so that the | |
| # installation can be relocated. This is not possible if includedir or datadir | |
| # is an absolute path outside the prefix (e.g., with the separate outputs of | |
| # Nix); then the absolute include directory is used, as CMake does. | |
| fs = import('fs') | |
| cmake_install_dir = get_option('datadir') / 'cmake' / meson.project_name() | |
| cmake_to_prefix = [] | |
| if fs.is_absolute(get_option('includedir')) or fs.is_absolute(cmake_install_dir) | |
| cmake_include_dir = (get_option('prefix') / get_option('includedir')).replace('\\', '/') | |
| else | |
| foreach component : cmake_install_dir.split('/') | |
| cmake_to_prefix += '..' | |
| endforeach | |
| cmake_include_dir = '${_IMPORT_PREFIX}/' + get_option('includedir') | |
| endif | |
| 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_DIR', cmake_include_dir) | |
| 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 |