diff --git a/src/GetCommonLibraries.cmake b/src/GetCommonLibraries.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e14adad8ec0fb482c7ef773e6412f26fc3d336f2
--- /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 5c46147cf95075dafb59733cf18b3e07170709ca..ec136fc2cf4aa8f150c10d4db786bfcc6adb7ab3 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 0000000000000000000000000000000000000000..6e82282bbe9ee8867eb623225d1b72574884d066
--- /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 0000000000000000000000000000000000000000..15302d52be3df0e89905dc5a1777a387314c7ded
--- /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)