From 833face4f537344e0ae1ef76581fb642e02b35e8 Mon Sep 17 00:00:00 2001
From: Pascal Palenda <pascal.palenda@akustik.rwth-aachen.de>
Date: Mon, 13 Feb 2023 14:44:33 +0100
Subject: [PATCH] Add script to download common libraries

---
 src/GetCommonLibraries.cmake                  | 60 +++++++++++++++++++
 src/Index.cmake                               |  2 +
 .../patches/change_install_dir.patch          | 13 ++++
 .../patches/source_group_rel_path.patch       | 17 ++++++
 4 files changed, 92 insertions(+)
 create mode 100644 src/GetCommonLibraries.cmake
 create mode 100644 src/resources/patches/change_install_dir.patch
 create mode 100644 src/resources/patches/source_group_rel_path.patch

diff --git a/src/GetCommonLibraries.cmake b/src/GetCommonLibraries.cmake
new file mode 100644
index 0000000..e14adad
--- /dev/null
+++ b/src/GetCommonLibraries.cmake
@@ -0,0 +1,60 @@
+include_guard ()
+
+CPMAddPackage (
+	NAME GrpSrcByDir
+	GITHUB_REPOSITORY TheLartians/GroupSourcesByFolder.cmake
+	VERSION 1.0
+	DOWNLOAD_ONLY YES # Delay the inclusion of this to after the patch
+)
+
+if (GrpSrcByDir_ADDED)
+	find_package (Git 2.29 REQUIRED)
+	execute_process (
+		COMMAND ${GIT_EXECUTABLE} apply --check
+				"${CMAKE_CURRENT_LIST_DIR}/resources/patches/source_group_rel_path.patch"
+		RESULT_VARIABLE patch_ok
+		WORKING_DIRECTORY ${GrpSrcByDir_SOURCE_DIR}
+		ERROR_QUIET
+	)
+
+	if (${patch_ok} STREQUAL "0")
+		execute_process (
+			COMMAND ${GIT_EXECUTABLE} apply --whitespace=fix
+					"${CMAKE_CURRENT_LIST_DIR}/patches/source_group_rel_path.patch"
+			RESULT_VARIABLE patch_ok
+			WORKING_DIRECTORY ${GrpSrcByDir_SOURCE_DIR}
+		)
+	endif ()
+
+	# The file is now pathced, add it
+	add_subdirectory (${GrpSrcByDir_SOURCE_DIR} ${GrpSrcByDir_BINARY_DIR})
+endif ()
+
+CPMAddPackage (
+	NAME PkgProj
+	VERSION 1.10.0
+	GITHUB_REPOSITORY TheLartians/PackageProject.cmake
+	DOWNLOAD_ONLY YES # Delay the inclusion of this to after the patch
+)
+
+if (PkgProj_ADDED)
+	find_package (Git 2.29 REQUIRED)
+	execute_process (
+		COMMAND ${GIT_EXECUTABLE} apply --check "${CMAKE_CURRENT_LIST_DIR}/resources/patches/change_install_dir.patch"
+		RESULT_VARIABLE patch_ok
+		WORKING_DIRECTORY ${PkgProj_SOURCE_DIR}
+		ERROR_QUIET
+	)
+
+	if (${patch_ok} STREQUAL "0")
+		execute_process (
+			COMMAND ${GIT_EXECUTABLE} apply --whitespace=fix
+					"${CMAKE_CURRENT_LIST_DIR}/patches/change_install_dir.patch"
+			RESULT_VARIABLE patch_ok
+			WORKING_DIRECTORY ${PkgProj_SOURCE_DIR}
+		)
+	endif ()
+
+	# The file is now pathced, add it
+	add_subdirectory (${PkgProj_SOURCE_DIR} ${PkgProj_BINARY_DIR})
+endif ()
diff --git a/src/Index.cmake b/src/Index.cmake
index 5c46147..ec136fc 100644
--- a/src/Index.cmake
+++ b/src/Index.cmake
@@ -20,3 +20,5 @@ if (NOT (EXISTS ${CPM_MODULE_LOCATION}))
 endif ()
 
 include (${CPM_MODULE_LOCATION})
+
+include (${CMAKE_CURRENT_LIST_DIR}/GetCommonLibraries.cmake)
diff --git a/src/resources/patches/change_install_dir.patch b/src/resources/patches/change_install_dir.patch
new file mode 100644
index 0000000..6e82282
--- /dev/null
+++ b/src/resources/patches/change_install_dir.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 125d673..998cf1e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -126,7 +126,7 @@ function(packageProject)
+             NAMELINK_COMPONENT "${PROJECT_NAME}_Development"
+     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}${PROJECT_VERSION_SUFFIX}
+             COMPONENT "${PROJECT_NAME}_Development"
+-    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}${PROJECT_VERSION_SUFFIX}
++    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}$<IF:$<PLATFORM_ID:UNIX>,/${PROJECT_NAME}${PROJECT_VERSION_SUFFIX},>
+             COMPONENT "${PROJECT_NAME}_Runtime"
+     BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}${PROJECT_VERSION_SUFFIX}
+            COMPONENT "${PROJECT_NAME}_Runtime"
diff --git a/src/resources/patches/source_group_rel_path.patch b/src/resources/patches/source_group_rel_path.patch
new file mode 100644
index 0000000..15302d5
--- /dev/null
+++ b/src/resources/patches/source_group_rel_path.patch
@@ -0,0 +1,17 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2a948d5..ecb06c3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -7,7 +7,11 @@ function(GroupSourcesByFolder target)
+   get_target_property(sources ${target} SOURCES)
+ 
+   foreach(file ${sources})
+-    file(RELATIVE_PATH relative_file "${PROJECT_SOURCE_DIR}" ${file})
++    if(IS_ABSOLUTE ${file})
++      file(RELATIVE_PATH relative_file "${PROJECT_SOURCE_DIR}" ${file})
++    else()
++      set(relative_file ${file})
++    endif()
+     get_filename_component(dir "${relative_file}" PATH)
+     if(NOT "${dir}" STREQUAL "${last_dir}")
+       if(files)
-- 
GitLab