From 02f26a88537b0b02dd0df77fc858e9449c7e3847 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sat, 30 Jan 2021 21:08:48 +0100 Subject: [PATCH] Add installation support from PR #1054 This is based on commit 887827b762111a8e6b4765513b4be212fa6a5426, discovered from https://github.com/g-truc/glm/pull/1054 --- CMakeLists.txt | 16 ++++++++++++++-- cmake/glm/glmConfig-version.cmake | 11 ----------- cmake/glm/glmConfig.cmake | 22 ---------------------- glm/CMakeLists.txt | 10 +++++++++- manual.md | 21 ++++++++++++++++++++- 5 files changed, 43 insertions(+), 37 deletions(-) delete mode 100644 cmake/glm/glmConfig-version.cmake delete mode 100644 cmake/glm/glmConfig.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 843e7546..642a5fde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,13 +3,25 @@ cmake_policy(VERSION 3.2) set(GLM_VERSION "0.9.9") project(glm VERSION ${GLM_VERSION} LANGUAGES CXX) -enable_testing() +message(STATUS "GLM: Version " ${GLM_VERSION}) add_subdirectory(glm) add_library(glm::glm ALIAS glm) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) -add_subdirectory(test) + include(CPack) + install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN "CMakeLists.txt" EXCLUDE) + install(EXPORT glm FILE glmConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm NAMESPACE glm::) + include(CMakePackageConfigHelpers) + write_basic_package_version_file("glmConfigVersion.cmake" COMPATIBILITY AnyNewerVersion) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm) + + include(CTest) + if(BUILD_TESTING) + add_subdirectory(test) + endif() endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) + + diff --git a/cmake/glm/glmConfig-version.cmake b/cmake/glm/glmConfig-version.cmake deleted file mode 100644 index 6e63a4a3..00000000 --- a/cmake/glm/glmConfig-version.cmake +++ /dev/null @@ -1,11 +0,0 @@ -if(${PACKAGE_FIND_VERSION_MAJOR} EQUAL 0) - if (${PACKAGE_FIND_VERSION} VERSION_LESS ${GLM_VERSION}) - set(PACKAGE_VERSION_COMPATIBLE 1) - endif() - if(${PACKAGE_FIND_VERSION} VERSION_EQUAL ${GLM_VERSION}) - set(PACKAGE_VERSION_EXACT 1) - endif() -else() - set(PACKAGE_VERSION_UNSUITABLE 1) -endif() - diff --git a/cmake/glm/glmConfig.cmake b/cmake/glm/glmConfig.cmake deleted file mode 100644 index 4fba5116..00000000 --- a/cmake/glm/glmConfig.cmake +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.2 FATAL_ERROR) -cmake_policy(VERSION 3.2) - -set(GLM_VERSION 0.9.9) - -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if (_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Set the old GLM_INCLUDE_DIRS variable for backwards compatibility -set(GLM_INCLUDE_DIRS ${_IMPORT_PREFIX}) - -add_library(glm::glm INTERFACE IMPORTED) -set_target_properties(glm::glm PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GLM_INCLUDE_DIRS}) - -mark_as_advanced(glm_DIR) -set(_IMPORT_PREFIX) - diff --git a/glm/CMakeLists.txt b/glm/CMakeLists.txt index 4ff51c81..cee0d2e7 100644 --- a/glm/CMakeLists.txt +++ b/glm/CMakeLists.txt @@ -43,7 +43,15 @@ source_group("SIMD Files" FILES ${SIMD_INLINE}) source_group("SIMD Files" FILES ${SIMD_HEADER}) add_library(glm INTERFACE) -target_include_directories(glm INTERFACE ../) + +include(GNUInstallDirs) + +target_include_directories(glm INTERFACE + $ + $ +) + +install(TARGETS glm EXPORT glm) if(BUILD_STATIC_LIBS) add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} diff --git a/manual.md b/manual.md index a7f6956f..d53df3d7 100644 --- a/manual.md +++ b/manual.md @@ -277,7 +277,26 @@ GLM does not depend on external libraries or headers such as ``, [` 1.5. Finding GLM with CMake -GLM packages a `glmConfig.cmake` and `glmConfig-version.cmake` in the root of the repository and the release archives. To find GLM with CMake you can pass `-Dglm_DIR=/cmake/glm/` when running CMake. You can then either add `${GLM_INCLUDE_DIRS}` to your target's include directories, or link against the imported `glm::glm` target. +When installed, GLM provides the CMake package configuration files `glmConfig.cmake` and `glmConfigVersion.cmake`. + +To use these configurations files, you may need to set the `glm_DIR` variable to the directory containing the configuration files `/lib/cmake/glm/`. + +Use the `find_package` CMake command to load the configurations into your project. Lastly, either link your executable against the `glm::glm` target or add `${GLM_INCLUDE_DIRS}` to your target's include directories: + +```cmake +set(glm_DIR /lib/cmake/glm) # if necessary +find_package(glm REQUIRED) +target_link_libraries( glm::glm) +``` + +To use GLM as a submodule in a project instead, use `add_subdirectory` to expose the same target, or add the directory to your target's + +```cmake +add_subdirectory(glm) +target_link_libraries( glm::glm) +# or +target_include_directories( glm) +``` ---
-- 2.29.2