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