From b71cfa674db5828a2be04a42ce9996d6677629ee Mon Sep 17 00:00:00 2001
From: Dylan Baker <dylan@pnwbakers.com>
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 <eric.engestrom@intel.com>
---
 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

