This creates and installs a package version file and a package config
file. These are used by find_package with the CONFIG option, and are
roughly equivalent to pkgconfig, but is cmake specific rather than linux
specific.

v2: - Use configure_package_config_file() instead of config_file(),
      which generates helper macros and resolves relative paths allowing
      the entire install to be moved.
    - Update WaffleConfig.cmake.in to take advantage of
      configure_package_config_file()
    - Use SameMajorVersion instead of AnyNewerVersion for version
      compatibility. Since waffle uses apache's numbering scheme 2.0.0
      should not fulfill a requirement of 1.5.0 and vice versa.
v3: - Use CMAKE_BINARY_DIR (Jordan)
    - Move generation of cmake config to the same area of the cmake file
      as pkgconfig

Signed-off-by: Dylan Baker <dylanx.c.ba...@intel.com>
Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>
---
 CMakeLists.txt                      | 27 ++++++++++++++++++++++++++-
 cmake/Modules/.gitignore            |  2 ++
 cmake/Modules/WaffleConfig.cmake.in | 12 ++++++++++++
 3 files changed, 40 insertions(+), 1 deletion(-)
 create mode 100644 cmake/Modules/.gitignore
 create mode 100644 cmake/Modules/WaffleConfig.cmake.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index bde8096..6fabb54 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -128,7 +128,8 @@ if(waffle_build_examples)
 endif()
 
 # 
------------------------------------------------------------------------------
-# Install packaging files: waffle.pc, FindWaffle.cmake
+# Install packaging files: waffle.pc, FindWaffle.cmake,
+# WaffleConfigVersion.cmake, and WaffleConfig.cmake
 # 
------------------------------------------------------------------------------
 
 configure_file(waffle.pc.in ${waffle_libname}.pc @ONLY)
@@ -145,6 +146,30 @@ install(
     COMPONENT cmakefind
     )
 
+set(ConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/Waffle")
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file(
+    "${CMAKE_BINARY_DIR}/cmake/Modules/WaffleConfigVersion.cmake"
+    VERSION "${waffle_version}"
+    COMPATIBILITY SameMajorVersion
+)
+
+configure_package_config_file(
+    cmake/Modules/WaffleConfig.cmake.in
+    cmake/Modules/WaffleConfig.cmake
+    INSTALL_DESTINATION "${ConfigPackageLocation}"
+    PATH_VARS CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_INCLUDEDIR
+    NO_CHECK_REQUIRED_COMPONENTS_MACRO
+)
+
+install(
+    FILES
+        "${CMAKE_BINARY_DIR}/cmake/Modules/WaffleConfigVersion.cmake"
+        "${CMAKE_BINARY_DIR}/cmake/Modules/WaffleConfig.cmake"
+    DESTINATION "${ConfigPackageLocation}"
+    COMPONENT devel
+)
+
 # 
------------------------------------------------------------------------------
 # Install core documentation
 # 
------------------------------------------------------------------------------
diff --git a/cmake/Modules/.gitignore b/cmake/Modules/.gitignore
new file mode 100644
index 0000000..9742f46
--- /dev/null
+++ b/cmake/Modules/.gitignore
@@ -0,0 +1,2 @@
+WaffleConfigVersion.cmake
+WaffleConfig.cmake
diff --git a/cmake/Modules/WaffleConfig.cmake.in 
b/cmake/Modules/WaffleConfig.cmake.in
new file mode 100644
index 0000000..b60b470
--- /dev/null
+++ b/cmake/Modules/WaffleConfig.cmake.in
@@ -0,0 +1,12 @@
+# Config module for Waffle
+#
+# Provides the following variables
+# Waffle_INCLUDE_DIRS - Directories to include
+# Waffle_LIBRARIES    - Libraries to link
+# Waffle_LIBRARY_DIRS - Library directories to search for link libraries
+
+@PACKAGE_INIT@
+
+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@")
-- 
2.2.1

_______________________________________________
waffle mailing list
waffle@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/waffle

Reply via email to