File 0001-cmake-add-option-ENABLE_QT_SUFFIX-to-add-major-versi.patch of Package mingw32-vsgQt5

From d3043e761c474e61a1b370569f8fae67842e94e7 Mon Sep 17 00:00:00 2001
From: Ralf Habacker <ralf.habacker@freenet.de>
Date: Tue, 16 Jan 2024 08:35:24 +0100
Subject: [PATCH] cmake: add option 'ENABLE_QT_SUFFIX' to add major version as
 suffix for creating files and binaries

---
 CMakeLists.txt                       | 18 +++++++--
 cmake/vsgQtMacros.cmake              | 57 ++++++++++++++++++++++++++++
 examples/vsgqtmdi/CMakeLists.txt     |  6 +++
 examples/vsgqtviewer/CMakeLists.txt  |  6 +++
 examples/vsgqtwindows/CMakeLists.txt |  6 +++
 src/vsgQt/CMakeLists.txt             | 18 +++++++--
 6 files changed, 105 insertions(+), 6 deletions(-)
 create mode 100644 cmake/vsgQtMacros.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a49e426..d4ed89f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,6 +11,9 @@ set(VSGQT_RELEASE_CANDIDATE 1)
 set(VSGQT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "Root source directory of vsgQt")
 set(VSGQT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "Root binary directory of vsgQt")
 
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+include(vsgQtMacros)
+
 # set the use of C++17 globally as all examples require it
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -19,14 +22,23 @@ set(QT_PACKAGE_NAME Qt5 CACHE STRING "Set Qt package name, i.e. Qt5 or Qt6.")
 
 find_package(vsg 1.0.8)
 
-vsg_setup_dir_vars()
-vsg_setup_build_vars()
-
 find_package(vsgXchange) # only used by examples
 
 # if Qt5 then we need 5.10 or later
 find_package(${QT_PACKAGE_NAME} COMPONENTS Widgets REQUIRED)
 
+option(ENABLE_QT_SUFFIX "Add Qt major version to generated binaries" ON)
+if(ENABLE_QT_SUFFIX)
+    set(VSGQT_PACKAGE_NAME vsg${QT_PACKAGE_NAME})
+    set(VSGQT_PACKAGE_SUFFIX ${${QT_PACKAGE_NAME}_VERSION_MAJOR})
+else()
+    set(VSGQT_PACKAGE_NAME ${PROJECT_NAME})
+    set(VSGQT_PACKAGE_SUFFIX)
+endif()
+
+vsg_qt_setup_dir_vars(EXPORT_PREFIX ${VSGQT_PACKAGE_NAME})
+vsg_setup_build_vars()
+
 vsg_add_target_clang_format(
     FILES
         include/*/*.h
diff --git a/cmake/vsgQtMacros.cmake b/cmake/vsgQtMacros.cmake
new file mode 100644
index 0000000..5f4dfb9
--- /dev/null
+++ b/cmake/vsgQtMacros.cmake
@@ -0,0 +1,57 @@
+
+#
+# create and install cmake support files
+#
+# available arguments:
+#
+#    [EXPORT_PREFIX <prefix>] prefix for the export target name
+#                             If not specified, ${PROJECT_NAME} is used
+#
+# @TODO: merge into vsg
+macro(vsg_qt_setup_dir_vars)
+    set(options)
+    set(oneValueArgs EXPORT_PREFIX)
+    set(multiValueArgs)
+    cmake_parse_arguments(VQSDV "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+    set(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin)
+    set(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib)
+
+    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
+
+    include(GNUInstallDirs)
+
+    if(VQSDV_EXPORT_PREFIX)
+        set(EXPORT_PREFIX ${VQSDV_EXPORT_PREFIX})
+    else()
+        set(EXPORT_PREFIX ${PROJECT_NAME})
+    endif()
+
+    if(WIN32)
+        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
+        # set up local bin directory to place all binaries
+        make_directory(${OUTPUT_BINDIR})
+        make_directory(${OUTPUT_LIBDIR})
+        set(VSGQT_INSTALL_TARGETS_DEFAULT_FLAGS
+            EXPORT ${EXPORT_PREFIX}Targets
+            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+            LIBRARY DESTINATION ${CMAKE_INSTALL_BINDIR}
+            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+            INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+        )
+    else()
+        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
+        # set up local bin directory to place all binaries
+        make_directory(${OUTPUT_LIBDIR})
+        set(VSGQT_INSTALL_TARGETS_DEFAULT_FLAGS
+            EXPORT ${EXPORT_PREFIX}Targets
+            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+            LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+            INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+        )
+    endif()
+endmacro()
+
+
diff --git a/examples/vsgqtmdi/CMakeLists.txt b/examples/vsgqtmdi/CMakeLists.txt
index 190f2fb..e1b7655 100644
--- a/examples/vsgqtmdi/CMakeLists.txt
+++ b/examples/vsgqtmdi/CMakeLists.txt
@@ -14,6 +14,12 @@ if (vsgXchange_FOUND)
     target_link_libraries(vsgqtmdi vsgXchange::vsgXchange)
 endif()
 
+if(ENABLE_QT_SUFFIX)
+    set_target_properties(vsgqtmdi
+        PROPERTIES
+            OUTPUT_NAME vsgqtmdi${VSGQT_PACKAGE_SUFFIX}
+    )
+endif()
 
 install(TARGETS vsgqtmdi DESTINATION bin)
 
diff --git a/examples/vsgqtviewer/CMakeLists.txt b/examples/vsgqtviewer/CMakeLists.txt
index 129c326..6a5a19c 100644
--- a/examples/vsgqtviewer/CMakeLists.txt
+++ b/examples/vsgqtviewer/CMakeLists.txt
@@ -14,6 +14,12 @@ if (vsgXchange_FOUND)
     target_link_libraries(vsgqtviewer vsgXchange::vsgXchange)
 endif()
 
+if(ENABLE_QT_SUFFIX)
+    set_target_properties(vsgqtviewer
+        PROPERTIES
+            OUTPUT_NAME vsgqtviewer${VSGQT_PACKAGE_SUFFIX}
+    )
+endif()
 
 install(TARGETS vsgqtviewer DESTINATION bin)
 
diff --git a/examples/vsgqtwindows/CMakeLists.txt b/examples/vsgqtwindows/CMakeLists.txt
index fa035d7..97f8cb1 100644
--- a/examples/vsgqtwindows/CMakeLists.txt
+++ b/examples/vsgqtwindows/CMakeLists.txt
@@ -14,6 +14,12 @@ if (vsgXchange_FOUND)
     target_link_libraries(vsgqtwindows vsgXchange::vsgXchange)
 endif()
 
+if(ENABLE_QT_SUFFIX)
+    set_target_properties(vsgqtwindows
+        PROPERTIES
+            OUTPUT_NAME vsgqtwindows${VSGQT_PACKAGE_SUFFIX}
+    )
+endif()
 
 install(TARGETS vsgqtwindows DESTINATION bin)
 
diff --git a/src/vsgQt/CMakeLists.txt b/src/vsgQt/CMakeLists.txt
index e0c3ef1..6ba6e32 100644
--- a/src/vsgQt/CMakeLists.txt
+++ b/src/vsgQt/CMakeLists.txt
@@ -60,6 +60,13 @@ set_target_properties(vsgQt
         CXX_STANDARD 17
 )
 
+if(ENABLE_QT_SUFFIX)
+    set_target_properties(vsgQt
+        PROPERTIES
+            OUTPUT_NAME ${VSGQT_PACKAGE_NAME}
+    )
+endif()
+
 target_include_directories(vsgQt
     PUBLIC
         $<BUILD_INTERFACE:${VSGQT_SOURCE_DIR}/include>
@@ -74,10 +81,15 @@ target_link_libraries(vsgQt
 
 add_library_export_header(vsgQt)
 
-install(TARGETS vsgQt ${INSTALL_TARGETS_DEFAULT_FLAGS})
-install(DIRECTORY ${VSGQT_SOURCE_DIR}/include/vsgQt DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(TARGETS vsgQt ${VSGQT_INSTALL_TARGETS_DEFAULT_FLAGS})
+install(
+    DIRECTORY ${VSGQT_SOURCE_DIR}/include/vsgQt
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${VSGQT_PACKAGE_NAME}
+    PATTERN "vsgQt/*"
+)
 
-file(WRITE ${VSGQT_BINARY_DIR}/vsgQtConfig.cmake.in "#generated by cmake, do not change\ninclude(\${CMAKE_CURRENT_LIST_DIR}/vsgQtTargets.cmake)\n")
+file(WRITE ${VSGQT_BINARY_DIR}/vsgQtConfig.cmake.in "#generated by cmake, do not change\ninclude(\${CMAKE_CURRENT_LIST_DIR}/${VSGQT_PACKAGE_NAME}Targets.cmake)\n")
 vsg_add_cmake_support_files(
     CONFIG_TEMPLATE ${VSGQT_BINARY_DIR}/vsgQtConfig.cmake.in
+    PREFIX ${VSGQT_PACKAGE_NAME}
 )
-- 
2.43.0

openSUSE Build Service is sponsored by