From 6059c5767b8be1fdaf7b4c8bf6f435ee9f7e5f0c Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sat, 30 Jan 2021 21:08:48 +0100 Subject: [PATCH 01/11] Export the GLM target --- CMakeLists.txt | 1 + glm/CMakeLists.txt | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d597db0..9b268fc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ enable_testing() add_subdirectory(glm) add_library(glm::glm ALIAS glm) +install(EXPORT glm FILE glm-config.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake NAMESPACE glm::) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/glm/CMakeLists.txt b/glm/CMakeLists.txt index 4ff51c81..e97192cf 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 ../) + +target_include_directories(glm INTERFACE + $ + $ +) + +include(GNUInstallDirs) +install(TARGETS glm EXPORT glm) +install(DIRECTORY . DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/glm" PATTERN "CMakeLists.txt" EXCLUDE) if(BUILD_STATIC_LIBS) add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} From 6c9d74c3e08463f6cac06280e14c4610ff5bb05f Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sat, 30 Jan 2021 22:26:46 +0100 Subject: [PATCH 02/11] Generate glmConfigVersion, move glmConfig to its own folder --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b268fc1..9fe15320 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,11 @@ enable_testing() add_subdirectory(glm) add_library(glm::glm ALIAS glm) -install(EXPORT glm FILE glm-config.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake NAMESPACE glm::) +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 ARCH_INDEPENDENT) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) From f64239743eae62cceaaad4461ae486bc7f7d7a21 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sat, 30 Jan 2021 22:33:55 +0100 Subject: [PATCH 03/11] Remove the cmake dir superseded by generated files --- cmake/glm/glmConfig-version.cmake | 11 ----------- cmake/glm/glmConfig.cmake | 22 ---------------------- 2 files changed, 33 deletions(-) delete mode 100644 cmake/glm/glmConfig-version.cmake delete mode 100644 cmake/glm/glmConfig.cmake 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) - From 3e99386b6f29709b135cf602dc0fff8e13450244 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sat, 30 Jan 2021 23:00:41 +0100 Subject: [PATCH 04/11] Include CPack if project is built as standalone --- CMakeLists.txt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fe15320..13e64c3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,18 +16,20 @@ set(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH}.$ project(glm VERSION ${GLM_VERSION} LANGUAGES CXX) message(STATUS "GLM: Version " ${GLM_VERSION}) -enable_testing() - add_subdirectory(glm) add_library(glm::glm ALIAS glm) -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 ARCH_INDEPENDENT) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) -add_subdirectory(test) + include(CPack) + 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 ARCH_INDEPENDENT) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm) + + enable_testing() + add_subdirectory(test) endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) + + From 631faffab37bd14f0ac8cec74711d670538a2702 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sat, 30 Jan 2021 23:35:37 +0100 Subject: [PATCH 05/11] Export targets from top-level CMake file With some slight reordering of the code --- CMakeLists.txt | 9 +++++++-- glm/CMakeLists.txt | 4 ---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 13e64c3a..13818ee4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,13 +22,18 @@ add_library(glm::glm ALIAS glm) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) include(CPack) + include(GNUInstallDirs) + install(TARGETS glm EXPORT glm) + install(DIRECTORY glm TYPE INCLUDE 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 ARCH_INDEPENDENT) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm) - enable_testing() - add_subdirectory(test) + include(CTest) + if(BUILD_TESTING) + add_subdirectory(test) + endif() endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/glm/CMakeLists.txt b/glm/CMakeLists.txt index e97192cf..83c8eaa5 100644 --- a/glm/CMakeLists.txt +++ b/glm/CMakeLists.txt @@ -49,10 +49,6 @@ target_include_directories(glm INTERFACE $ ) -include(GNUInstallDirs) -install(TARGETS glm EXPORT glm) -install(DIRECTORY . DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/glm" PATTERN "CMakeLists.txt" EXCLUDE) - if(BUILD_STATIC_LIBS) add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} From e936ed35eaea255d115a46912d69e443f6c3004a Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sat, 30 Jan 2021 23:59:37 +0100 Subject: [PATCH 06/11] Resolve issues with CMake versions 3.13 and earlier --- CMakeLists.txt | 3 +-- glm/CMakeLists.txt | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 13818ee4..f6c43879 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,8 +23,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) include(CPack) include(GNUInstallDirs) - install(TARGETS glm EXPORT glm) - install(DIRECTORY glm TYPE INCLUDE PATTERN "CMakeLists.txt" EXCLUDE) + 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 ARCH_INDEPENDENT) diff --git a/glm/CMakeLists.txt b/glm/CMakeLists.txt index 83c8eaa5..f7ccb6f3 100644 --- a/glm/CMakeLists.txt +++ b/glm/CMakeLists.txt @@ -49,6 +49,8 @@ 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} ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} From 5797373dc2ff059c1608b6cdaa7a10d8d06740a9 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sun, 31 Jan 2021 00:49:58 +0100 Subject: [PATCH 07/11] Fix an issue with CMake versions 3.14 and earlier --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6c43879..c14ee3e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) 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 ARCH_INDEPENDENT) + 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) From dd457459b22d56ec2afc65b2b552013d4b212a05 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sun, 31 Jan 2021 14:10:15 +0100 Subject: [PATCH 08/11] Update manual to reflect changes --- manual.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/manual.md b/manual.md index 9267a08f..f98c24b8 100644 --- a/manual.md +++ b/manual.md @@ -277,18 +277,27 @@ GLM does not depend on external libraries or headers such as ``, [` 1.5. Finding GLM with CMake -GLM provides the CMake package configuration files `glmConfig.cmake` and `glmConfig-version.cmake`. +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 `/cmake/glm/`. +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 /cmake/glm) # if necessary +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) +``` + ---
From 3a4b55020eec8adef8effd74aed1b7b0e46ff795 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sun, 31 Jan 2021 14:50:00 +0100 Subject: [PATCH 09/11] Make sure installed glm::glm has the includes --- CMakeLists.txt | 1 - glm/CMakeLists.txt | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c14ee3e9..a55b7790 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,6 @@ add_library(glm::glm ALIAS glm) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) include(CPack) - include(GNUInstallDirs) 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) diff --git a/glm/CMakeLists.txt b/glm/CMakeLists.txt index f7ccb6f3..cee0d2e7 100644 --- a/glm/CMakeLists.txt +++ b/glm/CMakeLists.txt @@ -44,6 +44,8 @@ source_group("SIMD Files" FILES ${SIMD_HEADER}) add_library(glm INTERFACE) +include(GNUInstallDirs) + target_include_directories(glm INTERFACE $ $ From 887827b762111a8e6b4765513b4be212fa6a5426 Mon Sep 17 00:00:00 2001 From: Krzysztof Kurek Date: Sun, 31 Jan 2021 16:13:05 +0100 Subject: [PATCH 10/11] Adjust CI to use the newly generated config files --- .appveyor.yml | 5 +++-- .travis.yml | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 2b3807e1..5ce60281 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -74,10 +74,11 @@ before_build: $env:generator="$env:generator Win64" } echo generator="$env:generator" - cmake .. -G "$env:generator" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON "$env:GLM_ARGUMENTS" + cmake .. -G "$env:generator" -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER/install" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON "$env:GLM_ARGUMENTS" build_script: - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal + - cmake --build . --target install --parallel --config %CONFIGURATION% -- /m /v:minimal test_script: - ctest --parallel 4 --verbose -C %CONFIGURATION% @@ -85,7 +86,7 @@ test_script: - ps: | mkdir build_test_cmake cd build_test_cmake - cmake ..\test\cmake\ -G "$env:generator" -Dglm_DIR="$env:APPVEYOR_BUILD_FOLDER/cmake/glm/" + cmake ..\test\cmake\ -G "$env:generator" -DCMAKE_PREFIX_PATH="$env:APPVEYOR_BUILD_FOLDER/install" - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal deploy: off diff --git a/.travis.yml b/.travis.yml index 9809754e..413501fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -415,13 +415,14 @@ before_script: script: - mkdir ./build - cd ./build - - cmake -DCMAKE_CXX_COMPILER=$COMPILER ${CMAKE_BUILD_ENV} .. + - cmake -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/install -DCMAKE_CXX_COMPILER=$COMPILER ${CMAKE_BUILD_ENV} .. - cmake --build . ${CMAKE_ENV} - ctest ${CTEST_ENV} + - cmake --build . --target install ${CMAKE_ENV} - cd $TRAVIS_BUILD_DIR - mkdir ./build_test_cmake - cd ./build_test_cmake - - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -Dglm_DIR=$TRAVIS_BUILD_DIR/cmake/glm/ + - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -DCMAKE_PREFIX_PATH=$TRAVIS_BUILD_DIR/install - cmake --build . From 87de7f3f1098a7c6864eec64fd206928041e2eb9 Mon Sep 17 00:00:00 2001 From: Jaime Del Rey Garcia Date: Sat, 6 Mar 2021 08:58:58 +0100 Subject: [PATCH 11/11] Add target make uninstall in cmake files --- CMakeLists.txt | 9 ++++++++- cmake/cmake_uninstall.cmake.in | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 cmake/cmake_uninstall.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index a55b7790..b7641a28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,4 +35,11 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - +if (NOT TARGET uninstall) +configure_file(cmake/cmake_uninstall.cmake.in + cmake_uninstall.cmake IMMEDIATE @ONLY) + +add_custom_target(uninstall + "${CMAKE_COMMAND}" -P + "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake") +endif() diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in new file mode 100644 index 00000000..c2d34d47 --- /dev/null +++ b/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,21 @@ +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") +endif() + +file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif() + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif() +endforeach()