From b71cfa674db5828a2be04a42ce9996d6677629ee Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 7 Jun 2019 15:36:09 -0700 Subject: [PATCH] meson: Generate cmake config and version files if meson is new enough Meson 0.50.0 added a module similar to the pkg-config module for generating cmake config files. Since the CMake build system provides these the meson build system should as well. v2: - Bump version to 0.50 instead of incorrect 0.49 v3: - remove TODO comment that this fixes - Add a definition of set_and_check for meson-generated Config files. Reviewed-by: Eric Engestrom --- cmake/Modules/WaffleConfig.cmake.in | 10 ++++++++++ meson.build | 2 -- src/waffle/meson.build | 20 ++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/WaffleConfig.cmake.in b/cmake/Modules/WaffleConfig.cmake.in index b60b470..4e19755 100644 --- a/cmake/Modules/WaffleConfig.cmake.in +++ b/cmake/Modules/WaffleConfig.cmake.in @@ -7,6 +7,16 @@ @PACKAGE_INIT@ +# This should only be used for meson +if (NOT DEFINED set_and_check) + macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() + endmacro() +endif() + set_and_check(Waffle_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@/@waffle_libname@") set_and_check(Waffle_LIBRARY_DIRS "@PACKAGE_CMAKE_INSTALL_LIBDIR@") set(Waffle_LIBRARIES "@waffle_libname@") diff --git a/meson.build b/meson.build index 29fda22..22b7f59 100644 --- a/meson.build +++ b/meson.build @@ -231,5 +231,3 @@ endif if get_option('build-examples') subdir('examples') endif - -# TODO: CMake config file diff --git a/src/waffle/meson.build b/src/waffle/meson.build index 322df40..cd68ddf 100644 --- a/src/waffle/meson.build +++ b/src/waffle/meson.build @@ -211,6 +211,26 @@ pkg.generate( description : 'A library for selecting an OpenGL API and windows system at runtime.', ) +if meson.version().version_compare('>= 0.50') + cmake = import('cmake') + cmake.write_basic_package_version_file( + name : 'Waffle', + version : meson.project_version(), + compatibility : 'SameMajorVersion', + ) + + cmake_conf = configuration_data() + cmake_conf.set('waffle_libname', waffle_name) + cmake_conf.set('PACKAGE_CMAKE_INSTALL_INCLUDEDIR', join_paths('${PACKAGE_PREFIX_DIR}', get_option('includedir'))) + cmake_conf.set('PACKAGE_CMAKE_INSTALL_LIBDIR', join_paths('${PACKAGE_PREFIX_DIR}', get_option('libdir'))) + + cmake.configure_package_config_file( + name : 'Waffle', + input : '../../cmake/Modules/WaffleConfig.cmake.in', + configuration : cmake_conf, + ) +endif + if get_option('build-tests') if get_option('default_library') == 'shared' # The unit tests need to poke at internals of the library, but with a -- 2.24.1