From 849c82ca87b7d7cfe4ffef05bb60a304f9b77249 Mon Sep 17 00:00:00 2001
From: Christophe Riccio <christophe.riccio@unity3d.com>
Date: Sat, 2 Nov 2019 17:50:26 +0100
Subject: [PATCH 1/2] Bring back CMake installer scripts

---
 CMakeLists.txt                        |  73 ++++++++-
 cmake/cmake_uninstall.cmake.in        |  26 +++
 cmake/glm.pc.in                       |   7 +
 cmake/glmBuildConfig.cmake.in         |   6 +
 cmake/glmConfig.cmake.in              |   9 +
 glm/CMakeLists.txt                    |   7 +-
 6 files changed, 125 insertions(+), 8 deletions(-)
 create mode 100644 cmake/cmake_uninstall.cmake.in
 create mode 100644 cmake/glm.pc.in
 create mode 100644 cmake/glmBuildConfig.cmake.in
 create mode 100644 cmake/glmConfig.cmake.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 843e75465..ac3a6c157 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,10 +3,81 @@ cmake_policy(VERSION 3.2)
 
 set(GLM_VERSION "0.9.9")
 project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
+
 enable_testing()
 
+include_directories("${PROJECT_SOURCE_DIR}")
 add_subdirectory(glm)
-add_library(glm::glm ALIAS glm)
+
+##################################
+# CMake install / uninstall script
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
+install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+# CMake automatically adds an architecture compatibility check to make sure
+# 32 and 64 bit code is not accidentally mixed. For a header-only library this
+# is not required. The check can be disabled by temporarily unsetting
+# CMAKE_SIZEOF_VOID_P. In CMake 3.14 and later this can be achieved more cleanly
+# with write_basic_package_version_file(ARCH_INDEPENDENT).
+# TODO: Use this once a newer CMake can be required.
+set(GLM_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
+unset(CMAKE_SIZEOF_VOID_P)
+write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)
+set(CMAKE_SIZEOF_VOID_P ${GLM_SIZEOF_VOID_P})
+
+# build tree package config
+configure_file(cmake/glmBuildConfig.cmake.in glmConfig.cmake @ONLY)
+
+# install tree package config
+configure_package_config_file(
+	cmake/glmConfig.cmake.in
+	${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
+	INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
+	PATH_VARS CMAKE_INSTALL_INCLUDEDIR
+	NO_CHECK_REQUIRED_COMPONENTS_MACRO)
+
+install(FILES
+	"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
+	"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
+	DESTINATION ${GLM_INSTALL_CONFIGDIR})
+
+add_library(glm INTERFACE)
+target_include_directories(glm INTERFACE
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
+install(TARGETS glm EXPORT glmTargets)
+
+export(EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake")
+
+install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})
+
+# build pkg-config file
+configure_file("./cmake/glm.pc.in" "glm.pc" @ONLY)
+
+# install pkg-config file
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+
+export(PACKAGE glm)
+
+if(NOT TARGET uninstall)
+	configure_file(
+		${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
+		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
+		IMMEDIATE @ONLY)
+
+	add_custom_target(uninstall
+		COMMAND ${CMAKE_COMMAND} -P
+		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
+endif()
+
+
+##################################
+# CMake test
 
 if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
 
diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in
new file mode 100644
index 000000000..d00a51665
--- /dev/null
+++ b/cmake/cmake_uninstall.cmake.in
@@ -0,0 +1,26 @@
+if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+  message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+if (NOT DEFINED CMAKE_INSTALL_PREFIX)
+  set (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
+endif ()
+ message(${CMAKE_INSTALL_PREFIX})
+
+file(READ "@CMAKE_CURRENT_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(NOT "${rm_retval}" STREQUAL 0)
+  else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+    message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
+  endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+endforeach(file)
diff --git a/cmake/glm.pc.in b/cmake/glm.pc.in
new file mode 100644
index 000000000..fc5c7bb7f
--- /dev/null
+++ b/cmake/glm.pc.in
@@ -0,0 +1,7 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+includedir=${prefix}/include
+
+Name: GLM
+Description: OpenGL Mathematics
+Version: @GLM_VERSION@
+Cflags: -I${includedir}
diff --git a/cmake/glmBuildConfig.cmake.in b/cmake/glmBuildConfig.cmake.in
new file mode 100644
index 000000000..1258dea14
--- /dev/null
+++ b/cmake/glmBuildConfig.cmake.in
@@ -0,0 +1,6 @@
+set(GLM_VERSION "@GLM_VERSION@")
+set(GLM_INCLUDE_DIRS "@CMAKE_CURRENT_SOURCE_DIR@")
+
+if (NOT CMAKE_VERSION VERSION_LESS "3.0")
+    include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")
+endif()
diff --git a/cmake/glmConfig.cmake.in b/cmake/glmConfig.cmake.in
new file mode 100644
index 000000000..37d5ad811
--- /dev/null
+++ b/cmake/glmConfig.cmake.in
@@ -0,0 +1,9 @@
+set(GLM_VERSION "@GLM_VERSION@")
+
+@PACKAGE_INIT@
+
+set_and_check(GLM_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@")
+
+if (NOT CMAKE_VERSION VERSION_LESS "3.0")
+    include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")
+endif()
diff --git a/glm/CMakeLists.txt b/glm/CMakeLists.txt
index 4ff51c818..98759e794 100644
--- a/glm/CMakeLists.txt
+++ b/glm/CMakeLists.txt
@@ -42,8 +42,7 @@ source_group("SIMD Files" FILES ${SIMD_SOURCE})
 source_group("SIMD Files" FILES ${SIMD_INLINE})
 source_group("SIMD Files" FILES ${SIMD_HEADER})
 
-add_library(glm INTERFACE)
-target_include_directories(glm INTERFACE ../)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
 
 if(BUILD_STATIC_LIBS)
 add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
@@ -53,8 +52,6 @@ add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
 	${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}
 	${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}
 	${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})
-	target_link_libraries(glm_static PUBLIC glm)
-	add_library(glm::glm_static ALIAS glm_static)
 endif()
 
 if(BUILD_SHARED_LIBS)
@@ -65,6 +62,4 @@ add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
 	${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}
 	${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}
 	${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})
-	target_link_libraries(glm_shared PUBLIC glm)
-	add_library(glm::glm_shared ALIAS glm_shared)
 endif()

From 265661ab5c32aee49988400bf7533cb35352c598 Mon Sep 17 00:00:00 2001
From: Christophe Riccio <christophe.riccio@unity3d.com>
Date: Sat, 2 Nov 2019 17:57:32 +0100
Subject: [PATCH 2/2] Move dedicated install/uninstaller script inside cmake
 directory

---
 CMakeLists.txt       | 71 +++-----------------------------------------
 cmake/CMakeLists.txt | 66 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 70 insertions(+), 67 deletions(-)
 create mode 100644 cmake/CMakeLists.txt

diff --git a/CMakeLists.txt b/CMakeLists.txt
index ac3a6c157..37790c2cd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,73 +9,6 @@ enable_testing()
 include_directories("${PROJECT_SOURCE_DIR}")
 add_subdirectory(glm)
 
-##################################
-# CMake install / uninstall script
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
-
-include(GNUInstallDirs)
-include(CMakePackageConfigHelpers)
-
-set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
-install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
-
-# CMake automatically adds an architecture compatibility check to make sure
-# 32 and 64 bit code is not accidentally mixed. For a header-only library this
-# is not required. The check can be disabled by temporarily unsetting
-# CMAKE_SIZEOF_VOID_P. In CMake 3.14 and later this can be achieved more cleanly
-# with write_basic_package_version_file(ARCH_INDEPENDENT).
-# TODO: Use this once a newer CMake can be required.
-set(GLM_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
-unset(CMAKE_SIZEOF_VOID_P)
-write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)
-set(CMAKE_SIZEOF_VOID_P ${GLM_SIZEOF_VOID_P})
-
-# build tree package config
-configure_file(cmake/glmBuildConfig.cmake.in glmConfig.cmake @ONLY)
-
-# install tree package config
-configure_package_config_file(
-	cmake/glmConfig.cmake.in
-	${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
-	INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
-	PATH_VARS CMAKE_INSTALL_INCLUDEDIR
-	NO_CHECK_REQUIRED_COMPONENTS_MACRO)
-
-install(FILES
-	"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
-	"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
-	DESTINATION ${GLM_INSTALL_CONFIGDIR})
-
-add_library(glm INTERFACE)
-target_include_directories(glm INTERFACE
-	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
-install(TARGETS glm EXPORT glmTargets)
-
-export(EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake")
-
-install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})
-
-# build pkg-config file
-configure_file("./cmake/glm.pc.in" "glm.pc" @ONLY)
-
-# install pkg-config file
-install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-
-export(PACKAGE glm)
-
-if(NOT TARGET uninstall)
-	configure_file(
-		${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
-		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
-		IMMEDIATE @ONLY)
-
-	add_custom_target(uninstall
-		COMMAND ${CMAKE_COMMAND} -P
-		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
-endif()
-
-
 ##################################
 # CMake test
 
@@ -84,3 +17,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
 add_subdirectory(test)
 
 endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
+
+##################################
+# CMake install / uninstall script
+add_subdirectory(cmake)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
new file mode 100644
index 000000000..ec007bed3
--- /dev/null
+++ b/cmake/CMakeLists.txt
@@ -0,0 +1,66 @@
+##################################
+# CMake install / uninstall script
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
+install(DIRECTORY ${PROJECT_SOURCE_DIR}/glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+# CMake automatically adds an architecture compatibility check to make sure
+# 32 and 64 bit code is not accidentally mixed. For a header-only library this
+# is not required. The check can be disabled by temporarily unsetting
+# CMAKE_SIZEOF_VOID_P. In CMake 3.14 and later this can be achieved more cleanly
+# with write_basic_package_version_file(ARCH_INDEPENDENT).
+# TODO: Use this once a newer CMake can be required.
+set(GLM_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
+unset(CMAKE_SIZEOF_VOID_P)
+write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)
+set(CMAKE_SIZEOF_VOID_P ${GLM_SIZEOF_VOID_P})
+
+# build tree package config
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/glmBuildConfig.cmake.in glmConfig.cmake @ONLY)
+
+# install tree package config
+configure_package_config_file(
+	${CMAKE_CURRENT_SOURCE_DIR}/glmConfig.cmake.in
+	${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
+	INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
+	PATH_VARS CMAKE_INSTALL_INCLUDEDIR
+	NO_CHECK_REQUIRED_COMPONENTS_MACRO)
+
+install(FILES
+	"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
+	"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
+	DESTINATION ${GLM_INSTALL_CONFIGDIR})
+
+add_library(glm INTERFACE)
+target_include_directories(glm INTERFACE
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
+install(TARGETS glm EXPORT glmTargets)
+
+export(EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake")
+
+install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})
+
+# build pkg-config file
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/glm.pc.in" "glm.pc" @ONLY)
+
+# install pkg-config file
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+
+export(PACKAGE glm)
+
+if(NOT TARGET uninstall)
+	configure_file(
+		${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in
+		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
+		IMMEDIATE @ONLY)
+
+	add_custom_target(uninstall
+		COMMAND ${CMAKE_COMMAND} -P
+		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
+endif()
+
