From fcca265035a92eac2773f85a79a8ad142a9bb795 Mon Sep 17 00:00:00 2001 From: Andrea Pappacoda Date: Thu, 3 Feb 2022 19:04:57 +0100 Subject: [PATCH] cmake: configure_package_config_file can now take a dict --- docs/markdown/CMake-module.md | 1 + .../snippets/cmake_configure_package_config_dict.md | 5 +++++ mesonbuild/modules/cmake.py | 7 +++++-- test cases/cmake/20 cmake file/meson.build | 4 +--- 4 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 docs/markdown/snippets/cmake_configure_package_config_dict.md diff --git a/docs/markdown/CMake-module.md b/docs/markdown/CMake-module.md index 8e6c4e939..a5c0c7e0e 100644 --- a/docs/markdown/CMake-module.md +++ b/docs/markdown/CMake-module.md @@ -262,6 +262,7 @@ the `configuration` parameter. * `input`: the template file where that will be treated for variable substitutions contained in `configuration`. * `install_dir`: optional installation directory, it defaults to `$(libdir)/cmake/$(name)`. * `configuration`: a `configuration_data` object that will be used for variable substitution in the template file. + *Since 0.62.0* it can take a dictionary instead. Example: diff --git a/docs/markdown/snippets/cmake_configure_package_config_dict.md b/docs/markdown/snippets/cmake_configure_package_config_dict.md new file mode 100644 index 000000000..253a88741 --- /dev/null +++ b/docs/markdown/snippets/cmake_configure_package_config_dict.md @@ -0,0 +1,5 @@ +## cmake.configure_package_config_file can now take a dict + +The `configuration` kwarg of the `configure_package_config_file()` function +from the `cmake` module can now take a dict object, just like the regular +`configure_file()` function. diff --git a/mesonbuild/modules/cmake.py b/mesonbuild/modules/cmake.py index 26577d593..b046371a5 100644 --- a/mesonbuild/modules/cmake.py +++ b/mesonbuild/modules/cmake.py @@ -53,7 +53,7 @@ if T.TYPE_CHECKING: class ConfigurePackageConfigFile(TypedDict): - configuration: build.ConfigurationData + configuration: T.Union[build.ConfigurationData, dict] input: T.Union[str, mesonlib.File] install_dir: T.Optional[str] name: str @@ -347,7 +347,7 @@ class CmakeModule(ExtensionModule): @noPosargs @typed_kwargs( 'cmake.configure_package_config_file', - KwargInfo('configuration', build.ConfigurationData, required=True), + KwargInfo('configuration', (build.ConfigurationData, dict), required=True), KwargInfo('input', (str, mesonlib.File, ContainerTypeInfo(list, mesonlib.File)), required=True, validator=lambda x: 'requires exactly one file' if isinstance(x, list) and len(x) != 1 else None, @@ -372,6 +372,9 @@ class CmakeModule(ExtensionModule): install_dir = os.path.join(state.environment.coredata.get_option(mesonlib.OptionKey('libdir')), 'cmake', name) conf = kwargs['configuration'] + if isinstance(conf, dict): + FeatureNew.single_use('cmake.configure_package_config_file dict as configuration', '0.62.0', state.subproject, location=state.current_node) + conf = build.ConfigurationData(conf) prefix = state.environment.coredata.get_option(mesonlib.OptionKey('prefix')) abs_install_dir = install_dir diff --git a/test cases/cmake/20 cmake file/meson.build b/test cases/cmake/20 cmake file/meson.build index 758bbee2d..5c45d66f9 100644 --- a/test cases/cmake/20 cmake file/meson.build +++ b/test cases/cmake/20 cmake file/meson.build @@ -4,11 +4,9 @@ project( cmake = import('cmake') -cmake_conf = configuration_data() -cmake_conf.set_quoted('foo', 'bar') cmake.configure_package_config_file( name : 'foolib', input : 'foolib.cmake.in', install_dir : get_option('libdir') / 'cmake', - configuration : cmake_conf, + configuration : {'foo': '"bar"'}, )