mirror of
https://github.com/nlohmann/json.git
synced 2026-10-01 04:00:31 +00:00
Complete the Meson options and match CMake's compile definitions
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>
This commit is contained in:
@@ -213,7 +213,7 @@ json.tar.xz:
|
|||||||
# We use `-X` to make the resulting ZIP file reproducible, see
|
# We use `-X` to make the resulting ZIP file reproducible, see
|
||||||
# <https://content.pivotal.io/blog/barriers-to-deterministic-reproducible-zip-files>.
|
# <https://content.pivotal.io/blog/barriers-to-deterministic-reproducible-zip-files>.
|
||||||
include.zip: BUILD.bazel
|
include.zip: BUILD.bazel
|
||||||
zip -9 --recurse-paths -X include.zip $(SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) BUILD.bazel MODULE.bazel meson.build LICENSE.MIT
|
zip -9 --recurse-paths -X include.zip $(SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) BUILD.bazel MODULE.bazel meson.build meson_options.txt LICENSE.MIT
|
||||||
|
|
||||||
# Create the files for a release and add signatures and hashes.
|
# Create the files for a release and add signatures and hashes.
|
||||||
release: include.zip json.tar.xz
|
release: include.zip json.tar.xz
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
#
|
#
|
||||||
# CMake installations generate this file with install(EXPORT ...). Meson cannot
|
# CMake installations generate this file with install(EXPORT ...). Meson cannot
|
||||||
# do that, but as the library is header-only, the target only needs an include
|
# do that, but as the library is header-only, the target only needs an include
|
||||||
# directory and the C++ standard. Paths are computed relative to this file so
|
# directory, the C++ standard, and the compile definitions of the options that
|
||||||
# that the installation can be relocated (e.g., into a sysroot).
|
# differ from their defaults. Paths are computed relative to this file so that
|
||||||
|
# the installation can be relocated (e.g., into a sysroot).
|
||||||
|
|
||||||
if(TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@)
|
if(TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@)
|
||||||
return()
|
return()
|
||||||
@@ -25,4 +26,12 @@ else()
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(_NLOHMANN_JSON_COMPILE_DEFINITIONS "@NLOHMANN_JSON_COMPILE_DEFINITIONS@")
|
||||||
|
if(_NLOHMANN_JSON_COMPILE_DEFINITIONS)
|
||||||
|
set_target_properties(@PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@ PROPERTIES
|
||||||
|
INTERFACE_COMPILE_DEFINITIONS "${_NLOHMANN_JSON_COMPILE_DEFINITIONS}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
unset(_NLOHMANN_JSON_COMPILE_DEFINITIONS)
|
||||||
unset(_IMPORT_PREFIX)
|
unset(_IMPORT_PREFIX)
|
||||||
|
|||||||
+39
-7
@@ -12,12 +12,35 @@ else
|
|||||||
incdir = 'single_include'
|
incdir = 'single_include'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
cpp_args = [
|
# The same compile definitions as the CMake target (see target_compile_definitions
|
||||||
'-DJSON_USE_GLOBAL_UDLS=@0@'.format(
|
# in CMakeLists.txt): only an option that differs from its default adds one.
|
||||||
(not get_option('GlobalUDLs')).to_int()),
|
json_defines = []
|
||||||
'-DJSON_USE_IMPLICIT_CONVERSIONS=@0@'.format(
|
if not get_option('GlobalUDLs')
|
||||||
(not get_option('ImplicitConversions')).to_int()),
|
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(
|
nlohmann_json_dep = declare_dependency(
|
||||||
compile_args: cpp_args,
|
compile_args: cpp_args,
|
||||||
@@ -25,6 +48,12 @@ nlohmann_json_dep = declare_dependency(
|
|||||||
)
|
)
|
||||||
meson.override_dependency('nlohmann_json', nlohmann_json_dep)
|
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()
|
if not meson.is_subproject()
|
||||||
install_subdir(
|
install_subdir(
|
||||||
incdir / 'nlohmann',
|
incdir / 'nlohmann',
|
||||||
@@ -35,7 +64,9 @@ if not meson.is_subproject()
|
|||||||
pkgc = import('pkgconfig')
|
pkgc = import('pkgconfig')
|
||||||
pkgc.generate(name: 'nlohmann_json',
|
pkgc.generate(name: 'nlohmann_json',
|
||||||
version: meson.project_version(),
|
version: meson.project_version(),
|
||||||
description: 'JSON for Modern C++'
|
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 package config files, so that find_package(nlohmann_json) works
|
||||||
@@ -53,6 +84,7 @@ if not meson.is_subproject()
|
|||||||
cmake_conf.set('NLOHMANN_JSON_TARGETS_EXPORT_NAME', meson.project_name() + 'Targets')
|
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_INCLUDE_INSTALL_DIR', get_option('includedir'))
|
||||||
cmake_conf.set('NLOHMANN_JSON_CONFIG_TO_PREFIX', '/'.join(cmake_to_prefix))
|
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 : [
|
foreach cmake_file : [
|
||||||
['cmake/config.cmake.in', 'nlohmann_jsonConfig.cmake'],
|
['cmake/config.cmake.in', 'nlohmann_jsonConfig.cmake'],
|
||||||
|
|||||||
+31
-1
@@ -1,7 +1,7 @@
|
|||||||
option(
|
option(
|
||||||
'MultipleHeaders',
|
'MultipleHeaders',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
value: true,
|
value: false,
|
||||||
description: 'Use non-amalgamated version of the library',
|
description: 'Use non-amalgamated version of the library',
|
||||||
)
|
)
|
||||||
option(
|
option(
|
||||||
@@ -16,3 +16,33 @@ option(
|
|||||||
value: true,
|
value: true,
|
||||||
description: 'Enable implicit conversions',
|
description: 'Enable implicit conversions',
|
||||||
)
|
)
|
||||||
|
option(
|
||||||
|
'DisableEnumSerialization',
|
||||||
|
type: 'boolean',
|
||||||
|
value: false,
|
||||||
|
description: 'Disable default integer enum serialization',
|
||||||
|
)
|
||||||
|
option(
|
||||||
|
'Diagnostics',
|
||||||
|
type: 'boolean',
|
||||||
|
value: false,
|
||||||
|
description: 'Use extended diagnostic messages',
|
||||||
|
)
|
||||||
|
option(
|
||||||
|
'Diagnostic_Positions',
|
||||||
|
type: 'boolean',
|
||||||
|
value: false,
|
||||||
|
description: 'Enable diagnostic positions',
|
||||||
|
)
|
||||||
|
option(
|
||||||
|
'LegacyDiscardedValueComparison',
|
||||||
|
type: 'boolean',
|
||||||
|
value: false,
|
||||||
|
description: 'Enable legacy discarded value comparison',
|
||||||
|
)
|
||||||
|
option(
|
||||||
|
'StrictNulHandling',
|
||||||
|
type: 'boolean',
|
||||||
|
value: false,
|
||||||
|
description: 'Enable strict NUL-byte handling',
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user